mapserver/server/eventbus/eventbus.go

39 lines
623 B
Go
Raw Normal View History

2019-01-25 18:06:24 +03:00
package eventbus
import (
"sync"
)
type Listener interface {
OnEvent(eventtype string, o interface{})
}
type Eventbus struct {
mutex *sync.RWMutex
listeners []Listener
}
func New() *Eventbus {
eb := Eventbus{}
eb.mutex = &sync.RWMutex{}
eb.listeners = make([]Listener, 0)
return &eb
}
func (this *Eventbus) Emit(eventtype string, o interface{}) {
this.mutex.RLock()
defer this.mutex.RUnlock()
for _, l := range this.listeners {
l.OnEvent(eventtype, o)
}
}
func (this *Eventbus) AddListener(l Listener) {
this.mutex.Lock()
defer this.mutex.Unlock()
this.listeners = append(this.listeners, l)
}