Modified tickrate behaviour to empty buffers

This commit is contained in:
Albin Corén 2018-03-09 10:28:38 +01:00
parent ad41b78acc
commit 6cb02f35de

View File

@ -301,7 +301,7 @@ namespace MLAPI
{ {
if(isListening) if(isListening)
{ {
if(Time.time - lastSendTickTime >= (1f / NetworkConfig.SendTickrate)) if((Time.time - lastSendTickTime >= (1f / NetworkConfig.SendTickrate)) || NetworkConfig.SendTickrate <= 0)
{ {
foreach (KeyValuePair<int, NetworkedClient> pair in connectedClients) foreach (KeyValuePair<int, NetworkedClient> pair in connectedClients)
{ {
@ -309,68 +309,72 @@ namespace MLAPI
} }
lastSendTickTime = Time.time; lastSendTickTime = Time.time;
} }
if(Time.time - lastReceiveTickTime >= (1f / NetworkConfig.ReceiveTickrate)) if((Time.time - lastReceiveTickTime >= (1f / NetworkConfig.ReceiveTickrate)) || NetworkConfig.ReceiveTickrate <= 0)
{ {
NetworkEventType eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error); NetworkEventType eventType;
NetworkError networkError = (NetworkError)error; do
if (networkError == NetworkError.Timeout)
{ {
//Client timed out. eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error);
if (isServer) NetworkError networkError = (NetworkError)error;
if (networkError == NetworkError.Timeout)
{ {
OnClientDisconnect(clientId); //Client timed out.
if (isServer)
{
OnClientDisconnect(clientId);
return;
}
}
else if (networkError != NetworkError.Ok)
{
Debug.LogWarning("MLAPI: NetworkTransport receive error: " + networkError.ToString());
return; return;
} }
}
else if (networkError != NetworkError.Ok)
{
Debug.LogWarning("MLAPI: NetworkTransport receive error: " + networkError.ToString());
return;
}
switch (eventType) switch (eventType)
{ {
case NetworkEventType.ConnectEvent: case NetworkEventType.ConnectEvent:
if (isServer) if (isServer)
{
pendingClients.Add(clientId);
StartCoroutine(ApprovalTimeout(clientId));
}
else
{
int sizeOfStream = 32;
if (NetworkConfig.ConnectionApproval)
sizeOfStream += 2 + NetworkConfig.ConnectionData.Length;
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
{ {
using (BinaryWriter writer = new BinaryWriter(writeStream)) pendingClients.Add(clientId);
{ StartCoroutine(ApprovalTimeout(clientId));
writer.Write(NetworkConfig.GetConfig());
if (NetworkConfig.ConnectionApproval)
{
writer.Write((ushort)NetworkConfig.ConnectionData.Length);
writer.Write(NetworkConfig.ConnectionData);
}
}
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", writeStream.GetBuffer());
} }
} else
break; {
case NetworkEventType.DataEvent: int sizeOfStream = 32;
HandleIncomingData(clientId, messageBuffer, channelId); if (NetworkConfig.ConnectionApproval)
break; sizeOfStream += 2 + NetworkConfig.ConnectionData.Length;
case NetworkEventType.DisconnectEvent:
if (isServer) using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
OnClientDisconnect(clientId); {
break; using (BinaryWriter writer = new BinaryWriter(writeStream))
} {
writer.Write(NetworkConfig.GetConfig());
if (NetworkConfig.ConnectionApproval)
{
writer.Write((ushort)NetworkConfig.ConnectionData.Length);
writer.Write(NetworkConfig.ConnectionData);
}
}
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", writeStream.GetBuffer());
}
}
break;
case NetworkEventType.DataEvent:
HandleIncomingData(clientId, messageBuffer, channelId);
break;
case NetworkEventType.DisconnectEvent:
if (isServer)
OnClientDisconnect(clientId);
break;
}
} while (eventType != NetworkEventType.Nothing);
lastReceiveTickTime = Time.time; lastReceiveTickTime = Time.time;
} }
if (isServer && (Time.time - lastEventTickTime >= (1f / NetworkConfig.EventTickrate))) if (isServer && ((Time.time - lastEventTickTime >= (1f / NetworkConfig.EventTickrate)) || NetworkConfig.EventTickrate <= 0))
{ {
LagCompensationManager.AddFrames(); LagCompensationManager.AddFrames();
NetworkedObject.InvokeSyncvafrUpdate(); NetworkedObject.InvokeSyncvarUpdate();
lastEventTickTime = Time.time; lastEventTickTime = Time.time;
} }
} }