| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | 
							- package event
 
- import "sync"
 
- type Event uint16
 
- type Handler func(data interface{}) error
 
- type Registry interface {
 
- 	On(Event, Handler)
 
- }
 
- type Listener struct {
 
- 	sync.RWMutex
 
- 	events map[Event][]Handler
 
- }
 
- func (l *Listener) On(e Event, h Handler) {
 
- 	l.Lock()
 
- 	defer l.Unlock()
 
- 	if l.events == nil {
 
- 		l.events = make(map[Event][]Handler)
 
- 	}
 
- 	handlers := l.events[e]
 
- 	handlers = append(handlers, h)
 
- 	l.events[e] = handlers
 
- }
 
- func (l *Listener) Fire(e Event, data interface{}) error {
 
- 	l.RLock()
 
- 	defer l.RUnlock()
 
- 	if l.events == nil {
 
- 		return nil
 
- 	}
 
- 	for _, h := range l.events[e] {
 
- 		if err := h(data); err != nil {
 
- 			return err
 
- 		}
 
- 	}
 
- 	return nil
 
- }
 
 
  |