35 lines
708 B
Go
35 lines
708 B
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
// SystemEvents 定义系统级事件处理
|
||
|
type SystemEvents struct {
|
||
|
reloadHandlers []func() error
|
||
|
mu sync.RWMutex
|
||
|
}
|
||
|
|
||
|
// 全局事件管理器
|
||
|
var GlobalSystemEvents = &SystemEvents{}
|
||
|
|
||
|
// RegisterReloadHandler 注册系统重载处理函数
|
||
|
func (e *SystemEvents) RegisterReloadHandler(handler func() error) {
|
||
|
e.mu.Lock()
|
||
|
defer e.mu.Unlock()
|
||
|
e.reloadHandlers = append(e.reloadHandlers, handler)
|
||
|
}
|
||
|
|
||
|
// TriggerReload 触发所有注册的重载处理函数
|
||
|
func (e *SystemEvents) TriggerReload() error {
|
||
|
e.mu.RLock()
|
||
|
defer e.mu.RUnlock()
|
||
|
|
||
|
for _, handler := range e.reloadHandlers {
|
||
|
if err := handler(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|