Skip to content

Commit 7e4effb

Browse files
authored
use LRU for sync values (#120)
1 parent b3066e2 commit 7e4effb

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

internal/gameServer/udp.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type InputData struct {
1919
}
2020

2121
type GameData struct {
22-
SyncValues map[uint32][]byte
22+
SyncValues *lru.Cache[uint32, []byte]
2323
PlayerAddresses []*net.UDPAddr
2424
BufferSize uint32
2525
BufferHealth []int32
@@ -158,9 +158,9 @@ func (g *GameServer) processUDP(addr *net.UDPAddr) {
158158
case CP0Info:
159159
if g.GameData.Status&StatusDesync == 0 {
160160
viCount := binary.BigEndian.Uint32(g.GameData.recvBuffer[1:])
161-
syncValue, ok := g.GameData.SyncValues[viCount]
161+
syncValue, ok := g.GameData.SyncValues.Get(viCount)
162162
if !ok {
163-
g.GameData.SyncValues[viCount] = g.GameData.recvBuffer[5:133]
163+
g.GameData.SyncValues.Add(viCount, g.GameData.recvBuffer[5:133])
164164
} else if !bytes.Equal(syncValue, g.GameData.recvBuffer[5:133]) {
165165
g.GameDataMutex.Lock() // Status can be modified by ManagePlayers in a different thread
166166
g.GameData.Status |= StatusDesync
@@ -220,7 +220,7 @@ func (g *GameServer) createUDPServer() error {
220220
}
221221
g.GameData.PendingInput = make([]uint32, 4)
222222
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
224224
g.GameData.PlayerAlive = make([]bool, 4)
225225
g.GameData.CountLag = make([]uint32, 4)
226226
g.GameData.sendBuffer = make([]byte, 508)

0 commit comments

Comments
 (0)