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); } }
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; }
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; }
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; }
//--------------------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; }
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 ); }