From 5d43f16fea7f97f3302b89d64c165b7c5b5222dc Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 26 Jan 2013 14:15:34 +0300 Subject: Fix show ping time if timer overflowed and still no response from server. --- src/gui/debugwindow.cpp | 12 ++---------- src/localplayer.cpp | 30 ++++++++++++++++++++---------- src/localplayer.h | 2 +- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/gui/debugwindow.cpp b/src/gui/debugwindow.cpp index 39ee07767..1a957345a 100644 --- a/src/gui/debugwindow.cpp +++ b/src/gui/debugwindow.cpp @@ -412,16 +412,8 @@ NetDebugTab::NetDebugTab(const Widget2 *const widget) : void NetDebugTab::logic() { - if (player_node && player_node->getPingTime() != 0) - { - mPingLabel->setCaption(strprintf(_("Ping: %s ms"), - toString(static_cast(player_node->getPingTime())).c_str())); - } - else - { - mPingLabel->setCaption(strprintf(_("Ping: %s ms"), "?")); - } - + mPingLabel->setCaption(strprintf(_("Ping: %s ms"), + player_node->getPingTime().c_str())); mInPackets1Label->setCaption(strprintf(_("In: %d bytes/s"), PacketCounters::getInBytes())); mOutPackets1Label->setCaption(strprintf(_("Out: %d bytes/s"), diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 619150ef9..a4104ce03 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -73,7 +73,8 @@ #include "debug.h" -const short awayLimitTimer = 60; +static const short awayLimitTimer = 60; +static const int MAX_TICK_VALUE = 10000; typedef std::map::const_iterator GuildMapCIter; @@ -3452,24 +3453,32 @@ void LocalPlayer::pingRequest() Net::getBeingHandler()->requestNameById(getId()); } -int LocalPlayer::getPingTime() const +std::string LocalPlayer::getPingTime() const { int time = 0; + std::string str; if (!mWaitPing) { - time = mPingTime; + if (!mPingTime) + str = "?"; + else + str = toString(mPingTime); } else { time = tick_time; if (time > mPingSendTick) - { time -= mPingSendTick; - if (time <= mPingTime) - time = mPingTime; - } + else + time += MAX_TICK_VALUE - mPingSendTick; + if (time <= mPingTime) + time = mPingTime; + if (mPingTime != time) + str = strprintf("%d (%d)", mPingTime, time); + else + str = toString(time); } - return time; + return str; } void LocalPlayer::pingResponse() @@ -3477,14 +3486,15 @@ void LocalPlayer::pingResponse() if (mWaitPing == true && mPingSendTick > 0) { mWaitPing = false; - if (tick_time < mPingSendTick) + const int time = tick_time; + if (time < mPingSendTick) { mPingSendTick = 0; mPingTime = 0; } else { - mPingTime = (tick_time - mPingSendTick) * 10; + mPingTime = (time - mPingSendTick) * 10; } } } diff --git a/src/localplayer.h b/src/localplayer.h index ce615b2e6..600c8aef4 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -286,7 +286,7 @@ class LocalPlayer final : public Being, int getDisableGameModifiers() const A_WARN_UNUSED { return mDisableGameModifiers; } - int getPingTime() const A_WARN_UNUSED; + std::string getPingTime() const A_WARN_UNUSED; void tryPingRequest(); -- cgit v1.2.3-60-g2f50