@@ -19,21 +19,63 @@ internal static class UnityTransportTestHelpers
1919 // Wait for an event to appear in the given event list (must be the very next event).
2020 public static IEnumerator WaitForNetworkEvent ( NetworkEvent type , List < TransportEvent > events , float timeout = MaxNetworkEventWaitTime )
2121 {
22- int initialCount = events . Count ;
23- float startTime = Time . realtimeSinceStartup ;
24-
25- while ( Time . realtimeSinceStartup - startTime < timeout )
22+ var initialCount = events . Count ;
23+ var startTime = Time . realtimeSinceStartup + timeout ;
24+ var waitPeriod = new WaitForSeconds ( 0.01f ) ;
25+ var conditionMet = false ;
26+ while ( startTime > Time . realtimeSinceStartup )
2627 {
2728 if ( events . Count > initialCount )
2829 {
2930 Assert . AreEqual ( type , events [ initialCount ] . Type ) ;
30- yield break ;
31+ conditionMet = true ;
32+ break ;
3133 }
3234
33- yield return new WaitForSeconds ( 0.01f ) ;
35+ yield return waitPeriod ;
36+ }
37+ if ( ! conditionMet )
38+ {
39+ Assert . Fail ( "Timed out while waiting for network event." ) ;
3440 }
41+ }
42+
43+ public static IEnumerator WaitForMultipleNetworkEvents ( NetworkEvent type , List < TransportEvent > events , int count , float timeout = MaxNetworkEventWaitTime )
44+ {
45+ var initialCount = events . Count ;
46+ var startTime = Time . realtimeSinceStartup + timeout ;
47+ var waitPeriod = new WaitForSeconds ( 0.01f ) ;
48+ var conditionMet = false ;
49+ while ( startTime > Time . realtimeSinceStartup )
50+ {
51+ // Wait until we have received at least (count) number of events
52+ if ( ( events . Count - initialCount ) >= count )
53+ {
54+ var foundTypes = 0 ;
55+ // Look through all events received to match against the type we
56+ // are looking for.
57+ for ( int i = initialCount ; i < initialCount + count ; i ++ )
58+ {
59+ if ( type . Equals ( events [ i ] . Type ) )
60+ {
61+ foundTypes ++ ;
62+ }
63+ }
64+ // If we reached the number of events we were expecting
65+ conditionMet = foundTypes == count ;
66+ if ( conditionMet )
67+ {
68+ // break from the wait loop
69+ break ;
70+ }
71+ }
3572
36- Assert . Fail ( "Timed out while waiting for network event." ) ;
73+ yield return waitPeriod ;
74+ }
75+ if ( ! conditionMet )
76+ {
77+ Assert . Fail ( "Timed out while waiting for network event." ) ;
78+ }
3779 }
3880
3981 // Wait to ensure no event is sent.
@@ -53,12 +95,14 @@ public static IEnumerator EnsureNoNetworkEvent(List<TransportEvent> events, floa
5395 }
5496 }
5597
56-
5798 // Common code to initialize a UnityTransport that logs its events.
5899 public static void InitializeTransport ( out UnityTransport transport , out List < TransportEvent > events ,
59- int maxPayloadSize = UnityTransport . InitialMaxPayloadSize , int maxSendQueueSize = 0 , NetworkFamily family = NetworkFamily . Ipv4 )
100+ int maxPayloadSize = UnityTransport . InitialMaxPayloadSize , int maxSendQueueSize = 0 , NetworkFamily family = NetworkFamily . Ipv4 , string identifier = "" )
60101 {
61- var logger = new TransportEventLogger ( ) ;
102+ var logger = new TransportEventLogger ( )
103+ {
104+ Identifier = identifier ,
105+ } ;
62106 events = logger . Events ;
63107
64108 transport = new GameObject ( ) . AddComponent < UnityTransportTestComponent > ( ) ;
@@ -75,6 +119,16 @@ public static void InitializeTransport(out UnityTransport transport, out List<Tr
75119 transport . Initialize ( ) ;
76120 }
77121
122+ public static bool LogEventsReceived = false ;
123+
124+ public static void VerboseLog ( string msg )
125+ {
126+ if ( LogEventsReceived )
127+ {
128+ Debug . Log ( $ "{ msg } ") ;
129+ }
130+ }
131+
78132 // Information about an event generated by a transport (basically just the parameters that
79133 // are normally passed along to a TransportEventDelegate).
80134 internal struct TransportEvent
@@ -91,8 +145,15 @@ internal class TransportEventLogger
91145 {
92146 private readonly List < TransportEvent > m_Events = new List < TransportEvent > ( ) ;
93147 public List < TransportEvent > Events => m_Events ;
148+
149+ public string Identifier ;
94150 public void HandleEvent ( NetworkEvent type , ulong clientID , ArraySegment < byte > data , float receiveTime )
95151 {
152+ if ( LogEventsReceived )
153+ {
154+ VerboseLog ( $ "[{ Identifier } ]Tansport Event][{ type } ][{ receiveTime } ] Client-{ clientID } ") ;
155+ }
156+
96157 // Copy the data since the backing array will be reused for future messages.
97158 if ( data != default ( ArraySegment < byte > ) )
98159 {
0 commit comments