@@ -15,6 +15,7 @@ import (
1515 "strconv"
1616 "strings"
1717 "sync"
18+ "sync/atomic"
1819 "time"
1920
2021 "github.com/go-logr/logr"
@@ -138,15 +139,15 @@ func (s *LobbyServer) updatePlayers(g *gameserver.GameServer) {
138139 sendMessage .Type = TypeReplyPlayers
139140
140141 g .Players .Range (func (k , v any ) bool {
141- if v .(* gameserver.Client ).InLobby {
142+ if ! v .(* gameserver.Client ).ClosedLobby . Load () {
142143 sendMessage .PlayerNames [v .(* gameserver.Client ).Number ] = k .(string )
143144 }
144145 return true
145146 })
146147
147148 // send the updated player list to all connected players
148149 g .Players .Range (func (k , v any ) bool {
149- if v .(* gameserver.Client ).InLobby {
150+ if ! v .(* gameserver.Client ).ClosedLobby . Load () {
150151 if err := s .sendData (v .(* gameserver.Client ).Socket , sendMessage ); err != nil {
151152 s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , v .(* gameserver.Client ).Socket .RemoteAddr ())
152153 }
@@ -170,7 +171,7 @@ func (s *LobbyServer) updateRoom(g *gameserver.GameServer, name string) {
170171
171172 // send the updated room to all connected players
172173 g .Players .Range (func (k , v any ) bool {
173- if v .(* gameserver.Client ).InLobby {
174+ if ! v .(* gameserver.Client ).ClosedLobby . Load () {
174175 if err := s .sendData (v .(* gameserver.Client ).Socket , sendMessage ); err != nil {
175176 s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , v .(* gameserver.Client ).Socket .RemoteAddr ())
176177 }
@@ -307,7 +308,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
307308 if ! v .Running {
308309 v .Players .Delete (k )
309310 } else {
310- w .(* gameserver.Client ).InLobby = false
311+ w .(* gameserver.Client ).ClosedLobby . Store ( true )
311312 }
312313 s .updatePlayers (v )
313314 return false
@@ -389,10 +390,10 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
389390 g .Logger .Error (err , "could not parse IP" , "IP" , ws .RemoteAddr ())
390391 }
391392 g .Players .Store (receivedMessage .PlayerName , & gameserver.Client {
392- IP : net .ParseIP (ip ),
393- Number : 0 ,
394- Socket : ws ,
395- InLobby : true ,
393+ IP : net .ParseIP (ip ),
394+ Number : 0 ,
395+ Socket : ws ,
396+ ClosedLobby : atomic. Bool {} ,
396397 })
397398 s .gameServers [receivedMessage .Room .RoomName ] = & g
398399 g .Logger .Info ("Created new room" , "port" , g .Port , "creator" , receivedMessage .PlayerName , "clientSHA" , receivedMessage .ClientSha , "creatorIP" , ws .RemoteAddr (), "buffer_target" , g .BufferTarget , "features" , receivedMessage .Room .Features )
@@ -556,10 +557,10 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
556557 g .Logger .Error (err , "could not parse IP" , "IP" , ws .RemoteAddr ())
557558 }
558559 g .Players .Store (receivedMessage .PlayerName , & gameserver.Client {
559- IP : net .ParseIP (ip ),
560- Socket : ws ,
561- Number : number ,
562- InLobby : true ,
560+ IP : net .ParseIP (ip ),
561+ Socket : ws ,
562+ Number : number ,
563+ ClosedLobby : atomic. Bool {} ,
563564 })
564565
565566 g .Logger .Info ("new player joining room" , "player" , receivedMessage .PlayerName , "playerIP" , ws .RemoteAddr (), "number" , number )
@@ -604,7 +605,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
604605 _ , g := s .findGameServer (receivedMessage .Room .Port )
605606 if g != nil {
606607 g .Players .Range (func (k , v any ) bool {
607- if v .(* gameserver.Client ).InLobby {
608+ if ! v .(* gameserver.Client ).ClosedLobby . Load () {
608609 if err := s .sendData (v .(* gameserver.Client ).Socket , sendMessage ); err != nil {
609610 s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , ws .RemoteAddr ())
610611 }
0 commit comments