Skip to content

Commit 6d167c3

Browse files
committed
dont use pointers
1 parent d19dd93 commit 6d167c3

4 files changed

Lines changed: 41 additions & 39 deletions

File tree

internal/gameServer/server.go

Lines changed: 6 additions & 6 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-
ClosedLobby atomic.Bool
16+
Socket *websocket.Conn
17+
IP net.IP
18+
Number int
19+
InLobby bool
2020
}
2121

2222
type Registration struct {
@@ -173,10 +173,10 @@ func (g *GameServer) ManagePlayers() {
173173
for i = range 4 {
174174
if v, ok := g.registrations.Load(i); ok {
175175
if g.gameData.playerAlive[i] {
176-
g.Logger.Info("player status", "player", i, "regID", v.(*Registration).regID, "bufferHealth", g.gameData.averageBufferHealth[i], "bufferSize", g.gameData.bufferSize, "countLag", g.gameData.averageCountLag[i], "address", g.gameData.playerAddresses[i])
176+
g.Logger.Info("player status", "player", i, "regID", v.(Registration).regID, "bufferHealth", g.gameData.averageBufferHealth[i], "bufferSize", g.gameData.bufferSize, "countLag", g.gameData.averageCountLag[i], "address", g.gameData.playerAddresses[i])
177177
playersActive = true
178178
} else {
179-
g.Logger.Info("player disconnected UDP", "player", i, "regID", v.(*Registration).regID, "address", g.gameData.playerAddresses[i])
179+
g.Logger.Info("player disconnected UDP", "player", i, "regID", v.(Registration).regID, "address", g.gameData.playerAddresses[i])
180180
g.gameData.status |= (0x1 << (i + 1))
181181

182182
g.registrations.Delete(i)

internal/gameServer/tcp.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,11 @@ func (g *GameServer) tcpSendReg(conn *net.TCPConn) {
129129
current := 0
130130
for i = range 4 {
131131
if v, ok := g.registrations.Load(i); ok {
132-
binary.BigEndian.PutUint32(registrations[current:], v.(*Registration).regID)
132+
binary.BigEndian.PutUint32(registrations[current:], v.(Registration).regID)
133133
current += 4
134-
registrations[current] = v.(*Registration).plugin
134+
registrations[current] = v.(Registration).plugin
135135
current++
136-
registrations[current] = v.(*Registration).raw
136+
registrations[current] = v.(Registration).raw
137137
current++
138138
} else {
139139
current += 6
@@ -282,19 +282,19 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
282282

283283
response := make([]byte, 2)
284284
if v, ok := g.registrations.Load(playerNumber); ok {
285-
if v.(*Registration).regID == regID {
286-
g.Logger.Error(fmt.Errorf("re-registration"), "player already registered", "registration", v.(*Registration), "number", playerNumber, "bufferLeft", tcpData.buffer.Len(), "address", conn.RemoteAddr().String())
285+
if v.(Registration).regID == regID {
286+
g.Logger.Error(fmt.Errorf("re-registration"), "player already registered", "registration", v.(Registration), "number", playerNumber, "bufferLeft", tcpData.buffer.Len(), "address", conn.RemoteAddr().String())
287287
response[0] = 1
288288
} else {
289-
g.Logger.Error(fmt.Errorf("registration failure"), "could not register player", "registration", v.(*Registration), "number", playerNumber, "bufferLeft", tcpData.buffer.Len(), "address", conn.RemoteAddr().String())
289+
g.Logger.Error(fmt.Errorf("registration failure"), "could not register player", "registration", v.(Registration), "number", playerNumber, "bufferLeft", tcpData.buffer.Len(), "address", conn.RemoteAddr().String())
290290
response[0] = 0
291291
}
292292
} else {
293293
if playerNumber > 0 && plugin == 2 { // Only P1 can use mempak
294294
plugin = 1
295295
}
296296

297-
g.registrations.Store(playerNumber, &Registration{
297+
g.registrations.Store(playerNumber, Registration{
298298
regID: regID,
299299
plugin: plugin,
300300
raw: raw,
@@ -332,7 +332,7 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
332332
var i byte
333333
for i = range 4 {
334334
if v, ok := g.registrations.Load(i); ok {
335-
if v.(*Registration).regID == regID {
335+
if v.(Registration).regID == regID {
336336
g.Logger.Info("player disconnected TCP", "regID", regID, "player", i, "address", conn.RemoteAddr().String())
337337

338338
g.gameDataMutex.Lock()

internal/gameServer/udp.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (g *GameServer) getPlayerNumberByID(regID uint32) (byte, error) {
6060
var i byte
6161
for i = range 4 {
6262
if v, ok := g.registrations.Load(i); ok {
63-
if v.(*Registration).regID == regID {
63+
if v.(Registration).regID == regID {
6464
return i, nil
6565
}
6666
}

internal/lobbyServer/lobby.go

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

Comments
 (0)