248 lines
6.8 KiB
C++
248 lines
6.8 KiB
C++
#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();
|
||
}
|
||
}
|
||
}
|
||
}
|