using Cyber.Console;
using Cyber.Entities;
using Cyber.Entities.SyncBases;
using Cyber.Networking.Messages;
using System.Collections.Generic;
using UnityEngine.Networking;
namespace Cyber.Networking.Clientside {
///
/// A Short clientside class for handling sync packages.
/// It simply keeps track of sync-packages and will not apply them if they are too old.
///
public class SyncHandler {
private SyncDB SyncDB;
private int LatestSyncID = -1;
///
/// Creates the SyncHandler with SyncDB.
///
///
public SyncHandler(SyncDB syncDB) {
SyncDB = syncDB;
}
///
/// Handle a given Network message. Must be checked to be first.
///
///
public void HandleSyncPkt(NetworkMessage message) {
SyncPkt SyncPacket = new SyncPkt(SyncDB);
SyncPacket.Deserialize(message.reader);
if (LatestSyncID < SyncPacket.SyncPacketID) {
LatestSyncID = SyncPacket.SyncPacketID;
SyncPacket.ApplySync(message.reader);
int[] SyncBases = SyncPacket.ChecksummedSyncBases;
int[] Checksums = SyncPacket.Checksums;
if (SyncBases.Length > 0) {
List FailedSyncBases = new List();
for (int i = 0; i < SyncBases.Length; i++) {
SyncBase SyncBase = SyncDB.Get(SyncBases[i]);
if (SyncBase.GenerateChecksum() != Checksums[i]) {
FailedSyncBases.Add(SyncBase.ID);
}
}
Client.Send(PktType.FailedChecksums, new IntListPkt(FailedSyncBases.ToArray()));
}
}
// Otherwise disregard the sync.
}
}
}