Skip to content

Commit ad41b78

Browse files
committed
Added different tickrates for different things
1 parent 9c58763 commit ad41b78

File tree

2 files changed

+63
-49
lines changed

2 files changed

+63
-49
lines changed

MLAPI/Data/NetworkingConfiguration.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ public class NetworkingConfiguration
1515
internal HashSet<ushort> RegisteredPassthroughMessageTypes = new HashSet<ushort>();
1616
public List<string> RegisteredScenes = new List<string>();
1717
public int MessageBufferSize = 65535;
18-
public int Tickrate = 64;
18+
public int ReceiveTickrate = 64;
19+
public int SendTickrate = 64;
20+
public int EventTickrate = 64;
1921
public int MaxConnections = 100;
2022
public int Port = 7777;
2123
public string Address = "127.0.0.1";

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 60 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ private void OnValidate()
7373
private ConnectionConfig Init(NetworkingConfiguration netConfig)
7474
{
7575
NetworkConfig = netConfig;
76-
76+
lastSendTickTime = 0;
77+
lastEventTickTime = 0;
78+
lastReceiveTickTime = 0;
7779
pendingClients = new HashSet<int>();
7880
connectedClients = new Dictionary<int, NetworkedClient>();
7981
messageBuffer = new byte[NetworkConfig.MessageBufferSize];
@@ -292,75 +294,85 @@ private void Shutdown()
292294
private int channelId;
293295
private int receivedSize;
294296
private byte error;
295-
private float lastTickTime;
297+
private float lastReceiveTickTime;
298+
private float lastSendTickTime;
299+
private float lastEventTickTime;
296300
private void Update()
297301
{
298-
if(isListening && (Time.time - lastTickTime >= (1f / NetworkConfig.Tickrate)))
302+
if(isListening)
299303
{
300-
foreach (KeyValuePair<int, NetworkedClient> pair in connectedClients)
301-
{
302-
NetworkTransport.SendQueuedMessages(hostId, pair.Key, out error);
303-
}
304-
NetworkEventType eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error);
305-
NetworkError networkError = (NetworkError)error;
306-
if (networkError == NetworkError.Timeout)
304+
if(Time.time - lastSendTickTime >= (1f / NetworkConfig.SendTickrate))
307305
{
308-
//Client timed out.
309-
if (isServer)
306+
foreach (KeyValuePair<int, NetworkedClient> pair in connectedClients)
310307
{
311-
OnClientDisconnect(clientId);
312-
return;
308+
NetworkTransport.SendQueuedMessages(hostId, pair.Key, out error);
313309
}
310+
lastSendTickTime = Time.time;
314311
}
315-
else if (networkError != NetworkError.Ok)
316-
{
317-
Debug.LogWarning("MLAPI: NetworkTransport receive error: " + networkError.ToString());
318-
return;
319-
}
320-
321-
switch (eventType)
312+
if(Time.time - lastReceiveTickTime >= (1f / NetworkConfig.ReceiveTickrate))
322313
{
323-
case NetworkEventType.ConnectEvent:
314+
NetworkEventType eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error);
315+
NetworkError networkError = (NetworkError)error;
316+
if (networkError == NetworkError.Timeout)
317+
{
318+
//Client timed out.
324319
if (isServer)
325320
{
326-
pendingClients.Add(clientId);
327-
StartCoroutine(ApprovalTimeout(clientId));
321+
OnClientDisconnect(clientId);
322+
return;
328323
}
329-
else
330-
{
331-
int sizeOfStream = 32;
332-
if (NetworkConfig.ConnectionApproval)
333-
sizeOfStream += 2 + NetworkConfig.ConnectionData.Length;
324+
}
325+
else if (networkError != NetworkError.Ok)
326+
{
327+
Debug.LogWarning("MLAPI: NetworkTransport receive error: " + networkError.ToString());
328+
return;
329+
}
334330

335-
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
331+
switch (eventType)
332+
{
333+
case NetworkEventType.ConnectEvent:
334+
if (isServer)
336335
{
337-
using (BinaryWriter writer = new BinaryWriter(writeStream))
336+
pendingClients.Add(clientId);
337+
StartCoroutine(ApprovalTimeout(clientId));
338+
}
339+
else
340+
{
341+
int sizeOfStream = 32;
342+
if (NetworkConfig.ConnectionApproval)
343+
sizeOfStream += 2 + NetworkConfig.ConnectionData.Length;
344+
345+
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
338346
{
339-
writer.Write(NetworkConfig.GetConfig());
340-
if (NetworkConfig.ConnectionApproval)
347+
using (BinaryWriter writer = new BinaryWriter(writeStream))
341348
{
342-
writer.Write((ushort)NetworkConfig.ConnectionData.Length);
343-
writer.Write(NetworkConfig.ConnectionData);
349+
writer.Write(NetworkConfig.GetConfig());
350+
if (NetworkConfig.ConnectionApproval)
351+
{
352+
writer.Write((ushort)NetworkConfig.ConnectionData.Length);
353+
writer.Write(NetworkConfig.ConnectionData);
354+
}
344355
}
356+
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", writeStream.GetBuffer());
345357
}
346-
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", writeStream.GetBuffer());
347358
}
348-
}
349-
break;
350-
case NetworkEventType.DataEvent:
351-
HandleIncomingData(clientId, messageBuffer, channelId);
352-
break;
353-
case NetworkEventType.DisconnectEvent:
354-
if (isServer)
355-
OnClientDisconnect(clientId);
356-
break;
359+
break;
360+
case NetworkEventType.DataEvent:
361+
HandleIncomingData(clientId, messageBuffer, channelId);
362+
break;
363+
case NetworkEventType.DisconnectEvent:
364+
if (isServer)
365+
OnClientDisconnect(clientId);
366+
break;
367+
}
368+
lastReceiveTickTime = Time.time;
357369
}
358-
if (isServer)
370+
if (isServer && (Time.time - lastEventTickTime >= (1f / NetworkConfig.EventTickrate)))
359371
{
360372
LagCompensationManager.AddFrames();
361-
NetworkedObject.InvokeSyncvarUpdate();
373+
NetworkedObject.InvokeSyncvafrUpdate();
374+
lastEventTickTime = Time.time;
362375
}
363-
lastTickTime = Time.time;
364376
}
365377
}
366378

0 commit comments

Comments
 (0)