From 3b67385e54ed767af8f8fb49b652054607483718 Mon Sep 17 00:00:00 2001 From: Jeffrey Rainy Date: Fri, 29 Apr 2022 11:46:33 -0400 Subject: [PATCH 1/2] fix: NetworkList serialization sends the list values before the cached updates, to prevent duplicate application (#1917) --- .../NetworkVariable/Collections/NetworkList.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs index 9a891ec64d..5e0b8d8287 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs @@ -11,6 +11,7 @@ namespace Unity.Netcode public class NetworkList : NetworkVariableSerialization where T : unmanaged, IEquatable { private NativeList m_List = new NativeList(64, Allocator.Persistent); + private NativeList m_ListAtLastReset = new NativeList(64, Allocator.Persistent); private NativeList> m_DirtyEvents = new NativeList>(64, Allocator.Persistent); /// @@ -41,7 +42,11 @@ public NetworkList(IEnumerable values = default, public override void ResetDirty() { base.ResetDirty(); - m_DirtyEvents.Clear(); + if (m_DirtyEvents.Length > 0) + { + m_DirtyEvents.Clear(); + m_ListAtLastReset.CopyFrom(m_List); + } } /// @@ -109,10 +114,10 @@ public override void WriteDelta(FastBufferWriter writer) /// public override void WriteField(FastBufferWriter writer) { - writer.WriteValueSafe((ushort)m_List.Length); - for (int i = 0; i < m_List.Length; i++) + writer.WriteValueSafe((ushort)m_ListAtLastReset.Length); + for (int i = 0; i < m_ListAtLastReset.Length; i++) { - Write(writer, m_List[i]); + Write(writer, m_ListAtLastReset[i]); } } @@ -454,6 +459,7 @@ public int LastModifiedTick public override void Dispose() { m_List.Dispose(); + m_ListAtLastReset.Dispose(); m_DirtyEvents.Dispose(); } } From c009f6fc9b305e22055e1663d5ca81d44b43ba4c Mon Sep 17 00:00:00 2001 From: Jeffrey Rainy Date: Fri, 29 Apr 2022 15:15:25 -0400 Subject: [PATCH 2/2] fix: shutting down properly, when failing to StartHost or StartClient. This allows the next attempt to not fail automatically. (#1918) --- .../Runtime/Transports/UTP/UnityTransport.cs | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs index 83642df574..62b932f88f 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs @@ -1047,7 +1047,12 @@ public override bool StartClient() return false; } - return ClientBindAndConnect(); + var succeeded = ClientBindAndConnect(); + if (!succeeded) + { + Shutdown(); + } + return succeeded; } public override bool StartServer() @@ -1057,12 +1062,23 @@ public override bool StartServer() return false; } + bool succeeded; switch (m_ProtocolType) { case ProtocolType.UnityTransport: - return ServerBindAndListen(ConnectionData.ListenEndPoint); + succeeded = ServerBindAndListen(ConnectionData.ListenEndPoint); + if (!succeeded) + { + Shutdown(); + } + return succeeded; case ProtocolType.RelayUnityTransport: - return StartRelayServer(); + succeeded = StartRelayServer(); + if (!succeeded) + { + Shutdown(); + } + return succeeded; default: return false; }