summaryrefslogtreecommitdiff
path: root/src/net
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 /src/net
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.
Diffstat (limited to 'src/net')
-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
6 files changed, 55 insertions, 98 deletions
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: