@@ -19,7 +19,7 @@ type InputData struct {
19
19
}
20
20
21
21
type GameData struct {
22
- SyncValues map [uint32 ] []byte
22
+ SyncValues * lru. Cache [uint32 , []byte ]
23
23
PlayerAddresses []* net.UDPAddr
24
24
BufferSize uint32
25
25
BufferHealth []int32
@@ -158,9 +158,9 @@ func (g *GameServer) processUDP(addr *net.UDPAddr) {
158
158
case CP0Info :
159
159
if g .GameData .Status & StatusDesync == 0 {
160
160
viCount := binary .BigEndian .Uint32 (g .GameData .recvBuffer [1 :])
161
- syncValue , ok := g .GameData .SyncValues [ viCount ]
161
+ syncValue , ok := g .GameData .SyncValues . Get ( viCount )
162
162
if ! ok {
163
- g .GameData .SyncValues [ viCount ] = g .GameData .recvBuffer [5 :133 ]
163
+ g .GameData .SyncValues . Add ( viCount , g .GameData .recvBuffer [5 :133 ])
164
164
} else if ! bytes .Equal (syncValue , g .GameData .recvBuffer [5 :133 ]) {
165
165
g .GameDataMutex .Lock () // Status can be modified by ManagePlayers in a different thread
166
166
g .GameData .Status |= StatusDesync
@@ -220,7 +220,7 @@ func (g *GameServer) createUDPServer() error {
220
220
}
221
221
g .GameData .PendingInput = make ([]uint32 , 4 )
222
222
g .GameData .PendingPlugin = make ([]byte , 4 )
223
- g .GameData .SyncValues = make ( map [uint32 ] []byte )
223
+ g .GameData .SyncValues , _ = lru. New [uint32 , []byte ]( 100 ) // Store up to 100 sync values
224
224
g .GameData .PlayerAlive = make ([]bool , 4 )
225
225
g .GameData .CountLag = make ([]uint32 , 4 )
226
226
g .GameData .sendBuffer = make ([]byte , 508 )
0 commit comments