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

📄 clientmanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : ClientManager.cc// Written By  : reiot@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#include "ClientManager.h"#include "Socket.h"#include "ThreadManager.h"#include "Assert.h"#include "ThreadPool.h"#include "ServerSocket.h"#include "Properties.h"#include "IncomingPlayerManager.h"#include "ZonePlayerManager.h"#include "ZoneGroupManager.h"#include "VariableManager.h"#include "VSDateTime.h"#include "DB.h"#include "UserGateway.h"#include "WarSystem.h"#include "ParkingCenter.h"#include "ctf/FlagManager.h"#include "LocalIP.h"#include <list>#include "TOpackets/GTOAcknowledgement.h"#include "LoginServerManager.h"ClientManager* g_pClientManager = NULL;//////////////////////////////////////////////////////////////////////////////// constructor// 窍困 概聪历 按眉甫 积己茄促.//////////////////////////////////////////////////////////////////////////////ClientManager::ClientManager ()	throw (Error){	__BEGIN_TRY	// create incoming player manager	g_pIncomingPlayerManager = new IncomingPlayerManager();	Assert(g_pIncomingPlayerManager != NULL);	// 促澜俊 ZoneGroup阑 Balancing且 矫埃阑 瘤沥茄促.	getCurrentTime( m_BalanceZoneGroupTime );	m_BalanceZoneGroupTime.tv_sec += 5*60;//g_pVariableManager->getZoneGroupBalancingMinute()*60;	m_bForceZoneGroupBalancing = false;	m_bDefaultZoneGroupBalancing = false;	m_Mutex.setName("ClientManager");	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// destructor// 窍困 概聪历 按眉甫 昏力茄促.//////////////////////////////////////////////////////////////////////////////ClientManager::~ClientManager ()	throw (Error){	__BEGIN_TRY	// Delete incoming player manager	SAFE_DELETE(g_pIncomingPlayerManager);	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 窍困 概聪历 按眉甫 檬扁拳茄促.//////////////////////////////////////////////////////////////////////////////void ClientManager::init ()	 throw (Error){	__BEGIN_TRY	// initialize incoming player manager	g_pIncomingPlayerManager->init();		__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void ClientManager::stop ()	 throw (Error){	__BEGIN_TRY	// 矫弊澄规侥栏肺 唱吝俊 备泅窍档废 茄促.	throw UnsupportedError();		__END_CATCH}//////////////////////////////////////////////////////////////////////////////// accept new connection//////////////////////////////////////////////////////////////////////////////void ClientManager::run ()	 throw (Error){	__BEGIN_TRY	__BEGIN_DEBUG	//ZoneGroup* pZoneGroup = g_pZoneGroupManager->getZoneGroup(1);	//ZonePlayerManager* pZonePlayerManager = pZoneGroup->getZonePlayerManager();	//VSTime vstime;	Timeval dummyQueryTime;	getCurrentTime( dummyQueryTime );#ifdef __CHINA_SERVER__	Timeval theOneAckTime;	getCurrentTime( theOneAckTime );	theOneAckTime.tv_sec += 198 * 60;//	theOneAckTime.tv_sec += 1 * 60;#endif	Timeval userGatewayTime;	getCurrentTime(userGatewayTime);	userGatewayTime.tv_sec += 10;	while (true) 	{	    //ofstream file("ClientManager.txt", ios::out | ios::app);		//StringStream msg;		// CPU 痢蜡啦阑 临捞扁 困秦 0.001檬 悼救 疆促.		try 		{			// I/O Multiplexing			usleep(100);			//g_pIncomingPlayerManager->copyPlayers();			// game global time setting			setCurrentTime();			//vstime.start();			g_pIncomingPlayerManager->select();			//file << "IncomingPlayerManagerSelect:" << vstime.elapsed() << endl;			//vstime.restart();			g_pIncomingPlayerManager->processExceptions();			//file << "IncomingPlayerManagerException:" << vstime.elapsed() << endl;			//vstime.restart();			g_pIncomingPlayerManager->processInputs();			//file << "IncomingPlayerManagerInput:" << vstime.elapsed() << endl;			//vstime.restart();			g_pIncomingPlayerManager->processOutputs();			//file << "IncomingPlayerManagerOutput:" << vstime.elapsed() << endl;		} 		catch (TimeoutException&) 		{			// select()俊辑 timeout捞 惯积窍搁, 捞饶俊 且 老捞 窍唱档 绝促.			// 官肺 促澜 风橇肺 逞绢啊搁 登摆促..		}		catch (Error&)		{			throw;		}		catch (Throwable& t)		{			filelog("clientManagerBug.txt", "%s", t.toString().c_str());		}		//vstime.start();		g_pIncomingPlayerManager->processCommands();		//file << "IncomingPlayerManagerCommands:" << vstime.elapsed() << endl;		/*		try 		{			pZonePlayerManager->select();			pZonePlayerManager->processExceptions();			pZonePlayerManager->processInputs();			pZonePlayerManager->processOutputs();		}		catch (TimeoutException)		{		}		pZonePlayerManager->processCommands();		pZoneGroup->heartbeat();		*/		//usleep(100);		// 泅犁 矫埃阑 螟沥秦辑, 30檬付促 ConnectionInfoManager 俊辑		// expire 等 ConnectionInfo 甫 昏力茄促.		g_pIncomingPlayerManager->heartbeat();		//vstime.start();		g_pConnectionInfoManager->heartbeat();		//file << "ConnectionInfoManagerHeartbeat:" << vstime.elapsed() << endl;		//file.close();		Timeval currentTime;		getCurrentTime(currentTime);		if (dummyQueryTime < currentTime)		{			g_pDatabaseManager->executeDummyQuery( g_pDatabaseManager->getDistConnection("PLAYERDB") );			// 1矫埃 ~ 1矫埃 30盒 荤捞俊辑 dummy query 矫埃阑 汲沥茄促.			// timeout捞 登瘤 臼霸 窍扁 困秦辑捞促.			dummyQueryTime.tv_sec += (60+rand()%30) * 60;		}#ifdef __CHINA_SERVER__		if ( theOneAckTime < currentTime )		{			list<string> ips = getLocalIP();			list<string>::iterator itr = ips.begin();			list<string>::iterator endItr = ips.end();			for ( ; itr != endItr ; ++itr )			{				string& myIP = *itr;//				cout << "My IP Address is : " << myIP << endl;				GTOAcknowledgement GTO;				GTO.setServerIP( myIP );				GTO.setServerType( 0 );				g_pLoginServerManager->sendPacket( "61.78.53.244", 9981, &GTO );			}			theOneAckTime.tv_sec += ( 180 + rand()%300 ) * 60;		}#endif		if (m_BalanceZoneGroupTime < currentTime)		{			g_pZoneGroupManager->balanceZoneGroup(m_bForceZoneGroupBalancing, m_bDefaultZoneGroupBalancing);			m_BalanceZoneGroupTime.tv_sec = currentTime.tv_sec + g_pVariableManager->getZoneGroupBalancingMinute()*60;			m_bForceZoneGroupBalancing = false;			m_bDefaultZoneGroupBalancing = false;		}		// by sigi. 2002.12.30		if (userGatewayTime < currentTime)		{			if (UserGateway::getInstance()->getTotalInfo() > 0)			{				int ZonePlayerNum 		= g_pZoneGroupManager->getPlayerNum();				int IncomingPlayerNum 	= g_pIncomingPlayerManager->size();				int TotalPlayerNum 		= ZonePlayerNum + IncomingPlayerNum;				filelog("userGateway.log", "Users(%d+%d=%d), %s", 											ZonePlayerNum,											IncomingPlayerNum,											TotalPlayerNum,											UserGateway::getInstance()->toString().c_str());				UserGateway::getInstance()->clear();			}			// 10檬 饶 促矫 眉农			userGatewayTime.tv_sec += 10;		}		// by sigi. 2002.9.26		if (!m_EventManager.isEmpty())		{			try {				g_pZoneGroupManager->lockZoneGroups();				__ENTER_CRITICAL_SECTION(m_Mutex)				m_EventManager.heartbeat();							__LEAVE_CRITICAL_SECTION(m_Mutex)				g_pZoneGroupManager->unlockZoneGroups();			} catch (Throwable& t) {				filelog("eventManagerBug.txt", "ClientManager::EventManager::heartbeat - %s", t.toString().c_str());				g_pZoneGroupManager->unlockZoneGroups();			}		}		// 傈里~		if (g_pVariableManager->isWarActive())		{			g_pWarSystem->heartbeat();		}		if (g_pVariableManager->isActiveFlagWar())		{			g_pFlagManager->heartbeat();		}		// 瘤况霖促.		g_pParkingCenter->heartbeat();		// CPU 痢蜡啦阑 临捞扁 困秦 0.001檬 悼救 疆促.	} //while		__END_DEBUG	__END_CATCH}void    ClientManager::setBalanceZoneGroup(int afterMinutes, bool bForce, bool bDefault){	getCurrentTime(m_BalanceZoneGroupTime);	m_BalanceZoneGroupTime.tv_sec += afterMinutes*60;	m_bForceZoneGroupBalancing = bForce;	m_bDefaultZoneGroupBalancing = bDefault;}//--------------------------------------------------------------------------------////--------------------------------------------------------------------------------void ClientManager::addEvent (Event* pEvent)	throw (Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	addEvent_LOCKED( pEvent );	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}//--------------------------------------------------------------------------------////--------------------------------------------------------------------------------void ClientManager::addEvent_LOCKED (Event* pEvent)	throw (Error){	__BEGIN_TRY	// 捞固 乐绰吧 瘤款促.	m_EventManager.deleteEvent(pEvent->getEventClass());	m_EventManager.addEvent(pEvent);	__END_CATCH}//--------------------------------------------------------------------------------////--------------------------------------------------------------------------------bool ClientManager::deleteEvent (Event::EventClass EClass)	throw (Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	m_EventManager.deleteEvent(EClass);	__LEAVE_CRITICAL_SECTION(m_Mutex)	return true;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// get debug string//////////////////////////////////////////////////////////////////////////////string ClientManager::toString () const	   throw (Error){	__BEGIN_TRY	StringStream msg;	msg << "ClientManager()";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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