[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