Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -176,17 +176,13 @@ private ulong GetServerTransportId()
}

/// <summary>
/// Handles cleaning up the transport id/client id tables after
/// receiving a disconnect event from transport
/// Handles cleaning up the transport id/client id tables after receiving a disconnect event from transport
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal ulong TransportIdCleanUp(ulong transportId)
{
// This check is for clients that attempted to connect but failed.
// When this happens, the client will not have an entry within the
// m_TransportIdToClientIdMap or m_ClientIdToTransportIdMap lookup
// tables so we exit early and just return 0 to be used for the
// disconnect event.
// When this happens, the client will not have an entry within the m_TransportIdToClientIdMap or m_ClientIdToTransportIdMap lookup tables so we exit early and just return 0 to be used for the disconnect event.
if (!LocalClient.IsServer && !TransportIdToClientIdMap.ContainsKey(transportId))
{
return 0;
Expand All @@ -198,16 +194,8 @@ internal ulong TransportIdCleanUp(ulong transportId)
return clientId;
}

/// <summary>
/// ConnectionManager specific logic during the EarlyUpdate
/// </summary>
/// <remarks>
/// Also handles NetworkTransport implementations that are polled as opposed to event driven.
/// </remarks>
internal void OnEarlyUpdate()
internal void PollAndHandleNetworkEvents()
{
ProcessPendingApprovals();

#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_TransportPollMarker.Begin();
#endif
Expand Down Expand Up @@ -512,7 +500,7 @@ internal void ApproveConnection(ref ConnectionRequestMessage connectionRequestMe
/// Server-Side:
/// Processes pending approvals and removes any stale pending clients
/// </summary>
private void ProcessPendingApprovals()
internal void ProcessPendingApprovals()
{
List<ulong> senders = null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,16 @@ public void NetworkUpdate(NetworkUpdateStage updateStage)
{
case NetworkUpdateStage.EarlyUpdate:
{
ConnectionManager.OnEarlyUpdate();
MessageManager.OnEarlyUpdate();
ConnectionManager.ProcessPendingApprovals();
ConnectionManager.PollAndHandleNetworkEvents();

MessageManager.ProcessIncomingMessageQueue();
MessageManager.CleanupDisconnectedClients();
}
break;
case NetworkUpdateStage.PreUpdate:
{
NetworkTimeSystem.NetworkUpdate(updateStage);
NetworkTimeSystem.UpdateTime();
}
break;
case NetworkUpdateStage.PostLateUpdate:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,24 +222,6 @@ public int GetLocalVersion(Type messageType)
return m_LocalVersions[messageType];
}

/// <summary>
/// Invoked by <see cref="NetworkConnectionManager.NetworkUpdate"/>
/// </summary>
/// <remarks>
/// This requires a specific order of operations where <see cref="NetworkConnectionManager.OnEarlyUpdate"/> is
/// invoked prior to this method.
/// </remarks>
internal void OnEarlyUpdate()
{
if (StopProcessing)
{
return;
}

ProcessIncomingMessageQueue();
CleanupDisconnectedClients();
}

internal static string ByteArrayToString(byte[] ba, int offset, int count)
{
var hex = new StringBuilder(ba.Length * 2);
Expand All @@ -255,9 +237,9 @@ internal void HandleIncomingData(ulong clientId, ArraySegment<byte> data, float
{
unsafe
{
fixed (byte* nativeData = data.Array)
fixed (byte* dataPtr = data.Array)
{
var batchReader = new FastBufferReader(nativeData + data.Offset, Allocator.None, data.Count);
var batchReader = new FastBufferReader(dataPtr + data.Offset, Allocator.None, data.Count);
if (!batchReader.TryBeginRead(sizeof(NetworkBatchHeader)))
{
NetworkLog.LogError("Received a packet too small to contain a BatchHeader. Ignoring it.");
Expand Down Expand Up @@ -461,8 +443,13 @@ public void HandleMessage(in NetworkMessageHeader header, FastBufferReader reade
}
}

internal unsafe void ProcessIncomingMessageQueue()
internal void ProcessIncomingMessageQueue()
{
if (StopProcessing)
{
return;
}

for (var index = 0; index < m_IncomingMessageQueue.Length; ++index)
{
// Avoid copies...
Expand Down
39 changes: 16 additions & 23 deletions com.unity.netcode.gameobjects/Runtime/Timing/NetworkTimeSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,34 +123,27 @@ internal NetworkTickSystem Initialize(NetworkManager networkManager)
return m_NetworkTickSystem;
}

/// <summary>
/// The primary time system
/// </summary>
/// <param name="updateStage"></param>
internal void NetworkUpdate(NetworkUpdateStage updateStage)
internal void UpdateTime()
{
if (updateStage == NetworkUpdateStage.PreUpdate)
// As a client wait to run the time system until we are connected.
// As a client or server don't worry about the time system if we are no longer processing messages
if (!m_ConnectionManager.LocalClient.IsServer && !m_ConnectionManager.LocalClient.IsConnected)
{
// As a client wait to run the time system until we are connected.
// As a client or server don't worry about the time system if we are no longer processing messages
if (!m_ConnectionManager.LocalClient.IsServer && !m_ConnectionManager.LocalClient.IsConnected)
{
return;
}
return;
}

// Only update RTT here, server time is updated by time sync messages
var reset = Advance(m_NetworkManager.RealTimeProvider.UnscaledDeltaTime);
if (reset)
{
m_NetworkTickSystem.Reset(LocalTime, ServerTime);
}
// Only update RTT here, server time is updated by time sync messages
var reset = Advance(m_NetworkManager.RealTimeProvider.UnscaledDeltaTime);
if (reset)
{
m_NetworkTickSystem.Reset(LocalTime, ServerTime);
}

m_NetworkTickSystem.UpdateTick(LocalTime, ServerTime);
m_NetworkTickSystem.UpdateTick(LocalTime, ServerTime);

if (!m_ConnectionManager.LocalClient.IsServer)
{
Sync(LastSyncedServerTimeSec + m_NetworkManager.RealTimeProvider.UnscaledDeltaTime, m_NetworkTransport.GetCurrentRtt(NetworkManager.ServerClientId) / 1000d);
}
if (!m_ConnectionManager.LocalClient.IsServer)
{
Sync(LastSyncedServerTimeSec + m_NetworkManager.RealTimeProvider.UnscaledDeltaTime, m_NetworkTransport.GetCurrentRtt(NetworkManager.ServerClientId) / 1000d);
}
}

Expand Down