aboutsummaryrefslogtreecommitdiff
path: root/src/trinityrealm/Main.cpp
diff options
context:
space:
mode:
authorn0n4m3 <none@none>2010-03-09 18:01:42 +0300
committern0n4m3 <none@none>2010-03-09 18:01:42 +0300
commit269728b9ae3b0d2b154f96f82cfa703dde7ce2aa (patch)
tree0d7a59608ed4b55f39931680359dbe18c1e9332b /src/trinityrealm/Main.cpp
parent04e7a5bd3949b206a25d78b7f81fb1f7acf347c2 (diff)
Implement ACE netcode for realm server. Original author derex.
--HG-- branch : trunk
Diffstat (limited to 'src/trinityrealm/Main.cpp')
-rw-r--r--src/trinityrealm/Main.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/trinityrealm/Main.cpp b/src/trinityrealm/Main.cpp
index 68e200969e3..d79881a2351 100644
--- a/src/trinityrealm/Main.cpp
+++ b/src/trinityrealm/Main.cpp
@@ -25,13 +25,17 @@
#include "Common.h"
#include "Database/DatabaseEnv.h"
#include "RealmList.h"
+#include "RealmAcceptor.h"
#include "Config/ConfigEnv.h"
#include "Log.h"
-#include "sockets/ListenSocket.h"
#include "AuthSocket.h"
#include "SystemConfig.h"
#include "Util.h"
+
+#include <ace/Dev_Poll_Reactor.h>
+#include <ace/ACE.h>
+
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
@@ -158,6 +162,12 @@ extern int main(int argc, char **argv)
return 1;
}
+#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
+ ACE_Reactor::instance(new ACE_Reactor(new ACE_Dev_Poll_Reactor(ACE::max_handles(), 1), 1), true);
+#endif
+
+ sLog.outBasic("Max allowed open files is %d", ACE::max_handles());
+
/// realmd PID file creation
std::string pidfile = sConfig.GetStringDefault("PidFile", "");
if (!pidfile.empty())
@@ -201,19 +211,19 @@ extern int main(int argc, char **argv)
}
///- Launch the listening network socket
- port_t rmport = sConfig.GetIntDefault("RealmServerPort", DEFAULT_REALMSERVER_PORT);
- std::string bind_ip = sConfig.GetStringDefault("BindIP", "0.0.0.0");
+ RealmAcceptor acceptor;
- SocketHandler h;
- ListenSocket<AuthSocket> authListenSocket(h);
- if (authListenSocket.Bind(bind_ip.c_str(),rmport))
+ uint16 rmport = sConfig.GetIntDefault("RealmServerPort", DEFAULT_REALMSERVER_PORT);
+ std::string bind_ip = sConfig.GetStringDefault("BindIP", "0.0.0.0");
+
+ ACE_INET_Addr bind_addr(rmport, bind_ip.c_str());
+
+ if(acceptor.open(bind_addr, ACE_Reactor::instance(), ACE_NONBLOCK) == -1)
{
- sLog.outError("Trinity realm can not bind to %s:%d",bind_ip.c_str(), rmport);
+ sLog.outError("Trinity realm can not bind to %s:%d", bind_ip.c_str(), rmport);
return 1;
}
- h.Add(&authListenSocket);
-
///- Catch termination signals
HookSignals();
@@ -281,8 +291,11 @@ extern int main(int argc, char **argv)
///- Wait for termination signal
while (!stopEvent)
{
+ // dont move this outside the loop, the reactor will modify it
+ ACE_Time_Value interval(0, 100000);
- h.Select(0, 100000);
+ if (ACE_Reactor::instance()->run_reactor_event_loop(interval) == -1)
+ break;
if ((++loopCounter) == numLoops)
{