aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp18
-rw-r--r--src/server/game/Server/WorldSession.cpp3
-rw-r--r--src/server/game/Server/WorldSession.h4
3 files changed, 12 insertions, 13 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index b3ce3b97892..f458eca6f41 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -39,6 +39,7 @@
#include <boost/accumulators/statistics/variance.hpp>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
+#include <boost/circular_buffer.hpp>
void WorldSession::HandleMoveWorldportAckOpcode(WorldPacket & /*recvData*/)
{
@@ -954,7 +955,7 @@ void WorldSession::HandleTimeSyncResponse(WorldPacket& recvData)
serverTime = clockDelta + clientTime
*/
int64 clockDelta = (int64)serverTimeAtSent + (int64)lagDelay - (int64)clientTimestamp;
- _timeSyncClockDeltaQueue.push_back(std::pair<int64, uint32>(clockDelta, roundTripDuration));
+ _timeSyncClockDeltaQueue->push_back(std::pair<int64, uint32>(clockDelta, roundTripDuration));
ComputeNewClockDelta();
}
@@ -967,18 +968,18 @@ void WorldSession::ComputeNewClockDelta()
accumulator_set<uint32, features<tag::mean, tag::median, tag::variance(lazy)> > latencyAccumulator;
- for (auto pair : _timeSyncClockDeltaQueue)
- latencyAccumulator(pair.second);
+ for (auto [_, roundTripDuration] : *_timeSyncClockDeltaQueue)
+ latencyAccumulator(roundTripDuration);
uint32 latencyMedian = static_cast<uint32>(std::round(median(latencyAccumulator)));
uint32 latencyStandardDeviation = static_cast<uint32>(std::round(sqrt(variance(latencyAccumulator))));
accumulator_set<int64, features<tag::mean> > clockDeltasAfterFiltering;
uint32 sampleSizeAfterFiltering = 0;
- for (auto pair : _timeSyncClockDeltaQueue)
+ for (auto [clockDelta, roundTripDuration] : *_timeSyncClockDeltaQueue)
{
- if (pair.second < latencyStandardDeviation + latencyMedian) {
- clockDeltasAfterFiltering(pair.first);
+ if (roundTripDuration < latencyStandardDeviation + latencyMedian) {
+ clockDeltasAfterFiltering(clockDelta);
sampleSizeAfterFiltering++;
}
}
@@ -990,8 +991,5 @@ void WorldSession::ComputeNewClockDelta()
_timeSyncClockDelta = meanClockDelta;
}
else if (_timeSyncClockDelta == 0)
- {
- std::pair<int64, uint32> back = _timeSyncClockDeltaQueue.back();
- _timeSyncClockDelta = back.first;
- }
+ _timeSyncClockDelta = _timeSyncClockDeltaQueue->back().first;
}
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 968e3149894..8b0eefe157b 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -54,6 +54,7 @@
#include "World.h"
#include "WorldPacket.h"
#include "WorldSocket.h"
+#include <boost/circular_buffer.hpp>
#include <zlib.h>
namespace {
@@ -133,7 +134,7 @@ WorldSession::WorldSession(uint32 id, std::string&& name, std::shared_ptr<WorldS
expireTime(60000), // 1 min after socket loss, session is deleted
forceExit(false),
m_currentBankerGUID(),
- _timeSyncClockDeltaQueue(6),
+ _timeSyncClockDeltaQueue(std::make_unique<boost::circular_buffer<std::pair<int64, uint32>>>(6)),
_timeSyncClockDelta(0),
_pendingTimeSyncRequests(),
_timeSyncNextCounter(0),
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 8c2f073fa67..10f198e1795 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -30,11 +30,11 @@
#include "ObjectGuid.h"
#include "Packet.h"
#include "SharedDefines.h"
+#include <boost/circular_buffer_fwd.hpp>
#include <string>
#include <map>
#include <memory>
#include <unordered_map>
-#include <boost/circular_buffer.hpp>
class Creature;
class GameClient;
@@ -1236,7 +1236,7 @@ class TC_GAME_API WorldSession
bool forceExit;
ObjectGuid m_currentBankerGUID;
- boost::circular_buffer<std::pair<int64, uint32>> _timeSyncClockDeltaQueue; // first member: clockDelta. Second member: latency of the packet exchange that was used to compute that clockDelta.
+ std::unique_ptr<boost::circular_buffer<std::pair<int64, uint32>>> _timeSyncClockDeltaQueue; // first member: clockDelta. Second member: latency of the packet exchange that was used to compute that clockDelta.
int64 _timeSyncClockDelta;
void ComputeNewClockDelta();