Skip to content

Commit f7bfc9a

Browse files
NETC-8
Left out the SpawnManager changes (PR #407) which was merged into the RPC queue branch prior to the migration.
1 parent 0f9e083 commit f7bfc9a

File tree

1 file changed

+43
-7
lines changed

1 file changed

+43
-7
lines changed

com.unity.multiplayer.mlapi/Runtime/Spawning/SpawnManager.cs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -402,12 +402,33 @@ internal static void SpawnNetworkedObjectLocally(NetworkedObject netObject, ulon
402402

403403
internal static void SendSpawnCallForObject(ulong clientId, NetworkedObject netObject, Stream payload)
404404
{
405-
using (PooledBitStream stream = PooledBitStream.Get())
405+
406+
//Currently, if this is called and the clientId (destination) is the server's client Id, this case
407+
//will be checked within the below Send function. To avoid unwarranted allocation of a PooledBitStream
408+
//placing this check here. [NSS]
409+
if (NetworkingManager.Singleton.IsServer && clientId == NetworkingManager.Singleton.ServerClientId)
406410
{
411+
return;
412+
}
413+
414+
RPCQueueManager rpcQueueManager = NetworkingManager.Singleton.GetRPCQueueManager();
415+
if(rpcQueueManager != null)
416+
{
417+
418+
PooledBitStream stream = PooledBitStream.Get();
407419
WriteSpawnCallForObject(stream, clientId, netObject, payload);
408420

409-
InternalMessageSender.Send(clientId, MLAPIConstants.MLAPI_ADD_OBJECT, "MLAPI_INTERNAL", stream, SecuritySendFlags.None);
421+
422+
FrameQueueItem QueueItem = new FrameQueueItem();
423+
QueueItem.QueueItemType = RPCQueueManager.QueueItemType.CreateObject;
424+
QueueItem.NetworkId = 0;
425+
QueueItem.ItemStream = stream;
426+
QueueItem.Channel = "MLAPI_INTERNAL";
427+
QueueItem.SendFlags = SecuritySendFlags.None;
428+
QueueItem.ClientIds = new List<ulong>() { clientId };
429+
rpcQueueManager.AddToInternalMLAPISendQueue(QueueItem);
410430
}
431+
411432
}
412433

413434
internal static void WriteSpawnCallForObject(Serialization.BitStream stream, ulong clientId, NetworkedObject netObject, Stream payload)
@@ -635,15 +656,30 @@ internal static void OnDestroyObject(ulong networkId, bool destroyGameObject)
635656
});
636657
}
637658

638-
if (sobj != null)
639-
{
640-
using (PooledBitStream stream = PooledBitStream.Get())
659+
RPCQueueManager rpcQueueManager = NetworkingManager.Singleton.GetRPCQueueManager();
660+
if(rpcQueueManager != null)
661+
{
662+
663+
if (sobj != null)
641664
{
642-
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
665+
// As long as we have any remaining clients, then notify of the object being destroy.
666+
if(InternalMessageSender.GetAllClientIds() != null)
643667
{
668+
PooledBitStream stream = PooledBitStream.Get();
669+
PooledBitWriter writer = PooledBitWriter.Get(stream);
644670
writer.WriteUInt64Packed(networkId);
645671

646-
InternalMessageSender.Send(MLAPIConstants.MLAPI_DESTROY_OBJECT, "MLAPI_INTERNAL", stream, SecuritySendFlags.None);
672+
673+
FrameQueueItem QueueItem = new FrameQueueItem();
674+
QueueItem.QueueItemType = RPCQueueManager.QueueItemType.DestroyObject;
675+
QueueItem.NetworkId = networkId;
676+
QueueItem.ItemStream = stream;
677+
QueueItem.Channel = "MLAPI_INTERNAL";
678+
QueueItem.SendFlags = SecuritySendFlags.None;
679+
QueueItem.ClientIds = InternalMessageSender.GetAllClientIds();
680+
rpcQueueManager.AddToInternalMLAPISendQueue(QueueItem);
681+
682+
writer.Dispose();
647683
}
648684
}
649685
}

0 commit comments

Comments
 (0)