diff options
author | Valery Piashchynski <[email protected]> | 2020-12-17 10:19:01 +0300 |
---|---|---|
committer | Valery Piashchynski <[email protected]> | 2020-12-17 10:19:01 +0300 |
commit | acb53196f8ff4518c515225b39c6fb2bac64faae (patch) | |
tree | 3c016e03132a38ec3dd3fce737120a0fdc9642c9 /pkg/events | |
parent | 8422e300f64f20d86ffccf773d41109285bbc12d (diff) |
Update events handler, add mutex to push
Diffstat (limited to 'pkg/events')
-rwxr-xr-x | pkg/events/events.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/pkg/events/events.go b/pkg/events/events.go new file mode 100755 index 00000000..92dc103a --- /dev/null +++ b/pkg/events/events.go @@ -0,0 +1,38 @@ +package events + +import ( + "sync" + + "github.com/spiral/roadrunner/v2/interfaces/events" +) + +// EventHandler helps to broadcast events to multiple listeners. +type EventHandler struct { + listeners []events.EventListener + sync.RWMutex +} + +func NewEventsHandler() events.Handler { + return &EventHandler{listeners: make([]events.EventListener, 0, 2)} +} + +// NumListeners returns number of event listeners. +func (eb *EventHandler) NumListeners() int { + return len(eb.listeners) +} + +// AddListener registers new event listener. +func (eb *EventHandler) AddListener(listener events.EventListener) { + eb.Lock() + defer eb.Unlock() + eb.listeners = append(eb.listeners, listener) +} + +// Push broadcast events across all event listeners. +func (eb *EventHandler) Push(e interface{}) { + eb.Lock() + defer eb.Unlock() + for k := range eb.listeners { + eb.listeners[k](e) + } +} |