Skip to content

Commit 0bef65c

Browse files
chore: updates to comb-server bypass and connection sequence configurations (#3093)
* update remove the magic injected number from NT. * update remove magic * update Adding NGO version detection and CMB service development modification capabilities. Updating ConnectionRequestMessage and ConnectionApprovedMessage to use INetworkSerializable structs as a means to communicating a clients configuration and NGO version as well as to receive a configuration from the comb-server. * update Removing logging version number from console when CMB_SERVICE_DEVELOPMENT is not defined. * Add version to service config * update Minor adjustments to handle DAHost mode and to process connection approved message from service. --------- Co-authored-by: EmandM <[email protected]>
1 parent 87d23e9 commit 0bef65c

File tree

6 files changed

+203
-30
lines changed

6 files changed

+203
-30
lines changed

com.unity.netcode.gameobjects/Editor/NetworkManagerEditor.cs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ public class NetworkManagerEditor : NetcodeEditorBase<NetworkManager>
4848
private SerializedProperty m_NetworkProfileMetrics;
4949
private SerializedProperty m_NetworkMessageMetrics;
5050

51+
#if CMB_SERVICE_DEVELOPMENT
52+
private SerializedProperty m_MajorVersion;
53+
private SerializedProperty m_MinorVersion;
54+
private SerializedProperty m_PatchVersion;
55+
#endif
56+
5157
private NetworkManager m_NetworkManager;
5258
private bool m_Initialized;
5359

@@ -120,8 +126,11 @@ private void Initialize()
120126
#if MULTIPLAYER_TOOLS
121127
m_NetworkMessageMetrics = m_NetworkConfigProperty.FindPropertyRelative("NetworkMessageMetrics");
122128
#endif
123-
124-
129+
#if CMB_SERVICE_DEVELOPMENT
130+
m_MajorVersion = serializedObject.FindProperty(nameof(NetworkManager.MajorVersion));
131+
m_MinorVersion = serializedObject.FindProperty(nameof(NetworkManager.MinorVersion));
132+
m_PatchVersion = serializedObject.FindProperty(nameof(NetworkManager.PatchVersion));
133+
#endif
125134
m_RpcHashSizeProperty = m_NetworkConfigProperty.FindPropertyRelative("RpcHashSize");
126135
m_PrefabsList = m_NetworkConfigProperty
127136
.FindPropertyRelative(nameof(NetworkConfig.Prefabs))
@@ -161,6 +170,11 @@ private void CheckNullProperties()
161170
#if MULTIPLAYER_TOOLS
162171
m_NetworkMessageMetrics = m_NetworkConfigProperty.FindPropertyRelative("NetworkMessageMetrics");
163172
#endif
173+
#if CMB_SERVICE_DEVELOPMENT
174+
m_MajorVersion = serializedObject.FindProperty(nameof(NetworkManager.MajorVersion));
175+
m_MinorVersion = serializedObject.FindProperty(nameof(NetworkManager.MinorVersion));
176+
m_PatchVersion = serializedObject.FindProperty(nameof(NetworkManager.PatchVersion));
177+
#endif
164178

165179
m_RpcHashSizeProperty = m_NetworkConfigProperty.FindPropertyRelative("RpcHashSize");
166180
m_PrefabsList = m_NetworkConfigProperty
@@ -173,10 +187,18 @@ private void DisplayNetworkManagerProperties()
173187
if (!m_NetworkManager.IsServer && !m_NetworkManager.IsClient)
174188
{
175189
serializedObject.Update();
190+
176191
EditorGUILayout.PropertyField(m_RunInBackgroundProperty);
177192
EditorGUILayout.PropertyField(m_LogLevelProperty);
193+
EditorGUILayout.Space();
178194

195+
#if CMB_SERVICE_DEVELOPMENT
196+
EditorGUILayout.LabelField("Version:", EditorStyles.boldLabel);
197+
EditorGUILayout.PropertyField(m_MajorVersion);
198+
EditorGUILayout.PropertyField(m_MinorVersion);
199+
EditorGUILayout.PropertyField(m_PatchVersion);
179200
EditorGUILayout.Space();
201+
#endif
180202
EditorGUILayout.LabelField("Network Settings", EditorStyles.boldLabel);
181203
#if MULTIPLAYER_SERVICES_SDK_INSTALLED
182204
EditorGUILayout.PropertyField(m_NetworkTopologyProperty);

com.unity.netcode.gameobjects/Runtime/Components/NetworkTransform.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,8 +1463,6 @@ private bool ShouldSynchronizeHalfFloat(ulong targetClientId)
14631463
// For test logging purposes
14641464
internal NetworkTransformState SynchronizeState;
14651465

1466-
// DANGO-TODO: We will want to remove this when we migrate NetworkTransforms to a dedicated internal message
1467-
private const ushort k_NetworkTransformStateMagic = 0xf48d;
14681466
#endregion
14691467

14701468
#region ONSYNCHRONIZE
@@ -1494,14 +1492,6 @@ protected override void OnSynchronize<T>(ref BufferSerializer<T> serializer)
14941492

14951493
if (serializer.IsWriter)
14961494
{
1497-
// DANGO-TODO: This magic value is sent to the server in order to identify the network transform.
1498-
// The server discards it before forwarding synchronization data to other clients.
1499-
if (NetworkManager.DistributedAuthorityMode && NetworkManager.CMBServiceConnection)
1500-
{
1501-
var writer = serializer.GetFastBufferWriter();
1502-
writer.WriteValueSafe(k_NetworkTransformStateMagic);
1503-
}
1504-
15051495
SynchronizeState.IsTeleportingNextFrame = true;
15061496
var transformToCommit = transform;
15071497
// If we are using Half Float Precision, then we want to only synchronize the authority's m_HalfPositionState.FullPosition in order for

com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -564,16 +564,20 @@ private void SendConnectionRequest()
564564
var message = new ConnectionRequestMessage
565565
{
566566
CMBServiceConnection = NetworkManager.CMBServiceConnection,
567-
TickRate = NetworkManager.NetworkConfig.TickRate,
568-
EnableSceneManagement = NetworkManager.NetworkConfig.EnableSceneManagement,
569-
570567
// Since only a remote client will send a connection request, we should always force the rebuilding of the NetworkConfig hash value
571568
ConfigHash = NetworkManager.NetworkConfig.GetConfig(false),
572569
ShouldSendConnectionData = NetworkManager.NetworkConfig.ConnectionApproval,
573570
ConnectionData = NetworkManager.NetworkConfig.ConnectionData,
574571
MessageVersions = new NativeArray<MessageVersionData>(MessageManager.MessageHandlers.Length, Allocator.Temp)
575572
};
576573

574+
if (NetworkManager.CMBServiceConnection)
575+
{
576+
message.ClientConfig.NGOVersion = NetworkManager.GetNGOVersion();
577+
message.ClientConfig.TickRate = NetworkManager.NetworkConfig.TickRate;
578+
message.ClientConfig.EnableSceneManagement = NetworkManager.NetworkConfig.EnableSceneManagement;
579+
}
580+
577581
for (int index = 0; index < MessageManager.MessageHandlers.Length; index++)
578582
{
579583
if (MessageManager.MessageTypes[index] != null)

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

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using UnityEngine;
66
#if UNITY_EDITOR
77
using UnityEditor;
8+
using PackageInfo = UnityEditor.PackageManager.PackageInfo;
89
#endif
910
using UnityEngine.SceneManagement;
1011
using Debug = UnityEngine.Debug;
@@ -885,6 +886,30 @@ internal T Value
885886

886887
internal Override<ushort> PortOverride;
887888

889+
890+
[HideInInspector]
891+
[SerializeField]
892+
[Range(0, 255)]
893+
internal byte MajorVersion;
894+
[HideInInspector]
895+
[SerializeField]
896+
[Range(0, 255)]
897+
internal byte MinorVersion;
898+
[HideInInspector]
899+
[SerializeField]
900+
[Range(0, 255)]
901+
internal byte PatchVersion;
902+
903+
internal NGOVersion GetNGOVersion()
904+
{
905+
return new NGOVersion()
906+
{
907+
Major = MajorVersion,
908+
Minor = MinorVersion,
909+
Patch = PatchVersion
910+
};
911+
}
912+
888913
#if UNITY_EDITOR
889914
internal static INetworkManagerHelper NetworkManagerHelper;
890915

@@ -911,13 +936,39 @@ protected virtual void OnValidateComponent()
911936

912937
}
913938

939+
private PackageInfo GetPackageInfo(string packageName)
940+
{
941+
return AssetDatabase.FindAssets("package").Select(AssetDatabase.GUIDToAssetPath).Where(x => AssetDatabase.LoadAssetAtPath<TextAsset>(x) != null).Select(PackageInfo.FindForAssetPath).Where(x => x != null).First(x => x.name == packageName);
942+
}
943+
944+
private void SetPackageVersion()
945+
{
946+
var packageInfo = GetPackageInfo("com.unity.netcode.gameobjects");
947+
if (packageInfo != null)
948+
{
949+
var versionSplit = packageInfo.version.Split(".");
950+
if (versionSplit.Length == 3)
951+
{
952+
MajorVersion = byte.Parse(versionSplit[0]);
953+
MinorVersion = byte.Parse(versionSplit[1]);
954+
PatchVersion = byte.Parse(versionSplit[2]);
955+
}
956+
}
957+
}
958+
914959
internal void OnValidate()
915960
{
916961
if (NetworkConfig == null)
917962
{
918963
return; // May occur when the component is added
919964
}
920965

966+
#if !CMB_SERVICE_DEVELOPMENT
967+
SetPackageVersion();
968+
#else
969+
Debug.Log($"Major:({MajorVersion}) Minor({MinorVersion}) Patch({PatchVersion})");
970+
#endif
971+
921972
if (GetComponentInChildren<NetworkObject>() != null)
922973
{
923974
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs

Lines changed: 76 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,39 @@
33

44
namespace Unity.Netcode
55
{
6+
internal struct ServiceConfig : INetworkSerializable
7+
{
8+
public uint Version;
9+
public bool IsRestoredSession;
10+
public ulong CurrentSessionOwner;
11+
12+
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
13+
{
14+
if (serializer.IsWriter)
15+
{
16+
BytePacker.WriteValueBitPacked(serializer.GetFastBufferWriter(), Version);
17+
serializer.SerializeValue(ref IsRestoredSession);
18+
BytePacker.WriteValueBitPacked(serializer.GetFastBufferWriter(), CurrentSessionOwner);
19+
}
20+
else
21+
{
22+
ByteUnpacker.ReadValueBitPacked(serializer.GetFastBufferReader(), out Version);
23+
serializer.SerializeValue(ref IsRestoredSession);
24+
ByteUnpacker.ReadValueBitPacked(serializer.GetFastBufferReader(), out CurrentSessionOwner);
25+
}
26+
}
27+
}
28+
629
internal struct ConnectionApprovedMessage : INetworkMessage
730
{
31+
private const int k_AddCMBServiceConfig = 2;
832
private const int k_VersionAddClientIds = 1;
9-
public int Version => k_VersionAddClientIds;
33+
public int Version => k_AddCMBServiceConfig;
1034

1135
public ulong OwnerClientId;
1236
public int NetworkTick;
1337
// The cloud state service should set this if we are restoring a session
38+
public ServiceConfig ServiceConfig;
1439
public bool IsRestoredSession;
1540
public ulong CurrentSessionOwner;
1641
// Not serialized
@@ -25,6 +50,32 @@ internal struct ConnectionApprovedMessage : INetworkMessage
2550

2651
public NativeArray<ulong> ConnectedClientIds;
2752

53+
private int m_ReceiveMessageVersion;
54+
55+
private ulong GetSessionOwner()
56+
{
57+
if (m_ReceiveMessageVersion >= k_AddCMBServiceConfig)
58+
{
59+
return ServiceConfig.CurrentSessionOwner;
60+
}
61+
else
62+
{
63+
return CurrentSessionOwner;
64+
}
65+
}
66+
67+
private bool GetIsSessionRestor()
68+
{
69+
if (m_ReceiveMessageVersion >= k_AddCMBServiceConfig)
70+
{
71+
return ServiceConfig.IsRestoredSession;
72+
}
73+
else
74+
{
75+
return IsRestoredSession;
76+
}
77+
}
78+
2879
public void Serialize(FastBufferWriter writer, int targetVersion)
2980
{
3081
// ============================================================
@@ -45,8 +96,17 @@ public void Serialize(FastBufferWriter writer, int targetVersion)
4596
BytePacker.WriteValueBitPacked(writer, NetworkTick);
4697
if (IsDistributedAuthority)
4798
{
48-
writer.WriteValueSafe(IsRestoredSession);
49-
BytePacker.WriteValueBitPacked(writer, CurrentSessionOwner);
99+
if (targetVersion >= k_AddCMBServiceConfig)
100+
{
101+
ServiceConfig.IsRestoredSession = false;
102+
ServiceConfig.CurrentSessionOwner = CurrentSessionOwner;
103+
writer.WriteNetworkSerializable(ServiceConfig);
104+
}
105+
else
106+
{
107+
writer.WriteValueSafe(IsRestoredSession);
108+
BytePacker.WriteValueBitPacked(writer, CurrentSessionOwner);
109+
}
50110
}
51111

52112
if (targetVersion >= k_VersionAddClientIds)
@@ -122,13 +182,20 @@ public bool Deserialize(FastBufferReader reader, ref NetworkContext context, int
122182
// ============================================================
123183
// END FORBIDDEN SEGMENT
124184
// ============================================================
125-
185+
m_ReceiveMessageVersion = receivedMessageVersion;
126186
ByteUnpacker.ReadValueBitPacked(reader, out OwnerClientId);
127187
ByteUnpacker.ReadValueBitPacked(reader, out NetworkTick);
128188
if (networkManager.DistributedAuthorityMode)
129189
{
130-
reader.ReadValueSafe(out IsRestoredSession);
131-
ByteUnpacker.ReadValueBitPacked(reader, out CurrentSessionOwner);
190+
if (receivedMessageVersion >= k_AddCMBServiceConfig)
191+
{
192+
reader.ReadNetworkSerializable(out ServiceConfig);
193+
}
194+
else
195+
{
196+
reader.ReadValueSafe(out IsRestoredSession);
197+
ByteUnpacker.ReadValueBitPacked(reader, out CurrentSessionOwner);
198+
}
132199
}
133200

134201
if (receivedMessageVersion >= k_VersionAddClientIds)
@@ -157,7 +224,7 @@ public void Handle(ref NetworkContext context)
157224

158225
if (networkManager.DistributedAuthorityMode)
159226
{
160-
networkManager.SetSessionOwner(CurrentSessionOwner);
227+
networkManager.SetSessionOwner(GetSessionOwner());
161228
if (networkManager.LocalClient.IsSessionOwner && networkManager.NetworkConfig.EnableSceneManagement)
162229
{
163230
networkManager.SceneManager.InitializeScenesLoaded();
@@ -233,9 +300,9 @@ public void Handle(ref NetworkContext context)
233300
// Mark the client being connected
234301
networkManager.IsConnectedClient = true;
235302

236-
networkManager.SceneManager.IsRestoringSession = IsRestoredSession;
303+
networkManager.SceneManager.IsRestoringSession = GetIsSessionRestor();
237304

238-
if (!IsRestoredSession)
305+
if (!networkManager.SceneManager.IsRestoringSession)
239306
{
240307
// Synchronize the service with the initial session owner's loaded scenes and spawned objects
241308
networkManager.SceneManager.SynchronizeNetworkObjects(NetworkManager.ServerClientId);

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionRequestMessage.cs

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,56 @@
22

33
namespace Unity.Netcode
44
{
5-
internal struct ConnectionRequestMessage : INetworkMessage
5+
internal struct NGOVersion : INetworkSerializable
66
{
7-
public int Version => 0;
7+
public byte Major;
8+
public byte Minor;
9+
public byte Patch;
810

9-
public ulong ConfigHash;
11+
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
12+
{
13+
serializer.SerializeValue(ref Major);
14+
serializer.SerializeValue(ref Minor);
15+
serializer.SerializeValue(ref Patch);
16+
}
17+
}
1018

11-
public bool CMBServiceConnection;
19+
internal struct ClientConfig : INetworkSerializable
20+
{
21+
public NGOVersion NGOVersion;
1222
public uint TickRate;
1323
public bool EnableSceneManagement;
1424

25+
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
26+
{
27+
serializer.SerializeNetworkSerializable(ref NGOVersion);
28+
if (serializer.IsWriter)
29+
{
30+
var writer = serializer.GetFastBufferWriter();
31+
writer.WriteValueSafe(TickRate);
32+
writer.WriteValueSafe(EnableSceneManagement);
33+
}
34+
else
35+
{
36+
var reader = serializer.GetFastBufferReader();
37+
reader.ReadValueSafe(out TickRate);
38+
reader.ReadValueSafe(out EnableSceneManagement);
39+
}
40+
}
41+
}
42+
43+
internal struct ConnectionRequestMessage : INetworkMessage
44+
{
45+
// This version update is unidirectional (client to service) and version
46+
// handling occurs on the service side. This serialized data is never sent
47+
// to a host or server.
48+
private const int k_SendClientConfigToService = 1;
49+
public int Version => k_SendClientConfigToService;
50+
51+
public ulong ConfigHash;
52+
public bool CMBServiceConnection;
53+
public ClientConfig ClientConfig;
54+
1555
public byte[] ConnectionData;
1656

1757
public bool ShouldSendConnectionData;
@@ -36,8 +76,7 @@ public void Serialize(FastBufferWriter writer, int targetVersion)
3676

3777
if (CMBServiceConnection)
3878
{
39-
writer.WriteValueSafe(TickRate);
40-
writer.WriteValueSafe(EnableSceneManagement);
79+
writer.WriteNetworkSerializable(ClientConfig);
4180
}
4281

4382
if (ShouldSendConnectionData)

0 commit comments

Comments
 (0)