diff options
-rw-r--r-- | src/client.cpp | 24 | ||||
-rw-r--r-- | src/client.h | 3 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/client.cpp b/src/client.cpp index 479bd3b3b..5d8978910 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -218,6 +218,7 @@ Client::Client() : mSkin(nullptr), mButtonPadding(1), mButtonSpacing(3), + mPing(0), mConfigAutoSaved(false) { WindowManager::init(); @@ -780,6 +781,7 @@ int Client::gameExec() gui->slowLogic(); if (mGame) mGame->slowLogic(); + slowLogic(); BLOCK_END("Client::gameExec 4") // This is done because at some point tick_time will wrap. @@ -1144,6 +1146,7 @@ int Client::gameExec() case STATE_UPDATE: BLOCK_START("Client::gameExec STATE_UPDATE") logger->log1("State: UPDATE"); + // Determine which source to use for the update host if (!settings.options.updateHost.empty()) settings.updateHost = settings.options.updateHost; @@ -1789,6 +1792,27 @@ void Client::logVars() #endif } +void Client::slowLogic() +{ + if (!gameHandler || !gameHandler->mustPing()) + return; + + if (get_elapsed_time1(mPing) > 1500) + { + mPing = tick_time; + if (mState != STATE_UPDATE && + mState != STATE_LOGIN && + mState != STATE_LOGIN_ATTEMPT) + { + return; + } + if (loginHandler) + loginHandler->ping(); + if (generalHandler) + generalHandler->flushSend(); + } +} + #ifdef ANDROID #ifdef USE_SDL2 /* diff --git a/src/client.h b/src/client.h index 079ed90ec..791425ae5 100644 --- a/src/client.h +++ b/src/client.h @@ -95,6 +95,8 @@ class Client final : public ConfigListener, void windowRemoved(const Window *const window); + void slowLogic(); + static void setEnv(const char *const name, const char *const value); private: @@ -135,6 +137,7 @@ class Client final : public ConfigListener, Skin *mSkin; int mButtonPadding; int mButtonSpacing; + int mPing; bool mConfigAutoSaved; }; |