commit 5f03f88d730c4b1c298c4c3eeceeba8023f056ff
Author: Shelikhoo <xiaokangw...@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
+}



_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to