From 4095475024e23156aab72888ba9d59ca92c52a01 Mon Sep 17 00:00:00 2001 From: Dominick Schroer Date: Wed, 5 Feb 2025 11:15:40 -0700 Subject: [PATCH 1/5] feat: session state token --- .../Messaging/Messages/ConnectionApprovedMessage.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs index 5005c1987c..f6ef3ed5fe 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Unity.Collections; +using UnityEngine; namespace Unity.Netcode { @@ -43,11 +44,13 @@ public void NetworkSerialize(BufferSerializer serializer) where T : IReade internal struct ConnectionApprovedMessage : INetworkMessage { + private const int k_AddSessionStateToken = 3; private const int k_AddCMBServiceConfig = 2; private const int k_VersionAddClientIds = 1; - public int Version => k_AddCMBServiceConfig; + public int Version => k_AddSessionStateToken; public ulong OwnerClientId; + public ulong SessionStateToken; public int NetworkTick; // The cloud state service should set this if we are restoring a session public ServiceConfig ServiceConfig; @@ -108,6 +111,10 @@ public void Serialize(FastBufferWriter writer, int targetVersion) // ============================================================ BytePacker.WriteValueBitPacked(writer, OwnerClientId); + if (targetVersion >= k_AddSessionStateToken) + { + writer.WriteValueSafe(SessionStateToken); + } BytePacker.WriteValueBitPacked(writer, NetworkTick); if (IsDistributedAuthority) { @@ -199,6 +206,10 @@ public bool Deserialize(FastBufferReader reader, ref NetworkContext context, int // ============================================================ m_ReceiveMessageVersion = receivedMessageVersion; ByteUnpacker.ReadValueBitPacked(reader, out OwnerClientId); + if (receivedMessageVersion >= k_AddSessionStateToken) + { + reader.ReadValueSafe(out SessionStateToken); + } ByteUnpacker.ReadValueBitPacked(reader, out NetworkTick); if (networkManager.DistributedAuthorityMode) { From b7685b77d5ca12da966948faa874053158c46516 Mon Sep 17 00:00:00 2001 From: Dominick Date: Wed, 5 Feb 2025 11:21:58 -0700 Subject: [PATCH 2/5] Update ConnectionApprovedMessage.cs --- .../Runtime/Messaging/Messages/ConnectionApprovedMessage.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs index f6ef3ed5fe..b43434d226 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Unity.Collections; -using UnityEngine; namespace Unity.Netcode { From 05d766c9c4c74b434473cc21cd2af2d28b2826e3 Mon Sep 17 00:00:00 2001 From: Dominick Schroer Date: Wed, 5 Feb 2025 12:37:51 -0700 Subject: [PATCH 3/5] use space over tab --- .../Runtime/Messaging/Messages/ConnectionApprovedMessage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs index f6ef3ed5fe..73f9cb0cba 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs @@ -50,7 +50,7 @@ internal struct ConnectionApprovedMessage : INetworkMessage public int Version => k_AddSessionStateToken; public ulong OwnerClientId; - public ulong SessionStateToken; + public ulong SessionStateToken; public int NetworkTick; // The cloud state service should set this if we are restoring a session public ServiceConfig ServiceConfig; From 2f289a3b44508588f710e5627887e2fb2d7b6831 Mon Sep 17 00:00:00 2001 From: Dominick Schroer Date: Thu, 27 Feb 2025 13:10:26 -0700 Subject: [PATCH 4/5] move SessionStateToken into SessionConfig --- .../Runtime/Configuration/SessionConfig.cs | 3 ++- .../Messages/ConnectionApprovedMessage.cs | 27 +++++++++++-------- .../ProjectSettings/MultiplayerManager.asset | 7 +++++ .../com.unity.services.core/Settings.json | 0 4 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 testproject/ProjectSettings/MultiplayerManager.asset create mode 100644 testproject/ProjectSettings/Packages/com.unity.services.core/Settings.json diff --git a/com.unity.netcode.gameobjects/Runtime/Configuration/SessionConfig.cs b/com.unity.netcode.gameobjects/Runtime/Configuration/SessionConfig.cs index 671ae74811..9a4ed0a931 100644 --- a/com.unity.netcode.gameobjects/Runtime/Configuration/SessionConfig.cs +++ b/com.unity.netcode.gameobjects/Runtime/Configuration/SessionConfig.cs @@ -8,9 +8,10 @@ internal class SessionConfig public const uint NoFeatureCompatibility = 0; public const uint BypassFeatureCompatible = 1; public const uint ServerDistributionCompatible = 2; + public const uint SessionStateToken = 3; // The most current session version (!!!!set this when you increment!!!!!) - public static uint PackageSessionVersion => ServerDistributionCompatible; + public static uint PackageSessionVersion => SessionStateToken; internal uint SessionVersion; diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs index 0a296103c8..4e83f5cdde 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs @@ -9,6 +9,7 @@ internal struct ServiceConfig : INetworkSerializable public bool IsRestoredSession; public ulong CurrentSessionOwner; public bool ServerRedistribution; + public ulong SessionStateToken; public void NetworkSerialize(BufferSerializer serializer) where T : IReaderWriter { @@ -22,6 +23,11 @@ public void NetworkSerialize(BufferSerializer serializer) where T : IReade { serializer.SerializeValue(ref ServerRedistribution); } + + if (SessionVersion >= SessionConfig.SessionStateToken) + { + serializer.SerializeValue(ref SessionStateToken); + } } else { @@ -37,19 +43,26 @@ public void NetworkSerialize(BufferSerializer serializer) where T : IReade { ServerRedistribution = false; } + + if (SessionVersion >= SessionConfig.SessionStateToken) + { + serializer.SerializeValue(ref SessionStateToken); + } + else + { + SessionStateToken = 0; + } } } } internal struct ConnectionApprovedMessage : INetworkMessage { - private const int k_AddSessionStateToken = 3; private const int k_AddCMBServiceConfig = 2; private const int k_VersionAddClientIds = 1; - public int Version => k_AddSessionStateToken; + public int Version => k_AddCMBServiceConfig; public ulong OwnerClientId; - public ulong SessionStateToken; public int NetworkTick; // The cloud state service should set this if we are restoring a session public ServiceConfig ServiceConfig; @@ -110,10 +123,6 @@ public void Serialize(FastBufferWriter writer, int targetVersion) // ============================================================ BytePacker.WriteValueBitPacked(writer, OwnerClientId); - if (targetVersion >= k_AddSessionStateToken) - { - writer.WriteValueSafe(SessionStateToken); - } BytePacker.WriteValueBitPacked(writer, NetworkTick); if (IsDistributedAuthority) { @@ -205,10 +214,6 @@ public bool Deserialize(FastBufferReader reader, ref NetworkContext context, int // ============================================================ m_ReceiveMessageVersion = receivedMessageVersion; ByteUnpacker.ReadValueBitPacked(reader, out OwnerClientId); - if (receivedMessageVersion >= k_AddSessionStateToken) - { - reader.ReadValueSafe(out SessionStateToken); - } ByteUnpacker.ReadValueBitPacked(reader, out NetworkTick); if (networkManager.DistributedAuthorityMode) { diff --git a/testproject/ProjectSettings/MultiplayerManager.asset b/testproject/ProjectSettings/MultiplayerManager.asset new file mode 100644 index 0000000000..2a936644e0 --- /dev/null +++ b/testproject/ProjectSettings/MultiplayerManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!655991488 &1 +MultiplayerManager: + m_ObjectHideFlags: 0 + m_EnableMultiplayerRoles: 0 + m_StrippingTypes: {} diff --git a/testproject/ProjectSettings/Packages/com.unity.services.core/Settings.json b/testproject/ProjectSettings/Packages/com.unity.services.core/Settings.json new file mode 100644 index 0000000000..e69de29bb2 From 7e07badc96daf7700a89da46523b19877679bdc1 Mon Sep 17 00:00:00 2001 From: Dominick Schroer Date: Thu, 27 Feb 2025 13:11:26 -0700 Subject: [PATCH 5/5] remove extra files --- testproject/ProjectSettings/MultiplayerManager.asset | 7 ------- .../Packages/com.unity.services.core/Settings.json | 0 2 files changed, 7 deletions(-) delete mode 100644 testproject/ProjectSettings/MultiplayerManager.asset delete mode 100644 testproject/ProjectSettings/Packages/com.unity.services.core/Settings.json diff --git a/testproject/ProjectSettings/MultiplayerManager.asset b/testproject/ProjectSettings/MultiplayerManager.asset deleted file mode 100644 index 2a936644e0..0000000000 --- a/testproject/ProjectSettings/MultiplayerManager.asset +++ /dev/null @@ -1,7 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!655991488 &1 -MultiplayerManager: - m_ObjectHideFlags: 0 - m_EnableMultiplayerRoles: 0 - m_StrippingTypes: {} diff --git a/testproject/ProjectSettings/Packages/com.unity.services.core/Settings.json b/testproject/ProjectSettings/Packages/com.unity.services.core/Settings.json deleted file mode 100644 index e69de29bb2..0000000000