33 lines
652 B
Go
33 lines
652 B
Go
package ws
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/coder/websocket"
|
|
)
|
|
|
|
func Handler(ctx context.Context, h *Hub) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
conn, err := websocket.Accept(w, r, &websocket.AcceptOptions{
|
|
OriginPatterns: []string{"*"},
|
|
})
|
|
|
|
log.Println("New WebSocket connection from", r.RemoteAddr, "at", time.Now().Format(time.RFC3339))
|
|
|
|
if err != nil {
|
|
log.Println("WebSocket accept error:", err)
|
|
return
|
|
}
|
|
|
|
c := NewClient(r.RemoteAddr, conn, h, ctx)
|
|
log.Println("Client", r.RemoteAddr, "connected.")
|
|
|
|
go c.ReadLoop()
|
|
go c.WriteLoop()
|
|
go heartbeat(c)
|
|
}
|
|
}
|