Kyoo/websockets/main.go
2024-06-21 14:16:52 +00:00

68 lines
1.2 KiB
Go

package main
import (
"log"
"net/http"
websocket "nhooyr.io/websocket"
wsjson "nhooyr.io/websocket/wsjson"
)
const MAX_MESSAGE_QUEUE = 16
func main() {
server := NewServer()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
c, err := websocket.Accept(w, r, &websocket.AcceptOptions{
InsecureSkipVerify: true,
})
if err != nil {
log.Println(err)
return
}
defer c.CloseNow()
client := NewClient()
server.RegisterClient(client)
defer server.DeleteClient(client)
go client.ListenChannels()
for {
var message Message
err := wsjson.Read(r.Context(), c, &message)
if err != nil {
log.Printf("err: %v", err)
break
}
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 = wsjson.Write(r.Context(), c, resp)
if err != nil {
break
}
}
})
log.Println("Listening on :7777")
err := http.ListenAndServe(":7777", nil)
log.Fatal(err)
}