Skip to content

Commit bf29d19

Browse files
committed
Fixed Client cleaup on Disconnect
1 parent 3f6f291 commit bf29d19

File tree

4 files changed

+50
-15
lines changed

4 files changed

+50
-15
lines changed

MLAPI/Data/FixedQueue.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ public sealed class FixedQueue<T>
1717
/// </summary>
1818
public int Count { get => queueCount; }
1919

20+
public T this[int index]
21+
{
22+
get
23+
{
24+
return queue[(queueStart + index) % queue.Length];
25+
}
26+
}
27+
2028
/// <summary>
2129
/// Creates a new FixedQueue with a given size
2230
/// </summary>

MLAPI/Data/NetworkProfiler/NetworkProfiler.cs

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using MLAPI.NetworkingManagerComponents.Core;
1+
using System.Collections.Generic;
2+
using MLAPI.NetworkingManagerComponents.Core;
23
using UnityEngine;
34

45
namespace MLAPI.Data.NetworkProfiler
@@ -29,18 +30,39 @@ public static void Start(int historyLength)
2930
isRunning = true;
3031
}
3132

32-
public static ProfilerTick[] Stop()
33+
public static void Stop()
34+
{
35+
Ticks = null; //leave to GC
36+
CurrentTick = null; //leave to GC
37+
isRunning = false;
38+
}
39+
40+
public static int Stop(ref ProfilerTick[] tickBuffer)
3341
{
3442
if (!isRunning)
35-
return new ProfilerTick[0];
36-
ProfilerTick[] ticks = new ProfilerTick[Ticks.Count];
37-
for (int i = 0; i < Ticks.Count; i++)
38-
ticks[i] = Ticks.ElementAt(i);
39-
43+
return 0;
44+
int iteration = Ticks.Count > tickBuffer.Length ? tickBuffer.Length : Ticks.Count;
45+
for (int i = 0; i < iteration; i++) tickBuffer[i] = Ticks[i];
46+
47+
Ticks = null; //leave to GC
48+
CurrentTick = null; //leave to GC
49+
isRunning = false;
50+
51+
return iteration;
52+
}
53+
54+
public static int Stop(ref List<ProfilerTick> tickBuffer)
55+
{
56+
if (!isRunning)
57+
return 0;
58+
int iteration = Ticks.Count > tickBuffer.Count ? tickBuffer.Count : Ticks.Count;
59+
for (int i = 0; i < iteration; i++) tickBuffer[i] = Ticks[i];
60+
4061
Ticks = null; //leave to GC
4162
CurrentTick = null; //leave to GC
4263
isRunning = false;
43-
return ticks;
64+
65+
return iteration;
4466
}
4567

4668
internal static void StartTick(TickType type)

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@ public void StopClient()
592592
if (LogHelper.CurrentLogLevel <= LogLevel.Developer) LogHelper.LogInfo("StopClient()");
593593
_isClient = false;
594594
NetworkConfig.NetworkTransport.DisconnectFromServer();
595+
_isClientConnected = false;
595596
Shutdown();
596597
}
597598

@@ -661,6 +662,7 @@ private void OnDestroy()
661662
private void Shutdown()
662663
{
663664
if (LogHelper.CurrentLogLevel <= LogLevel.Developer) LogHelper.LogInfo("Shutdown()");
665+
NetworkProfiler.Stop();
664666
isListening = false;
665667
_isClient = false;
666668
_isServer = false;
@@ -751,9 +753,12 @@ private void Update()
751753
if (LogHelper.CurrentLogLevel <= LogLevel.Developer) LogHelper.LogInfo("Disconnect Event From " + clientId);
752754

753755
if (isServer)
754-
OnClientDisconnect(clientId);
756+
OnClientDisconnectFromServer(clientId);
755757
else
758+
{
756759
_isClientConnected = false;
760+
StopClient();
761+
}
757762

758763
if (OnClientDisconnectCallback != null)
759764
OnClientDisconnectCallback.Invoke(clientId);
@@ -1061,7 +1066,7 @@ internal void DisconnectClient(uint clientId)
10611066
NetworkConfig.NetworkTransport.DisconnectClient(clientId);
10621067
}
10631068

1064-
internal void OnClientDisconnect(uint clientId)
1069+
internal void OnClientDisconnectFromServer(uint clientId)
10651070
{
10661071
if (pendingClients.Contains(clientId))
10671072
pendingClients.Remove(clientId);
@@ -1434,7 +1439,7 @@ public void SendToClient(uint clientId, string messageType, string channelName,
14341439
/// <typeparam name="T">The class type to send</typeparam>
14351440
/// <param name="clientId">The clientId to send the message to</param>
14361441
/// <param name="messageType">User defined messageType</param>
1437-
/// <param name="channelName">User defined channelName</param>
1442+
/// <param name="channelName">User defined channelName</param>
14381443
/// <param name="instance">The instance to send</param>
14391444
public void SendToClient<T>(int clientId, string messageType, string channelName, T instance)
14401445
{
@@ -1505,7 +1510,7 @@ public void SendToClients(uint[] clientIds, string messageType, string channelNa
15051510
/// <typeparam name="T">The class type to send</typeparam>
15061511
/// <param name="clientIds">The clientId's to send to</param>
15071512
/// <param name="messageType">User defined messageType</param>
1508-
/// <param name="channelName">User defined channelName</param>
1513+
/// <param name="channelName">User defined channelName</param>
15091514
/// <param name="instance">The instance to send</param>
15101515
public void SendToClients<T>(int[] clientIds, string messageType, string channelName, T instance)
15111516
{
@@ -1576,7 +1581,7 @@ public void SendToClients(List<uint> clientIds, string messageType, string chann
15761581
/// <typeparam name="T">The class type to send</typeparam>
15771582
/// <param name="clientIds">The clientId's to send to</param>
15781583
/// <param name="messageType">User defined messageType</param>
1579-
/// <param name="channelName">User defined channelName</param>
1584+
/// <param name="channelName">User defined channelName</param>
15801585
/// <param name="instance">The instance to send</param>
15811586
public void SendToClients<T>(List<int> clientIds, string messageType, string channelName, T instance)
15821587
{
@@ -1644,7 +1649,7 @@ public void SendToClients(string messageType, string channelName, BitWriter writ
16441649
/// </summary>
16451650
/// <typeparam name="T">The class type to send</typeparam>
16461651
/// <param name="messageType">User defined messageType</param>
1647-
/// <param name="channelName">User defined channelName</param>
1652+
/// <param name="channelName">User defined channelName</param>
16481653
/// <param name="instance">The instance to send</param>
16491654
public void SendToClients<T>(string messageType, string channelName, T instance)
16501655
{

MLAPI/NetworkingManagerComponents/Core/InternalMessageHandler.Receive.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ internal static void HandleAddObject(uint clientId, BitReader reader, int channe
177177
internal static void HandleClientDisconnect(uint clientId, BitReader reader, int channelId)
178178
{
179179
uint disconnectedClientId = reader.ReadUInt();
180-
netManager.OnClientDisconnect(disconnectedClientId);
180+
netManager.OnClientDisconnectFromServer(disconnectedClientId);
181181
}
182182

183183
internal static void HandleDestroyObject(uint clientId, BitReader reader, int channelId)

0 commit comments

Comments
 (0)