summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2006-08-26 17:24:43 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2006-08-26 17:24:43 +0000
commit07b6070c25faedd78c2e26825bd700dc294f00cf (patch)
tree6a3053ad2a88ee6f0091fafba6607bc82231f7f6
parent00d7badb647b4293c444c0374985b7f1ea8a1ed1 (diff)
downloadmana-client-07b6070c25faedd78c2e26825bd700dc294f00cf.tar.gz
mana-client-07b6070c25faedd78c2e26825bd700dc294f00cf.tar.bz2
mana-client-07b6070c25faedd78c2e26825bd700dc294f00cf.tar.xz
mana-client-07b6070c25faedd78c2e26825bd700dc294f00cf.zip
Made the Network class a purely static interface, as there is only one instance.
-rw-r--r--ChangeLog9
-rw-r--r--src/beingmanager.cpp7
-rw-r--r--src/beingmanager.h4
-rw-r--r--src/engine.cpp5
-rw-r--r--src/engine.h4
-rw-r--r--src/game.cpp42
-rw-r--r--src/game.h5
-rw-r--r--src/gui/buy.cpp4
-rw-r--r--src/gui/buy.h4
-rw-r--r--src/gui/char_select.cpp17
-rw-r--r--src/gui/char_select.h8
-rw-r--r--src/gui/chat.cpp5
-rw-r--r--src/gui/chat.h4
-rw-r--r--src/gui/sell.cpp3
-rw-r--r--src/gui/sell.h4
-rw-r--r--src/gui/trade.cpp3
-rw-r--r--src/gui/trade.h5
-rw-r--r--src/localplayer.h4
-rw-r--r--src/main.cpp48
-rw-r--r--src/net/charserverhandler.cpp4
-rw-r--r--src/net/messagehandler.cpp14
-rw-r--r--src/net/messagehandler.h7
-rw-r--r--src/net/network.cpp47
-rw-r--r--src/net/network.h79
-rw-r--r--src/net/tradehandler.h2
-rw-r--r--src/npc.cpp4
-rw-r--r--src/npc.h7
27 files changed, 136 insertions, 213 deletions
diff --git a/ChangeLog b/ChangeLog
index 8e10286f..97782a6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,6 +15,15 @@
support for "say around" messages.
* src/net/beinghandler.cpp: Partly implemented being creation, so that
chat works.
+ * src/game.cpp, src/engine.h, src/beingmanager.h, src/gui/trade.cpp,
+ src/gui/sell.cpp, src/gui/char_select.cpp, src/gui/chat.h,
+ src/gui/buy.h, src/gui/chat.cpp, src/gui/char_select.h,
+ src/gui/buy.cpp, src/gui/sell.h, src/gui/trade.h, src/engine.cpp,
+ src/beingmanager.cpp, src/npc.cpp, src/main.cpp, src/npc.h,
+ src/net/tradehandler.h, src/net/messagehandler.h, src/net/network.h,
+ src/net/charserverhandler.cpp, src/net/messagehandler.cpp,
+ src/net/network.cpp, src/localplayer.h, src/game.h: Made the Network
+ class a purely static interface, as there is only one instance.
2006-08-21 Eugenio Favalli <elvenprogrammer@gmail.com>
diff --git a/src/beingmanager.cpp b/src/beingmanager.cpp
index 7a94859a..caecd88e 100644
--- a/src/beingmanager.cpp
+++ b/src/beingmanager.cpp
@@ -49,11 +49,6 @@ class FindBeingFunctor
Being::Type type;
} beingFinder;
-BeingManager::BeingManager(Network *network):
- mNetwork(network)
-{
-}
-
void BeingManager::setMap(Map *map)
{
mMap = map;
@@ -79,7 +74,7 @@ Being* BeingManager::createBeing(Uint32 id, Uint16 job)
outMsg.writeLong(id);
}
else if (job >= 100 & job < 200)
- being = new NPC(id, job, mMap, mNetwork);
+ being = new NPC(id, job, mMap);
else if (job >= 1000 && job < 1200)
being = new Monster(id, job, mMap);
else
diff --git a/src/beingmanager.h b/src/beingmanager.h
index bb6fc99b..0dbafcc6 100644
--- a/src/beingmanager.h
+++ b/src/beingmanager.h
@@ -28,7 +28,6 @@
class LocalPlayer;
class Map;
-class Network;
typedef std::list<Being*> Beings;
typedef Beings::iterator BeingIterator;
@@ -36,8 +35,6 @@ typedef Beings::iterator BeingIterator;
class BeingManager
{
public:
- BeingManager(Network *network);
-
/**
* Sets the map on which beings are created
*/
@@ -86,7 +83,6 @@ class BeingManager
protected:
Beings mBeings;
Map *mMap;
- Network *mNetwork;
};
extern BeingManager *beingManager;
diff --git a/src/engine.cpp b/src/engine.cpp
index a6ce9533..3e6b091a 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -62,10 +62,9 @@ Spriteset *emotionset;
Spriteset *npcset;
std::vector<Spriteset *> weaponset;
-Engine::Engine(Network *network):
+Engine::Engine():
mShowDebugPath(false),
- mCurrentMap(NULL),
- mNetwork(network)
+ mCurrentMap(NULL)
{
// Load the sprite sets
ResourceManager *resman = ResourceManager::getInstance();
diff --git a/src/engine.h b/src/engine.h
index ff39cfba..bdf8419a 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -30,7 +30,6 @@ extern int camera_x, camera_y;
class Graphics;
class Map;
-class Network;
/**
* Game engine that does the main drawing.
@@ -41,7 +40,7 @@ class Engine
/**
* Constructor.
*/
- Engine(Network *network);
+ Engine();
/**
* Destructor.
@@ -77,7 +76,6 @@ class Engine
bool mShowDebugPath;
Map *mCurrentMap;
- Network *mNetwork;
};
extern Engine *engine;
diff --git a/src/game.cpp b/src/game.cpp
index b6428103..f83e9c1f 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -164,15 +164,15 @@ int get_elapsed_time(int start_time)
/**
* Create all the various globally accessible gui windows
*/
-void createGuiWindows(Network *network)
+void createGuiWindows()
{
// Create dialogs
- chatWindow = new ChatWindow(network);
+ chatWindow = new ChatWindow;
menuWindow = new MenuWindow();
statusWindow = new StatusWindow(player_node);
miniStatusWindow = new MiniStatusWindow();
- buyDialog = new BuyDialog(network);
- sellDialog = new SellDialog(network);
+ buyDialog = new BuyDialog;
+ sellDialog = new SellDialog;
buySellDialog = new BuySellDialog();
inventoryWindow = new InventoryWindow();
npcTextDialog = new NpcTextDialog();
@@ -183,7 +183,7 @@ void createGuiWindows(Network *network)
minimap = new Minimap();
equipmentWindow = new EquipmentWindow(player_node->mEquipment.get());
chargeDialog = new ChargeDialog();
- tradeWindow = new TradeWindow(network);
+ tradeWindow = new TradeWindow;
//buddyWindow = new BuddyWindow();
helpWindow = new HelpWindow();
debugWindow = new DebugWindow();
@@ -250,8 +250,7 @@ void destroyGuiWindows()
delete debugWindow;
}
-Game::Game(Network *network):
- mNetwork(network),
+Game::Game():
mBeingHandler(new BeingHandler()),
mBuySellHandler(new BuySellHandler()),
mChatHandler(new ChatHandler()),
@@ -263,10 +262,10 @@ Game::Game(Network *network):
mSkillHandler(new SkillHandler()),
mTradeHandler(new TradeHandler())
{
- createGuiWindows(network);
- engine = new Engine(network);
+ createGuiWindows();
+ engine = new Engine;
- beingManager = new BeingManager(network);
+ beingManager = new BeingManager;
floorItemManager = new FloorItemManager();
// Initialize timers
@@ -276,7 +275,6 @@ Game::Game(Network *network):
// Initialize beings
beingManager->setPlayer(player_node);
- player_node->setNetwork(network);
Joystick::init();
// TODO: The user should be able to choose which one to use
@@ -286,16 +284,16 @@ Game::Game(Network *network):
joystick = new Joystick(0);
}
- network->registerHandler(mBeingHandler.get());
- network->registerHandler(mBuySellHandler.get());
- network->registerHandler(mChatHandler.get());
- network->registerHandler(mEquipmentHandler.get());
- network->registerHandler(mInventoryHandler.get());
- network->registerHandler(mItemHandler.get());
- network->registerHandler(mNpcHandler.get());
- network->registerHandler(mPlayerHandler.get());
- network->registerHandler(mSkillHandler.get());
- network->registerHandler(mTradeHandler.get());
+ Network::registerHandler(mBeingHandler.get());
+ Network::registerHandler(mBuySellHandler.get());
+ Network::registerHandler(mChatHandler.get());
+ Network::registerHandler(mEquipmentHandler.get());
+ Network::registerHandler(mInventoryHandler.get());
+ Network::registerHandler(mItemHandler.get());
+ Network::registerHandler(mNpcHandler.get());
+ Network::registerHandler(mPlayerHandler.get());
+ Network::registerHandler(mSkillHandler.get());
+ Network::registerHandler(mTradeHandler.get());
}
Game::~Game()
@@ -374,7 +372,7 @@ void Game::logic()
}
// Handle network stuff
- mNetwork->flush();
+ Network::flush();
}
}
diff --git a/src/game.h b/src/game.h
index a44c8970..7330052a 100644
--- a/src/game.h
+++ b/src/game.h
@@ -31,7 +31,6 @@
#define SPEECH_MAX_TIME 100
class MessageHandler;
-class Network;
extern std::string map_path;
extern volatile int fps;
@@ -40,7 +39,7 @@ extern volatile int tick_time;
class Game
{
public:
- Game(Network *network);
+ Game();
~Game();
void logic();
@@ -48,8 +47,6 @@ class Game
void handleInput();
protected:
- Network *mNetwork;
-
typedef std::auto_ptr<MessageHandler> MessageHandlerPtr;
MessageHandlerPtr mBeingHandler;
MessageHandlerPtr mBuySellHandler;
diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp
index e7bfef58..63a6e20e 100644
--- a/src/gui/buy.cpp
+++ b/src/gui/buy.cpp
@@ -42,8 +42,8 @@
#include "../utils/tostring.h"
-BuyDialog::BuyDialog(Network *network):
- Window("Buy"), mNetwork(network),
+BuyDialog::BuyDialog():
+ Window("Buy"),
mMoney(0), mAmountItems(0), mMaxItems(0)
{
mShopItems = new ShopItems;
diff --git a/src/gui/buy.h b/src/gui/buy.h
index b09b648b..0ddea4c4 100644
--- a/src/gui/buy.h
+++ b/src/gui/buy.h
@@ -30,7 +30,6 @@
#include "../guichanfwd.h"
-class Network;
class ShopItems;
/**
@@ -46,7 +45,7 @@ class BuyDialog : public Window, public gcn::ActionListener
*
* @see Window::Window
*/
- BuyDialog(Network *network);
+ BuyDialog();
/**
* Destructor
@@ -89,7 +88,6 @@ class BuyDialog : public Window, public gcn::ActionListener
std::string getElementAt(int i);
private:
- Network *mNetwork;
gcn::Button *mBuyButton;
gcn::Button *mQuitButton;
gcn::Button *mIncreaseButton;
diff --git a/src/gui/char_select.cpp b/src/gui/char_select.cpp
index 3db82287..7e0a1a29 100644
--- a/src/gui/char_select.cpp
+++ b/src/gui/char_select.cpp
@@ -71,9 +71,8 @@ void CharDeleteConfirm::action(const std::string &eventId, gcn::Widget *widget)
ConfirmDialog::action(eventId, widget);
}
-CharSelectDialog::CharSelectDialog(Network *network,
- LockedArray<LocalPlayer*> *charInfo):
- Window("Select Character"), mNetwork(network),
+CharSelectDialog::CharSelectDialog(LockedArray<LocalPlayer*> *charInfo):
+ Window("Select Character"),
mCharInfo(charInfo), mCharSelected(false)
{
mSelectButton = new Button("Ok", "ok", this);
@@ -147,7 +146,7 @@ void CharSelectDialog::action(const std::string &eventId, gcn::Widget *widget)
{
// Start new character dialog
mCharInfo->lock();
- new CharCreateDialog(this, mCharInfo->getPos(), mNetwork);
+ new CharCreateDialog(this, mCharInfo->getPos());
mCharInfo->unlock();
}
}
@@ -208,7 +207,7 @@ void CharSelectDialog::attemptCharDelete()
msg.writeShort(PAMSG_CHAR_DELETE);
// TODO: Send the selected slot
msg.writeByte(0);
- network->send(Network::ACCOUNT, msg);
+ Network::send(Network::ACCOUNT, msg);
mCharInfo->lock();
}
@@ -218,7 +217,7 @@ void CharSelectDialog::attemptCharSelect()
MessageOut msg;
msg.writeShort(PAMSG_CHAR_SELECT);
msg.writeByte(mCharInfo->getPos());
- network->send(Network::ACCOUNT, msg);
+ Network::send(Network::ACCOUNT, msg);
mCharInfo->lock();
}
@@ -227,8 +226,8 @@ void CharSelectDialog::logic()
updatePlayerInfo();
}
-CharCreateDialog::CharCreateDialog(Window *parent, int slot, Network *network):
- Window("Create Character", true, parent), mNetwork(network), mSlot(slot)
+CharCreateDialog::CharCreateDialog(Window *parent, int slot):
+ Window("Create Character", true, parent), mSlot(slot)
{
mNameField = new TextField("");
mNameLabel = new gcn::Label("Name:");
@@ -336,5 +335,5 @@ void CharCreateDialog::attemptCharCreate()
outMsg.writeShort(10); // INT
outMsg.writeShort(10); // DEX
outMsg.writeShort(10); // LUK
- network->send(Network::ACCOUNT, outMsg);
+ Network::send(Network::ACCOUNT, outMsg);
}
diff --git a/src/gui/char_select.h b/src/gui/char_select.h
index e65f400d..73fc8b2d 100644
--- a/src/gui/char_select.h
+++ b/src/gui/char_select.h
@@ -32,7 +32,6 @@
#include <guichan/actionlistener.hpp>
class LocalPlayer;
-class Network;
class PlayerBox;
/**
@@ -47,8 +46,7 @@ class CharSelectDialog : public Window, public gcn::ActionListener
/**
* Constructor.
*/
- CharSelectDialog(Network *network,
- LockedArray<LocalPlayer*> *charInfo);
+ CharSelectDialog(LockedArray<LocalPlayer*> *charInfo);
void action(const std::string& eventId, gcn::Widget* widget);
@@ -57,7 +55,6 @@ class CharSelectDialog : public Window, public gcn::ActionListener
void logic();
private:
- Network *mNetwork;
LockedArray<LocalPlayer*> *mCharInfo;
gcn::Button *mSelectButton;
@@ -97,14 +94,13 @@ class CharCreateDialog : public Window, public gcn::ActionListener
/**
* Constructor.
*/
- CharCreateDialog(Window *parent, int slot, Network *network);
+ CharCreateDialog(Window *parent, int slot);
void action(const std::string& eventId, gcn::Widget* widget);
std::string getName();
private:
- Network *mNetwork;
gcn::TextField *mNameField;
gcn::Label *mNameLabel;
gcn::Button *mNextHairColorButton;
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp
index e8bb1cc6..04ac3996 100644
--- a/src/gui/chat.cpp
+++ b/src/gui/chat.cpp
@@ -40,9 +40,8 @@
#include "../net/network.h"
#include "../net/protocol.h"
-ChatWindow::ChatWindow(Network *network):
+ChatWindow::ChatWindow():
Window(""),
- mNetwork(network),
mTmpVisible(false)
{
setWindowName("Chat");
@@ -253,7 +252,7 @@ ChatWindow::chatSend(const std::string &nick, std::string msg)
MessageOut outMsg;
outMsg.writeShort(PGMSG_SAY);
outMsg.writeString(msg);
- network->send(Network::GAME, outMsg);
+ Network::send(Network::GAME, outMsg);
}
else if (msg.substr(0, IS_ANNOUNCE_LENGTH) == IS_ANNOUNCE)
{
diff --git a/src/gui/chat.h b/src/gui/chat.h
index 20841873..a0a3d1ec 100644
--- a/src/gui/chat.h
+++ b/src/gui/chat.h
@@ -35,7 +35,6 @@
#include "../guichanfwd.h"
class BrowserBox;
-class Network;
class ScrollArea;
#define BY_GM 0 // those should be self-explanatory =)
@@ -116,7 +115,7 @@ class ChatWindow : public Window, public gcn::ActionListener,
/**
* Constructor.
*/
- ChatWindow(Network *network);
+ ChatWindow();
/**
* Logic (updates components' size)
@@ -188,7 +187,6 @@ class ChatWindow : public Window, public gcn::ActionListener,
void setVisible(bool visible);
private:
- Network *mNetwork;
bool mTmpVisible;
/** One item in the chat log */
diff --git a/src/gui/sell.cpp b/src/gui/sell.cpp
index e820d42f..3aa7c889 100644
--- a/src/gui/sell.cpp
+++ b/src/gui/sell.cpp
@@ -44,9 +44,8 @@
#include "../utils/tostring.h"
-SellDialog::SellDialog(Network *network):
+SellDialog::SellDialog():
Window("Sell"),
- mNetwork(network),
mMaxItems(0), mAmountItems(0)
{
mShopItems = new ShopItems();
diff --git a/src/gui/sell.h b/src/gui/sell.h
index 423fea26..be5185bd 100644
--- a/src/gui/sell.h
+++ b/src/gui/sell.h
@@ -31,7 +31,6 @@
#include "../guichanfwd.h"
class Item;
-class Network;
class ShopItems;
@@ -48,7 +47,7 @@ class SellDialog : public Window, public gcn::ActionListener
*
* @see Window::Window
*/
- SellDialog(Network *network);
+ SellDialog();
/**
* Destructor
@@ -76,7 +75,6 @@ class SellDialog : public Window, public gcn::ActionListener
void mouseClick(int x, int y, int buton, int count);
private:
- Network *mNetwork;
gcn::Button *mSellButton;
gcn::Button *mIncreaseButton;
gcn::Button *mDecreaseButton;
diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp
index 73193c88..6b247901 100644
--- a/src/gui/trade.cpp
+++ b/src/gui/trade.cpp
@@ -45,9 +45,8 @@
#include "../utils/tostring.h"
-TradeWindow::TradeWindow(Network *network):
+TradeWindow::TradeWindow():
Window("Trade: You"),
- mNetwork(network),
mMyInventory(new Inventory()),
mPartnerInventory(new Inventory())
{
diff --git a/src/gui/trade.h b/src/gui/trade.h
index eb3c0f97..fe60aac5 100644
--- a/src/gui/trade.h
+++ b/src/gui/trade.h
@@ -35,7 +35,6 @@
class Inventory;
class Item;
class ItemContainer;
-class Network;
class ScrollArea;
/**
@@ -49,7 +48,7 @@ class TradeWindow : public Window, gcn::ActionListener
/**
* Constructor.
*/
- TradeWindow(Network *network);
+ TradeWindow();
/**
* Destructor.
@@ -113,8 +112,6 @@ class TradeWindow : public Window, gcn::ActionListener
void action(const std::string& eventId, gcn::Widget* widget);
private:
- Network *mNetwork;
-
typedef std::auto_ptr<Inventory> InventoryPtr;
InventoryPtr mMyInventory;
InventoryPtr mPartnerInventory;
diff --git a/src/localplayer.h b/src/localplayer.h
index fdef6ba1..613f196a 100644
--- a/src/localplayer.h
+++ b/src/localplayer.h
@@ -34,7 +34,6 @@
class FloorItem;
class Inventory;
class Item;
-class Network;
class LocalPlayer : public Player
{
@@ -47,8 +46,6 @@ class LocalPlayer : public Player
virtual ~LocalPlayer();
- void setNetwork(Network *network) { mNetwork = network; }
-
virtual void logic();
virtual void nextStep();
@@ -145,7 +142,6 @@ class LocalPlayer : public Player
std::auto_ptr<Inventory> mInventory;
protected:
- Network *mNetwork;
Being *mTarget;
FloorItem *mPickUpTarget;
diff --git a/src/main.cpp b/src/main.cpp
index 4e65e4fc..573b1a79 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -413,8 +413,8 @@ MapLoginHandler mapLoginHandler;
void accountLogin(LoginData *loginData)
{
logger->log("Username is %s", loginData->username.c_str());
- network->registerHandler(&loginHandler);
- network->registerHandler(&charServerHandler);
+ Network::registerHandler(&loginHandler);
+ Network::registerHandler(&charServerHandler);
loginHandler.setLoginData(loginData);
charServerHandler.setLoginData(loginData);
charServerHandler.setCharInfo(&charInfo);
@@ -424,7 +424,7 @@ void accountLogin(LoginData *loginData)
msg.writeLong(0); // client version
msg.writeString(loginData->username);
msg.writeString(loginData->password);
- network->send(Network::ACCOUNT, msg);
+ Network::send(Network::ACCOUNT, msg);
// Clear the password, avoids auto login when returning to login
loginData->password = "";
@@ -441,7 +441,7 @@ void accountLogin(LoginData *loginData)
void accountRegister(LoginData *loginData)
{
logger->log("Username is %s", loginData->username.c_str());
- network->registerHandler(&loginHandler);
+ Network::registerHandler(&loginHandler);
loginHandler.setLoginData(loginData);
charServerHandler.setLoginData(loginData);
charServerHandler.setCharInfo(&charInfo);
@@ -452,21 +452,21 @@ void accountRegister(LoginData *loginData)
msg.writeString(loginData->username);
msg.writeString(loginData->password);
msg.writeString(loginData->email);
- network->send(Network::ACCOUNT, msg);
+ Network::send(Network::ACCOUNT, msg);
}
-void mapLogin(Network *network, LoginData *loginData)
+void mapLogin(LoginData *loginData)
{
- network->registerHandler(&mapLoginHandler);
+ Network::registerHandler(&mapLoginHandler);
// Send connect messages with the magic token to game and chat servers
MessageOut gameServerConnect(PGMSG_CONNECT);
gameServerConnect.writeString(token, 32);
- network->send(Network::GAME, gameServerConnect);
+ Network::send(Network::GAME, gameServerConnect);
MessageOut chatServerConnect(PCMSG_CONNECT);
chatServerConnect.writeString(token, 32);
- network->send(Network::CHAT, chatServerConnect);
+ Network::send(Network::CHAT, chatServerConnect);
}
/** Main */
@@ -533,7 +533,7 @@ int main(int argc, char *argv[])
{
logger->error("An error occurred while initializing ENet.");
}
- network = new Network();
+ Network::initialize();
SDL_Event event;
@@ -557,9 +557,9 @@ int main(int argc, char *argv[])
}
gui->logic();
- network->flush();
+ Network::flush();
- if (network->getState() == Network::NET_ERROR)
+ if (Network::getState() == Network::NET_ERROR)
{
state = STATE_ERROR;
errorMessage = "Got disconnected from server!";
@@ -585,7 +585,7 @@ int main(int argc, char *argv[])
// TODO: Add connect timeout to go back to choose server
if (state == STATE_CONNECT_ACCOUNT &&
- network->isConnected(Network::ACCOUNT))
+ Network::isConnected(Network::ACCOUNT))
{
if (options.skipUpdate) {
state = STATE_LOGIN;
@@ -594,8 +594,8 @@ int main(int argc, char *argv[])
}
}
else if (state == STATE_CONNECT_GAME &&
- network->isConnected(Network::GAME) &&
- network->isConnected(Network::CHAT))
+ Network::isConnected(Network::GAME) &&
+ Network::isConnected(Network::CHAT))
{
// TODO: Somehow send the token
state = STATE_GAME;
@@ -611,7 +611,7 @@ int main(int argc, char *argv[])
// Disconnect from account server once connected to game server
if (oldstate == STATE_CONNECT_GAME && state == STATE_GAME)
{
- network->disconnect(Network::ACCOUNT);
+ Network::disconnect(Network::ACCOUNT);
}
oldstate = state;
@@ -627,7 +627,7 @@ int main(int argc, char *argv[])
logger->log("State: CHOOSE_SERVER");
// TODO: Allow changing this using a server choice dialog
logger->log("Trying to connect to account server...");
- network->connect(Network::ACCOUNT,
+ Network::connect(Network::ACCOUNT,
loginData.hostname, loginData.port);
state = STATE_CONNECT_ACCOUNT;
break;
@@ -667,7 +667,7 @@ int main(int argc, char *argv[])
case STATE_CHAR_SELECT:
logger->log("State: CHAR_SELECT");
- currentDialog = new CharSelectDialog(network, &charInfo);
+ currentDialog = new CharSelectDialog(&charInfo);
if (options.chooseDefault) {
((CharSelectDialog*)currentDialog)->action("ok",
NULL);
@@ -679,9 +679,9 @@ int main(int argc, char *argv[])
currentDialog = new OkDialog("Error", errorMessage);
currentDialog->addActionListener(&errorListener);
currentDialog = NULL; // OkDialog deletes itself
- network->disconnect(Network::GAME);
- network->disconnect(Network::CHAT);
- network->clearHandlers();
+ Network::disconnect(Network::GAME);
+ Network::disconnect(Network::CHAT);
+ Network::clearHandlers();
break;
case STATE_CONNECT_GAME:
@@ -690,7 +690,7 @@ int main(int argc, char *argv[])
break;
case STATE_GAME:
- mapLogin(network, &loginData);
+ mapLogin(&loginData);
sound.fadeOutMusic(1000);
currentDialog = NULL;
@@ -698,7 +698,7 @@ int main(int argc, char *argv[])
login_wallpaper = NULL;
logger->log("State: GAME");
- game = new Game(network);
+ game = new Game;
game->logic();
delete game;
state = STATE_EXIT;
@@ -711,7 +711,7 @@ int main(int argc, char *argv[])
}
}
- delete network;
+ Network::finalize();
enet_deinitialize();
if (nullFile)
diff --git a/src/net/charserverhandler.cpp b/src/net/charserverhandler.cpp
index 1eea29b8..d67949cc 100644
--- a/src/net/charserverhandler.cpp
+++ b/src/net/charserverhandler.cpp
@@ -174,8 +174,8 @@ CharServerHandler::handleCharSelectResponse(MessageIn &msg)
logger->log("Game server: %s:%d", gameServer.c_str(), gameServerPort);
logger->log("Chat server: %s:%d", chatServer.c_str(), chatServerPort);
- network->connect(Network::GAME, gameServer, gameServerPort);
- network->connect(Network::CHAT, chatServer, chatServerPort);
+ Network::connect(Network::GAME, gameServer, gameServerPort);
+ Network::connect(Network::CHAT, chatServer, chatServerPort);
// Keep the selected character and delete the others
player_node = mCharInfo->getEntry();
diff --git a/src/net/messagehandler.cpp b/src/net/messagehandler.cpp
index 849b6716..0b5cd87c 100644
--- a/src/net/messagehandler.cpp
+++ b/src/net/messagehandler.cpp
@@ -27,19 +27,7 @@
#include "network.h"
-MessageHandler::MessageHandler():
- mNetwork(0)
-{
-}
-
MessageHandler::~MessageHandler()
{
- if (mNetwork)
- mNetwork->unregisterHandler(this);
-}
-
-void MessageHandler::setNetwork(Network *network)
-{
- assert(!(network && mNetwork));
- mNetwork = network;
+ Network::unregisterHandler(this);
}
diff --git a/src/net/messagehandler.h b/src/net/messagehandler.h
index 9f92636d..b21abd72 100644
--- a/src/net/messagehandler.h
+++ b/src/net/messagehandler.h
@@ -27,22 +27,15 @@
#include <SDL_types.h>
class MessageIn;
-class Network;
class MessageHandler
{
public:
const Uint16 *handledMessages;
- MessageHandler();
virtual ~MessageHandler();
virtual void handleMessage(MessageIn &msg) = 0;
-
- void setNetwork(Network *network);
-
- protected:
- Network *mNetwork;
};
#endif
diff --git a/src/net/network.cpp b/src/net/network.cpp
index 08b5fe92..e56f6df0 100644
--- a/src/net/network.cpp
+++ b/src/net/network.cpp
@@ -29,10 +29,25 @@
#include "../log.h"
-Network *network;
+static Network::State mState;
-Network::Network():
- mState(NET_OK)
+/**
+ * The local host.
+ */
+static ENetHost *mClient;
+
+/**
+ * An array holding the peers of the account, game and chat servers.
+ */
+static ENetPeer *mServers[3];
+
+typedef std::map<unsigned short, MessageHandler*> MessageHandlers;
+typedef MessageHandlers::iterator MessageHandlerIterator;
+static MessageHandlers mMessageHandlers;
+
+Network::State Network::getState() { return mState; }
+
+void Network::initialize()
{
// Initialize server peers
for (int i = 0; i < 3; ++i)
@@ -48,7 +63,7 @@ Network::Network():
}
}
-Network::~Network()
+void Network::finalize()
{
clearHandlers();
@@ -110,15 +125,10 @@ Network::disconnect(Server server)
void
Network::registerHandler(MessageHandler *handler)
{
- const Uint16 *i = handler->handledMessages;
-
- while(*i)
+ for (const Uint16 *i = handler->handledMessages; *i; i++)
{
mMessageHandlers[*i] = handler;
- i++;
}
-
- handler->setNetwork(this);
}
void
@@ -128,30 +138,27 @@ Network::unregisterHandler(MessageHandler *handler)
{
mMessageHandlers.erase(*i);
}
-
- handler->setNetwork(0);
}
void
Network::clearHandlers()
{
- MessageHandlerIterator i;
- for (i = mMessageHandlers.begin(); i != mMessageHandlers.end(); i++)
- {
- i->second->setNetwork(0);
- }
mMessageHandlers.clear();
}
bool
-Network::isConnected(Server server) const
+Network::isConnected(Server server)
{
return mServers[server] != NULL &&
mServers[server]->state == ENET_PEER_STATE_CONNECTED;
}
-void
-Network::dispatchMessage(ENetPacket *packet)
+/**
+ * Dispatches a message to the appropriate message handler and
+ * destroys it afterwards.
+ */
+static void
+dispatchMessage(ENetPacket *packet)
{
MessageIn msg((const char *)packet->data, packet->dataLength);
diff --git a/src/net/network.h b/src/net/network.h
index 40255e44..861fa2b3 100644
--- a/src/net/network.h
+++ b/src/net/network.h
@@ -42,108 +42,79 @@ class MessageOut;
class Network
{
public:
- friend class MessageOut;
-
/**
- * Constructor. Sets up the local host.
+ * Sets up the local host.
*/
- Network();
+ static void
+ initialize();
/**
- * Destructor.
+ * Closes the connections.
*/
- ~Network();
+ static void
+ finalize();
- typedef enum {
+ enum Server {
ACCOUNT,
GAME,
CHAT
- } Server;
+ };
+
+ enum State {
+ NET_OK,
+ NET_ERROR
+ };
/**
* Connects to the given server with the specified address and port.
* This method is non-blocking, use isConnected to check whether the
* server is connected.
*/
- bool
+ static bool
connect(Server server, const std::string &address, short port);
/**
* Disconnects from the given server.
*/
- void
+ static void
disconnect(Server server);
/**
* Registers a message handler. A message handler handles a certain
* subset of incoming messages.
*/
- void
+ static void
registerHandler(MessageHandler *handler);
/**
* Unregisters a message handler.
*/
- void
+ static void
unregisterHandler(MessageHandler *handler);
- void
+ static void
clearHandlers();
- int
- getState() const { return mState; }
+ static State
+ getState();
/**
* Returns whether the given server is connected.
*/
- bool
- isConnected(Server server) const;
+ static bool
+ isConnected(Server server);
- void
+ static void
flush();
/**
- * Send a message to a given server. The server should be connected.
+ * Sends a message to a given server. The server should be connected.
*/
- void
+ static void
send(Server server, const MessageOut &msg);
-
- enum State {
- NET_OK,
- NET_ERROR
- };
-
- private:
- /**
- * The local host.
- */
- ENetHost *mClient;
-
- /**
- * An array holding the peers of the account, game and chat servers.
- */
- ENetPeer *mServers[3];
-
- /**
- * Dispatches a message to the appropriate message handler and
- * destroys it afterwards.
- */
- void
- dispatchMessage(ENetPacket *packet);
-
- unsigned int mToSkip;
-
- int mState;
-
- typedef std::map<unsigned short, MessageHandler*> MessageHandlers;
- typedef MessageHandlers::iterator MessageHandlerIterator;
- MessageHandlers mMessageHandlers;
};
/** Convert an address from int format to string */
char *iptostring(int address);
-// TODO: remove this global, just a temp solution.
-extern Network *network;
-
#endif
diff --git a/src/net/tradehandler.h b/src/net/tradehandler.h
index 0b73c871..1ab3c2e4 100644
--- a/src/net/tradehandler.h
+++ b/src/net/tradehandler.h
@@ -26,8 +26,6 @@
#include "messagehandler.h"
-class Network;
-
class TradeHandler : public MessageHandler
{
public:
diff --git a/src/npc.cpp b/src/npc.cpp
index a82490ae..a14b6d24 100644
--- a/src/npc.cpp
+++ b/src/npc.cpp
@@ -33,8 +33,8 @@ extern Spriteset *npcset;
NPC *current_npc = 0;
-NPC::NPC(Uint32 id, Uint16 job, Map *map, Network *network):
- Being(id, job, map), mNetwork(network)
+NPC::NPC(Uint32 id, Uint16 job, Map *map):
+ Being(id, job, map)
{
mSprites[BASE_SPRITE] = new AnimatedSprite("graphics/sprites/npc.xml", job-100);
}
diff --git a/src/npc.h b/src/npc.h
index b08c315c..bbc86d9c 100644
--- a/src/npc.h
+++ b/src/npc.h
@@ -26,12 +26,10 @@
#include "being.h"
-class Network;
-
class NPC : public Being
{
public:
- NPC(Uint32 id, Uint16 job, Map *map, Network *network);
+ NPC(Uint32 id, Uint16 job, Map *map);
virtual Type getType() const;
@@ -41,9 +39,6 @@ class NPC : public Being
void buy();
void sell();
-
- protected:
- Network *mNetwork;
};
extern NPC *current_npc;