📄 dbagent.cpp
字号:
char szKnightsName[MAX_ID_SIZE+1];
memset( IDName, 0x00, MAX_ID_SIZE+1 );
memset( szKnightsName, 0x00, MAX_ID_SIZE+1 );
SQLSMALLINT IDNum, Members;
SQLINTEGER Indexind = SQL_NTS, nPoints = 0;
int len = 0;
wsprintf( szSQL, TEXT( "SELECT IDNum, Nation, IDName, Members, Points FROM KNIGHTS WHERE IDNum=%d" ), index );
DBProcessNumber( 17 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLFetch(hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLGetData(hstmt,1 ,SQL_C_SSHORT,&IDNum, 0,&Indexind);
SQLGetData(hstmt,2 ,SQL_C_TINYINT,&Nation, 0,&Indexind);
SQLGetData(hstmt,3 ,SQL_C_CHAR ,IDName, MAX_ID_SIZE+1,&Indexind);
SQLGetData(hstmt,4 ,SQL_C_SSHORT,&Members, 0,&Indexind);
SQLGetData(hstmt,5 ,SQL_C_LONG,&nPoints, 0,&Indexind);
tempid = IDName;
tempid.TrimRight();
strcpy( szKnightsName, (char*)(LPCTSTR) tempid);
SetShort( buff, IDNum, buff_index);
SetByte( buff, Nation, buff_index);
SetShort( buff, strlen(szKnightsName), buff_index);
SetString( buff, szKnightsName, strlen(szKnightsName), buff_index);
SetShort( buff, Members, buff_index );
SetDWORD( buff, nPoints, buff_index );
retval = TRUE;
}
}
else {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return FALSE;
}
}
retval = FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
else
return FALSE;
return retval;
}
BOOL CDBAgent::SetLogInInfo(const char *accountid, const char *charid, const char *serverip, int serverno, const char *clientip, BYTE bInit)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLINTEGER cbParmRet=SQL_NTS;
BOOL bSuccess = TRUE;
if( bInit == 0x01 )
wsprintf( szSQL, TEXT( "INSERT INTO CURRENTUSER (strAccountID, strCharID, nServerNo, strServerIP, strClientIP) VALUES (\'%s\',\'%s\',%d,\'%s\',\'%s\')" ), accountid, charid, serverno, serverip, clientip );
else if( bInit == 0x02 )
wsprintf( szSQL, TEXT( "UPDATE CURRENTUSER SET nServerNo=%d, strServerIP=\'%s\' WHERE strAccountID = \'%s\'" ), serverno, serverip, accountid );
else
return FALSE;
DBProcessNumber( 18 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode==SQL_ERROR)
{
bSuccess = FALSE;
if( DisplayErrorMsg(hstmt) == -1 ) {
m_AccountDB.Close();
if( !m_AccountDB.IsOpen() ) {
ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
return FALSE;
}
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return bSuccess;
}
int CDBAgent::AccountLogout(const char *accountid)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLSMALLINT sParmRet=0;
SQLINTEGER cbParmRet=SQL_NTS;
wsprintf( szSQL, TEXT( "{call ACCOUNT_LOGOUT( \'%s\', ?)}" ), accountid);
DBProcessNumber( 19 );
CTime t = CTime::GetCurrentTime();
char strlog[256]; memset(strlog, 0x00, 256);
sprintf(strlog, "[AccountLogout] acname=%s \r\n", accountid);
m_pMain->WriteLogFile( strlog );
//m_pMain->m_LogFile.Write(strlog, strlen(strlog));
TRACE(strlog);
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLBindParameter(hstmt,1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_SMALLINT, 0,0, &sParmRet,0, &cbParmRet );
if(retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
if( sParmRet == 0 )
return -1;
else
return sParmRet; // 1 == success
}
else
{
if( DisplayErrorMsg(hstmt) == -1 ) {
m_AccountDB.Close();
if( !m_AccountDB.IsOpen() ) {
ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
return FALSE;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return -1;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return -1;
}
BOOL CDBAgent::CheckUserData(const char *accountid, const char *charid, int type, int nTimeNumber, int comparedata)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL bData = TRUE, retval = FALSE;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLINTEGER Indexind = SQL_NTS, dwTime = 0, iData = 0;
if( type == 1 )
wsprintf( szSQL, TEXT( "SELECT dwTime, nMoney FROM WAREHOUSE WHERE strAccountID=\'%s\'" ), accountid );
else
wsprintf( szSQL, TEXT( "SELECT dwTime, [Exp] FROM USERDATA WHERE strUserID=\'%s\'" ), charid );
DBProcessNumber( 20 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLFetch(hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLGetData(hstmt,1 ,SQL_C_LONG, &dwTime, 0,&Indexind);
SQLGetData(hstmt,2 ,SQL_C_LONG, &iData, 0,&Indexind); // type:1 -> Bank Money type:2 -> Exp
if( nTimeNumber != dwTime || comparedata != iData) { // check userdata have saved
retval = FALSE;
}
else
retval = TRUE;
}
}
else {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return FALSE;
}
}
retval = FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
else
return FALSE;
return retval;
}
void CDBAgent::LoadKnightsAllList( int nation)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL bData = TRUE;
int count = 0;
CString tempid;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
char send_buff[512]; memset(send_buff, 0x00, 512);
char temp_buff[512]; memset(temp_buff, 0x00, 512);
int send_index = 0, temp_index = 0;
SQLCHAR bRanking = 0;
SQLSMALLINT shKnights = 0;
SQLINTEGER Indexind = SQL_NTS, nPoints = 0;
if( nation == 3 ) // battle zone
wsprintf( szSQL, TEXT( "SELECT IDNum, Points, Ranking FROM KNIGHTS WHERE Points <> 0 ORDER BY Points DESC" ), nation );
else
wsprintf( szSQL, TEXT( "SELECT IDNum, Points, Ranking FROM KNIGHTS WHERE Nation=%d AND Points <> 0 ORDER BY Points DESC" ), nation );
DBProcessNumber( 21 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS) {
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO) {
while (bData) {
retcode = SQLFetch(hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLGetData(hstmt,1 ,SQL_C_SSHORT,&shKnights, 0,&Indexind);
SQLGetData(hstmt,2 ,SQL_C_LONG, &nPoints, 0,&Indexind);
SQLGetData(hstmt,3 ,SQL_C_TINYINT, &bRanking, 0,&Indexind);
SetShort( temp_buff, shKnights, temp_index);
SetDWORD( temp_buff, nPoints, temp_index);
SetByte( temp_buff, bRanking, temp_index );
count++;
if( count >= 40 ) { // 40俺 窜困肺 焊辰促
SetByte( send_buff, KNIGHTS_ALLLIST_REQ, send_index );
SetShort( send_buff, -1, send_index );
SetByte( send_buff, count, send_index );
SetString( send_buff, temp_buff, temp_index, send_index );
do {
if( m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ) == 1 )
break;
else
count++;
} while( count < 50 );
if( count >= 50 )
m_pMain->m_OutputList.AddString("LoadKnightsAllList Packet Drop!!!");
memset( send_buff, 0x00, 512); memset( temp_buff, 0x00, 512);
send_index = temp_index = 0; count = 0;
}
bData = TRUE;
}
else
bData = FALSE;
}
}
else {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return;
}
}
}
if( count < 40 ) { // 40俺甫 焊郴瘤 给茄 版快
SetByte( send_buff, KNIGHTS_ALLLIST_REQ, send_index );
SetShort( send_buff, -1, send_index );
SetByte( send_buff, count, send_index );
SetString( send_buff, temp_buff, temp_index, send_index );
do {
if( m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ) == 1 )
break;
else
count++;
} while( count < 50 );
if( count >= 50 )
m_pMain->m_OutputList.AddString("LoadKnightsAllList Packet Drop!!!");
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
}
void CDBAgent::DBProcessNumber( int number )
{
CString strDBNum;
strDBNum.Format( " %4d ", number );
m_pMain->GetDlgItem( IDC_DB_PROCESS )->SetWindowText(strDBNum);
m_pMain->GetDlgItem( IDC_DB_PROCESS )->UpdateWindow();
}
BOOL CDBAgent::UpdateBattleEvent( const char* charid, int nation )
{
SQLHSTMT hstmt;
SQLRETURN retcode;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
DBProcessNumber( 22 );
wsprintf( szSQL, TEXT( "UPDATE BATTLE SET byNation=%d, strUserName=\'%s\' WHERE sIndex=%d" ), nation, charid, 1 );
hstmt = NULL;
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS) {
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode==SQL_ERROR) {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return 0;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return TRUE;
}
BOOL CDBAgent::CheckCouponEvent( const char* accountid )
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL bData = TRUE, retval = FALSE;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLINTEGER Indexind = SQL_NTS;
SQLSMALLINT sRet = 0;
wsprintf(szSQL, TEXT("{call CHECK_COUPON_EVENT (\'%s\', ?)}"), accountid);
hstmt = NULL;
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
if (retcode != SQL_SUCCESS) {
return FALSE;
}
retcode = SQLBindParameter(hstmt,1,SQL_PARAM_OUTPUT,SQL_C_SSHORT, SQL_SMALLINT,0,0, &sRet,0,&Indexind);
if (retcode != SQL_SUCCESS){
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return FALSE;
}
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
//SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
if( sRet == 0 ) retval = TRUE;
else retval = FALSE;
}
else {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_AccountDB.Close();
if( !m_AccountDB.IsOpen() ) {
ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
return FALSE;
}
}
retval= FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return retval;
}
BOOL CDBAgent::UpdateCouponEvent( const char* accountid, char* charid, char* cpid, int itemid, int count )
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL bData = TRUE, retval = FALSE;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLINTEGER Indexind = SQL_NTS;
SQLSMALLINT sRet = 0;
wsprintf(szSQL, TEXT("{call UPDATE_COUPON_EVENT (\'%s\', \'%s\', \'%s\', %d, %d)}"), accountid, charid, cpid, itemid, count);
hstmt = NULL;
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
if (retcode != SQL_SUCCESS) {
return FALSE;
}
/* retcode = SQLBindParameter(hstmt,1,SQL_PARAM_OUTPUT,SQL_C_SSHORT, SQL_SMALLINT,0,0, &sRet,0,&Indexind);
if (retcode != SQL_SUCCESS){
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return FALSE;
} */
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
//SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
retval = TRUE;
//if( sRet == 1 ) retval = TRUE;
//else retval = FALSE;
}
else {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_AccountDB.Close();
if( !m_AccountDB.IsOpen() ) {
ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
return FALSE;
}
}
retval= FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return retval;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -