diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-11-20 23:26:11 +0100 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-11-20 23:37:24 +0100 |
commit | b5963ec28aa76b1a19699a3d06247af93aae6bf5 (patch) | |
tree | 9a56c7408a8f3b7c66f785a775c93f793c934178 /src/net/loginhandler.cpp | |
parent | a05fad5acd9c0ff78a4ecd8bd213dd411b062f91 (diff) | |
download | mana-client-b5963ec28aa76b1a19699a3d06247af93aae6bf5.tar.gz mana-client-b5963ec28aa76b1a19699a3d06247af93aae6bf5.tar.bz2 mana-client-b5963ec28aa76b1a19699a3d06247af93aae6bf5.tar.xz mana-client-b5963ec28aa76b1a19699a3d06247af93aae6bf5.zip |
Renabled the dynamic updates
The update host can be optionally received from the server in a
succesful login response or register response message.
This change also merged Subversion commits 4425 and 4426:
........
r4425 | b_lindeijer | 2008-07-18 00:52:53 +0200 (Fri, 18 Jul 2008) | 3 lines
--
Added support for handling the custom eAthena packet that sends the update
host (patch by Sanga).
........
r4426 | b_lindeijer | 2008-07-18 01:08:17 +0200 (Fri, 18 Jul 2008) | 3 lines
--
Remove possible trailing slash at the end of the update host, since otherwise
there'll be two of them.
Diffstat (limited to 'src/net/loginhandler.cpp')
-rw-r--r-- | src/net/loginhandler.cpp | 141 |
1 files changed, 81 insertions, 60 deletions
diff --git a/src/net/loginhandler.cpp b/src/net/loginhandler.cpp index f1898fb5..37c3608a 100644 --- a/src/net/loginhandler.cpp +++ b/src/net/loginhandler.cpp @@ -24,6 +24,7 @@ #include "messagein.h" #include "protocol.h" +#include "../logindata.h" #include "../main.h" LoginHandler::LoginHandler() @@ -39,73 +40,20 @@ LoginHandler::LoginHandler() handledMessages = _messages; } +void LoginHandler::setLoginData(LoginData *loginData) +{ + mLoginData = loginData; +} + void LoginHandler::handleMessage(MessageIn &msg) { switch (msg.getId()) { case APMSG_LOGIN_RESPONSE: - { - int errMsg = msg.readInt8(); - // Successful login - if (errMsg == ERRMSG_OK) - { - state = STATE_CHAR_SELECT; - } - // Login failed - else - { - switch (errMsg) { - case LOGIN_INVALID_VERSION: - errorMessage = "Client has an insufficient version number to login."; - break; - case ERRMSG_INVALID_ARGUMENT: - errorMessage = "Wrong username or password"; - break; - case ERRMSG_FAILURE: - errorMessage = "Already logged in"; - break; - case LOGIN_SERVER_FULL: - errorMessage = "Server is full"; - break; - default: - errorMessage = "Unknown error"; - break; - } - state = STATE_LOGIN_ERROR; - } - } + handleLoginResponse(msg); break; case APMSG_REGISTER_RESPONSE: - { - int errMsg = msg.readInt8(); - // Successful registration - if (errMsg == ERRMSG_OK) - { - state = STATE_CHAR_SELECT; - } - // Registration failed - else - { - switch (errMsg) { - case REGISTER_INVALID_VERSION: - errorMessage = "Client has an insufficient version number to login."; - break; - case ERRMSG_INVALID_ARGUMENT: - errorMessage = "Wrong username, password or email address"; - break; - case REGISTER_EXISTS_USERNAME: - errorMessage = "Username already exists"; - break; - case REGISTER_EXISTS_EMAIL: - errorMessage = "Email address already exists"; - break; - default: - errorMessage = "Unknown error"; - break; - } - state = STATE_LOGIN_ERROR; - } - } + handleRegisterResponse(msg); break; case APMSG_RECONNECT_RESPONSE: { @@ -202,3 +150,76 @@ void LoginHandler::handleMessage(MessageIn &msg) } } + +void LoginHandler::handleLoginResponse(MessageIn &msg) +{ + const int errMsg = msg.readInt8(); + + if (errMsg == ERRMSG_OK) + { + readUpdateHost(msg); + state = STATE_CHAR_SELECT; + } + else + { + switch (errMsg) { + case LOGIN_INVALID_VERSION: + errorMessage = "Client version is too old"; + break; + case ERRMSG_INVALID_ARGUMENT: + errorMessage = "Wrong username or password"; + break; + case ERRMSG_FAILURE: + errorMessage = "Already logged in"; + break; + case LOGIN_SERVER_FULL: + errorMessage = "Server is full"; + break; + default: + errorMessage = "Unknown error"; + break; + } + state = STATE_LOGIN_ERROR; + } +} + +void LoginHandler::handleRegisterResponse(MessageIn &msg) +{ + const int errMsg = msg.readInt8(); + + if (errMsg == ERRMSG_OK) + { + readUpdateHost(msg); + state = STATE_CHAR_SELECT; + } + else + { + switch (errMsg) { + case REGISTER_INVALID_VERSION: + errorMessage = "Client version is too old"; + break; + case ERRMSG_INVALID_ARGUMENT: + errorMessage = "Wrong username, password or email address"; + break; + case REGISTER_EXISTS_USERNAME: + errorMessage = "Username already exists"; + break; + case REGISTER_EXISTS_EMAIL: + errorMessage = "Email address already exists"; + break; + default: + errorMessage = "Unknown error"; + break; + } + state = STATE_LOGIN_ERROR; + } +} + +void LoginHandler::readUpdateHost(MessageIn &msg) +{ + // Set the update host when included in the message + if (msg.getUnreadLength() > 0) + { + mLoginData->updateHost = msg.readString(); + } +} |