Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
// 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;
}
Ejemplo n.º 3
0
// 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;
}
Ejemplo n.º 4
0
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;
    }
}
Ejemplo n.º 5
0
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);
    }
}