175 lines
4.3 KiB
C++
175 lines
4.3 KiB
C++
#include "stdafx.h"
|
||
|
||
CProduct::CProduct(PlatForm* config)
|
||
{
|
||
SetConfig(config);
|
||
if (!SetDBConnection())
|
||
{
|
||
OutputMsg( rmError, _T("连接MYSQL数据库(%s:%d)失败"),config->db,config->port);
|
||
bAMEngineStartSucceed = false;
|
||
}
|
||
else
|
||
{
|
||
OutputMsg( rmTip, _T("连接MYSQL数据库(%s:%d)成功"),config->db,config->port);
|
||
}
|
||
}
|
||
void CProduct::SetConfig(PlatForm* config)
|
||
{
|
||
m_Config = config;
|
||
_asncpy(m_spid,m_Config->spid);
|
||
_asncpy(m_code,m_Config->code);
|
||
}
|
||
BOOL CProduct::CheckConnection()
|
||
{
|
||
SYSTEMTIME m_CurSysTime;
|
||
GetLocalTime(&m_CurSysTime);
|
||
CMiniDateTime CurMiniDateTime;
|
||
CurMiniDateTime = CurMiniDateTime.encode(m_CurSysTime);
|
||
BOOL boConnected = m_Mysql.Connected();
|
||
if (!boConnected || CurMiniDateTime.tv - m_ConnectMiniDateTime.tv > 60*60)
|
||
{
|
||
m_Mysql.Disconnect();
|
||
boConnected = m_Mysql.Connect();
|
||
if( boConnected )
|
||
{
|
||
if( mysql_set_character_set(m_Mysql.GetMySql(),m_Config->bianma) )
|
||
OutputMsg( rmError, _T("设置utf8编码出错 !!!") );
|
||
}
|
||
}
|
||
return boConnected;
|
||
}
|
||
|
||
BOOL CProduct::SetDBConnection()
|
||
{
|
||
m_Mysql.SetServerHost(m_Config->host);
|
||
m_Mysql.SetServerPort(m_Config->port);
|
||
m_Mysql.SetDataBaseName(m_Config->db);
|
||
m_Mysql.SetUserName(m_Config->user);
|
||
m_Mysql.SetPassWord(m_Config->pass);
|
||
//多个客户端连接,数据库操作类要加锁
|
||
//m_Mysql.SetMultiThread(TRUE);
|
||
m_Mysql.SetConnectionFlags(CLIENT_FOUND_ROWS | CLIENT_MULTI_RESULTS);
|
||
BOOL boConnected = m_Mysql.Connect();
|
||
if (boConnected)
|
||
{
|
||
if( mysql_set_character_set(m_Mysql.GetMySql(),m_Config->bianma) )
|
||
OutputMsg( rmError, _T("设置utf8编码出错 !!!") );
|
||
OutputMsg(rmTip, _T("mysql connection character set: %s"), mysql_character_set_name(m_Mysql.GetMySql()));
|
||
SYSTEMTIME m_CurSysTime;
|
||
GetLocalTime(&m_CurSysTime);
|
||
m_ConnectMiniDateTime = m_ConnectMiniDateTime.encode(m_CurSysTime);
|
||
}
|
||
return boConnected;
|
||
}
|
||
|
||
int CProduct::GetContractID(const char * sContractID )
|
||
{
|
||
size_t len = strlen(sContractID);
|
||
if( len <= 0 ) return 0;
|
||
|
||
for(int i=0; i<m_Config->taskcount; ++i)
|
||
{
|
||
if(strncmp(m_Config->constractid[i], sContractID, len) == 0 )
|
||
{
|
||
return (i+1);
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
int CProduct::Pay( const char* sOPID,const char* sAccount,UINT nMoney,double dRmb,UINT ServerIndex,UINT nType,UINT &uUserId,UINT nActorId, const char * actorname, int level, const char * channel)
|
||
{
|
||
if (!CheckConnection())
|
||
{
|
||
return ERROR_NOT_CONNECT_DB;
|
||
}
|
||
int nResult = ERROR_QUERY_DB;
|
||
m_UserDBLock.Lock();
|
||
int nErrorId = m_Mysql.Query(sPay_SQL, sOPID,sAccount,nMoney,dRmb,ServerIndex,m_Config->spid,nType, nActorId, actorname, level,channel);
|
||
if (!nErrorId)
|
||
{
|
||
MYSQL_ROW pRow = m_Mysql.CurrentRow();
|
||
if (pRow)
|
||
{
|
||
sscanf(pRow[0], "%d", &nResult);
|
||
if( pRow[1] )
|
||
sscanf(pRow[1], "%u", &uUserId);
|
||
}
|
||
m_Mysql.ResetQuery();
|
||
}
|
||
m_UserDBLock.Unlock();
|
||
return nResult;
|
||
}
|
||
|
||
int CProduct::QueryAmount(UINT uUserId, UINT& nActorId)
|
||
{
|
||
if (!CheckConnection())
|
||
{
|
||
return ERROR_NOT_CONNECT_DB;
|
||
}
|
||
int nResult = ERROR_QUERY_DB;
|
||
m_UserDBLock.Lock();
|
||
|
||
int nErrorId = m_Mysql.Query(sQuery_SQL, uUserId, 0, nActorId);
|
||
if (!nErrorId)
|
||
{
|
||
MYSQL_ROW pRow = m_Mysql.CurrentRow();
|
||
if (pRow)
|
||
{
|
||
//查角色或账号元宝,nActorId > 0,则为角色元宝,nActorId=0则为账号元宝
|
||
sscanf(pRow[0], "%d", &nResult);
|
||
sscanf(pRow[1], "%d", &nActorId);
|
||
}
|
||
m_Mysql.ResetQuery();
|
||
}
|
||
else
|
||
{
|
||
OutputMsg( rmError,sError_Query_SQL, uUserId, 0 );
|
||
}
|
||
m_UserDBLock.Unlock();
|
||
return nResult;
|
||
}
|
||
|
||
int CProduct::Consume(UINT uUserId,UINT nAmount,char* sCharName,UINT nServerId, UINT nActorId, BYTE nLevel)
|
||
{
|
||
if (!CheckConnection())
|
||
{
|
||
return ERROR_NOT_CONNECT_DB;
|
||
}
|
||
int nResult = ERROR_QUERY_DB;
|
||
m_UserDBLock.Lock();
|
||
int nErrorId = m_Mysql.Query(sConsume_SQL, uUserId, nAmount, nActorId,sCharName,nServerId, nLevel);
|
||
if (!nErrorId)
|
||
{
|
||
MYSQL_ROW pRow = m_Mysql.CurrentRow();
|
||
if (pRow)
|
||
{
|
||
int nTmp = -1;
|
||
sscanf(pRow[0], "%d", &nTmp);
|
||
//int nRowCount= m_Mysql.GetFieldCount();
|
||
|
||
//for(int i=0; i< nRowCount; i++)
|
||
//{
|
||
// OutputMsg( rmTip, "param [%d =%d]", i ,atoi(pRow[i])) ;
|
||
//}
|
||
|
||
|
||
if (nTmp == 0)
|
||
{
|
||
sscanf(pRow[1], "%d", &nResult);
|
||
}
|
||
else if(nTmp == -1 )
|
||
{
|
||
OutputMsg( rmTip, "余额不足" ) ;
|
||
}
|
||
}
|
||
m_Mysql.ResetQuery();
|
||
}
|
||
else
|
||
{
|
||
OutputMsg( rmError,_T(sError_Consume_SQL), uUserId, nAmount,sCharName,nServerId );
|
||
}
|
||
m_UserDBLock.Unlock();
|
||
return nResult;
|
||
}
|