1
0
forked from MTSR/mapserver
mapserver/eventbus/eventbus.go
2019-06-13 08:04:32 +02:00

45 lines
746 B
Go

package eventbus
import (
"sync"
)
const (
//TODO: move to separate package
MAPBLOCK_RENDERED = "mapblock-rendered"
TILE_RENDERED = "rendered-tile"
)
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)
}