Skip to content

Commit eea5634

Browse files
Merge branch 'develop' into feature/track_local_execution
2 parents 35ce365 + 2281006 commit eea5634

File tree

9 files changed

+571
-404
lines changed

9 files changed

+571
-404
lines changed

com.unity.netcode.adapter.utp/Tests/Runtime/Helpers/RuntimeTestsHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Unity.Netcode.UTP.RuntimeTests
1010
public static class RuntimeTestsHelpers
1111
{
1212
// 50ms should be plenty enough for any network interaction to occur (even roundtrips).
13-
#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
13+
#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX || UNITY_ANDROID
1414
public const float MaxNetworkEventWaitTime = 0.35f;
1515
#else
1616
public const float MaxNetworkEventWaitTime = 0.15f;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1335,7 +1335,7 @@ internal void OnClientDisconnectFromServer(ulong clientId)
13351335
}
13361336
}
13371337

1338-
for (int i = 0; i < networkClient.OwnedObjects.Count; i++)
1338+
for (int i = networkClient.OwnedObjects.Count - 1; i >= 0; i--)
13391339
{
13401340
var ownedObject = networkClient.OwnedObjects[i];
13411341
if (ownedObject != null)
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using NUnit.Framework;
4+
using UnityEngine;
5+
using UnityEngine.TestTools;
6+
using Object = UnityEngine.Object;
7+
8+
namespace Unity.Netcode.RuntimeTests
9+
{
10+
public class NetworkObjectDontDestroyWithOwnerTests
11+
{
12+
[UnityTest]
13+
public IEnumerator DontDestroyWithOwnerTest()
14+
{
15+
// create server and client instances
16+
MultiInstanceHelpers.Create(1, out NetworkManager server, out NetworkManager[] clients);
17+
18+
// create prefab
19+
var gameObject = new GameObject("ClientOwnedObject");
20+
var networkObject = gameObject.AddComponent<NetworkObject>();
21+
networkObject.DontDestroyWithOwner = true;
22+
MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject);
23+
24+
server.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab()
25+
{
26+
Prefab = gameObject
27+
});
28+
29+
for (int i = 0; i < clients.Length; i++)
30+
{
31+
clients[i].NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab()
32+
{
33+
Prefab = gameObject
34+
});
35+
}
36+
37+
// start server and connect clients
38+
MultiInstanceHelpers.Start(false, server, clients);
39+
40+
// wait for connection on client side
41+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientsConnected(clients));
42+
43+
// wait for connection on server side
44+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientConnectedToServer(server));
45+
46+
// network objects
47+
var networkObjects = new List<NetworkObject>();
48+
49+
// create instances
50+
for (int i = 0; i < 32; i++)
51+
{
52+
var no = Object.Instantiate(gameObject).GetComponent<NetworkObject>();
53+
no.NetworkManagerOwner = server;
54+
networkObjects.Add(no);
55+
no.SpawnWithOwnership(clients[0].LocalClientId);
56+
}
57+
58+
// wait for object spawn on client
59+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForCondition(() => clients[0].SpawnManager.SpawnedObjects.Count == 32));
60+
61+
// disconnect the client that owns all the clients
62+
MultiInstanceHelpers.StopOneClient(clients[0]);
63+
64+
// wait for disconnect
65+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForCondition(() => server.ConnectedClients.Count == 0));
66+
67+
for (int i = 0; i < networkObjects.Count; i++)
68+
{
69+
// ensure ownership was transferred back
70+
Assert.That(networkObjects[i].OwnerClientId == server.ServerClientId);
71+
}
72+
73+
// cleanup
74+
MultiInstanceHelpers.Destroy();
75+
}
76+
}
77+
}

com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectDontDestroyWithOwnerTests.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: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -230,17 +230,15 @@ public override void Send(ulong clientId, ArraySegment<byte> payload, NetworkDel
230230
byte[] copy = new byte[payload.Count];
231231
Buffer.BlockCopy(payload.Array, payload.Offset, copy, 0, payload.Count);
232232

233-
if (!m_Peers.ContainsKey(clientId))
233+
if (m_Peers.ContainsKey(clientId))
234234
{
235-
throw new KeyNotFoundException($"peer id {clientId} not in peer list");
235+
m_Peers[clientId].IncomingBuffer.Enqueue(new Event
236+
{
237+
Type = NetworkEvent.Data,
238+
ConnectionId = m_LocalConnection.ConnectionId,
239+
Data = new ArraySegment<byte>(copy)
240+
});
236241
}
237-
238-
m_Peers[clientId].IncomingBuffer.Enqueue(new Event
239-
{
240-
Type = NetworkEvent.Data,
241-
ConnectionId = m_LocalConnection.ConnectionId,
242-
Data = new ArraySegment<byte>(copy)
243-
});
244242
}
245243
}
246244

0 commit comments

Comments
 (0)