package ws import ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" ) func FlashProgressHandler(hub *Hub) gin.HandlerFunc { return func(c *gin.Context) { deviceID := c.Param("id") conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { return } defer conn.Close() client := &Client{Conn: conn, Send: make(chan []byte, 20)} room := "flash:" + deviceID sub := &Subscription{Client: client, Room: room} hub.RegisterSync(sub) defer hub.Unregister(sub) // Read pump — drain incoming messages; close handled by outer defer go func() { for { if _, _, err := conn.ReadMessage(); err != nil { break } } }() for msg := range client.Send { if err := conn.WriteMessage(websocket.TextMessage, msg); err != nil { return } } } }