コード例 #1
0
ファイル: main.cpp プロジェクト: osROSE/osrose
// 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;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: TheDgtl/osrose-droprev
// Main server function
int main(int argc, char *argv[])
{
	//LMA: Opening log.
	LogHandleSp(1);
	LogDebugPriority(0,true);   //LMA: LogDebug won't appear in Logs or screen.

    srand( (unsigned)time(NULL) );
    srand( rand()*time(NULL) );

    //LMA: TEST DEACTIVATING ERROR TRAPPING
    //Uncomment following line to use "console" mode (control+C).
    //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;

	//LMA: closing log.
	LogHandleSp(0);

	return EXIT_SUCCESS;
}
コード例 #3
0
/*
	Recv需要多次接收(头+体),并且验证合法性。
	因此把资源操作放在外部,而消息提示放在内部 
*/
int CBinServerPlayTCP::Recv()
{
	int nResult;
	CUserBridge    UserBridge;		//防止goto 错误提示

	//debug, with select
	fd_set SetRead;
	int nTotal = 0;
	timeval TimeSelect;

	FD_ZERO(&SetRead);
	FD_SET(nSocket, &SetRead);
	TimeSelect.tv_sec=1;
	TimeSelect.tv_usec=0;

	nTotal = select(0, &SetRead, NULL, NULL, &TimeSelect);
	if( SOCKET_ERROR==nTotal )
	{
		printf("Err, CBinServerPlayTCP::Recv(): %d\n", WSAGetLastError());			
		goto recv_close;
	}
	if( nTotal<=0 )
	{
		return 0;
	}
	//end debug

	//
	//recv head with protocol. reasult: close or err 
	nResult = RecvnTCP(nSocket, BufferRecv, name_msg_protocol::MSG_HEAD_BASE_SIZE);
	if( nResult<=0 )
	{
		printf("Err, CBinServerPlayTCP::Recv Head Or Close Order:%d\n", WSAGetLastError());
		goto recv_close;
	}

	MsgBaseHead* pMsgHead = (MsgBaseHead*)BufferRecv;

	//
	//check head
	if( !ProtocolVerify.IsMsgSize(pMsgHead->nSizeOfMsg, 0, 0)
	 || !ProtocolVerify.IsMsgAction(pMsgHead->__nActionOrder) )
	{				
		printf("Err, 收到不合法数据包!\n");	
		goto recv_close;
	}

	//
	//recv content with protocol
	nResult = RecvnTCP(nSocket, BufferRecv+name_msg_protocol::MSG_HEAD_BASE_SIZE, pMsgHead->nSizeOfMsg-name_msg_protocol::MSG_HEAD_BASE_SIZE);
	if( nResult<=0 )
	{		
		printf("Err, CBinServerPlayTCP::Recv Content:Close a socket:%d\n", WSAGetLastError());
		goto recv_close;
	}

	InitUserBridge(&UserBridge, nSocket);
	if( -1==g_WorldServer.ResolveMsg(pMsgHead, &UserBridge) )
	{
		printf("Err, CBinServerPlayTCP::g_WorldServer.ResolveMsg\n");
		goto recv_close;
	}
	return 0;

recv_close:
	Close();
	return -1;
}