Skip to content

Commit cddc82a

Browse files
authored
refactor: minor re-org/updates to network systems (#2509)
1 parent 850c7b6 commit cddc82a

File tree

4 files changed

+34
-63
lines changed

4 files changed

+34
-63
lines changed

com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -176,17 +176,13 @@ private ulong GetServerTransportId()
176176
}
177177

178178
/// <summary>
179-
/// Handles cleaning up the transport id/client id tables after
180-
/// receiving a disconnect event from transport
179+
/// Handles cleaning up the transport id/client id tables after receiving a disconnect event from transport
181180
/// </summary>
182181
[MethodImpl(MethodImplOptions.AggressiveInlining)]
183182
internal ulong TransportIdCleanUp(ulong transportId)
184183
{
185184
// This check is for clients that attempted to connect but failed.
186-
// When this happens, the client will not have an entry within the
187-
// m_TransportIdToClientIdMap or m_ClientIdToTransportIdMap lookup
188-
// tables so we exit early and just return 0 to be used for the
189-
// disconnect event.
185+
// 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.
190186
if (!LocalClient.IsServer && !TransportIdToClientIdMap.ContainsKey(transportId))
191187
{
192188
return 0;
@@ -198,16 +194,8 @@ internal ulong TransportIdCleanUp(ulong transportId)
198194
return clientId;
199195
}
200196

201-
/// <summary>
202-
/// ConnectionManager specific logic during the EarlyUpdate
203-
/// </summary>
204-
/// <remarks>
205-
/// Also handles NetworkTransport implementations that are polled as opposed to event driven.
206-
/// </remarks>
207-
internal void OnEarlyUpdate()
197+
internal void PollAndHandleNetworkEvents()
208198
{
209-
ProcessPendingApprovals();
210-
211199
#if DEVELOPMENT_BUILD || UNITY_EDITOR
212200
s_TransportPollMarker.Begin();
213201
#endif
@@ -512,7 +500,7 @@ internal void ApproveConnection(ref ConnectionRequestMessage connectionRequestMe
512500
/// Server-Side:
513501
/// Processes pending approvals and removes any stale pending clients
514502
/// </summary>
515-
private void ProcessPendingApprovals()
503+
internal void ProcessPendingApprovals()
516504
{
517505
List<ulong> senders = null;
518506

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,16 @@ public void NetworkUpdate(NetworkUpdateStage updateStage)
3636
{
3737
case NetworkUpdateStage.EarlyUpdate:
3838
{
39-
ConnectionManager.OnEarlyUpdate();
40-
MessageManager.OnEarlyUpdate();
39+
ConnectionManager.ProcessPendingApprovals();
40+
ConnectionManager.PollAndHandleNetworkEvents();
41+
42+
MessageManager.ProcessIncomingMessageQueue();
43+
MessageManager.CleanupDisconnectedClients();
4144
}
4245
break;
4346
case NetworkUpdateStage.PreUpdate:
4447
{
45-
NetworkTimeSystem.NetworkUpdate(updateStage);
48+
NetworkTimeSystem.UpdateTime();
4649
}
4750
break;
4851
case NetworkUpdateStage.PostLateUpdate:

com.unity.netcode.gameobjects/Runtime/Messaging/NetworkMessageManager.cs

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -222,24 +222,6 @@ public int GetLocalVersion(Type messageType)
222222
return m_LocalVersions[messageType];
223223
}
224224

225-
/// <summary>
226-
/// Invoked by <see cref="NetworkConnectionManager.NetworkUpdate"/>
227-
/// </summary>
228-
/// <remarks>
229-
/// This requires a specific order of operations where <see cref="NetworkConnectionManager.OnEarlyUpdate"/> is
230-
/// invoked prior to this method.
231-
/// </remarks>
232-
internal void OnEarlyUpdate()
233-
{
234-
if (StopProcessing)
235-
{
236-
return;
237-
}
238-
239-
ProcessIncomingMessageQueue();
240-
CleanupDisconnectedClients();
241-
}
242-
243225
internal static string ByteArrayToString(byte[] ba, int offset, int count)
244226
{
245227
var hex = new StringBuilder(ba.Length * 2);
@@ -255,9 +237,9 @@ internal void HandleIncomingData(ulong clientId, ArraySegment<byte> data, float
255237
{
256238
unsafe
257239
{
258-
fixed (byte* nativeData = data.Array)
240+
fixed (byte* dataPtr = data.Array)
259241
{
260-
var batchReader = new FastBufferReader(nativeData + data.Offset, Allocator.None, data.Count);
242+
var batchReader = new FastBufferReader(dataPtr + data.Offset, Allocator.None, data.Count);
261243
if (!batchReader.TryBeginRead(sizeof(NetworkBatchHeader)))
262244
{
263245
NetworkLog.LogError("Received a packet too small to contain a BatchHeader. Ignoring it.");
@@ -461,8 +443,13 @@ public void HandleMessage(in NetworkMessageHeader header, FastBufferReader reade
461443
}
462444
}
463445

464-
internal unsafe void ProcessIncomingMessageQueue()
446+
internal void ProcessIncomingMessageQueue()
465447
{
448+
if (StopProcessing)
449+
{
450+
return;
451+
}
452+
466453
for (var index = 0; index < m_IncomingMessageQueue.Length; ++index)
467454
{
468455
// Avoid copies...

com.unity.netcode.gameobjects/Runtime/Timing/NetworkTimeSystem.cs

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -123,34 +123,27 @@ internal NetworkTickSystem Initialize(NetworkManager networkManager)
123123
return m_NetworkTickSystem;
124124
}
125125

126-
/// <summary>
127-
/// The primary time system
128-
/// </summary>
129-
/// <param name="updateStage"></param>
130-
internal void NetworkUpdate(NetworkUpdateStage updateStage)
126+
internal void UpdateTime()
131127
{
132-
if (updateStage == NetworkUpdateStage.PreUpdate)
128+
// As a client wait to run the time system until we are connected.
129+
// As a client or server don't worry about the time system if we are no longer processing messages
130+
if (!m_ConnectionManager.LocalClient.IsServer && !m_ConnectionManager.LocalClient.IsConnected)
133131
{
134-
// As a client wait to run the time system until we are connected.
135-
// As a client or server don't worry about the time system if we are no longer processing messages
136-
if (!m_ConnectionManager.LocalClient.IsServer && !m_ConnectionManager.LocalClient.IsConnected)
137-
{
138-
return;
139-
}
132+
return;
133+
}
140134

141-
// Only update RTT here, server time is updated by time sync messages
142-
var reset = Advance(m_NetworkManager.RealTimeProvider.UnscaledDeltaTime);
143-
if (reset)
144-
{
145-
m_NetworkTickSystem.Reset(LocalTime, ServerTime);
146-
}
135+
// Only update RTT here, server time is updated by time sync messages
136+
var reset = Advance(m_NetworkManager.RealTimeProvider.UnscaledDeltaTime);
137+
if (reset)
138+
{
139+
m_NetworkTickSystem.Reset(LocalTime, ServerTime);
140+
}
147141

148-
m_NetworkTickSystem.UpdateTick(LocalTime, ServerTime);
142+
m_NetworkTickSystem.UpdateTick(LocalTime, ServerTime);
149143

150-
if (!m_ConnectionManager.LocalClient.IsServer)
151-
{
152-
Sync(LastSyncedServerTimeSec + m_NetworkManager.RealTimeProvider.UnscaledDeltaTime, m_NetworkTransport.GetCurrentRtt(NetworkManager.ServerClientId) / 1000d);
153-
}
144+
if (!m_ConnectionManager.LocalClient.IsServer)
145+
{
146+
Sync(LastSyncedServerTimeSec + m_NetworkManager.RealTimeProvider.UnscaledDeltaTime, m_NetworkTransport.GetCurrentRtt(NetworkManager.ServerClientId) / 1000d);
154147
}
155148
}
156149

0 commit comments

Comments
 (0)