Skip to content

Commit 2f75b14

Browse files
authoredJan 26, 2025
Fix linter and better check for correct player (#89)
* Fix linter and better check for correct player * more * more
1 parent 5c8d2fc commit 2f75b14

File tree

1 file changed

+32
-25
lines changed

1 file changed

+32
-25
lines changed
 

‎internal/lobbyServer/lobby.go

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ const (
3333
BadName = 6
3434
BadEmulator = 7
3535
BadAuth = 8
36-
BadIP = 9
36+
BadPlayer = 9
3737
BadRoomName = 10
38-
Other = 11
38+
BadGameState = 11
39+
Other = 12
3940
)
4041

4142
const (
@@ -116,6 +117,15 @@ func (s *LobbyServer) findGameServer(port int) (string, *gameserver.GameServer)
116117
return "", nil
117118
}
118119

120+
func (s *LobbyServer) findRoomCreator(g *gameserver.GameServer) *gameserver.Client {
121+
for _, v := range g.Players {
122+
if v.Number == 0 {
123+
return &v
124+
}
125+
}
126+
return nil
127+
}
128+
119129
func (s *LobbyServer) updatePlayers(g *gameserver.GameServer) {
120130
if g == nil {
121131
return
@@ -400,36 +410,20 @@ func (s *LobbyServer) wsHandler(ws *websocket.Conn) {
400410
roomName, g := s.findGameServer(receivedMessage.Room.Port)
401411

402412
if g != nil {
403-
ip, _, err := net.SplitHostPort(ws.Request().RemoteAddr)
404-
if err != nil {
405-
g.Logger.Error(err, "could not parse IP", "IP", ws.Request().RemoteAddr)
406-
}
413+
roomCreator := s.findRoomCreator(g)
407414

408-
var player = g.Players[receivedMessage.PlayerName]
409-
if player.Number != 0 {
410-
sendMessage.Accept = BadName
411-
sendMessage.Message = "Player name must match room creator name"
412-
if err := s.sendData(ws, sendMessage); err != nil {
413-
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.Request().RemoteAddr)
414-
}
415-
} else if ip != player.IP {
416-
sendMessage.Accept = BadIP
417-
sendMessage.Message = "Player IP must match IP of room creator"
415+
if roomCreator.Socket != ws {
416+
sendMessage.Accept = BadPlayer
417+
sendMessage.Message = "Player must be room creator"
418418
if err := s.sendData(ws, sendMessage); err != nil {
419419
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.Request().RemoteAddr)
420420
}
421421
} else if g.Running {
422-
sendMessage.Accept = Other
422+
sendMessage.Accept = BadGameState
423423
sendMessage.Message = "Game is already running"
424424
if err := s.sendData(ws, sendMessage); err != nil {
425425
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.Request().RemoteAddr)
426426
}
427-
} else if receivedMessage.Emulator != g.Emulator {
428-
sendMessage.Accept = BadEmulator
429-
sendMessage.Message = "Emulator name must match room emulator"
430-
if err := s.sendData(ws, sendMessage); err != nil {
431-
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.Request().RemoteAddr)
432-
}
433427
} else if receivedMessage.Room.RoomName != roomName {
434428
sendMessage.Accept = BadRoomName
435429
sendMessage.Message = "Room name must match"
@@ -621,13 +615,26 @@ func (s *LobbyServer) wsHandler(ws *websocket.Conn) {
621615
sendMessage.Type = TypeReplyBeginGame
622616
roomName, g := s.findGameServer(receivedMessage.Room.Port)
623617
if g != nil {
624-
if g.Running {
625-
g.Logger.Error(fmt.Errorf("game already running"), "game running", "message", receivedMessage, "address", ws.Request().RemoteAddr)
618+
roomCreator := s.findRoomCreator(g)
619+
620+
if roomCreator.Socket != ws {
621+
sendMessage.Accept = BadPlayer
622+
sendMessage.Message = "Player must be room creator"
623+
if err := s.sendData(ws, sendMessage); err != nil {
624+
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.Request().RemoteAddr)
625+
}
626+
} else if g.Running {
627+
sendMessage.Accept = BadGameState
628+
sendMessage.Message = "Game is already running"
629+
if err := s.sendData(ws, sendMessage); err != nil {
630+
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.Request().RemoteAddr)
631+
}
626632
} else {
627633
g.Running = true
628634
g.StartTime = time.Now()
629635
g.Logger.Info("starting game", "time", g.StartTime.Format(time.RFC3339))
630636
g.NumberOfPlayers = len(g.Players)
637+
sendMessage.Accept = Accepted
631638
go s.watchGameServer(roomName, g)
632639
for _, v := range g.Players {
633640
if err := s.sendData(v.Socket, sendMessage); err != nil {

0 commit comments

Comments
 (0)