43 lines
709 B
Go
43 lines
709 B
Go
package eventbus
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type (
|
|
EventTopic string
|
|
)
|
|
|
|
type Forwarder interface {
|
|
Broadcast(topic EventTopic, payload interface{})
|
|
}
|
|
|
|
type Broker struct {
|
|
forwarders []Forwarder
|
|
mutex sync.Mutex
|
|
}
|
|
|
|
func NewBroker() *Broker {
|
|
return &Broker{
|
|
forwarders: []Forwarder{},
|
|
mutex: sync.Mutex{},
|
|
}
|
|
}
|
|
|
|
func (b *Broker) AddForwarder(forwarder Forwarder) {
|
|
b.mutex.Lock()
|
|
defer b.mutex.Unlock()
|
|
b.forwarders = append(b.forwarders, forwarder)
|
|
}
|
|
|
|
func (b *Broker) broadcast(topic EventTopic, payload interface{}) {
|
|
b.mutex.Lock()
|
|
defer b.mutex.Unlock()
|
|
|
|
for _, forwarder := range b.forwarders {
|
|
forwarder.Broadcast(topic, payload)
|
|
}
|
|
}
|