diff --git a/src/client/ClientRealmResponseAdapter.cpp b/src/client/ClientRealmResponseAdapter.cpp index d32fbfd..7a835b7 100644 --- a/src/client/ClientRealmResponseAdapter.cpp +++ b/src/client/ClientRealmResponseAdapter.cpp @@ -1,5 +1,18 @@ #include "client/ClientRealmResponseAdapter.hpp" -void ClientRealmResponseAdapter::HandleAuthResponse(RealmConnection* connection, uint8_t authResult) { +void AccountDataInitialize(bool a1) { // TODO } + +void ClientRealmResponseAdapter::HandleAuthResponse(RealmConnection* realmConnection, uint8_t authResult) { + auto clientConnection = static_cast(realmConnection); + + // AUTH_WAIT_QUEUE + if (authResult == 27) { + clientConnection->AccountLogin_Queued(); + } else { + clientConnection->AccountLogin_Finish(authResult); + } + + AccountDataInitialize(true); +} diff --git a/src/client/ClientRealmResponseAdapter.hpp b/src/client/ClientRealmResponseAdapter.hpp index 0f0cda8..1c0c2ae 100644 --- a/src/client/ClientRealmResponseAdapter.hpp +++ b/src/client/ClientRealmResponseAdapter.hpp @@ -6,8 +6,8 @@ class ClientRealmResponseAdapter : public RealmResponse { public: // Virtual member functions - virtual void HandleAuthResponse(RealmConnection* connection, uint8_t authResult); - virtual void GameServerResult(RealmConnection* connection, const char* a2, const char* a3, const char* a4) {}; + virtual void HandleAuthResponse(RealmConnection* realmConnection, uint8_t authResult); + virtual void GameServerResult(RealmConnection* realmConnection, const char* a2, const char* a3, const char* a4) {}; }; #endif diff --git a/src/client/ClientServices.cpp b/src/client/ClientServices.cpp index f17b834..13e9347 100644 --- a/src/client/ClientServices.cpp +++ b/src/client/ClientServices.cpp @@ -22,12 +22,12 @@ bool ClientServices::s_selectRealmInfoValid; void ClientServices::ConnectToSelectedServer() { if (!ClientServices::s_selectRealmInfoValid && !ClientServices::SetSelectedRealmInfo(0)) { - ClientServices::Connection()->SetStatus(0, 39); + ClientServices::Connection()->Complete(0, 39); return; } if (ClientServices::Connection()->GetState() != NS_INITIALIZED) { - ClientServices::Connection()->SetStatus(0, 39); + ClientServices::Connection()->Complete(0, 39); return; } @@ -210,12 +210,12 @@ void ClientServices::RealmEnumCallback(uint32_t a2) { auto connection = ClientServices::Connection(); if (a2 == 1) { - connection->SetStatus(0, 23); + connection->Complete(0, 23); return; } if (a2 == 2 || a2 == 3 || a2 == 4) { - connection->SetStatus(0, 37); + connection->Complete(0, 37); return; } diff --git a/src/net/connection/ClientConnection.cpp b/src/net/connection/ClientConnection.cpp index f1077ae..85f31eb 100644 --- a/src/net/connection/ClientConnection.cpp +++ b/src/net/connection/ClientConnection.cpp @@ -110,15 +110,22 @@ const char* s_errorCodeTokens[] = { "CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME", }; +void ClientConnection::AccountLogin_Finish(int32_t errorCode) { + this->Complete(errorCode == 12, errorCode); +} + +void ClientConnection::AccountLogin_Queued() { + this->m_statusCop = COP_WAIT_QUEUE; + this->m_errorCode = 27; + this->m_statusComplete = 0; + + // TODO LogConnectionStatus(this->m_statusCop, 27, 1); + + // TODO CGlueMgr::UpdateWaitQueue(this->m_queuePosition); +} + void ClientConnection::Cancel(int32_t errorCode) { - this->Cleanup(); - - this->m_statusResult = 0; - this->m_errorCode = errorCode; - this->m_statusComplete = 1; - - // TODO - // LogConnectionStatus(this->m_statusCop, errorCode, 0); + this->Complete(0, errorCode); } void ClientConnection::Cleanup() { @@ -128,6 +135,16 @@ void ClientConnection::Cleanup() { } } +void ClientConnection::Complete(int32_t result, int32_t errorCode) { + this->Cleanup(); + + this->m_statusResult = result; + this->m_errorCode = errorCode; + this->m_statusComplete = 1; + + // TODO LogConnectionStatus(this->m_statusCop, errorCode, 0); +} + void ClientConnection::Connect() { // TODO @@ -146,6 +163,15 @@ int32_t ClientConnection::Disconnect() { return 0; } +void ClientConnection::Initiate(WOWCS_OPS op, int32_t errorCode, void (*cleanup)()) { + this->m_cleanup = cleanup; + this->m_statusCop = op; + this->m_errorCode = errorCode; + this->m_statusComplete = 0; + + // TODO LogConnectionStatus(this->m_statusCop, errorCode, 1); +} + int32_t ClientConnection::IsConnected() { return this->m_connected; } @@ -179,13 +205,3 @@ int32_t ClientConnection::PollStatus(WOWCS_OPS& op, const char** msg, int32_t& r return this->m_statusComplete; } - -void ClientConnection::SetStatus(int32_t result, int32_t errorCode) { - this->Cleanup(); - - this->m_statusResult = result; - this->m_errorCode = errorCode; - this->m_statusComplete = 1; - - // TODO LogConnectionStatus(this->m_statusCop, errorCode, 0); -} diff --git a/src/net/connection/ClientConnection.hpp b/src/net/connection/ClientConnection.hpp index 3bc408b..8dfe3a1 100644 --- a/src/net/connection/ClientConnection.hpp +++ b/src/net/connection/ClientConnection.hpp @@ -20,13 +20,16 @@ class ClientConnection : public RealmConnection { ClientConnection(RealmResponse* realmResponse) : RealmConnection(realmResponse) {}; + void AccountLogin_Finish(int32_t authResult); + void AccountLogin_Queued(); void Cancel(int32_t errorCode); void Cleanup(); + void Complete(int32_t result, int32_t errorCode); void Connect(); int32_t Disconnect(); + void Initiate(WOWCS_OPS op, int32_t errorCode, void (*cleanup)()); int32_t IsConnected(); int32_t PollStatus(WOWCS_OPS& op, const char** msg, int32_t& result, int32_t& errorCode); - void SetStatus(int32_t result, int32_t errorCode); }; #endif