event bus

This commit is contained in:
NatureFreshMilk 2019-01-25 16:06:24 +01:00
parent 782758bfa7
commit 10b84dc8ee

View File

@ -0,0 +1,38 @@
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)
}