Switched to 1d array CollectSyncedData
This commit is contained in:
@@ -64,6 +64,10 @@ namespace Marro.PacManUdon
|
||||
/// The maximum amount of events in the buffer.
|
||||
/// </summary>
|
||||
private const int BufferMaxTotalEvents = 255;
|
||||
/// <summary>
|
||||
/// The maximum amount of events in the buffer.
|
||||
/// </summary>
|
||||
private const int MaxEventSize = ushort.MaxValue;
|
||||
|
||||
/// <summary>
|
||||
/// The index in an event where the event size is stored.
|
||||
@@ -396,36 +400,27 @@ namespace Marro.PacManUdon
|
||||
|
||||
var eventId = GetNextEventId(lastEventId);
|
||||
|
||||
InitializeEvent(eventType, timestamp, eventId, BufferMaxTotalEvents, out byte[][] data, out var index);
|
||||
InitializeEvent(eventType, timestamp, eventId, out byte[] data, out var index);
|
||||
|
||||
foreach (var obj in syncedObjects)
|
||||
{
|
||||
obj.AppendSyncedData(data, ref index, eventType);
|
||||
obj.CollectSyncedData(data, ref index, eventType);
|
||||
}
|
||||
|
||||
var result = Flatten(data, 0, index);
|
||||
|
||||
// Validate and fill in event size
|
||||
var eventSize = result.Length;
|
||||
|
||||
if (eventSize > ushort.MaxValue || eventSize < 0)
|
||||
{
|
||||
Debug.LogError($"({nameof(PacManUdon)} {nameof(NetworkManager)}) New event is too large or negative! Size is {eventSize}, maximum allowed is {ushort.MaxValue}");
|
||||
HandleError(false);
|
||||
return;
|
||||
}
|
||||
|
||||
var eventSizeBytes = BitConverter.GetBytes((ushort)eventSize);
|
||||
Array.Copy(eventSizeBytes, 0, result, HeaderEventSizeIndex, eventSizeBytes.Length);
|
||||
var eventSizeBytes = BitConverter.GetBytes((ushort)index);
|
||||
Array.Copy(eventSizeBytes, 0, data, HeaderEventSizeIndex, eventSizeBytes.Length);
|
||||
|
||||
if (IsFullSync(eventType))
|
||||
{
|
||||
hasFullSyncReady = true;
|
||||
}
|
||||
|
||||
QueueEventInBuffer(result);
|
||||
data = GetArrayPart(data, 0, index);
|
||||
|
||||
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Prepared event of type {eventType} with {eventSize} bytes, timestamp {timestamp} and id {eventId} for serialization.");
|
||||
QueueEventInBuffer(data);
|
||||
|
||||
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Prepared event of type {eventType} with {data.Length} bytes, timestamp {timestamp} and id {eventId} for serialization.");
|
||||
|
||||
RequestSerializationForEvents();
|
||||
|
||||
@@ -434,22 +429,16 @@ namespace Marro.PacManUdon
|
||||
retriesWithoutSuccess = 0; // We had success!
|
||||
}
|
||||
|
||||
private static void InitializeEvent(NetworkEventType eventType, float timestamp, byte eventId, int maxSize, out byte[][] data, out int index)
|
||||
private static void InitializeEvent(NetworkEventType eventType, float timestamp, byte eventId, out byte[] data, out int index)
|
||||
{
|
||||
// Create header
|
||||
data = new byte[MaxEventSize];
|
||||
|
||||
// Create header (note: event size is added later)
|
||||
var timestampBytes = BitConverter.GetBytes(timestamp);
|
||||
|
||||
var header = new byte[HeaderLength];
|
||||
|
||||
// Event size is added later
|
||||
Array.Copy(timestampBytes, 0, header, HeaderTimestampIndex, timestampBytes.Length);
|
||||
header[HeaderEventIdIndex] = eventId;
|
||||
header[HeaderEventTypeIndex] = Int32ToByte((int)eventType);
|
||||
|
||||
// Initialize event container
|
||||
data = new byte[maxSize][];
|
||||
data[0] = header;
|
||||
index = 1;
|
||||
Array.Copy(timestampBytes, 0, data, HeaderTimestampIndex, timestampBytes.Length);
|
||||
data[HeaderEventIdIndex] = eventId;
|
||||
data[HeaderEventTypeIndex] = Int32ToByte((int)eventType);
|
||||
index = HeaderLength;
|
||||
}
|
||||
|
||||
private void RequestSerializationForEvents()
|
||||
@@ -696,7 +685,7 @@ namespace Marro.PacManUdon
|
||||
|
||||
foreach (var obj in syncedObjects)
|
||||
{
|
||||
var success = obj.SetSyncedData(@event, ref index, eventType);
|
||||
var success = obj.WriteSyncedData(@event, ref index, eventType);
|
||||
|
||||
if (!success)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user