diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 18 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 4 |
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(); |