1. 增加状态池初始化

2. 把状态池注入需要的地方
This commit is contained in:
2025-09-08 23:30:59 +08:00
parent 15f500210f
commit bdbab31181
4 changed files with 31 additions and 8 deletions

View File

@@ -56,13 +56,16 @@ type API struct {
// websocketService WebSocket服务
websocketService *service.WebSocketService
// deviceStatusPool 设备状态池
deviceStatusPool *service.DeviceStatusPool
// logger 日志记录器
logger *logs.Logger
}
// NewAPI 创建并返回一个新的API实例
// 初始化Gin引擎和相关配置
func NewAPI(cfg *config.Config, userRepo repository.UserRepo, operationHistoryRepo repository.OperationHistoryRepo, deviceControlRepo repository.DeviceControlRepo, deviceRepo repository.DeviceRepo, websocketService *service.WebSocketService) *API {
func NewAPI(cfg *config.Config, userRepo repository.UserRepo, operationHistoryRepo repository.OperationHistoryRepo, deviceControlRepo repository.DeviceControlRepo, deviceRepo repository.DeviceRepo, websocketService *service.WebSocketService, deviceStatusPool *service.DeviceStatusPool) *API {
// 设置Gin为发布模式
gin.SetMode(gin.DebugMode)
@@ -93,7 +96,7 @@ func NewAPI(cfg *config.Config, userRepo repository.UserRepo, operationHistoryRe
operationController := operation.NewController(operationHistoryRepo)
// 创建设备控制控制器
deviceController := device.NewController(deviceControlRepo, deviceRepo, websocketService)
deviceController := device.NewController(deviceControlRepo, deviceRepo, websocketService, deviceStatusPool)
// 创建WebSocket管理器
websocketManager := websocket.NewManager(websocketService, deviceRepo)
@@ -114,6 +117,7 @@ func NewAPI(cfg *config.Config, userRepo repository.UserRepo, operationHistoryRe
authMiddleware: authMiddleware,
websocketManager: websocketManager,
websocketService: websocketService,
deviceStatusPool: deviceStatusPool,
logger: logs.NewLogger(),
}
}

View File

@@ -116,15 +116,17 @@ type Controller struct {
deviceControlRepo repository.DeviceControlRepo
deviceRepo repository.DeviceRepo
websocketService *service.WebSocketService
deviceStatusPool *service.DeviceStatusPool
logger *logs.Logger
}
// NewController 创建设备控制控制器实例
func NewController(deviceControlRepo repository.DeviceControlRepo, deviceRepo repository.DeviceRepo, websocketService *service.WebSocketService) *Controller {
func NewController(deviceControlRepo repository.DeviceControlRepo, deviceRepo repository.DeviceRepo, websocketService *service.WebSocketService, deviceStatusPool *service.DeviceStatusPool) *Controller {
return &Controller{
deviceControlRepo: deviceControlRepo,
deviceRepo: deviceRepo,
websocketService: websocketService,
deviceStatusPool: deviceStatusPool,
logger: logs.NewLogger(),
}
}

View File

@@ -42,6 +42,9 @@ type Application struct {
// WebSocketService WebSocket服务实例
WebSocketService *service.WebSocketService
// DeviceStatusPool 设备状态池实例
DeviceStatusPool *service.DeviceStatusPool
// Config 应用配置
Config *config.Config
@@ -90,13 +93,18 @@ func (app *Application) Start() error {
// 初始化设备仓库
app.DeviceRepo = repository.NewDeviceRepo(app.Storage.GetDB())
// 初始化设备状态池
app.DeviceStatusPool = service.NewDeviceStatusPool()
// 初始化WebSocket服务
app.WebSocketService = service.NewWebSocketService(app.DeviceRepo)
// 设置设备状态池
app.WebSocketService.SetDeviceStatusPool(app.DeviceStatusPool)
// 设置WebSocket超时时间
app.WebSocketService.SetDefaultTimeout(app.Config.GetWebSocketTimeout())
// 初始化API组件
app.API = api.NewAPI(app.Config, app.UserRepo, app.OperationHistoryRepo, app.DeviceControlRepo, app.DeviceRepo, app.WebSocketService)
app.API = api.NewAPI(app.Config, app.UserRepo, app.OperationHistoryRepo, app.DeviceControlRepo, app.DeviceRepo, app.WebSocketService, app.DeviceStatusPool)
// 初始化任务执行器组件(使用5个工作协程)
app.TaskExecutor = task.NewExecutor(5)

View File

@@ -75,15 +75,24 @@ type WebSocketService struct {
// deviceRepo 设备仓库
deviceRepo repository.DeviceRepo
// deviceStatusPool 设备状态池
deviceStatusPool *DeviceStatusPool
}
// SetDeviceStatusPool 设置设备状态池
func (ws *WebSocketService) SetDeviceStatusPool(pool *DeviceStatusPool) {
ws.deviceStatusPool = pool
}
// NewWebSocketService 创建WebSocket服务实例
func NewWebSocketService(deviceRepo repository.DeviceRepo) *WebSocketService {
return &WebSocketService{
connections: make(map[string]*DeviceConnection),
logger: logs.NewLogger(),
defaultTimeout: 5, // 默认5秒超时
deviceRepo: deviceRepo,
connections: make(map[string]*DeviceConnection),
logger: logs.NewLogger(),
defaultTimeout: 5, // 默认5秒超时
deviceRepo: deviceRepo,
deviceStatusPool: NewDeviceStatusPool(),
}
}