Ai
43 Star 346 Fork 190

GVPiBUILDING-X/driver-box

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
driverbox.go 4.27 KB
一键复制 编辑 原始数据 按行查看 历史
三刀 提交于 2025-07-28 16:43 +08:00 . refactor(plugin): 重构插件销毁逻辑
package driverbox
import (
"context"
"fmt"
"github.com/ibuilding-x/driver-box/driverbox/config"
"github.com/ibuilding-x/driver-box/driverbox/event"
"github.com/ibuilding-x/driver-box/driverbox/export"
"github.com/ibuilding-x/driver-box/driverbox/helper"
"github.com/ibuilding-x/driver-box/driverbox/helper/crontab"
"github.com/ibuilding-x/driver-box/driverbox/plugin"
"github.com/ibuilding-x/driver-box/driverbox/restful"
"github.com/ibuilding-x/driver-box/internal/bootstrap"
"github.com/ibuilding-x/driver-box/internal/core"
export0 "github.com/ibuilding-x/driver-box/internal/export"
plugins0 "github.com/ibuilding-x/driver-box/internal/plugins"
"github.com/julienschmidt/httprouter"
"go.uber.org/zap"
"net/http"
"os"
"path"
)
var srv *http.Server
func Start() error {
//第一步:加载配置文件DriverConfig
err := initEnvConfig()
if err != nil {
fmt.Println("init env config error", err)
return err
}
//第二步:初始化日志记录器
if err := helper.InitLogger(os.Getenv("LOG_LEVEL")); err != nil {
fmt.Println("init logger error", err)
return err
}
//第三步:启动定时器
helper.Crontab = crontab.Instance()
//第四步:启动Export
for _, item := range export0.Exports {
if err := item.Init(); err != nil {
helper.Logger.Error("init export error", zap.Error(err))
}
}
// 第五步:启动 REST 服务
go func() {
srv = &http.Server{Addr: ":" + helper.EnvConfig.HttpListen, Handler: restful.HttpRouter}
e := srv.ListenAndServe()
if e != nil {
helper.Logger.Error("start rest server error", zap.Error(e))
}
}()
//第六步:启动driver-box插件
err = bootstrap.LoadPlugins()
if err != nil {
helper.Logger.Error(err.Error())
}
if err != nil {
TriggerEvents(event.EventCodeServiceStatus, GetMetadata().SerialNo, event.ServiceStatusError)
} else {
TriggerEvents(event.EventCodeServiceStatus, GetMetadata().SerialNo, event.ServiceStatusHealthy)
}
helper.Logger.Info("start driver-box success.")
return err
}
func Stop() error {
var e error
//清理存量定时器
if helper.Crontab != nil {
crontab.Instance().Clear()
helper.Crontab = nil
}
if srv != nil {
e = srv.Shutdown(context.Background())
srv = nil
restful.HttpRouter = httprouter.New()
http.DefaultServeMux = http.NewServeMux()
}
for _, item := range export0.Exports {
e = item.Destroy()
if e != nil {
helper.Logger.Error("destroy export error", zap.Error(e))
}
}
export0.Exports = make([]export.Export, 0)
bootstrap.DestroyPlugins()
plugins0.Manager.Clear()
// 3. 停止影子服务设备状态监听、删除影子服务
helper.DeviceShadow.StopStatusListener()
helper.DeviceShadow = nil
// 4. 清除核心缓存数据
helper.CoreCache.Reset()
helper.CoreCache = nil
return nil
}
func initEnvConfig() error {
helper.EnvConfig = config.EnvConfig{}
dir := os.Getenv(config.ENV_RESOURCE_PATH)
if dir == "" {
config.ResourcePath = "./res"
} else {
config.ResourcePath = dir
}
//驱动配置文件存放目录
helper.EnvConfig.ConfigPath = path.Join(config.ResourcePath, "driver")
//http服务绑定host
httpListen := os.Getenv(config.ENV_HTTP_LISTEN)
if httpListen != "" {
helper.EnvConfig.HttpListen = httpListen
} else {
helper.EnvConfig.HttpListen = "8081"
}
logPath := os.Getenv(config.ENV_LOG_PATH)
if logPath != "" {
helper.EnvConfig.LogPath = logPath
}
return nil
}
// 触发某个设备点位的读取动作,指令会下发值驱动层
func ReadPoint(deviceId string, pointName string) error {
return core.SendSinglePoint(deviceId, plugin.ReadMode, plugin.PointData{
PointName: pointName,
})
}
// 触发某个设备点位的写入操作
func WritePoint(deviceId string, pointData plugin.PointData) error {
return core.SendSinglePoint(deviceId, plugin.WriteMode, pointData)
}
// 批量写点位
func WritePoints(deviceId string, pointData []plugin.PointData) error {
return core.SendBatchWrite(deviceId, pointData)
}
//// 获取当前被注册至 driver-box 的所有export
//func GetExports() []export.Export {
// return export0.Exports
//}
// 触发运行时事件
func TriggerEvents(eventCode string, key string, value interface{}) {
export0.TriggerEvents(eventCode, key, value)
}
func UpdateMetadata(f func(*config.Metadata)) {
f(&core.Metadata)
}
func GetMetadata() config.Metadata {
return core.Metadata
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/iBUILDING-X/driver-box.git
git@gitee.com:iBUILDING-X/driver-box.git
iBUILDING-X
driver-box
driver-box
master

搜索帮助