Skip to content

Commit 6c5bd42

Browse files
committed
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 030dacc commit 6c5bd42

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

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

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

1509+
internal int SendPreSerializedMessage<T>(in FastBufferWriter writer, int maxSize, ref T message, NetworkDelivery delivery, ulong clientId)
1510+
where T : INetworkMessage
1511+
{
1512+
return MessagingSystem.SendPreSerializedMessage(writer, maxSize, ref message, delivery, clientId);
1513+
}
1514+
15091515
internal void HandleIncomingData(ulong clientId, ArraySegment<byte> payload, float receiveTime)
15101516
{
15111517
#if DEVELOPMENT_BUILD || UNITY_EDITOR

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)