userinfomanager.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 248 行

CPP
248
字号
//----------------------------------------------------------------------//// Filename    : UserInfoManager.cpp// Written By  : Reiot// Description :////----------------------------------------------------------------------// include files#include "UserInfoManager.h"#include "database/DatabaseManager.h"#include "database/Connection.h"#include "database/Statement.h"#include "database/Result.h"#include "database/DB.h"//----------------------------------------------------------------------// constructor//----------------------------------------------------------------------UserInfoManager::UserInfoManager () 	throw (){}	//----------------------------------------------------------------------// destructor//----------------------------------------------------------------------UserInfoManager::~UserInfoManager () 	throw (){	// hashmap 救狼 阿 pair 狼 second, 溜 UserInfo 按眉父阑 昏力窍绊	// pair 磊眉绰 弊措肺 敌促. (UserInfo啊 赛俊 积己登绢 乐促绰 巴俊	// 蜡狼窍扼. 溜 鞘混昏力甫 秦具 茄促. 窍变, ZGIM捞 destruct 等促绰 巴篮	// 肺弊牢 辑滚啊 妓促款等促绰 巴阑 狼固窍聪瘪.. - -; )	for( int i = 1; i < m_MaxWorldID; i++ ) {		for ( HashMapUserInfo::iterator itr = m_UserInfos[i].begin() ; 			  itr != m_UserInfos[i].end() ; 			  itr ++ ) {			delete itr->second;			itr->second = NULL;		}		// 捞力 秦浆甘救俊 乐绰 葛电 pair 甸阑 昏力茄促.		m_UserInfos[i].clear();	}	delete [] m_UserInfos;}	//----------------------------------------------------------------------// initialize GSIM//----------------------------------------------------------------------void UserInfoManager::init ()	throw ( Error ){	__BEGIN_TRY	load();	// just print to cout	cout << toString() << endl;	__END_CATCH}//----------------------------------------------------------------------// load data from database//----------------------------------------------------------------------void UserInfoManager::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_UserInfos= new HashMapUserInfo[m_MaxWorldID];	try {		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result * pResult = pStmt->executeQuery(			"SELECT WorldID, GroupID FROM GameServerGroupInfo"		);		while ( pResult->next() ) {			UserInfo * pUserInfo = new UserInfo();			WorldID_t WorldID = pResult->getInt(1);			pUserInfo->setWorldID( WorldID );			pUserInfo->setServerGroupID( pResult->getInt(2) );			pUserInfo->setUserNum( 0 );			addUserInfo( pUserInfo );		}	} catch ( SQLQueryException & sqe ) {		// 鞘混 昏力!		delete pStmt;		throw Error(sqe.toString());	}	// 鞘混 昏力!	delete pStmt;	__END_CATCH}//----------------------------------------------------------------------// add info //----------------------------------------------------------------------void UserInfoManager::addUserInfo ( UserInfo * pUserInfo ) 	throw ( DuplicatedException ){	__BEGIN_TRY	HashMapUserInfo::iterator itr = m_UserInfos[pUserInfo->getWorldID()].find( pUserInfo->getServerGroupID() );		if ( itr != m_UserInfos[pUserInfo->getWorldID()].end() )		throw DuplicatedException("duplicated zone id");	m_UserInfos[pUserInfo->getWorldID()][ pUserInfo->getServerGroupID() ] = pUserInfo;	__END_CATCH}	//----------------------------------------------------------------------// delete info//----------------------------------------------------------------------void UserInfoManager::deleteUserInfo ( ZoneGroupID_t ServerGroupID, WorldID_t WorldID )	throw ( NoSuchElementException ){	__BEGIN_TRY			HashMapUserInfo::iterator itr = m_UserInfos[WorldID].find( ServerGroupID );		if ( itr != m_UserInfos[WorldID].end() ) {		// UserInfo 甫 昏力茄促.		delete itr->second;		// pair甫 昏力茄促.		m_UserInfos[WorldID].erase( itr );	} else { // not found		StringStream msg;		msg << "ServerGroupID: " << ServerGroupID;		throw NoSuchElementException(msg.toString());	}	__END_CATCH}	//----------------------------------------------------------------------// get info//----------------------------------------------------------------------UserInfo * UserInfoManager::getUserInfo ( ZoneGroupID_t ServerGroupID, WorldID_t WorldID ) const	throw ( NoSuchElementException ){	__BEGIN_TRY			UserInfo * pUserInfo = NULL;	HashMapUserInfo::const_iterator itr = m_UserInfos[WorldID].find( ServerGroupID );		if ( itr != m_UserInfos[WorldID].end() ) {		pUserInfo = itr->second;	} else { // not found		StringStream msg;		msg << "ServerGroupID : " << ServerGroupID;		throw NoSuchElementException( msg.toString() );	}	return pUserInfo;	__END_CATCH}//----------------------------------------------------------------------// get debug string//----------------------------------------------------------------------string UserInfoManager::toString () const	throw (){	__BEGIN_TRY	StringStream msg;	msg << "UserInfoManager(";	for( int i = 1; i < m_MaxWorldID; i++ ) {		if ( m_UserInfos[i].empty() ) {			msg << "EMPTY";		} else {			//--------------------------------------------------			// *OPTIMIZATION*			//			// for_each()甫 荤侩且 巴			//--------------------------------------------------			for ( HashMapUserInfo::const_iterator itr = m_UserInfos[i].begin() ; 				  itr != m_UserInfos[i].end() ; 				  itr ++ )				msg << itr->second->toString();		}	}	msg << ")";	return msg.toString();	__END_CATCH}// global variable definitionUserInfoManager * g_pUserInfoManager = NULL;

⌨️ 快捷键说明

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