📄 gameservergroupinfomanager.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 + -