代码拉取完成,页面将自动刷新
同步操作将从 iBUILDING-X/driver-box 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package modbus
import (
"errors"
"gitee.com/watertreestar/edge/driverbox/config"
"gitee.com/watertreestar/edge/driverbox/helper"
"gitee.com/watertreestar/edge/driverbox/plugin"
lua "github.com/yuin/gopher-lua"
"go.uber.org/zap"
)
// Plugin 驱动插件
type Plugin struct {
logger *zap.Logger // 日志记录器
config config.Config // 核心配置
callback plugin.OnReceiveHandler // 回调函数
adapter plugin.ProtocolAdapter // 协议适配器
connPool map[string]*connector // 连接器
ls *lua.LState // lua 虚拟机
}
// Initialize 插件初始化
func (p *Plugin) Initialize(logger *zap.Logger, c config.Config, handler plugin.OnReceiveHandler, ls *lua.LState) (err error) {
p.logger = logger
p.config = c
p.callback = handler
p.ls = ls
// 初始化协议适配器
p.adapter = &adapter{
scriptDir: c.Key,
ls: ls,
}
// 初始化连接池
if err = p.initConnPool(); err != nil {
return
}
return nil
}
// ProtocolAdapter 适配器
func (p *Plugin) ProtocolAdapter() plugin.ProtocolAdapter {
return p.adapter
}
// Connector 连接器
func (p *Plugin) Connector(deviceName, pointName string) (conn plugin.Connector, err error) {
// 获取连接key
device, ok := helper.CoreCache.GetDeviceByDeviceAndPoint(deviceName, pointName)
if !ok {
return nil, errors.New("not found device connection key")
}
c, ok := p.connPool[device.ConnectionKey]
if !ok {
return nil, errors.New("not found connection key, key is " + device.ConnectionKey)
}
c.mutex.Lock()
err = c.client.Open()
if err != nil {
c.mutex.Unlock()
return nil, err
}
return c, nil
}
// Destroy 销毁驱动插件
func (p *Plugin) Destroy() error {
if p.ls != nil {
p.ls.Close()
}
return nil
}
// initConnPool 初始化连接池
func (p *Plugin) initConnPool() (err error) {
p.connPool = make(map[string]*connector)
for key, _ := range p.config.Connections {
var c connectorConfig
if err = helper.Map2Struct(p.config.Connections[key], &c); err != nil {
return
}
conn := &connector{
plugin: p,
config: c,
}
conn.connect()
p.connPool[key] = conn
}
return
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。