Skip to content

Commit 4bf1965

Browse files
committed
feat(transport): Rewrote transport system and upgraded clientId to 64bit
Changes all ClientIds to 64bit integers and reworks the transport system to be more modern. BREAKING CHANGE: Changes the transport interface and uses 64bit clientIds
1 parent 9d29f80 commit 4bf1965

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1407
-1582
lines changed

MLAPI-Editor/NetworkedObjectEditor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public override void OnInspectorGUI()
5757

5858
if (showObservers)
5959
{
60-
HashSet<uint>.Enumerator observerClientIds = networkedObject.GetObservers();
60+
HashSet<ulong>.Enumerator observerClientIds = networkedObject.GetObservers();
6161

6262
EditorGUI.indentLevel += 1;
6363

MLAPI-Editor/NetworkingManagerEditor.cs

Lines changed: 223 additions & 54 deletions
Large diffs are not rendered by default.

MLAPI-Examples/ConvenienceMessagingPing.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public override void NetworkStart()
2020
[ServerRPC(RequireOwnership = false)]
2121
public void PingServer(int number)
2222
{
23-
uint sender = ExecutingRpcSender;
23+
ulong sender = ExecutingRpcSender;
2424

2525
Debug.LogFormat("Got pinged by {0} with the number {1}", sender, number);
2626

MLAPI-Examples/ManagerExamples.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace MLAPI_Examples
1010
// Features example calls for things often needed for things like Game managers
1111
public class ManagerExamples : NetworkedBehaviour
1212
{
13-
public NetworkedObject GetPlayerGameObject(uint clientId)
13+
public NetworkedObject GetPlayerGameObject(ulong clientId)
1414
{
1515
return SpawnManager.GetPlayerObject(clientId);
1616
}
@@ -23,7 +23,7 @@ public NetworkedObject GetLocalPlayerObject()
2323

2424
#if !DISABLE_CRYPTOGRAPHY
2525
// Only runs on server
26-
public byte[] GetAESKeyForClient(uint clientId)
26+
public byte[] GetAESKeyForClient(ulong clientId)
2727
{
2828
return CryptographyHelper.GetClientKey(clientId);
2929
}
@@ -36,7 +36,7 @@ public byte[] GetAESKeyForServer()
3636
#endif
3737

3838
// Contains player object, owned objects, cryptography keys and more
39-
public NetworkedClient GetClient(uint clientId)
39+
public NetworkedClient GetClient(ulong clientId)
4040
{
4141
return NetworkingManager.Singleton.ConnectedClients[clientId];
4242
}

MLAPI-Examples/UnetNetworkingManagerHud.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ private void OnGUI()
1616
{
1717
Regex digitsOnly = new Regex(@"[^\d]");
1818

19-
if (serverPort == -1) serverPort = NetworkingManager.Singleton.NetworkConfig.ConnectPort;
20-
if (hostPort == -1) hostPort = NetworkingManager.Singleton.NetworkConfig.ConnectPort;
21-
if (connectPort == -1) connectPort = NetworkingManager.Singleton.NetworkConfig.ConnectPort;
22-
if (string.IsNullOrEmpty(connectAddress)) connectAddress = NetworkingManager.Singleton.NetworkConfig.ConnectAddress;
19+
//if (serverPort == -1) serverPort = NetworkingManager.Singleton.NetworkConfig.ConnectPort;
20+
//if (hostPort == -1) hostPort = NetworkingManager.Singleton.NetworkConfig.ConnectPort;
21+
//if (connectPort == -1) connectPort = NetworkingManager.Singleton.NetworkConfig.ConnectPort;
22+
//if (string.IsNullOrEmpty(connectAddress)) connectAddress = NetworkingManager.Singleton.NetworkConfig.ConnectAddress;
2323

2424
if (!NetworkingManager.Singleton.IsListening)
2525
{
@@ -29,7 +29,7 @@ private void OnGUI()
2929
{
3030
if (GUILayout.Button("Start Host", GUILayout.MinWidth(150)))
3131
{
32-
UnetTransport.ServerTransports[0].Port = hostPort;
32+
// UnetTransport.ServerTransports[0].Port = hostPort;
3333
NetworkingManager.Singleton.StartHost();
3434
}
3535

@@ -46,7 +46,7 @@ private void OnGUI()
4646
{
4747
if (GUILayout.Button("Start Server", GUILayout.MinWidth(150)))
4848
{
49-
UnetTransport.ServerTransports[0].Port = serverPort;
49+
//UnetTransport.ServerTransports[0].Port = serverPort;
5050
NetworkingManager.Singleton.StartServer();
5151
}
5252

@@ -63,8 +63,8 @@ private void OnGUI()
6363
{
6464
if (GUILayout.Button("Connect Client", GUILayout.MinWidth(150)))
6565
{
66-
NetworkingManager.Singleton.NetworkConfig.ConnectPort = connectPort;
67-
NetworkingManager.Singleton.NetworkConfig.ConnectAddress = connectAddress;
66+
//NetworkingManager.Singleton.NetworkConfig.ConnectPort = connectPort;
67+
//NetworkingManager.Singleton.NetworkConfig.ConnectAddress = connectAddress;
6868
NetworkingManager.Singleton.StartClient();
6969
}
7070

MLAPI/Data/AttributeMessageMode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace MLAPI
3232
/// <summary>
3333
/// Delegate definition for performance RPC's.
3434
/// </summary>
35-
public delegate void RpcDelegate(uint clientId, Stream stream);
35+
public delegate void RpcDelegate(ulong clientId, Stream stream);
3636

3737
internal class ReflectionMethod
3838
{

MLAPI/Data/Channel.cs

Lines changed: 0 additions & 21 deletions
This file was deleted.

MLAPI/Data/NetworkConfig.cs

Lines changed: 3 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,9 @@ public class NetworkConfig
2121
/// </summary>
2222
public ushort ProtocolVersion = 0;
2323
/// <summary>
24-
/// The transport to be used
25-
/// </summary>
26-
public DefaultTransport Transport = DefaultTransport.UNET;
27-
/// <summary>
2824
/// The transport hosts the sever uses
2925
/// </summary>
30-
public IUDPTransport NetworkTransport = null;
31-
/// <summary>
32-
/// Channels used by the NetworkedTransport
33-
/// </summary>
34-
[HideInInspector]
35-
public List<Channel> Channels = new List<Channel>();
26+
public Transport NetworkTransport = null;
3627
/// <summary>
3728
/// A list of SceneNames that can be used during networked games.
3829
/// </summary>
@@ -50,10 +41,6 @@ public class NetworkConfig
5041
[HideInInspector]
5142
internal ulong PlayerPrefabHash;
5243
/// <summary>
53-
/// The size of the receive message buffer. This is the max message size including any MLAPI overheads.
54-
/// </summary>
55-
public int MessageBufferSize = 1024;
56-
/// <summary>
5744
/// Amount of times per second the receive queue is emptied and all messages inside are processed.
5845
/// </summary>
5946
public int ReceiveTickrate = 64;
@@ -76,18 +63,6 @@ public class NetworkConfig
7663
/// </summary>
7764
public int MaxBehaviourUpdatesPerTick = -1;
7865
/// <summary>
79-
/// The max amount of Clients that can connect.
80-
/// </summary>
81-
public int MaxConnections = 100;
82-
/// <summary>
83-
/// The port for the NetworkTransport to use when connecting
84-
/// </summary>
85-
public int ConnectPort = 7777;
86-
/// <summary>
87-
/// The address to connect to
88-
/// </summary>
89-
public string ConnectAddress = "127.0.0.1";
90-
/// <summary>
9166
/// The amount of seconds to wait for handshake to complete before timing out a client
9267
/// </summary>
9368
public int ClientConnectionBufferTimeout = 10;
@@ -130,7 +105,6 @@ public class NetworkConfig
130105
/// <summary>
131106
/// Wheter or not to enable the ECDHE key exchange to allow for encryption and authentication of messages
132107
/// </summary>
133-
[Header("Cryptography")]
134108
public bool EnableEncryption = false;
135109
/// <summary>
136110
/// Wheter or not to enable signed diffie hellman key exchange.
@@ -173,7 +147,6 @@ public byte[] ServerX509CertificateBytes
173147

174148
private void Sort()
175149
{
176-
Channels = Channels.OrderBy(x => x.Name).ToList();
177150
RegisteredScenes.Sort();
178151
}
179152

@@ -189,29 +162,18 @@ public string ToBase64()
189162
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
190163
{
191164
writer.WriteUInt16Packed(config.ProtocolVersion);
192-
writer.WriteBits((byte)config.Transport, 5);
193-
194-
writer.WriteUInt16Packed((ushort)config.Channels.Count);
195-
for (int i = 0; i < config.Channels.Count; i++)
196-
{
197-
writer.WriteString(config.Channels[i].Name);
198-
writer.WriteBits((byte)config.Channels[i].Type, 5);
199-
}
200165

201166
writer.WriteUInt16Packed((ushort)config.RegisteredScenes.Count);
167+
202168
for (int i = 0; i < config.RegisteredScenes.Count; i++)
203169
{
204170
writer.WriteString(config.RegisteredScenes[i]);
205171
}
206172

207-
writer.WriteInt32Packed(config.MessageBufferSize);
208173
writer.WriteInt32Packed(config.ReceiveTickrate);
209174
writer.WriteInt32Packed(config.MaxReceiveEventsPerTickRate);
210175
writer.WriteInt32Packed(config.SendTickrate);
211176
writer.WriteInt32Packed(config.EventTickrate);
212-
writer.WriteInt32Packed(config.MaxConnections);
213-
writer.WriteInt32Packed(config.ConnectPort);
214-
writer.WriteString(config.ConnectAddress);
215177
writer.WriteInt32Packed(config.ClientConnectionBufferTimeout);
216178
writer.WriteBool(config.ConnectionApproval);
217179
writer.WriteInt32Packed(config.SecondsHistory);
@@ -241,37 +203,20 @@ public void FromBase64(string base64)
241203
{
242204
using (PooledBitReader reader = PooledBitReader.Get(stream))
243205
{
244-
245206
config.ProtocolVersion = reader.ReadUInt16Packed();
246-
config.Transport = (DefaultTransport)reader.ReadBits(5);
247-
248-
ushort channelCount = reader.ReadUInt16Packed();
249-
config.Channels.Clear();
250-
for (int i = 0; i < channelCount; i++)
251-
{
252-
Channel channel = new Channel()
253-
{
254-
Name = reader.ReadString().ToString(),
255-
Type = (ChannelType)reader.ReadBits(5)
256-
};
257-
config.Channels.Add(channel);
258-
}
259207

260208
ushort sceneCount = reader.ReadUInt16Packed();
261209
config.RegisteredScenes.Clear();
210+
262211
for (int i = 0; i < sceneCount; i++)
263212
{
264213
config.RegisteredScenes.Add(reader.ReadString().ToString());
265214
}
266215

267-
config.MessageBufferSize = reader.ReadInt32Packed();
268216
config.ReceiveTickrate = reader.ReadInt32Packed();
269217
config.MaxReceiveEventsPerTickRate = reader.ReadInt32Packed();
270218
config.SendTickrate = reader.ReadInt32Packed();
271219
config.EventTickrate = reader.ReadInt32Packed();
272-
config.MaxConnections = reader.ReadInt32Packed();
273-
config.ConnectPort = reader.ReadInt32Packed();
274-
config.ConnectAddress = reader.ReadString().ToString();
275220
config.ClientConnectionBufferTimeout = reader.ReadInt32Packed();
276221
config.ConnectionApproval = reader.ReadBool();
277222
config.SecondsHistory = reader.ReadInt32Packed();
@@ -307,12 +252,6 @@ public ulong GetConfig(bool cache = true)
307252
writer.WriteUInt16Packed(ProtocolVersion);
308253
writer.WriteString(MLAPIConstants.MLAPI_PROTOCOL_VERSION);
309254

310-
for (int i = 0; i < Channels.Count; i++)
311-
{
312-
writer.WriteString(Channels[i].Name);
313-
writer.WriteByte((byte)Channels[i].Type);
314-
}
315-
316255
for (int i = 0; i < RegisteredScenes.Count; i++)
317256
{
318257
writer.WriteString(RegisteredScenes[i]);

MLAPI/Data/NetworkProfiler/NetworkProfiler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,13 @@ internal static void EndTick()
113113
CurrentTick = null;
114114
}
115115

116-
internal static void StartEvent(TickType eventType, uint bytes, int channelId, byte messageType)
116+
internal static void StartEvent(TickType eventType, uint bytes, string channelName, byte messageType)
117117
{
118118
if (!isRunning)
119119
return;
120120
if (CurrentTick == null)
121121
return;
122-
string channelName = MessageManager.reverseChannels.ContainsKey(channelId) ? MessageManager.reverseChannels[channelId] : "INVALID_CHANNEL";
122+
123123
string messageName = MLAPIConstants.MESSAGE_NAMES.Length < messageType ? MLAPIConstants.MESSAGE_NAMES[messageType] : "INVALID_MESSAGE_TYPE";
124124

125125
CurrentTick.StartEvent(eventType, bytes, channelName, messageName);

MLAPI/Data/NetworkedClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class NetworkedClient
1010
/// <summary>
1111
/// The Id of the NetworkedClient
1212
/// </summary>
13-
public uint ClientId;
13+
public ulong ClientId;
1414
/// <summary>
1515
/// The PlayerObject of the Client
1616
/// </summary>

0 commit comments

Comments
 (0)