add comments
All checks were successful
Go / build (1.21) (push) Successful in 1m6s
Go / build (1.22) (push) Successful in 1m4s

This commit is contained in:
saji 2024-03-07 13:30:32 -06:00
parent 0b5a917e40
commit d5381a3c33
2 changed files with 10 additions and 1 deletions

View file

@ -9,6 +9,8 @@ import (
"github.com/kschamplin/gotelem/skylab" "github.com/kschamplin/gotelem/skylab"
) )
// Broker is a Bus Event broadcast system. You can subscribe to events,
// and send events.
type Broker struct { type Broker struct {
subs map[string]chan skylab.BusEvent // contains the channel for each subsciber subs map[string]chan skylab.BusEvent // contains the channel for each subsciber
@ -17,6 +19,7 @@ type Broker struct {
bufsize int // size of chan buffer in elements. bufsize int // size of chan buffer in elements.
} }
// NewBroker creates a new broker with a given logger.
func NewBroker(bufsize int, logger *slog.Logger) *Broker { func NewBroker(bufsize int, logger *slog.Logger) *Broker {
return &Broker{ return &Broker{
subs: make(map[string]chan skylab.BusEvent), subs: make(map[string]chan skylab.BusEvent),
@ -25,6 +28,7 @@ func NewBroker(bufsize int, logger *slog.Logger) *Broker {
} }
} }
// Subscribe joins the broker with the given name. The name must be unique.
func (b *Broker) Subscribe(name string) (ch chan skylab.BusEvent, err error) { func (b *Broker) Subscribe(name string) (ch chan skylab.BusEvent, err error) {
// get rw lock. // get rw lock.
b.lock.Lock() b.lock.Lock()
@ -40,6 +44,9 @@ func (b *Broker) Subscribe(name string) (ch chan skylab.BusEvent, err error) {
return return
} }
// Unsubscribe removes a subscriber matching the name. It doesn't do anything
// if there's nobody subscribed with that name
func (b *Broker) Unsubscribe(name string) { func (b *Broker) Unsubscribe(name string) {
// remove the channel from the map. We don't need to close it. // remove the channel from the map. We don't need to close it.
b.lock.Lock() b.lock.Lock()
@ -47,6 +54,8 @@ func (b *Broker) Unsubscribe(name string) {
delete(b.subs, name) delete(b.subs, name)
} }
// Publish sends a bus event to all subscribers. It includes a sender
// string which prevents loopback.
func (b *Broker) Publish(sender string, message skylab.BusEvent) { func (b *Broker) Publish(sender string, message skylab.BusEvent) {
b.lock.RLock() b.lock.RLock()
defer b.lock.RUnlock() defer b.lock.RUnlock()

View file

@ -29,7 +29,7 @@ func TestCanSocket(t *testing.T) {
} }
}) })
t.Run("test name", func(t *testing.T) { t.Run("test interface name", func(t *testing.T) {
sock, _ := NewCanSocket("vcan0") sock, _ := NewCanSocket("vcan0")
defer sock.Close() defer sock.Close()