Files
Aroll-Cutter/handlers/ws.go
2026-02-17 17:15:39 -08:00

48 lines
945 B
Go

package handlers
import (
"log"
"net/http"
"aroll/ws"
gws "github.com/gorilla/websocket"
)
var upgrader = gws.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 4096,
CheckOrigin: func(r *http.Request) bool { return true },
}
func WSHandler(hub *ws.Hub) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Printf("ws upgrade: %v", err)
return
}
client := &ws.Client{Send: make(chan []byte, 256)}
hub.Register <- client
// Writer goroutine: pumps messages from hub → WebSocket
go func() {
defer conn.Close()
for msg := range client.Send {
if err := conn.WriteMessage(gws.TextMessage, msg); err != nil {
return
}
}
}()
// Reader loop: keeps the connection alive and detects close frames
for {
if _, _, err := conn.ReadMessage(); err != nil {
break
}
}
hub.Unregister <- client
}
}