Files
teachat/internal/broadcaster.go
2025-12-28 00:30:12 -07:00

43 lines
661 B
Go

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()