summaryrefslogtreecommitdiff
path: root/src/net/tmwserv
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/tmwserv')
-rw-r--r--src/net/tmwserv/charserverhandler.cpp5
-rw-r--r--src/net/tmwserv/charserverhandler.h5
-rw-r--r--src/net/tmwserv/generalhandler.cpp126
-rw-r--r--src/net/tmwserv/generalhandler.h66
-rw-r--r--src/net/tmwserv/loginhandler.cpp59
-rw-r--r--src/net/tmwserv/loginhandler.h26
-rw-r--r--src/net/tmwserv/logouthandler.cpp63
-rw-r--r--src/net/tmwserv/logouthandler.h14
-rw-r--r--src/net/tmwserv/maphandler.cpp4
-rw-r--r--src/net/tmwserv/maphandler.h5
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);