event.go 663 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package event
  2. import "sync"
  3. type Event uint16
  4. type Handler func(data interface{}) error
  5. type Registry interface {
  6. On(Event, Handler)
  7. }
  8. type Listener struct {
  9. sync.RWMutex
  10. events map[Event][]Handler
  11. }
  12. func (l *Listener) On(e Event, h Handler) {
  13. l.Lock()
  14. defer l.Unlock()
  15. if l.events == nil {
  16. l.events = make(map[Event][]Handler)
  17. }
  18. handlers := l.events[e]
  19. handlers = append(handlers, h)
  20. l.events[e] = handlers
  21. }
  22. func (l *Listener) Fire(e Event, data interface{}) error {
  23. l.RLock()
  24. defer l.RUnlock()
  25. if l.events == nil {
  26. return nil
  27. }
  28. for _, h := range l.events[e] {
  29. if err := h(data); err != nil {
  30. return err
  31. }
  32. }
  33. return nil
  34. }