@@ -288,82 +288,79 @@ private void Shutdown()
288
288
289
289
//Receive stuff
290
290
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 ;
295
296
private void Update ( )
296
297
{
297
- if ( isListening )
298
+ if ( isListening && ( Time . time - lastTickTime >= ( 1f / NetworkConfig . Tickrate ) ) )
298
299
{
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 )
302
307
{
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 )
307
310
{
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 :
309
324
if ( isServer )
310
325
{
311
- OnClientDisconnect ( clientId ) ;
312
- continue ;
326
+ pendingClients . Add ( clientId ) ;
327
+ StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
313
328
}
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 ;
333
334
334
- using ( MemoryStream writeStream = new MemoryStream ( sizeOfStream ) )
335
+ using ( MemoryStream writeStream = new MemoryStream ( sizeOfStream ) )
336
+ {
337
+ using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
335
338
{
336
- using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
339
+ writer . Write ( NetworkConfig . GetConfig ( ) ) ;
340
+ if ( NetworkConfig . ConnectionApproval )
337
341
{
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 ) ;
344
344
}
345
- Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
346
345
}
346
+ Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
347
347
}
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 ;
367
364
}
368
365
}
369
366
@@ -826,7 +823,7 @@ internal void PassthroughSend(int targetId, int sourceId, ushort messageType, in
826
823
writer . Write ( ( ushort ) data . Length ) ;
827
824
writer . Write ( data ) ;
828
825
}
829
- NetworkTransport . Send ( hostId , targetId , channelId , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
826
+ NetworkTransport . QueueMessageForSending ( hostId , targetId , channelId , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
830
827
}
831
828
}
832
829
@@ -874,7 +871,7 @@ internal void Send(int clientId, string messageType, string channelName, byte[]
874
871
}
875
872
if ( isPassthrough )
876
873
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 ) ;
878
875
}
879
876
}
880
877
@@ -911,7 +908,7 @@ internal void Send(int[] clientIds, string messageType, string channelName, byte
911
908
//Client trying to send data to host
912
909
clientId = serverClientId ;
913
910
}
914
- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
911
+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
915
912
}
916
913
}
917
914
}
@@ -950,7 +947,7 @@ internal void Send(List<int> clientIds, string messageType, string channelName,
950
947
//Client trying to send data to host
951
948
clientId = serverClientId ;
952
949
}
953
- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
950
+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
954
951
}
955
952
}
956
953
}
@@ -989,7 +986,7 @@ internal void Send(string messageType, string channelName, byte[] data, uint? ne
989
986
//Client trying to send data to host
990
987
clientId = serverClientId ;
991
988
}
992
- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
989
+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
993
990
994
991
}
995
992
}
@@ -1031,7 +1028,7 @@ internal void Send(string messageType, string channelName, byte[] data, int clie
1031
1028
//Client trying to send data to host
1032
1029
clientId = serverClientId ;
1033
1030
}
1034
- NetworkTransport . Send ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
1031
+ NetworkTransport . QueueMessageForSending ( hostId , clientId , channel , stream . GetBuffer ( ) , sizeOfStream , out error ) ;
1035
1032
}
1036
1033
}
1037
1034
}
0 commit comments