From f2506ee91852ae3f15813a91258bbbe827ffa121 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 20 Nov 2017 21:04:50 +0100 Subject: [PATCH] Network/ENetHost: Fix service time precision --- include/Nazara/Network/ENetHost.hpp | 3 +++ include/Nazara/Network/ENetHost.inl | 6 ++++++ src/Nazara/Network/ENetHost.cpp | 10 +++++----- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/Nazara/Network/ENetHost.hpp b/include/Nazara/Network/ENetHost.hpp index 44d7180e4..b15bd79b4 100644 --- a/include/Nazara/Network/ENetHost.hpp +++ b/include/Nazara/Network/ENetHost.hpp @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -95,6 +96,8 @@ namespace Nz void ThrottleBandwidth(); + inline void UpdateServiceTime(); + static std::size_t GetCommandSize(UInt8 commandNumber); static bool Initialize(); static void Uninitialize(); diff --git a/include/Nazara/Network/ENetHost.inl b/include/Nazara/Network/ENetHost.inl index 1fabd38e6..667750ff0 100644 --- a/include/Nazara/Network/ENetHost.inl +++ b/include/Nazara/Network/ENetHost.inl @@ -73,6 +73,12 @@ namespace Nz return ref; } + + inline void ENetHost::UpdateServiceTime() + { + // Compute service time as microseconds for extra precision + m_serviceTime = static_cast(GetElapsedMicroseconds() / 1000); + } } #include diff --git a/src/Nazara/Network/ENetHost.cpp b/src/Nazara/Network/ENetHost.cpp index 892b5ed56..b967519b8 100644 --- a/src/Nazara/Network/ENetHost.cpp +++ b/src/Nazara/Network/ENetHost.cpp @@ -13,7 +13,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#include #include #include #include @@ -199,7 +198,7 @@ namespace Nz void ENetHost::Flush() { - m_serviceTime = GetElapsedMilliseconds(); + UpdateServiceTime(); SendOutgoingCommands(nullptr, false); } @@ -216,7 +215,8 @@ namespace Nz return 1; } - m_serviceTime = GetElapsedMilliseconds(); + UpdateServiceTime(); + timeout += m_serviceTime; do @@ -279,7 +279,7 @@ namespace Nz for (;;) { - m_serviceTime = GetElapsedMilliseconds(); + UpdateServiceTime(); if (ENetTimeGreaterEqual(m_serviceTime, timeout)) return 0; @@ -288,7 +288,7 @@ namespace Nz break; } - m_serviceTime = GetElapsedMilliseconds(); + UpdateServiceTime(); } while (m_poller.IsReadyToRead(m_socket));