Skip to content

Commit b73ec58

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 b4ad4d7 commit b73ec58

1 file changed

Lines changed: 53 additions & 9 deletions

File tree

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

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ internal static void RemoveOwnership(NetworkedObject netObject)
193193
writer.WriteUInt64Packed(netObject.NetworkId);
194194
writer.WriteUInt64Packed(netObject.OwnerClientId);
195195

196-
InternalMessageSender.Send(MLAPIConstants.MLAPI_CHANGE_OWNER, "MLAPI_INTERNAL", stream, SecuritySendFlags.None, netObject);
196+
InternalMessageSender.Send(MLAPIConstants.MLAPI_CHANGE_OWNER, "MLAPI_INTERNAL", stream, SecuritySendFlags.None);
197197
}
198198
}
199199
}
@@ -229,7 +229,7 @@ internal static void ChangeOwnership(NetworkedObject netObject, ulong clientId)
229229
writer.WriteUInt64Packed(netObject.NetworkId);
230230
writer.WriteUInt64Packed(clientId);
231231

232-
InternalMessageSender.Send(MLAPIConstants.MLAPI_CHANGE_OWNER, "MLAPI_INTERNAL", stream, SecuritySendFlags.None, netObject);
232+
InternalMessageSender.Send(MLAPIConstants.MLAPI_CHANGE_OWNER, "MLAPI_INTERNAL", stream, SecuritySendFlags.None);
233233
}
234234
}
235235
}
@@ -402,12 +402,41 @@ 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, null);
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.NetworkObject = null;
429+
QueueItem.ClientIds = new List<ulong>() { clientId };
430+
rpcQueueManager.AddToInternalMLAPISendQueue(QueueItem);
431+
432+
433+
//using (PooledBitStream stream = PooledBitStream.Get())
434+
//{
435+
// WriteSpawnCallForObject(stream, clientId, netObject, payload);
436+
// InternalMessageSender.Send(clientId, MLAPIConstants.MLAPI_ADD_OBJECT, "MLAPI_INTERNAL", stream, SecuritySendFlags.None, null);
437+
//}
410438
}
439+
411440
}
412441

413442
internal static void WriteSpawnCallForObject(Serialization.BitStream stream, ulong clientId, NetworkedObject netObject, Stream payload)
@@ -635,15 +664,30 @@ internal static void OnDestroyObject(ulong networkId, bool destroyGameObject)
635664
});
636665
}
637666

638-
if (sobj != null)
639-
{
640-
using (PooledBitStream stream = PooledBitStream.Get())
667+
RPCQueueManager rpcQueueManager = NetworkingManager.Singleton.GetRPCQueueManager();
668+
if(rpcQueueManager != null)
669+
{
670+
671+
if (sobj != null)
641672
{
642-
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
673+
// As long as we have any remaining clients, then notify of the object being destroy.
674+
if(InternalMessageSender.GetAllClientIds() != null)
643675
{
676+
PooledBitStream stream = PooledBitStream.Get();
677+
PooledBitWriter writer = PooledBitWriter.Get(stream);
644678
writer.WriteUInt64Packed(networkId);
645679

646-
InternalMessageSender.Send(MLAPIConstants.MLAPI_DESTROY_OBJECT, "MLAPI_INTERNAL", stream, SecuritySendFlags.None, SpawnedObjects[networkId]);
680+
681+
FrameQueueItem QueueItem = new FrameQueueItem();
682+
QueueItem.QueueItemType = RPCQueueManager.QueueItemType.DestroyObject;
683+
QueueItem.NetworkId = networkId;
684+
QueueItem.ItemStream = stream;
685+
QueueItem.Channel = "MLAPI_INTERNAL";
686+
QueueItem.SendFlags = SecuritySendFlags.None;
687+
QueueItem.ClientIds = InternalMessageSender.GetAllClientIds();
688+
rpcQueueManager.AddToInternalMLAPISendQueue(QueueItem);
689+
690+
writer.Dispose();
647691
}
648692
}
649693
}

0 commit comments

Comments
 (0)