43 lines
948 B
Go
43 lines
948 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/coder/websocket"
|
|
"github.com/coder/websocket/wsjson"
|
|
)
|
|
|
|
func ServeConnection(responseWriter http.ResponseWriter, request *http.Request) {
|
|
connection, err := websocket.Accept(responseWriter, request, nil)
|
|
if err != nil {
|
|
log.Printf("websocket accept error: %v", err)
|
|
return
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
|
|
defer cancel()
|
|
|
|
for {
|
|
var clientMessage any
|
|
err := wsjson.Read(ctx, connection, &clientMessage)
|
|
if err != nil {
|
|
log.Printf("read error: %clientMessage", err)
|
|
return
|
|
}
|
|
log.Printf("received: %clientMessage", clientMessage)
|
|
|
|
// process and optionally respond
|
|
err = wsjson.Write(ctx, connection, map[string]string{"status": "ok"})
|
|
if err != nil {
|
|
log.Printf("write error: %clientMessage", err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func handleUnauthenticatedMessage() {}
|
|
func handleAuthenticatedMessage() {}
|