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

248 lines
6.8 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 "../LogicDef.h"
#include "ActivityDb.h"
#include <vector>
void CLogicDBReqestHandler::LoadActivityList(CDataPacketReader &inPacket)
{
DECLARE_TIME_PROF("CLogicDBReqestHandler::LoadActivityList");
const int max_guild = 100;
int nRawServerId = 0, nLoginServerId = 0;
inPacket >> nRawServerId >> nLoginServerId;
CDataPacket& tmp = allocProtoPacket(dcLoadActivityList);
tmp << nRawServerId << nLoginServerId;
CDataPacket* out = &tmp;
//数据库连接是否就绪
if ( !m_pSQLConnection->Connected() )
{
(*out) << (BYTE)reDbErr;
}
else
{
//向数据库查询活动数据
int nError = m_pSQLConnection->Query(szSQLSP_LoadActivityData);
if ( !nError )
{
(*out) << (BYTE)reSucc;
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
int nCount = m_pSQLConnection->GetRowCount();
INT_PTR pos = out->getPosition();
(*out) << (int)0;
nCount = 0;
GlobalActivityData activitydata;
while (pRow)
{
nCount++;
sscanf(pRow[0], "%u", &activitydata.nId);
sscanf(pRow[1], "%u", &activitydata.nActivityType);
sscanf(pRow[2], "%u", &activitydata.nTimeType);
unsigned int startTime,endTime;
sscanf(pRow[3], "%u", &startTime);
sscanf(pRow[4], "%u", &endTime);
activitydata.nStartTime = startTime;
activitydata.nEndTime = endTime;
out->writeBuf(&activitydata,sizeof(activitydata));
pRow = m_pSQLConnection->NextRow();
}
int* pCount = (int*)out->getPositionPtr(pos);
*pCount = nCount;
m_pSQLConnection->ResetQuery();
}
else
{
(*out) << (BYTE)reDbErr;
}
}
flushProtoPacket((*out));
}
void CLogicDBReqestHandler::SaveActivityList(CDataPacketReader &inPacket)
{
DECLARE_TIME_PROF("CLogicDBReqestHandler::SaveActivityList");
int nRawServerId = 0, nLoginServerId = 0;
inPacket >> nRawServerId >> nLoginServerId;
//数据库连接是否就绪
if ( !m_pSQLConnection->Connected() )
{
return;
}
else
{
int nErrorCode = m_pSQLConnection->Exec(szSQLSP_DeleteActivityData);
if (!nErrorCode)
{
m_pSQLConnection->ResetQuery();
}
char buff[1024];
strcpy(m_pHugeSQLBuffer, szSQLSP_SaveActivityData); //表头放这里
int nCount = 0;
inPacket >> nCount;
GlobalActivityData activitydata;
for(int i = 0; i < nCount; ++i)
{
inPacket.readBuf(&activitydata,sizeof(activitydata));
OutputMsg(rmTip,"[Global Activity] 活动存储(%d)活动Type=%d, 活动ID=%d !", i, activitydata.nActivityType, activitydata.nId);
strcat(m_pHugeSQLBuffer, " (");
sprintf(buff, "%u,%u,%u,%u,%u", activitydata.nId, activitydata.nActivityType, activitydata.nTimeType, (unsigned int)activitydata.nStartTime, (unsigned int)activitydata.nEndTime);
strcat(m_pHugeSQLBuffer, buff);
strcat(m_pHugeSQLBuffer, " )");
if(i < nCount-1)
{
strcat(m_pHugeSQLBuffer,",");
}
}
nErrorCode = m_pSQLConnection->Exec(m_pHugeSQLBuffer);
if(!nErrorCode)
{
m_pSQLConnection->ResetQuery();
}
}
}
void CLogicDBReqestHandler::LoadActorActivity(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId)
{
CDataPacket& out = allocProtoPacket(dcLoadPersonActivity);
out << nRawServerId << nLoginServerId;
out << nActorID;
static std::vector<PersonStopedActivity> arrStopActivity;
arrStopActivity.clear();
//数据库连接是否就绪
if ( !m_pSQLConnection->Connected() )
{
out << (BYTE)reDbErr;
}
else
{
int nError = m_pSQLConnection->Query(szSQLSP_LoadActorActivityData, nActorID);
if ( !nError )
{
out << (BYTE)reSucc;
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
int nCount = m_pSQLConnection->GetRowCount();
INT_PTR pos = out.getPosition();
out << (int)0;
nCount = 0;
PersonActivtyData activitydata;
PersonStopedActivity stopdata;
while (pRow)
{
sscanf(pRow[0], "%u", &activitydata.nId);
sscanf(pRow[1], "%u", &activitydata.nActivityType);
int nExpiredTime;
sscanf(pRow[2], "%d", &nExpiredTime);
activitydata.nExpiredTime = (unsigned int)nExpiredTime;
if (nExpiredTime == -1)//活动已结束
{
stopdata.nId = activitydata.nId;
stopdata.nActivityType = activitydata.nActivityType;
arrStopActivity.push_back(stopdata);
}
else
{
nCount++;
out.writeBuf(&activitydata,sizeof(activitydata));
}
pRow = m_pSQLConnection->NextRow();
}
int* pCount = (int*)out.getPositionPtr(pos);
*pCount = nCount;
m_pSQLConnection->ResetQuery();
// 把结束的活动丢入
nCount = (int)arrStopActivity.size();
out << nCount;
for (int i = 0; i < nCount; i++)
{
out.writeBuf(&arrStopActivity[i],sizeof(stopdata));
}
}
else
{
out << (BYTE)reDbErr;
}
}
flushProtoPacket(out);
}
void CLogicDBReqestHandler::SaveActorActivity(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId)
{
DECLARE_TIME_PROF("CLogicDBReqestHandler::SaveActorActivity");
//数据库连接是否就绪
if ( !m_pSQLConnection->Connected() )
{
return;
}
else
{
char buff[1024];
strcpy(m_pHugeSQLBuffer, szSQLSP_SaveActorActivityData); //表头放这里
PersonActivtyData activitydata;
PersonStopedActivity stopdata;
bool hasActivity = false;
// 保存运行中的
int nCount = 0;
inPacket >> nCount;
for(int i = 0; i < nCount; ++i)
{
inPacket.readBuf(&activitydata,sizeof(activitydata));
strcat(m_pHugeSQLBuffer, " (");
sprintf(buff, "%u,%u,%u,%u", nActorID, activitydata.nId, activitydata.nActivityType, (unsigned int)activitydata.nExpiredTime);
strcat(m_pHugeSQLBuffer, buff);
strcat(m_pHugeSQLBuffer, " )");
if(i < nCount-1)
{
strcat(m_pHugeSQLBuffer,",");
}
hasActivity = true;
}
// printf("%s\n",m_pHugeSQLBuffer);
// 保存结束的
nCount = 0;
if (inPacket.getAvaliableLength() > 4)
inPacket >> nCount;
unsigned int temp = (unsigned int)-1;
int nId = 0;
int nActivityType = 0;
for(int i = 0; i < nCount; ++i)
{
inPacket >> nId ; //id
inPacket >> nActivityType; //type
// inPacket.readBuf(&stopdata,sizeof(stopdata));
if(hasActivity)
strcat(m_pHugeSQLBuffer, ",");
strcat(m_pHugeSQLBuffer, "(");
sprintf(buff, "%u,%u,%u,%d", nActorID, nId, nActivityType, -1);
strcat(m_pHugeSQLBuffer, buff);
strcat(m_pHugeSQLBuffer, " )");
// if(i < nCount-1)
// {
// strcat(m_pHugeSQLBuffer,",");
// }
hasActivity = true;
}
// printf("%s\n",m_pHugeSQLBuffer);
if (hasActivity)
{
int nErrorCode = m_pSQLConnection->Exec(m_pHugeSQLBuffer);
if(!nErrorCode)
{
m_pSQLConnection->ResetQuery();
}
}
}
}