Files
play-with-docker/event/local_broker.go
Jonathan Leibiusky @xetorthio 4731d8ec98 Event refactor
2017-07-18 10:45:05 -03:00

48 lines
940 B
Go

package event
import "sync"
type localBroker struct {
sync.Mutex
handlers map[EventType][]Handler
anyHandlers []AnyHandler
}
func NewLocalBroker() *localBroker {
return &localBroker{handlers: map[EventType][]Handler{}, anyHandlers: []AnyHandler{}}
}
func (b *localBroker) On(name EventType, handler Handler) {
b.Lock()
defer b.Unlock()
if b.handlers[name] == nil {
b.handlers[name] = []Handler{}
}
b.handlers[name] = append(b.handlers[name], handler)
}
func (b *localBroker) OnAny(handler AnyHandler) {
b.Lock()
defer b.Unlock()
b.anyHandlers = append(b.anyHandlers, handler)
}
func (b *localBroker) Emit(name EventType, sessionId string, args ...interface{}) {
go func() {
b.Lock()
defer b.Unlock()
for _, handler := range b.anyHandlers {
handler(name, sessionId, args...)
}
if b.handlers[name] != nil {
for _, handler := range b.handlers[name] {
handler(sessionId, args...)
}
}
}()
}