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) { Term.Println("Found checksums!"); List FailedSyncBases = new List(); for (int i = 0; i < SyncBases.Length; i++) { SyncBase SyncBase = SyncDB.Get(SyncBases[i]); if (SyncBase.GenerateChecksum() != Checksums[i]) { Term.Println("Diffrentiating checksum!"); FailedSyncBases.Add(SyncBase.ID); } } Client.Send(PktType.FailedChecksums, new IntListPkt(FailedSyncBases.ToArray())); } } // Otherwise disregard the sync. } } }