Skip to content

Commit 96b1eaf

Browse files
committed
Fixed sorting issues in NetworkConfig
1 parent 7f4210f commit 96b1eaf

File tree

2 files changed

+52
-28
lines changed

2 files changed

+52
-28
lines changed

MLAPI/Data/NetworkConfig.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using UnityEngine;
66
using MLAPI.Data.Transports;
77
using MLAPI.MonoBehaviours.Core;
8+
using System.Linq;
89

910
namespace MLAPI.Data
1011
{
@@ -154,6 +155,13 @@ public class NetworkConfig
154155
/// </summary>
155156
public AttributeMessageMode AttributeMessageMode = AttributeMessageMode.Disabled;
156157

158+
private void Sort()
159+
{
160+
MessageTypes = MessageTypes.OrderBy(x => x.Name).ToList();
161+
Channels = Channels.OrderBy(x => x.Name).ToList();
162+
NetworkedPrefabs = NetworkedPrefabs.OrderBy(x => x.name).ToList();
163+
}
164+
157165
/// <summary>
158166
/// Returns a base64 encoded version of the config
159167
/// </summary>
@@ -316,6 +324,8 @@ public ulong GetConfig(bool cache = true)
316324
if (ConfigHash != null && cache)
317325
return ConfigHash.Value;
318326

327+
Sort();
328+
319329
using (BitWriter writer = BitWriter.Get())
320330
{
321331
writer.WriteUShort(ProtocolVersion);

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ private void OnValidate()
121121
if (NetworkConfig == null)
122122
return; //May occur when the component is added
123123

124+
//Sort lists
125+
if (NetworkConfig.MessageTypes != null)
126+
NetworkConfig.MessageTypes = NetworkConfig.MessageTypes.OrderBy(x => x.Name).ToList();
127+
if (NetworkConfig.Channels != null)
128+
NetworkConfig.Channels = NetworkConfig.Channels.OrderBy(x => x.Name).ToList();
129+
if (NetworkConfig.NetworkedPrefabs != null)
130+
NetworkConfig.NetworkedPrefabs = NetworkConfig.NetworkedPrefabs.OrderBy(x => x.name).ToList();
131+
124132
if (NetworkConfig.EnableSceneSwitching && !NetworkConfig.RegisteredScenes.Contains(SceneManager.GetActiveScene().name))
125133
{
126134
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("The active scene is not registered as a networked scene. The MLAPI has added it");
@@ -216,11 +224,11 @@ private object Init(bool server)
216224

217225
object settings = NetworkConfig.NetworkTransport.GetSettings(); //Gets a new "settings" object for the transport currently used.
218226

219-
if(NetworkConfig.HandleObjectSpawning)
227+
if (NetworkConfig.HandleObjectSpawning)
220228
{
221229
NetworkConfig.NetworkPrefabIds = new Dictionary<string, int>();
222230
NetworkConfig.NetworkPrefabNames = new Dictionary<int, string>();
223-
NetworkConfig.NetworkedPrefabs.OrderBy(x => x.name);
231+
NetworkConfig.NetworkedPrefabs = NetworkConfig.NetworkedPrefabs.OrderBy(x => x.name).ToList();
224232
HashSet<string> networkedPrefabName = new HashSet<string>();
225233
for (int i = 0; i < NetworkConfig.NetworkedPrefabs.Count; i++)
226234
{
@@ -304,6 +312,34 @@ private object Init(bool server)
304312
MessageManager.reverseChannels.Add(channelId, internalChannels[i].Name);
305313
}
306314

315+
if (NetworkConfig.EnableSceneSwitching)
316+
{
317+
for (int i = 0; i < NetworkConfig.RegisteredScenes.Count; i++)
318+
{
319+
NetworkSceneManager.registeredSceneNames.Add(NetworkConfig.RegisteredScenes[i]);
320+
NetworkSceneManager.sceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]);
321+
NetworkSceneManager.sceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i);
322+
}
323+
324+
NetworkSceneManager.SetCurrentSceneIndex();
325+
}
326+
327+
//Register user channels
328+
NetworkConfig.Channels = NetworkConfig.Channels.OrderBy(x => x.Name).ToList();
329+
for (int i = 0; i < NetworkConfig.Channels.Count; i++)
330+
{
331+
if(channelNames.Contains(NetworkConfig.Channels[i].Name))
332+
{
333+
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("Duplicate channel name: " + NetworkConfig.Channels[i].Name);
334+
continue;
335+
}
336+
int channelId = NetworkConfig.NetworkTransport.AddChannel(NetworkConfig.Channels[i].Type, settings);
337+
MessageManager.channels.Add(NetworkConfig.Channels[i].Name, channelId);
338+
channelNames.Add(NetworkConfig.Channels[i].Name);
339+
MessageManager.reverseChannels.Add(channelId, NetworkConfig.Channels[i].Name);
340+
}
341+
342+
//Add internal messagetypes directly
307343
MessageManager.messageTypes.Add("MLAPI_CONNECTION_REQUEST", 0);
308344
MessageManager.messageTypes.Add("MLAPI_CONNECTION_APPROVED", 1);
309345
MessageManager.messageTypes.Add("MLAPI_ADD_OBJECT", 2);
@@ -321,6 +357,7 @@ private object Init(bool server)
321357
MessageManager.messageTypes.Add("MLAPI_TARGET", 14);
322358
MessageManager.messageTypes.Add("MLAPI_SET_VISIBILITY", 15);
323359

360+
//These are message types concidered to be user level since they belong to prototype components
324361
List<MessageType> messageTypes = new List<MessageType>(NetworkConfig.MessageTypes)
325362
{
326363
new MessageType()
@@ -360,33 +397,10 @@ private object Init(bool server)
360397
}
361398
};
362399

363-
if (NetworkConfig.EnableSceneSwitching)
364-
{
365-
for (int i = 0; i < NetworkConfig.RegisteredScenes.Count; i++)
366-
{
367-
NetworkSceneManager.registeredSceneNames.Add(NetworkConfig.RegisteredScenes[i]);
368-
NetworkSceneManager.sceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]);
369-
NetworkSceneManager.sceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i);
370-
}
371-
372-
NetworkSceneManager.SetCurrentSceneIndex();
373-
}
374-
375-
//Register user channels
376-
for (int i = 0; i < NetworkConfig.Channels.Count; i++)
377-
{
378-
if(channelNames.Contains(NetworkConfig.Channels[i].Name))
379-
{
380-
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("Duplicate channel name: " + NetworkConfig.Channels[i].Name);
381-
continue;
382-
}
383-
int channelId = NetworkConfig.NetworkTransport.AddChannel(NetworkConfig.Channels[i].Type, settings);
384-
MessageManager.channels.Add(NetworkConfig.Channels[i].Name, channelId);
385-
channelNames.Add(NetworkConfig.Channels[i].Name);
386-
MessageManager.reverseChannels.Add(channelId, NetworkConfig.Channels[i].Name);
387-
}
400+
//Sort user messages
401+
messageTypes = messageTypes.OrderBy(x => x.Name).ToList();
388402

389-
//0-32 are reserved for MLAPI messages
403+
//0-32 are reserved for MLAPI messages
390404
ushort messageId = 32;
391405
for (ushort i = 0; i < messageTypes.Count; i++)
392406
{

0 commit comments

Comments
 (0)