示例#1
0
void EventServerInit()
{
g_bIsServer[ST_EVENTSERVER] = TRUE;

	g_ESInfo.TCPPort = GetPrivateProfileInt(ES_INISECTION,"TCPPort",44456,INI_FILE);
	GetPrivateProfileString(ES_INISECTION,"DSN","MU2003_EVENT_DB",g_ESInfo.dbDSN,sizeof(g_ESInfo.dbDSN),INI_FILE);
	GetPrivateProfileString(ES_INISECTION,"MyDSN","MuOnline",g_ESInfo.mydbDSN,sizeof(g_ESInfo.mydbDSN),INI_FILE);

	g_EventDB.S_TYPE = ST_EVENTSERVER;
	g_MyEventDB.S_TYPE = ST_EVENTSERVER;

	if( g_EventDB.Connect(3,g_ESInfo.dbDSN,SQLUser,SQLPass) == TRUE )
	{
		g_Window.LogAdd(Log::Info, "[ %s ] connection successful !",g_ESInfo.dbDSN);
	}

	if( g_MyEventDB.Connect(3,g_ESInfo.mydbDSN,SQLUser,SQLPass) == TRUE )
	{
		g_Window.LogAdd(Log::Info, "[ %s ] connection successful !",g_ESInfo.mydbDSN);
	}

	if(CreateGIocp(g_ESInfo.TCPPort,ST_EVENTSERVER) != TRUE)
	{
		g_Window.LogAdd(Log::Error, "Failed to start [ ST_EVENTSERVER ] on port [ %d ]",g_ESInfo.TCPPort);
	}
	else
	{
		g_Window.LogAdd(Log::Info, "[ EventServer ] created on port [ %d ]",g_ESInfo.TCPPort);
	}
}
示例#2
0
文件: Arena.cpp 项目: careysky/FlyFF
BOOL CArena::SaveToDatabase( void )
{
	CQuery* pQuery = new CQuery;
	if( pQuery->Connect( 3, "Character01", "", "" ) == FALSE )
	{
		pQuery->DisConnect();
		SAFE_DELETE( pQuery );
		return FALSE;
	}
	
	for( map<u_long, ARENAPLAYER>::iterator it = m_mArenaMap.begin(); it != m_mArenaMap.end(); ++it )
	{
		if( it->second.bUpdate == FALSE ) //nothing has changed, please don't Query me!
			continue;

		it->second.bUpdate = FALSE;

		CString strExecUpdate;
		strExecUpdate.Format( "UPDATE dbo.ARENA SET "
			"m_idPlayer = %u, "
			"m_nKill = %u, "
			"m_nDeath = %u, "
			"m_nRow = %u, "
			"m_nJob = %u, "
			"m_nDeathMatchWin = %u, "
			"m_nDeathMatchLose = %u, "
			"m_nDuelWin = %u, "
			"m_nDuelLose = %u, "
			"m_nArenaPoint = %I64u, "
			"m_szName = '%s' "
			"WHERE m_idPlayer = %u",
			it->first,
			it->second.nKill,
			it->second.nDeath,
			it->second.nRow,
			it->second.nJob,
			it->second.nDeathMatchWin,
			it->second.nDeathMatchLose,
			it->second.nDuelWin,
			it->second.nDuelLose,
			it->second.n64ArenaPoint,
			it->second.szName,
			it->first );

			if( pQuery->Exec( strExecUpdate ) == FALSE )
			{
				Error( "---------- Start of Arena Save Error --------" );
				Error( "CArena --> Save Database Player." );
				Error( "User ID:%u --> Kills:%u --> Death:%u ---> Row:%u",
					it->first, it->second.nKill, it->second.nDeath, it->second.nRow );
				Error( "Query: --> %s", strExecUpdate );
				Error( "---------- End of Arena Save Error --------" );
			}
			pQuery->Clear();
	}

	pQuery->DisConnect();
	SAFE_DELETE( pQuery );
	return TRUE;
}
示例#3
0
文件: Arena.cpp 项目: careysky/FlyFF
BOOL CArena::AddToDatabase( u_long idPlayer, CString szName, u_int nJob )
{
	CQuery* pQuery = new CQuery;
	if( pQuery->Connect( 3, "Character01", "", "" ) == FALSE )
	{
		pQuery->DisConnect();
		SAFE_DELETE( pQuery );
		return FALSE;
	}

	CString szDatabaseAdd;
	szDatabaseAdd.Format( "INSERT INTO dbo.ARENA values(%u," //idPlayer
		"0,"//nKill
		"0,"//nDeath
		"0,"//nRow
		"%u,"//nJob
		"0,"//nDeathmatchWin
		"0,"//nDeathMatchLose
		"0,"//nDuelWin
		"0,"//nDuelLose
		"0,"//n64ArenaPoint
		"'%s')", /*szName*/
		idPlayer, nJob, szName );
	

	//Error( szDatabaseAdd );

		/*

			ar << it->second.nKill;
		ar << it->second.nDeath;
		ar << it->second.nRow;
		ar << it->second.nJob;
		ar << it->second.nDeathMatchWin;
		ar << it->second.nDeathMatchLose;
		ar << it->second.nDuelWin;
		ar << it->second.nDuelLose;
		ar << it->second.n64ArenaPoint;

		*/

	if( pQuery->Exec( szDatabaseAdd ) == FALSE )
	{
		Error( "------- Start of CArena::AddToDatabase -------" );
		Error( "Error Inserting User. Query ---> %s", szDatabaseAdd );
		Error( "--------- End of CArena::AddToDatabase -------" );
		pQuery->DisConnect();
		SAFE_DELETE( pQuery );
		return FALSE;
	}

	pQuery->DisConnect();
	SAFE_DELETE( pQuery );
	return TRUE;
}
示例#4
0
CQuery* CDbController::CreateQuery( void )
{
	CQuery* pQuery	= new CQuery;
	const char* pass	= CDbManager::GetInstance().DB_ADMIN_PASS_CHARACTER01;
	if( !pQuery->Connect( 3, DSN_NAME_CHARACTER01, DB_ADMIN_ID_CHARACTER01, pass ) )
	{
		::AfxMessageBox( "Can't connect db: CDbController.CreateQuery" );
		SAFE_DELETE( pQuery );
	}
	return pQuery;
}
示例#5
0
文件: Arena.cpp 项目: careysky/FlyFF
//--------------------Database Operations----------------------
BOOL CArena::Load( void )
{
	CQuery* pQuery = new CQuery;
	if( pQuery->Connect( 3, "Character01", "", "" ) == FALSE )
	{
		pQuery->DisConnect();
		SAFE_DELETE( pQuery );
		return FALSE;
	}

	if( pQuery->Exec( "SELECT * FROM dbo.ARENA" ) == FALSE )
	{
		pQuery->DisConnect();
		SAFE_DELETE( pQuery );
		return FALSE;
	}

	while( pQuery->Fetch() )
	{
		char szQryName[MAX_NAME] = { 0, };
		ARENAPLAYER dbPlayer;

		u_long idPlayer				= static_cast<u_long>( pQuery->GetInt64( "m_idPlayer" ) );

		dbPlayer.nKill				= static_cast<u_int>( pQuery->GetInt64( "m_nKill" ) );
		dbPlayer.nDeath				= static_cast<u_int>( pQuery->GetInt64( "m_nDeath" ) );
		dbPlayer.nRow				= static_cast<u_int>( pQuery->GetInt64( "m_nRow" ) );
		dbPlayer.nJob				= static_cast<u_int>( pQuery->GetInt64( "m_nJob" ) );
		dbPlayer.nDeathMatchWin		= static_cast<u_int>( pQuery->GetInt64( "m_nDeathMatchWin" ) );
		dbPlayer.nDeathMatchLose	= static_cast<u_int>( pQuery->GetInt64( "m_nDeathMatchLose" ) );
		dbPlayer.nDuelWin			= static_cast<u_int>( pQuery->GetInt64( "m_nDuelWin" ) );
		dbPlayer.nDuelLose			= static_cast<u_int>( pQuery->GetInt64( "m_nDuelLose" ) );
		dbPlayer.n64ArenaPoint		=					  pQuery->GetInt64( "m_nArenaPoint" );
						
					pQuery->GetStr( "m_szName", szQryName );
		dbPlayer.szName				=  CString( szQryName );

		m_mArenaMap.insert( make_pair( idPlayer, dbPlayer ) );
	}

	pQuery->DisConnect();
	SAFE_DELETE( pQuery );
	return TRUE;
}
示例#6
0
u_int __stdcall DbWorkerThread( LPVOID nIndex )
{
	CQuery query;
	if( FALSE == query.Connect( 3, DbManager->m_szDSN_NAME_COLLECTION, DbManager->m_szDB_ADMIN_ID_COLLECTION, DbManager->m_szDB_ADMIN_PASS_COLLECTION ) )
	{
		AfxMessageBox( "Error : Not Connect Collection DB" );
	}

	SetEvent( s_hHandle );

	HANDLE hIOCP				= DbManager->GetIOCPHandle( (int)nIndex );
	DWORD dwBytesTransferred	= 0;
	LPDWORD lpCompletionKey		= NULL;
	LPDB_OVERLAPPED_PLUS pData	= NULL;

	while( 1 )
	{
		BOOL fOk = GetQueuedCompletionStatus( hIOCP,
										 &dwBytesTransferred,
										(LPDWORD)&lpCompletionKey,
										(LPOVERLAPPED*)&pData,
										INFINITE );

		if( fOk == FALSE ) 
		{	
			ASSERT( 0 );				// fatal error
			continue;
		}

		if( dwBytesTransferred == 0 )	// terminate
			return( 0 );
		
		switch( pData->nQueryMode )
		{
			case LOG_CERTIFY_INFO:
				DbManager->LogCertifyInfo( query, pData );
				break;
		}
	}
	return( 0 );
}