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

📄 gameserverplayer.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////// // Filename    : GameServerPlayer.cpp // Written By  : Reiot// //////////////////////////////////////////////////////////////////////// include files#include "GameServerPlayer.h"#include "Socket.h"#include "SocketInputStream.h"#include "SocketOutputStream.h"#include "Assert.h"#include "Packet.h"#include "PacketFactoryManager.h"// by sigi. 2002.11.12const int defaultGameServerPlayerInputStreamSize = 10240;const int defaultGameServerPlayerOutputStreamSize = 163840;////////////////////////////////////////////////////////////////////////// constructor////////////////////////////////////////////////////////////////////////GameServerPlayer::GameServerPlayer ()	 throw ( Error )//: m_pSocket(NULL), m_pInputStream(NULL), m_pOutputStream(NULL){}GameServerPlayer::GameServerPlayer (Socket * pSocket)	 throw ( Error )//: Player( pSocket )//m_pSocket(pSocket), m_pInputStream(NULL), m_pOutputStream(NULL){	__BEGIN_TRY			Assert( pSocket != NULL );	m_pSocket = pSocket;	// create socket input stream	m_pInputStream = new SocketInputStream( m_pSocket, defaultGameServerPlayerInputStreamSize );	Assert( m_pInputStream != NULL );		// create socket output stream	m_pOutputStream = new SocketOutputStream( m_pSocket, defaultGameServerPlayerOutputStreamSize );	Assert( m_pOutputStream != NULL );	__END_CATCH}////////////////////////////////////////////////////////////////////////// destructor////////////////////////////////////////////////////////////////////////GameServerPlayer::~GameServerPlayer ()	 throw ( Error ){	__BEGIN_TRY				/*	// delete socket input stream	SAFE_DELETE(m_pInputStream);	// delete socket output stream	SAFE_DELETE(m_pOutputStream);	// delete socket	if ( m_pSocket != NULL ) 	{		m_pSocket->close();		delete m_pSocket;		m_pSocket = NULL;	}	*/	__END_CATCH}void GameServerPlayer::processInput()	throw ( IOException, Error ){	__BEGIN_TRY	try	{		m_pInputStream->fill();	}	catch ( NonBlockingIOException& nbie )	{	}	__END_CATCH}void GameServerPlayer::processOutput()	throw ( IOException, Error ){	__BEGIN_TRY	try	{		m_pOutputStream->flush();	}	catch ( InvalidProtocolException& )	{		throw DisconnectException( "捞惑茄 菩哦烙" );	}	__END_CATCH}////////////////////////////////////////////////////////////////////////// parse packet and execute handler for the packet////////////////////////////////////////////////////////////////////////void GameServerPlayer::processCommand ()      throw ( IOException , Error ){	__BEGIN_TRY	try {		// 庆歹甫 烙矫历厘且 滚欺 积己		char header[szPacketHeader];		PacketID_t packetID;		PacketSize_t packetSize;		Packet * pPacket;		// 涝仿滚欺俊 甸绢乐绰 肯傈茄 菩哦甸阑 葛炼府 贸府茄促.		while ( true ) {					// 涝仿胶飘覆俊辑 菩哦庆歹农扁父怒 佬绢夯促.			// 父距 瘤沥茄 农扁父怒 胶飘覆俊辑 佬阑 荐 绝促搁,			// Insufficient 抗寇啊 惯积窍绊, 风橇甫 狐廉唱埃促.			if ( !m_pInputStream->peek( header , szPacketHeader ) )				break;			// 菩哦酒捞叼 棺 菩哦农扁甫 舅酒辰促.			// 捞锭 菩哦农扁绰 庆歹甫 器窃茄促.			memcpy( &packetID   , &header[0] , szPacketID );				memcpy( &packetSize , &header[szPacketID] , szPacketSize );			// 菩哦 酒捞叼啊 捞惑窍搁 橇肺配妮 俊矾肺 埃林茄促.			if ( packetID >= Packet::PACKET_MAX )				throw InvalidProtocolException("invalid packet id");						// 菩哦 农扁啊 呈公 农搁 橇肺配妮 俊矾肺 埃林茄促.			if ( packetSize > g_pPacketFactoryManager->getPacketMaxSize(packetID) )				throw InvalidProtocolException("too large packet size");						// 涝仿滚欺郴俊 菩哦农扁父怒狼 单捞鸥啊 甸绢乐绰瘤 犬牢茄促.			// 弥利拳矫 break 甫 荤侩窍搁 等促. (咯扁辑绰 老窜 exception阑 镜 巴捞促.)			if ( m_pInputStream->length() < szPacketHeader + packetSize )				throw InsufficientDataException();						// 咯扁鳖瘤 吭促搁 涝仿滚欺俊绰 肯傈茄 菩哦 窍唱 捞惑捞 甸绢乐促绰 舵捞促.			// 菩哦蒲配府概聪历肺何磐 菩哦酒捞叼甫 荤侩秦辑 菩哦 胶飘钒贸甫 积己窍搁 等促.			// 菩哦酒捞叼啊 肋给瞪 版快绰 菩哦蒲配府概聪历俊辑 贸府茄促.			pPacket = g_pPacketFactoryManager->createPacket( packetID );			// 捞力 捞 菩哦胶飘钒贸甫 檬扁拳茄促.			// 菩哦窍困努贰胶俊 沥狼等 read()啊 virtual 皋目聪硫俊 狼秦辑 龋免登绢			// 磊悼利栏肺 檬扁拳等促.			m_pInputStream->readPacket( pPacket );						// 捞力 捞 菩哦胶飘钒贸甫 啊瘤绊 菩哦勤甸矾甫 荐青窍搁 等促.			// 菩哦酒捞叼啊 肋给瞪 版快绰 菩哦勤甸矾概聪历俊辑 贸府茄促.			pPacket->execute( this );			// 菩哦阑 昏力茄促			delete pPacket;		}	} catch ( NoSuchElementException & nsee ) {		// PacketFactoryManager::createPacket(PacketID_t)		// PacketFactoryManager::getPacketMaxSize(PacketID_t)		// 俊辑 带龙 啊瓷己捞 乐促.		throw Error( nsee.toString() );	} catch ( InsufficientDataException ) {		// do nothing	} 	__END_CATCH}		    ////////////////////////////////////////////////////////////////////////// send packet to player's output buffer////////////////////////////////////////////////////////////////////////void GameServerPlayer::sendPacket ( Packet * pPacket )	throw ( ProtocolException , Error ){	__BEGIN_TRY	m_pOutputStream->writePacket( pPacket );	/*	cout << endl;	cout << "=== GameServerPlayer::sendPacket() ===" << endl;	cout << pPacket->toString() << endl;	cout << "============================" << endl;	*/	__END_CATCH}////////////////////////////////////////////////////////////////////////// disconnect ( close socket )////////////////////////////////////////////////////////////////////////void GameServerPlayer::disconnect ( bool bDisconnected )	throw (InvalidProtocolException, Error){	__BEGIN_TRY	try 	{		// 沥寸窍霸 肺弊酒眶茄 版快俊绰 免仿 滚欺甫 敲矾矫且 荐 乐促.		// 弊矾唱, 阂过利牢 叼胶甫 吧菌促搁 家南捞 摧板栏骨肺		// 敲矾矫且 版快 SIG_PIPE 阑 罐霸 等促.		if ( bDisconnected == UNDISCONNECTED ) 		{			m_pOutputStream->flush();		}		m_pSocket->close();	} 	catch ( InvalidProtocolException & t ) 	{		cerr << "GameServerPlayer::disconnect Exception Check!!" << endl;		cerr << t.toString() << endl;		m_pSocket->close();		//throw Error("揪官...");	}	__END_CATCH}//////////////////////////////////////////////////////////////////////// set socket//////////////////////////////////////////////////////////////////////void GameServerPlayer::setSocket ( Socket * pSocket )	throw (){	__BEGIN_TRY	m_pSocket = pSocket;	if ( m_pInputStream != NULL ) 	{		delete m_pInputStream;		m_pInputStream = new SocketInputStream( m_pSocket );	}	if ( m_pOutputStream != NULL ) {		delete m_pOutputStream;		m_pOutputStream = new SocketOutputStream( m_pSocket );	}	__END_CATCH}////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////string GameServerPlayer::toString () const       throw ( Error ){	__BEGIN_TRY			StringStream msg;		msg << "GameServerPlayer("		<< "SocketID:" << m_pSocket->getSOCKET() 		<< ",Host:" << m_pSocket->getHost() 		<< ",ID:" << m_ID		<< ")" ;	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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