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

📄 serialdatagram.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
////////////////////////////////////////////////////////////////////////// Filename    : SerialDatagram.cpp// Written By  : reiot@ewestsoft.com// Description : ////////////////////////////////////////////////////////////////////////// include files#include "SerialDatagram.h"#include "Assert.h"#include "PacketFactoryManager.h"#include "SerialDatagramPacket.h"//////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////SerialDatagram::SerialDatagram () 	throw () : m_Length(0), m_InputOffset(0), m_OutputOffset(0), m_Data(NULL) {	__BEGIN_TRY	memset( &m_SockAddr , 0 , sizeof(m_SockAddr) );	m_SockAddr.sin_family = AF_INET;	__END_CATCH}//////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////SerialDatagram::~SerialDatagram () 	throw () { 	__BEGIN_TRY	if ( m_Data != NULL ) {		SAFE_DELETE_ARRAY(m_Data);		m_Data = NULL;	}	__END_CATCH}//////////////////////////////////////////////////////////////////////// 郴何 滚欺俊 甸绢乐绰 郴侩阑 寇何 滚欺肺 汗荤茄促.//////////////////////////////////////////////////////////////////////void SerialDatagram::read ( char * buf , uint len )	throw ( Error ){	__BEGIN_TRY	// boundary check	Assert( m_InputOffset + len <= m_Length );	memcpy( buf , &m_Data[m_InputOffset] , len );	m_InputOffset += len;	__END_CATCH}//////////////////////////////////////////////////////////////////////// 郴何 滚欺俊 甸绢乐绰 郴侩阑 寇何 胶飘傅栏肺 汗荤茄促.//////////////////////////////////////////////////////////////////////void SerialDatagram::read ( string & str , uint len )	throw ( Error ){	__BEGIN_TRY	// boundary check	Assert( m_InputOffset + len <= m_Length );	str.reserve(len);	str.assign( &m_Data[m_InputOffset] , len );	m_InputOffset += len;	__END_CATCH}//////////////////////////////////////////////////////////////////////// // SerialDatagram 按眉俊辑 Packet 按眉甫 掺笼绢辰促.// SerialDatagramSocket 狼 郴何 滚欺狼 农扁父 面盒洒(?) 农促搁,// peer俊辑 焊辰 菩哦捞 肋妨辑 唱棵 啊瓷己篮 利促. // // (漂洒 快府 霸烙俊辑绰 UDP啊 肺拿 罚惑俊辑父 荤侩登扁 锭巩俊// 犬伏篮 歹 利促..)// // *CAUTION*// // 酒贰狼 舅绊府硫篮, (1) 鞍篮 林家俊辑 朝酒柯 2俺狼 辑肺 促弗 菩哦捞// recvfrom()俊辑 阿阿 蝶肺 府畔登绢具 窍哥, (2) 窍唱狼 菩哦篮 茄波锅俊// 佬囚柳促.. 扼绰 啊沥窍俊辑父 狼固啊 乐促.// //////////////////////////////////////////////////////////////////////void SerialDatagram::read ( SerialDatagramPacket * & pPacket )	throw ( ProtocolException , Error ){	__BEGIN_TRY	Assert( pPacket == NULL );	PacketID_t packetID;	PacketSize_t packetSize;	uint serial;	// initialize packet header	read( (char*)&packetID , szPacketID );	read( (char*)&packetSize , szPacketSize );	read( (char*)&serial, szuint );	cout << "SerialDatagramPacket I  D : " << packetID << endl;	// 菩哦 酒捞叼啊 捞惑且 版快	if ( packetID >= Packet::PACKET_MAX )		throw InvalidProtocolException("invalid packet id");	// 菩哦 荤捞令啊 捞惑且 版快	if ( packetSize > g_pPacketFactoryManager->getPacketMaxSize(packetID) )		throw InvalidProtocolException("too large packet size");	// 单捞磐弊伐狼 农扁啊 菩哦狼 农扁焊促 累阑 版快	if ( m_Length < szPacketHeader + packetSize )		throw Error("单捞磐弊伐 菩哦捞 茄锅俊 佬囚瘤瘤 臼疽嚼聪促.");	// 单捞磐弊伐狼 农扁啊 菩哦狼 农扁焊促 努 版快	if ( m_Length > szPacketHeader + packetSize )		throw Error("咯矾 俺狼 单捞磐弊伐 菩哦捞 茄波锅俊 佬囚脸嚼聪促.");	// 菩哦阑 积己茄促.	pPacket = (SerialDatagramPacket*)g_pPacketFactoryManager->createPacket( packetID );	Assert( pPacket != NULL );	// 矫府倔阑 持绰促	pPacket->setSerial( serial );	// 菩哦阑 檬扁拳茄促.	pPacket->read( *this );	// 菩哦阑 焊辰 林家/器飘甫 历厘茄促.	pPacket->setHost( getHost() );	pPacket->setPort( getPort() );	__END_CATCH}//////////////////////////////////////////////////////////////////////// 寇何 滚欺俊 甸绢乐绰 郴侩阑 郴何 滚欺肺 汗荤茄促.//////////////////////////////////////////////////////////////////////void SerialDatagram::write ( const char * buf , uint len )	throw ( Error ){	__BEGIN_TRY	// boundary check	Assert( m_OutputOffset + len <= m_Length );//	if (m_OutputOffset + len > m_Length)//	{//		throw Error( "SerialDatagram::write(): 静妨绰 郴侩捞 滚欺狼 农扁焊促 女聪促.");//	}	memcpy( &m_Data[m_OutputOffset] , buf , len );	m_OutputOffset += len;	__END_CATCH}//////////////////////////////////////////////////////////////////////// 寇何 胶飘傅俊 甸绢乐绰 郴侩阑 郴何 滚欺肺 汗荤茄促.//// *CAUTION*//// 葛电 write()甸捞 write(const char*,uint)甫 荤侩窍骨肺, m_OutputOffset// 阑 函版秦临 鞘夸绰 绝促.////////////////////////////////////////////////////////////////////////void SerialDatagram::write ( const string & str )	throw ( Error ){	__BEGIN_TRY	// boundary check	Assert( m_OutputOffset + str.size() <= m_Length );	// write string body	write( str.c_str() , str.size() );	__END_CATCH}////////////////////////////////////////////////////////////////////////// write packet//// 菩哦狼 官捞呈府 捞固瘤甫 单捞磐弊伐栏肺 笼绢持绰促.// 菩哦阑 傈价窍绰 率俊辑 捞 皋筋靛甫 龋免窍哥, 捞 惑怕俊辑 单捞磐弊伐狼// 郴何 滚欺绰 NULL 捞绢具 茄促. 溜 捞 皋筋靛甫 龋免且 锭 滚欺啊 且寸// 登绢具 茄促.////////////////////////////////////////////////////////////////////////void SerialDatagram::write ( const SerialDatagramPacket * pPacket )	throw ( ProtocolException , Error ){	__BEGIN_TRY	Assert( pPacket != NULL );	PacketID_t packetID = pPacket->getPacketID();	PacketSize_t packetSize = pPacket->getPacketSize();	uint serial = pPacket->getSerial();	// 单捞鸥弊伐狼 滚欺甫 利例茄 农扁肺 汲沥茄促.	setData( szPacketHeader + packetSize );	// 菩哦 庆歹甫 汲沥茄促.	write( (char*)&packetID , szPacketID );	write( (char*)&packetSize , szPacketSize );	write( (char*)&serial, szuint );	// 菩哦 官叼甫 汲沥茄促.	pPacket->write( *this );	__END_CATCH}////////////////////////////////////////////////////////////////////////// set data//// 单捞磐弊伐家南俊辑 佬绢甸牢 单捞磐甫 郴何滚欺俊 汗荤茄促.////////////////////////////////////////////////////////////////////////void SerialDatagram::setData ( char * data , uint len ) 	throw ( Error ) { 	__BEGIN_TRY	Assert( data != NULL && m_Data == NULL );	m_Length = len; 	m_Data = new char[m_Length]; 	memcpy( m_Data , data , m_Length ); 	__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void SerialDatagram::setData ( uint len )	throw ( Error ){	__BEGIN_TRY	Assert( m_Data == NULL );	m_Length = len;	m_Data = new char[ m_Length ];	__END_CATCH}	//////////////////////////////////////////////////////////////////////// set address//////////////////////////////////////////////////////////////////////void SerialDatagram::setAddress ( SOCKADDR_IN * pSockAddr ) 	throw ( Error ) { 	__BEGIN_TRY	Assert( pSockAddr != NULL );	memcpy( &m_SockAddr , pSockAddr , szSOCKADDR_IN ); 	__END_CATCH}//////////////////////////////////////////////////////////////////////// get debug string//////////////////////////////////////////////////////////////////////string SerialDatagram::toString () const	throw (){	StringStream msg;	msg << "SerialDatagram("		<< "Length:" << m_Length		<< ",InputOffset:" << m_InputOffset		<< ",OutputOffset:" << m_OutputOffset		<< ")";	return msg.toString();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -