|
|
|
// internal/core/manager.go
|
|
|
|
package core
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"gofaster/internal/shared/config"
|
|
|
|
"gofaster/internal/shared/database"
|
|
|
|
"gofaster/internal/shared/logger"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Manager 核心管理器
|
|
|
|
type Manager struct {
|
|
|
|
modules map[string]Module
|
|
|
|
mutex sync.RWMutex
|
|
|
|
logger *logger.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewManager 创建新的管理器
|
|
|
|
func NewManager() *Manager {
|
|
|
|
return &Manager{
|
|
|
|
modules: make(map[string]Module),
|
|
|
|
logger: logger.New(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// RegisterModule 注册模块
|
|
|
|
func (m *Manager) RegisterModule(name string, module Module) {
|
|
|
|
m.mutex.Lock()
|
|
|
|
defer m.mutex.Unlock()
|
|
|
|
m.modules[name] = module
|
|
|
|
log.Printf("✅ 模块 %s 注册成功", name)
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetModule 获取模块
|
|
|
|
func (m *Manager) GetModule(name string) (Module, bool) {
|
|
|
|
m.mutex.RLock()
|
|
|
|
defer m.mutex.RUnlock()
|
|
|
|
module, exists := m.modules[name]
|
|
|
|
return module, exists
|
|
|
|
}
|
|
|
|
|
|
|
|
// Start 启动所有模块
|
|
|
|
func (m *Manager) Start() error {
|
|
|
|
// 加载配置
|
|
|
|
cfg, err := config.Load()
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("加载配置失败: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 初始化数据库
|
|
|
|
db, err := database.New(cfg.Database)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("初始化数据库失败: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 启动所有模块
|
|
|
|
for name, module := range m.modules {
|
|
|
|
if err := module.Start(cfg, db); err != nil {
|
|
|
|
return fmt.Errorf("启动模块 %s 失败: %w", name, err)
|
|
|
|
}
|
|
|
|
log.Printf("✅ 模块 %s 启动成功", name)
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Stop 停止所有模块
|
|
|
|
func (m *Manager) Stop() error {
|
|
|
|
for name, module := range m.modules {
|
|
|
|
if err := module.Stop(); err != nil {
|
|
|
|
m.logger.Error("停止模块失败", "module", name, "error", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|