Skip to content

Commit b2045f1

Browse files
refactor: reference channels as bytes through the transport layer (#455)
1 parent 400a2be commit b2045f1

8 files changed

Lines changed: 49 additions & 70 deletions

File tree

com.unity.multiplayer.mlapi/Runtime/Core/NetworkingManager.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -789,10 +789,7 @@ private void NetworkPreUpdate()
789789
do
790790
{
791791
processedEvents++;
792-
eventType = NetworkConfig.NetworkTransport.PollEvent(out ulong clientId, out string channelName, out ArraySegment<byte> payload, out float receiveTime);
793-
// [MTT-443] This can be improved if the Transport implementations return the channel as a byte vs. string
794-
// Holding off on this; refactoring the Transport package will be a separate step
795-
byte channel = Transport.GetChannelByte(channelName);
792+
eventType = NetworkConfig.NetworkTransport.PollEvent(out ulong clientId, out byte channel, out ArraySegment<byte> payload, out float receiveTime);
796793
HandleRawTransportPoll(eventType, clientId, channel, payload, receiveTime);
797794

798795
// 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)

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

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@ internal static void Send(ulong clientId, byte messageType, byte channel, BitStr
2424
NetworkProfiler.StartEvent(TickType.Send, (uint) stream.Length, channel,
2525
MLAPIConstants.MESSAGE_NAMES[messageType]);
2626

27-
// [MTT-433] refactor so that the transports receive a byte, not a string
28-
// saving for a separate effort since transports live in their own package
29-
string channelName = Transport.GetChannelString(channel);
30-
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientId, new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channelName);
27+
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientId, new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channel);
3128
ProfilerStatManager.bytesSent.Record((int)stream.Length);
3229

3330
NetworkProfiler.EndEvent();
@@ -58,10 +55,7 @@ internal static void Send(byte messageType, byte channel, BitStream messageStrea
5855
if (NetworkingManager.Singleton.IsServer && NetworkingManager.Singleton.ConnectedClientsList[i].ClientId == NetworkingManager.Singleton.ServerClientId)
5956
continue;
6057

61-
// [MTT-433] refactor so that the transports receive a byte, not a string
62-
// saving for a separate effort since transports live in their own package
63-
string channelName = Transport.GetChannelString(channel);
64-
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channelName);
58+
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channel);
6559
ProfilerStatManager.bytesSent.Record((int)stream.Length);
6660
}
6761
NetworkProfiler.EndEvent();
@@ -99,10 +93,7 @@ internal static void Send(byte messageType, byte channel, List<ulong> clientIds,
9993
if (NetworkingManager.Singleton.IsServer && clientIds[i] == NetworkingManager.Singleton.ServerClientId)
10094
continue;
10195

102-
// [MTT-433] refactor so that the transports receive a byte, not a string
103-
// saving for a separate effort since transports live in their own package
104-
string channelName = Transport.GetChannelString(channel);
105-
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientIds[i], new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channelName);
96+
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientIds[i], new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channel);
10697
ProfilerStatManager.bytesSent.Record((int)stream.Length);
10798
}
10899
NetworkProfiler.EndEvent();
@@ -138,10 +129,7 @@ internal static void Send(byte messageType, byte channel, ulong clientIdToIgnore
138129
(NetworkingManager.Singleton.IsServer && NetworkingManager.Singleton.ConnectedClientsList[i].ClientId == NetworkingManager.Singleton.ServerClientId))
139130
continue;
140131

141-
// [MTT-433] refactor so that the transports receive a byte, not a string
142-
// saving for a separate effort since transports live in their own package
143-
string channelName = Transport.GetChannelString(channel);
144-
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channelName);
132+
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId, new ArraySegment<byte>(stream.GetBuffer(), 0, (int)stream.Length), channel);
145133
ProfilerStatManager.bytesSent.Record((int)stream.Length);
146134
}
147135
NetworkProfiler.EndEvent();

com.unity.multiplayer.mlapi/Runtime/Messaging/RPCQueue/RPCQueueProcessing.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,7 @@ private static void SendCallback(ulong clientId, MLAPI.MessageBatcher.SendStream
215215
var bytes = sendStream.Stream.GetBuffer();
216216
ArraySegment<byte> sendBuffer = new ArraySegment<byte>(bytes, 0, length);
217217

218-
// [MTT-433] refactor so that the transports receive a byte, not a string
219-
// saving for a separate effort since transports live in their own package
220-
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientId, sendBuffer, Transport.GetChannelString(sendStream.channel));
218+
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientId, sendBuffer, sendStream.channel);
221219
}
222220

223221
/// <summary>
@@ -231,9 +229,7 @@ private void SendFrameQueueItem(FrameQueueItem queueItem)
231229
{
232230
case RpcQueueContainer.QueueItemType.ServerRpc:
233231
{
234-
// [MTT-433] refactor so that the transports receive a byte, not a string
235-
// saving for a separate effort since transports live in their own package
236-
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(queueItem.networkId, queueItem.messageData, Transport.GetChannelString(queueItem.channel));
232+
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(queueItem.networkId, queueItem.messageData, queueItem.channel);
237233

238234
//For each packet sent, we want to record how much data we have sent
239235
ProfilerStatManager.bytesSent.Record((int)queueItem.streamSize);
@@ -244,9 +240,7 @@ private void SendFrameQueueItem(FrameQueueItem queueItem)
244240
{
245241
foreach (ulong clientid in queueItem.clientIds)
246242
{
247-
// [MTT-433] refactor so that the transports receive a byte, not a string
248-
// saving for a separate effort since transports live in their own package
249-
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientid, queueItem.messageData, Transport.GetChannelString(queueItem.channel));
243+
NetworkingManager.Singleton.NetworkConfig.NetworkTransport.Send(clientid, queueItem.messageData, queueItem.channel);
250244

251245
//For each packet sent, we want to record how much data we have sent
252246
ProfilerStatManager.bytesSent.Record((int)queueItem.streamSize);

com.unity.multiplayer.mlapi/Runtime/Transports/MultiplexTransportAdapter.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public override void Init()
8282
}
8383
}
8484

85-
public override NetEventType PollEvent(out ulong clientId, out string channelName, out ArraySegment<byte> payload, out float receiveTime)
85+
public override NetEventType PollEvent(out ulong clientId, out byte channel, out ArraySegment<byte> payload, out float receiveTime)
8686
{
8787
if (_lastProcessedTransportIndex >= Transports.Length - 1)
8888
_lastProcessedTransportIndex = 0;
@@ -93,7 +93,7 @@ public override NetEventType PollEvent(out ulong clientId, out string channelNam
9393

9494
if (Transports[i].IsSupported)
9595
{
96-
NetEventType @eventType = Transports[i].PollEvent(out ulong connectionId, out channelName, out payload, out receiveTime);
96+
NetEventType @eventType = Transports[i].PollEvent(out ulong connectionId, out channel, out payload, out receiveTime);
9797

9898
if (@eventType != NetEventType.Nothing)
9999
{
@@ -105,18 +105,18 @@ public override NetEventType PollEvent(out ulong clientId, out string channelNam
105105
}
106106

107107
clientId = 0;
108-
channelName = null;
108+
channel = 0;
109109
payload = new ArraySegment<byte>();
110110
receiveTime = 0;
111111

112112
return NetEventType.Nothing;
113113
}
114114

115-
public override void Send(ulong clientId, ArraySegment<byte> data, string channelName)
115+
public override void Send(ulong clientId, ArraySegment<byte> data, byte channel)
116116
{
117117
GetMultiplexTransportDetails(clientId, out byte transportId, out ulong connectionId);
118118

119-
Transports[transportId].Send(connectionId, data, channelName);
119+
Transports[transportId].Send(connectionId, data, channel);
120120
}
121121

122122
public override void Shutdown()

com.unity.multiplayer.mlapi/Runtime/Transports/Transport.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ protected void InvokeOnTransportEvent(NetEventType type, ulong clientId, byte ch
138138
/// <param name="clientId">The clientId to send to</param>
139139
/// <param name="data">The data to send</param>
140140
/// <param name="channelName">The channel to send data to</param>
141-
public abstract void Send(ulong clientId, ArraySegment<byte> data, string channelName);
141+
public abstract void Send(ulong clientId, ArraySegment<byte> data, byte channel);
142142

143143
/// <summary>
144144
/// Polls for incoming events, with an extra output parameter to report the precise time the event was received.
@@ -148,7 +148,7 @@ protected void InvokeOnTransportEvent(NetEventType type, ulong clientId, byte ch
148148
/// <param name="payload">The incoming data payload</param>
149149
/// <param name="receiveTime">The time the event was received, as reported by Time.realtimeSinceStartup.</param>
150150
/// <returns>Returns the event type</returns>
151-
public abstract NetEventType PollEvent(out ulong clientId, out string channelName, out ArraySegment<byte> payload, out float receiveTime);
151+
public abstract NetEventType PollEvent(out ulong clientId, out byte channel, out ArraySegment<byte> payload, out float receiveTime);
152152

153153
/// <summary>
154154
/// Connects client to server

com.unity.multiplayer.mlapi/Runtime/Transports/UNET/UnetChannel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ public class UnetChannel
1212
/// <summary>
1313
/// The name of the channel
1414
/// </summary>
15-
public string Name;
15+
public byte Id;
1616

1717
/// <summary>
1818
/// The type of channel
1919
/// </summary>
2020
public QosType Type;
2121
}
22-
}
22+
}

com.unity.multiplayer.mlapi/Runtime/Transports/UNET/UnetTransport.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public enum SendMode
4141
private WeakReference temporaryBufferReference;
4242

4343
// Lookup / translation
44-
private readonly Dictionary<string, int> channelNameToId = new Dictionary<string, int>();
45-
private readonly Dictionary<int, string> channelIdToName = new Dictionary<int, string>();
44+
private readonly Dictionary<byte, int> channelNameToId = new Dictionary<byte, int>();
45+
private readonly Dictionary<int, byte> channelIdToName = new Dictionary<int, byte>();
4646
private int serverConnectionId;
4747
private int serverHostId;
4848

@@ -63,19 +63,19 @@ protected void LateUpdate()
6363
}
6464
}
6565

66-
public override void Send(ulong clientId, ArraySegment<byte> data, string channelName)
66+
public override void Send(ulong clientId, ArraySegment<byte> data, byte channel)
6767
{
6868
GetUnetConnectionDetails(clientId, out byte hostId, out ushort connectionId);
6969

7070
int channelId = 0;
7171

72-
if (channelNameToId.ContainsKey(channelName))
72+
if (channelNameToId.ContainsKey(channel))
7373
{
74-
channelId = channelNameToId[channelName];
74+
channelId = channelNameToId[channel];
7575
}
7676
else
7777
{
78-
channelId = channelNameToId["MLAPI_INTERNAL"];
78+
channelId = channelNameToId[MLAPI_INTERNAL_CHANNEL];
7979
}
8080

8181
byte[] buffer;
@@ -125,7 +125,7 @@ public void SendQueued(ulong clientId)
125125
RelayTransport.SendQueuedMessages(hostId, connectionId, out byte error);
126126
}
127127

128-
public override NetEventType PollEvent(out ulong clientId, out string channelName, out ArraySegment<byte> payload, out float receiveTime)
128+
public override NetEventType PollEvent(out ulong clientId, out byte channel, out ArraySegment<byte> payload, out float receiveTime)
129129
{
130130
NetworkEventType eventType = RelayTransport.Receive(out int hostId, out int connectionId, out int channelId, messageBuffer, messageBuffer.Length, out int receivedSize, out byte error);
131131

@@ -159,11 +159,11 @@ public override NetEventType PollEvent(out ulong clientId, out string channelNam
159159

160160
if (channelIdToName.ContainsKey(channelId))
161161
{
162-
channelName = channelIdToName[channelId];
162+
channel = channelIdToName[channelId];
163163
}
164164
else
165165
{
166-
channelName = "MLAPI_INTERNAL";
166+
channel = MLAPI_INTERNAL_CHANNEL;
167167
}
168168

169169
if (connectTask != null && hostId == serverHostId && connectionId == serverConnectionId)
@@ -349,16 +349,16 @@ public ConnectionConfig GetConfig()
349349
{
350350
int channelId = AddMLAPIChannel(MLAPI_CHANNELS[i].Type, config);
351351

352-
channelIdToName.Add(channelId, MLAPI_CHANNELS[i].Name);
353-
channelNameToId.Add(MLAPI_CHANNELS[i].Name, channelId);
352+
channelIdToName.Add(channelId, MLAPI_CHANNELS[i].Id);
353+
channelNameToId.Add(MLAPI_CHANNELS[i].Id, channelId);
354354
}
355355

356356
for (int i = 0; i < Channels.Count; i++)
357357
{
358358
int channelId = AddUNETChannel(Channels[i].Type, config);
359359

360-
channelIdToName.Add(channelId, Channels[i].Name);
361-
channelNameToId.Add(Channels[i].Name, channelId);
360+
channelIdToName.Add(channelId, Channels[i].Id);
361+
channelNameToId.Add(Channels[i].Id, channelId);
362362
}
363363

364364
config.MaxSentMessageQueueSize = (ushort)MaxSentMessageQueueSize;

0 commit comments

Comments
 (0)