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

📄 cubeginupdatehandler.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//--------------------------------------------------------------------------------//// Filename    : CUBeginUpdateHandler.cpp// Written By  : Reiot////--------------------------------------------------------------------------------// include files#include "CUBeginUpdate.h"#ifdef __UPDATE_SERVER__	#include <sys/dir.h>//	#include <stdio.h>//	#include <fcntl.h>//	#include <unistd.h>	#include "UpdateServerPlayer.h"	#include "Properties.h"	#include "Upackets/UCUpdateList.h"	#include "UpdateServerPlayer.h"	#include "UpdateServer.h"	// 诀单捞飘 叼泛配府 胶牡 包访	#include <stdio.h>	#include <unistd.h>	#include <dirent.h>	#include <sys/stat.h>#endif/*//--------------------------------------------------------------------------------//// 努扼捞攫飘狼 滚傈 官肺 拉滚傈何磐 弥脚 滚傈鳖瘤狼 府胶飘甫 积己茄 饶,// 阿 滚傈狼 诀单捞飘 疙飞阑 merge 秦辑 弥利拳等 诀单捞飘 疙飞狼 府胶飘甫// 积己秦辑 UCUpdateList 菩哦俊 淬酒 努扼捞攫飘肺 傈价茄促.////--------------------------------------------------------------------------------void CUBeginUpdateHandler::execute ( CUBeginUpdate * pPacket , Player * pPlayer )	 throw ( ProtocolException , Error ){	__BEGIN_TRY		#ifdef __UPDATE_SERVER__	UpdateServerPlayer * pUpdateServerPlayer = dynamic_cast<UpdateServerPlayer*>(pPlayer);	try {		//cout << "Client Version : " << pPacket->getVersion() << endl;		//--------------------------------------------------------------------------------		// 菩摹 叼泛配府狼 窍困 叼泛配府甸狼 府胶飘甫 积己茄促.		// 捞锭 努扼捞攫飘 滚傈焊促 鞍芭唱 撤篮 滚傈篮 公矫秦档 等促.		//--------------------------------------------------------------------------------		// 叼泛配府 捞抚狼 府胶飘		list<string> directories;		string patchDir = g_pConfig->getProperty("HomeDir") + separator + g_pConfig->getProperty("PatchDir");		//cout << "patchDir = " << patchDir << endl;		// 菩摹 叼泛配府甫 坷锹茄促.		DIR * pDIR = opendir( patchDir.c_str() );		// 菩摹 叼泛配府啊 绝栏搁 富炉 炔!		Assert( pDIR != NULL );		// 菩摹 叼泛配府狼 窍困 叼泛配府(滚傈 叼泛配府)甸阑 佬绢甸牢促.		bool sameVersionFound = false;		struct dirent * versionDir;		while ( ( versionDir = readdir( pDIR ) ) != NULL ) {			// 后 浇儿(inode==0)篮 公矫茄促...			if ( versionDir->d_ino != 0 ) {				//					// 滚傈 叼泛配府绰 v + 0栏肺 盲况柳 5磊府 沥荐 巩磊凯肺 登绢 乐促.				//  ex> v00001/ v00002/ v00003/ ...				//				string dir = versionDir->d_name;				// v 肺 矫累窍瘤 臼绰 窍困 叼泛配府肺绰 "." 苞 ".." 捞 乐促. -_-;				if ( dir[0] == 'v' ) {					// 滚傈阑 厚背窍扁 困秦辑绰					// 箭磊 何盒阑 胶飘傅栏肺 函券秦辑 促矫 沥荐肺 函券茄促.					Version_t version = atoi( dir.substr( 1 , 5 ).c_str() );					if ( version == pPacket->getVersion() )						sameVersionFound = true;					if ( version > pPacket->getVersion() )						directories.push_back( dir );				} else					//cout << endl;			}					}		closedir( pDIR );		if ( !sameVersionFound ) {			throw InvalidProtocolException("invalid client version");		}		// 抛胶飘肺 免仿秦夯促.		for ( list<string>::iterator itr = directories.begin() ; itr != directories.end() ; itr ++ )			//cout << "Newer Version : " << *itr << endl;		//--------------------------------------------------------------------------------		// 弥脚 滚傈 叼泛配府甸阑 八祸窍搁辑, 阿 叼泛配府狼 index.dat 颇老甸阑 肺爹秦辑		// UpdateManager 按眉甫 积己茄促.		//--------------------------------------------------------------------------------			UCUpdateList ucUpdateList;		UpdateManager * pUpdateManager = ucUpdateList.getUpdateManager();//		int i = 0;		for ( list<string>::iterator itr = directories.begin() ; itr != directories.end() ; itr ++ ) {						// ex> "/home/vs/reiot/data/patch" + "/" + "v00010" + "/" + "index.dat"			string filename = patchDir + separator + *itr + separator + "index.dat";			//cout << "try to open " << filename << endl;			pUpdateManager->load( filename );//			if( i == 12 ) break;//			i++;		}		//cout << pUpdateManager->toString() << endl;		pUpdateServerPlayer->sendPacket( &ucUpdateList );		pUpdateServerPlayer->setPlayerStatus( USPS_AFTER_SENDING_UC_UPDATE_LIST );	} catch ( FileNotExistException & fnee ) {		throw InvalidProtocolException( fnee.toString() );	}#endif			__END_CATCH}*/void CUBeginUpdateHandler::scan_Dir( const string Directory, CUBeginUpdate* pPacket, UpdateManager * pUpdateManager, bool bHttpPatch, bool bUpdaterPatch )	throw( ProtocolException, Error ){#ifdef __UPDATE_SERVER__	DIR * pDIR = opendir( Directory.c_str() );	struct dirent * versionDir;	//cout << "Open Dir : " << Directory << endl;	while ( ( versionDir = readdir( pDIR ) ) != NULL ) {		string vName = versionDir->d_name;		if ( versionDir->d_ino != 0  && vName[0] != '.' ) {			//cout << "versionDir : " << versionDir->d_name<< endl;			string DirectoryName = Directory + "/";			string SubDirectory = DirectoryName + versionDir->d_name;			struct stat List;			stat( SubDirectory.c_str(), &List );			//cout << versionDir->d_name << " " << List.st_size << endl;			//cout << "Path : " << SubDirectory << " Path Size : " << List.st_size << endl;			if( S_ISDIR( List.st_mode ) ) {				// 滚傈阑 厚背窍扁 困秦辑绰				// 箭磊 何盒阑 胶飘傅栏肺 函券秦辑 促矫 沥荐肺 函券茄促.				Version_t version = atoi( vName.substr( 1 , 5 ).c_str() );				Version_t ClientVersion = pPacket->getVersion() - 3000;				if( bUpdaterPatch ) 				{					ClientVersion = (ClientVersion<=46? 1 : 2);				}				if ( version == ClientVersion ) {					//cout << versionDir->d_name << " is Directory " << endl;					string SubDirectory = DirectoryName + versionDir->d_name;					//cout << "SubDirectory : " << SubDirectory << endl;					scan_Dir( SubDirectory, pPacket, pUpdateManager, bHttpPatch, bUpdaterPatch );//					//cout << get_current_dir_name() << endl;				}			} else {				//string tempversion = g_pConfig->getProperty("PatchVersion");				//Version_t PatchVersion = atoi( tempversion.c_str() );				//cout << "It is correct file" << endl;				StringStream msg1;				StringStream msg2;				msg1 << versionDir->d_name << " " << List.st_size;				if( vName == "AppendPatch.inf" ) {					msg2 << "Data\\Info\\" << versionDir->d_name;				} else {					msg2 << versionDir->d_name;				}				//cout << " msg1 :" << msg1.toString() << endl;				//cout << " msg2 :" << msg2.toString() << endl;				Update * pUpdate = new Update();				// ClientVersion栏肺 官厕. by sigi. 2002.10.16				Version_t ClientVersion = pPacket->getVersion();				if (ClientVersion > 3000)					ClientVersion -= 3000;				pUpdate->setVersion( ClientVersion );//pPacket->getVersion() );				pUpdate->setUpdateType(UPDATETYPE_CREATE_FILE);				pUpdate->setParam(0,msg1.toString());				pUpdate->setParam(1,msg2.toString());//				pUpdate->setVersion( PatchVersion );//				if( pPacket->getVersion() > 1000 ) {				if( bHttpPatch ) {					srand(time(NULL));					int randomv = rand();					// URL 急沥 累诀....... 棺 绢录备 历录备					int Random = randomv % g_pConfig->getPropertyInt( "MAXURL" );					StringStream ConfigParam;					ConfigParam << "URL" << Random;					StringStream URL;					URL << g_pConfig->getProperty( ConfigParam.toString() );					pUpdate->setParam(5, URL.toString() );				}				pUpdateManager->push_back( pUpdate );			}		}	}	closedir( pDIR );#endif}//--------------------------------------------------------------------------------//// 努扼捞攫飘狼 滚傈 官肺 拉滚傈何磐 弥脚 滚傈鳖瘤狼 府胶飘甫 积己茄 饶,// 阿 滚傈狼 诀单捞飘 疙飞阑 merge 秦辑 弥利拳等 诀单捞飘 疙飞狼 府胶飘甫// 积己秦辑 UCUpdateList 菩哦俊 淬酒 努扼捞攫飘肺 傈价茄促.////--------------------------------------------------------------------------------void CUBeginUpdateHandler::execute ( CUBeginUpdate * pPacket , Player * pPlayer )	 throw ( ProtocolException , Error ){	__BEGIN_TRY		#ifdef __UPDATE_SERVER__	bool bHttpPatch = true;	bool bUpdaterPatch = false;	// 3000锅 捞惑 滚傈篮 2002.7.12 货滚傈何磐捞促.	// 捞傈 滚傈篮 歹 捞惑 蜡瘤窍瘤 臼阑 抗沥捞骨肺	// 3000锅 捞窍绰 楼弗促.	if (pPacket->getVersion() < 3000)	{		throw DisconnectException("under3000");		}	/*	if( pPacket->getVersion() < 2000 ) {		if( pPacket->getVersion () > 1000 ) {			bHttpPatch = true;			pPacket->setVersion( pPacket->getVersion() - 1000 );		}		bUpdaterPatch = true;	} else {		if (pPacket->getVersion() > 2000)		{			bHttpPatch = true;			pPacket->setVersion( pPacket->getVersion() - 2000 );		}	}	*/	// 3000锅 捞惑篮 公炼扒 HTTP patch捞促.	if( bHttpPatch )	{		((UpdateServerPlayer*)pPlayer)->setExpiredTime( 5 );	}	// 捞力 咯扁辑 葛电 贸府甫 窍霸 等促.	// 辨霸 哎 巴档 绝促. 泅犁 滚怜狼 叼泛配府甫 佬绢辑 弊 救俊 颇老捞 乐栏搁 府胶飘甫 父甸绢 焊郴绊	// 绝栏搁 公矫 窍搁 等促.	UpdateServerPlayer * pUpdateServerPlayer = dynamic_cast<UpdateServerPlayer*>(pPlayer);	string Directory = g_pConfig->getProperty("HomeDir") + separator + g_pConfig->getProperty("PatchDir");	UCUpdateList ucUpdateList;	UpdateManager * pUpdateManager = ucUpdateList.getUpdateManager();	// Info 包访登辑 诀单捞飘甫 窍唱 眠啊茄促.	if ( pPacket->getVersion() >= g_pConfig->getPropertyInt("InfoVersion") )	{		if ( pPacket->getInfoVersion() < g_pConfig->getPropertyInt("InfoMarkVersion") )		{			Update* pUpdate = new Update();			Version_t ClientVersion = pPacket->getVersion();			if (ClientVersion > 3000)				ClientVersion -= 3000;			pUpdate->setVersion( ClientVersion );//pPacket->getVersion() );			pUpdate->setUpdateType(UPDATETYPE_CREATE_FILE);			string infoFileName = "InfoPatch" + g_pConfig->getProperty("InfoMarkVersion");			infoFileName = infoFileName + " 1";			pUpdate->setParam(0, infoFileName);			int Random = rand() % g_pConfig->getPropertyInt( "MAXINFOURL" );			StringStream ConfigParam;			ConfigParam << "INFOURL" << Random;			StringStream URL;			URL << g_pConfig->getProperty( ConfigParam.toString() );			pUpdate->setParam(5, URL.toString() );			pUpdateManager->push_back( pUpdate );		}	}	scan_Dir( Directory, pPacket, pUpdateManager, bHttpPatch, bUpdaterPatch );//	WORD version = pPacket->getVersion();//	WORD keyver = atoi( g_pConfig->getProperty("KeyVersion").c_str() );	if ( pPacket->getType() == CUBeginUpdate::OLD_UPDATE )	{		ucUpdateList.setOld(true);	}	else	{		ucUpdateList.setOld(false);		string KeyFileName = Directory + "/../" + g_pConfig->getProperty("KeyFile");		FILE* pKeyFile = fopen( KeyFileName.c_str(), "r" );		if ( pKeyFile == NULL )		{			filelog("UpdateServerError.log", "虐 颇老捞 绝绢夸.");			throw Error("虐 颇老捞 绝娇寸 ぬ.ば");		}		fread( (void*)ucUpdateList.getKeyArray(), szBYTE, 10, pKeyFile );		fclose( pKeyFile );		if ( pPacket->getType() == CUBeginUpdate::ONE_VERSION_KEY_BACK ) ucUpdateList.setFront( false );		else 		{			ucUpdateList.setFront( true );			Update* pUpdate = new Update();			Version_t ClientVersion = pPacket->getVersion();			if (ClientVersion > 3000)				ClientVersion -= 3000;			pUpdate->setVersion( ClientVersion );//pPacket->getVersion() );			pUpdate->setUpdateType(UPDATETYPE_CREATE_FILE);			WORD lastGuildMarkVersion = g_pConfig->getPropertyInt("LastGuildMarkVersion");			string guildFileName = "Guild";			if ( lastGuildMarkVersion > pPacket->getGuildVersion() )				guildFileName = guildFileName + itos( lastGuildMarkVersion ) + ".txt" + " 1"; 			else 				guildFileName = guildFileName + itos( pPacket->getGuildVersion() ) + ".txt" + " 1";			pUpdate->setParam(0, guildFileName);			pUpdate->setParam(5, g_pConfig->getProperty("GUILDURL"));			if ( pPacket->getGuildVersion() > 0 && pPacket->getGuildVersion() < g_pConfig->getPropertyInt("GuildMarkVersion") && ClientVersion > g_pConfig->getPropertyInt("StartGuildVersion") )				pUpdateManager->push_back( pUpdate );		}	}	//cout << pUpdateManager->toString() << endl;	pUpdateServerPlayer->sendPacket( &ucUpdateList );	pUpdateServerPlayer->setPlayerStatus( USPS_AFTER_SENDING_UC_UPDATE_LIST );#endif			__END_CATCH}

⌨️ 快捷键说明

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