Add basic message/response handling

This commit is contained in:
Zoe Roux 2024-03-16 12:44:39 +01:00
parent 7603312149
commit 96ad9424bb
No known key found for this signature in database
2 changed files with 46 additions and 5 deletions

View File

@ -1,6 +1,28 @@
package main package main
import "errors"
type Client struct { type Client struct {
id string id string
messages chan []byte messages chan []byte
} }
type Message struct {
Action string `json:"action"`
Value interface{} `json:"value"`
}
type Response struct {
Ok bool `json:"ok"`
Value interface{} `json:"value,omitempty"`
Error string `json:"error,omitempty"`
}
func (c *Client) HandleMessage(message Message) (interface{}, error) {
switch message.Action {
case "ping":
return "pong", nil
default:
return nil, errors.New("invalid action")
}
}

View File

@ -5,6 +5,7 @@ import (
"net/http" "net/http"
websocket "nhooyr.io/websocket" websocket "nhooyr.io/websocket"
wsjson "nhooyr.io/websocket/wsjson"
) )
const MAX_MESSAGE_QUEUE = 16 const MAX_MESSAGE_QUEUE = 16
@ -29,14 +30,32 @@ func main() {
defer server.DeleteClient(client) defer server.DeleteClient(client)
for { for {
t, message, err := c.Read(r.Context()) var message Message
if err != nil || t != websocket.MessageText { err := wsjson.Read(r.Context(), c, &message)
if err != nil {
log.Printf("err: %v", err)
break break
} }
log.Printf("Received %v", message) ret, err := client.HandleMessage(message)
var resp Response
if err == nil {
if ret != nil {
resp = Response{
Ok: true,
Value: ret,
}
} else {
resp = Response{Ok: true}
}
} else {
resp = Response{
Ok: false,
Error: err.Error(),
}
}
err = c.Write(r.Context(), websocket.MessageText, message) err = wsjson.Write(r.Context(), c, resp)
if err != nil { if err != nil {
break break
} }