Skip to content

Commit 103cd52

Browse files
author
Jean-Sébastien Fauteux
authored
Client Connection Ids and Game Object registration (#863)
* Client Connection Ids and Game Object registration * Fixing connection to use local and avoid allocation at every new metrics * Fixed client id connections to point to other clients * Using IReadOnlyCollection instead of explicit List * Changing variable name to sender and receiver
1 parent 3a796d6 commit 103cd52

File tree

4 files changed

+54
-21
lines changed

4 files changed

+54
-21
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ internal void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
9696
if (m_NamedMessageHandlers32.TryGetValue(hash, out HandleNamedMessageDelegate messageHandler32))
9797
{
9898
messageHandler32(sender, stream);
99-
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(m_MessageHandlerNameLookup32[hash], bytesCount);
99+
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(sender, m_MessageHandlerNameLookup32[hash], bytesCount);
100100
}
101101

102102
if (m_NamedMessageHandlers64.TryGetValue(hash, out HandleNamedMessageDelegate messageHandler64))
103103
{
104104
messageHandler64(sender, stream);
105-
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(m_MessageHandlerNameLookup64[hash], bytesCount);
105+
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(sender, m_MessageHandlerNameLookup64[hash], bytesCount);
106106
}
107107
}
108108
else
@@ -114,14 +114,14 @@ internal void InvokeNamedMessage(ulong hash, ulong sender, Stream stream)
114114
if (m_NamedMessageHandlers32.TryGetValue(hash, out HandleNamedMessageDelegate messageHandler32))
115115
{
116116
messageHandler32(sender, stream);
117-
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(m_MessageHandlerNameLookup32[hash], bytesCount);
117+
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(sender, m_MessageHandlerNameLookup32[hash], bytesCount);
118118
}
119119
break;
120120
case HashSize.VarIntEightBytes:
121121
if (m_NamedMessageHandlers64.TryGetValue(hash, out HandleNamedMessageDelegate messageHandler64))
122122
{
123123
messageHandler64(sender, stream);
124-
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(m_MessageHandlerNameLookup64[hash], bytesCount);
124+
m_NetworkManager.NetworkMetrics.TrackNamedMessageReceived(sender, m_MessageHandlerNameLookup64[hash], bytesCount);
125125
}
126126
break;
127127
}
@@ -190,8 +190,8 @@ public void SendNamedMessage(string name, ulong clientId, Stream stream, Network
190190

191191
m_NetworkManager.MessageSender.Send(clientId, NetworkConstants.NAMED_MESSAGE, networkChannel, messageBuffer);
192192
PerformanceDataManager.Increment(ProfilerConstants.NamedMessageSent);
193-
194-
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(name, (ulong)messageBuffer.Length);
193+
194+
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientId, name, (ulong)messageBuffer.Length);
195195
}
196196
}
197197

@@ -235,7 +235,7 @@ public void SendNamedMessage(string name, List<ulong> clientIds, Stream stream,
235235
m_NetworkManager.MessageSender.Send(NetworkConstants.NAMED_MESSAGE, networkChannel, clientIds, messageBuffer);
236236
PerformanceDataManager.Increment(ProfilerConstants.NamedMessageSent);
237237

238-
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(name, (ulong)messageBuffer.Length);
238+
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientIds, name, (ulong)messageBuffer.Length);
239239
}
240240
}
241241
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ public void HandleConnectionApproved(ulong clientId, Stream stream, float receiv
8383

8484
NetworkManager.ConnectedClients.Add(NetworkManager.LocalClientId, new NetworkClient { ClientId = NetworkManager.LocalClientId });
8585

86-
8786
void DelayedSpawnAction(Stream continuationStream)
8887
{
8988
using (var continuationReader = PooledNetworkReader.Get(continuationStream))
@@ -408,7 +407,7 @@ public void HandleNamedMessage(ulong clientId, Stream stream)
408407
{
409408
PerformanceDataManager.Increment(ProfilerConstants.NamedMessageReceived);
410409
ProfilerStatManager.NamedMessage.Record();
411-
410+
412411
using (var reader = PooledNetworkReader.Get(stream))
413412
{
414413
ulong hash = reader.ReadUInt64Packed();

com.unity.multiplayer.mlapi/Runtime/Metrics/NetworkMetrics.cs

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Unity.Multiplayer.NetStats.Dispatch;
1+
using System.Collections.Generic;
2+
using MLAPI.Connection;
3+
using Unity.Multiplayer.NetStats.Dispatch;
24
using Unity.Multiplayer.NetStats.Metrics;
35
using Unity.Multiplayer.NetworkProfiler;
46
using Unity.Multiplayer.NetworkProfiler.Models;
@@ -7,28 +9,40 @@ namespace MLAPI.Metrics
79
{
810
public interface INetworkMetrics
911
{
10-
void TrackNamedMessageSent(string messageName, ulong bytesCount);
12+
void TrackNetworkObject(NetworkObject networkObject);
1113

12-
void TrackNamedMessageReceived(string messageName, ulong bytesCount);
14+
void TrackNamedMessageSent(ulong receiver, string messageName, ulong bytesCount);
15+
16+
void TrackNamedMessageSent(IReadOnlyCollection<ulong> receivers, string messageName, ulong bytesCount);
17+
18+
void TrackNamedMessageReceived(ulong sender, string messageName, ulong bytesCount);
1319

1420
void DispatchFrame();
1521
}
1622

1723
public class NullNetworkMetrics : INetworkMetrics
1824
{
19-
public void TrackNamedMessageSent(string messageName, ulong bytesCount)
25+
public void TrackNetworkObject(NetworkObject networkObject)
26+
{
27+
}
28+
29+
public void TrackNamedMessageSent(ulong receiver, string messageName, ulong bytesCount)
2030
{
2131
}
2232

23-
public void TrackNamedMessageReceived(string messageName, ulong bytesCount)
33+
public void TrackNamedMessageSent(IReadOnlyCollection<ulong> receivers, string messageName, ulong bytesCount)
34+
{
35+
}
36+
37+
public void TrackNamedMessageReceived(ulong sender, string messageName, ulong bytesCount)
2438
{
2539
}
2640

2741
public void DispatchFrame()
2842
{
2943
}
3044
}
31-
45+
3246
#if true
3347
public class NetworkMetrics : INetworkMetrics
3448
{
@@ -38,24 +52,42 @@ public class NetworkMetrics : INetworkMetrics
3852
private EventMetric<NamedMessageEvent> m_NamedMessageSentEvent = new EventMetric<NamedMessageEvent>("Named Message Sent");
3953
private EventMetric<NamedMessageEvent> m_NamedMessageReceivedEvent = new EventMetric<NamedMessageEvent>("Named Message Received");
4054

55+
private Dictionary<ulong, NetworkObjectIdentifier> m_NetworkGameObjects = new Dictionary<ulong, NetworkObjectIdentifier>();
56+
4157
public NetworkMetrics(NetworkManager networkManager)
4258
{
4359
m_NetworkManager = networkManager;
4460
m_Dispatcher = new MetricDispatcherBuilder()
4561
.WithMetricEvents(m_NamedMessageSentEvent, m_NamedMessageReceivedEvent)
4662
.Build();
47-
63+
4864
m_Dispatcher.RegisterObserver(MLAPIObserver.Observer);
4965
}
5066

51-
public void TrackNamedMessageSent(string messageName, ulong bytesCount)
67+
public void TrackNetworkObject(NetworkObject networkObject)
68+
{
69+
if (!m_NetworkGameObjects.ContainsKey(networkObject.NetworkObjectId))
70+
{
71+
m_NetworkGameObjects[networkObject.NetworkObjectId] = new NetworkObjectIdentifier(networkObject.name, networkObject.NetworkObjectId);
72+
}
73+
}
74+
75+
public void TrackNamedMessageSent(ulong receiver, string messageName, ulong bytesCount)
76+
{
77+
m_NamedMessageSentEvent.Mark(new NamedMessageEvent(new ConnectionInfo(receiver), messageName, bytesCount));
78+
}
79+
80+
public void TrackNamedMessageSent(IReadOnlyCollection<ulong> receivers, string messageName, ulong bytesCount)
5281
{
53-
m_NamedMessageSentEvent.Mark(new NamedMessageEvent(new ConnectionInfo(m_NetworkManager.LocalClientId), messageName, bytesCount));
82+
foreach (var receiver in receivers)
83+
{
84+
TrackNamedMessageSent(receiver, messageName, bytesCount);
85+
}
5486
}
5587

56-
public void TrackNamedMessageReceived(string messageName, ulong bytesCount)
88+
public void TrackNamedMessageReceived(ulong sender, string messageName, ulong bytesCount)
5789
{
58-
m_NamedMessageReceivedEvent.Mark(new NamedMessageEvent(new ConnectionInfo(m_NetworkManager.LocalClientId), messageName, bytesCount));
90+
m_NamedMessageReceivedEvent.Mark(new NamedMessageEvent(new ConnectionInfo(sender), messageName, bytesCount));
5991
}
6092

6193
public void DispatchFrame()
@@ -74,4 +106,4 @@ static MLAPIObserver()
74106
}
75107
}
76108
#endif
77-
}
109+
}

com.unity.multiplayer.mlapi/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ internal void SpawnNetworkObjectLocally(NetworkObject networkObject, ulong netwo
302302
SpawnedObjects.Add(networkObject.NetworkObjectId, networkObject);
303303
SpawnedObjectsList.Add(networkObject);
304304

305+
NetworkManager.Singleton.NetworkMetrics.TrackNetworkObject(networkObject);
306+
305307
if (ownerClientId != null)
306308
{
307309
if (NetworkManager.IsServer)

0 commit comments

Comments
 (0)