Files
mir_server/server/DBServer/LogicDBRequestHandler.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

232 lines
6.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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