reconnectlogininfomanager.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 207 行
CPP
207 行
//----------------------------------------------------------------------//// Filename : ReconnectLoginInfoManager.cpp// Written By : Reiot// Description :////----------------------------------------------------------------------// include files#include "ReconnectLoginInfoManager.h"#include "StringStream.h"#include "Assert.h"//----------------------------------------------------------------------// constructor//----------------------------------------------------------------------ReconnectLoginInfoManager::ReconnectLoginInfoManager () throw (){ __BEGIN_TRY // 促澜 heartbeat 矫埃阑 汲沥茄促. getCurrentTime(m_NextHeartbeat); m_NextHeartbeat.tv_sec += 5; __END_CATCH} //----------------------------------------------------------------------// destructor//----------------------------------------------------------------------ReconnectLoginInfoManager::~ReconnectLoginInfoManager () throw (){ __BEGIN_TRY // 葛电 ReconnectLoginInfo 甫 昏力秦具 茄促. for ( HashMapReconnectLoginInfo::iterator itr = m_ReconnectLoginInfos.begin() ; itr != m_ReconnectLoginInfos.end() ; itr ++ ) { delete itr->second; itr->second = NULL; } // 秦浆甘救俊 乐绰 葛电 pair 甸阑 昏力茄促. m_ReconnectLoginInfos.clear(); __END_CATCH} //----------------------------------------------------------------------// add connection info to connection info manager//----------------------------------------------------------------------void ReconnectLoginInfoManager::addReconnectLoginInfo ( ReconnectLoginInfo * pReconnectLoginInfo ) throw ( DuplicatedException , Error ){ __BEGIN_TRY Assert( pReconnectLoginInfo != NULL ); HashMapReconnectLoginInfo::iterator itr = m_ReconnectLoginInfos.find( pReconnectLoginInfo->getClientIP() ); if ( itr != m_ReconnectLoginInfos.end() ) // 度鞍篮 酒捞叼啊 捞固 粮犁茄促绰 家府促. - -; throw DuplicatedException("duplicated connection info id"); m_ReconnectLoginInfos[ pReconnectLoginInfo->getClientIP() ] = pReconnectLoginInfo; __END_CATCH} //----------------------------------------------------------------------// delete connection info from connection info manager//----------------------------------------------------------------------void ReconnectLoginInfoManager::deleteReconnectLoginInfo ( string clientIP ) throw ( NoSuchElementException , Error ){ __BEGIN_TRY HashMapReconnectLoginInfo::iterator itr = m_ReconnectLoginInfos.find( clientIP ); if ( itr != m_ReconnectLoginInfos.end() ) { // ReconnectLoginInfo 甫 昏力茄促. delete itr->second; // pair甫 昏力茄促. m_ReconnectLoginInfos.erase( itr ); } else { // not found throw NoSuchElementException( clientIP ); } __END_CATCH} //----------------------------------------------------------------------// get connection info from connection info manager//----------------------------------------------------------------------ReconnectLoginInfo * ReconnectLoginInfoManager::getReconnectLoginInfo ( string clientIP ) throw ( NoSuchElementException , Error ){ __BEGIN_TRY ReconnectLoginInfo * pReconnectLoginInfo = NULL; HashMapReconnectLoginInfo::iterator itr = m_ReconnectLoginInfos.find( clientIP ); if ( itr != m_ReconnectLoginInfos.end() ) { pReconnectLoginInfo = itr->second; } else { // not found throw NoSuchElementException( clientIP ); } return pReconnectLoginInfo; __END_CATCH}//----------------------------------------------------------------------// expire 等 ReconnectLogin Info 按眉甫 昏力茄促.//----------------------------------------------------------------------void ReconnectLoginInfoManager::heartbeat () throw ( Error ){ __BEGIN_TRY Timeval currentTime; getCurrentTime(currentTime); if ( m_NextHeartbeat < currentTime ) { m_NextHeartbeat = currentTime; m_NextHeartbeat.tv_sec += 5; HashMapReconnectLoginInfo::iterator before = m_ReconnectLoginInfos.end() ; HashMapReconnectLoginInfo::iterator current = m_ReconnectLoginInfos.begin() ; while ( current != m_ReconnectLoginInfos.end() ) { if ( current->second->getExpireTime() < currentTime ) { ReconnectLoginInfo * pReconnectLoginInfo = current->second; m_ReconnectLoginInfos.erase(current); delete pReconnectLoginInfo; if ( before == m_ReconnectLoginInfos.end() ) // case of first { current = m_ReconnectLoginInfos.begin(); } else // case of not first { current = before; current ++; } } else { before = current ++ ; } } } __END_CATCH}//----------------------------------------------------------------------// get debug string//----------------------------------------------------------------------string ReconnectLoginInfoManager::toString () const throw (){ StringStream msg; msg << "ReconnectLoginInfoManager("; for (hash_map<string, ReconnectLoginInfo*>::const_iterator itr = m_ReconnectLoginInfos.begin() ; itr != m_ReconnectLoginInfos.end() ;itr++) { Assert(itr->second != NULL); msg << itr->second->toString(); } msg << ")"; return msg.toString();}// global variable definitionReconnectLoginInfoManager * g_pReconnectLoginInfoManager = NULL;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?