summaryrefslogtreecommitdiff
path: root/src/gui/login.cpp
diff options
context:
space:
mode:
authorBjörn Steinbrink <B.Steinbrink@gmx.de>2006-01-22 13:31:13 +0000
committerBjörn Steinbrink <B.Steinbrink@gmx.de>2006-01-22 13:31:13 +0000
commitbd56bf8afdab16383ed8ad08412a8c807f84af85 (patch)
tree0e963ada63bcbe3c50dd77986aaa15b9ba49816a /src/gui/login.cpp
parent5359640b6f271af31f6423df9d661433eff89a3e (diff)
downloadmana-bd56bf8afdab16383ed8ad08412a8c807f84af85.tar.gz
mana-bd56bf8afdab16383ed8ad08412a8c807f84af85.tar.bz2
mana-bd56bf8afdab16383ed8ad08412a8c807f84af85.tar.xz
mana-bd56bf8afdab16383ed8ad08412a8c807f84af85.zip
Merged NETWORK branch (includes BEING_OVERHAUL).
Diffstat (limited to 'src/gui/login.cpp')
-rw-r--r--src/gui/login.cpp175
1 files changed, 11 insertions, 164 deletions
diff --git a/src/gui/login.cpp b/src/gui/login.cpp
index 9c198dbb..696e4c6f 100644
--- a/src/gui/login.cpp
+++ b/src/gui/login.cpp
@@ -25,27 +25,20 @@
#include <string>
#include <sstream>
-#include <SDL.h>
#include <guichan/widgets/label.hpp>
#include "../main.h"
#include "../configuration.h"
-#include "../graphics.h"
#include "../log.h"
-#include "../serverinfo.h"
+#include "../logindata.h"
#include "button.h"
#include "checkbox.h"
+#include "ok_dialog.h"
#include "passwordfield.h"
#include "textfield.h"
-#include "../net/messagein.h"
-#include "../net/messageout.h"
-#include "../net/network.h"
-
-SERVER_INFO **server_info;
-
void
WrongDataNoticeListener::setTarget(gcn::TextField *textField)
{
@@ -64,8 +57,8 @@ WrongDataNoticeListener::action(const std::string &eventId)
}
}
-LoginDialog::LoginDialog():
- Window("Login"), mStatus(NET_IDLE)
+LoginDialog::LoginDialog(LoginData *loginData):
+ Window("Login"), mLoginData(loginData)
{
userLabel = new gcn::Label("Name:");
passLabel = new gcn::Label("Password:");
@@ -144,10 +137,6 @@ LoginDialog::LoginDialog():
wrongDataNoticeListener = NULL;
}
-LoginDialog::~LoginDialog()
-{
-}
-
void
LoginDialog::action(const std::string& eventId)
{
@@ -179,14 +168,16 @@ LoginDialog::action(const std::string& eventId)
}
else
{
- const std::string host(config.getValue("host", "animesites.de"));
- short port = (short)config.getValue("port", 0);
- // Attempt to connect to login server
- openConnection(host.c_str(), port);
+ mLoginData->hostname = config.getValue("host", "animesites.de");
+ mLoginData->port = (short)config.getValue("port", 0);
+ mLoginData->username = userField->getText();
+ mLoginData->password = passField->getText();
+
okButton->setEnabled(false);
//cancelButton->setEnabled(false);
registerButton->setEnabled(false);
- mStatus = NET_CONNECTING;
+
+ state = ACCOUNT_STATE;
}
}
else if (eventId == "cancel")
@@ -198,147 +189,3 @@ LoginDialog::action(const std::string& eventId)
state = REGISTER_STATE;
}
}
-
-void
-LoginDialog::logic()
-{
- switch (mStatus)
- {
- case NET_CONNECTING:
- mStatus = pollConnection();
- break;
- case NET_ERROR:
- logger->log("Login::Unable to connect");
- errorMessage = "Unable to connect to login server";
- state = ERROR_STATE;
- closeConnection();
- logger->log("Connection closed");
- break;
- case NET_DATA:
- if (packetReady())
- {
- checkLogin();
- closeConnection();
- }
- else
- {
- flush();
- }
- break;
- case NET_CONNECTED:
- logger->log("Connected...");
- std::string user = userField->getText();
- const std::string password = passField->getText();
- attemptLogin(user, password);
- mStatus = NET_DATA;
- break;
- }
-}
-
-void
-loginInputHandler(SDL_KeyboardEvent *keyEvent)
-{
- if (keyEvent->keysym.sym == SDLK_ESCAPE)
- {
- state = EXIT_STATE;
- }
-}
-
-void
-LoginDialog::attemptLogin(const std::string& user, const std::string& pass)
-{
- // Send login infos
- MessageOut outMsg;
- outMsg.writeInt16(0x0064);
- outMsg.writeInt32(0); // client version
- outMsg.writeString(user, 24);
- outMsg.writeString(pass, 24);
- outMsg.writeInt8(0); // unknown
-}
-
-void
-LoginDialog::checkLogin()
-{
- // Receive reply
- MessageIn msg = get_next_message();
- if (state == ERROR_STATE)
- {
- return;
- }
-
- // Login ok
- if (msg.getId() == 0x0069)
- {
- // Skip the length word
- msg.skip(2);
-
- n_server = (msg.getLength() - 47) / 32;
- server_info = (SERVER_INFO**)malloc(sizeof(SERVER_INFO*) * n_server);
-
- session_ID1 = msg.readInt32();
- account_ID = msg.readInt32();
- session_ID2 = msg.readInt32();
- msg.skip(30); // unknown
- sex = msg.readInt8();
-
- for (int i = 0; i < n_server; i++)
- {
- server_info[i] = new SERVER_INFO;
-
- server_info[i]->address = msg.readInt32();
- server_info[i]->port = msg.readInt16();
- server_info[i]->name = msg.readString(20);
- server_info[i]->online_users = msg.readInt32();
- msg.skip(2); // unknown
-
- logger->log("Network: Server: %s (%s:%d)",
- server_info[i]->name.c_str(),
- iptostring(server_info[i]->address),
- server_info[i]->port);
- }
- skip(msg.getLength());
-
- state = CHAR_SERVER_STATE;
- }
- else if (msg.getId() == 0x006a)
- {
- int loginError = msg.readInt8();
- logger->log("Login::error code: %i", loginError);
-
- switch (loginError) {
- case 0:
- errorMessage = "Unregistered ID";
- break;
- case 1:
- errorMessage = "Wrong password";
- break;
- case 2:
- errorMessage = "Account expired";
- break;
- case 3:
- errorMessage = "Rejected from server";
- break;
- case 4:
- errorMessage = "You have been blocked by the GM Team";
- break;
- case 6:
- errorMessage = "You have been banned for 5 minutes";
- break;
- case 9:
- errorMessage = "This account is already logged in";
- break;
- default:
- errorMessage = "Unknown error";
- break;
- }
- skip(msg.getLength());
- state = ERROR_STATE;
- }
- else {
- skip(msg.getLength());
- logger->log("Login::Unknown error");
- errorMessage = "Unknown error";
- state = ERROR_STATE;
- }
- // Todo: add other packets, also encrypted
-}