package module import ( "context" "fmt" "sync" ) // Manager 模块管理器 type Manager struct { modules map[string]Module mu sync.RWMutex } // NewManager 创建模块管理器 func NewManager() *Manager { return &Manager{ modules: make(map[string]Module), } } // Register 注册模块 func (m *Manager) Register(module Module) error { if module == nil { return fmt.Errorf("模块不能为空") } name := module.Name() if name == "" { return fmt.Errorf("模块名称不能为空") } m.mu.Lock() defer m.mu.Unlock() if _, exists := m.modules[name]; exists { return fmt.Errorf("模块 %s 已存在", name) } m.modules[name] = module return nil } // Get 获取模块 func (m *Manager) Get(name string) (Module, bool) { m.mu.RLock() defer m.mu.RUnlock() module, exists := m.modules[name] return module, exists } // GetAll 获取所有模块 func (m *Manager) GetAll() []Module { m.mu.RLock() defer m.mu.RUnlock() modules := make([]Module, 0, len(m.modules)) for _, module := range m.modules { modules = append(modules, module) } return modules } // InitAll 初始化所有模块 func (m *Manager) InitAll(ctx context.Context) error { m.mu.RLock() defer m.mu.RUnlock() for name, module := range m.modules { if err := module.Init(ctx); err != nil { return fmt.Errorf("初始化模块 %s 失败: %v", name, err) } } return nil } // StartAll 启动所有模块 func (m *Manager) StartAll(ctx context.Context) error { m.mu.RLock() defer m.mu.RUnlock() for name, module := range m.modules { if err := module.Start(ctx); err != nil { return fmt.Errorf("启动模块 %s 失败: %v", name, err) } } return nil } // StopAll 停止所有模块 func (m *Manager) StopAll(ctx context.Context) error { m.mu.RLock() defer m.mu.RUnlock() for name, module := range m.modules { if err := module.Stop(ctx); err != nil { return fmt.Errorf("停止模块 %s 失败: %v", name, err) } } return nil } // GetAPIs 获取所有模块的 API func (m *Manager) GetAPIs() []interface{} { m.mu.RLock() defer m.mu.RUnlock() apis := make([]interface{}, 0, len(m.modules)) for _, module := range m.modules { if api := module.GetAPI(); api != nil { apis = append(apis, api) } } return apis }