/*
* The ManaPlus Client
* Copyright (C) 2009 The Mana World Development Team
* Copyright (C) 2009-2010 The Mana Developers
* Copyright (C) 2011 The ManaPlus Developers
*
* This file is part of The ManaPlus 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 .
*/
#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
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(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(Mana::Channels channel,
const Mana::Event &event)
{
if (channel == Mana::CHANNEL_CLIENT)
{
int newState = event.getInt("newState");
if (newState == Mana::STATE_GAME)
{
GameHandler *game = static_cast(
Net::getGameHandler());
game->gameLoading();
}
else if (newState == Mana::STATE_LOAD_DATA)
{
Attributes::load();
Attributes::informItemDB();
}
}
else if (channel == Mana::CHANNEL_GAME)
{
if (event.getName() == Mana::EVENT_GUIWINDOWSLOADED)
{
inventoryWindow->setSplitAllowed(true);
skillDialog->loadSkills("mana-skills.xml");
PlayerInfo::setAttribute(EXP_NEEDED, 100);
Attributes::informStatusWindow();
}
}
}
} // namespace ManaServ