@@ -614,7 +614,7 @@ private void Update()
614
614
do
615
615
{
616
616
processedEvents ++ ;
617
- eventType = NetworkConfig . NetworkTransport . PollEvent ( out ulong clientId , out string channelName , out ArraySegment < byte > payload ) ;
617
+ eventType = NetworkConfig . NetworkTransport . PollEvent ( out ulong clientId , out string channelName , out ArraySegment < byte > payload , out float receiveTime ) ;
618
618
619
619
switch ( eventType )
620
620
{
@@ -696,7 +696,7 @@ private void Update()
696
696
case NetEventType . Data :
697
697
if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( $ "Incoming Data From { clientId } : { payload . Count } bytes") ;
698
698
699
- HandleIncomingData ( clientId , channelName , payload ) ;
699
+ HandleIncomingData ( clientId , channelName , payload , receiveTime ) ;
700
700
break ;
701
701
case NetEventType . Disconnect :
702
702
NetworkProfiler . StartEvent ( TickType . Receive , 0 , "NONE" , "TRANSPORT_DISCONNECT" ) ;
@@ -756,16 +756,18 @@ private void Update()
756
756
}
757
757
}
758
758
759
- internal void UpdateNetworkTime ( ulong clientId , float netTime )
759
+ internal void UpdateNetworkTime ( ulong clientId , float netTime , float receiveTime , bool onlyIfNotInitialized = false )
760
760
{
761
+ if ( onlyIfNotInitialized && networkTimeInitialized )
762
+ return ;
761
763
float rtt = NetworkConfig . NetworkTransport . GetCurrentRtt ( clientId ) / 1000f ;
762
- networkTimeOffset = netTime - Time . realtimeSinceStartup + rtt / 2f ;
764
+ networkTimeOffset = netTime - receiveTime + rtt / 2f ;
763
765
if ( ! networkTimeInitialized ) {
764
766
currentNetworkTimeOffset = networkTimeOffset ;
765
767
networkTimeInitialized = true ;
766
768
}
767
769
if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( $ "Received network time { netTime } , RTT to server is { rtt } , setting offset to { networkTimeOffset } (delta { networkTimeOffset - currentNetworkTimeOffset } )") ;
768
- }
770
+ }
769
771
770
772
internal void SendConnectionRequest ( )
771
773
{
@@ -806,7 +808,7 @@ internal IEnumerator TimeOutSwitchSceneProgress(SceneSwitchProgress switchSceneP
806
808
switchSceneProgress . SetTimedOut ( ) ;
807
809
}
808
810
809
- private void HandleIncomingData ( ulong clientId , string channelName , ArraySegment < byte > data )
811
+ private void HandleIncomingData ( ulong clientId , string channelName , ArraySegment < byte > data , float receiveTime )
810
812
{
811
813
if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( "Unwrapping Data Header" ) ;
812
814
@@ -851,7 +853,7 @@ private void HandleIncomingData(ulong clientId, string channelName, ArraySegment
851
853
break ;
852
854
case MLAPIConstants . MLAPI_CONNECTION_APPROVED :
853
855
if ( IsClient )
854
- InternalMessageHandler . HandleConnectionApproved ( clientId , messageStream ) ;
856
+ InternalMessageHandler . HandleConnectionApproved ( clientId , messageStream , receiveTime ) ;
855
857
break ;
856
858
case MLAPIConstants . MLAPI_ADD_OBJECT :
857
859
if ( IsClient ) InternalMessageHandler . HandleAddObject ( clientId , messageStream ) ;
@@ -872,7 +874,7 @@ private void HandleIncomingData(ulong clientId, string channelName, ArraySegment
872
874
if ( IsClient ) InternalMessageHandler . HandleDestroyObjects ( clientId , messageStream ) ;
873
875
break ;
874
876
case MLAPIConstants . MLAPI_TIME_SYNC :
875
- if ( IsClient ) InternalMessageHandler . HandleTimeSync ( clientId , messageStream ) ;
877
+ if ( IsClient ) InternalMessageHandler . HandleTimeSync ( clientId , messageStream , receiveTime ) ;
876
878
break ;
877
879
case MLAPIConstants . MLAPI_NETWORKED_VAR_DELTA :
878
880
InternalMessageHandler . HandleNetworkedVarDelta ( clientId , messageStream ) ;
@@ -1045,6 +1047,9 @@ internal void HandleApproval(ulong clientId, ulong? prefabHash, bool approved, V
1045
1047
ConnectedClients . Add ( clientId , client ) ;
1046
1048
ConnectedClientsList . Add ( client ) ;
1047
1049
1050
+ // This packet is unreliable, but if it gets through it should provide a much better sync than the potentially huge approval message.
1051
+ SyncTime ( ) ;
1052
+
1048
1053
NetworkedObject netObject = SpawnManager . CreateLocalNetworkedObject ( false , 0 , ( prefabHash == null ? NetworkConfig . PlayerPrefabHash : prefabHash . Value ) , null , position , rotation ) ;
1049
1054
SpawnManager . SpawnNetworkedObjectLocally ( netObject , SpawnManager . GetNetworkObjectId ( ) , false , true , clientId , null , false , 0 , false , false ) ;
1050
1055
0 commit comments