mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-14 05:11:19 -04:00
This event bus implementation favours simplicity over efficiency and is not suitable for frequent addition and removal of listeners.
39 lines
861 B
Go
39 lines
861 B
Go
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
|
|
}
|