diff options
Diffstat (limited to 'src/trinityrealm/Main.cpp')
-rw-r--r-- | src/trinityrealm/Main.cpp | 33 |
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) { |