Skip to content

Commit d19dd93

Browse files
committed
make lobby var atomic
1 parent bb2c971 commit d19dd93

2 files changed

Lines changed: 18 additions & 17 deletions

File tree

internal/gameServer/server.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import (
1313
)
1414

1515
type Client struct {
16-
Socket *websocket.Conn
17-
IP net.IP
18-
Number int
19-
InLobby bool
16+
Socket *websocket.Conn
17+
IP net.IP
18+
Number int
19+
ClosedLobby atomic.Bool
2020
}
2121

2222
type Registration struct {

internal/lobbyServer/lobby.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)