diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/authserver/Server/AuthSession.cpp | 41 | ||||
-rw-r--r-- | src/server/authserver/Server/AuthSession.h | 4 |
2 files changed, 8 insertions, 37 deletions
diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp index 5c3ed477ace..e77a6dd4090 100644 --- a/src/server/authserver/Server/AuthSession.cpp +++ b/src/server/authserver/Server/AuthSession.cpp @@ -20,6 +20,7 @@ #include "Log.h" #include "AuthCodes.h" #include "Database/DatabaseEnv.h" +#include "QueryCallback.h" #include "SHA1.h" #include "TOTP.h" #include "openssl/crypto.h" @@ -169,7 +170,7 @@ void AuthSession::Start() stmt->setString(0, ip_address); stmt->setUInt32(1, inet_addr(ip_address.c_str())); - _queryCallback = std::move(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::CheckIpCallback, this, std::placeholders::_1))); + _queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::CheckIpCallback, this, std::placeholders::_1))); } bool AuthSession::Update() @@ -177,8 +178,7 @@ bool AuthSession::Update() if (!AuthSocket::Update()) return false; - if (_queryCallback && _queryCallback->InvokeIfReady() == QueryCallback::Completed) - _queryCallback = boost::none; + _queryProcessor.ProcessReadyQueries(); return true; } @@ -288,18 +288,6 @@ bool AuthSession::HandleLogonChallenge() std::string login((const char*)challenge->I, challenge->I_len); TC_LOG_DEBUG("server.authserver", "[AuthChallenge] '%s'", login.c_str()); - if (_queryCallback) - { - ByteBuffer pkt; - pkt << uint8(AUTH_LOGON_CHALLENGE); - pkt << uint8(0x00); - pkt << uint8(WOW_FAIL_DB_BUSY); - SendPacket(pkt); - - TC_LOG_DEBUG("server.authserver", "[AuthChallenge] %s attempted to log too quick after previous attempt!", login.c_str()); - return true; - } - _build = challenge->build; _expversion = uint8(AuthHelper::IsPostBCAcceptedClientBuild(_build) ? POST_BC_EXP_FLAG : (AuthHelper::IsPreBCAcceptedClientBuild(_build) ? PRE_BC_EXP_FLAG : NO_VALID_EXP_FLAG)); std::array<char, 5> os; @@ -318,7 +306,7 @@ bool AuthSession::HandleLogonChallenge() PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_LOGONCHALLENGE); stmt->setString(0, login); - _queryCallback = std::move(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::LogonChallengeCallback, this, std::placeholders::_1))); + _queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::LogonChallengeCallback, this, std::placeholders::_1))); return true; } @@ -702,17 +690,6 @@ bool AuthSession::HandleReconnectChallenge() std::string login((const char*)challenge->I, challenge->I_len); TC_LOG_DEBUG("server.authserver", "[ReconnectChallenge] '%s'", login.c_str()); - if (_queryCallback) - { - ByteBuffer pkt; - pkt << uint8(AUTH_RECONNECT_CHALLENGE); - pkt << uint8(WOW_FAIL_DB_BUSY); - SendPacket(pkt); - - TC_LOG_DEBUG("server.authserver", "[ReconnectChallenge] %s attempted to log too quick after previous attempt!", login.c_str()); - return true; - } - _build = challenge->build; _expversion = uint8(AuthHelper::IsPostBCAcceptedClientBuild(_build) ? POST_BC_EXP_FLAG : (AuthHelper::IsPreBCAcceptedClientBuild(_build) ? PRE_BC_EXP_FLAG : NO_VALID_EXP_FLAG)); std::array<char, 5> os; @@ -731,7 +708,7 @@ bool AuthSession::HandleReconnectChallenge() PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_RECONNECTCHALLENGE); stmt->setString(0, login); - _queryCallback = std::move(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::ReconnectChallengeCallback, this, std::placeholders::_1))); + _queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::ReconnectChallengeCallback, this, std::placeholders::_1))); return true; } @@ -803,16 +780,10 @@ bool AuthSession::HandleRealmList() { TC_LOG_DEBUG("server.authserver", "Entering _HandleRealmList"); - if (_queryCallback) - { - TC_LOG_DEBUG("server.authserver", "[RealmList] %s attempted to get realmlist too quick after previous attempt!", _accountInfo.Login.c_str()); - return false; - } - PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALM_CHARACTER_COUNTS); stmt->setUInt32(0, _accountInfo.Id); - _queryCallback = std::move(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::RealmListCallback, this, std::placeholders::_1))); + _queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::RealmListCallback, this, std::placeholders::_1))); return true; } diff --git a/src/server/authserver/Server/AuthSession.h b/src/server/authserver/Server/AuthSession.h index 6b7124038e8..9788a91bc02 100644 --- a/src/server/authserver/Server/AuthSession.h +++ b/src/server/authserver/Server/AuthSession.h @@ -23,7 +23,7 @@ #include "ByteBuffer.h" #include "Socket.h" #include "BigNumber.h" -#include "QueryCallback.h" +#include "QueryCallbackProcessor.h" #include <memory> #include <boost/asio/ip/tcp.hpp> @@ -102,7 +102,7 @@ private: uint16 _build; uint8 _expversion; - Optional<QueryCallback> _queryCallback; + QueryCallbackProcessor _queryProcessor; }; #pragma pack(push, 1) |