Files
mqtt_explorer/backend/internal/ws/hub.go
Gilles Soulier 383ad292d3 first
2025-12-24 14:47:39 +01:00

48 lines
782 B
Go

package ws
import (
"encoding/json"
"sync"
"github.com/gorilla/websocket"
)
type Hub struct {
mu sync.RWMutex
clients map[*websocket.Conn]struct{}
}
type Event struct {
Type string `json:"type"`
Data interface{} `json:"data"`
}
func NewHub() *Hub {
return &Hub{clients: make(map[*websocket.Conn]struct{})}
}
func (h *Hub) Add(conn *websocket.Conn) {
h.mu.Lock()
defer h.mu.Unlock()
h.clients[conn] = struct{}{}
}
func (h *Hub) Remove(conn *websocket.Conn) {
h.mu.Lock()
defer h.mu.Unlock()
delete(h.clients, conn)
}
func (h *Hub) Broadcast(event Event) {
payload, err := json.Marshal(event)
if err != nil {
return
}
h.mu.RLock()
defer h.mu.RUnlock()
for conn := range h.clients {
_ = conn.WriteMessage(websocket.TextMessage, payload)
}
}