46 lines
962 B
Go
46 lines
962 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),
|
|
text bool) {
|
|
conn, err := upgrader.Upgrade(w, r, nil)
|
|
if err != nil {
|
|
log.Println("Error upgrading to WebSocket:", err)
|
|
return
|
|
}
|
|
wsConn := NewWebSocketConn(conn, text)
|
|
defer wsConn.Close()
|
|
|
|
handler(w, r, wsConn)
|
|
}
|
|
|
|
type WebSocketService struct {
|
|
Handler func(w http.ResponseWriter, r *http.Request, conn net.Conn)
|
|
Text bool
|
|
}
|
|
|
|
func (endpoint *WebSocketService) Handle(w http.ResponseWriter, r *http.Request) {
|
|
handleWebSocket(w, r, endpoint.Handler, endpoint.Text)
|
|
}
|