package main import ( "fmt" "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, err := VerifyTelegramInitData(auth.InitData, "7697757472:AAESD9HfkWwbIZe-HXR7IazUShr69hZTLmE") if err != nil { conn.Close() return } userID := data.User.ID username := data.User.Username if username == "" { username = data.User.FirstName } log.Printf("Player %d connected!", 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": fmt.Sprintf("%d", player.ID), }, }) go readLoop(room, player) } func readLoop(room *Room, player *Player) { defer func() { delete(room.Players, player.ID) player.Conn.Close() }() for { var msg InputMessage err := player.Conn.ReadJSON(&msg) if err != nil { 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)) }