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

📄 gameservergroupinfomanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//----------------------------------------------------------------------//// Filename    : GameServerGroupInfoManager.cpp// Written By  : Reiot// Description :////----------------------------------------------------------------------// include files#include "GameServerGroupInfoManager.h"#include "database/DatabaseManager.h"#include "database/Connection.h"#include "database/Statement.h"#include "database/Result.h"#include "database/DB.h"//----------------------------------------------------------------------// constructor//----------------------------------------------------------------------GameServerGroupInfoManager::GameServerGroupInfoManager () 	throw (){}	//----------------------------------------------------------------------// destructor//----------------------------------------------------------------------GameServerGroupInfoManager::~GameServerGroupInfoManager () 	throw (){	// hashmap 救狼 阿 pair 狼 second, 溜 GameServerGroupInfo 按眉父阑 昏力窍绊	// pair 磊眉绰 弊措肺 敌促. (GameServerGroupInfo啊 赛俊 积己登绢 乐促绰 巴俊	// 蜡狼窍扼. 溜 鞘混昏力甫 秦具 茄促. 窍变, GSIM捞 destruct 等促绰 巴篮	// 肺弊牢 辑滚啊 妓促款等促绰 巴阑 狼固窍聪瘪.. - -; )	for( int i = 1 ; i < m_MaxWorldID; i++ ) {		for ( HashMapGameServerGroupInfo::iterator itr = m_GameServerGroupInfos[i].begin() ; 			  itr != m_GameServerGroupInfos[i].end() ; 			  itr ++ ) {			delete itr->second;			itr->second = NULL;		}		// 捞力 秦浆甘救俊 乐绰 葛电 pair 甸阑 昏力茄促.		m_GameServerGroupInfos[i].clear();	}	SAFE_DELETE_ARRAY(m_GameServerGroupInfos);}	//----------------------------------------------------------------------// initialize GSIM//----------------------------------------------------------------------void GameServerGroupInfoManager::init ()	throw ( Error ){	__BEGIN_TRY	// just load data from GameServerGroupInfo table	load();	// just print to cout	cout << toString() << endl;	__END_CATCH}//----------------------------------------------------------------------// load data from database//----------------------------------------------------------------------void GameServerGroupInfoManager::load ()	throw ( Error ){	__BEGIN_TRY	Statement * pStmt;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result* pResult = pStmt->executeQuery(			"SELECT MAX(WorldID) FROM GameServerGroupInfo"		);		if (pResult->getRowCount() == 0)		{			throw Error("GameServerGroupInfo TABLE does not exist!");		}		pResult->next();		m_MaxWorldID = pResult->getInt(1) + 2;		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	m_GameServerGroupInfos = new HashMapGameServerGroupInfo[m_MaxWorldID];	try {		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result * pResult = pStmt->executeQuery(			"SELECT WorldID, GroupID, GroupName FROM GameServerGroupInfo"		);		while ( pResult->next() ) {			GameServerGroupInfo * pGameServerGroupInfo = new GameServerGroupInfo();			WorldID_t WorldID = pResult->getInt(1);			pGameServerGroupInfo->setWorldID( WorldID );			pGameServerGroupInfo->setGroupID( pResult->getInt(2) );			pGameServerGroupInfo->setGroupName( pResult->getString(3) );			addGameServerGroupInfo( pGameServerGroupInfo, WorldID );		}		// 鞘混 昏力!		delete pStmt;	} catch ( SQLQueryException & sqe ) {		// 鞘混 昏力!		delete pStmt;		throw Error(sqe.toString());	} catch ( Throwable & t ) {		cout << t.toString() << endl;	}	__END_CATCH}//----------------------------------------------------------------------// add info //----------------------------------------------------------------------void GameServerGroupInfoManager::addGameServerGroupInfo ( GameServerGroupInfo * pGameServerGroupInfo, WorldID_t WorldID ) 	throw ( DuplicatedException ){	__BEGIN_TRY	HashMapGameServerGroupInfo::iterator itr = m_GameServerGroupInfos[WorldID].find( pGameServerGroupInfo->getGroupID() );		if ( itr != m_GameServerGroupInfos[WorldID].end() )		throw DuplicatedException("duplicated game-server nickname");	m_GameServerGroupInfos[WorldID][ pGameServerGroupInfo->getGroupID() ] = pGameServerGroupInfo;	__END_CATCH}	//----------------------------------------------------------------------// delete info//----------------------------------------------------------------------void GameServerGroupInfoManager::deleteGameServerGroupInfo ( const ServerGroupID_t GroupID, WorldID_t WorldID ) 	throw ( NoSuchElementException ){	__BEGIN_TRY			HashMapGameServerGroupInfo::iterator itr = m_GameServerGroupInfos[WorldID].find( GroupID );		if ( itr != m_GameServerGroupInfos[WorldID].end() ) {		// GameServerGroupInfo 甫 昏力茄促.		delete itr->second;		// pair甫 昏力茄促.		m_GameServerGroupInfos[WorldID].erase( itr );	} else {		// 弊繁 霸烙辑滚牢器 按眉甫 茫阑 荐 绝阑 锭		throw NoSuchElementException();	}	__END_CATCH}	//----------------------------------------------------------------------// get GameServerGroupinfo by ServerGroupID//----------------------------------------------------------------------GameServerGroupInfo * GameServerGroupInfoManager::getGameServerGroupInfo ( const ServerGroupID_t GroupID, WorldID_t WorldID ) const	throw ( NoSuchElementException ){	__BEGIN_TRY	if( WorldID >= m_MaxWorldID ) {		// 弊繁 霸烙辑滚牢器 按眉甫 茫阑 荐 绝菌阑 锭		throw NoSuchElementException();	}			GameServerGroupInfo * pGameServerGroupInfo = NULL;	HashMapGameServerGroupInfo::const_iterator itr = m_GameServerGroupInfos[WorldID].find( GroupID );		if ( itr != m_GameServerGroupInfos[WorldID].end() ) {		pGameServerGroupInfo = itr->second;	} else {		// 弊繁 霸烙辑滚牢器 按眉甫 茫阑 荐 绝菌阑 锭		throw NoSuchElementException();	}	return pGameServerGroupInfo;	__END_CATCH}//----------------------------------------------------------------------// get debug string//----------------------------------------------------------------------string GameServerGroupInfoManager::toString () const	throw (){	__BEGIN_TRY	StringStream msg;	msg << "GameServerGroupInfoManager(\n";	for ( int i = 1; i < m_MaxWorldID ; i++ ) {		if ( m_GameServerGroupInfos[i].empty() ) {			msg << "EMPTY";		} else {			//--------------------------------------------------			// *OPTIMIZATION*			//			// for_each()甫 荤侩且 巴			//--------------------------------------------------			for ( HashMapGameServerGroupInfo::const_iterator itr = m_GameServerGroupInfos[i].begin() ; 				  itr != m_GameServerGroupInfos[i].end() ; 				  itr ++ )				msg << itr->second->toString() << '\n';		}	}	msg << ")";	return msg.toString();	__END_CATCH}// global variable definitionGameServerGroupInfoManager * g_pGameServerGroupInfoManager = NULL;

⌨️ 快捷键说明

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