diff --git a/packages/events/event.go b/packages/events/event.go index d35788bcf8a7e39054a22a223eb12226ed9cba66..ae8de77f9963fa8801919c21a257086c752dc566 100644 --- a/packages/events/event.go +++ b/packages/events/event.go @@ -1,19 +1,28 @@ package events +import "sync" + type Event struct { triggerFunc func(handler interface{}, params ...interface{}) callbacks map[uintptr]interface{} + mutex sync.RWMutex } func (this *Event) Attach(closure *Closure) { + this.mutex.Lock() + defer this.mutex.Unlock() this.callbacks[closure.Id] = closure.Fnc } func (this *Event) Detach(closure *Closure) { + this.mutex.Lock() + defer this.mutex.Unlock() delete(this.callbacks, closure.Id) } func (this *Event) Trigger(params ...interface{}) { + this.mutex.RLock() + defer this.mutex.RUnlock() for _, handler := range this.callbacks { this.triggerFunc(handler, params...) }