Merge branch 'networklagdriver-fix' of https://github.com/LOOPDISK/FlaxEngine into LOOPDISK-networklagdriver-fix

This commit is contained in:
Wojtek Figat
2024-09-29 22:10:29 +02:00
2 changed files with 14 additions and 9 deletions

View File

@@ -132,9 +132,10 @@ void NetworkLagDriver::SendMessage(const NetworkChannelType channelType, const N
auto& msg = _messages.AddOne();
msg.Lag = (double)Lag;
msg.ChannelType = channelType;
msg.Type = 0;
msg.Message = message;
msg.MessageData.Set(message.Buffer, message.Length);
msg.MessageLength = message.Length;
}
void NetworkLagDriver::SendMessage(NetworkChannelType channelType, const NetworkMessage& message, NetworkConnection target)
@@ -147,10 +148,11 @@ void NetworkLagDriver::SendMessage(NetworkChannelType channelType, const Network
auto& msg = _messages.AddOne();
msg.Lag = (double)Lag;
msg.ChannelType = channelType;
msg.Type = 1;
msg.Message = message;
msg.Target = target;
msg.MessageData.Set(message.Buffer, message.Length);
msg.MessageLength = message.Length;
}
void NetworkLagDriver::SendMessage(const NetworkChannelType channelType, const NetworkMessage& message, const Array<NetworkConnection, HeapAllocation>& targets)
@@ -163,10 +165,11 @@ void NetworkLagDriver::SendMessage(const NetworkChannelType channelType, const N
auto& msg = _messages.AddOne();
msg.Lag = (double)Lag;
msg.ChannelType = channelType;
msg.Type = 2;
msg.Message = message;
msg.Targets = targets;
msg.MessageData.Set(message.Buffer, message.Length);
msg.MessageLength = message.Length;
}
NetworkDriverStats NetworkLagDriver::GetStats()
@@ -197,19 +200,21 @@ void NetworkLagDriver::OnUpdate()
if (msg.Lag > 0.0)
continue;
// Fix message to point to the current buffer
msg.Message.Buffer = msg.MessageData.Get();
// Use this helper message as a container to send the stored data and length to the ENet driver
NetworkMessage message;
message.Buffer = msg.MessageData.Get();
message.Length = msg.MessageLength;
switch (msg.Type)
{
case 0:
_driver->SendMessage(msg.ChannelType, msg.Message);
_driver->SendMessage(msg.ChannelType, message);
break;
case 1:
_driver->SendMessage(msg.ChannelType, msg.Message, msg.Target);
_driver->SendMessage(msg.ChannelType, message, msg.Target);
break;
case 2:
_driver->SendMessage(msg.ChannelType, msg.Message, msg.Targets);
_driver->SendMessage(msg.ChannelType, message, msg.Targets);
break;
}
_messages.RemoveAt(i);

View File

@@ -22,10 +22,10 @@ private:
double Lag;
int32 Type;
NetworkChannelType ChannelType;
NetworkMessage Message;
NetworkConnection Target;
Array<NetworkConnection> Targets;
Array<byte> MessageData; // TODO: use message buffers cache (of size config.MessageSize) to reduce dynamic memory allocations
uint32 MessageLength;
};
struct LagEvent