make json abstraction for server
This commit is contained in:
62
server/webSocket.go
Normal file
62
server/webSocket.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/coder/websocket"
|
||||
"github.com/coder/websocket/wsjson"
|
||||
"github.com/zuadi/tecamino-dbm.git/models"
|
||||
)
|
||||
|
||||
func handleWebSocket(w http.ResponseWriter, r *http.Request) {
|
||||
conn, err := websocket.Accept(w, r, &websocket.AcceptOptions{
|
||||
OriginPatterns: []string{"*"},
|
||||
})
|
||||
if err != nil {
|
||||
log.Println("WebSocket accept error:", err)
|
||||
return
|
||||
}
|
||||
defer conn.Close(websocket.StatusInternalError, "Internal error")
|
||||
|
||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Minute)
|
||||
defer cancel()
|
||||
|
||||
client := &Client{conn: conn, ctx: ctx}
|
||||
|
||||
// Register client
|
||||
registerClient(client)
|
||||
defer unregisterClient(client)
|
||||
|
||||
// Read loop
|
||||
for {
|
||||
var data models.JsonData
|
||||
err := wsjson.Read(ctx, conn, &data)
|
||||
if err != nil {
|
||||
log.Println("Read error:", err)
|
||||
var response struct {
|
||||
Code int `json:"errorCode"`
|
||||
Message string `json:"message"`
|
||||
Error bool `json:"error"`
|
||||
}
|
||||
response.Code = 404
|
||||
response.Error = true
|
||||
response.Message = err.Error()
|
||||
|
||||
err = wsjson.Write(ctx, conn, response)
|
||||
if err != nil {
|
||||
log.Println("Read error:", err)
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
log.Printf("Received: %v", data)
|
||||
|
||||
// Broadcast to all
|
||||
broadcast(data)
|
||||
}
|
||||
|
||||
conn.Close(websocket.StatusNormalClosure, "Normal closure")
|
||||
}
|
Reference in New Issue
Block a user