36 lines
600 B
Go
36 lines
600 B
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"nhooyr.io/websocket"
|
|
"nhooyr.io/websocket/wsjson"
|
|
)
|
|
|
|
type WSHandler struct{}
|
|
|
|
func NewWSHandler() *WSHandler {
|
|
return &WSHandler{}
|
|
}
|
|
|
|
func (h *WSHandler) Hub(w http.ResponseWriter, r *http.Request) {
|
|
conn, err := websocket.Accept(w, r, &websocket.AcceptOptions{
|
|
OriginPatterns: []string{"localhost:*"},
|
|
})
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer conn.CloseNow()
|
|
|
|
ctx := r.Context()
|
|
for {
|
|
var msg map[string]any
|
|
if err := wsjson.Read(ctx, conn, &msg); err != nil {
|
|
break
|
|
}
|
|
if err := wsjson.Write(ctx, conn, msg); err != nil {
|
|
break
|
|
}
|
|
}
|
|
}
|