void HandleSignal( int num ) { switch(num) { case SIGINT:/* Interactive attention */ Log( MSG_ERROR, "Starting console..." ); GServer->startConsole( ); // restart signals StopSignal( ); StartSignal( ); break; case SIGILL:/* Illegal instruction */ Log( MSG_ERROR, "Signal received: SIGILL, Server will be closed, Trying to save..." ); GServer->isActive = false; #ifdef _WIN32 Sleep(1000); #else usleep(1000); #endif raise(num); break; case SIGFPE:/* Floating point error */ Log( MSG_ERROR, "Signal received: SIGFPE, Server will be closed, Trying to save..." ); GServer->isActive = false; raise(num); break; case SIGSEGV:/* Segmentation violation */ Log( MSG_ERROR, "Signal received: SIGSEGV, Server will be closed, Trying to save..." ); GServer->isActive = false; #ifdef _WIN32 Sleep(1000); #else usleep(1000); #endif raise(num); break; case SIGTERM:/* Termination request */ Log( MSG_INFO, "Signal received: SIGTERM, Server will be closed" ); GServer->isActive = false; break; #ifdef _WIN32 case SIGBREAK:/* Control-break */ Log( MSG_INFO, "Signal received: SIGBREAK, Server will be closed" ); GServer->isActive = false; break; #endif default: cout << "Unknown Signal Number: " << num << endl; raise(num); } }
// Main server function int main(int argc, char *argv[]) { srand( (unsigned)time(NULL) ); srand( rand()*time(NULL) ); StartSignal( ); LOG_THISSERVER = LOG_WORLD_SERVER; InitWinSocket( ); string fileconf = "worldserver.conf"; if(argc>1) { fileconf = argv[1]; } CWorldServer *server = new (nothrow) CWorldServer( fileconf ); if(server==NULL) return -1; pthread_attr_init(&server->at); pthread_attr_setdetachstate(&server->at, PTHREAD_CREATE_JOINABLE); // Connect mysql MYSQL mysql; server->DB = new CDatabase( server->Config.SQLServer.pcServer, server->Config.SQLServer.pcUserName, server->Config.SQLServer.pcPassword, server->Config.SQLServer.pcDatabase, server->Config.SQLServer.pcPort, &mysql ); server->port = server->Config.CharPort; if(server->Config.usethreads) Log( MSG_INFO, "Using Threads" ); // Start server server->port = server->Config.WorldPort; if(server->DB->Connect( )==0) Log( MSG_INFO, "Connected to MySQL server" ); else { delete server; server = NULL; #ifdef _WIN32 system("pause"); #endif return -1; } server->StartServer(); // Close server pthread_attr_destroy(&server->at); server->DB->Disconnect( ); CloseWinSocket( ); StopSignal( ); Log(MSG_INFO, "Cleaning memory, please wait..." ); delete server; server = NULL; return EXIT_SUCCESS; }
// Main function int main(int argc, char *argv[]) { //LMA: deactivating signal tracker. StartSignal( ); LOG_THISSERVER = LOG_CHARACTER_SERVER; InitWinSocket( ); string fileconf = "charserver.conf"; if(argc>1) { fileconf = argv[1]; } CCharServer *server = new (nothrow) CCharServer( fileconf ); if(server==NULL) return -1; MYSQL mysql; server->DB = new CDatabase( server->Config.SQLServer.pcServer, server->Config.SQLServer.pcUserName, server->Config.SQLServer.pcPassword, server->Config.SQLServer.pcDatabase, server->Config.SQLServer.pcPort, &mysql ); server->port = server->Config.CharPort; if(server->Config.usethreads) Log( MSG_INFO, "Using Threads" ); if(server->DB->Connect( )==0) Log( MSG_INFO, "Connected to MySQL server" ); else { delete server; #ifdef _WIN32 system("pause"); #endif return -1; } // Start server server->StartServer(); // Close server server->DB->Disconnect( ); //LMA: deleting stuff. server->chatroom_list.clear(); delete server; CloseWinSocket( ); StopSignal( ); return EXIT_SUCCESS; }
void GetTemperatureHumidity(void){ u8 check; StartSignal(); check = CheckResponse(); if(check){ RH_Byte0 = ReadByte(); RH_Byte1 = ReadByte(); T_Byte0 = ReadByte(); T_Byte1 = ReadByte(); if(CheckSum == ((RH_Byte0 + RH_Byte1 + T_Byte0 + T_Byte1) & 0xFF)) Packet[4] = '0' + RH_Byte1; Packet[3] = '0' + RH_Byte0; Packet[1] = '0' + T_Byte1; Packet[0] = '0' + T_Byte0; } }
void HandleSignal( int num ) { switch(num) { case SIGINT:/* Interactive attention */ Log( MSG_ERROR, "Starting console..." ); if(!GServer->console_started) { GServer->console_started=true; GServer->startConsole( ); // restart signals StopSignal( ); StartSignal( ); } else { //LMA: restart signals StopSignal( ); StartSignal( ); } break; case SIGILL:/* Illegal instruction */ Log( MSG_ERROR, "Signal received: SIGILL, Server will be closed, Trying to save..." ); GServer->DisconnectAll(); #ifdef _WIN32 Sleep(1000); #else usleep(1000); #endif delete GServer; raise(num); break; case SIGFPE:/* Floating point error */ Log( MSG_ERROR, "Signal received: SIGFPE, Server will be closed, Trying to save..." ); GServer->DisconnectAll(); delete GServer; raise(num); break; case SIGSEGV:/* Segmentation violation */ Log( MSG_ERROR, "Signal received: SIGSEGV, Server will be closed, Trying to save..." ); GServer->DisconnectAll(); #ifdef _WIN32 Sleep(1000); #else usleep(1000); #endif delete GServer; raise(num); break; case SIGTERM:/* Termination request */ Log( MSG_INFO, "Signal received: SIGTERM, Server will be closed" ); pthread_create( &GServer->WorldThread[SHUTDOWN_THREAD], NULL, ShutdownServer, (PVOID)0); break; #ifdef _WIN32 case SIGBREAK:/* Control-break */ Log( MSG_INFO, "Signal received: SIGBREAK, Server will be closed" ); pthread_create( &GServer->WorldThread[SHUTDOWN_THREAD], NULL, ShutdownServer, (PVOID)0); break; #endif default: cout << "Unknown Signal Number: " << num << endl; raise(num); } }