card-jong-be/controller/lobbyws.go

83 lines
1.4 KiB
Go
Raw Normal View History

2024-05-21 14:09:23 +00:00
package controller
import (
2024-05-25 21:17:48 +00:00
"encoding/json"
2024-05-21 14:09:23 +00:00
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
2024-05-25 21:17:48 +00:00
type LobbyMsg struct {
Action string `json:action`
Value string `json:value`
}
2024-05-21 14:09:23 +00:00
func LobbyWsConnect(writer http.ResponseWriter, request *http.Request) {
conn, err := upgrader.Upgrade(writer, request, nil)
if err != nil {
2024-05-25 21:17:48 +00:00
log.Print("upgrade error:", err)
2024-05-21 14:09:23 +00:00
return
}
defer conn.Close()
for {
mt, message, err := conn.ReadMessage()
if err != nil {
2024-05-25 21:17:48 +00:00
log.Print("read error:", err)
2024-05-21 14:09:23 +00:00
break
}
log.Printf("recv: %s, type: %d", message, mt)
2024-05-25 21:17:48 +00:00
var data LobbyMsg
err = json.Unmarshal(message, &data)
if err != nil {
log.Print("json error:", err)
break
}
switch data.Action {
case "auth":
err = validateUserId(mt, conn, data.Value)
default:
log.Print("no action :c")
}
2024-05-21 14:09:23 +00:00
if err != nil {
2024-05-25 21:17:48 +00:00
log.Print("error:", err)
2024-05-21 14:09:23 +00:00
break
}
}
}
2024-05-25 21:17:48 +00:00
func validateUserId(mt int, conn *websocket.Conn, userId string) error {
_, ok := Users[userId]
var responseJson LobbyMsg
if ok {
responseJson = LobbyMsg{Action: "auth", Value: "authorized"}
} else {
responseJson = LobbyMsg{Action: "auth", Value: "unauthorized"}
}
json, err := json.Marshal(responseJson)
if err != nil {
log.Print("json marshal: ", err)
return err
}
err = conn.WriteMessage(mt, json)
if err != nil {
log.Print("write error: ", err)
}
return err
}