package websocketutil import ( "github.com/gorilla/websocket" "log" "net" "net/http" "time" ) type WebSocketAddr string func (r WebSocketAddr) Network() string { return "websocket" } func (r WebSocketAddr) String() string { return string(r) } var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func handleWebSocket(w http.ResponseWriter, r *http.Request, handler func(w http.ResponseWriter, r *http.Request, websockerConnection net.Conn)) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("Error upgrading to WebSocket:", err) return } conn.SetReadDeadline(time.Time{}) conn.SetWriteDeadline(time.Time{}) wsConn := NewWebSocketConn(conn) defer wsConn.Close() handler(w, r, wsConn) } type WebSocketService struct { Handler func(w http.ResponseWriter, r *http.Request, conn net.Conn) } func (endpoint *WebSocketService) Handle(w http.ResponseWriter, r *http.Request) { handleWebSocket(w, r, endpoint.Handler) }