summaryrefslogtreecommitdiff
path: root/pkg/events
diff options
context:
space:
mode:
authorValery Piashchynski <[email protected]>2020-12-17 10:19:01 +0300
committerValery Piashchynski <[email protected]>2020-12-17 10:19:01 +0300
commitacb53196f8ff4518c515225b39c6fb2bac64faae (patch)
tree3c016e03132a38ec3dd3fce737120a0fdc9642c9 /pkg/events
parent8422e300f64f20d86ffccf773d41109285bbc12d (diff)
Update events handler, add mutex to push
Diffstat (limited to 'pkg/events')
-rwxr-xr-xpkg/events/events.go38
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)
+ }
+}