gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/myx/eventx/manager.go (about) 1 package eventx 2 3 import "sync" 4 5 // 默认的事件管理器 6 var defaultManager = NewManager() 7 8 func GetEvent(event string) *Dispatcher { 9 return defaultManager.GetDispatcher(event) 10 } 11 12 func NewManager() (obj *Manager) { 13 obj = &Manager{ 14 dispatchers: map[string]*Dispatcher{}, 15 } 16 return 17 } 18 19 type Manager struct { 20 dispatchers map[string]*Dispatcher 21 sync.RWMutex 22 } 23 24 func (mgr *Manager) GetDispatcher(event string) *Dispatcher { 25 mgr.RLock() 26 d, ok := mgr.dispatchers[event] 27 mgr.RUnlock() 28 if !ok { 29 d = newDispatcher(event) 30 mgr.Lock() 31 mgr.dispatchers[event] = d 32 mgr.Unlock() 33 } 34 return d 35 } 36 37 func (mgr *Manager) Dispose() { 38 if mgr == nil { 39 return 40 } 41 for _, val := range mgr.dispatchers { 42 val.OffAll() 43 } 44 }