⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpacket.cpp

📁 Soul的源代码,类似于劲舞团之类的游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -