Skip to content

Commit 23ac017

Browse files
authored
refactor: Splitting MessagingSystem.SendMessage into a second part … (#1642)
* Splitting MessagingSystem.SendMessage into a second part, SendPreSerializedMessage. This allows SnapshotSystem to send larger messages, while saving an allocation and a copy. * refactor: Splitting MessagingSystem.SendMessage into second part, SendPreSerializedMessage. This allows SnapshotSystem to send larger messages, while saving an allocation and a copy.
1 parent d245604 commit 23ac017

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,6 +1485,12 @@ internal int SendMessage<T>(ref T message, NetworkDelivery delivery, ulong clien
14851485
return MessagingSystem.SendMessage(ref message, delivery, clientId);
14861486
}
14871487

1488+
internal int SendPreSerializedMessage<T>(in FastBufferWriter writer, int maxSize, ref T message, NetworkDelivery delivery, ulong clientId)
1489+
where T : INetworkMessage
1490+
{
1491+
return MessagingSystem.SendPreSerializedMessage(writer, maxSize, ref message, delivery, clientId);
1492+
}
1493+
14881494
internal void HandleIncomingData(ulong clientId, ArraySegment<byte> payload, float receiveTime)
14891495
{
14901496
#if DEVELOPMENT_BUILD || UNITY_EDITOR

com.unity.netcode.gameobjects/Runtime/Core/SnapshotSystem.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -919,8 +919,7 @@ internal void NetworkGetBehaviourVariable(UpdateCommand updateCommand, out Netwo
919919

920920
internal int NetworkSendMessage(SnapshotDataMessage message, ulong clientId)
921921
{
922-
m_NetworkManager.SendMessage(ref message, NetworkDelivery.ReliableFragmentedSequenced, clientId);
923-
922+
m_NetworkManager.SendPreSerializedMessage(message.WriteBuffer, TotalBufferMemory, ref message, NetworkDelivery.Unreliable, clientId);
924923
return 0;
925924
}
926925
}

com.unity.netcode.gameobjects/Runtime/Messaging/MessagingSystem.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ private bool CanSend(ulong clientId, Type messageType, NetworkDelivery delivery)
352352
return true;
353353
}
354354

355-
internal unsafe int SendMessage<TMessageType, TClientIdListType>(ref TMessageType message, NetworkDelivery delivery, in TClientIdListType clientIds)
355+
internal int SendMessage<TMessageType, TClientIdListType>(ref TMessageType message, NetworkDelivery delivery, in TClientIdListType clientIds)
356356
where TMessageType : INetworkMessage
357357
where TClientIdListType : IReadOnlyList<ulong>
358358
{
@@ -367,6 +367,12 @@ internal unsafe int SendMessage<TMessageType, TClientIdListType>(ref TMessageTyp
367367

368368
message.Serialize(tmpSerializer);
369369

370+
return SendPreSerializedMessage(tmpSerializer, maxSize, ref message, delivery, clientIds);
371+
}
372+
373+
internal unsafe int SendPreSerializedMessage<TMessageType>(in FastBufferWriter tmpSerializer, int maxSize, ref TMessageType message, NetworkDelivery delivery, in IReadOnlyList<ulong> clientIds)
374+
where TMessageType : INetworkMessage
375+
{
370376
using var headerSerializer = new FastBufferWriter(FastBufferWriter.GetWriteSize<MessageHeader>(), Allocator.Temp);
371377

372378
var header = new MessageHeader
@@ -426,6 +432,13 @@ internal unsafe int SendMessage<TMessageType, TClientIdListType>(ref TMessageTyp
426432
return tmpSerializer.Length + headerSerializer.Length;
427433
}
428434

435+
internal unsafe int SendPreSerializedMessage<TMessageType>(in FastBufferWriter tmpSerializer, int maxSize, ref TMessageType message, NetworkDelivery delivery, ulong clientId)
436+
where TMessageType : INetworkMessage
437+
{
438+
ulong* clientIds = stackalloc ulong[] { clientId };
439+
return SendPreSerializedMessage(tmpSerializer, maxSize, ref message, delivery, new PointerListWrapper<ulong>(clientIds, 1));
440+
}
441+
429442
private struct PointerListWrapper<T> : IReadOnlyList<T>
430443
where T : unmanaged
431444
{

0 commit comments

Comments
 (0)