void SignalHandlerSession :: SignalReceived(int whichSignal) { LogTime(MUSCLE_LOG_CRITICALERROR, "Signal %i received, ending event loop!\n", whichSignal); EndServer(); }
int main(int argc, char * argv[]) { ParseArg(argc,argv); if (gDaemonFlag) { CUtil::DaemonInit(); } sSessCtrl; sLog->Initialize(); //if (!CUtil::SetRLimit()) // return 0; if (!g_serverIni.OpenFile("server.ini")) { IME_ERROR("Cannot open server.ini"); return 0; } if (!InitServer()) { IME_ERROR("InitServer failed"); return 0; } // //do many init db here // if (!StartDB()) // { // IME_ERROR("StartDB failed"); // return 0; // } IME_LOG("GameServer Start!"); //todo //hooksignal HookSignals(); ///- Launch CNetRunnable thread CNetRunnable * pNetRunnable = new CNetRunnable; ZThread::Thread netThread(pNetRunnable); netThread.setPriority((ZThread::Priority)1); ZThread::Thread *pRelayClientThread = NULL; if (CSet::ClientSessionRun) { ///- Launch CRelayClientRunnable thread CRelayClientRunnable * pRelayClientRunnable = new CRelayClientRunnable; // ZThread::Thread relayClientThread(pRelayClientRunnable); // relayClientThread.setPriority((ZThread::Priority)1); pRelayClientThread = new ZThread::Thread(pRelayClientRunnable); pRelayClientThread->setPriority((ZThread::Priority)1); } ///- Launch CWorldRunnable thread ZThread::Thread worldThread(new CWorldRunnable); worldThread.setPriority((ZThread::Priority)1); worldThread.wait(); netThread.wait(); //relayClientThread.wait(); if (pRelayClientThread != NULL) pRelayClientThread->wait(); //unhooksignal UnHookSignals(); EndServer(); IME_LOG("GameServer End!"); return 0; }