mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Add Event Bus Implementation
This event bus implementation favours simplicity over efficiency and is not suitable for frequent addition and removal of listeners.
This commit is contained in:
parent
75f770150d
commit
5f03f88d73
1 changed files with 39 additions and 0 deletions
39
common/event/bus.go
Normal file
39
common/event/bus.go
Normal file
|
@ -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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue