package ws import ( "net/http" "visiona-local/server/internal/device" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } func DeviceEventsHandler(hub *Hub, deviceMgr *device.Manager) gin.HandlerFunc { return func(c *gin.Context) { conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { return } defer conn.Close() client := &Client{Conn: conn, Send: make(chan []byte, 10)} room := "device-events" sub := &Subscription{Client: client, Room: room} hub.Register(sub) defer hub.Unregister(sub) // Forward device events to this WebSocket room go func() { for event := range deviceMgr.Events() { hub.BroadcastToRoom(room, event) } }() // Write pump for msg := range client.Send { if err := conn.WriteMessage(websocket.TextMessage, msg); err != nil { return } } } }