Skip to content

Commit 9dc01b0

Browse files
authored
refactor!: CustomMessageManager is no longer static (#737)
BREAKING CHANGE: Access CustomMessageManager with NetworkManager.Singleton.CustomMessageManager
1 parent 54a4593 commit 9dc01b0

File tree

5 files changed

+80
-21
lines changed

5 files changed

+80
-21
lines changed

com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem, IProfilableTr
9595
/// </summary>
9696
public NetworkSpawnManager SpawnManager { get; private set; }
9797

98+
public CustomMessagingManager CustomMessagingManager { get; private set; }
99+
98100
internal BufferManager BufferManager { get; private set; }
99101

100102
// Has to have setter for tests
@@ -207,7 +209,7 @@ public ulong LocalClientId
207209

208210
#if UNITY_EDITOR
209211
internal static bool IsTestRun = false;
210-
212+
211213
private void OnValidate()
212214
{
213215
if (NetworkConfig == null)
@@ -298,6 +300,8 @@ private void Init(bool server)
298300
// Create spawn manager instance
299301
SpawnManager = new NetworkSpawnManager(this);
300302

303+
CustomMessagingManager = new CustomMessagingManager(this);
304+
301305
BufferManager = new BufferManager();
302306

303307
if (MessageHandler == null)
@@ -700,6 +704,11 @@ public void Shutdown()
700704
MessageHandler = null;
701705
}
702706

707+
if (CustomMessagingManager != null)
708+
{
709+
CustomMessagingManager = null;
710+
}
711+
703712
//The Transport is set during Init time, thus it is possible for the Transport to be null
704713
NetworkConfig?.NetworkTransport?.Shutdown();
705714
}

com.unity.multiplayer.mlapi/Runtime/Messaging/CustomMessageManager.cs

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,15 @@ namespace MLAPI.Messaging
1414
/// The manager class to manage custom messages, note that this is different from the NetworkManager custom messages.
1515
/// These are named and are much easier to use.
1616
/// </summary>
17-
public static class CustomMessagingManager
17+
public class CustomMessagingManager
1818
{
19+
private NetworkManager m_NetworkManager { get; }
20+
21+
internal CustomMessagingManager(NetworkManager networkManager)
22+
{
23+
m_NetworkManager = networkManager;
24+
}
25+
1926
#region Unnamed
2027

2128
/// <summary>
@@ -28,19 +35,19 @@ public static class CustomMessagingManager
2835
/// <summary>
2936
/// Event invoked when unnamed messages arrive
3037
/// </summary>
31-
public static event UnnamedMessageDelegate OnUnnamedMessage;
38+
public event UnnamedMessageDelegate OnUnnamedMessage;
3239

33-
internal static void InvokeUnnamedMessage(ulong clientId, Stream stream) => OnUnnamedMessage?.Invoke(clientId, stream);
40+
internal void InvokeUnnamedMessage(ulong clientId, Stream stream) => OnUnnamedMessage?.Invoke(clientId, stream);
3441

3542
/// <summary>
3643
/// Sends unnamed message to a list of clients
3744
/// </summary>
3845
/// <param name="clientIds">The clients to send to, sends to everyone if null</param>
3946
/// <param name="buffer">The message stream containing the data</param>
4047
/// <param name="networkChannel">The channel to send the data on</param>
41-
public static void SendUnnamedMessage(List<ulong> clientIds, NetworkBuffer buffer, NetworkChannel networkChannel = NetworkChannel.Internal)
48+
public void SendUnnamedMessage(List<ulong> clientIds, NetworkBuffer buffer, NetworkChannel networkChannel = NetworkChannel.Internal)
4249
{
43-
if (!NetworkManager.Singleton.IsServer)
50+
if (!m_NetworkManager.IsServer)
4451
{
4552
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
4653
{
@@ -60,7 +67,7 @@ public static void SendUnnamedMessage(List<ulong> clientIds, NetworkBuffer buffe
6067
/// <param name="clientId">The client to send the message to</param>
6168
/// <param name="buffer">The message stream containing the data</param>
6269
/// <param name="networkChannel">The channel tos end the data on</param>
63-
public static void SendUnnamedMessage(ulong clientId, NetworkBuffer buffer, NetworkChannel networkChannel = NetworkChannel.Internal)
70+
public void SendUnnamedMessage(ulong clientId, NetworkBuffer buffer, NetworkChannel networkChannel = NetworkChannel.Internal)
6471
{
6572
InternalMessageSender.Send(clientId, NetworkConstants.UNNAMED_MESSAGE, networkChannel, buffer);
6673
PerformanceDataManager.Increment(ProfilerConstants.UnnamedMessageSent);
@@ -75,12 +82,12 @@ public static void SendUnnamedMessage(ulong clientId, NetworkBuffer buffer, Netw
7582
/// </summary>
7683
public delegate void HandleNamedMessageDelegate(ulong sender, Stream payload);
7784

78-
private static Dictionary<ulong, HandleNamedMessageDelegate> s_NamedMessageHandlers32 = new Dictionary<ulong, HandleNamedMessageDelegate>();
79-
private static Dictionary<ulong, HandleNamedMessageDelegate> s_NamedMessageHandlers64 = new Dictionary<ulong, HandleNamedMessageDelegate>();
85+
private Dictionary<ulong, HandleNamedMessageDelegate> s_NamedMessageHandlers32 = new Dictionary<ulong, HandleNamedMessageDelegate>();
86+
private Dictionary<ulong, HandleNamedMessageDelegate> s_NamedMessageHandlers64 = new Dictionary<ulong, HandleNamedMessageDelegate>();
8087

81-
internal static void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
88+
internal void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
8289
{
83-
if (NetworkManager.Singleton == null)
90+
if (m_NetworkManager == null)
8491
{
8592
// We dont know what size to use. Try every (more collision prone)
8693
if (s_NamedMessageHandlers32.ContainsKey(hash))
@@ -96,7 +103,7 @@ internal static void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
96103
else
97104
{
98105
// Only check the right size.
99-
switch (NetworkManager.Singleton.NetworkConfig.RpcHashSize)
106+
switch (m_NetworkManager.NetworkConfig.RpcHashSize)
100107
{
101108
case HashSize.VarIntFourBytes:
102109
if (s_NamedMessageHandlers32.ContainsKey(hash))
@@ -119,7 +126,7 @@ internal static void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
119126
/// </summary>
120127
/// <param name="name">Name of the message.</param>
121128
/// <param name="callback">The callback to run when a named message is received.</param>
122-
public static void RegisterNamedMessageHandler(string name, HandleNamedMessageDelegate callback)
129+
public void RegisterNamedMessageHandler(string name, HandleNamedMessageDelegate callback)
123130
{
124131
s_NamedMessageHandlers32[XXHash.Hash32(name)] = callback;
125132
s_NamedMessageHandlers64[XXHash.Hash64(name)] = callback;
@@ -129,7 +136,7 @@ public static void RegisterNamedMessageHandler(string name, HandleNamedMessageDe
129136
/// Unregisters a named message handler.
130137
/// </summary>
131138
/// <param name="name">The name of the message.</param>
132-
public static void UnregisterNamedMessageHandler(string name)
139+
public void UnregisterNamedMessageHandler(string name)
133140
{
134141
s_NamedMessageHandlers32.Remove(XXHash.Hash32(name));
135142
s_NamedMessageHandlers64.Remove(XXHash.Hash64(name));
@@ -142,10 +149,10 @@ public static void UnregisterNamedMessageHandler(string name)
142149
/// <param name="clientId">The client to send the message to</param>
143150
/// <param name="stream">The message stream containing the data</param>
144151
/// <param name="networkChannel">The channel to send the data on</param>
145-
public static void SendNamedMessage(string name, ulong clientId, Stream stream, NetworkChannel networkChannel = NetworkChannel.Internal)
152+
public void SendNamedMessage(string name, ulong clientId, Stream stream, NetworkChannel networkChannel = NetworkChannel.Internal)
146153
{
147154
ulong hash = 0;
148-
switch (NetworkManager.Singleton.NetworkConfig.RpcHashSize)
155+
switch (m_NetworkManager.NetworkConfig.RpcHashSize)
149156
{
150157
case HashSize.VarIntFourBytes:
151158
hash = XXHash.Hash32(name);
@@ -174,10 +181,10 @@ public static void SendNamedMessage(string name, ulong clientId, Stream stream,
174181
/// <param name="clientIds">The clients to send to, sends to everyone if null</param>
175182
/// <param name="stream">The message stream containing the data</param>
176183
/// <param name="networkChannel">The channel to send the data on</param>
177-
public static void SendNamedMessage(string name, List<ulong> clientIds, Stream stream, NetworkChannel networkChannel = NetworkChannel.Internal)
184+
public void SendNamedMessage(string name, List<ulong> clientIds, Stream stream, NetworkChannel networkChannel = NetworkChannel.Internal)
178185
{
179186
ulong hash = 0;
180-
switch (NetworkManager.Singleton.NetworkConfig.RpcHashSize)
187+
switch (m_NetworkManager.NetworkConfig.RpcHashSize)
181188
{
182189
case HashSize.VarIntFourBytes:
183190
hash = XXHash.Hash32(name);
@@ -194,7 +201,7 @@ public static void SendNamedMessage(string name, List<ulong> clientIds, Stream s
194201

195202
messageBuffer.CopyFrom(stream);
196203

197-
if (!NetworkManager.Singleton.IsServer)
204+
if (!m_NetworkManager.IsServer)
198205
{
199206
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
200207
{

com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ public void HandleUnnamedMessage(ulong clientId, Stream stream)
557557
#if DEVELOPMENT_BUILD || UNITY_EDITOR
558558
s_HandleUnnamedMessage.Begin();
559559
#endif
560-
CustomMessagingManager.InvokeUnnamedMessage(clientId, stream);
560+
NetworkManager.CustomMessagingManager.InvokeUnnamedMessage(clientId, stream);
561561
#if DEVELOPMENT_BUILD || UNITY_EDITOR
562562
s_HandleUnnamedMessage.End();
563563
#endif
@@ -574,7 +574,7 @@ public void HandleNamedMessage(ulong clientId, Stream stream)
574574
{
575575
ulong hash = reader.ReadUInt64Packed();
576576

577-
CustomMessagingManager.InvokeNamedMessage(hash, clientId, stream);
577+
NetworkManager.CustomMessagingManager.InvokeNamedMessage(hash, clientId, stream);
578578
}
579579
#if DEVELOPMENT_BUILD || UNITY_EDITOR
580580
s_HandleNamedMessage.End();
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Collections.Generic;
2+
using MLAPI.Configuration;
3+
using MLAPI.Messaging;
4+
using NUnit.Framework;
5+
using UnityEngine;
6+
using UnityEngine.SceneManagement;
7+
8+
namespace MLAPI.EditorTests
9+
{
10+
public class NetworkManagerCustomMessageManagerTests
11+
{
12+
[Test]
13+
public void CustomMessageManagerAssigned()
14+
{
15+
var gameObject = new GameObject(nameof(CustomMessageManagerAssigned));
16+
var networkManager = gameObject.AddComponent<NetworkManager>();
17+
var transport = gameObject.AddComponent<DummyTransport>();
18+
19+
// MLAPI sets this in validate
20+
networkManager.NetworkConfig = new NetworkConfig()
21+
{
22+
// Set the current scene to prevent unexpected log messages which would trigger a failure
23+
RegisteredScenes = new List<string>() {SceneManager.GetActiveScene().name}
24+
};
25+
26+
// Set dummy transport that does nothing
27+
networkManager.NetworkConfig.NetworkTransport = transport;
28+
29+
CustomMessagingManager preManager = networkManager.CustomMessagingManager;
30+
31+
// Start server to cause init
32+
networkManager.StartServer();
33+
34+
Debug.Assert(preManager == null);
35+
Debug.Assert(networkManager.CustomMessagingManager != null);
36+
37+
Object.DestroyImmediate(gameObject);
38+
}
39+
}
40+
}

com.unity.multiplayer.mlapi/Tests/Editor/NetworkManagerCustomMessageManagerTests.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)