You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
740 B
Go
42 lines
740 B
Go
3 years ago
|
package dataswamp
|
||
|
|
||
|
type Event struct {
|
||
|
eventName string
|
||
|
payload interface {}
|
||
|
}
|
||
|
|
||
|
func NewEvent(eventName string, payload interface{}) *Event{
|
||
|
return &Event{
|
||
|
eventName,
|
||
|
payload,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (e *Event) EventName() string {
|
||
|
return e.eventName
|
||
|
}
|
||
|
|
||
|
func (e *Event) Payload() interface{} {
|
||
|
return e.payload
|
||
|
}
|
||
|
|
||
|
type EventHandler func(e Event)
|
||
|
|
||
|
type EventBus struct {
|
||
|
handlers map[string][]EventHandler
|
||
|
}
|
||
|
|
||
|
func NewEventBus() *EventBus{
|
||
|
return &EventBus{ make(map[string][]EventHandler) }
|
||
|
}
|
||
|
|
||
|
func (eb *EventBus) Register(eventName string, handler EventHandler) {
|
||
|
eb.handlers[eventName] = append(eb.handlers[eventName], handler)
|
||
|
}
|
||
|
|
||
|
func (eb *EventBus) Handle(e Event){
|
||
|
for _, handler := range eb.handlers[e.EventName()] {
|
||
|
handler(e)
|
||
|
}
|
||
|
}
|