This commit is contained in:
solosw
2026-01-05 14:11:34 +08:00
parent 35ef825371
commit 99b11b04e4
658 changed files with 99266 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
package events
import (
"awesomeProject/internal/config"
"log"
"sync"
)
// ConfigEventManager 配置事件管理器
type ConfigEventManager struct {
handlers map[string][]config.ConfigEventHandler // key: config_key, value: handlers
mutex sync.RWMutex
}
var (
configEventManager *ConfigEventManager
once sync.Once
)
// GetConfigEventManager 获取配置事件管理器单例
func GetConfigEventManager() *ConfigEventManager {
once.Do(func() {
configEventManager = &ConfigEventManager{
handlers: make(map[string][]config.ConfigEventHandler),
}
})
return configEventManager
}
// RegisterHandler 注册配置事件处理器
func (cem *ConfigEventManager) RegisterHandler(handler config.ConfigEventHandler) {
cem.mutex.Lock()
defer cem.mutex.Unlock()
configKeys := handler.GetConfigKeys()
for _, key := range configKeys {
if cem.handlers[key] == nil {
cem.handlers[key] = []config.ConfigEventHandler{}
}
cem.handlers[key] = append(cem.handlers[key], handler)
}
log.Printf("注册配置事件处理器,监听配置: %v", configKeys)
}
// TriggerEvent 触发配置变更事件
func (cem *ConfigEventManager) TriggerEvent(event config.ConfigEvent) {
cem.mutex.RLock()
handlers := cem.handlers[event.ConfigKey]
cem.mutex.RUnlock()
if len(handlers) == 0 {
log.Printf("配置 %s 无对应的事件处理器", event.ConfigKey)
return
}
log.Printf("触发配置变更事件: %s, 旧值: %v, 新值: %v", event.ConfigKey, event.OldValue, event.NewValue)
// 并发处理事件,避免阻塞
for _, handler := range handlers {
go func(h config.ConfigEventHandler) {
if err := h.Handle(event); err != nil {
log.Printf("处理配置事件失败: %s, 错误: %v", event.ConfigKey, err)
}
}(handler)
}
}
// ListRegisteredHandlers 列出已注册的处理器(用于调试)
func (cem *ConfigEventManager) ListRegisteredHandlers() map[string]int {
cem.mutex.RLock()
defer cem.mutex.RUnlock()
result := make(map[string]int)
for key, handlers := range cem.handlers {
result[key] = len(handlers)
}
return result
}