summaryrefslogtreecommitdiff
path: root/src/net/loginhandler.cpp
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2008-11-20 23:26:11 +0100
committerBjørn Lindeijer <bjorn@lindeijer.nl>2008-11-20 23:37:24 +0100
commitb5963ec28aa76b1a19699a3d06247af93aae6bf5 (patch)
tree9a56c7408a8f3b7c66f785a775c93f793c934178 /src/net/loginhandler.cpp
parenta05fad5acd9c0ff78a4ecd8bd213dd411b062f91 (diff)
downloadmana-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.cpp141
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();
+ }
+}