From 60155146804921cef8cbf0e8d782d42a861aa1d6 Mon Sep 17 00:00:00 2001 From: Terence Lee Date: Sun, 29 Sep 2024 12:38:55 +0800 Subject: [PATCH] Fixed NetworkLagDriver having wrong ChannelType and Length --- .../Networking/Drivers/NetworkLagDriver.cpp | 21 ++++++++++++------- .../Networking/Drivers/NetworkLagDriver.h | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Source/Engine/Networking/Drivers/NetworkLagDriver.cpp b/Source/Engine/Networking/Drivers/NetworkLagDriver.cpp index 35d1ac5d4..81c02c6f4 100644 --- a/Source/Engine/Networking/Drivers/NetworkLagDriver.cpp +++ b/Source/Engine/Networking/Drivers/NetworkLagDriver.cpp @@ -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& 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); diff --git a/Source/Engine/Networking/Drivers/NetworkLagDriver.h b/Source/Engine/Networking/Drivers/NetworkLagDriver.h index 1fd1a455a..36a89fcbb 100644 --- a/Source/Engine/Networking/Drivers/NetworkLagDriver.h +++ b/Source/Engine/Networking/Drivers/NetworkLagDriver.h @@ -22,10 +22,10 @@ private: double Lag; int32 Type; NetworkChannelType ChannelType; - NetworkMessage Message; NetworkConnection Target; Array Targets; Array MessageData; // TODO: use message buffers cache (of size config.MessageSize) to reduce dynamic memory allocations + uint32 MessageLength; }; struct LagEvent