diff options
Diffstat (limited to 'src/net/tmwserv')
-rw-r--r-- | src/net/tmwserv/charserverhandler.cpp | 5 | ||||
-rw-r--r-- | src/net/tmwserv/charserverhandler.h | 5 | ||||
-rw-r--r-- | src/net/tmwserv/generalhandler.cpp | 126 | ||||
-rw-r--r-- | src/net/tmwserv/generalhandler.h | 66 | ||||
-rw-r--r-- | src/net/tmwserv/loginhandler.cpp | 59 | ||||
-rw-r--r-- | src/net/tmwserv/loginhandler.h | 26 | ||||
-rw-r--r-- | src/net/tmwserv/logouthandler.cpp | 63 | ||||
-rw-r--r-- | src/net/tmwserv/logouthandler.h | 14 | ||||
-rw-r--r-- | src/net/tmwserv/maphandler.cpp | 4 | ||||
-rw-r--r-- | src/net/tmwserv/maphandler.h | 5 |
10 files changed, 349 insertions, 24 deletions
diff --git a/src/net/tmwserv/charserverhandler.cpp b/src/net/tmwserv/charserverhandler.cpp index 9739367b..27ac62fb 100644 --- a/src/net/tmwserv/charserverhandler.cpp +++ b/src/net/tmwserv/charserverhandler.cpp @@ -254,6 +254,11 @@ void CharServerHandler::setCharCreateDialog(CharCreateDialog *window) mCharCreateDialog->setAttributes(attributes, 60, 1, 20); } +void connect(LoginData *loginData) +{ + // Uneeded +} + void CharServerHandler::chooseCharacter(int slot, LocalPlayer* character) { Net::AccountServer::Account::selectCharacter(slot); diff --git a/src/net/tmwserv/charserverhandler.h b/src/net/tmwserv/charserverhandler.h index a5e1fa50..4d79d60e 100644 --- a/src/net/tmwserv/charserverhandler.h +++ b/src/net/tmwserv/charserverhandler.h @@ -25,9 +25,6 @@ #include "net/charhandler.h" #include "net/messagehandler.h" -#include "lockedarray.h" - -class LocalPlayer; class LoginData; namespace TmwServ { @@ -54,6 +51,8 @@ class CharServerHandler : public MessageHandler, public Net::CharHandler */ void setCharCreateDialog(CharCreateDialog *window); + void connect(LoginData *loginData) {} // Unused + void chooseCharacter(int slot, LocalPlayer* character); void newCharacter(const std::string &name, int slot, diff --git a/src/net/tmwserv/generalhandler.cpp b/src/net/tmwserv/generalhandler.cpp new file mode 100644 index 00000000..c5f00624 --- /dev/null +++ b/src/net/tmwserv/generalhandler.cpp @@ -0,0 +1,126 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "net/tmwserv/generalhandler.h" + +#include "net/tmwserv/network.h" +#include "net/tmwserv/connection.h" + +#include "net/tmwserv/beinghandler.h" +#include "net/tmwserv/buysellhandler.h" +#include "net/tmwserv/charserverhandler.h" +#include "net/tmwserv/chathandler.h" +#include "net/tmwserv/effecthandler.h" +#include "net/tmwserv/guildhandler.h" +#include "net/tmwserv/inventoryhandler.h" +#include "net/tmwserv/itemhandler.h" +#include "net/tmwserv/loginhandler.h" +#include "net/tmwserv/logouthandler.h" +#include "net/tmwserv/maphandler.h" +#include "net/tmwserv/npchandler.h" +#include "net/tmwserv/partyhandler.h" +#include "net/tmwserv/playerhandler.h" +#include "net/tmwserv/tradehandler.h" + +Net::GeneralHandler *generalHandler; + +Net::Connection *gameServerConnection = 0; +Net::Connection *chatServerConnection = 0; +Net::Connection *accountServerConnection = 0; + +namespace TmwServ { + +GeneralHandler::GeneralHandler(): + mBeingHandler(new BeingHandler), + mBuySellHandler(new BuySellHandler), + mCharServerHandler(new TmwServ::CharServerHandler), + mChatHandler(new TmwServ::ChatHandler), + mEffectHandler(new EffectHandler), + mGuildHandler(new GuildHandler), + mInventoryHandler(new TmwServ::InventoryHandler), + mItemHandler(new ItemHandler), + mLoginHandler(new TmwServ::LoginHandler), + mLogoutHandler(new LogoutHandler), + mMapHandler(new TmwServ::MapHandler), + mNpcHandler(new TmwServ::NpcHandler), + mPartyHandler(new PartyHandler), + mPlayerHandler(new TmwServ::PlayerHandler), + mTradeHandler(new TmwServ::TradeHandler) +{ + accountServerConnection = Net::getConnection(); + gameServerConnection = Net::getConnection(); + chatServerConnection = Net::getConnection(); + + generalHandler = this; +} + +void GeneralHandler::load() +{ + Net::registerHandler(mBeingHandler.get()); + Net::registerHandler(mBuySellHandler.get()); + Net::registerHandler(mCharServerHandler.get()); + Net::registerHandler(mChatHandler.get()); + Net::registerHandler(mEffectHandler.get()); + Net::registerHandler(mGuildHandler.get()); + Net::registerHandler(mInventoryHandler.get()); + Net::registerHandler(mItemHandler.get()); + Net::registerHandler(mLoginHandler.get()); + Net::registerHandler(mLogoutHandler.get()); + Net::registerHandler(mMapHandler.get()); + Net::registerHandler(mNpcHandler.get()); + Net::registerHandler(mPartyHandler.get()); + Net::registerHandler(mPlayerHandler.get()); + Net::registerHandler(mTradeHandler.get()); +} + +void GeneralHandler::unload() +{ + if (accountServerConnection) + accountServerConnection->disconnect(); + if (gameServerConnection) + gameServerConnection->disconnect(); + if (chatServerConnection) + chatServerConnection->disconnect(); + + delete accountServerConnection; + delete gameServerConnection; + delete chatServerConnection; + + Net::finalize(); +} + +void GeneralHandler::flushNetwork() +{ + Net::flush(); +} + +bool GeneralHandler::isNetworkConnected() +{ + // TODO + return true; +} + +void GeneralHandler::guiWindowsLoaded() +{ + // TODO +} + +} // namespace TmwServ diff --git a/src/net/tmwserv/generalhandler.h b/src/net/tmwserv/generalhandler.h new file mode 100644 index 00000000..81a41608 --- /dev/null +++ b/src/net/tmwserv/generalhandler.h @@ -0,0 +1,66 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_TMWSERV_GENERALHANDLER_H +#define NET_TMWSERV_GENERALHANDLER_H + +#include "net/generalhandler.h" +#include "net/net.h" +#include "net/messagehandler.h" + +namespace TmwServ { + +class GeneralHandler : public Net::GeneralHandler +{ + public: + GeneralHandler(); + + void load(); + + void unload(); + + void flushNetwork(); + + bool isNetworkConnected(); + + void guiWindowsLoaded(); + + protected: + MessageHandlerPtr mBeingHandler; + MessageHandlerPtr mBuySellHandler; + MessageHandlerPtr mCharServerHandler; + MessageHandlerPtr mChatHandler; + MessageHandlerPtr mEffectHandler; + MessageHandlerPtr mGuildHandler; + MessageHandlerPtr mInventoryHandler; + MessageHandlerPtr mItemHandler; + MessageHandlerPtr mLoginHandler; + MessageHandlerPtr mLogoutHandler; + MessageHandlerPtr mMapHandler; + MessageHandlerPtr mNpcHandler; + MessageHandlerPtr mPartyHandler; + MessageHandlerPtr mPlayerHandler; + MessageHandlerPtr mTradeHandler; +}; + +} // namespace TmwServ + +#endif // NET_TMWSERV_GENERALHANDLER_H diff --git a/src/net/tmwserv/loginhandler.cpp b/src/net/tmwserv/loginhandler.cpp index ccba06ed..ef23546a 100644 --- a/src/net/tmwserv/loginhandler.cpp +++ b/src/net/tmwserv/loginhandler.cpp @@ -21,13 +21,23 @@ #include "net/tmwserv/loginhandler.h" +#include "net/tmwserv/connection.h" #include "net/tmwserv/protocol.h" +#include "net/tmwserv/accountserver/account.h" +#include "net/tmwserv/accountserver/accountserver.h" + #include "net/messagein.h" #include "logindata.h" #include "main.h" +Net::LoginHandler *loginHandler; + +extern Net::Connection *accountServerConnection; + +namespace TmwServ { + LoginHandler::LoginHandler() { static const Uint16 _messages[] = { @@ -39,11 +49,7 @@ LoginHandler::LoginHandler() 0 }; handledMessages = _messages; -} - -void LoginHandler::setLoginData(LoginData *loginData) -{ - mLoginData = loginData; + loginHandler = this; } void LoginHandler::handleMessage(MessageIn &msg) @@ -224,3 +230,46 @@ void LoginHandler::readUpdateHost(MessageIn &msg) mLoginData->updateHost = msg.readString(); } } + +void LoginHandler::loginAccount(LoginData *loginData) +{ + mLoginData = loginData; + Net::AccountServer::login(accountServerConnection, + 0, // client version + loginData->username, + loginData->password); +} + +void LoginHandler::changeEmail(const std::string &email) +{ + Net::AccountServer::Account::changeEmail(email); +} + +void LoginHandler::changePassword(const std::string &username, + const std::string &oldPassword, + const std::string &newPassword) +{ + Net::AccountServer::Account::changePassword(username, oldPassword, + newPassword); +} + +void LoginHandler::chooseServer(int server) +{ + // TODO +} + +void LoginHandler::registerAccount(const std::string &username, + const std::string &password, const std::string &email) +{ + Net::AccountServer::registerAccount(accountServerConnection, + 0, // client version + username, password, email); +} + +void LoginHandler::unregisterAccount(const std::string &username, + const std::string &password) +{ + Net::AccountServer::Account::unregister(username, password); +} + +} // namespace TmwServ diff --git a/src/net/tmwserv/loginhandler.h b/src/net/tmwserv/loginhandler.h index 81dd273c..93d55396 100644 --- a/src/net/tmwserv/loginhandler.h +++ b/src/net/tmwserv/loginhandler.h @@ -22,19 +22,37 @@ #ifndef NET_TMWSERV_LOGINHANDLER_H #define NET_TMWSERV_LOGINHANDLER_H +#include "net/loginhandler.h" #include "net/messagehandler.h" class LoginData; -class LoginHandler : public MessageHandler +namespace TmwServ { + +class LoginHandler : public MessageHandler, public Net::LoginHandler { public: LoginHandler(); - void setLoginData(LoginData *loginData); - void handleMessage(MessageIn &msg); + void loginAccount(LoginData *loginData); + + void changeEmail(const std::string &email); + + void changePassword(const std::string &username, + const std::string &oldPassword, + const std::string &newPassword); + + void chooseServer(int server); + + void registerAccount(const std::string &username, + const std::string &password, + const std::string &email); + + void unregisterAccount(const std::string &username, + const std::string &password); + private: void handleLoginResponse(MessageIn &msg); void handleRegisterResponse(MessageIn &msg); @@ -44,4 +62,6 @@ class LoginHandler : public MessageHandler LoginData *mLoginData; }; +} // namespace TmwServ + #endif // NET_TMWSERV_LOGINHANDLER_H diff --git a/src/net/tmwserv/logouthandler.cpp b/src/net/tmwserv/logouthandler.cpp index 8b0e2d6e..9ac6c7d4 100644 --- a/src/net/tmwserv/logouthandler.cpp +++ b/src/net/tmwserv/logouthandler.cpp @@ -21,12 +21,25 @@ #include "net/tmwserv/logouthandler.h" +#include "net/tmwserv/connection.h" #include "net/tmwserv/protocol.h" +#include "net/tmwserv/accountserver/accountserver.h" +#include "net/tmwserv/chatserver/chatserver.h" +#include "net/tmwserv/gameserver/gameserver.h" + #include "net/messagein.h" #include "main.h" +Net::LogoutHandler *logoutHandler; + +extern Net::Connection *gameServerConnection; +extern Net::Connection *chatServerConnection; +extern Net::Connection *accountServerConnection; + +namespace TmwServ { + LogoutHandler::LogoutHandler(): mPassToken(NULL), mScenario(LOGOUT_EXIT), @@ -42,6 +55,7 @@ LogoutHandler::LogoutHandler(): 0 }; handledMessages = _messages; + logoutHandler = this; } void LogoutHandler::handleMessage(MessageIn &msg) @@ -59,7 +73,7 @@ void LogoutHandler::handleMessage(MessageIn &msg) switch (mScenario) { - case LOGOUT_SWITCH_ACCOUNTSERVER: + case LOGOUT_SWITCH_LOGIN: if (mLoggedOutGame && mLoggedOutChat) state = STATE_SWITCH_ACCOUNTSERVER; break; @@ -129,7 +143,7 @@ void LogoutHandler::handleMessage(MessageIn &msg) if (mLoggedOutChat) state = STATE_RECONNECT_ACCOUNT; break; - case LOGOUT_SWITCH_ACCOUNTSERVER: + case LOGOUT_SWITCH_LOGIN: if (mLoggedOutAccount && mLoggedOutChat) state = STATE_SWITCH_ACCOUNTSERVER; break; @@ -170,7 +184,7 @@ void LogoutHandler::handleMessage(MessageIn &msg) if (mLoggedOutGame) state = STATE_RECONNECT_ACCOUNT; break; - case LOGOUT_SWITCH_ACCOUNTSERVER: + case LOGOUT_SWITCH_LOGIN: if (mLoggedOutAccount && mLoggedOutGame) state = STATE_SWITCH_ACCOUNTSERVER; break; @@ -206,6 +220,47 @@ void LogoutHandler::setScenario(unsigned short scenario, { mScenario = scenario; mPassToken = passToken; + + // Can't logout if we were not logged in ... + if (mScenario == LOGOUT_EXIT) + { + if (accountServerConnection->isConnected()) + Net::AccountServer::logout(); + else + setAccountLoggedOut(); + + if (gameServerConnection->isConnected()) + Net::GameServer::logout(false); + else + setGameLoggedOut(); + + if (chatServerConnection->isConnected()) + Net::ChatServer::logout(); + else + setChatLoggedOut(); + } + else if (mScenario == LOGOUT_SWITCH_LOGIN) + { + if (accountServerConnection->isConnected()) + Net::AccountServer::logout(); + else + setAccountLoggedOut(); + + if (gameServerConnection->isConnected()) + Net::GameServer::logout(false); + else + setGameLoggedOut(); + + if (chatServerConnection->isConnected()) + Net::ChatServer::logout(); + else + setChatLoggedOut(); + } + else if (mScenario == LOGOUT_SWITCH_CHARACTER) + { + Net::GameServer::logout(true); + Net::ChatServer::logout(); + } } void LogoutHandler::reset() @@ -216,3 +271,5 @@ void LogoutHandler::reset() mLoggedOutGame = false; mLoggedOutChat = false; } + +} // namespace TmwServ diff --git a/src/net/tmwserv/logouthandler.h b/src/net/tmwserv/logouthandler.h index 6c69c8be..19b6d43a 100644 --- a/src/net/tmwserv/logouthandler.h +++ b/src/net/tmwserv/logouthandler.h @@ -22,20 +22,14 @@ #ifndef NET_TMWSERV_LOGOUTHANDLER_H #define NET_TMWSERV_LOGOUTHANDLER_H +#include "net/logouthandler.h" #include "net/messagehandler.h" #include <string> -/** - * The different scenarios for which LogoutHandler can be used - */ -enum { - LOGOUT_EXIT, - LOGOUT_SWITCH_ACCOUNTSERVER, - LOGOUT_SWITCH_CHARACTER -}; +namespace TmwServ { -class LogoutHandler : public MessageHandler +class LogoutHandler : public MessageHandler, public Net::LogoutHandler { public: LogoutHandler(); @@ -59,4 +53,6 @@ class LogoutHandler : public MessageHandler bool mLoggedOutChat; }; +} // namespace TmwServ + #endif diff --git a/src/net/tmwserv/maphandler.cpp b/src/net/tmwserv/maphandler.cpp index bbdb873e..ff47c1a7 100644 --- a/src/net/tmwserv/maphandler.cpp +++ b/src/net/tmwserv/maphandler.cpp @@ -30,6 +30,10 @@ MapHandler::MapHandler() mapHandler = this; } +void MapHandler::handleMessage(MessageIn &msg) +{ +} + void MapHandler::connect(LoginData *loginData) { // TODO diff --git a/src/net/tmwserv/maphandler.h b/src/net/tmwserv/maphandler.h index 649feda6..099ec7e0 100644 --- a/src/net/tmwserv/maphandler.h +++ b/src/net/tmwserv/maphandler.h @@ -23,14 +23,17 @@ #define NET_TMWSERV_MAPHANDLER_H #include "net/maphandler.h" +#include "net/messagehandler.h" namespace TmwServ { -class MapHandler : public Net::MapHandler +class MapHandler : public MessageHandler, public Net::MapHandler { public: MapHandler(); + void handleMessage(MessageIn &msg); + void connect(LoginData *loginData); void mapLoaded(const std::string &mapName); |