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
import "errors"
type Client struct {
id string
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"
websocket "nhooyr.io/websocket"
wsjson "nhooyr.io/websocket/wsjson"
)
const MAX_MESSAGE_QUEUE = 16
@ -29,14 +30,32 @@ func main() {
defer server.DeleteClient(client)
for {
t, message, err := c.Read(r.Context())
if err != nil || t != websocket.MessageText {
var message Message
err := wsjson.Read(r.Context(), c, &message)
if err != nil {
log.Printf("err: %v", err)
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 {
break
}