Added Tickrate config

This commit is contained in:
Albin Corén 2018-03-09 00:10:43 +01:00
parent a56902d35a
commit a1c027447b
2 changed files with 66 additions and 69 deletions

View File

@ -15,7 +15,7 @@ namespace MLAPI
internal HashSet<ushort> RegisteredPassthroughMessageTypes = new HashSet<ushort>(); internal HashSet<ushort> RegisteredPassthroughMessageTypes = new HashSet<ushort>();
public List<string> RegisteredScenes = new List<string>(); public List<string> RegisteredScenes = new List<string>();
public int MessageBufferSize = 65535; public int MessageBufferSize = 65535;
public int MaxMessagesPerFrame = 150; public int Tickrate = 64;
public int MaxConnections = 100; public int MaxConnections = 100;
public int Port = 7777; public int Port = 7777;
public string Address = "127.0.0.1"; public string Address = "127.0.0.1";

View File

@ -288,82 +288,79 @@ namespace MLAPI
//Receive stuff //Receive stuff
internal int hostId; internal int hostId;
int clientId; private int clientId;
int channelId; private int channelId;
int receivedSize; private int receivedSize;
byte error; private byte error;
private float lastTickTime;
private void Update() private void Update()
{ {
if(isListening) if(isListening && (Time.time - lastTickTime >= (1f / NetworkConfig.Tickrate)))
{ {
NetworkEventType eventType; foreach (KeyValuePair<int, NetworkedClient> pair in connectedClients)
int messagesProcessed = 0;
do
{ {
messagesProcessed++; NetworkTransport.SendQueuedMessages(hostId, pair.Key, out error);
eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error); }
NetworkError networkError = (NetworkError)error; NetworkEventType eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error);
if(networkError == NetworkError.Timeout) NetworkError networkError = (NetworkError)error;
if (networkError == NetworkError.Timeout)
{
//Client timed out.
if (isServer)
{ {
//Client timed out. OnClientDisconnect(clientId);
return;
}
}
else if (networkError != NetworkError.Ok)
{
Debug.LogWarning("MLAPI: NetworkTransport receive error: " + networkError.ToString());
return;
}
switch (eventType)
{
case NetworkEventType.ConnectEvent:
if (isServer) if (isServer)
{ {
OnClientDisconnect(clientId); pendingClients.Add(clientId);
continue; StartCoroutine(ApprovalTimeout(clientId));
} }
} else
else if (networkError != NetworkError.Ok) {
{ int sizeOfStream = 32;
Debug.LogWarning("MLAPI: NetworkTransport receive error: " + networkError.ToString()); if (NetworkConfig.ConnectionApproval)
continue; sizeOfStream += 2 + NetworkConfig.ConnectionData.Length;
}
switch (eventType)
{
case NetworkEventType.ConnectEvent:
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 (MemoryStream writeStream = new MemoryStream(sizeOfStream))
{
using (BinaryWriter writer = new BinaryWriter(writeStream))
{ {
using (BinaryWriter writer = new BinaryWriter(writeStream)) writer.Write(NetworkConfig.GetConfig());
if (NetworkConfig.ConnectionApproval)
{ {
writer.Write(NetworkConfig.GetConfig()); writer.Write((ushort)NetworkConfig.ConnectionData.Length);
if(NetworkConfig.ConnectionApproval) writer.Write(NetworkConfig.ConnectionData);
{
writer.Write((ushort)NetworkConfig.ConnectionData.Length);
writer.Write(NetworkConfig.ConnectionData);
}
} }
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", writeStream.GetBuffer());
} }
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", writeStream.GetBuffer());
} }
break; }
case NetworkEventType.DataEvent: break;
HandleIncomingData(clientId, messageBuffer, channelId); case NetworkEventType.DataEvent:
break; HandleIncomingData(clientId, messageBuffer, channelId);
case NetworkEventType.DisconnectEvent: break;
if(isServer) case NetworkEventType.DisconnectEvent:
{ if (isServer)
OnClientDisconnect(clientId); OnClientDisconnect(clientId);
} break;
break; }
} if (isServer)
} while (eventType != NetworkEventType.Nothing && {
(messagesProcessed < NetworkConfig.MaxMessagesPerFrame || NetworkConfig.MaxMessagesPerFrame < 0)); LagCompensationManager.AddFrames();
NetworkedObject.InvokeSyncvarUpdate();
} }
if (isServer) lastTickTime = Time.time;
{
LagCompensationManager.AddFrames();
NetworkedObject.InvokeSyncvarUpdate();
} }
} }
@ -826,7 +823,7 @@ namespace MLAPI
writer.Write((ushort)data.Length); writer.Write((ushort)data.Length);
writer.Write(data); writer.Write(data);
} }
NetworkTransport.Send(hostId, targetId, channelId, stream.GetBuffer(), sizeOfStream, out error); NetworkTransport.QueueMessageForSending(hostId, targetId, channelId, stream.GetBuffer(), sizeOfStream, out error);
} }
} }
@ -874,7 +871,7 @@ namespace MLAPI
} }
if (isPassthrough) if (isPassthrough)
clientId = serverClientId; clientId = serverClientId;
NetworkTransport.Send(hostId, clientId, MessageManager.channels[channelName], stream.GetBuffer(), sizeOfStream, out error); NetworkTransport.QueueMessageForSending(hostId, clientId, MessageManager.channels[channelName], stream.GetBuffer(), sizeOfStream, out error);
} }
} }
@ -911,7 +908,7 @@ namespace MLAPI
//Client trying to send data to host //Client trying to send data to host
clientId = serverClientId; clientId = serverClientId;
} }
NetworkTransport.Send(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error); NetworkTransport.QueueMessageForSending(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error);
} }
} }
} }
@ -950,7 +947,7 @@ namespace MLAPI
//Client trying to send data to host //Client trying to send data to host
clientId = serverClientId; clientId = serverClientId;
} }
NetworkTransport.Send(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error); NetworkTransport.QueueMessageForSending(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error);
} }
} }
} }
@ -989,7 +986,7 @@ namespace MLAPI
//Client trying to send data to host //Client trying to send data to host
clientId = serverClientId; clientId = serverClientId;
} }
NetworkTransport.Send(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error); NetworkTransport.QueueMessageForSending(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error);
} }
} }
@ -1031,7 +1028,7 @@ namespace MLAPI
//Client trying to send data to host //Client trying to send data to host
clientId = serverClientId; clientId = serverClientId;
} }
NetworkTransport.Send(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error); NetworkTransport.QueueMessageForSending(hostId, clientId, channel, stream.GetBuffer(), sizeOfStream, out error);
} }
} }
} }