📄 cmpacket.cpp
字号:
#include <stdio.h>
#include <ATLComTime.h>
#include "CMPacket.h"
#include <MatrixCore/System/CMDebug.h>
#include <MatrixCore/Pattern/CMSingleton.h>
using namespace MatrixCore::Pattern;
using namespace MatrixCore::Network;
CMPacket CMPacket::m_NullPacketClass(false);
CMPacket::CMPacket(bool bNullPacket)
: m_cDataField( 0 ), m_cReadPosition( 0 ), m_cWritePosition( 0 ), m_iReceivedSize( 0 ) ,m_pPacketBuffer(NULL),bNullPack(true)
{
bNullPack = bNullPacket;
// PacketDebug = NULL;
// PacketDebug = new CMDebug(MatrixCore::System::CMDebug::DEBUGTYPE_FILE,"Err/PacketErr");
//Clear(PACKETBUFFERSIZE);
//SetID(0);
}
//-------------------------------------------------------------------------------------------------------
// Name :: CMPacket()
// Create Date :: 2004/ 02/05
// Description :: 积己磊
// param ::
// Return Value :: void 鸥涝
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
CMPacket::CMPacket()
: m_cDataField( 0 ), m_cReadPosition( 0 ), m_cWritePosition( 0 ), m_iReceivedSize( 0 ) ,m_pPacketBuffer(NULL),bNullPack(true)
{
// PacketDebug = NULL;
// PacketDebug = new CMDebug(MatrixCore::System::CMDebug::DEBUGTYPE_FILE,"Err/PacketErr");
//Clear(PACKETBUFFERSIZE);
//SetID(0);
}
CMPacket::CMPacket( char * ReadBuf , int buffsize )
: m_cDataField( 0 ), m_cReadPosition( 0 ), m_cWritePosition( 0 ), m_iReceivedSize( 0 ),m_pPacketBuffer(NULL),bNullPack(true)
{
if(ReadBuf == NULL)
{
//
CMSingleton<CMDebug>::getInstance()->output("%s(%d)CMPacket() Error()",__FILE__,__LINE__);
return ;
}
m_pPacketBuffer = ReadBuf;
Clear(buffsize);
}
CMPacket::~CMPacket()
{
// if(PacketDebug != NULL)
// delete PacketDebug;
//if(CMPacket::m_NullPacketClass != NULL)
//{
// delete CMPacket::m_NullPacketClass;
// CMPacket::m_NullPacketClass = NULL;
//}
}
//-----------------------------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------------------------------
// Name :: SetProtocolID()
// Create Date :: 2004/ 02/05
// Description :: 酒流 固备泅
// param ::
// Return Value :: void 鸥涝
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
unsigned int CMPacket::SetProtocolID(unsigned short IdValue ,unsigned short GameType)
{
return 0;
}
/*-------------------------------------------------------------------------------------------------------
// Name :: BOOL GetRecvCheck()
// Create Date :: 2004/08/12
// Description :: 菩哦 单捞鸥啊 府靛且矫俊父 结具 茄促..
// 府矫宏茄单捞鸥客 菩哦俊 鞘夸茄 单捞鸥樊捞 嘎瘤啊 臼促.
// param ::
// return value :: 0捞搁 俊矾
// 1捞搁 己傍
// Bug Report ::
-------------------------------------------------------------------------------------------------------*/
BOOL CMPacket::GetRecvCheck()
{
return bNullPack ;
}
bool CMPacket::IsValidHeader()
{
if( GetPacketSize() >= PACKETHEADERSIZE )
return true;
return false;
}
bool CMPacket::IsValidPacket()
{
if( IsValidHeader() == false || m_iReceivedSize < PACKETHEADERSIZE || m_iReceivedSize < GetDataFieldSize() )
return false;
return true;
}
//-------------------------------------------------------------------------------------------------------
// Name :: void Clear( int bufferSize )
// Create Date :: 2004/ 02/05
// Description :: 皋葛府 棺 函荐 檬扁拳
// param ::
// Return Value :: void 鸥涝
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
void CMPacket::Clear( int bufferSize )
{
::ZeroMemory( m_pPacketBuffer, bufferSize );
ZeroMemory( &m_PacketHeader,sizeof(m_PacketHeader));
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
//m_PacketHeader.pDataSize =
// ( unsigned short* )((char*)m_cPacketBuffer + HEAD_SIZE_POISTION); // packetSize size = 2
//m_PacketHeader.pProtocolID =
// ( unsigned short* )( ( char* )m_cPacketBuffer + HEAD_ID_POISTION ); // protocolID size = 2
m_cDataField = &m_pPacketBuffer[PACKETHEADERSIZE]; // 单捞鸥 困摹蔼 m_cDataField
m_cReadPosition = m_cWritePosition = m_cDataField; // 单捞鸥狼 静咯柳何盒阑 檬扁拳 茄促.
m_cEndOfDataField = &m_cDataField[bufferSize - PACKETHEADERSIZE]; //
DebugAssert( m_cReadPosition <= m_cEndOfDataField );
SetID( 0 );
m_iReceivedSize = PACKETHEADERSIZE;
}
//-------------------------------------------------------------------------------------------------------
// Name :: CMPacket& SetID( unsigned short ID )
// Create Date :: 2004/ 02/05
// Description :: 霸烙 橇肺配妮阑 沥狼 茄促.( 公郊 橇肺配妮牢瘤?) 抗) 框流烙,傍拜,
// param ::
// Return Value :: CMPacket 鸥涝 : 捞 努贰胶狼 器牢磐甫 馆券.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
CMPacket& CMPacket::SetID( unsigned short ID )
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
m_PacketHeaderCast->sProtocolID = ID;
return *this;
}
//-------------------------------------------------------------------------------------------------------
// Name :: unsigned short GetID()
// Create Date :: 2004/ 02/05
// Description :: 皋葛府俊 甸绢 乐绰 霸烙 橇肺配妮 蔼阑 掘绢 柯促.
// param ::
// Return Value :: unsigned short 屈狼 蔼.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
unsigned short CMPacket::GetID()
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
return m_PacketHeaderCast->sProtocolID;
}
//-------------------------------------------------------------------------------------------------------
// Name :: unsigned short GetTypeID()
// Create Date :: 2004/ 02/05
// Description :: 皋葛府俊 甸绢 乐绰 霸烙 鸥涝 蔼阑 掘绢 柯促.
// param ::
// Return Value :: unsigned short 屈狼 蔼.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
unsigned short CMPacket::GetTypeID()
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
return m_PacketHeaderCast->sGameType;
}
//-------------------------------------------------------------------------------------------------------
// Name :: CMPacket& Id( unsigned short ID )
// Create Date :: 2004/ 02/05
// Description :: 霸烙 鸥涝阑 沥狼 茄促.( 公郊 橇肺配妮牢瘤?) 抗) 框流烙,傍拜,
// param ::
// Return Value :: CMPacket 鸥涝 : 捞 努贰胶狼 器牢磐甫 馆券.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
CMPacket& CMPacket::TypeID( unsigned short sTypeID )
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
m_PacketHeaderCast->sGameType = sTypeID;
return *this;
}
//-------------------------------------------------------------------------------------------------------
// Name :: unsigned short GetDataFieldSize()
// Create Date :: 2004/ 02/05
// Description :: 皋葛府俊 甸绢 乐绰 菩哦狼 荤捞令甫 掘绢 柯促..
// param ::
// Return Value :: unsigned int 屈狼 蔼.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
unsigned short CMPacket::GetDataFieldSize()
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
return m_PacketHeaderCast->sDataSize;
}
//-------------------------------------------------------------------------------------------------------
// Name :: unsigned short GetRandomValue()
// Create Date :: 2004/ 02/05
// Description :: 皋葛府俊 甸绢 乐绰 罚待 蔼阑 掘绢 柯促.(府敲饭捞傍拜阑 阜扁困茄 蔼.)
// param ::
// Return Value :: unsigned short 屈狼 蔼.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
unsigned short CMPacket::GetRandomValue()
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
return m_PacketHeaderCast->sReplayDefence;
}
//-------------------------------------------------------------------------------------------------------
// Name :: CMPacket& SetRandomValue( unsigned short sReplayDefenceRandom )
// Create Date :: 2004/ 02/05
// Description :: 霸烙 鸥涝阑 沥狼 茄促.((府敲饭捞傍拜阑 阜扁困茄 蔼.)
// param :: unsigned short sReplayDefenceRandom : 罚待蔼.
// Return Value :: CMPacket 鸥涝 : 捞 努贰胶狼 器牢磐甫 馆券.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
CMPacket& CMPacket::SetRandomValue( unsigned short sReplayDefenceRandom )
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
m_PacketHeaderCast->sReplayDefence = sReplayDefenceRandom;
return *this;
}
//-------------------------------------------------------------------------------------------------------
// Name :: CMPacket& GetHeaderInfo( HEADERINFO* pheadinfo )
// Create Date :: 2004/ 02/05
// Description :: 霸烙 鸥涝阑 沥狼 茄促.((府敲饭捞傍拜阑 阜扁困茄 蔼.)
// param :: HEADERINFO* pheadinfo : 庆歹 备炼眉.
// Return Value :: CMPacket 鸥涝 : 捞 努贰胶狼 器牢磐甫 馆券.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
void CMPacket::GetHeaderInfo(LPHEADERB pheadinfo)
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
memcpy(pheadinfo,m_PacketHeaderCast,sizeof(HEADERB));
}
//-------------------------------------------------------------------------------------------------------
// Name :: SetHeaderInfo(unsigned char cEncode,unsigned short ID,unsigned short sTypeID,unsigned short sReplayDefence )
// Create Date :: 2004/ 02/05
// Description :: 霸烙 鸥涝阑 沥狼 茄促.((府敲饭捞傍拜阑 阜扁困茄 蔼.)
// param ::
// unsigned char cEncode : 鞠龋拳 咯何.
// unsigned short ID : 霸烙 橇肺配妮 酒捞叼.
// unsigned short sTypeID : 霸烙 皋技瘤 鸥涝.
// unsigned short sReplayDefence : 府敲饭捞甫 困茄 蔼 瘤陛篮 short屈栏肺 官差菌促 窜瘤 罚待蔼.
// Return Value :: CMPacket 鸥涝 : 捞 努贰胶狼 器牢磐甫 馆券.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
CMPacket& CMPacket::SetHeaderInfo(unsigned char cEncode,unsigned short ID,unsigned short sTypeID,unsigned short sReplayDefence)
{
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
m_PacketHeaderCast->sProtocolEncode = cEncode;
m_PacketHeaderCast->sProtocolID = ID;
m_PacketHeaderCast->sGameType = sTypeID;
m_PacketHeaderCast->sReplayDefence = sReplayDefence;
return *this;
}
//-------------------------------------------------------------------------------------------------------
// Name :: void CopyToBuffer()
// Create Date :: 2004/ 02/05
// Description :: 皋葛府俊 甸绢 乐绰 菩哦狼 荤捞令甫 掘绢 柯促..
// param ::
// Return Value :: unsigned int 屈狼 蔼.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
void CMPacket::CopyToBuffer( char* buff, int iSize )
{
::CopyMemory( m_pPacketBuffer + m_iReceivedSize, buff, iSize );
m_iReceivedSize += iSize;
m_PacketHeaderCast->sDataSize += iSize;
}
//-------------------------------------------------------------------------------------------------------
// Name :: CMPacket::SetInitBuff( char * WriteBuf , int buffsize )
// Create Date :: 2004/ 06/25
// Description :: 季靛 单捞鸥甫 檬扁拳 茄促.
// param ::
// Return Value ::
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
void CMPacket::SetInitBuff( char * WriteBuf , int buffsize )
{
if(WriteBuf == NULL)
{
//
CMSingleton<CMDebug>::getInstance()->output("%s(%d)CMPacket() Error()",__FILE__,__LINE__);
return ;
}
m_pPacketBuffer = WriteBuf;
Clear(buffsize);
}
//-------------------------------------------------------------------------------------------------------
// Name :: void SetReadData(char *pReadData,int iDataSize)
// Create Date :: 2004/ 04/25
// Description :: recv 单捞鸥甫 技泼.
// param ::
// Return Value ::
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
void CMPacket::SetReadData(char *pReadData,int iDataSize)
{
if(pReadData == NULL)
{
//
CMSingleton<CMDebug>::getInstance()->output("%s(%d)CMPacket() Error()",__FILE__,__LINE__);
return ;
}
m_pPacketBuffer = pReadData;
//Clear(iDataSize);
m_PacketHeaderCast = (LPHEADERB) m_pPacketBuffer;
m_cDataField = &m_pPacketBuffer[PACKETHEADERSIZE]; // 单捞鸥 困摹蔼 m_cDataField
m_cReadPosition = m_cWritePosition = m_cDataField; // 单捞鸥狼 静咯柳何盒阑 檬扁拳 茄促.
m_cEndOfDataField = &m_cDataField[iDataSize -PACKETHEADERSIZE]; //
m_iReceivedSize = iDataSize; //傈眉 府矫宏茄 荤捞令.
}
BOOL CMPacket::ReadData( void* buffer, int iSize ) throw ( InvalidPacketException* )
{
//if( m_cReadPosition + iSize > m_cDataField + GetDataFieldSize() || m_cReadPosition + iSize > m_cEndOfDataField )
// throw ( new InvalidPacketException() );
if(this == &m_NullPacketClass)
return FALSE;
if( m_cReadPosition + iSize > m_cDataField + GetDataFieldSize() || m_cReadPosition + iSize > m_cEndOfDataField )
return FALSE;
::CopyMemory( buffer, m_cReadPosition, iSize );
m_cReadPosition += iSize;
return TRUE;
}
//-------------------------------------------------------------------------------------------------------
// Name :: void SetAddressWrite(void* buff,int iSize,int iAddressPoint)
// Create Date :: 2004/ 02/05
// Description :: iAddressPoint 狼 农扁父怒 单捞鸥 荤捞令 傍埃第肺 啊辑 弊何盒俊 单捞鸥甫 利绢 持绰促.
// param ::
// Return Value :: void 屈狼 蔼.
// Bug Report :: 单捞鸥甫 笼绢持绊 祈笼窍扁 困茄 窃荐.
//-------------------------------------------------------------------------------------------------------
void CMPacket::SetAddressWrite(void* buff,int iSize,int iAddressPoint)
{
char *pData = NULL;
pData = m_cDataField + iAddressPoint;
memcpy(pData,buff,iSize);
}
//-------------------------------------------------------------------------------------------------------
// Name :: void WriteData( void* buffer, int iSize ) throw ( InvalidPacketException* )
// Create Date :: 2004/ 02/05
// Description ::
// param ::
// Return Value :: void 屈狼 蔼.
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
void CMPacket::WriteData( void* buffer, int iSize ) throw ( InvalidPacketException* )
{
if( m_cWritePosition + iSize > m_cEndOfDataField )
throw ( new InvalidPacketException() );
::CopyMemory( m_cWritePosition, buffer, iSize );
m_cWritePosition += iSize;
m_iReceivedSize += iSize;
m_PacketHeaderCast->sDataSize += iSize;
}
CMPacket& CMPacket::operator = ( CMPacket& packet )
{
::CopyMemory( m_cDataField, packet.m_cDataField, packet.GetDataFieldSize() );
m_PacketHeaderCast->sProtocolID = packet.GetID();
m_PacketHeaderCast->sDataSize = packet.GetDataFieldSize();
return *this;
}
CMPacket& CMPacket::operator << ( LPTSTR arg )
{
WriteData( arg, lstrlen( arg ) * sizeof( TCHAR ) + sizeof( TCHAR ) );
return *this;
}
CMPacket& CMPacket::operator >> ( LPTSTR arg )
{
if(ReadData( arg, lstrlen( ( LPTSTR )m_cReadPosition ) * sizeof( TCHAR ) + sizeof( TCHAR ) ) == FALSE)
return m_NullPacketClass;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -