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 + -
显示快捷键?