@@ -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