diff options
author | Björn Steinbrink <B.Steinbrink@gmx.de> | 2006-01-22 13:31:13 +0000 |
---|---|---|
committer | Björn Steinbrink <B.Steinbrink@gmx.de> | 2006-01-22 13:31:13 +0000 |
commit | bd56bf8afdab16383ed8ad08412a8c807f84af85 (patch) | |
tree | 0e963ada63bcbe3c50dd77986aaa15b9ba49816a /src/gui/register.cpp | |
parent | 5359640b6f271af31f6423df9d661433eff89a3e (diff) | |
download | mana-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/register.cpp')
-rw-r--r-- | src/gui/register.cpp | 173 |
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; } } |