int main(int argc, char *argv[]) { try { SocketHandler h; if (argc > 1 && !strcmp(argv[1], "-server")) { ListenSocket<tSocket> l(h); l.Bind(4443); h.Add(&l); while (h.GetCount()) { h.Select(1, 0); } } else { std::string host = argc > 1 ? argv[1] : "www.alhem.net"; tSocket sock(h, host); h.Add(&sock); while (h.GetCount()) { h.Select(1, 0); } } } catch (const Exception& e) { printf("%s\n", e.ToString().c_str()); } }
int main2() { SocketHandler h; ListenSocket<ServerSocket> ll(h); if (ll.Bind(443)) { return -1; } h.Add(&ll); h.Select(1,0); while (h.GetCount()) { h.Select(1,0); } }
int main() { SocketHandler h; ListenSocket<ServerSocket> l(h); if (l.Bind(40001,10)) { exit(-1); } h.Add(&l); h.Select(1,0); while (h.GetCount()) { h.Select(1,0); } }
int main(int argc, char *argv[]) { int input,x; SocketHandler h; ListenSocket<DisplaySocket> l(h); std::string text = argc > 1 ? argv[1] : ""; l.Bind(12346); h.Add(&l); pid_t pid = fork(); if (pid != 0) { while (!done) { x = scanf("%d",&input); if (input == 1) { done = 1; kill(pid, SIGTERM); } } } else { while (1) { h.Select(1, 0); printf("dada\n"); } } }
int main(int argc,char *argv[]) { if (argc > 1) { SocketHandler h; ClientSocket cc(h,argv[1]); cc.Open("127.0.0.1",40001); // Add after Open h.Add(&cc); h.Select(1,0); while (h.GetCount()) { h.Select(1,0); } } }
int main() { SocketHandler h; StdoutLog log; h.RegStdLog(&log); ListenSocket<ServerSocket> l(h); l.SetIpv6(); if (l.Bind(40001,10)) { exit(-1); } h.Add(&l); h.Select(1,0); while (h.GetCount()) { h.Select(1,0); } }
int main() { SocketHandler h; ListenSocket<DisplaySocket> l(h); StdoutLog log; h.RegStdLog(&log); if (l.Bind(9001)) { exit(-1); } h.Add(&l); h.Select(1,0); while (!quit) { h.Select(1,0); } }
std::string get_http(const char *host, int port, const char *request) { SocketHandler h; GetHttp sock(h, request); sock.Open( host, port ); h.Add(&sock); while (h.GetCount()) { h.Select(1, 0); } return sock.Response(); }
int main(int argc,char *argv[]) { if (argc < 2) { printf("Usage: %s <command>\n",*argv); return -1; } SocketHandler h; StdoutLog log; h.RegStdLog(&log); ClientSocket cc(h,argv[1]); cc.SetIpv6(); cc.Open("localhost",40001); // Add after Open h.Add(&cc); h.Select(1,0); while (h.GetCount()) { h.Select(1,0); } }
int main(int argc,char *argv[]) { SocketHandler h; // enable socks4 client #ifdef ENABLE_SOCKS4 h.SetSocks4Host("somehost.com"); h.SetSocks4Port(1080); h.SetSocks4Userid("myname.net"); h.SetSocks4TryDirect(false); #endif for (int i = 1; i < argc; i++) { Get(h,argv[i]); } h.Select(1,0); while (h.GetCount()) { h.Select(1,0); } }
int main(int argc, char *argv[]) { SocketHandler h; ListenSocket<IOSocket> l(h); l.Bind(12344); h.Add(&l); IOSocket sock(h); sock.Open("192.168.7.4", 12344); h.Add(&sock); while (!quit) { h.Select(1, 0); } }
void Socket::SocketThread::Run() { SocketHandler h; h.SetSlave(); h.Add(m_socket); m_socket -> SetSlaveHandler(&h); m_socket -> OnDetached(); while (h.GetCount() && IsRunning()) { h.Select(0, 500000); } // m_socket now deleted oops // yeah oops m_socket delete its socket thread, that means this // so Socket will no longer delete its socket thread, instead we do this: SetDeleteOnExit(); }
int main(int argc, char *argv[]) { std::string host = argc > 1 ? argv[1] : "www.alhem.net"; int port = argc > 2 ? atoi(argv[2]) : 80; SocketHandler h; for (int i = 1; i < 255; i++) { char host[40]; sprintf(host, "10.170.23.%d", i); tSocket *p = new tSocket(h, host, 23); h.Add(p); } while (h.GetCount()) { h.Select(1, 0); } }
void run () { SocketHandler h; // Launch the RA listener socket ListenSocket<RASocket> RAListenSocket (h); bool usera = sConfig.GetBoolDefault ("Ra.Enable", false); if (usera) { port_t raport = sConfig.GetIntDefault ("Ra.Port", 3443); std::string stringip = sConfig.GetStringDefault ("Ra.IP", "0.0.0.0"); ipaddr_t raip; if (!Utility::u2ip (stringip, raip)) sLog.outError ("MaNGOS RA can not bind to ip %s", stringip.c_str ()); else if (RAListenSocket.Bind (raip, raport)) sLog.outError ("MaNGOS RA can not bind to port %d on %s", raport, stringip.c_str ()); else { h.Add (&RAListenSocket); sLog.outString ("Starting Remote access listner on port %d on %s", raport, stringip.c_str ()); } } // Socket Selet time is in microseconds , not miliseconds!! uint32 socketSelecttime = sWorld.getConfig (CONFIG_SOCKET_SELECTTIME); // if use ra spend time waiting for io, if not use ra ,just sleep if (usera) { while (!World::IsStopped()) { h.Select (0, socketSelecttime); checkping (); } } else { while (!World::IsStopped()) { ACE_Based::Thread::Sleep(static_cast<unsigned long> (socketSelecttime / 1000)); checkping (); } } }
void ResolvServer::Run() { // StdoutLog log; SocketHandler h; ListenSocket<ResolvSocket> l(h); if (l.Bind("127.0.0.1", m_port)) { return; } h.Add(&l); m_ready = true; while (!m_quit && IsRunning() ) { h.Select(0, 500000); } SetRunning(false); }
int main(int argc,char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s <-hostname> <-port>\n", *argv); exit(-1); } SocketHandler h; MyClient sock(h); port_t port = atoi(argv[2]); if (port == 2222) { sock.EnableSSL(); } sock.Open(argv[1], port); h.Add(&sock); while (h.GetCount()) { h.Select(); } }
/// Launch the realm server extern int main(int argc, char **argv) { sLog.SetLogDB(false); ///- Command line parsing to get the configuration file name char const* cfg_file = _RIBON_REALM_CONFIG; int c=1; while( c < argc ) { if( strcmp(argv[c],"-c") == 0) { if( ++c >= argc ) { sLog.outError("Runtime-Error: -c option requires an input argument"); usage(argv[0]); return 1; } else cfg_file = argv[c]; } #ifdef WIN32 //////////// //Services// //////////// if( strcmp(argv[c],"-s") == 0) { if( ++c >= argc ) { sLog.outError("Runtime-Error: -s option requires an input argument"); usage(argv[0]); return 1; } if( strcmp(argv[c],"install") == 0) { if (WinServiceInstall()) sLog.outString("Installing service"); return 1; } else if( strcmp(argv[c],"uninstall") == 0) { if(WinServiceUninstall()) sLog.outString("Uninstalling service"); return 1; } else { sLog.outError("Runtime-Error: unsupported option %s",argv[c]); usage(argv[0]); return 1; } } if( strcmp(argv[c],"--service") == 0) { WinServiceRun(); } //// #endif ++c; } if (!sConfig.SetSource(cfg_file)) { sLog.outError("Could not find configuration file %s.", cfg_file); return 1; } sLog.outString( "(logon-daemon) Revision: %s ", _FULLVERSION ); sLog.outString( "Build Date: %s", __DATE__ ); sLog.outString( "Build Time: %s", __TIME__ ); sLog.outString( "<Ctrl-C> to stop.\n" ); sLog.outString( "'########::'####:'########:::'#######::'##::: ##:"); sLog.outString( " ##.... ##:. ##:: ##.... ##:'##.... ##: ###:: ##:"); sLog.outString( " ##:::: ##:: ##:: ##:::: ##: ##:::: ##: ####: ##:"); sLog.outString( " ########::: ##:: ########:: ##:::: ##: ## ## ##:"); sLog.outString( " ##.. ##:::: ##:: ##.... ##: ##:::: ##: ##. ####:"); sLog.outString( " ##::. ##::: ##:: ##:::: ##: ##:::: ##: ##:. ###:"); sLog.outString( " ##:::. ##:'####: ########::. #######:: ##::. ##:"); sLog.outString( "..:::::..::....::........::::.......:::..::::..::"); sLog.outString( " L O G O N"); sLog.outString( "http://www.dark-resurrection.de/wowsp/ \n"); sLog.outString("Using configuration file %s.", cfg_file); ///- Check the version of the configuration file uint32 confVersion = sConfig.GetIntDefault("ConfVersion", 0); if (confVersion < _REALMDCONFVERSION) { sLog.outError("*****************************************************************************"); sLog.outError(" WARNING: Your RibonLogon.conf version indicates your conf file is out of date!"); sLog.outError(" Please check for updates, as your current default values may cause"); sLog.outError(" strange behavior."); sLog.outError("*****************************************************************************"); clock_t pause = 3000 + clock(); while (pause > clock()) {} } sLog.outDetail("%s (Library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); if (SSLeay() < 0x009080bfL ) { sLog.outDetail("WARNING: Outdated version of OpenSSL lib. Logins to server impossible!"); sLog.outDetail("WARNING: Minimal required version [OpenSSL 0.9.8k]"); } /// realmd PID file creation std::string pidfile = sConfig.GetStringDefault("PidFile", ""); if(!pidfile.empty()) { uint32 pid = CreatePIDFile(pidfile); if( !pid ) { sLog.outError( "Cannot create PID file %s.\n", pidfile.c_str() ); return 1; } sLog.outString( "Daemon PID: %u\n", pid ); } ///- Initialize the database connection if(!StartDB()) return 1; ///- Initialize the log database if(sConfig.GetBoolDefault("EnableLogDB", false)) { // everything successful - set var to enable DB logging once startup finished. sLog.SetLogDBLater(true); sLog.SetLogDB(false); // ensure we've set realm to 0 (realmd realmid) sLog.SetRealmID(0); } else { sLog.SetLogDBLater(false); sLog.SetLogDB(false); sLog.SetRealmID(0); } ///- Get the list of realms for the server m_realmList.Initialize(sConfig.GetIntDefault("RealmsStateUpdateDelay", 20)); if (m_realmList.size() == 0) { sLog.outError("No valid realms specified."); 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( "RibonLogon can not bind to %s:%d",bind_ip.c_str(), rmport ); return 1; } h.Add(&authListenSocket); ///- Catch termination signals HookSignals(); ///- Handle affinity for multiple processors and process priority on Windows #ifdef WIN32 { HANDLE hProcess = GetCurrentProcess(); uint32 Aff = sConfig.GetIntDefault("UseProcessors", 0); if(Aff > 0) { ULONG_PTR appAff; ULONG_PTR sysAff; if(GetProcessAffinityMask(hProcess,&appAff,&sysAff)) { ULONG_PTR curAff = Aff & appAff; // remove non accessible processors if(!curAff ) { sLog.outError("Processors marked in UseProcessors bitmask (hex) %x not accessible for realmd. Accessible processors bitmask (hex): %x",Aff,appAff); } else { if(SetProcessAffinityMask(hProcess,curAff)) sLog.outString("Using processors (bitmask, hex): %x", curAff); else sLog.outError("Can't set used processors (hex): %x", curAff); } } sLog.outString(); } bool Prio = sConfig.GetBoolDefault("ProcessPriority", false); if(Prio) { if(SetPriorityClass(hProcess,HIGH_PRIORITY_CLASS)) sLog.outString("RibonLogon process priority class set to HIGH"); else sLog.outError("ERROR: Can't set realmd process priority class."); sLog.outString(); } } #endif // maximum counter for next ping uint32 numLoops = (sConfig.GetIntDefault( "MaxPingTime", 30 ) * (MINUTE * 1000000 / 100000)); uint32 loopCounter = 0; // possibly enable db logging; avoid massive startup spam by doing it here. if (sLog.GetLogDBLater()) { sLog.outString("Enabling database logging..."); sLog.SetLogDBLater(false); // login db needs thread for logging sLog.SetLogDB(true); } else { sLog.SetLogDB(false); sLog.SetLogDBLater(false); } ///- Wait for termination signal while (!stopEvent) { h.Select(0, 100000); if( (++loopCounter) == numLoops ) { loopCounter = 0; sLog.outDetail("Ping MySQL to keep connection alive"); delete loginDatabase.Query("SELECT 1 FROM realmlist LIMIT 1"); } #ifdef WIN32 if (m_ServiceStatus == 0) stopEvent = true; while (m_ServiceStatus == 2) Sleep(1000); #endif } ///- Wait for the delay thread to exit loginDatabase.ThreadEnd(); loginDatabase.HaltDelayThread(); ///- Remove signal handling before leaving UnhookSignals(); sLog.outString( "Halting process..." ); return 0; }
bool Master::Run() { sLog.outString( "MaNGOS daemon %s", _FULLVERSION ); sLog.outString( "<Ctrl-C> to stop.\n" ); _StartDB(); loglevel = (uint8)sConfig.GetIntDefault("LogLevel", DEFAULT_LOG_LEVEL); std::string host; host = sConfig.GetStringDefault( "Host", DEFAULT_HOST ); sLog.outString( "Server: %s\n", host.c_str() ); new World; sWorld.SetPlayerLimit( sConfig.GetIntDefault("PlayerLimit", DEFAULT_PLAYER_LIMIT) ); sWorld.SetMotd( sConfig.GetStringDefault("Motd", "Welcome to the Massive Network Game Object Server." ).c_str() ); sWorld.SetInitialWorldSettings(); port_t wsport, rmport; rmport = sConfig.GetIntDefault( "RealmServerPort", DEFAULT_REALMSERVER_PORT ); wsport = sConfig.GetIntDefault( "WorldServerPort", DEFAULT_WORLDSERVER_PORT ); // load regeneration rates. sWorld.setRate(RATE_HEALTH,sConfig.GetFloatDefault("Rate.Health",DEFAULT_REGEN_RATE)); sWorld.setRate(RATE_POWER1,sConfig.GetFloatDefault("Rate.Power1",DEFAULT_REGEN_RATE)); sWorld.setRate(RATE_POWER2,sConfig.GetFloatDefault("Rate.Power2",DEFAULT_REGEN_RATE)); sWorld.setRate(RATE_POWER3,sConfig.GetFloatDefault("Rate.Power4",DEFAULT_REGEN_RATE)); sWorld.setRate(RATE_DROP,sConfig.GetFloatDefault("Rate.Drop",DEFAULT_DROP_RATE)); sWorld.setRate(RATE_XP,sConfig.GetFloatDefault("Rate.XP",DEFAULT_XP_RATE)); sRealmList.setServerPort(wsport); sRealmList.GetAndAddRealms (); SocketHandler h; ListenSocket<WorldSocket> worldListenSocket(h); ListenSocket<AuthSocket> authListenSocket(h); if (worldListenSocket.Bind(wsport) || authListenSocket.Bind(rmport)) { delete World::getSingletonPtr(); _StopDB(); return 0; } h.Add(&worldListenSocket); h.Add(&authListenSocket); _HookSignals(); ZThread::Thread t(new WorldRunnable); uint32 realCurrTime, realPrevTime; realCurrTime = realPrevTime = getMSTime(); while (!Master::m_stopEvent) { // uint32 exceeded if (realPrevTime > realCurrTime) realPrevTime = 0; realCurrTime = getMSTime(); sWorldSocketMgr.Update( realCurrTime - realPrevTime ); realPrevTime = realCurrTime; h.Select(0, 100000); // 100 ms } _UnhookSignals(); t.wait(); delete World::getSingletonPtr(); _StopDB(); sLog.outString( "Halting process..." ); return 0; }
/// Launch the realm server extern int main(int argc, char **argv) { ///- Command line parsing to get the configuration file name char const* cfg_file = _REALMD_CONFIG; int c=1; while( c < argc ) { if( strcmp(argv[c],"-c") == 0) { if( ++c >= argc ) { sLog.outError("Runtime-Error: -c option requires an input argument"); usage(argv[0]); return 1; } else cfg_file = argv[c]; } #ifdef WIN32 //////////// //Services// //////////// if( strcmp(argv[c],"-s") == 0) { if( ++c >= argc ) { sLog.outError("Runtime-Error: -s option requires an input argument"); usage(argv[0]); return 1; } if( strcmp(argv[c],"install") == 0) { if (WinServiceInstall()) sLog.outString("Installing service"); return 1; } else if( strcmp(argv[c],"uninstall") == 0) { if(WinServiceUninstall()) sLog.outString("Uninstalling service"); return 1; } else { sLog.outError("Runtime-Error: unsupported option %s",argv[c]); usage(argv[0]); return 1; } } if( strcmp(argv[c],"--service") == 0) { WinServiceRun(); } //// #endif ++c; } if (!sConfig.SetSource(cfg_file)) { sLog.outError("Could not find configuration file %s.", cfg_file); return 1; } sLog.outString("Using configuration file %s.", cfg_file); ///- Check the version of the configuration file uint32 confVersion = sConfig.GetIntDefault("ConfVersion", 0); if (confVersion < _REALMDCONFVERSION) { sLog.outError("*****************************************************************************"); sLog.outError(" WARNING: Your realmd.conf version indicates your conf file is out of date!"); sLog.outError(" Please check for updates, as your current default values may cause"); sLog.outError(" strange behavior."); sLog.outError("*****************************************************************************"); clock_t pause = 3000 + clock(); while (pause > clock()); } sLog.outString( "MaNGOS realm daemon %s", _FULLVERSION ); sLog.outString( "<Ctrl-C> to stop.\n" ); /// realmd PID file creation std::string pidfile = sConfig.GetStringDefault("PidFile", ""); if(!pidfile.empty()) { uint32 pid = CreatePIDFile(pidfile); if( !pid ) { sLog.outError( "Cannot create PID file %s.\n", pidfile.c_str() ); return 1; } sLog.outString( "Daemon PID: %u\n", pid ); } ///- Initialise the database connection std::string dbstring; if(!StartDB(dbstring)) return 1; ///- Get the list of realms for the server m_realmList.Initialize(sConfig.GetIntDefault("RealmsStateUpdateDelay", 20)); if (m_realmList.size() == 0) { sLog.outError("No valid realms specified."); 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 ); return 1; } h.Add(&authListenSocket); ///- Catch termination signals HookSignals(); ///- Handle affinity for multiple processors and process priority on Windows #ifdef WIN32 { HANDLE hProcess = GetCurrentProcess(); uint32 Aff = sConfig.GetIntDefault("UseProcessors", 0); if(Aff > 0) { ULONG_PTR appAff; ULONG_PTR sysAff; if(GetProcessAffinityMask(hProcess,&appAff,&sysAff)) { ULONG_PTR curAff = Aff & appAff; // remove non accessible processors if(!curAff ) { sLog.outError("Processors marked in UseProcessors bitmask (hex) %x not accessible for realmd. Accessible processors bitmask (hex): %x",Aff,appAff); } else { if(SetProcessAffinityMask(hProcess,curAff)) sLog.outString("Using processors (bitmask, hex): %x", curAff); else sLog.outError("Can't set used processors (hex): %x", curAff); } } sLog.outString(); } bool Prio = sConfig.GetBoolDefault("ProcessPriority", false); if(Prio) { if(SetPriorityClass(hProcess,HIGH_PRIORITY_CLASS)) sLog.outString("realmd process priority class set to HIGH"); else sLog.outError("ERROR: Can't set realmd process priority class."); sLog.outString(); } } #endif // maximum counter for next ping uint32 numLoops = (sConfig.GetIntDefault( "MaxPingTime", 30 ) * (MINUTE * 1000000 / 100000)); uint32 loopCounter = 0; ///- Wait for termination signal while (!stopEvent) { h.Select(0, 100000); if( (++loopCounter) == numLoops ) { loopCounter = 0; sLog.outDetail("Ping MySQL to keep connection alive"); delete dbRealmServer.Query("SELECT 1 FROM realmlist LIMIT 1"); } #ifdef WIN32 if (m_ServiceStatus == 0) stopEvent = true; while (m_ServiceStatus == 2) Sleep(1000); #endif } ///- Wait for the delay thread to exit dbRealmServer.HaltDelayThread(); ///- Remove signal handling before leaving UnhookSignals(); sLog.outString( "Halting process..." ); return 0; }
bool Master::Run() { sLog.outString( "MaNGOS daemon %s", _FULLVERSION ); sLog.outString( "<Ctrl-C> to stop.\n\n" ); sLog.outTitle( "MM MM MM MM MMMMM MMMM MMMMM"); sLog.outTitle( "MM MM MM MM MMM MMM MM MM MMM MMM"); sLog.outTitle( "MMM MMM MMM MM MMM MMM MM MM MMM"); sLog.outTitle( "MM M MM MMMM MM MMM MM MM MMM"); sLog.outTitle( "MM M MM MMMMM MM MMMM MMM MM MM MMM"); sLog.outTitle( "MM M MM M MMM MM MMM MMMMMMM MM MM MMM"); sLog.outTitle( "MM MM MMM MM MM MM MMM MM MM MMM"); sLog.outTitle( "MM MM MMMMMMM MM MM MMM MMM MM MM MMM MMM"); sLog.outTitle( "MM MM MM MMM MM MM MMMMMM MMMM MMMMM"); sLog.outTitle( " MM MMM http://www.mangosproject.org"); sLog.outTitle( " MMMMMM\n\n"); _StartDB(); //loglevel = (uint8)sConfig.GetIntDefault("LogLevel", DEFAULT_LOG_LEVEL); sWorld.SetPlayerLimit( sConfig.GetIntDefault("PlayerLimit", DEFAULT_PLAYER_LIMIT) ); sWorld.SetMotd( sConfig.GetStringDefault("Motd", "Welcome to the Massive Network Game Object Server." ).c_str() ); sWorld.SetInitialWorldSettings(); port_t wsport, rmport; rmport = sWorld.getConfig(CONFIG_PORT_REALM); //sConfig.GetIntDefault( "RealmServerPort", DEFAULT_REALMSERVER_PORT ); wsport = sWorld.getConfig(CONFIG_PORT_WORLD); //sConfig.GetIntDefault( "WorldServerPort", DEFAULT_WORLDSERVER_PORT ); uint32 socketSelecttime; //sConfig.GetIntDefault( "SocketSelectTime", DEFAULT_SOCKET_SELECT_TIME ); socketSelecttime = sWorld.getConfig(CONFIG_SOCKET_SELECTTIME); //uint32 grid_clean_up_delay = sConfig.GetIntDefault("GridCleanUpDelay", 300); //sLog.outDebug("Setting Grid clean up delay to %d seconds.", grid_clean_up_delay); //grid_clean_up_delay *= 1000; //MapManager::Instance().SetGridCleanUpDelay(grid_clean_up_delay); //uint32 map_update_interval = sConfig.GetIntDefault("MapUpdateInterval", 100); //sLog.outDebug("Setting map update interval to %d milli-seconds.", map_update_interval); //MapManager::Instance().SetMapUpdateInterval(map_update_interval); // sRealmList.setServerPort(wsport); // sRealmList.GetAndAddRealms (); SocketHandler h; ListenSocket<WorldSocket> worldListenSocket(h); // ListenSocket<AuthSocket> authListenSocket(h); if (worldListenSocket.Bind(wsport)) { _StopDB(); sLog.outString( "MaNGOS can not bind to that port" ); exit(1); } h.Add(&worldListenSocket); // h.Add(&authListenSocket); _HookSignals(); ZThread::Thread t(new WorldRunnable); //#ifndef WIN32 t.setPriority ((ZThread::Priority )2); //#endif #ifdef ENABLE_CLI ZThread::Thread td1(new CliRunnable); #endif #ifdef ENABLE_RA ListenSocket<RASocket> RAListenSocket(h); if (RAListenSocket.Bind(sConfig.GetIntDefault( "RA.Port", 3443 ))) { sLog.outString( "MaNGOS can not bind to that port" ); // exit(1); go on with no RA } h.Add(&RAListenSocket); #endif #ifdef WIN32 { HANDLE hProcess = GetCurrentProcess(); uint32 Aff = sConfig.GetIntDefault("UseProcessors", 0); if(Aff > 0) { uint32 appAff; uint32 sysAff; if(GetProcessAffinityMask(hProcess,&appAff,&sysAff)) { uint32 curAff = Aff & appAff; // remove non accassable processors if(!curAff ) { sLog.outError("Processors marked in UseProcessors bitmask (hex) %x not accessable for mangosd. Accessable processors bitmask (hex): %x",Aff,appAff); } else { if(SetProcessAffinityMask(hProcess,curAff)) sLog.outString("Using processors (bitmask, hex): %x", curAff); else sLog.outError("Can't set used processors (hex): %x",curAff); } } sLog.outString(""); } uint32 Prio = sConfig.GetIntDefault("ProcessPriority", 0); if(Prio) { if(SetPriorityClass(hProcess,HIGH_PRIORITY_CLASS)) sLog.outString("mangosd process priority class set to HIGH"); else sLog.outError("ERROR: Can't set mangosd process priority class."); sLog.outString(""); } } #endif uint32 realCurrTime, realPrevTime; realCurrTime = realPrevTime = getMSTime(); while (!World::m_stopEvent) { if (realPrevTime > realCurrTime) realPrevTime = 0; realCurrTime = getMSTime(); sWorldSocketMgr.Update( realCurrTime - realPrevTime ); realPrevTime = realCurrTime; //h.Select(0, 100000); h.Select(0, socketSelecttime); } sLog.outString( "WORLD: Saving Addons" ); sAddOnHandler._SaveToDB(); _UnhookSignals(); t.wait(); _StopDB(); sLog.outString( "Halting process..." ); return 0; }