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

172 lines
5.1 KiB
C++

#include "StdAfx.h"
CActorDataPacketStat::~CActorDataPacketStat()
{
Clear();
m_Records.empty();
m_AllRecords.empty();
m_AllRecords.clear();
}
void CActorDataPacketStat::AddRecord(const CDataPacketRecord &record)
{
CDataPacketRecord *pRecord = CActorDataPacketStatAlloc::m_spADPSAllocator->AllocRecord();
if (pRecord)
{
pRecord->SetData(record);
m_Records.add(pRecord);
}
}
void CActorDataPacketStat::AddRecord(BYTE ucSysId, BYTE ucMsgId, WORD wLength, TICKCOUNT tickCount)
{
AddRecord(CDataPacketRecord(ucSysId, ucMsgId, wLength, tickCount));
}
void CActorDataPacketStat::Clear()
{
for (INT_PTR i = 0; i < m_Records.count(); i++)
{
CActorDataPacketStatAlloc::m_spADPSAllocator->FreeRecord(m_Records[i]);
}
m_Records.clear();
}
void CActorDataPacketStat::WriteToFile(CActor* pActor)
{
static LPCTSTR szFileName = _T("ActorPacket.txt");
using namespace wylib::stream;
CFileStream fs(szFileName, CFileStream::faWrite, CFileStream::AlwaysOpen);
fs.setPosition(fs.getSize());
WriteToStream(fs, pActor);
}
void CActorDataPacketStat::WriteToStream(wylib::stream::CBaseStream &stream, CActor* pActor)
{
const char* pActorName = NULL;
if (pActor)
{
pActorName = pActor->GetEntityName();
}
const TCHAR szSep[] = _T("-------------------------------------------------------------------------------------------\r\n");
TCHAR szDateTime[256];
CUtility::GetDateTimeDesc(szDateTime);
stream.write(szSep, _tcslen(szSep));
stream.write(szDateTime, _tcslen(szDateTime));
TCHAR szDesc[256] = {0};
_stprintf(szDesc, _T("\r\n%-20s%-25s%-25s%-25s%-25s\r\n"), _T("消息号"), _T("系统号"), _T("消息号"), _T("消息体长度"), _T("发送时间"));
stream.write(szDesc, _tcslen(szDesc));
TCHAR szContent[256] = {0};
TCHAR szContentFmt[256] = {0};
_tcscpy(szContentFmt, _T("%-20d%-25d%-25d%-25d%-25lld\r\n"));
for (INT_PTR i = 0; i < m_Records.count(); i++)
{
CDataPacketRecord* pRecord = m_Records[i];
_stprintf(szContent, szContentFmt, (int)(i+1), (int)pRecord->m_nSystemId,
(int)pRecord->m_nMsgId, (int)pRecord->m_nLenth, (INT64)pRecord->m_nRecordTime);
stream.write(szContent, _tcslen(szContent));
}
}
void CActorDataPacketStat::ClearRecords()
{
m_AllRecords.empty();
m_AllRecords.clear();
}
void CActorDataPacketStat::AddAllRecord(BYTE ucSysId, BYTE ucMsgId, WORD wLength, TICKCOUNT tickCount,char* sMapName,int nPosX,int nPosY)
{
TDATAPACKETRECORD tmpRecord;
tmpRecord.m_nSystemId = ucSysId;
tmpRecord.m_nMsgId = ucMsgId;
tmpRecord.m_nLenth = wLength;
tmpRecord.m_nRecordTime = tickCount;
tmpRecord.m_TotalSzie = wLength;
if(sMapName)
{
_asncpytA(tmpRecord.m_MapName,sMapName);
}
else
{
_asncpytA(tmpRecord.m_MapName,"");
}
tmpRecord.m_PosX = nPosX;
tmpRecord.m_PosY = nPosY;
tmpRecord.m_Count = 1;
int nCount = (int)m_AllRecords.count();
for(int i=0;i<nCount;i++)
{
TDATAPACKETRECORD& temp = m_AllRecords[i];
if(temp.m_nSystemId == ucSysId && temp.m_nMsgId == ucMsgId)
{
temp.m_Count++;
temp.m_TotalSzie += wLength;
return;
}
}
m_AllRecords.add(tmpRecord);
}
void CActorDataPacketStat::WriteRecordToFile()
{
if(m_Count < 0)
m_Count = 0;
static LPCTSTR szFileName = _T("data/log/PacketRecord.txt");
using namespace wylib::stream;
CFileStream fs(szFileName, CFileStream::faWrite, CFileStream::AlwaysOpen);
fs.setPosition(fs.getSize());
m_Count++;
WriteRecordToStream(fs);
}
void CActorDataPacketStat::WriteRecordToStream(wylib::stream::CBaseStream &stream)
{
const TCHAR szSep[] = _T("服务器下发的数据包-------------------------------------------------------------------------------------------\r\n");
TCHAR szDateTime[256];
CUtility::GetDateTimeDesc(szDateTime);
stream.write(szSep, _tcslen(szSep));
stream.write(szDateTime, _tcslen(szDateTime));
TCHAR szCount[256] = {0};
CVector<void *> actorList;
GetGlobalLogicEngine()->GetEntityMgr()->GetOnlineAcotrPtrList(actorList);
int nCount = (int)actorList.count();
_stprintf(szCount,_T("%-20s%-2d%"),_T("玩家人数:"),nCount);
stream.write(szCount, _tcslen(szCount));
TCHAR szDesc[256] = {0};
_stprintf(szDesc, _T("\r\n%-20s%-25s%-25s%-25s%-25s%-25s\r\n"), _T("系统号"), _T("消息号"), _T("消息数量"), _T("单个消息体长度"),_T("总消息体长度"), _T("发送时间"));
stream.write(szDesc, _tcslen(szDesc));
TCHAR szContent[256] = {0};
TCHAR szContentFmt[256] = {0};
_tcscpy(szContentFmt, _T("%-20d%-25d%-25d%-25d%-25lld%-25lld\r\n"));
INT64 nTotalSize = 0;
for (INT_PTR i = 0; i < m_AllRecords.count(); i++)
{
TDATAPACKETRECORD& tempRecord = m_AllRecords[i];
if(tempRecord.m_Count == 0)
tempRecord.m_Count = 1;
int tmpSize = (int)(tempRecord.m_TotalSzie/tempRecord.m_Count);
_stprintf(szContent, szContentFmt, (int)tempRecord.m_nSystemId,
(int)tempRecord.m_nMsgId, (int)tempRecord.m_Count,(int)tmpSize,(INT64)(tempRecord.m_TotalSzie), (INT64)tempRecord.m_nRecordTime);
stream.write(szContent, _tcslen(szContent));
nTotalSize += tempRecord.m_TotalSzie;
}
TCHAR szTotal[256] = {0};
if(m_Count <= 0)
m_Count = 1;
_stprintf(szTotal,_T("%-2s%-20lld%-2s%-0.2f%mbps\r\n"),_T("数据总大小:"),nTotalSize,_T("平均带宽:"),nTotalSize * 8/(60*m_Count*1024*1024));
stream.write(szTotal, _tcslen(szTotal));
//ClearRecords();
}