summaryrefslogtreecommitdiff
path: root/src/gui/register.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/register.cpp')
-rw-r--r--src/gui/register.cpp173
1 files changed, 11 insertions, 162 deletions
diff --git a/src/gui/register.cpp b/src/gui/register.cpp
index 71d1a740..9b4cf79d 100644
--- a/src/gui/register.cpp
+++ b/src/gui/register.cpp
@@ -25,32 +25,24 @@
#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 "login.h"
#include "passwordfield.h"
#include "radiobutton.h"
#include "textfield.h"
#include "ok_dialog.h"
-#include "../net/messagein.h"
-#include "../net/messageout.h"
-#include "../net/network.h"
-
-//OkDialog *wrongLoginNotice = NULL;
-extern SERVER_INFO **server_info;
-
-RegisterDialog::RegisterDialog():
- Window("Register"), mStatus(NET_IDLE)
+RegisterDialog::RegisterDialog(LoginData *loginData):
+ Window("Register"), mLoginData(loginData)
{
userLabel = new gcn::Label("Name:");
passwordLabel = new gcn::Label("Password:");
@@ -214,6 +206,7 @@ RegisterDialog::action(const std::string& eventId)
if (wrongRegisterNotice)
{
delete wrongRegisterNotice;
+ wrongRegisterNotice = NULL;
}
wrongRegisterNotice = new OkDialog("Error", errorMsg.str(),
wrongDataNoticeListener);
@@ -221,159 +214,15 @@ RegisterDialog::action(const std::string& eventId)
else
{
// No errors detected, register the new user.
- 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);
registerButton->setEnabled(false);
- mStatus = NET_CONNECTING;
- }
- }
-}
-
-void
-RegisterDialog::logic()
-{
- switch (mStatus)
- {
- case NET_CONNECTING:
- mStatus = pollConnection();
- break;
- case NET_ERROR:
- logger->log("Register::Unable to connect");
- errorMessage = "Unable to connect to login server";
- state = ERROR_STATE;
- closeConnection();
- logger->log("Connection closed");
- break;
- case NET_DATA:
- if (packetReady())
- {
- checkRegistration();
- closeConnection();
- }
- else
- {
- flush();
- }
- break;
- case NET_CONNECTED:
- logger->log("Connected...");
- std::string user = userField->getText();
- const std::string password = passwordField->getText();
- if (femaleButton->isMarked())
- {
- user += "_F";
- }
- else
- {
- user += "_M";
- }
- attemptRegistration(user, password);
- mStatus = NET_DATA;
- break;
- }
-}
-void
-RegisterDialog::attemptRegistration(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
-}
+ mLoginData->hostname = config.getValue("host", "animesites.de");
+ mLoginData->port = (short)config.getValue("port", 0);
+ mLoginData->username = userField->getText();
+ mLoginData->password = passwordField->getText();
+ mLoginData->username += femaleButton->isMarked() ? "_F" : "_M";
-void
-RegisterDialog::checkRegistration()
-{
- // 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);
+ state = ACCOUNT_STATE;
}
- 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 9:
- errorMessage = "This account is already logged in";
- 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
-}
-
-void
-registerInputHandler(SDL_KeyboardEvent *keyEvent)
-{
- if (keyEvent->keysym.sym == SDLK_ESCAPE)
- {
- state = EXIT_STATE;
}
}