diff --git a/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs b/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs index 8dbf8d91d0..b1b1df1948 100644 --- a/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs +++ b/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs @@ -260,14 +260,14 @@ public void SendToClient(NativeArray packet, ulong clientId, int index) } } - public override unsafe void Send(ulong clientId, ArraySegment data, NetworkChannel networkChannel) + public override unsafe void Send(ulong clientId, ArraySegment data, NetworkDelivery networkDelivery) { var pipelineIndex = 0; GetUTPConnectionDetails(clientId, out uint peerId); var writer = new DataStreamWriter(data.Count + 1 + 4, Allocator.Temp); - writer.WriteByte((byte)networkChannel); + writer.WriteByte((byte)networkDelivery); writer.WriteInt(data.Count); fixed (byte* dataArrayPtr = data.Array) @@ -278,10 +278,10 @@ public override unsafe void Send(ulong clientId, ArraySegment data, Networ SendToClient(writer.AsNativeArray(), peerId, pipelineIndex); } - public override NetcodeEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment payload, out float receiveTime) + public override NetcodeEvent PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment payload, out float receiveTime) { clientId = 0; - networkChannel = NetworkChannel.ChannelUnused; + networkDelivery = NetworkDelivery.ReliableSequenced; //?? payload = new ArraySegment(Array.Empty()); receiveTime = 0; @@ -315,20 +315,20 @@ private void Update() { Marshal.Copy((IntPtr)message.Data, arr, 0, size); var payload = new ArraySegment(arr); - InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, (NetworkChannel)message.ChannelId, payload, Time.realtimeSinceStartup); + InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, (NetworkDelivery)message.ChannelId, payload, Time.realtimeSinceStartup); } break; case NetcodeEvent.Connect: { - InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkChannel.ChannelUnused, new ArraySegment(), Time.realtimeSinceStartup); + InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkDelivery.ReliableSequenced, new ArraySegment(), Time.realtimeSinceStartup); } break; case NetcodeEvent.Disconnect: - InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkChannel.ChannelUnused, new ArraySegment(), Time.realtimeSinceStartup); + InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkDelivery.ReliableSequenced, new ArraySegment(), Time.realtimeSinceStartup); break; case NetcodeEvent.Nothing: - InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkChannel.ChannelUnused, new ArraySegment(), Time.realtimeSinceStartup); + InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkDelivery.ReliableSequenced, new ArraySegment(), Time.realtimeSinceStartup); break; } } diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkBehaviour.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkBehaviour.cs index e7a64afee9..518f534028 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkBehaviour.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkBehaviour.cs @@ -64,16 +64,16 @@ internal NetworkSerializer __beginSendServerRpc(uint rpcMethodId, ServerRpcParam } var messageQueueContainer = NetworkManager.MessageQueueContainer; - var transportChannel = rpcDelivery == RpcDelivery.Reliable ? NetworkChannel.ReliableRpc : NetworkChannel.UnreliableRpc; + var transportDelivery = rpcDelivery == RpcDelivery.Reliable ? NetworkDelivery.ReliableSequenced : NetworkDelivery.UnreliableSequenced; if (IsHost) { - writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ServerRpc, Time.realtimeSinceStartup, transportChannel, + writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ServerRpc, Time.realtimeSinceStartup, transportDelivery, NetworkManager.ServerClientId, null, MessageQueueHistoryFrame.QueueFrameType.Inbound, serverRpcParams.Send.UpdateStage); } else { - writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ServerRpc, Time.realtimeSinceStartup, transportChannel, + writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ServerRpc, Time.realtimeSinceStartup, transportDelivery, NetworkManager.ServerClientId, null, MessageQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); writer.WriteByte((byte)MessageQueueContainer.MessageType.ServerRpc); @@ -133,7 +133,7 @@ internal NetworkSerializer __beginSendClientRpc(uint rpcMethodId, ClientRpcParam } // This will start a new queue item entry and will then return the writer to the current frame's stream - var transportChannel = rpcDelivery == RpcDelivery.Reliable ? NetworkChannel.ReliableRpc : NetworkChannel.UnreliableRpc; + var transportDelivery = rpcDelivery == RpcDelivery.Reliable ? NetworkDelivery.ReliableSequenced : NetworkDelivery.UnreliableSequenced; ulong[] clientIds = clientRpcParams.Send.TargetClientIds ?? NetworkManager.ConnectedClientsIds; if (clientRpcParams.Send.TargetClientIds != null && clientRpcParams.Send.TargetClientIds.Length == 0) @@ -151,7 +151,7 @@ internal NetworkSerializer __beginSendClientRpc(uint rpcMethodId, ClientRpcParam if (IsHost && containsServerClientId) { //Always write to the next frame's inbound queue - writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ClientRpc, Time.realtimeSinceStartup, transportChannel, + writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ClientRpc, Time.realtimeSinceStartup, transportDelivery, NetworkManager.ServerClientId, null, MessageQueueHistoryFrame.QueueFrameType.Inbound, clientRpcParams.Send.UpdateStage); //Handle sending to the other clients, if so the above notes explain why this code is here (a temporary patch-fix) @@ -161,7 +161,7 @@ internal NetworkSerializer __beginSendClientRpc(uint rpcMethodId, ClientRpcParam messageQueueContainer.SetLoopBackFrameItem(clientRpcParams.Send.UpdateStage); //Switch to the outbound queue - writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ClientRpc, Time.realtimeSinceStartup, transportChannel, NetworkObjectId, + writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ClientRpc, Time.realtimeSinceStartup, transportDelivery, NetworkObjectId, clientIds, MessageQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); } else @@ -171,7 +171,7 @@ internal NetworkSerializer __beginSendClientRpc(uint rpcMethodId, ClientRpcParam } else { - writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ClientRpc, Time.realtimeSinceStartup, transportChannel, NetworkObjectId, + writer = messageQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ClientRpc, Time.realtimeSinceStartup, transportDelivery, NetworkObjectId, clientIds, MessageQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); } @@ -365,7 +365,7 @@ public virtual void OnNetworkObjectParentChanged(NetworkObject parentNetworkObje private bool m_VarInit = false; private readonly List> m_ChannelMappedNetworkVariableIndexes = new List>(); - private readonly List m_ChannelsForNetworkVariableGroups = new List(); + private readonly List m_ChannelsForNetworkVariableGroups = new List(); internal readonly List NetworkVariableFields = new List(); private static Dictionary s_FieldTypes = new Dictionary(); @@ -437,26 +437,26 @@ internal void InitializeVariables() { // Create index map for channels - var firstLevelIndex = new Dictionary(); + var firstLevelIndex = new Dictionary(); int secondLevelCounter = 0; for (int i = 0; i < NetworkVariableFields.Count; i++) { - var networkChannel = NetworkVariableBase.NetworkVariableChannel; + var networkDelivery = NetworkVariableBase.NetworkVariableDelivery; - if (!firstLevelIndex.ContainsKey(networkChannel)) + if (!firstLevelIndex.ContainsKey(networkDelivery)) { - firstLevelIndex.Add(networkChannel, secondLevelCounter); - m_ChannelsForNetworkVariableGroups.Add(networkChannel); + firstLevelIndex.Add(networkDelivery, secondLevelCounter); + m_ChannelsForNetworkVariableGroups.Add(networkDelivery); secondLevelCounter++; } - if (firstLevelIndex[networkChannel] >= m_ChannelMappedNetworkVariableIndexes.Count) + if (firstLevelIndex[networkDelivery] >= m_ChannelMappedNetworkVariableIndexes.Count) { m_ChannelMappedNetworkVariableIndexes.Add(new HashSet()); } - m_ChannelMappedNetworkVariableIndexes[firstLevelIndex[networkChannel]].Add(i); + m_ChannelMappedNetworkVariableIndexes[firstLevelIndex[networkDelivery]].Add(i); } } } diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 0d3aa78b0b..ddab3c428f 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -1069,8 +1069,8 @@ private void OnNetworkEarlyUpdate() do { processedEvents++; - networkEvent = NetworkConfig.NetworkTransport.PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment payload, out float receiveTime); - HandleRawTransportPoll(networkEvent, clientId, networkChannel, payload, receiveTime); + networkEvent = NetworkConfig.NetworkTransport.PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment payload, out float receiveTime); + HandleRawTransportPoll(networkEvent, clientId, networkDelivery, payload, receiveTime); // Only do another iteration if: there are no more messages AND (there is no limit to max events or we have processed less than the maximum) } while (IsListening && networkEvent != NetworkEvent.Nothing); } @@ -1122,7 +1122,7 @@ private void SendConnectionRequest() { var clientIds = new[] { ServerClientId }; var context = MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.ConnectionRequest, NetworkChannel.Internal, + MessageQueueContainer.MessageType.ConnectionRequest, NetworkDelivery.ReliableSequenced, clientIds, NetworkUpdateStage.EarlyUpdate); if (context != null) { @@ -1158,7 +1158,7 @@ private IEnumerator ApprovalTimeout(ulong clientId) } } - private void HandleRawTransportPoll(NetworkEvent networkEvent, ulong clientId, NetworkChannel networkChannel, + private void HandleRawTransportPoll(NetworkEvent networkEvent, ulong clientId, NetworkDelivery networkDelivery, ArraySegment payload, float receiveTime) { switch (networkEvent) @@ -1204,7 +1204,7 @@ private void HandleRawTransportPoll(NetworkEvent networkEvent, ulong clientId, N NetworkLog.LogInfo($"Incoming Data From {clientId}: {payload.Count} bytes"); } - HandleIncomingData(clientId, networkChannel, payload, receiveTime); + HandleIncomingData(clientId, networkDelivery, payload, receiveTime); break; } case NetworkEvent.Disconnect: @@ -1239,7 +1239,7 @@ private void HandleRawTransportPoll(NetworkEvent networkEvent, ulong clientId, N private readonly NetworkBuffer m_InputBufferWrapper = new NetworkBuffer(new byte[0]); private readonly MessageBatcher m_MessageBatcher = new MessageBatcher(); - internal void HandleIncomingData(ulong clientId, NetworkChannel networkChannel, ArraySegment data, float receiveTime) + internal void HandleIncomingData(ulong clientId, NetworkDelivery networkDelivery, ArraySegment data, float receiveTime) { #if DEVELOPMENT_BUILD || UNITY_EDITOR s_HandleIncomingData.Begin(); @@ -1258,12 +1258,12 @@ internal void HandleIncomingData(ulong clientId, NetworkChannel networkChannel, if (MessageQueueContainer.IsUsingBatching()) { - m_MessageBatcher.ReceiveItems(messageStream, ReceiveCallback, clientId, receiveTime, networkChannel); + m_MessageBatcher.ReceiveItems(messageStream, ReceiveCallback, clientId, receiveTime, networkDelivery); } else { var messageType = (MessageQueueContainer.MessageType)messageStream.ReadByte(); - MessageHandler.MessageReceiveQueueItem(clientId, messageStream, receiveTime, messageType, networkChannel); + MessageHandler.MessageReceiveQueueItem(clientId, messageStream, receiveTime, messageType, networkDelivery); } #if DEVELOPMENT_BUILD || UNITY_EDITOR s_HandleIncomingData.End(); @@ -1271,9 +1271,9 @@ internal void HandleIncomingData(ulong clientId, NetworkChannel networkChannel, } private void ReceiveCallback(NetworkBuffer messageBuffer, MessageQueueContainer.MessageType messageType, ulong clientId, - float receiveTime, NetworkChannel receiveChannel) + float receiveTime, NetworkDelivery receiveDelivery) { - MessageHandler.MessageReceiveQueueItem(clientId, messageBuffer, receiveTime, messageType, receiveChannel); + MessageHandler.MessageReceiveQueueItem(clientId, messageBuffer, receiveTime, messageType, receiveDelivery); } /// @@ -1449,7 +1449,7 @@ private void SyncTime() ulong[] clientIds = ConnectedClientsIds; var context = MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.TimeSync, NetworkChannel.SyncChannel, + MessageQueueContainer.MessageType.TimeSync, NetworkDelivery.Unreliable, clientIds, NetworkUpdateStage.EarlyUpdate); if (context != null) { @@ -1492,7 +1492,7 @@ internal void HandleApproval(ulong ownerClientId, bool createPlayerObject, uint? // Server doesn't send itself the connection approved message if (ownerClientId != ServerClientId) { - var context = MessageQueueContainer.EnterInternalCommandContext(MessageQueueContainer.MessageType.ConnectionApproved, NetworkChannel.Internal, + var context = MessageQueueContainer.EnterInternalCommandContext(MessageQueueContainer.MessageType.ConnectionApproved, NetworkDelivery.ReliableSequenced, new ulong[] { ownerClientId }, NetworkUpdateStage.EarlyUpdate); if (context != null) @@ -1555,7 +1555,7 @@ internal void ApprovedPlayerSpawn(ulong clientId, uint playerPrefabHash) continue; //The new client. } - var context = MessageQueueContainer.EnterInternalCommandContext(MessageQueueContainer.MessageType.CreateObject, NetworkChannel.Internal, + var context = MessageQueueContainer.EnterInternalCommandContext(MessageQueueContainer.MessageType.CreateObject, NetworkDelivery.ReliableSequenced, new[] { clientPair.Key }, NetworkUpdateLoop.UpdateStage); if (context != null) { diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs index dc662c2011..90b6e77b30 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs @@ -313,7 +313,7 @@ public void NetworkHide(ulong clientId) { // Send destroy call var context = NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.DestroyObject, NetworkChannel.Internal, + MessageQueueContainer.MessageType.DestroyObject, NetworkDelivery.ReliableSequenced, new[] { clientId }, NetworkUpdateStage.PostLateUpdate); if (context != null) { @@ -724,7 +724,7 @@ private void OnTransformParentChanged() ApplyNetworkParenting(); var context = NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.ParentSync, NetworkChannel.Internal, + MessageQueueContainer.MessageType.ParentSync, NetworkDelivery.ReliableSequenced, NetworkManager.ConnectedClientsIds.Where((id) => Observers.Contains(id)).ToArray(), NetworkUpdateLoop.UpdateStage); diff --git a/com.unity.netcode.gameobjects/Runtime/Core/SnapshotSystem.cs b/com.unity.netcode.gameobjects/Runtime/Core/SnapshotSystem.cs index b2a509f573..0175cc3f2d 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/SnapshotSystem.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/SnapshotSystem.cs @@ -709,7 +709,7 @@ private void SendSnapshot(ulong clientId) m_ConnectionRtts[clientId].NotifySend(m_ClientData[clientId].SequenceNumber, Time.unscaledTime); var context = m_NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.SnapshotData, NetworkChannel.SnapshotExchange, + MessageQueueContainer.MessageType.SnapshotData, NetworkDelivery.Unreliable, new[] { clientId }, NetworkUpdateLoop.UpdateStage); if (context != null) diff --git a/com.unity.netcode.gameobjects/Runtime/Logging/NetworkLog.cs b/com.unity.netcode.gameobjects/Runtime/Logging/NetworkLog.cs index 36c45f7111..b7e7584b82 100644 --- a/com.unity.netcode.gameobjects/Runtime/Logging/NetworkLog.cs +++ b/com.unity.netcode.gameobjects/Runtime/Logging/NetworkLog.cs @@ -57,7 +57,7 @@ private static void LogServer(string message, LogType logType) if (NetworkManager.Singleton != null && !NetworkManager.Singleton.IsServer && NetworkManager.Singleton.NetworkConfig.EnableNetworkLogs) { var context = NetworkManager.Singleton.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.ServerLog, NetworkChannel.Internal, + MessageQueueContainer.MessageType.ServerLog, NetworkDelivery.ReliableSequenced, new[] { NetworkManager.Singleton.ServerClientId }, NetworkUpdateLoop.UpdateStage); if (context != null) { diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/CustomMessageManager.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/CustomMessageManager.cs index 5c03775c85..8a4d249ed9 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/CustomMessageManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/CustomMessageManager.cs @@ -40,8 +40,8 @@ internal void InvokeUnnamedMessage(ulong clientId, Stream stream) /// /// The clients to send to, sends to everyone if null /// The message stream containing the data - /// The channel to send the data on - public void SendUnnamedMessage(List clientIds, NetworkBuffer buffer, NetworkChannel networkChannel = NetworkChannel.Internal) + /// The QoS to send the data with + public void SendUnnamedMessage(List clientIds, NetworkBuffer buffer, NetworkDelivery networkDelivery = NetworkDelivery.ReliableSequenced) { if (!m_NetworkManager.IsServer) { @@ -49,7 +49,7 @@ public void SendUnnamedMessage(List clientIds, NetworkBuffer buffer, Netw } var context = m_NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.UnnamedMessage, networkChannel, + MessageQueueContainer.MessageType.UnnamedMessage, networkDelivery, clientIds.ToArray(), NetworkUpdateLoop.UpdateStage); if (context != null) { @@ -66,11 +66,11 @@ public void SendUnnamedMessage(List clientIds, NetworkBuffer buffer, Netw /// /// The client to send the message to /// The message stream containing the data - /// The channel tos end the data on - public void SendUnnamedMessage(ulong clientId, NetworkBuffer buffer, NetworkChannel networkChannel = NetworkChannel.Internal) + /// The channel tos end the data on + public void SendUnnamedMessage(ulong clientId, NetworkBuffer buffer, NetworkDelivery networkDelivery = NetworkDelivery.ReliableSequenced) { var context = m_NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.UnnamedMessage, networkChannel, + MessageQueueContainer.MessageType.UnnamedMessage, networkDelivery, new[] { clientId }, NetworkUpdateLoop.UpdateStage); if (context != null) { @@ -173,8 +173,8 @@ public void UnregisterNamedMessageHandler(string name) /// The message name to send /// The client to send the message to /// The message stream containing the data - /// The channel to send the data on - public void SendNamedMessage(string name, ulong clientId, Stream stream, NetworkChannel networkChannel = NetworkChannel.Internal) + /// The channel to send the data on + public void SendNamedMessage(string name, ulong clientId, Stream stream, NetworkDelivery networkDelivery = NetworkDelivery.ReliableSequenced) { ulong hash = 0; switch (m_NetworkManager.NetworkConfig.RpcHashSize) @@ -188,7 +188,7 @@ public void SendNamedMessage(string name, ulong clientId, Stream stream, Network } var context = m_NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.NamedMessage, networkChannel, + MessageQueueContainer.MessageType.NamedMessage, networkDelivery, new[] { clientId }, NetworkUpdateLoop.UpdateStage); if (context != null) { @@ -213,8 +213,8 @@ public void SendNamedMessage(string name, ulong clientId, Stream stream, Network /// The message name to send /// The clients to send to, sends to everyone if null /// The message stream containing the data - /// The channel to send the data on - public void SendNamedMessage(string name, List clientIds, Stream stream, NetworkChannel networkChannel = NetworkChannel.Internal) + /// The channel to send the data on + public void SendNamedMessage(string name, List clientIds, Stream stream, NetworkDelivery networkDelivery = NetworkDelivery.ReliableSequenced) { if (!m_NetworkManager.IsServer) { @@ -233,7 +233,7 @@ public void SendNamedMessage(string name, List clientIds, Stream stream, } var context = m_NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.NamedMessage, networkChannel, + MessageQueueContainer.MessageType.NamedMessage, networkDelivery, clientIds.ToArray(), NetworkUpdateLoop.UpdateStage); if (context != null) { diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/IInternalMessageHandler.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/IInternalMessageHandler.cs index c345ffc3a3..982306d0fd 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/IInternalMessageHandler.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/IInternalMessageHandler.cs @@ -13,7 +13,7 @@ internal interface IInternalMessageHandler void HandleChangeOwner(ulong clientId, Stream stream); void HandleTimeSync(ulong clientId, Stream stream); void HandleNetworkVariableDelta(ulong clientId, Stream stream); - void MessageReceiveQueueItem(ulong clientId, Stream stream, float receiveTime, MessageQueueContainer.MessageType messageType, NetworkChannel receiveChannel); + void MessageReceiveQueueItem(ulong clientId, Stream stream, float receiveTime, MessageQueueContainer.MessageType messageType, NetworkDelivery receiveDelivery); void HandleUnnamedMessage(ulong clientId, Stream stream); void HandleNamedMessage(ulong clientId, Stream stream); void HandleNetworkLog(ulong clientId, Stream stream); diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/InternalMessageHandler.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/InternalMessageHandler.cs index c4af496fc7..b629ebd6b5 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/InternalMessageHandler.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/InternalMessageHandler.cs @@ -231,7 +231,7 @@ public void HandleNetworkVariableDelta(ulong clientId, Stream stream) /// /// /// - public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receiveTime, MessageQueueContainer.MessageType messageType, NetworkChannel receiveChannel) + public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receiveTime, MessageQueueContainer.MessageType messageType, NetworkDelivery receiveDelivery) { if (NetworkManager.IsServer && clientId == NetworkManager.ServerClientId) { @@ -264,7 +264,7 @@ public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receive } var messageQueueContainer = NetworkManager.MessageQueueContainer; - messageQueueContainer.AddQueueItemToInboundFrame(messageType, receiveTime, clientId, (NetworkBuffer)stream, receiveChannel); + messageQueueContainer.AddQueueItemToInboundFrame(messageType, receiveTime, clientId, (NetworkBuffer)stream, receiveDelivery); } public void HandleUnnamedMessage(ulong clientId, Stream stream) diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs index 7e27a36d56..1512752f6a 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageBatcher.cs @@ -9,7 +9,7 @@ internal class MessageBatcher { public class SendStream { - public NetworkChannel NetworkChannel; + public NetworkDelivery NetworkDelivery; public PooledNetworkBuffer Buffer; public PooledNetworkWriter Writer; public bool IsEmpty = true; @@ -131,19 +131,19 @@ public void QueueItem(in MessageFrameItem item, int automaticSendThresholdBytes, if (sendStream.IsEmpty) { sendStream.IsEmpty = false; - sendStream.NetworkChannel = item.NetworkChannel; + sendStream.NetworkDelivery = item.NetworkDelivery; } // If the item is a different channel we have to flush and change channels. // This isn't great if channels are interleaved, but having a different stream // per channel would create ordering issues. - else if (sendStream.NetworkChannel != item.NetworkChannel) + else if (sendStream.NetworkDelivery != item.NetworkDelivery) { sendCallback(clientId, sendStream); // clear the batch that was sent from the SendDict sendStream.Buffer.SetLength(0); sendStream.Buffer.Position = 0; - sendStream.NetworkChannel = item.NetworkChannel; + sendStream.NetworkDelivery = item.NetworkDelivery; } // write the amounts of bytes that are coming up @@ -165,7 +165,7 @@ public void QueueItem(in MessageFrameItem item, int automaticSendThresholdBytes, public delegate void SendCallbackType(ulong clientId, SendStream messageStream); - public delegate void ReceiveCallbackType(NetworkBuffer messageStream, MessageQueueContainer.MessageType messageType, ulong clientId, float receiveTime, NetworkChannel receiveChannel); + public delegate void ReceiveCallbackType(NetworkBuffer messageStream, MessageQueueContainer.MessageType messageType, ulong clientId, float receiveTime, NetworkDelivery receiveDelivery); /// /// SendItems @@ -203,7 +203,7 @@ public void SendItems(int thresholdBytes, SendCallbackType sendCallback) /// the message type to pass back to callback /// the clientId to pass back to callback /// the packet receive time to pass back to callback - public void ReceiveItems(in NetworkBuffer messageBuffer, ReceiveCallbackType receiveCallback, ulong clientId, float receiveTime, NetworkChannel receiveChannel) + public void ReceiveItems(in NetworkBuffer messageBuffer, ReceiveCallbackType receiveCallback, ulong clientId, float receiveTime, NetworkDelivery receiveDelivery) { using var copy = PooledNetworkBuffer.Get(); do @@ -223,7 +223,7 @@ public void ReceiveItems(in NetworkBuffer messageBuffer, ReceiveCallbackType rec Buffer.BlockCopy(messageBuffer.GetBuffer(), (int)position, copy.GetBuffer(), 0, messageSize); var messageType = (MessageQueueContainer.MessageType)copy.ReadByte(); - receiveCallback(copy, messageType, clientId, receiveTime, receiveChannel); + receiveCallback(copy, messageType, clientId, receiveTime, receiveDelivery); // seek over the message // MessageReceiveQueueItem peeks at content, it doesn't advance diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageFrameItem.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageFrameItem.cs index 7d099b3d60..49528ce613 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageFrameItem.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageFrameItem.cs @@ -18,7 +18,7 @@ internal struct MessageFrameItem /// Sender's network Identifier, or recipient identifier for server RPCs /// public ulong NetworkId; - public NetworkChannel NetworkChannel; + public NetworkDelivery NetworkDelivery; /// /// Everything other than server RPCs /// diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs index fec17c426e..360649bcd8 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueContainer.cs @@ -106,7 +106,7 @@ public uint GetStreamBufferFrameCount(MessageQueueHistoryFrame.QueueFrameType qu /// The destinations for this message /// The stage at which the message will be processed on the receiving side /// - internal InternalCommandContext? EnterInternalCommandContext(MessageType messageType, NetworkChannel transportChannel, ulong[] clientIds, NetworkUpdateStage updateStage) + internal InternalCommandContext? EnterInternalCommandContext(MessageType messageType, NetworkDelivery networkDelivery, ulong[] clientIds, NetworkUpdateStage updateStage) { PooledNetworkWriter writer; if (updateStage == NetworkUpdateStage.Initialization) @@ -125,7 +125,7 @@ public uint GetStreamBufferFrameCount(MessageQueueHistoryFrame.QueueFrameType qu return null; } - writer = BeginAddQueueItemToFrame(messageType, Time.realtimeSinceStartup, transportChannel, NetworkManager.LocalClientId, + writer = BeginAddQueueItemToFrame(messageType, Time.realtimeSinceStartup, networkDelivery, NetworkManager.LocalClientId, clientIds, MessageQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); writer.WriteByte((byte)messageType); @@ -287,7 +287,7 @@ private static void ResetQueueHistoryFrame(MessageQueueHistoryFrame messageQueue /// when it was received /// who sent the message /// the message being received - internal void AddQueueItemToInboundFrame(MessageType qItemType, float timeStamp, ulong sourceNetworkId, NetworkBuffer message, NetworkChannel receiveChannel) + internal void AddQueueItemToInboundFrame(MessageType qItemType, float timeStamp, ulong sourceNetworkId, NetworkBuffer message, NetworkDelivery receiveDelivery) { var updateStage = (NetworkUpdateStage)message.ReadByte(); @@ -300,7 +300,7 @@ internal void AddQueueItemToInboundFrame(MessageType qItemType, float timeStamp, messageFrameItem.QueueWriter.WriteUInt16((ushort)qItemType); messageFrameItem.QueueWriter.WriteSingle(timeStamp); messageFrameItem.QueueWriter.WriteUInt64(sourceNetworkId); - messageFrameItem.QueueWriter.WriteByte((byte)receiveChannel); + messageFrameItem.QueueWriter.WriteByte((byte)receiveDelivery); //Inbound we copy the entire packet and store the position offset long streamSize = message.Length - message.Position; @@ -360,13 +360,13 @@ public MessageQueueHistoryFrame GetLoopBackHistoryFrame(MessageQueueHistoryFrame /// /// type of the queue item /// when queue item was submitted - /// channel this queue item is being sent + /// channel this queue item is being sent /// source network id of the sender /// target network id(s) /// type of queue frame /// what update stage the RPC should be invoked on /// PooledNetworkWriter - public PooledNetworkWriter BeginAddQueueItemToFrame(MessageType qItemType, float timeStamp, NetworkChannel networkChannel, ulong sourceNetworkId, ulong[] targetNetworkIds, + public PooledNetworkWriter BeginAddQueueItemToFrame(MessageType qItemType, float timeStamp, NetworkDelivery networkDelivery, ulong sourceNetworkId, ulong[] targetNetworkIds, MessageQueueHistoryFrame.QueueFrameType queueFrameType, NetworkUpdateStage updateStage) { bool getNextFrame = NetworkManager.IsHost && queueFrameType == MessageQueueHistoryFrame.QueueFrameType.Inbound; @@ -378,7 +378,7 @@ public PooledNetworkWriter BeginAddQueueItemToFrame(MessageType qItemType, float messageQueueHistoryFrame.QueueWriter.WriteUInt16((ushort)qItemType); messageQueueHistoryFrame.QueueWriter.WriteSingle(timeStamp); messageQueueHistoryFrame.QueueWriter.WriteUInt64(sourceNetworkId); - messageQueueHistoryFrame.QueueWriter.WriteByte((byte)networkChannel); + messageQueueHistoryFrame.QueueWriter.WriteByte((byte)networkDelivery); // hrm watch if (queueFrameType != MessageQueueHistoryFrame.QueueFrameType.Inbound) { diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueHistoryFrame.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueHistoryFrame.cs index cfa5f11804..bd52e5dc5d 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueHistoryFrame.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueHistoryFrame.cs @@ -78,7 +78,7 @@ internal MessageFrameItem GetCurrentQueueItem() m_CurrentItem.MessageType = (MessageQueueContainer.MessageType)QueueReader.ReadUInt16(); m_CurrentItem.Timestamp = QueueReader.ReadSingle(); m_CurrentItem.NetworkId = QueueReader.ReadUInt64(); - m_CurrentItem.NetworkChannel = (NetworkChannel)QueueReader.ReadByteDirect(); + m_CurrentItem.NetworkDelivery = (NetworkDelivery)QueueReader.ReadByteDirect(); //Clear out any current value for the client ids m_CurrentItem.ClientNetworkIds = new ulong[0]; diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs index f6e5b49422..5cbb297bc9 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/MessageQueue/MessageQueueProcessor.cs @@ -274,16 +274,16 @@ private void SendCallback(ulong clientId, MessageBatcher.SendStream sendStream) var bytes = sendStream.Buffer.GetBuffer(); var sendBuffer = new ArraySegment(bytes, 0, length); - var channel = sendStream.NetworkChannel; + var delivery = sendStream.NetworkDelivery; // If the length is greater than the fragmented threshold, switch to a fragmented channel. // This is kind of a hack to get around issues with certain usages patterns on fragmentation with UNet. // We send everything unfragmented to avoid those issues, and only switch to the fragmented channel // if we have no other choice. if (length > k_FragmentationThreshold) { - channel = NetworkChannel.Fragmented; + delivery = NetworkDelivery.ReliableFragmentedSequenced; } - m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(clientId, sendBuffer, channel); + m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(clientId, sendBuffer, delivery); } /// @@ -293,28 +293,28 @@ private void SendCallback(ulong clientId, MessageBatcher.SendStream sendStream) /// Information on what to send private void SendFrameQueueItem(MessageFrameItem item) { - var channel = item.NetworkChannel; + var delivery = item.NetworkDelivery; // If the length is greater than the fragmented threshold, switch to a fragmented channel. // This is kind of a hack to get around issues with certain usages patterns on fragmentation with UNet. // We send everything unfragmented to avoid those issues, and only switch to the fragmented channel // if we have no other choice. if (item.MessageData.Count > k_FragmentationThreshold) { - channel = NetworkChannel.Fragmented; + delivery = NetworkDelivery.ReliableFragmentedSequenced; } 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); + m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(item.NetworkId, item.MessageData, delivery); break; } default: { foreach (ulong clientid in item.ClientNetworkIds) { - m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(clientid, item.MessageData, channel); + m_MessageQueueContainer.NetworkManager.NetworkConfig.NetworkTransport.Send(clientid, item.MessageData, delivery); } break; diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/NetworkVariableBase.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/NetworkVariableBase.cs index 16f0257dc7..6f81e20b2c 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/NetworkVariableBase.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/NetworkVariableBase.cs @@ -13,10 +13,11 @@ public void Initialize(NetworkBehaviour networkBehaviour) { m_NetworkBehaviour = networkBehaviour; } + /// /// The name of the channel to be used for syncing /// - public const NetworkChannel NetworkVariableChannel = NetworkChannel.NetworkVariable; + public const NetworkDelivery NetworkVariableDelivery = NetworkDelivery.ReliableSequenced; protected NetworkVariableBase(NetworkVariableReadPermission readPermIn = NetworkVariableReadPermission.Everyone) { diff --git a/com.unity.netcode.gameobjects/Runtime/Profiling/InternalMessageHandlerProfilingDecorator.cs b/com.unity.netcode.gameobjects/Runtime/Profiling/InternalMessageHandlerProfilingDecorator.cs index 6f627a65b7..84a6ca403a 100644 --- a/com.unity.netcode.gameobjects/Runtime/Profiling/InternalMessageHandlerProfilingDecorator.cs +++ b/com.unity.netcode.gameobjects/Runtime/Profiling/InternalMessageHandlerProfilingDecorator.cs @@ -93,7 +93,7 @@ public void HandleNetworkVariableDelta(ulong clientId, Stream stream) m_HandleNetworkVariableDelta.End(); } - public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receiveTime, MessageQueueContainer.MessageType messageType, NetworkChannel receiveChannel) + public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receiveTime, MessageQueueContainer.MessageType messageType, NetworkDelivery receiveDelivery) { switch (messageType) { @@ -108,7 +108,7 @@ public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receive break; } - m_MessageHandler.MessageReceiveQueueItem(clientId, stream, receiveTime, messageType, receiveChannel); + m_MessageHandler.MessageReceiveQueueItem(clientId, stream, receiveTime, messageType, receiveDelivery); switch (messageType) { diff --git a/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs b/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs index 17061d854e..96a2620401 100644 --- a/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs @@ -175,7 +175,7 @@ public class NetworkSceneManager private NetworkManager m_NetworkManager { get; } private const MessageQueueContainer.MessageType k_MessageType = MessageQueueContainer.MessageType.SceneEvent; - private const NetworkChannel k_ChannelType = NetworkChannel.Internal; + private const NetworkDelivery k_ChannelType = NetworkDelivery.ReliableSequenced; private const NetworkUpdateStage k_NetworkUpdateStage = NetworkUpdateStage.EarlyUpdate; diff --git a/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs b/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs index 5c603f41f2..b9002b71ae 100644 --- a/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs @@ -103,7 +103,7 @@ internal void RemoveOwnership(NetworkObject networkObject) networkObject.OwnerClientIdInternal = null; var context = NetworkManager.MessageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.ChangeOwner, NetworkChannel.Internal, + MessageQueueContainer.MessageType.ChangeOwner, NetworkDelivery.ReliableSequenced, NetworkManager.ConnectedClientsIds, NetworkUpdateLoop.UpdateStage); if (context != null) { @@ -153,7 +153,7 @@ internal void ChangeOwnership(NetworkObject networkObject, ulong clientId) ulong[] clientIds = NetworkManager.ConnectedClientsIds; var messageQueueContainer = NetworkManager.MessageQueueContainer; var context = messageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.ChangeOwner, NetworkChannel.Internal, + MessageQueueContainer.MessageType.ChangeOwner, NetworkDelivery.ReliableSequenced, clientIds, NetworkUpdateLoop.UpdateStage); if (context != null) { @@ -384,7 +384,7 @@ internal void SendSpawnCallForObject(ulong clientId, NetworkObject networkObject var messageQueueContainer = NetworkManager.MessageQueueContainer; var context = messageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.CreateObject, NetworkChannel.Internal, + MessageQueueContainer.MessageType.CreateObject, NetworkDelivery.ReliableSequenced, new ulong[] { clientId }, NetworkUpdateLoop.UpdateStage); if (context != null) { @@ -669,7 +669,7 @@ internal void OnDespawnObject(NetworkObject networkObject, bool destroyGameObjec ulong[] clientIds = NetworkManager.ConnectedClientsIds; var context = messageQueueContainer.EnterInternalCommandContext( - MessageQueueContainer.MessageType.DestroyObject, NetworkChannel.Internal, + MessageQueueContainer.MessageType.DestroyObject, NetworkDelivery.ReliableSequenced, m_TargetClientIds.ToArray(), NetworkUpdateStage.PostLateUpdate); if (context != null) { diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/MultiplexTransportAdapter.cs b/com.unity.netcode.gameobjects/Runtime/Transports/MultiplexTransportAdapter.cs index ecf660b8ac..81d7dd0055 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/MultiplexTransportAdapter.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/MultiplexTransportAdapter.cs @@ -84,7 +84,7 @@ public override void Init() } } - public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment payload, out float receiveTime) + public override NetworkEvent PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment payload, out float receiveTime) { if (m_LastProcessedTransportIndex >= Transports.Length - 1) { @@ -97,7 +97,7 @@ public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel ne if (Transports[i].IsSupported) { - var networkEvent = Transports[i].PollEvent(out ulong connectionId, out networkChannel, out payload, out receiveTime); + var networkEvent = Transports[i].PollEvent(out ulong connectionId, out networkDelivery, out payload, out receiveTime); if (networkEvent != NetworkEvent.Nothing) { @@ -109,18 +109,18 @@ public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel ne } clientId = 0; - networkChannel = 0; + networkDelivery = NetworkDelivery.ReliableSequenced; payload = new ArraySegment(); receiveTime = 0; return NetworkEvent.Nothing; } - public override void Send(ulong clientId, ArraySegment data, NetworkChannel networkChannel) + public override void Send(ulong clientId, ArraySegment data, NetworkDelivery networkDelivery) { GetMultiplexTransportDetails(clientId, out byte transportId, out ulong connectionId); - Transports[transportId].Send(connectionId, data, networkChannel); + Transports[transportId].Send(connectionId, data, networkDelivery); } public override void Shutdown() diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs b/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs index 555294cb90..1b4cc6c600 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs @@ -4,24 +4,6 @@ namespace Unity.Netcode { - public enum NetworkChannel : byte - { - Internal, - TimeSync, - ReliableRpc, - UnreliableRpc, - SyncChannel, - DefaultMessage, - PositionUpdate, - AnimationUpdate, - NavAgentState, - NavAgentCorrection, - NetworkVariable, //todo: this channel will be used for snapshotting and should then go from reliable to unreliable - SnapshotExchange, - Fragmented, - ChannelUnused, // <<-- must be present, and must be last - }; - /// /// A network transport /// @@ -57,62 +39,10 @@ internal void ResetChannelCache() m_ChannelsCache = null; } - public TransportChannel[] NETCODE_CHANNELS - { - get - { - if (m_ChannelsCache == null) - { - var transportChannels = new List(); - - OnChannelRegistration?.Invoke(transportChannels); - - m_ChannelsCache = new TransportChannel[NETCODE_INTERNAL_CHANNELS.Length + transportChannels.Count]; - - for (int i = 0; i < NETCODE_INTERNAL_CHANNELS.Length; i++) - { - m_ChannelsCache[i] = NETCODE_INTERNAL_CHANNELS[i]; - } - - for (int i = 0; i < transportChannels.Count; i++) - { - m_ChannelsCache[i + NETCODE_INTERNAL_CHANNELS.Length] = transportChannels[i]; - } - } - - return m_ChannelsCache; - } - } - - /// - /// The channels the Netcode will use when sending internal messages. - /// -#pragma warning disable IDE1006 // disable naming rule violation check - private readonly TransportChannel[] NETCODE_INTERNAL_CHANNELS = -#pragma warning restore IDE1006 // restore naming rule violation check - { - new TransportChannel(NetworkChannel.Internal, NetworkDelivery.ReliableSequenced), - new TransportChannel(NetworkChannel.ReliableRpc, NetworkDelivery.ReliableSequenced), - new TransportChannel(NetworkChannel.UnreliableRpc, NetworkDelivery.UnreliableSequenced), - new TransportChannel(NetworkChannel.TimeSync, NetworkDelivery.Unreliable), - new TransportChannel(NetworkChannel.SyncChannel, NetworkDelivery.Unreliable), - new TransportChannel(NetworkChannel.DefaultMessage, NetworkDelivery.Reliable), - new TransportChannel(NetworkChannel.PositionUpdate, NetworkDelivery.UnreliableSequenced), - new TransportChannel(NetworkChannel.AnimationUpdate, NetworkDelivery.ReliableSequenced), - new TransportChannel(NetworkChannel.NavAgentState, NetworkDelivery.ReliableSequenced), - new TransportChannel(NetworkChannel.NavAgentCorrection, NetworkDelivery.UnreliableSequenced), - // todo: Currently, fragmentation support needed to deal with oversize packets encounterable with current pre-snapshot code". - // todo: once we have snapshotting able to deal with missing frame, this should be unreliable - new TransportChannel(NetworkChannel.NetworkVariable, NetworkDelivery.ReliableSequenced), - new TransportChannel(NetworkChannel.SnapshotExchange, NetworkDelivery.Unreliable), - new TransportChannel(NetworkChannel.Fragmented, NetworkDelivery.ReliableFragmentedSequenced), - - }; - /// /// Delegate for transport events. /// - public delegate void TransportEventDelegate(NetworkEvent type, ulong clientId, NetworkChannel networkChannel, ArraySegment payload, float receiveTime); + public delegate void TransportEventDelegate(NetworkEvent type, ulong clientId, NetworkDelivery networkDelivery, ArraySegment payload, float receiveTime); /// /// Occurs when the transport has a new transport event. Can be used to make an event based transport instead of a poll based. @@ -128,9 +58,9 @@ public TransportChannel[] NETCODE_CHANNELS /// The channel the data arrived at. This is usually used when responding to things like RPCs /// The incoming data payload /// The time the event was received, as reported by Time.realtimeSinceStartup. - protected void InvokeOnTransportEvent(NetworkEvent type, ulong clientId, NetworkChannel networkChannel, ArraySegment payload, float receiveTime) + protected void InvokeOnTransportEvent(NetworkEvent type, ulong clientId, NetworkDelivery networkDelivery, ArraySegment payload, float receiveTime) { - OnTransportEvent?.Invoke(type, clientId, networkChannel, payload, receiveTime); + OnTransportEvent?.Invoke(type, clientId, networkDelivery, payload, receiveTime); } /// @@ -139,7 +69,7 @@ protected void InvokeOnTransportEvent(NetworkEvent type, ulong clientId, Network /// The clientId to send to /// The data to send /// The channel to send data to - public abstract void Send(ulong clientId, ArraySegment data, NetworkChannel networkChannel); + public abstract void Send(ulong clientId, ArraySegment data, NetworkDelivery networkDelivery); /// /// Polls for incoming events, with an extra output parameter to report the precise time the event was received. @@ -149,7 +79,7 @@ protected void InvokeOnTransportEvent(NetworkEvent type, ulong clientId, Network /// The incoming data payload /// The time the event was received, as reported by Time.realtimeSinceStartup. /// Returns the event type - public abstract NetworkEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment payload, out float receiveTime); + public abstract NetworkEvent PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment payload, out float receiveTime); /// /// Connects client to server diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/Tests/Editor/TransportTest.cs b/com.unity.netcode.gameobjects/Runtime/Transports/Tests/Editor/TransportTest.cs index c9d5b73600..e1129e364b 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/Tests/Editor/TransportTest.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/Tests/Editor/TransportTest.cs @@ -17,54 +17,4 @@ private void ForceNetworkObjectShutdown() DestroyImmediate(networkObjects[i]); } } - - // A Test behaves as an ordinary method - [Test] - public void UNetCustomChannelRegistrationTest() - { - ForceNetworkObjectShutdown(); - - var o = new GameObject(); - var nm = (NetworkManager)o.AddComponent(typeof(NetworkManager)); - nm.SetSingleton(); - nm.NetworkConfig = new NetworkConfig(); - var ut = (UNetTransport)o.AddComponent(typeof(UNetTransport)); - - ut.ServerListenPort = 7777; - nm.NetworkConfig.NetworkTransport = ut; - - byte customChannel = 0; - - // test 1: add a legit channel. - ut.Channels.Add(new UNetChannel { Id = (byte)(NetworkChannel.ChannelUnused + customChannel), Type = QosType.Unreliable }); - - try - { - nm.StartServer(); - } - catch - { - Assert.Fail("The UNet transport won't allow registration of a legit user channel"); - } - - nm.StopServer(); - nm.Shutdown(); - - ut.Channels.Clear(); - // test 2: add a bogus channel (one that intersects with the netcode built-in ones.) Expect failure - ut.Channels.Add(new UNetChannel { Id = (byte)NetworkChannel.Internal, Type = QosType.Unreliable }); - - try - { - nm.StartServer(); - Assert.Fail("The UNet transport allowed registration of an netcode-reserved channel"); - } - catch (Exception ex) - { - Debug.Log(ex.Message); - } - - nm.StopServer(); - nm.Shutdown(); - } } diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/TransportChannel.cs b/com.unity.netcode.gameobjects/Runtime/Transports/TransportChannel.cs index af35804a93..2030f05ba7 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/TransportChannel.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/TransportChannel.cs @@ -8,17 +8,11 @@ namespace Unity.Netcode [Serializable] public struct TransportChannel { - public TransportChannel(NetworkChannel channel, NetworkDelivery delivery) + public TransportChannel(NetworkDelivery delivery) { - Channel = channel; Delivery = delivery; } - /// - /// Channel identifier - /// - public NetworkChannel Channel; - /// /// Delivery type /// diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/UNET/UNetTransport.cs b/com.unity.netcode.gameobjects/Runtime/Transports/UNET/UNetTransport.cs index b93d9b3abe..4f07c9caea 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/UNET/UNetTransport.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/UNET/UNetTransport.cs @@ -43,8 +43,8 @@ public enum SendMode private WeakReference m_TemporaryBufferReference; // Lookup / translation - private readonly Dictionary m_ChannelNameToId = new Dictionary(); - private readonly Dictionary m_ChannelIdToName = new Dictionary(); + private readonly Dictionary m_ChannelNameToId = new Dictionary(); + private readonly Dictionary m_ChannelIdToName = new Dictionary(); private int m_ServerConnectionId; private int m_ServerHostId; @@ -54,11 +54,11 @@ public enum SendMode #if UNITY_EDITOR private void OnValidate() { - for (int i = 0; i < Channels.Count; i++) - { - // Set the channels to a incrementing value - Channels[i].Id = (byte)((byte)NetworkChannel.ChannelUnused + i); - } +//hrm for (int i = 0; i < Channels.Count; i++) +//hrm { +//hrm // Set the channels to a incrementing value +//hrm Channels[i].Id = (byte)((byte)NetworkDelivery.ChannelUnused + i); +//hrm } } #endif @@ -84,19 +84,19 @@ protected void LateUpdate() } } - public override void Send(ulong clientId, ArraySegment data, NetworkChannel networkChannel) + public override void Send(ulong clientId, ArraySegment data, NetworkDelivery networkDelivery) { GetUNetConnectionDetails(clientId, out byte hostId, out ushort connectionId); int channelId = 0; - if (m_ChannelNameToId.TryGetValue(networkChannel, out int value)) + if (m_ChannelNameToId.TryGetValue(networkDelivery, out int value)) { channelId = value; } else { - channelId = m_ChannelNameToId[NetworkChannel.Internal]; + channelId = m_ChannelNameToId[NetworkDelivery.ReliableSequenced]; } byte[] buffer; @@ -153,7 +153,7 @@ public void SendQueued(ulong clientId) } #endif - public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment payload, out float receiveTime) + public override NetworkEvent PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment payload, out float receiveTime) { var eventType = UnityEngine.Networking.NetworkTransport.Receive(out int hostId, out int connectionId, out int channelId, m_MessageBuffer, m_MessageBuffer.Length, out int receivedSize, out byte error); @@ -183,13 +183,13 @@ public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel ne payload = new ArraySegment(m_MessageBuffer, 0, receivedSize); } - if (m_ChannelIdToName.TryGetValue(channelId, out NetworkChannel value)) + if (m_ChannelIdToName.TryGetValue(channelId, out NetworkDelivery value)) { - networkChannel = value; + networkDelivery = value; } else { - networkChannel = NetworkChannel.Internal; + networkDelivery = NetworkDelivery.ReliableSequenced; } if (m_ConnectTask != null && hostId == m_ServerHostId && connectionId == m_ServerConnectionId) @@ -349,28 +349,19 @@ public ConnectionConfig GetConfig() { var connectionConfig = new ConnectionConfig(); - // Built-in netcode channels - for (int i = 0; i < NETCODE_CHANNELS.Length; i++) + foreach (int i in Enum.GetValues(typeof(NetworkDelivery))) { - int channelId = AddNetcodeChannel(NETCODE_CHANNELS[i].Delivery, connectionConfig); - - m_ChannelIdToName.Add(channelId, NETCODE_CHANNELS[i].Channel); - m_ChannelNameToId.Add(NETCODE_CHANNELS[i].Channel, channelId); +// Console.WriteLine($" {i}" ); } - // Custom user-added channels - for (int i = 0; i < Channels.Count; i++) - { - int channelId = AddUNETChannel(Channels[i].Type, connectionConfig); - - if (m_ChannelNameToId.ContainsKey((NetworkChannel)Channels[i].Id)) - { - throw new InvalidChannelException($"Channel {channelId} already exists"); - } - - m_ChannelIdToName.Add(channelId, (NetworkChannel)Channels[i].Id); - m_ChannelNameToId.Add((NetworkChannel)Channels[i].Id, channelId); - } + // Built-in netcode channels +//!! for (int i = 0; i < NETCODE_CHANNELS.Length; i++) +//!! { +//!! int channelId = AddNetcodeChannel(NETCODE_CHANNELS[i].Delivery, connectionConfig); +//!! +//!! m_ChannelIdToName.Add(channelId, NETCODE_CHANNELS[i].Delivery); +//!! m_ChannelNameToId.Add(NETCODE_CHANNELS[i].Delivery, channelId); +//!! } connectionConfig.MaxSentMessageQueueSize = (ushort)MaxSentMessageQueueSize; diff --git a/com.unity.netcode.gameobjects/Tests/Editor/DummyMessageHandler.cs b/com.unity.netcode.gameobjects/Tests/Editor/DummyMessageHandler.cs index 974d77a656..d47c302352 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/DummyMessageHandler.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/DummyMessageHandler.cs @@ -30,7 +30,7 @@ public DummyMessageHandler(NetworkManager networkManager) public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receiveTime, MessageQueueContainer.MessageType messageType, - NetworkChannel receiveChannel) + NetworkDelivery receiveDelivery) { VerifyCalled(nameof(MessageReceiveQueueItem)); if (NetworkManager) @@ -41,7 +41,7 @@ public void MessageReceiveQueueItem(ulong clientId, Stream stream, float receive // That's what will then call back into this for the others. var messageQueueContainer = NetworkManager.MessageQueueContainer; messageQueueContainer.AddQueueItemToInboundFrame(messageType, receiveTime, clientId, - (NetworkBuffer)stream, receiveChannel); + (NetworkBuffer)stream, receiveDelivery); messageQueueContainer.ProcessAndFlushMessageQueue( MessageQueueContainer.MessageQueueProcessingTypes.Receive, NetworkUpdateLoop.UpdateStage); messageQueueContainer.AdvanceFrameHistory(MessageQueueHistoryFrame.QueueFrameType.Inbound); diff --git a/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs index 53ffaa74f0..880533236d 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/MessageBatcherTests.cs @@ -22,7 +22,7 @@ public void SendWithThreshold() { NetworkId = 123, ClientNetworkIds = new ulong[] { 123 }, - NetworkChannel = NetworkChannel.ChannelUnused + 123, + NetworkDelivery = NetworkDelivery.ReliableSequenced, MessageType = i % 2 == 0 ? MessageQueueContainer.MessageType.ServerRpc : MessageQueueContainer.MessageType.ClientRpc, MessageData = new ArraySegment(randomData, 0, randomData.Length) }; @@ -71,7 +71,7 @@ public void SendWithoutThreshold() { NetworkId = 123, ClientNetworkIds = new ulong[] { 123 }, - NetworkChannel = NetworkChannel.ChannelUnused + 123, + NetworkDelivery = NetworkDelivery.ReliableSequenced, MessageType = i % 2 == 0 ? MessageQueueContainer.MessageType.ServerRpc : MessageQueueContainer.MessageType.ClientRpc, MessageData = new ArraySegment(randomData, 0, randomData.Length) }; diff --git a/com.unity.netcode.gameobjects/Tests/Editor/NetworkManagerMessageHandlerTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/NetworkManagerMessageHandlerTests.cs index 45727c22f8..4288fdc2b8 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/NetworkManagerMessageHandlerTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/NetworkManagerMessageHandlerTests.cs @@ -48,72 +48,72 @@ public void MessageHandlerReceivedMessageServerClient() LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleConnectionRequest)); using var messageStream0 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ConnectionRequest, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream0.GetBuffer(), 0, (int)messageStream0.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream0.GetBuffer(), 0, (int)messageStream0.Length), 0); // Should not cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); using var messageStream1 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ConnectionApproved, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream1.GetBuffer(), 0, (int)messageStream1.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream1.GetBuffer(), 0, (int)messageStream1.Length), 0); // Should not cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); using var messageStream2 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.CreateObject, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream2.GetBuffer(), 0, (int)messageStream2.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream2.GetBuffer(), 0, (int)messageStream2.Length), 0); // Should not cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); using var messageStream3 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.DestroyObject, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream3.GetBuffer(), 0, (int)messageStream3.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream3.GetBuffer(), 0, (int)messageStream3.Length), 0); // Should not cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleSceneEvent)); using var messageStream4 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.SceneEvent, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream4.GetBuffer(), 0, (int)messageStream4.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream4.GetBuffer(), 0, (int)messageStream4.Length), 0); // Should not cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); using var messageStream5 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ChangeOwner, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream5.GetBuffer(), 0, (int)messageStream5.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream5.GetBuffer(), 0, (int)messageStream5.Length), 0); // Should not cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); using var messageStream6 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.TimeSync, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream6.GetBuffer(), 0, (int)messageStream6.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream6.GetBuffer(), 0, (int)messageStream6.Length), 0); // Should cause log (server and client) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleNetworkVariableDelta)); using var messageStream7 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.NetworkVariableDelta, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream7.GetBuffer(), 0, (int)messageStream7.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream7.GetBuffer(), 0, (int)messageStream7.Length), 0); // Should cause log (server and client) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleUnnamedMessage)); using var messageStream8 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.UnnamedMessage, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream8.GetBuffer(), 0, (int)messageStream8.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream8.GetBuffer(), 0, (int)messageStream8.Length), 0); // Should cause log (server and client) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleNamedMessage)); using var messageStream9 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.NamedMessage, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream9.GetBuffer(), 0, (int)messageStream9.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream9.GetBuffer(), 0, (int)messageStream9.Length), 0); // Should cause log (server only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleNetworkLog)); using var messageStream10 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ServerLog, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream10.GetBuffer(), 0, (int)messageStream10.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream10.GetBuffer(), 0, (int)messageStream10.Length), 0); // Stop server to trigger full shutdown networkManager.StopServer(); @@ -132,76 +132,76 @@ public void MessageHandlerReceivedMessageServerClient() // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); using var messageStream11 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ConnectionRequest, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream11.GetBuffer(), 0, (int)messageStream11.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream11.GetBuffer(), 0, (int)messageStream11.Length), 0); // Should cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleConnectionApproved)); using var messageStream12 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ConnectionApproved, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream12.GetBuffer(), 0, (int)messageStream12.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream12.GetBuffer(), 0, (int)messageStream12.Length), 0); // Should cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleAddObject)); using var messageStream13 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.CreateObject, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream13.GetBuffer(), 0, (int)messageStream13.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream13.GetBuffer(), 0, (int)messageStream13.Length), 0); // Should cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleDestroyObject)); using var messageStream14 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.DestroyObject, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream14.GetBuffer(), 0, (int)messageStream14.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream14.GetBuffer(), 0, (int)messageStream14.Length), 0); // Should cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleSceneEvent)); using var messageStream15 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.SceneEvent, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream15.GetBuffer(), 0, (int)messageStream15.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream15.GetBuffer(), 0, (int)messageStream15.Length), 0); // Should cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleChangeOwner)); using var messageStream16 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ChangeOwner, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream16.GetBuffer(), 0, (int)messageStream16.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream16.GetBuffer(), 0, (int)messageStream16.Length), 0); // Should cause log (client only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleTimeSync)); using var messageStream17 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.TimeSync, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream17.GetBuffer(), 0, (int)messageStream17.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream17.GetBuffer(), 0, (int)messageStream17.Length), 0); // Should cause log (server and client) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleNetworkVariableDelta)); using var messageStream18 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.NetworkVariableDelta, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream18.GetBuffer(), 0, (int)messageStream18.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream18.GetBuffer(), 0, (int)messageStream18.Length), 0); // Should cause log (server and client) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleUnnamedMessage)); using var messageStream19 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.UnnamedMessage, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream19.GetBuffer(), 0, (int)messageStream19.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream19.GetBuffer(), 0, (int)messageStream19.Length), 0); // Should cause log (server and client) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.HandleNamedMessage)); using var messageStream20 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.NamedMessage, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream20.GetBuffer(), 0, (int)messageStream20.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream20.GetBuffer(), 0, (int)messageStream20.Length), 0); // Should not cause log (server only) // Everything should log MessageReceiveQueueItem even if ignored LogAssert.Expect(LogType.Log, nameof(DummyMessageHandler.MessageReceiveQueueItem)); using var messageStream21 = MessagePacker.WrapMessage(MessageQueueContainer.MessageType.ServerLog, inputBuffer, networkManager.MessageQueueContainer.IsUsingBatching()); - networkManager.HandleIncomingData(0, NetworkChannel.Internal, new ArraySegment(messageStream21.GetBuffer(), 0, (int)messageStream21.Length), 0); + networkManager.HandleIncomingData(0, NetworkDelivery.ReliableSequenced, new ArraySegment(messageStream21.GetBuffer(), 0, (int)messageStream21.Length), 0); // Full cleanup networkManager.StopClient(); @@ -219,14 +219,14 @@ public void MessageHandlerReceivedMessageServerClient() internal class DummyTransport : NetworkTransport { public override ulong ServerClientId { get; } = 0; - public override void Send(ulong clientId, ArraySegment data, NetworkChannel networkChannel) + public override void Send(ulong clientId, ArraySegment data, NetworkDelivery networkDelivery) { } - public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment payload, out float receiveTime) + public override NetworkEvent PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment payload, out float receiveTime) { clientId = 0; - networkChannel = NetworkChannel.Internal; + networkDelivery = NetworkDelivery.ReliableSequenced; payload = new ArraySegment(); receiveTime = 0; return NetworkEvent.Nothing; diff --git a/com.unity.netcode.gameobjects/Tests/Editor/Profiling/InternalMessageHandlerProfilingDecoratorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/Profiling/InternalMessageHandlerProfilingDecoratorTests.cs index e9b119ec05..a20aa5e35b 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/Profiling/InternalMessageHandlerProfilingDecoratorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/Profiling/InternalMessageHandlerProfilingDecoratorTests.cs @@ -97,7 +97,7 @@ public void HandleNetworkLogCallsUnderlyingHandler() [Test] public void MessageReceiveQueueItemCallsUnderlyingHandler() { - m_Decorator.MessageReceiveQueueItem(0, null, 0.0f, MessageQueueContainer.MessageType.None, NetworkChannel.Internal); + m_Decorator.MessageReceiveQueueItem(0, null, 0.0f, MessageQueueContainer.MessageType.None, NetworkDelivery.ReliableSequenced); LogAssert.Expect(LogType.Log, nameof(m_Decorator.MessageReceiveQueueItem)); } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/RpcQueueTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/RpcQueueTests.cs index 4cc85f24d1..b1d9eb7e3c 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/RpcQueueTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/RpcQueueTests.cs @@ -137,8 +137,9 @@ public void RpcQueueContainerClass() // Increment our offset into our randomly generated data for next entry; indexOffset = (i * messageChunkSize) % maximumOffsetValue; - var writer = rpcQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ServerRpc, Time.realtimeSinceStartup, NetworkChannel.DefaultMessage, - senderNetworkId, psuedoClients, MessageQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); + var writer = rpcQueueContainer.BeginAddQueueItemToFrame(MessageQueueContainer.MessageType.ServerRpc, Time.realtimeSinceStartup, + NetworkDelivery.Reliable, senderNetworkId, psuedoClients, MessageQueueHistoryFrame.QueueFrameType.Outbound, + NetworkUpdateStage.PostLateUpdate); writer.WriteByteArray(randomGeneratedDataArray, messageChunkSize); @@ -161,7 +162,7 @@ public void RpcQueueContainerClass() Assert.AreEqual(currentQueueItem.NetworkId, senderNetworkId); Assert.AreEqual(currentQueueItem.MessageType, MessageQueueContainer.MessageType.ServerRpc); Assert.AreEqual(currentQueueItem.UpdateStage, NetworkUpdateStage.PostLateUpdate); - Assert.AreEqual(currentQueueItem.NetworkChannel, NetworkChannel.DefaultMessage); + Assert.AreEqual(currentQueueItem.NetworkDelivery, NetworkDelivery.Reliable); // Validate the data in the queue Assert.IsTrue(NetworkManagerHelper.BuffersMatch(currentQueueItem.MessageData.Offset, messageChunkSize, currentQueueItem.MessageData.Array, randomGeneratedDataArray)); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransport.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransport.cs index 5381a22fb3..a3b2981aaa 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransport.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransport.cs @@ -19,7 +19,7 @@ private struct Event public NetworkEvent Type; public ulong ConnectionId; public ArraySegment Data; - public NetworkChannel Channel; + public NetworkDelivery Delivery; } private class Peer @@ -46,7 +46,7 @@ public override void DisconnectLocalClient() m_LocalConnection.IncomingBuffer.Enqueue(new Event { Type = NetworkEvent.Disconnect, - Channel = NetworkChannel.Internal, + Delivery = NetworkDelivery.ReliableSequenced, ConnectionId = m_LocalConnection.ConnectionId, Data = new ArraySegment() }); @@ -76,7 +76,7 @@ public override void DisconnectRemoteClient(ulong clientId) m_Peers[clientId].IncomingBuffer.Enqueue(new Event { Type = NetworkEvent.Disconnect, - Channel = NetworkChannel.Internal, + Delivery = NetworkDelivery.ReliableSequenced, ConnectionId = clientId, Data = new ArraySegment() }); @@ -85,7 +85,7 @@ public override void DisconnectRemoteClient(ulong clientId) m_LocalConnection.IncomingBuffer.Enqueue(new Event { Type = NetworkEvent.Disconnect, - Channel = NetworkChannel.Internal, + Delivery = NetworkDelivery.ReliableSequenced, ConnectionId = clientId, Data = new ArraySegment() }); @@ -122,7 +122,7 @@ public override void Shutdown() onePeer.Value.IncomingBuffer.Enqueue(new Event { Type = NetworkEvent.Disconnect, - Channel = NetworkChannel.Internal, + Delivery = NetworkDelivery.ReliableSequenced, ConnectionId = LocalClientId, Data = new ArraySegment() }); @@ -222,7 +222,7 @@ public override SocketTasks StartServer() return SocketTask.Done.AsTasks(); } - public override void Send(ulong clientId, ArraySegment data, NetworkChannel channel) + public override void Send(ulong clientId, ArraySegment data, NetworkDelivery delivery) { if (m_LocalConnection != null) { @@ -241,19 +241,19 @@ public override void Send(ulong clientId, ArraySegment data, NetworkChanne Type = NetworkEvent.Data, ConnectionId = m_LocalConnection.ConnectionId, Data = new ArraySegment(copy), - Channel = channel + Delivery = delivery }); } } - public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel channel, out ArraySegment payload, out float receiveTime) + public override NetworkEvent PollEvent(out ulong clientId, out NetworkDelivery delivery, out ArraySegment payload, out float receiveTime) { if (m_LocalConnection != null) { if (m_LocalConnection.IncomingBuffer.Count == 0) { clientId = 0; - channel = NetworkChannel.Internal; + delivery = NetworkDelivery.ReliableSequenced; payload = new ArraySegment(); receiveTime = 0; return NetworkEvent.Nothing; @@ -262,7 +262,7 @@ public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel ch var peerEvent = m_LocalConnection.IncomingBuffer.Dequeue(); clientId = peerEvent.ConnectionId; - channel = peerEvent.Channel; + delivery = peerEvent.Delivery; payload = peerEvent.Data; receiveTime = 0; @@ -271,7 +271,7 @@ public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel ch else { clientId = 0; - channel = NetworkChannel.Internal; + delivery = NetworkDelivery.ReliableSequenced; payload = new ArraySegment(); receiveTime = 0; return NetworkEvent.Nothing; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransportTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransportTests.cs index 6d5f3246d0..51d28e7a26 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransportTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Transport/SIPTransportTests.cs @@ -19,19 +19,19 @@ public void SendReceiveData() client.Init(); client.StartClient(); - NetworkEvent serverEvent = server.PollEvent(out ulong clientId, out NetworkChannel _, out _, out _); - NetworkEvent clientEvent = client.PollEvent(out ulong serverId, out NetworkChannel _, out _, out _); + NetworkEvent serverEvent = server.PollEvent(out ulong clientId, out NetworkDelivery _, out _, out _); + NetworkEvent clientEvent = client.PollEvent(out ulong serverId, out NetworkDelivery _, out _, out _); // Make sure both connected Assert.True(serverEvent == NetworkEvent.Connect); Assert.True(clientEvent == NetworkEvent.Connect); // Send data - server.Send(clientId, new ArraySegment(Encoding.ASCII.GetBytes("Hello Client")), NetworkChannel.Internal); - client.Send(serverId, new ArraySegment(Encoding.ASCII.GetBytes("Hello Server")), NetworkChannel.Internal); + server.Send(clientId, new ArraySegment(Encoding.ASCII.GetBytes("Hello Client")), NetworkDelivery.ReliableSequenced); + client.Send(serverId, new ArraySegment(Encoding.ASCII.GetBytes("Hello Server")), NetworkDelivery.ReliableSequenced); - serverEvent = server.PollEvent(out ulong newClientId, out NetworkChannel _, out ArraySegment serverPayload, out _); - clientEvent = client.PollEvent(out ulong newServerId, out NetworkChannel _, out ArraySegment clientPayload, out _); + serverEvent = server.PollEvent(out ulong newClientId, out NetworkDelivery _, out ArraySegment serverPayload, out _); + clientEvent = client.PollEvent(out ulong newServerId, out NetworkDelivery _, out ArraySegment clientPayload, out _); // Make sure we got data Assert.True(serverEvent == NetworkEvent.Data);