@@ -73,7 +73,9 @@ private void OnValidate()
7373 private ConnectionConfig Init ( NetworkingConfiguration netConfig )
7474 {
7575 NetworkConfig = netConfig ;
76-
76+ lastSendTickTime = 0 ;
77+ lastEventTickTime = 0 ;
78+ lastReceiveTickTime = 0 ;
7779 pendingClients = new HashSet < int > ( ) ;
7880 connectedClients = new Dictionary < int , NetworkedClient > ( ) ;
7981 messageBuffer = new byte [ NetworkConfig . MessageBufferSize ] ;
@@ -292,75 +294,85 @@ private void Shutdown()
292294 private int channelId ;
293295 private int receivedSize ;
294296 private byte error ;
295- private float lastTickTime ;
297+ private float lastReceiveTickTime ;
298+ private float lastSendTickTime ;
299+ private float lastEventTickTime ;
296300 private void Update ( )
297301 {
298- if ( isListening && ( Time . time - lastTickTime >= ( 1f / NetworkConfig . Tickrate ) ) )
302+ if ( isListening )
299303 {
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 ) )
307305 {
308- //Client timed out.
309- if ( isServer )
306+ foreach ( KeyValuePair < int , NetworkedClient > pair in connectedClients )
310307 {
311- OnClientDisconnect ( clientId ) ;
312- return ;
308+ NetworkTransport . SendQueuedMessages ( hostId , pair . Key , out error ) ;
313309 }
310+ lastSendTickTime = Time . time ;
314311 }
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 ) )
322313 {
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.
324319 if ( isServer )
325320 {
326- pendingClients . Add ( clientId ) ;
327- StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
321+ OnClientDisconnect ( clientId ) ;
322+ return ;
328323 }
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+ }
334330
335- using ( MemoryStream writeStream = new MemoryStream ( sizeOfStream ) )
331+ switch ( eventType )
332+ {
333+ case NetworkEventType . ConnectEvent :
334+ if ( isServer )
336335 {
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 ) )
338346 {
339- writer . Write ( NetworkConfig . GetConfig ( ) ) ;
340- if ( NetworkConfig . ConnectionApproval )
347+ using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
341348 {
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+ }
344355 }
356+ Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
345357 }
346- Send ( clientId , "MLAPI_CONNECTION_REQUEST" , "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED" , writeStream . GetBuffer ( ) ) ;
347358 }
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 ;
357369 }
358- if ( isServer )
370+ if ( isServer && ( Time . time - lastEventTickTime >= ( 1f / NetworkConfig . EventTickrate ) ) )
359371 {
360372 LagCompensationManager . AddFrames ( ) ;
361- NetworkedObject . InvokeSyncvarUpdate ( ) ;
373+ NetworkedObject . InvokeSyncvafrUpdate ( ) ;
374+ lastEventTickTime = Time . time ;
362375 }
363- lastTickTime = Time . time ;
364376 }
365377 }
366378
0 commit comments