Files
skeps/backend/hub.go
T
2026-09-13 15:08:12 +02:00

49 lines
949 B
Go

package main
import (
"context"
"sync"
"github.com/coder/websocket"
)
type hub struct {
mu sync.Mutex
conns map[string]map[*websocket.Conn]struct{}
}
func newHub() *hub {
return &hub{conns: make(map[string]map[*websocket.Conn]struct{})}
}
func (h *hub) add(listID string, c *websocket.Conn) {
h.mu.Lock()
defer h.mu.Unlock()
if h.conns[listID] == nil {
h.conns[listID] = make(map[*websocket.Conn]struct{})
}
h.conns[listID][c] = struct{}{}
}
func (h *hub) remove(listID string, c *websocket.Conn) {
h.mu.Lock()
defer h.mu.Unlock()
delete(h.conns[listID], c)
if len(h.conns[listID]) == 0 {
delete(h.conns, listID)
}
}
func (h *hub) broadcast(listID string) {
h.mu.Lock()
conns := make([]*websocket.Conn, 0, len(h.conns[listID]))
for c := range h.conns[listID] {
conns = append(conns, c)
}
h.mu.Unlock()
for _, c := range conns {
go c.Write(context.Background(), websocket.MessageText, []byte("changed"))
}
}