-
Notifications
You must be signed in to change notification settings - Fork 0
/
event_center.go
39 lines (34 loc) · 998 Bytes
/
event_center.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package eventcore
import (
"fmt"
"github.com/go-kit/kit/log/level"
)
// EventCenter 單一process的EventHub
type EventCenter struct {
eventHandlers map[EventType]map[string]EventHandler
}
func (h *EventCenter) Subscribe(eventType EventType, handler EventHandler, handlerName string) {
if h.eventHandlers == nil {
h.eventHandlers = make(map[EventType]map[string]EventHandler)
}
if orgHandlers, ok := h.eventHandlers[eventType]; !ok {
h.eventHandlers[eventType] = map[string]EventHandler{handlerName: handler}
} else {
if _, ok := orgHandlers[handlerName]; ok {
level.Warn(Logger).Log("message", fmt.Sprintf("handler %s", handlerName))
} else {
h.eventHandlers[eventType][handlerName] = handler
}
}
}
func (h *EventCenter) Emit(event Event) error {
if handlers, ok := h.eventHandlers[event.GetType()]; ok {
for _, handler := range handlers {
if err := handler(event); err != nil {
level.Error(Logger).Log("error", err)
return err
}
}
}
return nil
}