Files
mir_server/server/LogicServer/base/ActorDataPacketStat.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

147 lines
3.6 KiB
C++

#ifndef ACTOR_DATA_PACKET_STAT_H_
#define ACTOR_DATA_PACKET_STAT_H_
// 数据包记录信息
class CDataPacketRecord
{
public:
UINT32 m_nHandle; // 句柄
BYTE m_nSystemId; // 系统号
BYTE m_nMsgId; // 消息号
WORD m_nLenth; // 消息长度(不算消息头,从系统号和消息号开始算起)
TICKCOUNT m_nRecordTime; // 数据包记录时间
CDataPacketRecord()
{
}
inline CDataPacketRecord(BYTE ucSysId, BYTE ucMsgId, WORD wLength, TICKCOUNT recordTime)
{
m_nHandle = 0;
m_nSystemId = ucSysId;
m_nMsgId = ucMsgId;
m_nLenth = wLength;
m_nRecordTime = recordTime;
}
inline void SetData(const CDataPacketRecord &record)
{
CopyMemory(&this->m_nSystemId, &(record.m_nSystemId), sizeof(CDataPacketRecord) - sizeof(m_nHandle));
}
};
//统计数据包
typedef struct tagDataPacketRecord
{
BYTE m_nSystemId; // 系统号
BYTE m_nMsgId; // 消息号
WORD m_nLenth; // 消息长度(不算消息头,从系统号和消息号开始算起)
TICKCOUNT m_nRecordTime; // 数据包记录时间
INT64 m_Count; // 数据包数量
char m_MapName[32]; // 场景名称
int m_PosX; // 场景坐标x
int m_PosY; // 场景坐标Y
INT64 m_TotalSzie; //
tagDataPacketRecord()
{
memset(this,0,sizeof(*this));
}
}TDATAPACKETRECORD;
class CActorDataPacketStat
{
public:
/*
* Comments: 析构函数
* @Return :
* @Remark: 主要是回收m_Records里头的对象
*/
~CActorDataPacketStat();
/*
* Comments: 添加一个数据包记录
* Param BYTE ucSysId: 逻辑系统Id
* Param BYTE ucMsgId: 逻辑消息Id
* Param WORD wLength: 数据包长度
* Param TICKCOUNT tickCount: 数据包申请时间
* @Return void:
* @Remark:
*/
void AddRecord(BYTE ucSysId, BYTE ucMsgId, WORD wLength, TICKCOUNT tickCount);
/*
* Comments: 添加一个数据包记录
* Param const CDataPacketRecord & record:
* @Return void:
* @Remark:
*/
void AddRecord(const CDataPacketRecord &record);
/*
* Comments: 清除所有的数据包记录
* @Return void:
* @Remark:
*/
void Clear();
/*
* Comments: 将所有的数据包记录输出到文件中
* Param CActor * pActor: 角色对象指针
* @Return void:
* @Remark:
*/
void WriteToFile(CActor* pActor);
/*
* Comments: 清除全服的所有数据包的统计
* @Return void:
* @Remark:
*/
void ClearRecords();
/*
* Comments: 添加一个数据包记录到全服数据
* Param BYTE ucSysId: 逻辑系统Id
* Param BYTE ucMsgId: 逻辑消息Id
* Param WORD wLength: 数据包长度
* Param TICKCOUNT tickCount: 数据包申请时间
* @Return void:
* @Remark:
*/
void AddAllRecord(BYTE ucSysId, BYTE ucMsgId, WORD wLength, TICKCOUNT tickCount,char* sMapName,int nPosX,int nPosY);
/*
* Comments: 将所有的数据包记录输出到文件中
* Param CActor * pActor: 角色对象指针
* @Return void:
* @Remark:
*/
void WriteRecordToFile();
protected:
/*
* Comments: 将所有的数据包记录输出到流中
* Param wylib::stream::CBaseStream & stream: 输出流
* Param CActor* pActor: 角色对象指针
* @Return void:
* @Remark:
*/
void WriteToStream(wylib::stream::CBaseStream &stream, CActor* pActor);
/*
* Comments: 将所有的数据包记录输出到流中
* Param wylib::stream::CBaseStream & stream: 输出流
* Param CActor* pActor: 角色对象指针
* @Return void:
* @Remark:
*/
void WriteRecordToStream(wylib::stream::CBaseStream &stream);
private:
CBaseList<CDataPacketRecord *> m_Records;
CVector<TDATAPACKETRECORD> m_AllRecords; //全服的所有数据包的统计
int m_Count; //统计的次数
};
#endif