From ea296c446515dafa8185b8a54dee913d0cd99758 Mon Sep 17 00:00:00 2001 From: Beck Sebenius Date: Mon, 30 Aug 2021 13:32:11 -0700 Subject: [PATCH 1/7] Implemented NetworkMessageSent/NetworkMessageReceived metrics --- .../Runtime/Core/NetworkManager.cs | 1 + .../Runtime/Messaging/MessageBatcher.cs | 37 +++--------- .../MessageQueue/MessageQueueContainer.cs | 21 +++++++ .../MessageQueue/MessageQueueProcessor.cs | 57 ++++++++++++------- .../Runtime/Metrics/INetworkMetrics.cs | 2 + .../Runtime/Metrics/NetworkMetrics.cs | 13 +++++ .../Runtime/Metrics/NullNetworkMetrics.cs | 8 +++ .../Tests/Editor/MessageBatcherTests.cs | 8 ++- 8 files changed, 96 insertions(+), 51 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 0d3aa78b0b..fe0de878d5 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -1264,6 +1264,7 @@ internal void HandleIncomingData(ulong clientId, NetworkChannel networkChannel, { var messageType = (MessageQueueContainer.MessageType)messageStream.ReadByte(); MessageHandler.MessageReceiveQueueItem(clientId, messageStream, receiveTime, messageType, networkChannel); + NetworkMetrics.TrackNetworkMessageReceived(clientId, MessageQueueContainer.GetMessageTypeName(messageType), data.Count); } #if DEVELOPMENT_BUILD || UNITY_EDITOR s_HandleIncomingData.End(); diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs index 7e27a36d56..c7e809e4eb 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs @@ -34,8 +34,7 @@ public void Shutdown() m_SendDict.Clear(); } - // Used to store targets, internally - private ulong[] m_TargetList = new ulong[0]; + // Used to mark longer lengths. Works because we can't have zero-sized messages private const byte k_LongLenMarker = 0; @@ -84,40 +83,18 @@ private int PopLength(in NetworkBuffer messageBuffer) return len1 + len2 * 256; } - /// - /// FillTargetList - /// Fills a list with the ClientId's an item is targeted to - /// - /// the FrameQueueItem we want targets for - /// the list to fill - private static void FillTargetList(in MessageFrameItem item, ref ulong[] networkIdList) - { - switch (item.MessageType) - { - // todo: revisit .resize() and .ToArry() usage, for performance - case MessageQueueContainer.MessageType.ServerRpc: - Array.Resize(ref networkIdList, 1); - networkIdList[0] = item.NetworkId; - break; - default: - // todo: consider the implications of default usage of queueItem.clientIds - case MessageQueueContainer.MessageType.ClientRpc: - // copy the list - networkIdList = item.ClientNetworkIds.ToArray(); - break; - } - } - /// /// QueueItem /// Add a FrameQueueItem to be sent /// queueItem /// the threshold in bytes - public void QueueItem(in MessageFrameItem item, int automaticSendThresholdBytes, SendCallbackType sendCallback) + public void QueueItem( + IReadOnlyCollection targetList, + in MessageFrameItem item, + int automaticSendThresholdBytes, + SendCallbackType sendCallback) { - FillTargetList(item, ref m_TargetList); - - foreach (ulong clientId in m_TargetList) + foreach (ulong clientId in targetList) { if (!m_SendDict.ContainsKey(clientId)) { diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs index fec17c426e..39db3c8ae8 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs @@ -44,6 +44,27 @@ public enum MessageQueueProcessingTypes Receive, } + static Dictionary s_MessageTypeNames; + + static MessageQueueContainer() + { + s_MessageTypeNames = new Dictionary(); + foreach(var messageType in Enum.GetValues(typeof(MessageType))) + { + s_MessageTypeNames.Add((int)messageType, messageType.ToString()); + } + } + + public static string GetMessageTypeName(MessageType messageType) + { + if (!s_MessageTypeNames.TryGetValue((int)messageType, out var messageTypeName)) + { + messageTypeName = string.Empty; + } + + return messageTypeName; + } + // Inbound and Outbound QueueHistoryFrames private readonly Dictionary>> m_QueueHistory = new Dictionary>>(); diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs index f6e5b49422..4d1448061c 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Unity.Profiling; using UnityEngine; @@ -29,6 +30,7 @@ internal class MessageQueueProcessor private MessageQueueContainer m_MessageQueueContainer; private readonly NetworkManager m_NetworkManager; + private readonly List m_TargetIdBuffer = new List(); public void Shutdown() { @@ -217,6 +219,28 @@ internal void ProcessSendQueue(bool isListening) #endif } + /// + /// FillTargetList + /// Fills a list with the ClientId's an item is targeted to + /// + /// the MessageQueueItem we want targets for + /// the list to fill + private static void FillTargetList(in MessageFrameItem item, List targetList) + { + switch (item.MessageType) + { + case MessageQueueContainer.MessageType.ServerRpc: + targetList.Add(item.NetworkId); + break; + default: + // todo: consider the implications of default usage of queueItem.clientIds + case MessageQueueContainer.MessageType.ClientRpc: + // copy the list + targetList.AddRange(item.ClientNetworkIds); + break; + } + } + /// /// Sends all message queue items in the current outbound frame /// @@ -235,13 +259,21 @@ private void MessageQueueSendAndFlush(bool isListening) advanceFrameHistory = true; if (isListening) { + m_TargetIdBuffer.Clear(); + FillTargetList(currentQueueItem, m_TargetIdBuffer); + if (m_MessageQueueContainer.IsUsingBatching()) { - m_MessageBatcher.QueueItem(currentQueueItem, k_BatchThreshold, SendCallback); + m_MessageBatcher.QueueItem(m_TargetIdBuffer, currentQueueItem, k_BatchThreshold, SendCallback); } else { - SendFrameQueueItem(currentQueueItem); + SendFrameQueueItem(m_TargetIdBuffer, currentQueueItem); + } + + foreach (var target in m_TargetIdBuffer) + { + m_NetworkManager.NetworkMetrics.TrackNetworkMessageSent(target, MessageQueueContainer.GetMessageTypeName(currentQueueItem.MessageType), currentQueueItem.MessageData.Count); } } @@ -291,7 +323,7 @@ private void SendCallback(ulong clientId, MessageBatcher.SendStream sendStream) /// Sends the Message Queue Item to the specified destination /// /// Information on what to send - private void SendFrameQueueItem(MessageFrameItem item) + private void SendFrameQueueItem(IReadOnlyCollection targetIds, in MessageFrameItem item) { var channel = item.NetworkChannel; // If the length is greater than the fragmented threshold, switch to a fragmented channel. @@ -302,23 +334,10 @@ private void SendFrameQueueItem(MessageFrameItem item) { channel = NetworkChannel.Fragmented; } - switch (item.MessageType) - { - case MessageQueueContainer.MessageType.ServerRpc: - // TODO: Can we remove this special case for server RPCs? - { - m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(item.NetworkId, item.MessageData, channel); - break; - } - default: - { - foreach (ulong clientid in item.ClientNetworkIds) - { - m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(clientid, item.MessageData, channel); - } - break; - } + foreach (var clientId in targetIds) + { + m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(clientId, item.MessageData, channel); } } diff --git a/com.unity.netcode.gameobjects/Runtime/Metrics/INetworkMetrics.cs b/com.unity.netcode.gameobjects/Runtime/Metrics/INetworkMetrics.cs index 1ea2c2754b..a004b8fad9 100644 --- a/com.unity.netcode.gameobjects/Runtime/Metrics/INetworkMetrics.cs +++ b/com.unity.netcode.gameobjects/Runtime/Metrics/INetworkMetrics.cs @@ -4,6 +4,8 @@ namespace Unity.Netcode { internal interface INetworkMetrics { + void TrackNetworkMessageSent(ulong receivedClientId, string messageType, long bytesCount); + void TrackNetworkMessageReceived(ulong senderClientId, string messageType, long bytesCount); void TrackNetworkObject(NetworkObject networkObject); void TrackNamedMessageSent(ulong receiverClientId, string messageName, long bytesCount); diff --git a/com.unity.netcode.gameobjects/Runtime/Metrics/NetworkMetrics.cs b/com.unity.netcode.gameobjects/Runtime/Metrics/NetworkMetrics.cs index e0745575c6..fe23ace0dc 100644 --- a/com.unity.netcode.gameobjects/Runtime/Metrics/NetworkMetrics.cs +++ b/com.unity.netcode.gameobjects/Runtime/Metrics/NetworkMetrics.cs @@ -8,6 +8,8 @@ namespace Unity.Netcode { internal class NetworkMetrics : INetworkMetrics { + readonly EventMetric m_NetworkMessageSentEvent = new EventMetric(MetricNames.NetworkMessageSent); + readonly EventMetric m_NetworkMessageReceivedEvent = new EventMetric(MetricNames.NetworkMessageReceived); readonly EventMetric m_NamedMessageSentEvent = new EventMetric(MetricNames.NamedMessageSent); readonly EventMetric m_NamedMessageReceivedEvent = new EventMetric(MetricNames.NamedMessageReceived); readonly EventMetric m_UnnamedMessageSentEvent = new EventMetric(MetricNames.UnnamedMessageSent); @@ -30,6 +32,7 @@ internal class NetworkMetrics : INetworkMetrics public NetworkMetrics() { Dispatcher = new MetricDispatcherBuilder() + .WithMetricEvents(m_NetworkMessageSentEvent, m_NetworkMessageReceivedEvent) .WithMetricEvents(m_NamedMessageSentEvent, m_NamedMessageReceivedEvent) .WithMetricEvents(m_UnnamedMessageSentEvent, m_UnnamedMessageReceivedEvent) .WithMetricEvents(m_NetworkVariableDeltaSentEvent, m_NetworkVariableDeltaReceivedEvent) @@ -53,6 +56,16 @@ public void TrackNetworkObject(NetworkObject networkObject) } } + public void TrackNetworkMessageSent(ulong receivedClientId, string messageType, long bytesCount) + { + m_NetworkMessageSentEvent.Mark(new NetworkMessageEvent(new ConnectionInfo(receivedClientId), messageType, bytesCount)); + } + + public void TrackNetworkMessageReceived(ulong senderClientId, string messageType, long bytesCount) + { + m_NetworkMessageReceivedEvent.Mark(new NetworkMessageEvent(new ConnectionInfo(senderClientId), messageType, bytesCount)); + } + public void TrackNamedMessageSent(ulong receiverClientId, string messageName, long bytesCount) { m_NamedMessageSentEvent.Mark(new NamedMessageEvent(new ConnectionInfo(receiverClientId), messageName, bytesCount)); diff --git a/com.unity.netcode.gameobjects/Runtime/Metrics/NullNetworkMetrics.cs b/com.unity.netcode.gameobjects/Runtime/Metrics/NullNetworkMetrics.cs index d32e4085ff..0c8f98678a 100644 --- a/com.unity.netcode.gameobjects/Runtime/Metrics/NullNetworkMetrics.cs +++ b/com.unity.netcode.gameobjects/Runtime/Metrics/NullNetworkMetrics.cs @@ -4,6 +4,14 @@ namespace Unity.Netcode { internal class NullNetworkMetrics : INetworkMetrics { + public void TrackNetworkMessageSent(ulong receivedClientId, string messageType, long bytesCount) + { + } + + public void TrackNetworkMessageReceived(ulong senderClientId, string messageType, long bytesCount) + { + } + public void TrackNetworkObject(NetworkObject networkObject) { } diff --git a/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs index 53ffaa74f0..a88209bdad 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs @@ -26,7 +26,9 @@ public void SendWithThreshold() MessageType = i % 2 == 0 ? MessageQueueContainer.MessageType.ServerRpc : MessageQueueContainer.MessageType.ClientRpc, MessageData = new ArraySegment(randomData, 0, randomData.Length) }; - sendBatcher.QueueItem(queueItem, + sendBatcher.QueueItem( + queueItem.ClientNetworkIds, + queueItem, k_BatchThreshold, (networkId, sendStream) => { @@ -75,7 +77,9 @@ public void SendWithoutThreshold() MessageType = i % 2 == 0 ? MessageQueueContainer.MessageType.ServerRpc : MessageQueueContainer.MessageType.ClientRpc, MessageData = new ArraySegment(randomData, 0, randomData.Length) }; - sendBatcher.QueueItem(queueItem, + sendBatcher.QueueItem( + queueItem.ClientNetworkIds, + queueItem, k_BatchThreshold, (networkId, sendStream) => { From c4f7677725c87fe56ecb35023fd382f2936ae14b Mon Sep 17 00:00:00 2001 From: Beck Sebenius Date: Mon, 30 Aug 2021 13:47:44 -0700 Subject: [PATCH 2/7] Added tests and fixed missing messages during batching --- .../Runtime/Core/NetworkManager.cs | 1 + .../Runtime/Metrics/MessagingMetricsTests.cs | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index fe0de878d5..feab783aca 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -1275,6 +1275,7 @@ private void ReceiveCallback(NetworkBuffer messageBuffer, MessageQueueContainer. float receiveTime, NetworkChannel receiveChannel) { MessageHandler.MessageReceiveQueueItem(clientId, messageBuffer, receiveTime, messageType, receiveChannel); + NetworkMetrics.TrackNetworkMessageReceived(clientId, MessageQueueContainer.GetMessageTypeName(messageType), messageBuffer.Length); } /// diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs index c3a7cfea5b..d7112850cd 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs @@ -22,6 +22,73 @@ public class MessagingMetricsTests : DualClientMetricTestBase protected override int NbClients => 2; + [UnityTest] + public IEnumerator TrackNetworkMessageSentMetric() + { + var messageName = Guid.NewGuid().ToString(); + using var memoryStream = new MemoryStream(); + using var binaryWriter = new BinaryWriter(memoryStream); + binaryWriter.Write(messageName); + + var waitForMetricValues = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.NetworkMessageSent); + + Server.CustomMessagingManager.SendNamedMessage(messageName, FirstClient.LocalClientId, memoryStream); + + yield return waitForMetricValues.WaitForMetricsReceived(); + + var networkMessageSentMetricValues = waitForMetricValues.AssertMetricValuesHaveBeenFound(); + Assert.AreEqual(1, networkMessageSentMetricValues.Count); + + var networkMessageEvent = networkMessageSentMetricValues.First(); + Assert.AreEqual(MessageQueueContainer.GetMessageTypeName(MessageQueueContainer.MessageType.NamedMessage), networkMessageEvent.Name); + Assert.AreEqual(FirstClient.LocalClientId, networkMessageEvent.Connection.Id); + } + + [UnityTest] + public IEnumerator TrackNetworkMessageSentMetricToMultipleClients() + { + var messageName = Guid.NewGuid().ToString(); + using var memoryStream = new MemoryStream(); + using var binaryWriter = new BinaryWriter(memoryStream); + binaryWriter.Write(messageName); + + var waitForMetricValues = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.NetworkMessageSent); + + Server.CustomMessagingManager.SendNamedMessage(messageName, new List { FirstClient.LocalClientId, SecondClient.LocalClientId }, memoryStream); + + yield return waitForMetricValues.WaitForMetricsReceived(); + + var networkMessageSentMetricValues = waitForMetricValues.AssertMetricValuesHaveBeenFound(); + Assert.AreEqual(2, networkMessageSentMetricValues.Count(x => x.Name.Equals(MessageQueueContainer.GetMessageTypeName(MessageQueueContainer.MessageType.NamedMessage)))); + } + + [UnityTest] + public IEnumerator TrackNetworkMessageReceivedMetric() + { + var messageName = Guid.NewGuid().ToString(); + using var memoryStream = new MemoryStream(); + using var binaryWriter = new BinaryWriter(memoryStream); + binaryWriter.Write(messageName); + + LogAssert.Expect(LogType.Log, $"Received from {Server.LocalClientId}"); + FirstClient.CustomMessagingManager.RegisterNamedMessageHandler(messageName, (sender, payload) => + { + Debug.Log($"Received from {sender}"); + }); + + var waitForMetricValues = new WaitForMetricValues(FirstClientMetrics.Dispatcher, MetricNames.NetworkMessageReceived); + + Server.CustomMessagingManager.SendNamedMessage(messageName, FirstClient.LocalClientId, memoryStream); + + yield return waitForMetricValues.WaitForMetricsReceived(); + + var networkMessageReceivedValues = waitForMetricValues.AssertMetricValuesHaveBeenFound(); + Assert.AreEqual(1, networkMessageReceivedValues.Count(x => x.Name.Equals(MessageQueueContainer.GetMessageTypeName(MessageQueueContainer.MessageType.NamedMessage)))); + + var namedMessageReceived = networkMessageReceivedValues.First(); + Assert.AreEqual(Server.LocalClientId, namedMessageReceived.Connection.Id); + } + [UnityTest] public IEnumerator TrackNamedMessageSentMetric() { From f09e9f2d26f02f3ab2c0093522bf032b81624277 Mon Sep 17 00:00:00 2001 From: Beck Sebenius Date: Mon, 30 Aug 2021 14:04:31 -0700 Subject: [PATCH 3/7] updated the message type names to be a readonly --- .../Messaging/MessageQueue/MessageQueueContainer.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs index 39db3c8ae8..314ff409cc 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs @@ -44,20 +44,22 @@ public enum MessageQueueProcessingTypes Receive, } - static Dictionary s_MessageTypeNames; + private static readonly IReadOnlyDictionary k_MessageTypeNames; static MessageQueueContainer() { - s_MessageTypeNames = new Dictionary(); + var messageTypeNames = new Dictionary(); foreach(var messageType in Enum.GetValues(typeof(MessageType))) { - s_MessageTypeNames.Add((int)messageType, messageType.ToString()); + messageTypeNames.Add((int)messageType, messageType.ToString()); } + + k_MessageTypeNames = messageTypeNames; } public static string GetMessageTypeName(MessageType messageType) { - if (!s_MessageTypeNames.TryGetValue((int)messageType, out var messageTypeName)) + if (!k_MessageTypeNames.TryGetValue((int)messageType, out var messageTypeName)) { messageTypeName = string.Empty; } From 9ea7dabb1885f4c3f34eac718e8b24fd3adec8f1 Mon Sep 17 00:00:00 2001 From: Beck Sebenius Date: Tue, 31 Aug 2021 10:40:21 -0700 Subject: [PATCH 4/7] fix against latest develop merge --- .../Tests/Runtime/Metrics/MessagingMetricsTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs index f208e09986..f721a6157c 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs @@ -30,7 +30,7 @@ public IEnumerator TrackNetworkMessageSentMetric() using var binaryWriter = new BinaryWriter(memoryStream); binaryWriter.Write(messageName); - var waitForMetricValues = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.NetworkMessageSent); + var waitForMetricValues = new WaitForMetricValues(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent); Server.CustomMessagingManager.SendNamedMessage(messageName, FirstClient.LocalClientId, memoryStream); @@ -52,7 +52,7 @@ public IEnumerator TrackNetworkMessageSentMetricToMultipleClients() using var binaryWriter = new BinaryWriter(memoryStream); binaryWriter.Write(messageName); - var waitForMetricValues = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.NetworkMessageSent); + var waitForMetricValues = new WaitForMetricValues(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent); Server.CustomMessagingManager.SendNamedMessage(messageName, new List { FirstClient.LocalClientId, SecondClient.LocalClientId }, memoryStream); @@ -76,7 +76,7 @@ public IEnumerator TrackNetworkMessageReceivedMetric() Debug.Log($"Received from {sender}"); }); - var waitForMetricValues = new WaitForMetricValues(FirstClientMetrics.Dispatcher, MetricNames.NetworkMessageReceived); + var waitForMetricValues = new WaitForMetricValues(FirstClientMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageReceived); Server.CustomMessagingManager.SendNamedMessage(messageName, FirstClient.LocalClientId, memoryStream); From 6438d741e2916c311821a06cf076d470a75846fb Mon Sep 17 00:00:00 2001 From: Beck Sebenius Date: Tue, 31 Aug 2021 12:36:03 -0700 Subject: [PATCH 5/7] bumped tools version to #8 --- testproject-tools-integration/Packages/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testproject-tools-integration/Packages/manifest.json b/testproject-tools-integration/Packages/manifest.json index e13395beba..7d187e5d57 100644 --- a/testproject-tools-integration/Packages/manifest.json +++ b/testproject-tools-integration/Packages/manifest.json @@ -3,7 +3,7 @@ "dependencies": { "com.unity.ide.rider": "3.0.7", "com.unity.netcode.gameobjects": "file:../../com.unity.netcode.gameobjects", - "com.unity.multiplayer.tools": "0.0.1-preview.6", + "com.unity.multiplayer.tools": "0.0.1-preview.8", "com.unity.multiplayer.transport.utp": "file:../../com.unity.multiplayer.transport.utp", "com.unity.test-framework": "1.1.26", "com.unity.modules.ai": "1.0.0", From c84229d5640025771cd0f30c39eceb3d3421c4aa Mon Sep 17 00:00:00 2001 From: Beck Sebenius Date: Tue, 31 Aug 2021 13:09:02 -0700 Subject: [PATCH 6/7] fixed unnecessary using --- .../Runtime/Messaging/MessageBatcher.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs index c7e809e4eb..978d4fcfa6 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs @@ -1,6 +1,5 @@ using System; using System.IO; -using System.Linq; using System.Collections.Generic; namespace Unity.Netcode From 0bcb96fcf8acdd18df2476a2c6b9f11be2c4fb6f Mon Sep 17 00:00:00 2001 From: Beck Sebenius Date: Tue, 31 Aug 2021 13:14:59 -0700 Subject: [PATCH 7/7] fixed errant tab (thanks github merge....) --- .../Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs index 4a3d99ad30..f60c6a9321 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs @@ -339,7 +339,7 @@ private void SendFrameQueueItem(IReadOnlyCollection targetIds, in Message foreach (var clientId in targetIds) { - m_MessageQueueContainer.NetworkManager.NetworkMetrics.TrackTransportBytesSent(item.MessageData.Count); + m_MessageQueueContainer.NetworkManager.NetworkMetrics.TrackTransportBytesSent(item.MessageData.Count); m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(clientId, item.MessageData, channel); } }