Fixed NetworkLagDriver having wrong ChannelType and Length

This commit is contained in:
Terence Lee
2024-09-29 12:38:55 +08:00
parent 49eeb7bf9a
commit 6015514680
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(); auto& msg = _messages.AddOne();
msg.Lag = (double)Lag; msg.Lag = (double)Lag;
msg.ChannelType = channelType;
msg.Type = 0; msg.Type = 0;
msg.Message = message;
msg.MessageData.Set(message.Buffer, message.Length); msg.MessageData.Set(message.Buffer, message.Length);
msg.MessageLength = message.Length;
} }
void NetworkLagDriver::SendMessage(NetworkChannelType channelType, const NetworkMessage& message, NetworkConnection target) 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(); auto& msg = _messages.AddOne();
msg.Lag = (double)Lag; msg.Lag = (double)Lag;
msg.ChannelType = channelType;
msg.Type = 1; msg.Type = 1;
msg.Message = message;
msg.Target = target; msg.Target = target;
msg.MessageData.Set(message.Buffer, message.Length); 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) 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(); auto& msg = _messages.AddOne();
msg.Lag = (double)Lag; msg.Lag = (double)Lag;
msg.ChannelType = channelType;
msg.Type = 2; msg.Type = 2;
msg.Message = message;
msg.Targets = targets; msg.Targets = targets;
msg.MessageData.Set(message.Buffer, message.Length); msg.MessageData.Set(message.Buffer, message.Length);
msg.MessageLength = message.Length;
} }
NetworkDriverStats NetworkLagDriver::GetStats() NetworkDriverStats NetworkLagDriver::GetStats()
@@ -197,19 +200,21 @@ void NetworkLagDriver::OnUpdate()
if (msg.Lag > 0.0) if (msg.Lag > 0.0)
continue; continue;
// Fix message to point to the current buffer // Use this helper message as a container to send the stored data and length to the ENet driver
msg.Message.Buffer = msg.MessageData.Get(); NetworkMessage message;
message.Buffer = msg.MessageData.Get();
message.Length = msg.MessageLength;
switch (msg.Type) switch (msg.Type)
{ {
case 0: case 0:
_driver->SendMessage(msg.ChannelType, msg.Message); _driver->SendMessage(msg.ChannelType, message);
break; break;
case 1: case 1:
_driver->SendMessage(msg.ChannelType, msg.Message, msg.Target); _driver->SendMessage(msg.ChannelType, message, msg.Target);
break; break;
case 2: case 2:
_driver->SendMessage(msg.ChannelType, msg.Message, msg.Targets); _driver->SendMessage(msg.ChannelType, message, msg.Targets);
break; break;
} }
_messages.RemoveAt(i); _messages.RemoveAt(i);

View File

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