@@ -128,8 +128,7 @@ func (g *GameServer) tcpSendReg(conn *net.TCPConn) {
128128 registrations := make ([]byte , 24 )
129129 current := 0
130130 for i = range 4 {
131- v , ok := g .registrations .Load (i )
132- if ok {
131+ if v , ok := g .registrations .Load (i ); ok {
133132 binary .BigEndian .PutUint32 (registrations [current :], v .(* Registration ).regID )
134133 current += 4
135134 registrations [current ] = v .(* Registration ).plugin
@@ -282,8 +281,15 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
282281 regID := binary .BigEndian .Uint32 (regIDBytes )
283282
284283 response := make ([]byte , 2 )
285- v , ok := g .registrations .Load (playerNumber )
286- if ! ok {
284+ 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 ())
287+ response [0 ] = 1
288+ } 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 ())
290+ response [0 ] = 0
291+ }
292+ } else {
287293 if playerNumber > 0 && plugin == 2 { // Only P1 can use mempak
288294 plugin = 1
289295 }
@@ -301,14 +307,6 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
301307 g .gameData .pendingInput [playerNumber ] = InputData {0 , plugin }
302308 g .gameData .playerAlive [playerNumber ] = true
303309 g .gameDataMutex .Unlock ()
304- } else {
305- if v .(* Registration ).regID == regID {
306- g .Logger .Error (fmt .Errorf ("re-registration" ), "player already registered" , "registration" , v .(* Registration ), "number" , playerNumber , "bufferLeft" , tcpData .buffer .Len (), "address" , conn .RemoteAddr ().String ())
307- response [0 ] = 1
308- } else {
309- g .Logger .Error (fmt .Errorf ("registration failure" ), "could not register player" , "registration" , v .(* Registration ), "number" , playerNumber , "bufferLeft" , tcpData .buffer .Len (), "address" , conn .RemoteAddr ().String ())
310- response [0 ] = 0
311- }
312310 }
313311
314312 response [1 ] = uint8 (g .BufferTarget )
@@ -333,27 +331,28 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
333331 regID := binary .BigEndian .Uint32 (regIDBytes )
334332 var i byte
335333 for i = range 4 {
336- v , ok := g .registrations .Load (i )
337- if ok && v .(* Registration ).regID == regID {
338- g .Logger .Info ("player disconnected TCP" , "regID" , regID , "player" , i , "address" , conn .RemoteAddr ().String ())
339-
340- g .gameDataMutex .Lock ()
341- g .gameData .playerAlive [i ] = false
342- g .gameData .status |= (0x1 << (i + 1 ))
343- g .registrations .Delete (i )
344-
345- g .Players .Range (func (k , v any ) bool {
346- if v .(* Client ).Number == int (i ) {
347- g .Players .Delete (k )
348- g .NeedsUpdatePlayers .Store (true )
349- return false
350- } else {
351- return true
352- }
353- })
354-
355- g .gameData .bufferHealth [i ] = g .gameData .bufferHealth [i ][:0 ]
356- g .gameDataMutex .Unlock ()
334+ if v , ok := g .registrations .Load (i ); ok {
335+ if v .(* Registration ).regID == regID {
336+ g .Logger .Info ("player disconnected TCP" , "regID" , regID , "player" , i , "address" , conn .RemoteAddr ().String ())
337+
338+ g .gameDataMutex .Lock ()
339+ g .gameData .playerAlive [i ] = false
340+ g .gameData .status |= (0x1 << (i + 1 ))
341+ g .registrations .Delete (i )
342+
343+ g .Players .Range (func (k , v any ) bool {
344+ if v .(* Client ).Number == int (i ) {
345+ g .Players .Delete (k )
346+ g .NeedsUpdatePlayers .Store (true )
347+ return false
348+ } else {
349+ return true
350+ }
351+ })
352+
353+ g .gameData .bufferHealth [i ] = g .gameData .bufferHealth [i ][:0 ]
354+ g .gameDataMutex .Unlock ()
355+ }
357356 }
358357 }
359358 tcpData .request = RequestNone
0 commit comments