mirror of
https://github.com/cloudnativelabs/kube-router.git
synced 2025-09-25 10:01:04 +02:00
44 lines
916 B
Go
44 lines
916 B
Go
package utils
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type Listener interface {
|
|
OnUpdate(instance interface{})
|
|
}
|
|
|
|
type ListenerFunc func(instance interface{})
|
|
|
|
func (f ListenerFunc) OnUpdate(instance interface{}) {
|
|
f(instance)
|
|
}
|
|
|
|
// Broadcaster holds the details of registered listeners
|
|
type Broadcaster struct {
|
|
listenerLock sync.RWMutex
|
|
listeners []Listener
|
|
}
|
|
|
|
// NewBroadcaster returns an instance of Broadcaster object
|
|
func NewBroadcaster() *Broadcaster {
|
|
return &Broadcaster{}
|
|
}
|
|
|
|
// Add lets to register a listener
|
|
func (b *Broadcaster) Add(listener Listener) {
|
|
b.listenerLock.Lock()
|
|
defer b.listenerLock.Unlock()
|
|
b.listeners = append(b.listeners, listener)
|
|
}
|
|
|
|
// Notify notifies an update to registered listeners
|
|
func (b *Broadcaster) Notify(instance interface{}) {
|
|
b.listenerLock.RLock()
|
|
listeners := b.listeners
|
|
b.listenerLock.RUnlock()
|
|
for _, listener := range listeners {
|
|
go listener.OnUpdate(instance)
|
|
}
|
|
}
|