Fixed networking bugs
This commit is contained in:
@@ -102,7 +102,13 @@ namespace Marro.PacManUdon
|
||||
/// </summary>
|
||||
private const ushort HeaderLength = 8;
|
||||
|
||||
/// <summary>
|
||||
/// The size of a GUID as used in the Reset event, in bytes.
|
||||
/// </summary>
|
||||
private const ushort GuidSize = 16;
|
||||
/// <summary>
|
||||
/// The total size of the Reset event.
|
||||
/// </summary>
|
||||
private const ushort ResetEventSize = HeaderTimestampIndex + GuidSize;
|
||||
#endregion
|
||||
|
||||
@@ -157,6 +163,9 @@ namespace Marro.PacManUdon
|
||||
/// </summary>
|
||||
private int retriesWithoutSuccess;
|
||||
|
||||
/// <summary>
|
||||
/// The data of the last aknowledged Reset event.
|
||||
/// </summary>
|
||||
private byte[] lastResetEventData;
|
||||
|
||||
/// <summary>
|
||||
@@ -760,7 +769,7 @@ namespace Marro.PacManUdon
|
||||
return; // Nothing to store
|
||||
}
|
||||
|
||||
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Received {networkedData.Length} bytes!\nBytes received:\n{ArrayToString(networkedData)}");
|
||||
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Received {networkedData.Length} bytes!\nBytes received:\n{ArrayToString(networkedData)}");
|
||||
|
||||
var length = networkedData.Length;
|
||||
int index = 0;
|
||||
@@ -798,9 +807,8 @@ namespace Marro.PacManUdon
|
||||
|
||||
var @event = GetArrayPart(networkedData, index, eventSize);
|
||||
|
||||
if (isReset)
|
||||
if (isReset && TryApplyReset(@event))
|
||||
{
|
||||
TryApplyReset(@event);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -844,7 +852,7 @@ namespace Marro.PacManUdon
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
continue; // Event is currently not relevant
|
||||
}
|
||||
|
||||
lastEventId = eventId;
|
||||
@@ -863,23 +871,23 @@ namespace Marro.PacManUdon
|
||||
|
||||
hasFullSyncReady = true;
|
||||
|
||||
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Queued full sync in buffer, should execute at {nextEventTime}.");
|
||||
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Queued full sync in buffer, current time is {SyncedTimeTicks}, should execute at {nextEventTime}.");
|
||||
}
|
||||
|
||||
private void TryApplyReset(byte[] @event)
|
||||
private bool TryApplyReset(byte[] @event)
|
||||
{
|
||||
// Compare the guid to the one in the previous reset event
|
||||
if (IsDuplicateResetEvent(@event))
|
||||
{
|
||||
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Rejected Reset event as it was a duplicate.");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Applied Reset event!");
|
||||
|
||||
lastResetEventData = @event;
|
||||
ClearBuffer();
|
||||
SetSynced(false);
|
||||
Reset();
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsDuplicateResetEvent(byte[] @event)
|
||||
@@ -903,7 +911,6 @@ namespace Marro.PacManUdon
|
||||
{
|
||||
Synced = false;
|
||||
RequestEvent(NetworkEventType.FullSync);
|
||||
lastEventTransmissionTime = SyncedTimeTicks;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -973,7 +980,7 @@ namespace Marro.PacManUdon
|
||||
return false;
|
||||
}
|
||||
|
||||
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Performed incoming event of type {eventType}! Total {index} bytes.");
|
||||
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Performed incoming event of type {eventType}! Total {index} bytes.");
|
||||
|
||||
retriesWithoutSuccess = 0; // We had success!
|
||||
|
||||
@@ -998,6 +1005,7 @@ namespace Marro.PacManUdon
|
||||
eventsQueueIndex = 0;
|
||||
lastEventId = 0;
|
||||
hasFullSyncReady = false;
|
||||
lastEventTransmissionTime = SyncedTimeTicks;
|
||||
|
||||
eventTransmissionHistory = new int[maxEventSendTries];
|
||||
eventTransmissionHistoryIndex = 0;
|
||||
@@ -1089,7 +1097,7 @@ namespace Marro.PacManUdon
|
||||
|
||||
if (nextEventTime < SyncedTimeTicks)
|
||||
{
|
||||
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) New event timestamp is earlier than our current synced time by {SyncedTime - nextEventTime} seconds! nextEventTime: {nextEventTime} SyncedTime: {SyncedTime}, internalTime: {targetTicks}");
|
||||
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) New event timestamp is earlier than our current synced time by {SyncedTimeTicks - nextEventTime}! nextEventTime: {nextEventTime} SyncedTime: {SyncedTimeTicks}, targetTicks: {targetTicks}");
|
||||
HandleError(true);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user