598 lines
13 KiB
C++
598 lines
13 KiB
C++
#include <stdlib.h>
|
||
#include <stdio.h>
|
||
#ifdef WIN32
|
||
#include <tchar.h>
|
||
#include <WinSock2.h>
|
||
#include <Windows.h>
|
||
#endif
|
||
#include <_ast.h>
|
||
#include <_memchk.h>
|
||
#include <Tick.h>
|
||
#include <Lock.h>
|
||
#include <QueueList.h>
|
||
#include <CustomSocket.h>
|
||
#include "ShareUtil.h"
|
||
#include "BufferAllocator.h"
|
||
#include "AppItnMsg.h"
|
||
#include "DataPacket.hpp"
|
||
#include "SendPackPool.h"
|
||
#include "CustomWorkSocket.h"
|
||
#include "CustomClientSocket.h"
|
||
#include "ServerDef.h"
|
||
#include "LogType.h"
|
||
//#include "encrypt\CRC.h"
|
||
//#include "encrypt\Encrypt.h"
|
||
//#include "dataProcess\NetworkDataHandler.h"
|
||
#include "CustomJXClientSocket.h"
|
||
#include "LogSender.h"
|
||
|
||
|
||
using namespace jxSrvDef;
|
||
|
||
LogSender::LogSender(jxSrvDef::SERVERTYPE ServerType,INT ServerIndex,char* ServerName)
|
||
{
|
||
this->ServerType = ServerType;
|
||
this->ServerIndex = ServerIndex;
|
||
strcpy(this->ServerName,ServerName);
|
||
this->SetClientName(_T("日志"));
|
||
}
|
||
|
||
LogSender::LogSender()
|
||
{
|
||
this->SetClientName(_T("日志"));
|
||
}
|
||
|
||
LogSender::~LogSender(void)
|
||
{
|
||
}
|
||
|
||
//设置服务器的编号
|
||
VOID LogSender::SetServerIndex(const INT nSerIdx)
|
||
{
|
||
ServerIndex = nSerIdx;
|
||
}
|
||
|
||
VOID LogSender::SetServerName(LPCTSTR sServerName)
|
||
{
|
||
_tcsncpy(ServerName, sServerName, ArrayCount(ServerName) - 1);
|
||
ServerName[ArrayCount(ServerName) - 1] = 0;
|
||
}
|
||
|
||
void LogSender::SetServerSpid(LPCTSTR sSpid)
|
||
{
|
||
_tcsncpy(m_sSpid, sSpid, ArrayCount(m_sSpid) - 1);
|
||
m_sSpid[ArrayCount(m_sSpid) - 1] = 0;
|
||
}
|
||
|
||
VOID LogSender::SendLoginLog(WORD nLogid,int nUserid,LPCTSTR szAccount,
|
||
LPCTSTR szLoginIp,LPCTSTR szLoginDescr, int nLevel, int nYb, unsigned int nOnlineTime, unsigned int nActorId,unsigned int nSrvId)
|
||
{
|
||
LOGDATALOGIN data;
|
||
data.nCmdId = LOG_LOGIN_CMD;
|
||
data.nLogid = nLogid;
|
||
data.nUserid = nUserid;
|
||
data.nLevel = nLevel;
|
||
data.nYb = nYb;
|
||
data.nOnlineTime = nOnlineTime;
|
||
if (szAccount != NULL)
|
||
{
|
||
_asncpytA((data.szAccount),szAccount);
|
||
}
|
||
else
|
||
{
|
||
data.szAccount[0] = 0;
|
||
}
|
||
|
||
data.nServerIndex = ServerIndex;
|
||
data.nSrvId = ServerIndex;
|
||
if(nSrvId > 0)
|
||
{
|
||
data.nServerIndex = nSrvId;
|
||
}
|
||
|
||
if (szLoginIp != NULL)
|
||
{
|
||
_asncpytA((data.szLoginIp),szLoginIp);
|
||
}
|
||
else
|
||
{
|
||
data.szLoginIp[0] = 0;
|
||
}
|
||
data.nServerType = ServerType;
|
||
if (szLoginDescr != NULL)
|
||
{
|
||
_asncpytA((data.szLoginDescr),szLoginDescr);
|
||
}
|
||
else
|
||
{
|
||
data.szLoginDescr[0] = 0;
|
||
}
|
||
//_asncpytA(data.szSpid, m_sSpid);
|
||
snprintf(data.szSpid, sizeof(data.szSpid), "%d", nActorId);
|
||
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
//OutputMsg( rmTip, _T("发送登陆日志:CmdId=%d,Logid=%d,Userid=%d,Account=%s,ServerIndex=%d,LoginIp=%s,ServerType=%d,LoginDescr=%s"),
|
||
// data.nCmdId,data.nLogid,data.nUserid,data.szAccount,data.nServerIndex,data.szLoginIp,data.nServerType,data.szLoginDescr);
|
||
}
|
||
|
||
VOID LogSender::SendConsumeLog(WORD nLogid,int nActorid,LPCTSTR szAccount,
|
||
LPCTSTR szCharName,BYTE nMoneytype,int nCount,int nPaymentCount,LPCTSTR szConsumeDescr,int nLevel, int nBalance, unsigned int nSrvId)
|
||
{
|
||
LOGDATACONSUME data;
|
||
data.nCmdId = LOG_CONSUME_CMD;
|
||
data.nLogid = nLogid;
|
||
data.nActorid = nActorid;
|
||
data.nConsumeLevel =nLevel; //玩家的消费的等级
|
||
if (szAccount != NULL)
|
||
{
|
||
_asncpytA((data.szAccount),szAccount);
|
||
}
|
||
else
|
||
{
|
||
data.szAccount[0] = 0;
|
||
}
|
||
data.nServerIndex = ServerIndex;
|
||
|
||
data.nSrvId = ServerIndex;
|
||
if(nSrvId > 0)
|
||
{
|
||
data.nServerIndex = nSrvId;
|
||
}
|
||
|
||
if (szCharName != NULL)
|
||
{
|
||
_asncpytA((data.szCharName),szCharName);
|
||
}
|
||
else
|
||
{
|
||
data.szCharName[0] = 0;
|
||
}
|
||
data.cMoneytype = nMoneytype;
|
||
data.nBalance = nBalance;
|
||
data.nConsumecount = nCount;
|
||
data.nPaymentCount = nPaymentCount;
|
||
if (szConsumeDescr != NULL)
|
||
{
|
||
_asncpytA((data.szConsumeDescr),szConsumeDescr);
|
||
}
|
||
else
|
||
{
|
||
data.szConsumeDescr[0] = 0;
|
||
}
|
||
//_asncpytA(data.szSpid, m_sSpid);
|
||
snprintf(data.szSpid, sizeof(data.szSpid), "%d", nActorid);
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
//OutputMsg( rmTip, _T("发送消费日志:CmdId=%d,Logid=%d,Userid=%d,Account=%s,ServerIndex=%d,CharName=%s,ConsumeCount=%d,PaymentCount=%d,ConsumeDescr=%s"),
|
||
// data.nCmdId,data.nLogid,data.nUserid,data.szAccount,data.nServerIndex,data.szCharName,data.nConsumeCount,data.nPaymentCount,data.szConsumeDescr);
|
||
}
|
||
|
||
VOID LogSender::SendItemLocalLog(
|
||
BYTE nType,
|
||
WORD nLogid,
|
||
int nActorid,
|
||
int nAccountid,
|
||
LPCTSTR szAccount,
|
||
LPCTSTR szCharName,
|
||
WORD wItemId,
|
||
int nCount,
|
||
LPCTSTR szConsumeDescr,
|
||
unsigned int nSrvId)
|
||
{
|
||
LOGDATAITEM data;
|
||
data.nCmdId = LOG_ITEAM_CMD;
|
||
data.nLogid = nLogid;
|
||
data.nActorid = nActorid;
|
||
data.nType = nType;
|
||
if (szAccount != NULL)
|
||
{
|
||
_asncpytA((data.szAccount),szAccount);
|
||
}
|
||
else
|
||
{
|
||
data.szAccount[0] = 0;
|
||
}
|
||
data.nServerIndex = ServerIndex;
|
||
data.nSrvId = ServerIndex;
|
||
if(nSrvId > 0)
|
||
{
|
||
data.nServerIndex = nSrvId;
|
||
}
|
||
|
||
if (szCharName != NULL)
|
||
{
|
||
_asncpytA((data.szCharName),szCharName);
|
||
}
|
||
else
|
||
{
|
||
data.szCharName[0] = 0;
|
||
}
|
||
data.wItemId = wItemId;
|
||
data.nCount = nCount;
|
||
|
||
if (szConsumeDescr != NULL)
|
||
{
|
||
_asncpytA((data.szConsumeDescr),szConsumeDescr);
|
||
}
|
||
else
|
||
{
|
||
data.szConsumeDescr[0] = 0;
|
||
}
|
||
//_asncpytA(data.szSpid, m_sSpid);
|
||
snprintf(data.szSpid, sizeof(data.szSpid), "%d", nAccountid);
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
//OutputMsg( rmTip, _T("发送消费日志:CmdId=%d,Logid=%d,Userid=%d,Account=%s,ServerIndex=%d,CharName=%s,ConsumeCount=%d,PaymentCount=%d,ConsumeDescr=%s"),
|
||
// data.nCmdId,data.nLogid,data.nUserid,data.szAccount,data.nServerIndex,data.szCharName,data.nConsumeCount,data.nPaymentCount,data.szConsumeDescr);
|
||
}
|
||
|
||
|
||
|
||
|
||
VOID LogSender::SendDealToLog(int nLogid, unsigned int nTime,
|
||
int nActorid,int nTarActorid,
|
||
INT nItemId,WORD nItemNum,WORD nMoneyType,INT64 nMoneyNum, int nDues, unsigned int nSrvId)
|
||
{
|
||
LOGACTORDEALSAVE tmpLog;
|
||
|
||
tmpLog.nLogId = nLogid;
|
||
tmpLog.nMiniTime = nTime;
|
||
|
||
tmpLog.nActorid = nActorid;
|
||
tmpLog.nTarActorid = nTarActorid;
|
||
|
||
tmpLog.nItemId = nItemId;
|
||
tmpLog.nItemNum = nItemNum;
|
||
tmpLog.nMoneyType = nMoneyType;
|
||
tmpLog.nMoneyNum = nMoneyNum;
|
||
tmpLog.nDues = nDues;
|
||
tmpLog.nServerIndex = ServerIndex;
|
||
tmpLog.nSrvId = ServerIndex;
|
||
if(nSrvId > 0)
|
||
{
|
||
tmpLog.nServerIndex = nSrvId;
|
||
}
|
||
_asncpytA(tmpLog.szSpid, m_sSpid);
|
||
|
||
CDataPacket &pdata = allocProtoPacket(LOG_DEAL_CMD);
|
||
pdata << tmpLog;
|
||
flushProtoPacket(pdata);
|
||
}
|
||
|
||
VOID LogSender::SendOnlineLog(int nServerIndex,int nCount)
|
||
{
|
||
LOGDATAONLINECOUNT data;
|
||
data.nCmdId = LOG_ONLINE_CMD;
|
||
data.nServerIndex = nServerIndex;
|
||
data.nOnlineCount = nCount;
|
||
_asncpytA(data.szSpid, m_sSpid);
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
//OutputMsg( rmTip, _T("发送在线日志:CmdId=%d,ServerIndex=%d,OnlineCount=%d"),
|
||
// data.nCmdId,data.nServerIndex,data.nOnlineCount);
|
||
}
|
||
VOID LogSender::SendSuggestLog( int nType,char * sActorName,char * sAccount, char * sTitle, char * sDetail,int nLevel, unsigned int nSrvId)
|
||
{
|
||
LOGGERDATASUGGEST data;
|
||
data.nCmdId = LOG_SUGGEST_CMD;
|
||
if (sActorName != NULL)
|
||
{
|
||
_asncpytA((data.szCharName),sActorName);
|
||
}
|
||
else
|
||
{
|
||
data.szCharName[0] = 0;
|
||
}
|
||
|
||
if (sAccount != NULL)
|
||
{
|
||
_asncpytA((data.szAccount),sAccount);
|
||
}
|
||
else
|
||
{
|
||
data.szAccount[0] = 0;
|
||
}
|
||
|
||
if (sTitle != NULL)
|
||
{
|
||
_asncpytA((data.szTitle),sTitle);
|
||
}
|
||
else
|
||
{
|
||
data.szTitle[0] = 0;
|
||
}
|
||
|
||
if (sDetail != NULL)
|
||
{
|
||
_asncpytA((data.szSuggest),sDetail);
|
||
}
|
||
else
|
||
{
|
||
data.szSuggest[0] = 0;
|
||
}
|
||
|
||
data.nType = (WORD)nType;
|
||
data.nServerIndex= (WORD)ServerIndex;
|
||
data.nActorLevel = nLevel;
|
||
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
|
||
}
|
||
VOID LogSender::SendCommonLog(WORD nLogid,int nUserid,LPCTSTR szAccount,
|
||
int nPara0,int nPara1,int nPara2,
|
||
LPCTSTR szShortStr0,LPCTSTR szMidStr0,LPCTSTR szLongStr0,
|
||
LPCTSTR szShortStr1,LPCTSTR szMidStr1,LPCTSTR szLongStr1,
|
||
LPCTSTR szMidStr2,LPCTSTR szLongStr2, unsigned int nSrvId)
|
||
{
|
||
LOGGERDATACOMMON data;
|
||
data.nCmdId = LOG_COMMON_CMD;
|
||
data.nLogid = nLogid;
|
||
data.nActorid = nUserid;
|
||
if (szAccount != NULL)
|
||
{
|
||
_asncpytA((data.szAccount),szAccount);
|
||
}
|
||
else
|
||
{
|
||
data.szAccount[0] = 0;
|
||
}
|
||
data.nServerIndex = ServerIndex;
|
||
data.nSrvId = ServerIndex;
|
||
if(nSrvId > 0)
|
||
{
|
||
data.nServerIndex = nSrvId;
|
||
}
|
||
data.nPara0 = nPara0;
|
||
data.nPara1 = nPara1;
|
||
data.nPara2 = nPara2;
|
||
if (szShortStr0 != NULL)
|
||
{
|
||
_asncpytA((data.szShortStr0),szShortStr0);
|
||
}
|
||
else
|
||
{
|
||
data.szShortStr0[0] = 0;
|
||
}
|
||
if (szShortStr1 != NULL)
|
||
{
|
||
_asncpytA((data.szShortStr1),szShortStr1);
|
||
}
|
||
else
|
||
{
|
||
data.szShortStr1[0] = 0;
|
||
}
|
||
if (szMidStr0 != NULL)
|
||
{
|
||
_asncpytA((data.szMidStr0),szMidStr0);
|
||
}
|
||
else
|
||
{
|
||
data.szMidStr0[0] = 0;
|
||
}
|
||
if (szMidStr1 != NULL)
|
||
{
|
||
_asncpytA((data.szMidStr1),szMidStr1);
|
||
}
|
||
else
|
||
{
|
||
data.szMidStr1[0] = 0;
|
||
}
|
||
if (szMidStr2 != NULL)
|
||
{
|
||
_asncpytA((data.szMidStr2),szMidStr2);
|
||
}
|
||
else
|
||
{
|
||
data.szMidStr2[0] = 0;
|
||
}
|
||
if (szLongStr0 != NULL)
|
||
{
|
||
_asncpytA((data.szLongStr0),szLongStr0);
|
||
}
|
||
else
|
||
{
|
||
data.szLongStr0[0] = 0;
|
||
}
|
||
if (szLongStr1 != NULL)
|
||
{
|
||
_asncpytA((data.szLongStr1),szLongStr1);
|
||
}
|
||
else
|
||
{
|
||
data.szLongStr1[0] = 0;
|
||
}
|
||
if (szLongStr2 != NULL)
|
||
{
|
||
_asncpytA((data.szLongStr2),szLongStr2);
|
||
}
|
||
else
|
||
{
|
||
data.szLongStr2[0] = 0;
|
||
}
|
||
_asncpytA(data.szSpid, m_sSpid);
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
//OutputMsg( rmTip, _T("发送公共日志:CmdId=%d,Logid=%d,Userid=%d,Account=%s,ServerIndex=%d,para0=%d,para1=%d,para2=%d,ShortStr0=%s,ShortStr1=%s,MidStr0=%s,MidStr1=%s,MidStr2=%s,LongStr0=%s,LongStr1=%s,LongStr2=%s"),
|
||
// data.nCmdId,data.nLogid,data.nUserid,data.szAccount,data.nServerIndex,data.nPara0,data.nPara1,data.nPara2
|
||
// ,data.szShortStr0,data.szShortStr1,data.szMidStr0,data.szMidStr1,data.szMidStr2,data.szLongStr0,data.szLongStr1,data.szLongStr2);
|
||
}
|
||
|
||
VOID LogSender::SendChatLog(int nChannleID, char * sActorName,unsigned int nActorId, char * msg)
|
||
{
|
||
if(!sActorName || !msg) return;
|
||
|
||
if(m_nFlag)
|
||
{
|
||
CDataPacket &pdata = allocProtoPacket(LOG_SENDCHATRECORD_CMD); //分配一个 网络包
|
||
pdata << (int)nChannleID;
|
||
pdata << (unsigned int)nActorId;
|
||
pdata.writeString(sActorName);
|
||
pdata.writeString(msg);
|
||
|
||
flushProtoPacket(pdata);
|
||
|
||
}
|
||
}
|
||
|
||
VOID LogSender::OnDispatchRecvPacket(const jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader &inPacket)
|
||
{
|
||
//空函数,本身不处理日志服务器下发的消息
|
||
switch(nCmd)
|
||
{
|
||
case LOG_LOOKCHATMSG_CMD:
|
||
{
|
||
int nFlag = 0;
|
||
inPacket >> nFlag;
|
||
SetChatLogFlag(nFlag);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
jxSrvDef::SERVERTYPE LogSender::getLocalServerType()
|
||
{
|
||
return ServerType;
|
||
}
|
||
|
||
LPCSTR LogSender::getLocalServerName()
|
||
{
|
||
return ServerName;
|
||
}
|
||
|
||
int LogSender::getLocalServerIndex()
|
||
{
|
||
return ServerIndex;
|
||
}
|
||
|
||
VOID LogSender::OnConnected()
|
||
{
|
||
CDataPacket &pdata = allocProtoPacket(LOG_SENDSERVERINDEX_CMD); //分配一个 网络包
|
||
pdata << (int)ServerIndex;
|
||
flushProtoPacket(pdata);
|
||
}
|
||
|
||
|
||
|
||
VOID LogSender::SendKillDropLog(int nActorid,LPCTSTR sAccount,LPCTSTR sCharName,
|
||
LPCTSTR sMonName,LPCTSTR sSceneName,LPCTSTR sItemName,int nCount, int nKilltime, int nPosX, int nPosY, unsigned int nSrvId)
|
||
{
|
||
|
||
LOGKILLDROP data;
|
||
|
||
data.nCmdId = LOG_KILLDROP_CMD;
|
||
data.nServerIndex = ServerIndex;
|
||
data.nSrvId = ServerIndex;
|
||
if(nSrvId > 0)
|
||
{
|
||
data.nServerIndex = nSrvId;
|
||
}
|
||
data.nActorid = nActorid;
|
||
data.nKilltime = nKilltime;
|
||
if (sAccount != NULL)
|
||
{
|
||
_asncpytA((data.srtAccount),sAccount);
|
||
}
|
||
else
|
||
{
|
||
data.srtAccount[0] = 0;
|
||
}
|
||
if (sCharName != NULL)
|
||
{
|
||
_asncpytA((data.strName),sCharName);
|
||
}
|
||
else
|
||
{
|
||
data.strName[0] = 0;
|
||
}
|
||
if (sMonName != NULL)
|
||
{
|
||
_asncpytA((data.strMonsetName),sMonName);
|
||
}
|
||
else
|
||
{
|
||
data.strMonsetName[0] = 0;
|
||
}
|
||
if (sSceneName != NULL)
|
||
{
|
||
_asncpytA((data.strSceneName),sSceneName);
|
||
}
|
||
else
|
||
{
|
||
data.strSceneName[0] = 0;
|
||
}
|
||
if (sItemName != NULL)
|
||
{
|
||
_asncpytA((data.strItemName),sItemName);
|
||
}
|
||
else
|
||
{
|
||
data.strItemName[0] = 0;
|
||
}
|
||
data.nCount = nCount;
|
||
data.nPosx = nPosX;
|
||
data.nPosy = nPosY;
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
//OutputMsg( rmTip, _T("发送公共日志:CmdId=%d,Logid=%d,Userid=%d,Account=%s,ServerIndex=%d,para0=%d,para1=%d,para2=%d,ShortStr0=%s,ShortStr1=%s,MidStr0=%s,MidStr1=%s,MidStr2=%s,LongStr0=%s,LongStr1=%s,LongStr2=%s"),
|
||
// data.nCmdId,data.nLogid,data.nUserid,data.szAccount,data.nServerIndex,data.nPara0,data.nPara1,data.nPara2
|
||
// ,data.szShortStr0,data.szShortStr1,data.szMidStr0,data.szMidStr1,data.szMidStr2,data.szLongStr0,data.szLongStr1,data.szLongStr2);
|
||
}
|
||
|
||
|
||
|
||
|
||
VOID LogSender::SendJoinAtvToLog(int nActorid,LPCTSTR sAccount,LPCTSTR sCharName,int nAtvId, int nIndex, int nJoinTime, unsigned int nSrvId)
|
||
{
|
||
|
||
LOGATVSCHEDULE data;
|
||
|
||
data.nCmdId = LOG_JOINATV_CMD;
|
||
data.nServerIndex = ServerIndex;
|
||
data.nSrvId = ServerIndex;
|
||
if(nSrvId > 0)
|
||
{
|
||
data.nServerIndex = nSrvId;
|
||
}
|
||
data.nActorid = nActorid;
|
||
data.nAtvID = nAtvId;
|
||
if (sAccount != NULL)
|
||
{
|
||
_asncpytA((data.srtAccount),sAccount);
|
||
}
|
||
else
|
||
{
|
||
data.srtAccount[0] = 0;
|
||
}
|
||
if (sCharName != NULL)
|
||
{
|
||
_asncpytA((data.strName),sCharName);
|
||
}
|
||
else
|
||
{
|
||
data.strName[0] = 0;
|
||
}
|
||
|
||
|
||
data.nIndex = nIndex;
|
||
data.nJoinTime = nJoinTime;
|
||
////组装成网络包
|
||
CDataPacket &pdata = allocProtoPacket(data.nCmdId); //分配一个 网络包
|
||
pdata << data;
|
||
flushProtoPacket(pdata);
|
||
} |