56 lines
950 B
Go
56 lines
950 B
Go
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)
|
|
}
|
|
}
|
|
}
|