package main import ( "log" "net/http" "github.com/google/uuid" "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, _ := upgrader.Upgrade(w, r, nil) id := uuid.New().String() player := &Player{ ID: id, Conn: conn, X: 180, Y: 320, } room.Players[id] = player player.Conn.WriteJSON(map[string]any{ "type": "init", "payload": map[string]string{ "id": 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) 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)) }