Skip to content

Commit 20e8936

Browse files
committed
more sync improvements
1 parent c393031 commit 20e8936

1 file changed

Lines changed: 25 additions & 30 deletions

File tree

internal/lobbyServer/lobby.go

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,11 @@ func (s *LobbyServer) findGameServer(port int) (string, *gameserver.GameServer)
129129
return "", nil
130130
}
131131

132-
func (s *LobbyServer) findRoomCreator(g *gameserver.GameServer) *gameserver.Client {
133-
var c *gameserver.Client
132+
func (s *LobbyServer) findRoomCreatorSocket(g *gameserver.GameServer) *websocket.Conn {
133+
var c *websocket.Conn
134134
g.Players.Range(func(k, v any) bool {
135-
if client, ok := v.(gameserver.Client); ok {
136-
if client.Number == 0 {
137-
c = &client
138-
}
135+
if v.(*gameserver.Client).Number == 0 {
136+
c = v.(*gameserver.Client).Socket
139137
}
140138
return true
141139
})
@@ -151,17 +149,17 @@ func (s *LobbyServer) updatePlayers(g *gameserver.GameServer) {
151149
sendMessage.Type = TypeReplyPlayers
152150

153151
g.Players.Range(func(k, v any) bool {
154-
if v.(gameserver.Client).InLobby {
155-
sendMessage.PlayerNames[v.(gameserver.Client).Number] = k.(string)
152+
if v.(*gameserver.Client).InLobby {
153+
sendMessage.PlayerNames[v.(*gameserver.Client).Number] = k.(string)
156154
}
157155
return true
158156
})
159157

160158
// send the updated player list to all connected players
161159
g.Players.Range(func(k, v any) bool {
162-
if v.(gameserver.Client).InLobby {
163-
if err := s.sendData(v.(gameserver.Client).Socket, sendMessage); err != nil {
164-
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", v.(gameserver.Client).Socket.RemoteAddr())
160+
if v.(*gameserver.Client).InLobby {
161+
if err := s.sendData(v.(*gameserver.Client).Socket, sendMessage); err != nil {
162+
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", v.(*gameserver.Client).Socket.RemoteAddr())
165163
}
166164
}
167165
return true
@@ -183,9 +181,9 @@ func (s *LobbyServer) updateRoom(g *gameserver.GameServer, name string) {
183181

184182
// send the updated room to all connected players
185183
g.Players.Range(func(k, v any) bool {
186-
if v.(gameserver.Client).InLobby {
187-
if err := s.sendData(v.(gameserver.Client).Socket, sendMessage); err != nil {
188-
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", v.(gameserver.Client).Socket.RemoteAddr())
184+
if v.(*gameserver.Client).InLobby {
185+
if err := s.sendData(v.(*gameserver.Client).Socket, sendMessage); err != nil {
186+
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", v.(*gameserver.Client).Socket.RemoteAddr())
189187
}
190188
}
191189
return true
@@ -314,16 +312,13 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
314312
if err != nil {
315313
for i, v := range s.gameServers {
316314
v.Players.Range(func(k, w any) bool {
317-
if w.(gameserver.Client).Socket == ws {
315+
if w.(*gameserver.Client).Socket == ws {
318316
v.Logger.Info("Player has left lobby", "reason", err.Error(), "player", k, "address", ws.RemoteAddr())
319317

320318
if !v.Running {
321319
v.Players.Delete(k)
322320
} else {
323-
if client, ok := w.(gameserver.Client); ok {
324-
client.InLobby = false
325-
v.Players.Store(k, client)
326-
}
321+
w.(*gameserver.Client).InLobby = false
327322
}
328323
s.updatePlayers(v)
329324
}
@@ -402,7 +397,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
402397
if err != nil {
403398
g.Logger.Error(err, "could not parse IP", "IP", ws.RemoteAddr())
404399
}
405-
g.Players.Store(receivedMessage.PlayerName, gameserver.Client{
400+
g.Players.Store(receivedMessage.PlayerName, &gameserver.Client{
406401
IP: net.ParseIP(ip),
407402
Number: 0,
408403
Socket: ws,
@@ -433,9 +428,9 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
433428
roomName, g := s.findGameServer(receivedMessage.Room.Port)
434429

435430
if g != nil {
436-
roomCreator := s.findRoomCreator(g)
431+
roomCreatorSocket := s.findRoomCreatorSocket(g)
437432

438-
if roomCreator.Socket != ws {
433+
if roomCreatorSocket != ws {
439434
sendMessage.Accept = BadPlayer
440435
sendMessage.Message = "Player must be room creator"
441436
if err := s.sendData(ws, sendMessage); err != nil {
@@ -553,7 +548,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
553548
for number = range 4 {
554549
goodNumber = true
555550
g.Players.Range(func(k, v any) bool {
556-
if v.(gameserver.Client).Number == number {
551+
if v.(*gameserver.Client).Number == number {
557552
goodNumber = false
558553
}
559554
return true
@@ -567,7 +562,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
567562
if err != nil {
568563
g.Logger.Error(err, "could not parse IP", "IP", ws.RemoteAddr())
569564
}
570-
g.Players.Store(receivedMessage.PlayerName, gameserver.Client{
565+
g.Players.Store(receivedMessage.PlayerName, &gameserver.Client{
571566
IP: net.ParseIP(ip),
572567
Socket: ws,
573568
Number: number,
@@ -616,8 +611,8 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
616611
_, g := s.findGameServer(receivedMessage.Room.Port)
617612
if g != nil {
618613
g.Players.Range(func(k, v any) bool {
619-
if v.(gameserver.Client).InLobby {
620-
if err := s.sendData(v.(gameserver.Client).Socket, sendMessage); err != nil {
614+
if v.(*gameserver.Client).InLobby {
615+
if err := s.sendData(v.(*gameserver.Client).Socket, sendMessage); err != nil {
621616
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.RemoteAddr())
622617
}
623618
}
@@ -634,9 +629,9 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
634629
sendMessage.Type = TypeReplyBeginGame
635630
roomName, g := s.findGameServer(receivedMessage.Room.Port)
636631
if g != nil {
637-
roomCreator := s.findRoomCreator(g)
632+
roomCreatorSocket := s.findRoomCreatorSocket(g)
638633

639-
if roomCreator.Socket != ws {
634+
if roomCreatorSocket != ws {
640635
sendMessage.Accept = BadPlayer
641636
sendMessage.Message = "Player must be room creator"
642637
if err := s.sendData(ws, sendMessage); err != nil {
@@ -652,7 +647,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
652647
if g.BufferTarget == 0 {
653648
privateNetwork := true
654649
g.Players.Range(func(k, v any) bool {
655-
if !v.(gameserver.Client).IP.IsPrivate() {
650+
if !v.(*gameserver.Client).IP.IsPrivate() {
656651
privateNetwork = false
657652
}
658653
return true
@@ -671,7 +666,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
671666
sendMessage.Accept = Accepted
672667
go s.watchGameServer(roomName, g)
673668
g.Players.Range(func(k, v any) bool {
674-
if err := s.sendData(v.(gameserver.Client).Socket, sendMessage); err != nil {
669+
if err := s.sendData(v.(*gameserver.Client).Socket, sendMessage); err != nil {
675670
s.Logger.Error(err, "failed to send message", "message", sendMessage, "address", ws.RemoteAddr())
676671
}
677672
return true

0 commit comments

Comments
 (0)