Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,7 @@ private void NetworkVariableUpdate(ulong clientId)

if (writtenAny)
{
InternalMessageSender.Send(clientId, NetworkConstants.NETWORK_VARIABLE_DELTA, m_ChannelsForNetworkVariableGroups[j], buffer);
NetworkManager.MessageSender.Send(clientId, NetworkConstants.NETWORK_VARIABLE_DELTA, m_ChannelsForNetworkVariableGroups[j], buffer);
}
}
}
Expand Down
18 changes: 14 additions & 4 deletions com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
using MLAPI.Transports.Tasks;
using MLAPI.Messaging.Buffering;
using Unity.Profiling;
using UnityEditor.VersionControl;

namespace MLAPI
{
Expand Down Expand Up @@ -103,6 +104,8 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem, IProfilableTr
// Has to have setter for tests
internal IInternalMessageHandler MessageHandler { get; set; }

internal InternalMessageSender MessageSender { get; set; }

/// <summary>
/// Gets the networkId of the server
/// </summary>
Expand Down Expand Up @@ -313,6 +316,8 @@ private void Init(bool server)
MessageHandler = new InternalMessageHandler(this);
}

MessageSender = new InternalMessageSender(this);

if (NetworkConfig.NetworkTransport == null)
{
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
Expand Down Expand Up @@ -707,6 +712,11 @@ public void Shutdown()
MessageHandler = null;
}

if (MessageSender != null)
{
MessageSender = null;
}

if (CustomMessagingManager != null)
{
CustomMessagingManager = null;
Expand Down Expand Up @@ -870,7 +880,7 @@ private void SendConnectionRequest()
writer.WriteByteArray(NetworkConfig.ConnectionData);
}

InternalMessageSender.Send(ServerClientId, NetworkConstants.CONNECTION_REQUEST, NetworkChannel.Internal, buffer);
MessageSender.Send(ServerClientId, NetworkConstants.CONNECTION_REQUEST, NetworkChannel.Internal, buffer);
}
}

Expand Down Expand Up @@ -1438,7 +1448,7 @@ private void SyncTime()
using (var writer = PooledNetworkWriter.Get(buffer))
{
writer.WriteSinglePacked(Time.realtimeSinceStartup);
InternalMessageSender.Send(NetworkConstants.TIME_SYNC, NetworkChannel.SyncChannel, buffer);
MessageSender.Send(NetworkConstants.TIME_SYNC, NetworkChannel.SyncChannel, buffer);
}
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_SyncTime.End();
Expand Down Expand Up @@ -1552,7 +1562,7 @@ internal void HandleApproval(ulong ownerClientId, bool createPlayerObject, uint?
}
}

InternalMessageSender.Send(ownerClientId, NetworkConstants.CONNECTION_APPROVED, NetworkChannel.Internal, buffer);
MessageSender.Send(ownerClientId, NetworkConstants.CONNECTION_APPROVED, NetworkChannel.Internal, buffer);
}
}

Expand Down Expand Up @@ -1611,7 +1621,7 @@ internal void HandleApproval(ulong ownerClientId, bool createPlayerObject, uint?
ConnectedClients[ownerClientId].PlayerObject.WriteNetworkVariableData(buffer, clientPair.Key);
}

InternalMessageSender.Send(clientPair.Key, NetworkConstants.ADD_OBJECT, NetworkChannel.Internal, buffer);
MessageSender.Send(clientPair.Key, NetworkConstants.ADD_OBJECT, NetworkChannel.Internal, buffer);
}
}
}
Expand Down
31 changes: 28 additions & 3 deletions com.unity.multiplayer.mlapi/Runtime/Core/NetworkObject.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
Expand Down Expand Up @@ -218,6 +219,13 @@ public static void NetworkShow(List<NetworkObject> networkObjects, ulong clientI
throw new NotServerException("Only server can change visibility");
}

if (networkObjects == null || networkObjects.Count == 0)
{
throw new ArgumentNullException("At least one NetworkObject has to be provided");
}

NetworkManager networkManager = networkObjects[0].NetworkManager;

// Do the safety loop first to prevent putting the MLAPI in an invalid state.
for (int i = 0; i < networkObjects.Count; i++)
{
Expand All @@ -230,6 +238,11 @@ public static void NetworkShow(List<NetworkObject> networkObjects, ulong clientI
{
throw new VisibilityChangeException($"{nameof(NetworkObject)} with NetworkId: {networkObjects[i].NetworkObjectId} is already visible");
}

if (networkObjects[i].NetworkManager != networkManager)
{
throw new ArgumentNullException("All " + nameof(NetworkObject) + "s must belong to the same " + nameof(NetworkManager));
}
}

using (var buffer = PooledNetworkBuffer.Get())
Expand All @@ -245,7 +258,7 @@ public static void NetworkShow(List<NetworkObject> networkObjects, ulong clientI
NetworkManager.Singleton.SpawnManager.WriteSpawnCallForObject(buffer, clientId, networkObjects[i], payload);
}

InternalMessageSender.Send(clientId, NetworkConstants.ADD_OBJECTS, NetworkChannel.Internal, buffer);
networkManager.MessageSender.Send(clientId, NetworkConstants.ADD_OBJECTS, NetworkChannel.Internal, buffer);
}
}

Expand Down Expand Up @@ -284,7 +297,7 @@ public void NetworkHide(ulong clientId)
{
writer.WriteUInt64Packed(NetworkObjectId);

InternalMessageSender.Send(clientId, NetworkConstants.DESTROY_OBJECT, NetworkChannel.Internal, buffer);
NetworkManager.MessageSender.Send(clientId, NetworkConstants.DESTROY_OBJECT, NetworkChannel.Internal, buffer);
}
}

Expand All @@ -305,6 +318,13 @@ public static void NetworkHide(List<NetworkObject> networkObjects, ulong clientI
throw new VisibilityChangeException("Cannot hide an object from the server");
}

if (networkObjects == null || networkObjects.Count == 0)
{
throw new ArgumentNullException("At least one NetworkObject has to be provided");
}

NetworkManager networkManager = networkObjects[0].NetworkManager;
Comment thread
NoelStephensUnity marked this conversation as resolved.

// Do the safety loop first to prevent putting the MLAPI in an invalid state.
for (int i = 0; i < networkObjects.Count; i++)
{
Expand All @@ -317,6 +337,11 @@ public static void NetworkHide(List<NetworkObject> networkObjects, ulong clientI
{
throw new VisibilityChangeException($"{nameof(NetworkObject)} with {nameof(NetworkObjectId)}: {networkObjects[i].NetworkObjectId} is already hidden");
}

if (networkObjects[i].NetworkManager != networkManager)
{
throw new ArgumentNullException("All " + nameof(NetworkObject) + "s must belong to the same " + nameof(NetworkManager));
}
}

using (var buffer = PooledNetworkBuffer.Get())
Expand All @@ -332,7 +357,7 @@ public static void NetworkHide(List<NetworkObject> networkObjects, ulong clientI
writer.WriteUInt64Packed(networkObjects[i].NetworkObjectId);
}

InternalMessageSender.Send(clientId, NetworkConstants.DESTROY_OBJECTS, NetworkChannel.Internal, buffer);
networkManager.MessageSender.Send(clientId, NetworkConstants.DESTROY_OBJECTS, NetworkChannel.Internal, buffer);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ private static void LogServer(string message, LogType logType)
writer.WriteByte((byte)logType);
writer.WriteStringPacked(message);

InternalMessageSender.Send(NetworkManager.Singleton.ServerClientId, NetworkConstants.SERVER_LOG, NetworkChannel.Internal, buffer);
NetworkManager.Singleton.MessageSender.Send(NetworkManager.Singleton.ServerClientId, NetworkConstants.SERVER_LOG, NetworkChannel.Internal, buffer);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public void SendUnnamedMessage(List<ulong> clientIds, NetworkBuffer buffer, Netw
return;
}

InternalMessageSender.Send(NetworkConstants.UNNAMED_MESSAGE, networkChannel, clientIds, buffer);
m_NetworkManager.MessageSender.Send(NetworkConstants.UNNAMED_MESSAGE, networkChannel, clientIds, buffer);
PerformanceDataManager.Increment(ProfilerConstants.UnnamedMessageSent);
}

Expand All @@ -69,7 +69,7 @@ public void SendUnnamedMessage(List<ulong> clientIds, NetworkBuffer buffer, Netw
/// <param name="networkChannel">The channel tos end the data on</param>
public void SendUnnamedMessage(ulong clientId, NetworkBuffer buffer, NetworkChannel networkChannel = NetworkChannel.Internal)
{
InternalMessageSender.Send(clientId, NetworkConstants.UNNAMED_MESSAGE, networkChannel, buffer);
m_NetworkManager.MessageSender.Send(clientId, NetworkConstants.UNNAMED_MESSAGE, networkChannel, buffer);
PerformanceDataManager.Increment(ProfilerConstants.UnnamedMessageSent);
}

Expand Down Expand Up @@ -169,7 +169,7 @@ public void SendNamedMessage(string name, ulong clientId, Stream stream, Network

messageBuffer.CopyFrom(stream);

InternalMessageSender.Send(clientId, NetworkConstants.NAMED_MESSAGE, networkChannel, messageBuffer);
m_NetworkManager.MessageSender.Send(clientId, NetworkConstants.NAMED_MESSAGE, networkChannel, messageBuffer);
PerformanceDataManager.Increment(ProfilerConstants.NamedMessageSent);
}
}
Expand Down Expand Up @@ -211,7 +211,7 @@ public void SendNamedMessage(string name, List<ulong> clientIds, Stream stream,
return;
}

InternalMessageSender.Send(NetworkConstants.NAMED_MESSAGE, networkChannel, clientIds, messageBuffer);
m_NetworkManager.MessageSender.Send(NetworkConstants.NAMED_MESSAGE, networkChannel, clientIds, messageBuffer);
PerformanceDataManager.Increment(ProfilerConstants.NamedMessageSent);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,20 @@

namespace MLAPI.Messaging
{
internal static class InternalMessageSender
internal class InternalMessageSender
{
internal static void Send(ulong clientId, byte messageType, NetworkChannel networkChannel, NetworkBuffer messageBuffer)
private NetworkManager m_NetworkManager { get; }

internal InternalMessageSender(NetworkManager networkManager)
{
m_NetworkManager = networkManager;
}

internal void Send(ulong clientId, byte messageType, NetworkChannel networkChannel, NetworkBuffer messageBuffer)
{
messageBuffer.PadBuffer();

if (NetworkManager.Singleton.IsServer && clientId == NetworkManager.Singleton.ServerClientId)
if (m_NetworkManager.IsServer && clientId == m_NetworkManager.ServerClientId)
{
return;
}
Expand All @@ -23,7 +30,7 @@ internal static void Send(ulong clientId, byte messageType, NetworkChannel netwo
{
NetworkProfiler.StartEvent(TickType.Send, (uint)buffer.Length, networkChannel, NetworkConstants.MESSAGE_NAMES[messageType]);

NetworkManager.Singleton.NetworkConfig.NetworkTransport.Send(clientId, new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
m_NetworkManager.NetworkConfig.NetworkTransport.Send(clientId, new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
ProfilerStatManager.BytesSent.Record((int)buffer.Length);
PerformanceDataManager.Increment(ProfilerConstants.ByteSent, (int)buffer.Length);

Expand All @@ -33,7 +40,7 @@ internal static void Send(ulong clientId, byte messageType, NetworkChannel netwo
}
}

internal static void Send(byte messageType, NetworkChannel networkChannel, NetworkBuffer messageBuffer)
internal void Send(byte messageType, NetworkChannel networkChannel, NetworkBuffer messageBuffer)
{
messageBuffer.PadBuffer();

Expand All @@ -43,14 +50,14 @@ internal static void Send(byte messageType, NetworkChannel networkChannel, Netwo
NetworkProfiler.StartEvent(TickType.Send, (uint)buffer.Length, networkChannel, NetworkConstants.MESSAGE_NAMES[messageType]);
#endif

for (int i = 0; i < NetworkManager.Singleton.ConnectedClientsList.Count; i++)
for (int i = 0; i < m_NetworkManager.ConnectedClientsList.Count; i++)
{
if (NetworkManager.Singleton.IsServer && NetworkManager.Singleton.ConnectedClientsList[i].ClientId == NetworkManager.Singleton.ServerClientId)
if (m_NetworkManager.IsServer && m_NetworkManager.ConnectedClientsList[i].ClientId == m_NetworkManager.ServerClientId)
{
continue;
}

NetworkManager.Singleton.NetworkConfig.NetworkTransport.Send(NetworkManager.Singleton.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
m_NetworkManager.NetworkConfig.NetworkTransport.Send(m_NetworkManager.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
ProfilerStatManager.BytesSent.Record((int)buffer.Length);
PerformanceDataManager.Increment(ProfilerConstants.ByteSent, (int)buffer.Length);
}
Expand All @@ -61,7 +68,7 @@ internal static void Send(byte messageType, NetworkChannel networkChannel, Netwo
}
}

internal static void Send(byte messageType, NetworkChannel networkChannel, List<ulong> clientIds, NetworkBuffer messageBuffer)
internal void Send(byte messageType, NetworkChannel networkChannel, List<ulong> clientIds, NetworkBuffer messageBuffer)
{
if (clientIds == null)
{
Expand All @@ -79,12 +86,12 @@ internal static void Send(byte messageType, NetworkChannel networkChannel, List<

for (int i = 0; i < clientIds.Count; i++)
{
if (NetworkManager.Singleton.IsServer && clientIds[i] == NetworkManager.Singleton.ServerClientId)
if (m_NetworkManager.IsServer && clientIds[i] == m_NetworkManager.ServerClientId)
{
continue;
}

NetworkManager.Singleton.NetworkConfig.NetworkTransport.Send(clientIds[i], new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
m_NetworkManager.NetworkConfig.NetworkTransport.Send(clientIds[i], new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
ProfilerStatManager.BytesSent.Record((int)buffer.Length);
PerformanceDataManager.Increment(ProfilerConstants.ByteSent, (int)buffer.Length);
}
Expand All @@ -95,7 +102,7 @@ internal static void Send(byte messageType, NetworkChannel networkChannel, List<
}
}

internal static void Send(byte messageType, NetworkChannel networkChannel, ulong clientIdToIgnore, NetworkBuffer messageBuffer)
internal void Send(byte messageType, NetworkChannel networkChannel, ulong clientIdToIgnore, NetworkBuffer messageBuffer)
{
messageBuffer.PadBuffer();

Expand All @@ -105,15 +112,15 @@ internal static void Send(byte messageType, NetworkChannel networkChannel, ulong
NetworkProfiler.StartEvent(TickType.Send, (uint)buffer.Length, networkChannel, NetworkConstants.MESSAGE_NAMES[messageType]);
#endif

for (int i = 0; i < NetworkManager.Singleton.ConnectedClientsList.Count; i++)
for (int i = 0; i < m_NetworkManager.ConnectedClientsList.Count; i++)
{
if (NetworkManager.Singleton.ConnectedClientsList[i].ClientId == clientIdToIgnore ||
(NetworkManager.Singleton.IsServer && NetworkManager.Singleton.ConnectedClientsList[i].ClientId == NetworkManager.Singleton.ServerClientId))
if (m_NetworkManager.ConnectedClientsList[i].ClientId == clientIdToIgnore ||
(m_NetworkManager.IsServer && m_NetworkManager.ConnectedClientsList[i].ClientId == m_NetworkManager.ServerClientId))
{
continue;
}

NetworkManager.Singleton.NetworkConfig.NetworkTransport.Send(NetworkManager.Singleton.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
m_NetworkManager.NetworkConfig.NetworkTransport.Send(m_NetworkManager.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
ProfilerStatManager.BytesSent.Record((int)buffer.Length);
PerformanceDataManager.Increment(ProfilerConstants.ByteSent, (int)buffer.Length);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ private void Initialize(uint maxFrameHistory)

ClearParameters();

m_RpcQueueProcessor = new RpcQueueProcessor(this);
m_RpcQueueProcessor = new RpcQueueProcessor(this, NetworkManager);
m_MaxFrameHistory = maxFrameHistory + k_MinQueueHistory;

if (!m_QueueHistory.ContainsKey(RpcQueueHistoryFrame.QueueFrameType.Inbound))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ internal class RpcQueueProcessor
//The RpcQueueContainer that is associated with this RpcQueueProcessor
private RpcQueueContainer m_RpcQueueContainer;

private readonly NetworkManager m_NetworkManager;

/// <summary>
/// ProcessReceiveQueue
/// Public facing interface method to start processing all RPCs in the current inbound frame
Expand Down Expand Up @@ -126,7 +128,7 @@ internal void InternalMessagesSendAndFlush(bool isListening)
{
foreach (ulong clientId in queueItem.ClientNetworkIds)
{
InternalMessageSender.Send(clientId, NetworkConstants.ADD_OBJECT, queueItem.NetworkChannel, poolStream);
m_NetworkManager.MessageSender.Send(clientId, NetworkConstants.ADD_OBJECT, queueItem.NetworkChannel, poolStream);
}

PerformanceDataManager.Increment(ProfilerConstants.RpcSent, queueItem.ClientNetworkIds.Length);
Expand All @@ -144,7 +146,7 @@ internal void InternalMessagesSendAndFlush(bool isListening)
{
foreach (ulong clientId in queueItem.ClientNetworkIds)
{
InternalMessageSender.Send(clientId, NetworkConstants.DESTROY_OBJECT, queueItem.NetworkChannel, poolStream);
m_NetworkManager.MessageSender.Send(clientId, NetworkConstants.DESTROY_OBJECT, queueItem.NetworkChannel, poolStream);
}

PerformanceDataManager.Increment(ProfilerConstants.RpcSent, queueItem.ClientNetworkIds.Length);
Expand Down Expand Up @@ -270,9 +272,10 @@ private void SendFrameQueueItem(RpcFrameQueueItem queueItem)
}
}

internal RpcQueueProcessor(RpcQueueContainer rpcQueueContainer)
internal RpcQueueProcessor(RpcQueueContainer rpcQueueContainer, NetworkManager networkManager)
{
m_RpcQueueContainer = rpcQueueContainer;
m_NetworkManager = networkManager;
}
}
}
Loading