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/login.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/login.cpp')
-rw-r--r-- | src/gui/login.cpp | 175 |
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 -} |