@@ -15,7 +15,6 @@ import (
1515 "strconv"
1616 "strings"
1717 "sync"
18- "sync/atomic"
1918 "time"
2019
2120 "github.com/go-logr/logr"
@@ -139,17 +138,17 @@ func (s *LobbyServer) updatePlayers(g *gameserver.GameServer) {
139138 sendMessage .Type = TypeReplyPlayers
140139
141140 g .Players .Range (func (k , v any ) bool {
142- if ! v .(* gameserver.Client ).ClosedLobby . Load () {
143- sendMessage .PlayerNames [v .(* gameserver.Client ).Number ] = k .(string )
141+ if v .(gameserver.Client ).InLobby {
142+ sendMessage .PlayerNames [v .(gameserver.Client ).Number ] = k .(string )
144143 }
145144 return true
146145 })
147146
148147 // send the updated player list to all connected players
149148 g .Players .Range (func (k , v any ) bool {
150- if ! v .(* gameserver.Client ).ClosedLobby . Load () {
151- if err := s .sendData (v .(* gameserver.Client ).Socket , sendMessage ); err != nil {
152- s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , v .(* gameserver.Client ).Socket .RemoteAddr ())
149+ if v .(gameserver.Client ).InLobby {
150+ if err := s .sendData (v .(gameserver.Client ).Socket , sendMessage ); err != nil {
151+ s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , v .(gameserver.Client ).Socket .RemoteAddr ())
153152 }
154153 }
155154 return true
@@ -171,9 +170,9 @@ func (s *LobbyServer) updateRoom(g *gameserver.GameServer, name string) {
171170
172171 // send the updated room to all connected players
173172 g .Players .Range (func (k , v any ) bool {
174- if ! v .(* gameserver.Client ).ClosedLobby . Load () {
175- if err := s .sendData (v .(* gameserver.Client ).Socket , sendMessage ); err != nil {
176- s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , v .(* gameserver.Client ).Socket .RemoteAddr ())
173+ if v .(gameserver.Client ).InLobby {
174+ if err := s .sendData (v .(gameserver.Client ).Socket , sendMessage ); err != nil {
175+ s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , v .(gameserver.Client ).Socket .RemoteAddr ())
177176 }
178177 }
179178 return true
@@ -302,13 +301,16 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
302301 if err != nil {
303302 for i , v := range s .gameServers {
304303 v .Players .Range (func (k , w any ) bool {
305- if w .(* gameserver.Client ).Socket == ws {
304+ if w .(gameserver.Client ).Socket == ws {
306305 v .Logger .Info ("Player has left lobby" , "reason" , err .Error (), "player" , k , "address" , ws .RemoteAddr ())
307306
308307 if ! v .Running {
309308 v .Players .Delete (k )
310309 } else {
311- w .(* gameserver.Client ).ClosedLobby .Store (true )
310+ if client , ok := w .(gameserver.Client ); ok {
311+ client .InLobby = false
312+ v .Players .Store (k , client )
313+ }
312314 }
313315 s .updatePlayers (v )
314316 return false
@@ -390,10 +392,10 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
390392 g .Logger .Error (err , "could not parse IP" , "IP" , ws .RemoteAddr ())
391393 }
392394 g .Players .Store (receivedMessage .PlayerName , & gameserver.Client {
393- IP : net .ParseIP (ip ),
394- Number : 0 ,
395- Socket : ws ,
396- ClosedLobby : atomic. Bool {} ,
395+ IP : net .ParseIP (ip ),
396+ Number : 0 ,
397+ Socket : ws ,
398+ InLobby : true ,
397399 })
398400 s .gameServers [receivedMessage .Room .RoomName ] = & g
399401 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 )
@@ -540,7 +542,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
540542 for number = range 4 {
541543 goodNumber = true
542544 g .Players .Range (func (k , v any ) bool {
543- if v .(* gameserver.Client ).Number == number {
545+ if v .(gameserver.Client ).Number == number {
544546 goodNumber = false
545547 return false
546548 } else {
@@ -557,10 +559,10 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
557559 g .Logger .Error (err , "could not parse IP" , "IP" , ws .RemoteAddr ())
558560 }
559561 g .Players .Store (receivedMessage .PlayerName , & gameserver.Client {
560- IP : net .ParseIP (ip ),
561- Socket : ws ,
562- Number : number ,
563- ClosedLobby : atomic. Bool {} ,
562+ IP : net .ParseIP (ip ),
563+ Socket : ws ,
564+ Number : number ,
565+ InLobby : true ,
564566 })
565567
566568 g .Logger .Info ("new player joining room" , "player" , receivedMessage .PlayerName , "playerIP" , ws .RemoteAddr (), "number" , number )
@@ -605,8 +607,8 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
605607 _ , g := s .findGameServer (receivedMessage .Room .Port )
606608 if g != nil {
607609 g .Players .Range (func (k , v any ) bool {
608- if ! v .(* gameserver.Client ).ClosedLobby . Load () {
609- if err := s .sendData (v .(* gameserver.Client ).Socket , sendMessage ); err != nil {
610+ if v .(gameserver.Client ).InLobby {
611+ if err := s .sendData (v .(gameserver.Client ).Socket , sendMessage ); err != nil {
610612 s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , ws .RemoteAddr ())
611613 }
612614 }
@@ -639,7 +641,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
639641 if g .BufferTarget == 0 {
640642 privateNetwork := true
641643 g .Players .Range (func (k , v any ) bool {
642- if ! v .(* gameserver.Client ).IP .IsPrivate () {
644+ if ! v .(gameserver.Client ).IP .IsPrivate () {
643645 privateNetwork = false
644646 return false
645647 } else {
@@ -660,7 +662,7 @@ func (s *LobbyServer) wsHandler(w http.ResponseWriter, r *http.Request) {
660662 sendMessage .Accept = Accepted
661663 go s .watchGameServer (roomName , g )
662664 g .Players .Range (func (k , v any ) bool {
663- if err := s .sendData (v .(* gameserver.Client ).Socket , sendMessage ); err != nil {
665+ if err := s .sendData (v .(gameserver.Client ).Socket , sendMessage ); err != nil {
664666 s .Logger .Error (err , "failed to send message" , "message" , sendMessage , "address" , ws .RemoteAddr ())
665667 }
666668 return true
0 commit comments