// Package core 提供核心应用协调功能 // 负责初始化和协调API、任务执行器和存储等核心组件 // 管理整个应用的生命周期 package core import ( "fmt" "git.huangwc.com/pig/pig-farm-controller/internal/api" "git.huangwc.com/pig/pig-farm-controller/internal/config" "git.huangwc.com/pig/pig-farm-controller/internal/logs" "git.huangwc.com/pig/pig-farm-controller/internal/service" "git.huangwc.com/pig/pig-farm-controller/internal/storage/db" "git.huangwc.com/pig/pig-farm-controller/internal/storage/repository" "git.huangwc.com/pig/pig-farm-controller/internal/task" ) // Application 代表核心应用结构 // 协调API、任务执行器和存储组件的工作 type Application struct { // Storage 存储组件实例 Storage db.Storage // API API组件实例 API *api.API // TaskExecutor 任务执行器组件实例 TaskExecutor *task.Executor // UserRepo 用户仓库实例 UserRepo repository.UserRepo // OperationHistoryRepo 操作历史仓库实例 OperationHistoryRepo repository.OperationHistoryRepo // DeviceControlRepo 设备控制仓库实例 DeviceControlRepo repository.DeviceControlRepo // DeviceRepo 设备仓库实例 DeviceRepo repository.DeviceRepo // WebSocketService WebSocket服务实例 WebSocketService *service.WebSocketService // Config 应用配置 Config *config.Config // logger 日志组件实例 logger *logs.Logger } // NewApplication 创建并返回一个新的核心应用实例 // 初始化所有核心组件 func NewApplication(cfg *config.Config) *Application { return &Application{ Config: cfg, logger: logs.NewLogger(), } } // Start 启动核心应用 // 按正确顺序启动所有核心组件 func (app *Application) Start() error { // 从配置中获取数据库连接字符串 connectionString := app.Config.GetDatabaseConnectionString() // 从配置中获取连接池参数 maxOpenConns := app.Config.Database.MaxOpenConns maxIdleConns := app.Config.Database.MaxIdleConns connMaxLifetime := app.Config.Database.ConnMaxLifetime // 初始化存储组件 app.Storage = db.NewStorage(connectionString, maxOpenConns, maxIdleConns, connMaxLifetime) // 启动存储组件 if err := app.Storage.Connect(); err != nil { return fmt.Errorf("存储连接失败: %v", err) } app.logger.Info("存储连接成功") // 初始化用户仓库 app.UserRepo = repository.NewUserRepo(app.Storage.GetDB()) // 初始化操作历史仓库 app.OperationHistoryRepo = repository.NewOperationHistoryRepo(app.Storage.GetDB()) // 初始化设备控制仓库 app.DeviceControlRepo = repository.NewDeviceControlRepo(app.Storage.GetDB()) // 初始化设备仓库 app.DeviceRepo = repository.NewDeviceRepo(app.Storage.GetDB()) // 初始化WebSocket服务 app.WebSocketService = service.NewWebSocketService() // 设置WebSocket超时时间 app.WebSocketService.SetDefaultTimeout(app.Config.GetWebSocketTimeout()) // 初始化API组件 app.API = api.NewAPI(app.Config, app.UserRepo, app.OperationHistoryRepo, app.DeviceControlRepo, app.DeviceRepo, app.WebSocketService) // 初始化任务执行器组件(使用5个工作协程) app.TaskExecutor = task.NewExecutor(5) // 启动API组件 if err := app.API.Start(); err != nil { return fmt.Errorf("API启动失败: %v", err) } app.logger.Info("API启动成功") // 启动任务执行器组件 app.TaskExecutor.Start() app.logger.Info("任务执行器启动成功") return nil } // Stop 停止核心应用 // 按正确顺序停止所有核心组件 func (app *Application) Stop() error { // 停止API组件 if err := app.API.Stop(); err != nil { app.logger.Error(fmt.Sprintf("API停止失败: %v", err)) } // 停止任务执行器组件 app.TaskExecutor.Stop() app.logger.Info("任务执行器已停止") // 停止存储组件 if err := app.Storage.Disconnect(); err != nil { return fmt.Errorf("存储断开连接失败: %v", err) } app.logger.Info("存储断开连接成功") return nil }