event.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package event
  2. const (
  3. namedPrefixer = ":"
  4. )
  5. // Emitter able to emit events
  6. type Emitter interface {
  7. Emit(Event)
  8. }
  9. // Receiver able to listen to events
  10. type Receiver interface {
  11. On(name string, handler HandlerFunc)
  12. }
  13. // HandlerFunc func
  14. type HandlerFunc func(Event)
  15. // Event specific interface
  16. type Event interface {
  17. Name() string
  18. Data() interface{}
  19. }
  20. // private data
  21. type event struct {
  22. name string
  23. data interface{}
  24. }
  25. // New Event
  26. func New(name string, data interface{}) Event {
  27. return &event{name, data}
  28. }
  29. func (e *event) Name() string {
  30. return e.name
  31. }
  32. func (e *event) Data() interface{} {
  33. return e.data
  34. }
  35. // Prefixer
  36. // NamedEmitter data for event prefixer
  37. type NamedEmitter struct {
  38. name string
  39. bus Bus
  40. }
  41. // NewNamedEmitter creates a new emitter pointing to bus
  42. func NewNamedEmitter(name string, bus Bus) Emitter {
  43. return &NamedEmitter{name, bus}
  44. }
  45. // Emit will prefix with namedemitter name and push to bus
  46. func (ne *NamedEmitter) Emit(evt Event) {
  47. newEvt := &event{name: ne.name + namedPrefixer + evt.Name(), data: evt.Data()}
  48. ne.bus.Emit(newEvt)
  49. }