Files
mir_server/server/DBServer/LogicDBRequestHandler.cpp

232 lines
6.2 KiB
C++
Raw Normal View History

2025-01-09 17:45:40 +08:00
#include "StdAfx.h"
#include "FeeDb.h"
CLogicDBReqestHandler::CLogicDBReqestHandler()
{
m_pHugeSQLBuffer = (PCHAR)m_Allocator.AllocBuffer(dwHugeSQLBufferSize);
}
CLogicDBReqestHandler::~CLogicDBReqestHandler()
{
m_Allocator.FreeBuffer(m_pHugeSQLBuffer);
}
CDataPacket& CLogicDBReqestHandler::allocProtoPacket(const jxSrvDef::INTERSRVCMD nCmd)
{
return m_pHost->AllocDataPacket(nCmd);
}
void CLogicDBReqestHandler::flushProtoPacket(CDataPacket &packet)
{
m_pHost->FlushDataPacket(packet);
}
//int CLogicDBReqestHandler::getClientServerIndex()
//{
// return m_pHost->GetClientServerIndex();
//}
void CLogicDBReqestHandler::ExecuInitDb(CDataPacketReader &inPacket)
{
DECLARE_FUN_TIME_PROF()
int nRawServerId = 0;
inPacket >> nRawServerId;
if (m_pSQLConnection->Connected())
{
int nError = m_pSQLConnection->Exec(szSQL_InitDB, nRawServerId);
if (!nError)
{
m_pSQLConnection->ResetQuery();
}
}
}
void CLogicDBReqestHandler::Trace ()
{
OutputMsg(rmNormal,"---CLogicDBReqestHandler memory start---");
CBufferAllocator::ALLOCATOR_MEMORY_INFO memoryInfo;
m_Allocator.GetMemoryInfo(&memoryInfo);
OutputMsg(rmNormal,"super alloc=%d,free=%d",(int)memoryInfo.SuperBuffer.dwAllocSize,(int)memoryInfo.SuperBuffer.dwFreeSize);
OutputMsg(rmNormal,"large alloc=%d,free=%d",(int)memoryInfo.LargeBuffer.dwAllocSize,(int)memoryInfo.LargeBuffer.dwFreeSize);
OutputMsg(rmNormal,"middle alloc=%d,free=%d",(int)memoryInfo.MiddleBuffer.dwAllocSize,(int)memoryInfo.MiddleBuffer.dwFreeSize);
OutputMsg(rmNormal,"small alloc=%d,free=%d",(int)memoryInfo.SmallBuffer.dwAllocSize,(int)memoryInfo.SmallBuffer.dwFreeSize);
OutputMsg(rmNormal,"---CLogicDBReqestHandler memory end---");
}
void CLogicDBReqestHandler::OnResponseDbSessionData(CDataPacketReader &inPacket)
{
unsigned int nSessionId=0,nActorId=0;
inPacket >> nSessionId;
inPacket >> nActorId;
//////GetGlobalDBEngine()->getGateManager()->PostLogicResponseSessionData(nSessionId, nActorId);
}
void CLogicDBReqestHandler::UpdateLogicGateUserInfo(CDataPacketReader &inPacket)
{
GetGlobalDBEngine()->UpdateLogicGateUserInfo(inPacket);
}
void CLogicDBReqestHandler::LogicSendStopDbServerCmd(CDataPacketReader &inPacket)
{
if(GetGlobalDBEngine())
{
GetGlobalDBEngine()->SetDbStartFlag(false);
}
}
void CLogicDBReqestHandler::OnReloadCrossConfig(CDataPacketReader &inPacket)
{
/*
if(GetGlobalDBEngine())
{
char szAddr[128];
szAddr[0]=0;
int nPort=0;
int nServerIndex =0;
int nRawServerIndex =0;
inPacket >> nServerIndex >> nRawServerIndex;
inPacket.readString(szAddr,sizeof(szAddr));
inPacket >> nPort;
CDBCenterClient* pClient = GetGlobalDBEngine()->getDBCenterClient();
if(pClient ==NULL)
{
OutputMsg(rmError,"CDBCenterClient is NULL");
return;
}
OutputMsg(rmTip,"serverindex=%d,dbcenter=%s,port=%d ",nRawServerIndex,szAddr?szAddr:"",nPort);
//如果当前正在连接
if(pClient->connected())
{
//如果不需要改变,则不改变
if(pClient->GetServerPort() == nPort && strcmp( pClient->GetServerHost(),szAddr)==0 )
{
OutputMsg(rmTip,"No need change,port=%d,add=%s",nPort,szAddr);
return;
}
else
{
pClient->Inherited::Stop();
if(nPort >0)
{
GetGlobalDBEngine()->SetDBCenterAddress(szAddr, nPort);
pClient->Inherited::Startup();
}
return;
}
}
else
{
GetGlobalDBEngine()->SetDBCenterAddress(szAddr, nPort);
pClient->Inherited::Startup();
return;
}
}
*/
}
void CLogicDBReqestHandler::LoadFee(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId)
{
CDataPacket& out = allocProtoPacket(dcLoadFee);
ACCOUNT sAccount;
out << nRawServerId << nLoginServerId;
out << nActorID;
inPacket.readString(sAccount,sizeof(sAccount));
//数据库连接是否就绪
if ( !m_pSQLConnection->Connected() )
{
out << (BYTE)reDbErr;
}
else
{
int nError = m_pSQLConnection->Query("call loadfee_actor(%d,%d,\"%s\");", nRawServerId, nActorID, sAccount);
if ( !nError )
{
out << (BYTE)reSucc;
if (MYSQL_ROW pRow = m_pSQLConnection->CurrentRow())
{
int nCount = m_pSQLConnection->GetRowCount();
INT_PTR pos = out.getPosition();
out << (int)0;
nCount = 0;
FeeData feedata;
char token[64];
do
{
nCount++;
sscanf(pRow[0], "%u", &feedata.nId);
sscanf(pRow[1], "%s", &feedata.sPf);
sscanf(pRow[2], "%u", &feedata.nActorId);
sscanf(pRow[4], "%s", &feedata.sProdId);
sscanf(pRow[5], "%u", &feedata.nNum);
strlcpy((feedata.sAccount), (pRow[3]? pRow[3] : ""), sizeof(feedata.sAccount));
strlcpy((token), (pRow[6]? pRow[6] : ""), sizeof(token));
OutputMsg(rmTip,_T("[Fee]1 请求充值数据: Id%dPfId(%s), ActorId%dAccount%sProdId%sToken%s"),
feedata.nId, feedata.sPf, feedata.nActorId, feedata.sAccount, feedata.sProdId, token
);
out.writeBuf(&feedata, sizeof(FeeData));
}
while(pRow = m_pSQLConnection->NextRow());
int* pCount = (int*)out.getPositionPtr(pos);
*pCount = nCount;
}
m_pSQLConnection->ResetQuery();
}
else
{
out << (BYTE)reDbErr;
}
}
flushProtoPacket(out);
}
void CLogicDBReqestHandler::DelFee(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId)
{
DECLARE_TIME_PROF("CLogicDBReqestHandler::DelFee");
//数据库连接是否就绪
if ( !m_pSQLConnection->Connected() )
{
return;
}
else
{
int nCount = 0;
inPacket >> nCount;
if (nCount > 0)
{
char buff[16];
strcpy(m_pHugeSQLBuffer,"update feecallback set flag = 999 where id in ");
unsigned int nId = 0;
strcat(m_pHugeSQLBuffer, " (");
bool isFirst = true;
for (size_t i = 0; i < nCount; i++)
{
inPacket >> nId;
if(isFirst) { sprintf(buff, "%u", nId); isFirst = false;}
else { sprintf(buff, ",%u", nId); }
strcat(m_pHugeSQLBuffer, buff);
OutputMsg(rmTip,_T("[Fee]3 完成充值: Id%dActorId%d"),nId,nActorID);
}
strcat(m_pHugeSQLBuffer, " )");
int nErrorCode = m_pSQLConnection->Exec(m_pHugeSQLBuffer);
if(!nErrorCode)
{
m_pSQLConnection->ResetQuery();
}
else
{
OutputMsg(rmError,"feecallback Finish Error,errorCode=%d,sql=%s", nErrorCode,m_pHugeSQLBuffer);
}
}
}
}