35 lines
615 B
Go
35 lines
615 B
Go
package event
|
|
|
|
import "sync"
|
|
|
|
type localBroker struct {
|
|
sync.Mutex
|
|
|
|
handlers map[EventType][]Handler
|
|
}
|
|
|
|
func NewLocalBroker() *localBroker {
|
|
return &localBroker{handlers: map[EventType][]Handler{}}
|
|
}
|
|
|
|
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) Emit(name EventType, args ...interface{}) {
|
|
b.Lock()
|
|
defer b.Unlock()
|
|
|
|
if b.handlers[name] != nil {
|
|
for _, handler := range b.handlers[name] {
|
|
handler(args...)
|
|
}
|
|
}
|
|
}
|