@@ -24,6 +24,7 @@ public abstract class NetcodeIntegrationTest
2424 /// determine how clients will load scenes
2525 /// </summary>
2626 internal static bool IsRunning { get ; private set ; }
27+
2728 protected static TimeoutHelper s_GlobalTimeoutHelper = new TimeoutHelper ( 8.0f ) ;
2829 protected static WaitForSecondsRealtime s_DefaultWaitForTick = new WaitForSecondsRealtime ( 1.0f / k_DefaultTickRate ) ;
2930
@@ -46,6 +47,7 @@ public static void RegisterNetworkObject(NetworkObject networkObject)
4647 {
4748 s_GlobalNetworkObjects . Add ( networkObject . NetworkManager . LocalClientId , new Dictionary < ulong , NetworkObject > ( ) ) ;
4849 }
50+
4951 if ( s_GlobalNetworkObjects [ networkObject . NetworkManager . LocalClientId ] . ContainsKey ( networkObject . NetworkObjectId ) )
5052 {
5153 if ( s_GlobalNetworkObjects [ networkObject . NetworkManager . LocalClientId ] == null )
@@ -102,9 +104,9 @@ public static void DeregisterNetworkObject(ulong localClientId, ulong networkObj
102104
103105 public enum NetworkManagerInstatiationMode
104106 {
105- PerTest , // This will create and destroy new NetworkManagers for each test within a child derived class
106- AllTests , // This will create one set of NetworkManagers used for all tests within a child derived class (destroyed once all tests are finished)
107- DoNotCreate // This will not create any NetworkManagers, it is up to the derived class to manage.
107+ PerTest , // This will create and destroy new NetworkManagers for each test within a child derived class
108+ AllTests , // This will create one set of NetworkManagers used for all tests within a child derived class (destroyed once all tests are finished)
109+ DoNotCreate // This will not create any NetworkManagers, it is up to the derived class to manage.
108110 }
109111
110112 public enum HostOrServer
@@ -286,6 +288,7 @@ protected virtual IEnumerator OnSetup()
286288 {
287289 yield return null ;
288290 }
291+
289292 /// <summary>
290293 /// Called before creating and starting the server and clients
291294 /// Note: For <see cref="NetworkManagerInstatiationMode.AllTests"/> and
@@ -333,6 +336,7 @@ public IEnumerator SetUp()
333336 yield return StartServerAndClients ( ) ;
334337 }
335338 }
339+
336340 VerboseDebug ( $ "Exiting { nameof ( SetUp ) } ") ;
337341 }
338342
@@ -397,6 +401,7 @@ private void AddRemoveNetworkManager(NetworkManager networkManager, bool addNetw
397401 {
398402 clientNetworkManagersList . Remove ( networkManager ) ;
399403 }
404+
400405 m_ClientNetworkManagers = clientNetworkManagersList . ToArray ( ) ;
401406 m_NumberOfClients = clientNetworkManagersList . Count ;
402407 }
@@ -407,7 +412,6 @@ private void AddRemoveNetworkManager(NetworkManager networkManager, bool addNetw
407412 /// </summary>
408413 protected virtual void OnNewClientCreated ( NetworkManager networkManager )
409414 {
410-
411415 }
412416
413417 /// <summary>
@@ -425,7 +429,6 @@ protected virtual void OnNewClientStarted(NetworkManager networkManager)
425429 /// </summary>
426430 protected virtual void OnNewClientStartedAndConnected ( NetworkManager networkManager )
427431 {
428-
429432 }
430433
431434 /// <summary>
@@ -461,6 +464,7 @@ protected IEnumerator CreateAndStartNewClient()
461464 AddRemoveNetworkManager ( networkManager , false ) ;
462465 Object . DestroyImmediate ( networkManager . gameObject ) ;
463466 }
467+
464468 AssertOnTimeout ( $ "{ nameof ( CreateAndStartNewClient ) } timed out waiting for the new client to be connected!") ;
465469 ClientNetworkManagerPostStart ( networkManager ) ;
466470 VerboseDebug ( $ "[{ networkManager . name } ] Created and connected!") ;
@@ -499,6 +503,7 @@ protected void CreateAndStartNewClientWithTimeTravel()
499503 AddRemoveNetworkManager ( networkManager , false ) ;
500504 Object . DestroyImmediate ( networkManager . gameObject ) ;
501505 }
506+
502507 Assert . IsTrue ( connected , $ "{ nameof ( CreateAndStartNewClient ) } timed out waiting for the new client to be connected!") ;
503508 ClientNetworkManagerPostStart ( networkManager ) ;
504509 VerboseDebug ( $ "[{ networkManager . name } ] Created and connected!") ;
@@ -638,6 +643,7 @@ private void ClientNetworkManagerPostStart(NetworkManager networkManager)
638643 {
639644 m_PlayerNetworkObjects . Add ( playerNetworkObject . NetworkManager . LocalClientId , new Dictionary < ulong , NetworkObject > ( ) ) ;
640645 }
646+
641647 if ( ! m_PlayerNetworkObjects [ playerNetworkObject . NetworkManager . LocalClientId ] . ContainsKey ( networkManager . LocalClientId ) )
642648 {
643649 m_PlayerNetworkObjects [ playerNetworkObject . NetworkManager . LocalClientId ] . Add ( networkManager . LocalClientId , playerNetworkObject ) ;
@@ -667,6 +673,7 @@ protected void ClientNetworkManagerPostStartInit()
667673 {
668674 ClientNetworkManagerPostStart ( networkManager ) ;
669675 }
676+
670677 if ( m_UseHost )
671678 {
672679#if UNITY_2023_1_OR_NEWER
@@ -681,6 +688,7 @@ protected void ClientNetworkManagerPostStartInit()
681688 {
682689 m_PlayerNetworkObjects . Add ( playerNetworkObject . NetworkManager . LocalClientId , new Dictionary < ulong , NetworkObject > ( ) ) ;
683690 }
691+
684692 if ( ! m_PlayerNetworkObjects [ playerNetworkObject . NetworkManager . LocalClientId ] . ContainsKey ( m_ServerNetworkManager . LocalClientId ) )
685693 {
686694 m_PlayerNetworkObjects [ playerNetworkObject . NetworkManager . LocalClientId ] . Add ( m_ServerNetworkManager . LocalClientId , playerNetworkObject ) ;
@@ -742,6 +750,7 @@ protected IEnumerator StartServerAndClients()
742750 {
743751 m_PlayerNetworkObjects . Add ( playerNetworkObject . NetworkManager . LocalClientId , new Dictionary < ulong , NetworkObject > ( ) ) ;
744752 }
753+
745754 m_PlayerNetworkObjects [ playerNetworkObject . NetworkManager . LocalClientId ] . Add ( m_ServerNetworkManager . LocalClientId , playerNetworkObject ) ;
746755 }
747756 }
@@ -808,6 +817,7 @@ protected void StartServerAndClientsWithTimeTravel()
808817 {
809818 m_PlayerNetworkObjects . Add ( playerNetworkObject . NetworkManager . LocalClientId , new Dictionary < ulong , NetworkObject > ( ) ) ;
810819 }
820+
811821 m_PlayerNetworkObjects [ playerNetworkObject . NetworkManager . LocalClientId ] . Add ( m_ServerNetworkManager . LocalClientId , playerNetworkObject ) ;
812822 }
813823 }
@@ -898,7 +908,10 @@ protected void ShutdownAndCleanUp()
898908 m_PlayerNetworkObjects . Clear ( ) ;
899909 s_GlobalNetworkObjects . Clear ( ) ;
900910 }
901- catch ( Exception e ) { throw e ; }
911+ catch ( Exception e )
912+ {
913+ throw e ;
914+ }
902915 finally
903916 {
904917 if ( m_PlayerPrefab != null )
@@ -1028,6 +1041,7 @@ protected void DestroySceneNetworkObjects()
10281041 {
10291042 continue ;
10301043 }
1044+
10311045 if ( CanDestroyNetworkObject ( networkObject ) )
10321046 {
10331047 networkObject . NetworkManagerOwner = m_ServerNetworkManager ;
@@ -1086,6 +1100,7 @@ public static IEnumerator WaitForConditionOrTimeOut(Func<bool> checkForCondition
10861100 // Otherwise wait for 1 tick interval
10871101 yield return s_DefaultWaitForTick ;
10881102 }
1103+
10891104 // Stop checking for a timeout
10901105 timeOutHelper . Stop ( ) ;
10911106 }
@@ -1124,6 +1139,7 @@ public bool WaitForConditionOrTimeOutWithTimeTravel(Func<bool> checkForCondition
11241139 return true ;
11251140 }
11261141 }
1142+
11271143 return false ;
11281144 }
11291145
@@ -1200,7 +1216,7 @@ protected bool WaitForClientsConnectedOrTimeOutWithTimeTravel(NetworkManager[] c
12001216 var serverClientCount = m_ServerNetworkManager . IsHost ? remoteClientCount + 1 : remoteClientCount ;
12011217
12021218 return WaitForConditionOrTimeOutWithTimeTravel ( ( ) => clientsToCheck . Where ( ( c ) => c . IsConnectedClient ) . Count ( ) == remoteClientCount &&
1203- m_ServerNetworkManager . ConnectedClients . Count == serverClientCount ) ;
1219+ m_ServerNetworkManager . ConnectedClients . Count == serverClientCount ) ;
12041220 }
12051221
12061222 /// <summary>
@@ -1232,6 +1248,7 @@ internal IEnumerator WaitForMessageReceived<T>(List<NetworkManager> wiatForRecei
12321248 messageHook . AssignMessageType < T > ( ) ;
12331249 messageHookEntriesForSpawn . Add ( messageHook ) ;
12341250 }
1251+
12351252 // Used to determine if all clients received the CreateObjectMessage
12361253 var hooks = new MessageHooksConditional ( messageHookEntriesForSpawn ) ;
12371254 yield return WaitForConditionOrTimeOut ( hooks ) ;
@@ -1251,6 +1268,7 @@ internal IEnumerator WaitForMessagesReceived(List<Type> messagesInOrder, List<Ne
12511268 messageHookEntriesForSpawn . Add ( messageHook ) ;
12521269 }
12531270 }
1271+
12541272 // Used to determine if all clients received the CreateObjectMessage
12551273 var hooks = new MessageHooksConditional ( messageHookEntriesForSpawn ) ;
12561274 yield return WaitForConditionOrTimeOut ( hooks ) ;
@@ -1268,6 +1286,7 @@ internal void WaitForMessageReceivedWithTimeTravel<T>(List<NetworkManager> waitF
12681286 messageHook . AssignMessageType < T > ( ) ;
12691287 messageHookEntriesForSpawn . Add ( messageHook ) ;
12701288 }
1289+
12711290 // Used to determine if all clients received the CreateObjectMessage
12721291 var hooks = new MessageHooksConditional ( messageHookEntriesForSpawn ) ;
12731292 Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( hooks ) ) ;
@@ -1286,6 +1305,7 @@ internal void WaitForMessagesReceivedWithTimeTravel(List<Type> messagesInOrder,
12861305 messageHookEntriesForSpawn . Add ( messageHook ) ;
12871306 }
12881307 }
1308+
12891309 // Used to determine if all clients received the CreateObjectMessage
12901310 var hooks = new MessageHooksConditional ( messageHookEntriesForSpawn ) ;
12911311 Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( hooks ) ) ;
@@ -1301,7 +1321,7 @@ internal void WaitForMessagesReceivedWithTimeTravel(List<Type> messagesInOrder,
13011321 protected GameObject CreateNetworkObjectPrefab ( string baseName )
13021322 {
13031323 var prefabCreateAssertError = $ "You can only invoke this method during { nameof ( OnServerAndClientsCreated ) } " +
1304- $ "but before { nameof ( OnStartedServerAndClients ) } !";
1324+ $ "but before { nameof ( OnStartedServerAndClients ) } !";
13051325 Assert . IsNotNull ( m_ServerNetworkManager , prefabCreateAssertError ) ;
13061326 Assert . IsFalse ( m_ServerNetworkManager . IsListening , prefabCreateAssertError ) ;
13071327
@@ -1375,6 +1395,7 @@ private List<GameObject> SpawnObjects(NetworkObject prefabNetworkObject, Network
13751395 {
13761396 gameObjectsSpawned . Add ( SpawnObject ( prefabNetworkObject , owner , destroyWithScene ) ) ;
13771397 }
1398+
13781399 return gameObjectsSpawned ;
13791400 }
13801401
@@ -1383,7 +1404,6 @@ private List<GameObject> SpawnObjects(NetworkObject prefabNetworkObject, Network
13831404 /// </summary>
13841405 public NetcodeIntegrationTest ( )
13851406 {
1386-
13871407 }
13881408
13891409 /// <summary>
@@ -1429,6 +1449,7 @@ private void UnloadRemainingScenes()
14291449 {
14301450 continue ;
14311451 }
1452+
14321453 VerboseDebug ( $ "Unloading scene { scene . name } -{ scene . handle } ") ;
14331454 var asyncOperation = SceneManager . UnloadSceneAsync ( scene ) ;
14341455 }
@@ -1468,6 +1489,7 @@ private IEnumerator WaitForTickAndFrames(NetworkManager networkManager, int tick
14681489 }
14691490 }
14701491 }
1492+
14711493 m_WaitForLog . Append ( $ "[NetworkManager-{ networkManager . LocalClientId } ][WaitForTicks-End] Waited for ({ networkManager . NetworkTickSystem . LocalTime . Tick - tickStart } ) network ticks and ({ frameCount } ) frames to pass.\n ") ;
14721494 yield break ;
14731495 }
@@ -1534,31 +1556,34 @@ public static void SimulateOneFrame()
15341556 foreach ( NetworkUpdateStage stage in Enum . GetValues ( typeof ( NetworkUpdateStage ) ) )
15351557 {
15361558 NetworkUpdateLoop . RunNetworkUpdateStage ( stage ) ;
1537- var methodName = "" ;
1559+ string methodName = string . Empty ;
15381560 switch ( stage )
15391561 {
15401562 case NetworkUpdateStage . FixedUpdate :
1541- methodName = "FixedUpdate" ;
1563+ methodName = "FixedUpdate" ; // mapping NetworkUpdateStage.FixedUpdate to MonoBehaviour.FixedUpdate
15421564 break ;
15431565 case NetworkUpdateStage . Update :
1544- methodName = "Update" ;
1566+ methodName = "Update" ; // mapping NetworkUpdateStage.Update to MonoBehaviour.Update
15451567 break ;
15461568 case NetworkUpdateStage . PreLateUpdate :
1547- methodName = "LateUpdate" ;
1569+ methodName = "LateUpdate" ; // mapping NetworkUpdateStage.PreLateUpdate to MonoBehaviour.LateUpdate
15481570 break ;
1549-
15501571 }
15511572
1552-
1553- if ( methodName != "" )
1573+ if ( ! string . IsNullOrEmpty ( methodName ) )
15541574 {
1575+ #if UNITY_2023_1_OR_NEWER
1576+ foreach ( var behaviour in Object . FindObjectsByType < NetworkBehaviour > ( FindObjectsSortMode . InstanceID ) )
1577+ #else
15551578 foreach ( var behaviour in Object . FindObjectsOfType < NetworkBehaviour > ( ) )
1579+ #endif
15561580 {
15571581 var method = behaviour . GetType ( ) . GetMethod ( methodName , BindingFlags . NonPublic | BindingFlags . Instance ) ;
15581582 if ( method == null )
15591583 {
15601584 method = behaviour . GetType ( ) . GetMethod ( methodName , BindingFlags . Public | BindingFlags . Instance ) ;
15611585 }
1586+
15621587 method ? . Invoke ( behaviour , new object [ ] { } ) ;
15631588 }
15641589 }
0 commit comments