summaryrefslogtreecommitdiff
path: root/src/net/manaserv/generalhandler.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-01-02 01:48:38 +0200
committerAndrei Karas <akaras@inbox.ru>2011-01-02 02:41:24 +0200
commit3eeae12c498d1a4dbe969462d2ba841f77ee3ccb (patch)
treeff8eab35e732bc0749fc11677c8873a7b3a58704 /src/net/manaserv/generalhandler.cpp
downloadmanaplus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.tar.gz
manaplus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.tar.bz2
manaplus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.tar.xz
manaplus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.zip
Initial commit.
This code based on mana client http://www.gitorious.org/mana/mana and my private repository.
Diffstat (limited to 'src/net/manaserv/generalhandler.cpp')
-rw-r--r--src/net/manaserv/generalhandler.cpp211
1 files changed, 211 insertions, 0 deletions
diff --git a/src/net/manaserv/generalhandler.cpp b/src/net/manaserv/generalhandler.cpp
new file mode 100644
index 000000000..acf731dec
--- /dev/null
+++ b/src/net/manaserv/generalhandler.cpp
@@ -0,0 +1,211 @@
+/*
+ * The Mana Client
+ * Copyright (C) 2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ *
+ * This file is part of The Mana Client.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "net/manaserv/generalhandler.h"
+
+#include "client.h"
+
+#include "gui/changeemaildialog.h"
+#include "gui/charselectdialog.h"
+#include "gui/inventorywindow.h"
+#include "gui/register.h"
+#include "gui/skilldialog.h"
+#include "gui/specialswindow.h"
+
+#include "net/manaserv/beinghandler.h"
+#include "net/manaserv/buysellhandler.h"
+#include "net/manaserv/charhandler.h"
+#include "net/manaserv/chathandler.h"
+#include "net/manaserv/connection.h"
+#include "net/manaserv/effecthandler.h"
+#include "net/manaserv/gamehandler.h"
+#include "net/manaserv/guildhandler.h"
+#include "net/manaserv/inventoryhandler.h"
+#include "net/manaserv/itemhandler.h"
+#include "net/manaserv/loginhandler.h"
+#include "net/manaserv/network.h"
+#include "net/manaserv/npchandler.h"
+#include "net/manaserv/partyhandler.h"
+#include "net/manaserv/playerhandler.h"
+#include "net/manaserv/specialhandler.h"
+#include "net/manaserv/attributes.h"
+#include "net/manaserv/tradehandler.h"
+
+#include "utils/gettext.h"
+
+#include <list>
+
+extern Net::GeneralHandler *generalHandler;
+
+extern ManaServ::LoginHandler *loginHandler;
+
+namespace ManaServ
+{
+
+Connection *accountServerConnection = 0;
+Connection *chatServerConnection = 0;
+Connection *gameServerConnection = 0;
+std::string netToken = "";
+ServerInfo gameServer;
+ServerInfo chatServer;
+
+GeneralHandler::GeneralHandler():
+ mBeingHandler(new BeingHandler),
+ mBuySellHandler(new BuySellHandler),
+ mCharHandler(new CharHandler),
+ mChatHandler(new ChatHandler),
+ mEffectHandler(new EffectHandler),
+ mGameHandler(new GameHandler),
+ mGuildHandler(new GuildHandler),
+ mInventoryHandler(new InventoryHandler),
+ mItemHandler(new ItemHandler),
+ mLoginHandler(new LoginHandler),
+ mNpcHandler(new NpcHandler),
+ mPartyHandler(new PartyHandler),
+ mPlayerHandler(new PlayerHandler),
+ mTradeHandler(new TradeHandler),
+ mSpecialHandler(new SpecialHandler)
+{
+ initialize();
+
+ accountServerConnection = getConnection();
+ gameServerConnection = getConnection();
+ chatServerConnection = getConnection();
+
+ generalHandler = this;
+
+ listen(CHANNEL_CLIENT);
+ listen(CHANNEL_GAME);
+}
+
+void GeneralHandler::load()
+{
+ registerHandler(mBeingHandler.get());
+ registerHandler(mBuySellHandler.get());
+ registerHandler(mCharHandler.get());
+ registerHandler(mChatHandler.get());
+ registerHandler(mEffectHandler.get());
+ registerHandler(mGameHandler.get());
+ registerHandler(mGuildHandler.get());
+ registerHandler(mInventoryHandler.get());
+ registerHandler(mItemHandler.get());
+ registerHandler(mLoginHandler.get());
+ registerHandler(mNpcHandler.get());
+ registerHandler(mPartyHandler.get());
+ registerHandler(mPlayerHandler.get());
+ registerHandler(mTradeHandler.get());
+}
+
+void GeneralHandler::reload()
+{
+ static_cast<CharHandler*>(Net::getCharHandler())->clear();
+
+ if (accountServerConnection)
+ accountServerConnection->disconnect();
+
+ if (gameServerConnection)
+ gameServerConnection->disconnect();
+
+ if (chatServerConnection)
+ chatServerConnection->disconnect();
+
+ netToken.clear();
+ gameServer.clear();
+ chatServer.clear();
+
+ Attributes::unload();
+ Attributes::load();
+ Attributes::informItemDB();
+}
+
+void GeneralHandler::unload()
+{
+ clearHandlers();
+
+ if (accountServerConnection)
+ accountServerConnection->disconnect();
+ if (gameServerConnection)
+ gameServerConnection->disconnect();
+ if (chatServerConnection)
+ chatServerConnection->disconnect();
+
+ delete accountServerConnection;
+ accountServerConnection = 0;
+ delete gameServerConnection;
+ gameServerConnection = 0;
+ delete chatServerConnection;
+ chatServerConnection = 0;
+
+ Attributes::unload();
+ finalize();
+}
+
+void GeneralHandler::flushNetwork()
+{
+ flush();
+
+ if (Client::getState() == STATE_SWITCH_CHARACTER &&
+ Net::getLoginHandler()->isConnected())
+ {
+ loginHandler->reconnect();
+ Client::setState(STATE_GET_CHARACTERS);
+ }
+}
+
+void GeneralHandler::clearHandlers()
+{
+ clearNetworkHandlers();
+}
+
+void GeneralHandler::event(Channels channel,
+ const Mana::Event &event)
+{
+ if (channel == CHANNEL_CLIENT)
+ {
+ int newState = event.getInt("newState");
+
+ if (newState == STATE_GAME)
+ {
+ GameHandler *game = static_cast<GameHandler*>(
+ Net::getGameHandler());
+ game->gameLoading();
+ }
+ else if (newState == STATE_LOAD_DATA)
+ {
+ Attributes::load();
+ Attributes::informItemDB();
+ }
+ }
+ else if (channel == CHANNEL_GAME)
+ {
+ if (event.getName() == EVENT_GUIWINDOWSLOADED)
+ {
+ inventoryWindow->setSplitAllowed(true);
+ skillDialog->loadSkills("mana-skills.xml");
+
+ PlayerInfo::setAttribute(EXP_NEEDED, 100);
+
+ Attributes::informStatusWindow();
+ }
+ }
+}
+
+} // namespace ManaServ