package internal import "sync" type broadcaster struct { clients map[chan bool]bool mu sync.RWMutex } func newBroadcaster() *broadcaster { return &broadcaster{ clients: make(map[chan bool]bool), } } func (b *broadcaster) subscribe() chan bool { b.mu.Lock() defer b.mu.Unlock() ch := make(chan bool, 10) b.clients[ch] = true return ch } func (b *broadcaster) unsubscribe(ch chan bool) { b.mu.Lock() defer b.mu.Unlock() delete(b.clients, ch) close(ch) } func (b *broadcaster) broadcast() { b.mu.RLock() defer b.mu.RUnlock() for ch := range b.clients { select { case ch <- true: default: } } } var updates = newBroadcaster()