package main import ( "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } func ServeWS(room *Room, w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { return } var auth AuthMessage if err := conn.ReadJSON(&auth); err != nil || auth.Type != "auth" { conn.Close() return } data, ok := VerifyTelegramInitData(auth.InitData, "7697757472:AAESD9HfkWwbIZe-HXR7IazUShr69hZTLmE") if !ok { conn.Close() return } log.Println("Client connected! \ninitData: ", data) userID := data["user.id"] username := data["user.username"] if username == "" { username = data["user.first_name"] } if username == "" { username = "user_" + userID } player := &Player{ ID: userID, Username: username, Conn: conn, X: 180, Y: 320, } room.Players[player.ID] = player player.Conn.WriteJSON(map[string]any{ "type": "init", "payload": map[string]string{ "id": player.ID, }, }) go readLoop(room, player) } func readLoop(room *Room, player *Player) { for { var msg InputMessage err := player.Conn.ReadJSON(&msg) if err != nil { delete(room.Players, player.ID) player.Conn.Close() return } msg.PlayerID = player.ID room.Input <- msg } } func main() { room := NewRoom() go room.Run() http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { ServeWS(room, w, r) }) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }