[tor-commits] [snowflake/main] Add Event Bus Implementation
shelikhoo at torproject.org
shelikhoo at torproject.org
Tue Jan 25 12:50:36 UTC 2022
commit 5f03f88d730c4b1c298c4c3eeceeba8023f056ff
Author: Shelikhoo <xiaokangwang at outlook.com>
Date: Fri Nov 26 16:00:30 2021 +0000
Add Event Bus Implementation
This event bus implementation favours simplicity over efficiency and is not suitable for frequent addition and removal of listeners.
---
common/event/bus.go | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/common/event/bus.go b/common/event/bus.go
new file mode 100644
index 0000000..7e45779
--- /dev/null
+++ b/common/event/bus.go
@@ -0,0 +1,39 @@
+package event
+
+import "sync"
+
+func NewSnowflakeEventDispatcher() SnowflakeEventDispatcher {
+ return &eventBus{lock: &sync.Mutex{}}
+}
+
+type eventBus struct {
+ lock *sync.Mutex
+ listeners []SnowflakeEventReceiver
+}
+
+func (e *eventBus) OnNewSnowflakeEvent(event SnowflakeEvent) {
+ e.lock.Lock()
+ defer e.lock.Unlock()
+ for _, v := range e.listeners {
+ v.OnNewSnowflakeEvent(event)
+ }
+}
+
+func (e *eventBus) AddSnowflakeEventListener(receiver SnowflakeEventReceiver) {
+ e.lock.Lock()
+ defer e.lock.Unlock()
+ e.listeners = append(e.listeners, receiver)
+}
+
+func (e *eventBus) RemoveSnowflakeEventListener(receiver SnowflakeEventReceiver) {
+ e.lock.Lock()
+ defer e.lock.Unlock()
+ var newListeners []SnowflakeEventReceiver
+ for _, v := range e.listeners {
+ if v != receiver {
+ newListeners = append(newListeners, v)
+ }
+ }
+ e.listeners = newListeners
+ return
+}
More information about the tor-commits
mailing list