diff --git a/internal/api/api.go b/internal/api/api.go index ad3b7eb..12db0e4 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -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(), } } diff --git a/internal/controller/device/device.go b/internal/controller/device/device.go index ec38e79..36b4480 100644 --- a/internal/controller/device/device.go +++ b/internal/controller/device/device.go @@ -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(), } } diff --git a/internal/core/application.go b/internal/core/application.go index 95dfff1..9bfb42e 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -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) diff --git a/internal/service/websocket.go b/internal/service/websocket.go index cfbde4e..df613c2 100644 --- a/internal/service/websocket.go +++ b/internal/service/websocket.go @@ -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(), } }