@@ -288,82 +288,79 @@ private void Shutdown()
288288
289289 //Receive stuff
290290 internal int hostId ;
291- int clientId ;
292- int channelId ;
293- int receivedSize ;
294- byte error ;
291+ private int clientId ;
292+ private int channelId ;
293+ private int receivedSize ;
294+ private byte error ;
295+ private float lastTickTime ;
295296 private void Update ( )
296297 {
297- if ( isListening )
298+ if ( isListening && ( Time . time - lastTickTime >= ( 1f / NetworkConfig . Tickrate ) ) )
298299 {
299- NetworkEventType eventType ;
300- int messagesProcessed = 0 ;
301- do
300+ foreach ( KeyValuePair < int , NetworkedClient > pair in connectedClients )
301+ {
302+ NetworkTransport . SendQueuedMessages ( hostId , pair . Key , out error ) ;
303+ }
304+ NetworkEventType eventType = NetworkTransport . Receive ( out hostId , out clientId , out channelId , messageBuffer , messageBuffer . Length , out receivedSize , out error ) ;
305+ NetworkError networkError = ( NetworkError ) error ;
306+ if ( networkError == NetworkError . Timeout )
302307 {
303- messagesProcessed ++ ;
304- eventType = NetworkTransport . Receive ( out hostId , out clientId , out channelId , messageBuffer , messageBuffer . Length , out receivedSize , out error ) ;
305- NetworkError networkError = ( NetworkError ) error ;
306- if ( networkError == NetworkError . Timeout )
308+ //Client timed out.
309+ if ( isServer )
307310 {
308- //Client timed out.
311+ OnClientDisconnect ( clientId ) ;
312+ return ;
313+ }
314+ }
315+ else if ( networkError != NetworkError . Ok )
316+ {
317+ Debug . LogWarning ( "MLAPI: NetworkTransport receive error: " + networkError . ToString ( ) ) ;
318+ return ;
319+ }
320+
321+ switch ( eventType )
322+ {
323+ case NetworkEventType . ConnectEvent :
309324 if ( isServer )
310325 {
311- OnClientDisconnect ( clientId ) ;
312- continue ;
326+ pendingClients . Add ( clientId ) ;
327+ StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
313328 }
314- }
315- else if ( networkError != NetworkError . Ok )
316- {
317- Debug . LogWarning ( "MLAPI: NetworkTransport receive error: " + networkError . ToString ( ) ) ;
318- continue ;
319- }
320- switch ( eventType )
321- {
322- case NetworkEventType . ConnectEvent :
323- if ( isServer )
324- {
325- pendingClients . Add ( clientId ) ;
326- StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
327- }
328- else
329- {
330- int sizeOfStream = 32 ;
331- if ( NetworkConfig . ConnectionApproval )
332- sizeOfStream += 2 + NetworkConfig . ConnectionData . Length ;
329+ else
330+ {
331+ int sizeOfStream = 32 ;
332+ if ( NetworkConfig . ConnectionApproval )
333+ sizeOfStream += 2 + NetworkConfig . ConnectionData . Length ;
333334
334- using ( MemoryStream writeStream = new MemoryStream ( sizeOfStream ) )
335+ using ( MemoryStream writeStream = new MemoryStream ( sizeOfStream ) )
336+ {
337+ using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
335338 {
336- using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
339+ writer . Write ( NetworkConfig . GetConfig ( ) ) ;
340+ if ( NetworkConfig . ConnectionApproval )
337341 {
338- writer . Write ( NetworkConfig . GetConfig ( ) ) ;
339- if ( NetworkConfig . ConnectionApproval )
340- {
341- writer . Write ( ( ushort ) NetworkConfig . ConnectionData . Length ) ;
342- writer . Write ( NetworkConfig . ConnectionData ) ;
343- }
342+ writer . Write ( ( ushort ) NetworkConfig . ConnectionData . Length ) ;
343+ writer . Write ( NetworkConfig . ConnectionData ) ;
344344 }
345- Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
346345 }
346+ Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
347347 }
348- break ;
349- case NetworkEventType . DataEvent :
350- HandleIncomingData ( clientId , messageBuffer , channelId ) ;
351- break ;
352- case NetworkEventType . DisconnectEvent :
353- if ( isServer )
354- {
355- OnClientDisconnect ( clientId ) ;
356- }
357- break ;
358- }
359- } while ( eventType != NetworkEventType . Nothing &&
360- ( messagesProcessed < NetworkConfig . MaxMessagesPerFrame || NetworkConfig . MaxMessagesPerFrame < 0 ) ) ;
361-
362- }
363- if ( isServer )
364- {
365- LagCompensationManager . AddFrames ( ) ;
366- NetworkedObject . InvokeSyncvarUpdate ( ) ;
348+ }
349+ break ;
350+ case NetworkEventType . DataEvent :
351+ HandleIncomingData ( clientId , messageBuffer , channelId ) ;
352+ break ;
353+ case NetworkEventType . DisconnectEvent :
354+ if ( isServer )
355+ OnClientDisconnect ( clientId ) ;
356+ break ;
357+ }
358+ if ( isServer )
359+ {
360+ LagCompensationManager . AddFrames ( ) ;
361+ NetworkedObject . InvokeSyncvarUpdate ( ) ;
362+ }
363+ lastTickTime = Time . time ;
367364 }
368365 }
369366
@@ -826,7 +823,7 @@ internal void PassthroughSend(int targetId, int sourceId, ushort messageType, in
826823 writer . Write ( ( ushort ) data . Length ) ;
827824 writer . Write ( data ) ;
828825 }
829- NetworkTransport . Send ( hostId , targetId , channelId , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
826+ NetworkTransport . QueueMessageForSending ( hostId , targetId , channelId , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
830827 }
831828 }
832829
@@ -874,7 +871,7 @@ internal void Send(int clientId, string messageType, string channelName, byte[]
874871 }
875872 if ( isPassthrough )
876873 clientId = serverClientId ;
877- NetworkTransport . Send ( hostId , clientId , MessageManager . channels [ channelName ] , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
874+ NetworkTransport . QueueMessageForSending ( hostId , clientId , MessageManager . channels [ channelName ] , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
878875 }
879876 }
880877
@@ -911,7 +908,7 @@ internal void Send(int[] clientIds, string messageType, string channelName, byte
911908 //Client trying to send data to host
912909 clientId = serverClientId ;
913910 }
914- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
911+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
915912 }
916913 }
917914 }
@@ -950,7 +947,7 @@ internal void Send(List<int> clientIds, string messageType, string channelName,
950947 //Client trying to send data to host
951948 clientId = serverClientId ;
952949 }
953- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
950+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
954951 }
955952 }
956953 }
@@ -989,7 +986,7 @@ internal void Send(string messageType, string channelName, byte[] data, uint? ne
989986 //Client trying to send data to host
990987 clientId = serverClientId ;
991988 }
992- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
989+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
993990
994991 }
995992 }
@@ -1031,7 +1028,7 @@ internal void Send(string messageType, string channelName, byte[] data, int clie
10311028 //Client trying to send data to host
10321029 clientId = serverClientId ;
10331030 }
1034- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
1031+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
10351032 }
10361033 }
10371034 }
0 commit comments