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

📄 resource.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//--------------------------------------------------------------------------------// // Filename    : Resource.cpp// Written By  : Reiot// //--------------------------------------------------------------------------------// include files#include "Resource.h"#include "Socket.h"//--------------------------------------------------------------------------------// constructor//--------------------------------------------------------------------------------Resource::Resource ( Version_t version , const string & str )	throw ( ProtocolException , Error ): m_Version(version), m_Filename(""), m_FileSize(0){	__BEGIN_TRY	//--------------------------------------------------------------------------------	//	// 涝仿 胶飘傅狼 备炼绰 促澜苞 鞍促.	//	// ex> "creature.spk 30021"	//      012345678901234567	//	//      length     = 17	//      firstspace = 12 	//	//--------------------------------------------------------------------------------	if ( str != "" ) {		// 霉锅掳客 付瘤阜 胶其捞胶狼 牢郸胶甫 备茄促.		uint firstspace = str.find_first_of(' ');		if ( firstspace == string::npos )			throw InvalidProtocolException("invalid resource format");		m_Filename = str.substr( 0 , firstspace );			m_FileSize = atoi( str.substr( firstspace + 1 , str.size() - firstspace ).c_str() );			cout << toString() << endl;	}	__END_CATCH}//--------------------------------------------------------------------------------// copy constructor//--------------------------------------------------------------------------------Resource::Resource ( const Resource & resource )	throw (): m_Version(resource.m_Version), m_Filename(resource.m_Filename), m_FileSize(resource.m_FileSize){}//--------------------------------------------------------------------------------// load from resource file//--------------------------------------------------------------------------------void Resource::load ( ifstream & ifile ) 	throw ( Error ){	__BEGIN_TRY	//--------------------------------------------------------------------------------	// read version	//--------------------------------------------------------------------------------	ifile.read( (char*)&m_Version , szVersion );	//--------------------------------------------------------------------------------	// read filename	//--------------------------------------------------------------------------------	BYTE szFilename;	ifile.read( (char*)&szFilename , szBYTE );	if ( szFilename == 0 ) {		throw Error("szFilename == 0");	}	if ( szFilename > maxFilename ) {		throw Error("too large filename length");	}	char filename[maxFilename+1];	ifile.read( filename , szFilename );	filename[szFilename] = 0;	m_Filename = filename;		//--------------------------------------------------------------------------------	// read filesize	//--------------------------------------------------------------------------------	ifile.read( (char*)&m_FileSize , szFileSize );	__END_CATCH}//--------------------------------------------------------------------------------// save to resource file//--------------------------------------------------------------------------------void Resource::save ( ofstream & ofile ) const 	throw ( Error ){	__BEGIN_TRY	//--------------------------------------------------------------------------------	// write version	//--------------------------------------------------------------------------------	ofile.write( (const char *)&m_Version , szVersion );	//--------------------------------------------------------------------------------	// write filename	//--------------------------------------------------------------------------------	BYTE szFilename = m_Filename.size();	if ( szFilename == 0 )		throw Error("szFilename == 0");	if ( szFilename > 20 )		throw Error("too large Filename length");	ofile.write( (const char *)&szFilename , szBYTE );	ofile.write( m_Filename.c_str() , szFilename );	//--------------------------------------------------------------------------------	// write filesize	//--------------------------------------------------------------------------------	ofile.write( (const char *)&m_FileSize , szFileSize );	__END_CATCH}//--------------------------------------------------------------------------------// read from socket input stream//--------------------------------------------------------------------------------void Resource::read ( SocketInputStream & iStream ) 	throw ( IOException , Error ){	__BEGIN_TRY	//--------------------------------------------------------------------------------	// read version	//--------------------------------------------------------------------------------	iStream.read( m_Version );	//--------------------------------------------------------------------------------	// read filename	//--------------------------------------------------------------------------------	BYTE szFilename;	iStream.read( szFilename );	if ( szFilename == 0 )		throw InvalidProtocolException("szFilename == 0");	if ( szFilename > maxFilename )		throw InvalidProtocolException("too large filename length");	iStream.read( m_Filename , szFilename );	//--------------------------------------------------------------------------------	// read filesize	//--------------------------------------------------------------------------------	iStream.read( m_FileSize );	__END_CATCH}//--------------------------------------------------------------------------------// read from socket//--------------------------------------------------------------------------------void Resource::read ( Socket * pSocket ) 	throw ( IOException , Error ){	__BEGIN_TRY	//--------------------------------------------------------------------------------	// read version	//--------------------------------------------------------------------------------	pSocket->receive( &m_Version , szVersion );	//--------------------------------------------------------------------------------	// read filename	//--------------------------------------------------------------------------------	BYTE szFilename;	pSocket->receive( &szFilename , szBYTE );	if ( szFilename == 0 )		throw InvalidProtocolException("szFilename == 0");	if ( szFilename > maxFilename )		throw InvalidProtocolException("too large filename length");	char filename[maxFilename+1];	pSocket->receive( filename , szFilename );	filename[szFilename] = 0;	m_Filename = filename;	//--------------------------------------------------------------------------------	// read filesize	//--------------------------------------------------------------------------------	pSocket->receive( &m_FileSize , szFileSize );	__END_CATCH}//--------------------------------------------------------------------------------// write to socket output stream//--------------------------------------------------------------------------------void Resource::write ( SocketOutputStream & oStream ) const 	throw ( IOException , Error ){	__BEGIN_TRY	//--------------------------------------------------------------------------------	// write version	//--------------------------------------------------------------------------------	oStream.write( m_Version );		//--------------------------------------------------------------------------------	// write filename	//--------------------------------------------------------------------------------	BYTE szFilename = m_Filename.size();	if ( szFilename == 0 )		throw InvalidProtocolException("szFilename == 0");	if ( szFilename > maxFilename )		throw InvalidProtocolException("too large filename length");	oStream.write( szFilename );	oStream.write( m_Filename );	//--------------------------------------------------------------------------------	// write filesize	//--------------------------------------------------------------------------------	oStream.write( m_FileSize );	__END_CATCH}//--------------------------------------------------------------------------------// write to socket//--------------------------------------------------------------------------------void Resource::write ( Socket * pSocket ) const 	throw ( IOException , Error ){	__BEGIN_TRY	//--------------------------------------------------------------------------------	// write version	//--------------------------------------------------------------------------------	pSocket->send( &m_Version , szVersion );	//--------------------------------------------------------------------------------	// write filename	//--------------------------------------------------------------------------------	BYTE szFilename = m_Filename.size();	if ( szFilename == 0 )		throw InvalidProtocolException("szFilename == 0");	if ( szFilename > maxFilename )		throw InvalidProtocolException("too large filename length");	pSocket->send( &szFilename , szBYTE );	pSocket->send( m_Filename.c_str() , szFilename );	//--------------------------------------------------------------------------------	// write filesize	//--------------------------------------------------------------------------------	pSocket->send( &m_FileSize , szFileSize );	__END_CATCH}	//--------------------------------------------------------------------------------// get debug string//--------------------------------------------------------------------------------string Resource::toString () const	throw (){	StringStream msg;	msg << "Resource("		<< "Version:" << m_Version		<< ",Filename:" << m_Filename		<< ",FileSize:" << m_FileSize		<< ")";	return msg.toString();}

⌨️ 快捷键说明

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