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
759 B
Go
42 lines
759 B
Go
package util
|
|
|
|
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(payload interface{})
|
|
|
|
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.Payload())
|
|
}
|
|
}
|