A Event-Driven library for decoupling each component
type EventCenter interface {
Name() string
RegisterEvent(pushMode PushMode, eventNames ...string) (err error)
Subscribe(eventName string, subscriber *Subscriber) (err error)
Unsubscribe(eventName string, subscriberIds ...string) (err error)
UnsubscribeAll(eventName string) (err error)
PushEvent(eventName string, values ...interface{})
ListEvents() []string
}
Usage:
import (
"github.com/gogap/event_center"
)
...
EventCenter event_center.EventCenter = event_center.NewClassicEventCenter("GoGapEventCenter")
Or you can just use the default EventCenter like as following
event_center.RegisterEvent(...)
...
...
const (
EVENT_CMD_STOP = "EVENT_CMD_STOP"
EVENT_RECEIVER_STOPPED = "EVENT_RECEIVER_STOPPED"
)
...
EventCenter.RegisterEvent(event_center.ConcurrencyAndWaitMode,
EVENT_CMD_STOP,
EVENT_RECEIVER_STOPPED,
)
...
...
stopSubscriber := event_center.NewSubscriber(func(eventName string, values ...interface{}) {
if !isStoped {
isStoped = true
EventCenter.PushEvent(EVENT_RECEIVER_STOPPED, ....)
}
})
EventCenter.Subscribe(EVENT_CMD_STOP, stopSubscriber)
...
...
EventCenter.PushEvent(EVENT_RECEIVER_STOPPED, ....)
...