From 0e7aa4918ba0a6dd94076e5f75725faabe483f69 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 22 Mar 2015 12:06:36 +0300 Subject: Send login server ping packets if server support it. --- src/client.cpp | 24 ++++++++++++++++++++++++ src/client.h | 3 +++ 2 files changed, 27 insertions(+) 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; }; -- cgit v1.2.3-60-g2f50