@@ -73,7 +73,9 @@ private void OnValidate()
73
73
private ConnectionConfig Init ( NetworkingConfiguration netConfig )
74
74
{
75
75
NetworkConfig = netConfig ;
76
-
76
+ lastSendTickTime = 0 ;
77
+ lastEventTickTime = 0 ;
78
+ lastReceiveTickTime = 0 ;
77
79
pendingClients = new HashSet < int > ( ) ;
78
80
connectedClients = new Dictionary < int , NetworkedClient > ( ) ;
79
81
messageBuffer = new byte [ NetworkConfig . MessageBufferSize ] ;
@@ -292,75 +294,85 @@ private void Shutdown()
292
294
private int channelId ;
293
295
private int receivedSize ;
294
296
private byte error ;
295
- private float lastTickTime ;
297
+ private float lastReceiveTickTime ;
298
+ private float lastSendTickTime ;
299
+ private float lastEventTickTime ;
296
300
private void Update ( )
297
301
{
298
- if ( isListening && ( Time . time - lastTickTime >= ( 1f / NetworkConfig . Tickrate ) ) )
302
+ if ( isListening )
299
303
{
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 )
304
+ if ( Time . time - lastSendTickTime >= ( 1f / NetworkConfig . SendTickrate ) )
307
305
{
308
- //Client timed out.
309
- if ( isServer )
306
+ foreach ( KeyValuePair < int , NetworkedClient > pair in connectedClients )
310
307
{
311
- OnClientDisconnect ( clientId ) ;
312
- return ;
308
+ NetworkTransport . SendQueuedMessages ( hostId , pair . Key , out error ) ;
313
309
}
310
+ lastSendTickTime = Time . time ;
314
311
}
315
- else if ( networkError != NetworkError . Ok )
316
- {
317
- Debug . LogWarning ( "MLAPI: NetworkTransport receive error: " + networkError . ToString ( ) ) ;
318
- return ;
319
- }
320
-
321
- switch ( eventType )
312
+ if ( Time . time - lastReceiveTickTime >= ( 1f / NetworkConfig . ReceiveTickrate ) )
322
313
{
323
- case NetworkEventType . ConnectEvent :
314
+ NetworkEventType eventType = NetworkTransport . Receive ( out hostId , out clientId , out channelId , messageBuffer , messageBuffer . Length , out receivedSize , out error ) ;
315
+ NetworkError networkError = ( NetworkError ) error ;
316
+ if ( networkError == NetworkError . Timeout )
317
+ {
318
+ //Client timed out.
324
319
if ( isServer )
325
320
{
326
- pendingClients . Add ( clientId ) ;
327
- StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
321
+ OnClientDisconnect ( clientId ) ;
322
+ return ;
328
323
}
329
- else
330
- {
331
- int sizeOfStream = 32 ;
332
- if ( NetworkConfig . ConnectionApproval )
333
- sizeOfStream += 2 + NetworkConfig . ConnectionData . Length ;
324
+ }
325
+ else if ( networkError != NetworkError . Ok )
326
+ {
327
+ Debug . LogWarning ( "MLAPI: NetworkTransport receive error: " + networkError . ToString ( ) ) ;
328
+ return ;
329
+ }
334
330
335
- using ( MemoryStream writeStream = new MemoryStream ( sizeOfStream ) )
331
+ switch ( eventType )
332
+ {
333
+ case NetworkEventType . ConnectEvent :
334
+ if ( isServer )
336
335
{
337
- using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
336
+ pendingClients . Add ( clientId ) ;
337
+ StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
338
+ }
339
+ else
340
+ {
341
+ int sizeOfStream = 32 ;
342
+ if ( NetworkConfig . ConnectionApproval )
343
+ sizeOfStream += 2 + NetworkConfig . ConnectionData . Length ;
344
+
345
+ using ( MemoryStream writeStream = new MemoryStream ( sizeOfStream ) )
338
346
{
339
- writer . Write ( NetworkConfig . GetConfig ( ) ) ;
340
- if ( NetworkConfig . ConnectionApproval )
347
+ using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
341
348
{
342
- writer . Write ( ( ushort ) NetworkConfig . ConnectionData . Length ) ;
343
- writer . Write ( NetworkConfig . ConnectionData ) ;
349
+ writer . Write ( NetworkConfig . GetConfig ( ) ) ;
350
+ if ( NetworkConfig . ConnectionApproval )
351
+ {
352
+ writer . Write ( ( ushort ) NetworkConfig . ConnectionData . Length ) ;
353
+ writer . Write ( NetworkConfig . ConnectionData ) ;
354
+ }
344
355
}
356
+ Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
345
357
}
346
- Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
347
358
}
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 ;
359
+ break ;
360
+ case NetworkEventType . DataEvent :
361
+ HandleIncomingData ( clientId , messageBuffer , channelId ) ;
362
+ break ;
363
+ case NetworkEventType . DisconnectEvent :
364
+ if ( isServer )
365
+ OnClientDisconnect ( clientId ) ;
366
+ break ;
367
+ }
368
+ lastReceiveTickTime = Time . time ;
357
369
}
358
- if ( isServer )
370
+ if ( isServer && ( Time . time - lastEventTickTime >= ( 1f / NetworkConfig . EventTickrate ) ) )
359
371
{
360
372
LagCompensationManager . AddFrames ( ) ;
361
- NetworkedObject . InvokeSyncvarUpdate ( ) ;
373
+ NetworkedObject . InvokeSyncvafrUpdate ( ) ;
374
+ lastEventTickTime = Time . time ;
362
375
}
363
- lastTickTime = Time . time ;
364
376
}
365
377
}
366
378
0 commit comments