package controllers import ( "log" "server/models" "github.com/gorilla/websocket" ) func (h *Hub) readLoop(conn *websocket.Conn) { handMessage := models.Message{Type: MSG_WELCOME} _ = conn.WriteMessage(websocket.BinaryMessage, handMessage.Encode()) var player *models.Player defer func() { if player != nil { h.removePlayer(player.ID) log.Println("Player left:", player.ID) } conn.Close() }() for { _, bytes, err := conn.ReadMessage() if err != nil { return } msg, err := models.Decode(bytes) if err != nil { log.Println(err) continue } switch msg.Type { case MSG_WELCOME: if player != nil { continue } player = h.handShake(msg.Payload, conn) log.Println("Player joined:", player.ID) case MSG_INPUT: if player == nil { continue } reader := models.NewReader(msg.Payload) x := reader.ReadF32() y := reader.ReadF32() h.updatePosition(x, y, player) } } }