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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -260,14 +260,14 @@ public void SendToClient(NativeArray<byte> packet, ulong clientId, int index)
}
}

public override unsafe void Send(ulong clientId, ArraySegment<byte> data, NetworkChannel networkChannel)
public override unsafe void Send(ulong clientId, ArraySegment<byte> 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);
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm assuming actually all these writes can be deleted, because this is probably so that the receiver can route the packet to the right channel, and if we don't care about channels this can be deleted.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh yeah, that'd be great!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is cirrect we can get rid of them.

writer.WriteInt(data.Count);

fixed (byte* dataArrayPtr = data.Array)
Expand All @@ -278,10 +278,10 @@ public override unsafe void Send(ulong clientId, ArraySegment<byte> data, Networ
SendToClient(writer.AsNativeArray(), peerId, pipelineIndex);
}

public override NetcodeEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment<byte> payload, out float receiveTime)
public override NetcodeEvent PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment<byte> payload, out float receiveTime)
{
clientId = 0;
networkChannel = NetworkChannel.ChannelUnused;
networkDelivery = NetworkDelivery.ReliableSequenced; //??
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we actually need to pop this now? because we did this before so the NetworkManager would know the channel but thats not required anymore?


payload = new ArraySegment<byte>(Array.Empty<byte>());
receiveTime = 0;
Expand Down Expand Up @@ -315,20 +315,20 @@ private void Update()
{
Marshal.Copy((IntPtr)message.Data, arr, 0, size);
var payload = new ArraySegment<byte>(arr);
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, (NetworkChannel)message.ChannelId, payload, Time.realtimeSinceStartup);
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, (NetworkDelivery)message.ChannelId, payload, Time.realtimeSinceStartup);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above does the above caller need to know the QoS?

}

break;
case NetcodeEvent.Connect:
{
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkChannel.ChannelUnused, new ArraySegment<byte>(), Time.realtimeSinceStartup);
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkDelivery.ReliableSequenced, new ArraySegment<byte>(), Time.realtimeSinceStartup);
}
break;
case NetcodeEvent.Disconnect:
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkChannel.ChannelUnused, new ArraySegment<byte>(), Time.realtimeSinceStartup);
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkDelivery.ReliableSequenced, new ArraySegment<byte>(), Time.realtimeSinceStartup);
break;
case NetcodeEvent.Nothing:
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkChannel.ChannelUnused, new ArraySegment<byte>(), Time.realtimeSinceStartup);
InvokeOnTransportEvent((NetcodeEvent)message.Type, clientId, NetworkDelivery.ReliableSequenced, new ArraySegment<byte>(), Time.realtimeSinceStartup);
break;
}
}
Expand Down
30 changes: 15 additions & 15 deletions com.unity.netcode.gameobjects/Runtime/Core/NetworkBehaviour.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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
Expand All @@ -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);
}

Expand Down Expand Up @@ -365,7 +365,7 @@ public virtual void OnNetworkObjectParentChanged(NetworkObject parentNetworkObje
private bool m_VarInit = false;

private readonly List<HashSet<int>> m_ChannelMappedNetworkVariableIndexes = new List<HashSet<int>>();
private readonly List<NetworkChannel> m_ChannelsForNetworkVariableGroups = new List<NetworkChannel>();
private readonly List<NetworkDelivery> m_ChannelsForNetworkVariableGroups = new List<NetworkDelivery>();
internal readonly List<NetworkVariableBase> NetworkVariableFields = new List<NetworkVariableBase>();

private static Dictionary<Type, FieldInfo[]> s_FieldTypes = new Dictionary<Type, FieldInfo[]>();
Expand Down Expand Up @@ -437,26 +437,26 @@ internal void InitializeVariables()

{
// Create index map for channels
var firstLevelIndex = new Dictionary<NetworkChannel, int>();
var firstLevelIndex = new Dictionary<NetworkDelivery, int>();
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<int>());
}

m_ChannelMappedNetworkVariableIndexes[firstLevelIndex[networkChannel]].Add(i);
m_ChannelMappedNetworkVariableIndexes[firstLevelIndex[networkDelivery]].Add(i);
}
}
}
Expand Down
26 changes: 13 additions & 13 deletions com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1069,8 +1069,8 @@ private void OnNetworkEarlyUpdate()
do
{
processedEvents++;
networkEvent = NetworkConfig.NetworkTransport.PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment<byte> payload, out float receiveTime);
HandleRawTransportPoll(networkEvent, clientId, networkChannel, payload, receiveTime);
networkEvent = NetworkConfig.NetworkTransport.PollEvent(out ulong clientId, out NetworkDelivery networkDelivery, out ArraySegment<byte> 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);
}
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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<byte> payload, float receiveTime)
{
switch (networkEvent)
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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<byte> data, float receiveTime)
internal void HandleIncomingData(ulong clientId, NetworkDelivery networkDelivery, ArraySegment<byte> data, float receiveTime)
{
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_HandleIncomingData.Begin();
Expand All @@ -1258,22 +1258,22 @@ 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);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume the batching needs to know about the QoS?

}
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();
#endif
}

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);
}

/// <summary>
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
{
Expand Down
4 changes: 2 additions & 2 deletions com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
Loading