Skip to content

Commit 8c84575

Browse files
andrews-unityShadauxCatnetcode-ci-service
authored
fix: Set shutdown flags back to false once shutdown is complete (#1425) (#1455)
* fix: Set m_ShuttingDown back to false once shutdown is complete Credit to @JayPeet, original PR #1423 * Added a test, fixed a related issue with a second flag used in the same process that also needs to be reset. Co-authored-by: Jaedyn Draper <[email protected]> Co-authored-by: Unity Netcode CI <[email protected]>
1 parent 6a75011 commit 8c84575

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,8 @@ internal void ShutdownInternal()
11331133
m_TransportIdToClientIdMap.Clear();
11341134

11351135
IsListening = false;
1136+
m_ShuttingDown = false;
1137+
m_StopProcessingMessages = false;
11361138
}
11371139

11381140
// INetworkUpdateSystem
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
using System.Collections;
2+
using NUnit.Framework;
3+
using UnityEngine;
4+
using UnityEngine.TestTools;
5+
6+
namespace Unity.Netcode.RuntimeTests
7+
{
8+
public class StopStartRuntimeTests
9+
{
10+
[UnityTest]
11+
public IEnumerator WhenShuttingDownAndRestarting_SDKRestartsSuccessfullyAndStaysRunning()
12+
{ // create server and client instances
13+
MultiInstanceHelpers.Create(1, out NetworkManager server, out NetworkManager[] clients);
14+
15+
try
16+
{
17+
18+
// create prefab
19+
var gameObject = new GameObject("PlayerObject");
20+
var networkObject = gameObject.AddComponent<NetworkObject>();
21+
networkObject.DontDestroyWithOwner = true;
22+
MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject);
23+
24+
server.NetworkConfig.PlayerPrefab = gameObject;
25+
26+
for (int i = 0; i < clients.Length; i++)
27+
{
28+
clients[i].NetworkConfig.PlayerPrefab = gameObject;
29+
}
30+
31+
// start server and connect clients
32+
MultiInstanceHelpers.Start(false, server, clients);
33+
34+
// wait for connection on client side
35+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientsConnected(clients));
36+
37+
// wait for connection on server side
38+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientConnectedToServer(server));
39+
40+
// shutdown the server
41+
server.Shutdown();
42+
43+
// wait 1 frame because shutdowns are delayed
44+
var nextFrameNumber = Time.frameCount + 1;
45+
yield return new WaitUntil(() => Time.frameCount >= nextFrameNumber);
46+
47+
// Verify the shutdown occurred
48+
Assert.IsFalse(server.IsServer);
49+
Assert.IsFalse(server.IsListening);
50+
Assert.IsFalse(server.IsHost);
51+
Assert.IsFalse(server.IsClient);
52+
53+
server.StartServer();
54+
// Verify the server started
55+
Assert.IsTrue(server.IsServer);
56+
Assert.IsTrue(server.IsListening);
57+
58+
// Wait several frames
59+
nextFrameNumber = Time.frameCount + 10;
60+
yield return new WaitUntil(() => Time.frameCount >= nextFrameNumber);
61+
62+
// Verify the server is still running
63+
Assert.IsTrue(server.IsServer);
64+
Assert.IsTrue(server.IsListening);
65+
}
66+
finally
67+
{
68+
// cleanup
69+
MultiInstanceHelpers.Destroy();
70+
}
71+
}
72+
}
73+
}

com.unity.netcode.gameobjects/Tests/Runtime/StopStartRuntimeTests.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransport.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ private void StopServer()
112112
{
113113
s_Server = null;
114114
m_Peers.Remove(ServerClientId);
115+
m_LocalConnection = null;
115116
}
116117

117118
public override void Shutdown()

0 commit comments

Comments
 (0)