mirror of
https://github.com/mangosfour/server.git
synced 2025-12-16 13:37:00 +00:00
[9935] ACE realmd, thanks to Zor and Vladimir for windows.
This commit is contained in:
parent
d4f1b510ae
commit
8a1fd9e086
13 changed files with 835 additions and 338 deletions
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include "Config/ConfigEnv.h"
|
||||
#include "Log.h"
|
||||
#include "sockets/ListenSocket.h"
|
||||
#include "AuthSocket.h"
|
||||
#include "SystemConfig.h"
|
||||
#include "revision.h"
|
||||
|
|
@ -36,6 +35,11 @@
|
|||
#include <openssl/opensslv.h>
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
#include <ace/Dev_Poll_Reactor.h>
|
||||
#include <ace/ACE.h>
|
||||
#include <ace/Acceptor.h>
|
||||
#include <ace/SOCK_Acceptor.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include "ServiceWin32.h"
|
||||
char serviceName[] = "realmd";
|
||||
|
|
@ -173,6 +177,12 @@ extern int main(int argc, char **argv)
|
|||
DETAIL_LOG("WARNING: Minimal required version [OpenSSL 0.9.8k]");
|
||||
}
|
||||
|
||||
#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())
|
||||
|
|
@ -204,25 +214,25 @@ extern int main(int argc, char **argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
///- 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");
|
||||
|
||||
SocketHandler h;
|
||||
ListenSocket<AuthSocket> authListenSocket(h);
|
||||
if ( authListenSocket.Bind(bind_ip.c_str(),rmport))
|
||||
{
|
||||
sLog.outError( "MaNGOS realmd can not bind to %s:%d",bind_ip.c_str(), rmport );
|
||||
Log::WaitBeforeContinueIfNeed();
|
||||
return 1;
|
||||
}
|
||||
|
||||
// cleanup query
|
||||
//set expired bans to inactive
|
||||
// set expired bans to inactive
|
||||
loginDatabase.Execute("UPDATE account_banned SET active = 0 WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
|
||||
loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
|
||||
|
||||
h.Add(&authListenSocket);
|
||||
///- Launch the listening network socket
|
||||
ACE_Acceptor<AuthSocket, ACE_SOCK_Acceptor> acceptor;
|
||||
|
||||
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("MaNGOS realmd can not bind to %s:%d", bind_ip.c_str(), rmport);
|
||||
Log::WaitBeforeContinueIfNeed();
|
||||
return 1;
|
||||
}
|
||||
|
||||
///- Catch termination signals
|
||||
HookSignals();
|
||||
|
|
@ -277,8 +287,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 )
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue