44 lines
915 B
Go
44 lines
915 B
Go
package websocketutil
|
|
|
|
import (
|
|
"github.com/gorilla/websocket"
|
|
"log"
|
|
"net"
|
|
"net/http"
|
|
)
|
|
|
|
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
|
|
}
|
|
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)
|
|
}
|