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  }