summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2006-05-23 05:35:13 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2006-05-23 05:35:13 +0000
commit351f050dd77c7dfae7ab901b9dab08336e59b4fc (patch)
tree709142480b61e116eca5ac17685e29b6fe658e5a /src/main.cpp
parent71ef3ccdc4d628e93d445251121f36a35c6f6a4e (diff)
downloadmanaserv-351f050dd77c7dfae7ab901b9dab08336e59b4fc.tar.gz
manaserv-351f050dd77c7dfae7ab901b9dab08336e59b4fc.tar.bz2
manaserv-351f050dd77c7dfae7ab901b9dab08336e59b4fc.tar.xz
manaserv-351f050dd77c7dfae7ab901b9dab08336e59b4fc.zip
Split server into three logical servers: an account server, a chat
server, and a game server.
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp54
1 files changed, 13 insertions, 41 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 98eb2989..1b609f89 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -99,9 +99,6 @@ ChatChannelManager *chatChannelManager;
/** Core game message handler */
GameHandler *gameHandler;
-/** Primary connection handler */
-ClientConnectionHandler *connectionHandler;
-
/**
* Initializes the server.
*/
@@ -164,7 +161,6 @@ void initialize()
chatHandler = new ChatHandler();
accountHandler = new AccountHandler();
gameHandler = new GameHandler();
- connectionHandler = new ClientConnectionHandler();
// Reset to default segmentation fault handling for debugging purposes
signal(SIGSEGV, SIG_DFL);
@@ -242,7 +238,6 @@ void deinitialize()
delete accountHandler;
delete chatHandler;
delete gameHandler;
- delete connectionHandler;
delete chatChannelManager;
@@ -327,37 +322,9 @@ int main(int argc, char *argv[])
// General Initialization
initialize();
- // Note: This is just an idea, we could also pass the connection handler
- // to the constructor of the account handler, upon which it would register
- // itself for the messages it handles.
-
- // Register message handlers
- connectionHandler->registerHandler(CMSG_LOGIN, accountHandler);
- connectionHandler->registerHandler(CMSG_LOGOUT, accountHandler);
- connectionHandler->registerHandler(CMSG_REGISTER, accountHandler);
- connectionHandler->registerHandler(CMSG_UNREGISTER, accountHandler);
- connectionHandler->registerHandler(CMSG_CHAR_CREATE, accountHandler);
- connectionHandler->registerHandler(CMSG_CHAR_SELECT, accountHandler);
- connectionHandler->registerHandler(CMSG_CHAR_DELETE, accountHandler);
- connectionHandler->registerHandler(CMSG_CHAR_LIST, accountHandler);
- connectionHandler->registerHandler(CMSG_EMAIL_GET, accountHandler);
- connectionHandler->registerHandler(CMSG_PASSWORD_CHANGE, accountHandler);
- connectionHandler->registerHandler(CMSG_EMAIL_CHANGE, accountHandler);
-
- connectionHandler->registerHandler(CMSG_SAY, chatHandler);
- connectionHandler->registerHandler(CMSG_ANNOUNCE, chatHandler);
-
- connectionHandler->registerHandler(CMSG_PICKUP, gameHandler);
- connectionHandler->registerHandler(CMSG_USE_OBJECT, gameHandler);
- connectionHandler->registerHandler(CMSG_USE_ITEM, gameHandler); // NOTE: this is probably redundant (CMSG_USE_OBJECT)
- connectionHandler->registerHandler(CMSG_TARGET, gameHandler);
- connectionHandler->registerHandler(CMSG_WALK, gameHandler);
- connectionHandler->registerHandler(CMSG_START_TRADE, gameHandler);
- connectionHandler->registerHandler(CMSG_START_TALK, gameHandler);
- connectionHandler->registerHandler(CMSG_REQ_TRADE, gameHandler);
- connectionHandler->registerHandler(CMSG_EQUIP, gameHandler);
-
- if (!connectionHandler->startListen(int(config.getValue("ListenOnPort", DEFAULT_SERVER_PORT)))) {
+ if (!accountHandler->startListen(int(config.getValue("ListenOnPort", DEFAULT_SERVER_PORT))) ||
+ !chatHandler->startListen(int(config.getValue("ListenOnPort", DEFAULT_SERVER_PORT)) + 1) ||
+ !gameHandler->startListen(int(config.getValue("ListenOnPort", DEFAULT_SERVER_PORT)) + 2)) {
LOG_ERROR("Unable to create an ENet server host.", 0);
return 3;
}
@@ -393,16 +360,21 @@ int main(int argc, char *argv[])
LOG_INFO("World time: " << worldTime, 0);
}
- // - Handle all messages that are in the message queue
- // - Update all active objects/beings
- connectionHandler->process();
+ // Handle all messages that are in the message queues
+ accountHandler->process();
+ chatHandler->process();
+ gameHandler->process();
+ // Update all active objects/beings
state.update();
- connectionHandler->process();
+ // Send potentially urgent outgoing messages
+ gameHandler->flush();
}
worldTimer.sleep();
}
LOG_INFO("Received: Quit signal, closing down...", 0);
- connectionHandler->stopListen();
+ gameHandler->stopListen();
+ chatHandler->stopListen();
+ accountHandler->stopListen();
deinitialize();
}