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
|
|
|
|
}
|