Skip to content

Commit 7ead4e6

Browse files
committed
Merge branch 'master' of https://github.com/MidLevel/MLAPI
2 parents 3dd1985 + 3013cab commit 7ead4e6

File tree

3 files changed

+67
-10
lines changed

3 files changed

+67
-10
lines changed

MLAPI/Core/NetworkingManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,8 @@ private void OnEnable()
591591
else
592592
{
593593
Singleton = this;
594-
if (OnSingletonReady != null) OnSingletonReady();
594+
if (OnSingletonReady != null)
595+
OnSingletonReady();
595596
if (DontDestroy)
596597
DontDestroyOnLoad(gameObject);
597598
if (RunInBackground)

MLAPI/Messaging/CustomMessageManager.cs

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using MLAPI.Security;
77
using MLAPI.Serialization;
88
using MLAPI.Serialization.Pooled;
9+
using MLAPI.Hashing;
910

1011
namespace MLAPI.Messaging
1112
{
@@ -83,19 +84,60 @@ public static void SendUnnamedMessage(ulong clientId, BitStream stream, string c
8384
}
8485
#endregion
8586
#region Named
86-
8787
/// <summary>
8888
/// Delegate used to handle named messages
8989
/// </summary>
9090
public delegate void HandleNamedMessageDelegate(ulong sender, Stream payload);
9191

92-
private static readonly Dictionary<ulong, HandleNamedMessageDelegate> namedMessageHandlers = new Dictionary<ulong, HandleNamedMessageDelegate>();
92+
private static readonly Dictionary<ulong, HandleNamedMessageDelegate> namedMessageHandlers16 = new Dictionary<ulong, HandleNamedMessageDelegate>();
93+
private static readonly Dictionary<ulong, HandleNamedMessageDelegate> namedMessageHandlers32 = new Dictionary<ulong, HandleNamedMessageDelegate>();
94+
private static readonly Dictionary<ulong, HandleNamedMessageDelegate> namedMessageHandlers64 = new Dictionary<ulong, HandleNamedMessageDelegate>();
95+
9396

9497
internal static void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
9598
{
96-
if (namedMessageHandlers.ContainsKey(hash))
99+
if (NetworkingManager.Singleton == null)
97100
{
98-
namedMessageHandlers[hash](sender, stream);
101+
// We dont know what size to use. Try every (more collision prone)
102+
if (namedMessageHandlers16.ContainsKey(hash))
103+
{
104+
namedMessageHandlers16[hash](sender, stream);
105+
}
106+
107+
if (namedMessageHandlers32.ContainsKey(hash))
108+
{
109+
namedMessageHandlers32[hash](sender, stream);
110+
}
111+
112+
if (namedMessageHandlers64.ContainsKey(hash))
113+
{
114+
namedMessageHandlers64[hash](sender, stream);
115+
}
116+
}
117+
else
118+
{
119+
// Only check the right size.
120+
if (NetworkingManager.Singleton.NetworkConfig.RpcHashSize == HashSize.VarIntTwoBytes)
121+
{
122+
if (namedMessageHandlers16.ContainsKey(hash))
123+
{
124+
namedMessageHandlers16[hash](sender, stream);
125+
}
126+
}
127+
else if (NetworkingManager.Singleton.NetworkConfig.RpcHashSize == HashSize.VarIntFourBytes)
128+
{
129+
if (namedMessageHandlers32.ContainsKey(hash))
130+
{
131+
namedMessageHandlers32[hash](sender, stream);
132+
}
133+
}
134+
else if (NetworkingManager.Singleton.NetworkConfig.RpcHashSize == HashSize.VarIntEightBytes)
135+
{
136+
if (namedMessageHandlers64.ContainsKey(hash))
137+
{
138+
namedMessageHandlers64[hash](sender, stream);
139+
}
140+
}
99141
}
100142
}
101143

@@ -106,9 +148,20 @@ internal static void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
106148
/// <param name="callback">The callback to run when a named message is received.</param>
107149
public static void RegisterNamedMessageHandler(string name, HandleNamedMessageDelegate callback)
108150
{
109-
ulong hash = NetworkedBehaviour.HashMethodName(name);
151+
namedMessageHandlers16[name.GetStableHash16()] = callback;
152+
namedMessageHandlers32[name.GetStableHash32()] = callback;
153+
namedMessageHandlers64[name.GetStableHash64()] = callback;
154+
}
110155

111-
namedMessageHandlers[hash] = callback;
156+
/// <summary>
157+
/// Unregisters a named message handler.
158+
/// </summary>
159+
/// <param name="name">The name of the message.</param>
160+
public static void UnregisterNamedMessageHandler(string name)
161+
{
162+
namedMessageHandlers16.Remove(name.GetStableHash16());
163+
namedMessageHandlers32.Remove(name.GetStableHash32());
164+
namedMessageHandlers64.Remove(name.GetStableHash64());
112165
}
113166

114167
/// <summary>

MLAPI/Spawning/SpawnManager.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,13 @@ internal static void ChangeOwnership(NetworkedObject netObject, ulong clientId)
212212
throw new SpawnStateException("Object is not spawned");
213213
}
214214

215-
for (int i = NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.Count - 1; i > -1; i--)
215+
if (NetworkingManager.Singleton.ConnectedClients.ContainsKey(netObject.OwnerClientId))
216216
{
217-
if (NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects[i] == netObject)
218-
NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAt(i);
217+
for (int i = NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.Count - 1; i >= 0; i--)
218+
{
219+
if (NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects[i] == netObject)
220+
NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAt(i);
221+
}
219222
}
220223

221224
NetworkingManager.Singleton.ConnectedClients[clientId].OwnedObjects.Add(netObject);

0 commit comments

Comments
 (0)