From f9feb8f1fd4e2dc56218aba40ef94962fa866f84 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 24 Jun 2012 22:54:00 +0300 Subject: Fix disconnect by timeout in eathena servers. --- src/game.cpp | 11 +++++++++-- src/game.h | 1 + src/net/eathena/gamehandler.h | 3 +++ src/net/gamehandler.h | 2 ++ src/net/manaserv/gamehandler.h | 3 +++ src/net/tmwa/gamehandler.h | 3 +++ 6 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/game.cpp b/src/game.cpp index 386e01a3d..9aad672da 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -367,7 +367,8 @@ Game::Game(): mLastAction(0), mNextAdjustTime(cur_time + adjustDelay), mAdjustLevel(0), - mLowerCounter(0) + mLowerCounter(0), + mPing(0) { spellManager = new SpellManager; spellShortcut = new SpellShortcut; @@ -615,6 +616,13 @@ void Game::slowLogic() } else { + if (Net::getGameHandler()->mustPing() + && get_elapsed_time1(mPing) > 3000) + { + mPing = tick_time; + Net::getGameHandler()->ping(tick_time); + } + if (mAdjustPerfomance) adjustPerfomance(); if (disconnectedDialog) @@ -623,7 +631,6 @@ void Game::slowLogic() disconnectedDialog = nullptr; } } - } void Game::adjustPerfomance() diff --git a/src/game.h b/src/game.h index b411f2b0f..ec49fafe1 100644 --- a/src/game.h +++ b/src/game.h @@ -134,6 +134,7 @@ class Game int mAdjustLevel; bool mAdjustPerfomance; int mLowerCounter; + int mPing; static Game *mInstance; }; diff --git a/src/net/eathena/gamehandler.h b/src/net/eathena/gamehandler.h index c7c45a177..a1f6c46e7 100644 --- a/src/net/eathena/gamehandler.h +++ b/src/net/eathena/gamehandler.h @@ -58,6 +58,9 @@ class GameHandler : public MessageHandler, public Ea::GameHandler void mapLoadedEvent(); void processMapCharId(Net::MessageIn &msg); + + bool mustPing() const + { return true; } }; } // namespace EAthena diff --git a/src/net/gamehandler.h b/src/net/gamehandler.h index fd051234f..a9713a30a 100644 --- a/src/net/gamehandler.h +++ b/src/net/gamehandler.h @@ -56,6 +56,8 @@ class GameHandler * Tells whether the protocol is using the MP status bar */ virtual bool canUseMagicBar() const = 0; + + virtual bool mustPing() const = 0; }; } // namespace Net diff --git a/src/net/manaserv/gamehandler.h b/src/net/manaserv/gamehandler.h index 2019755ea..938509b4d 100644 --- a/src/net/manaserv/gamehandler.h +++ b/src/net/manaserv/gamehandler.h @@ -65,6 +65,9 @@ class GameHandler : public MessageHandler, public Net::GameHandler { return false; } void disconnect2(); + + bool mustPing() const + { return false; } }; } // namespace ManaServ diff --git a/src/net/tmwa/gamehandler.h b/src/net/tmwa/gamehandler.h index d48fabdcc..455ec3646 100644 --- a/src/net/tmwa/gamehandler.h +++ b/src/net/tmwa/gamehandler.h @@ -56,6 +56,9 @@ class GameHandler : public MessageHandler, public Ea::GameHandler void disconnect2(); void mapLoadedEvent(); + + bool mustPing() const + { return false; } }; } // namespace TmwAthena -- cgit v1.2.3-70-g09d2