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

📄 loginservermanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
////////////////////////////////////////////////////////////////////////// Filename    : LoginServerManager.cpp// Written By  : Reiot// Description :////////////////////////////////////////////////////////////////////////// include files#include "LoginServerManager.h"#include "Properties.h"#include "LogClient.h"#include "Assert.h"#include "ThreadManager.h"#include "ThreadPool.h"#include "Datagram.h"#include "DatagramPacket.h"#include <unistd.h>#include "DB.h"#include "Timeval.h"//////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////LoginServerManager::LoginServerManager () 	throw (Error): m_pDatagramSocket(NULL){	__BEGIN_TRY	m_Mutex.setName("LoginServerManager");	// create datagram server socket	m_pDatagramSocket = new DatagramSocket(g_pConfig->getPropertyInt("GameServerUDPPort"));	__END_CATCH}//////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////LoginServerManager::~LoginServerManager () 	throw (Error){	__BEGIN_TRY	SAFE_DELETE(m_pDatagramSocket);	__END_CATCH}//////////////////////////////////////////////////////////////////////// stop thread//////////////////////////////////////////////////////////////////////void LoginServerManager::stop () 	throw (Error){	__BEGIN_TRY	throw UnsupportedError();	__END_CATCH}//////////////////////////////////////////////////////////////////////// main method//////////////////////////////////////////////////////////////////////void LoginServerManager::run () 	throw (){	try 	{		string host     = g_pConfig->getProperty("DB_HOST");		string db       = g_pConfig->getProperty("DB_DB");		string user     = g_pConfig->getProperty("DB_USER");		string password = g_pConfig->getProperty("DB_PASSWORD");		Connection* pConnection = new Connection(host, db, user, password);		g_pDatabaseManager->addConnection((int)Thread::self(), pConnection);		cout << "************************************************************************" << endl;		cout << "************************************************************************" << endl;		cout << "************************************************************************" << endl;		cout << "************************************************************************" << endl;	    cout << "OPEN LOGIN DB" << endl;		cout << "************************************************************************" << endl;		cout << "************************************************************************" << endl;		cout << "************************************************************************" << endl;		Timeval dummyQueryTime;		getCurrentTime( dummyQueryTime );		while (true) 		{	        usleep(100);			Datagram*       pDatagram       = NULL;			DatagramPacket* pDatagramPacket = NULL;			try 			{				// 单捞磐弊伐 按眉甫 掺笼绢辰促.				pDatagram = m_pDatagramSocket->receive();				if (pDatagram!=NULL)	// 老何exception力芭. by sigi. 2002.5.17				{					//cout << "[Datagram] " << pDatagram->getHost() << ":" << pDatagram->getPort() << endl;					pDatagram->read(pDatagramPacket);					if (pDatagramPacket!=NULL)					{						//cout << "[DatagramPacket] " << pDatagram->getHost() << ":" << pDatagram->getPort() << endl;						// 掺笼绢辰 单捞磐弊伐 菩哦 按眉甫 角青茄促.						__ENTER_CRITICAL_SECTION(m_Mutex)						pDatagramPacket->execute(NULL);						__LEAVE_CRITICAL_SECTION(m_Mutex)						// 单捞磐弊伐 菩哦 按眉甫 昏力茄促.						SAFE_DELETE(pDatagramPacket);					}								// 单捞磐弊伐 按眉甫 昏力茄促.					SAFE_DELETE(pDatagram);				}			} 			catch (ProtocolException & pe) 			{				cerr << "----------------------------------------------------------------------" << endl;				cerr << "GameServerManager::run Exception Check(ProtocolException)" << endl;				cerr << pe.toString() << endl;				cerr << "----------------------------------------------------------------------" << endl;				SAFE_DELETE(pDatagramPacket);				SAFE_DELETE(pDatagram);				// 辑滚埃 烹脚俊辑 橇肺配妮 俊矾啊 惯积窍搁, 				// 橇肺弊贰怪 坷幅捞芭唱 秦欧 矫档捞促.				// 老窜篮 傈磊父捞 秦寸登骨肺.. 俊矾肺 埃林茄促.				//throw Error(pe.toString());				filelog("LOGINSERVERMANAGER.log", "LoginServerManager::run() 1 : %s", pe.toString().c_str());			} 			catch (ConnectException & ce) 			{				cerr << "----------------------------------------------------------------------" << endl;				cerr << "GameServerManager::run Exception Check(ConnectException)" << endl;				cerr << ce.toString() << endl;				cerr << "----------------------------------------------------------------------" << endl;				SAFE_DELETE(pDatagramPacket);				SAFE_DELETE(pDatagram);				// 栏澜.. 赣瘤 捞扒..				// 老窜 俊矾寸..				//throw Error(ce.toString());				filelog("LOGINSERVERMANAGER.log", "LoginServerManager::run() 2 : %s", ce.toString().c_str());			} 			catch (Throwable & t) 			{				cerr << "----------------------------------------------------------------------" << endl;				cerr << "GameServerManager::run Exception Check(Throwable)" << endl;				cerr << t.toString() << endl;				cerr << "----------------------------------------------------------------------" << endl;				SAFE_DELETE(pDatagramPacket);				SAFE_DELETE(pDatagram);				filelog("LOGINSERVERMANAGER.log", "LoginServerManager::run() 3 : %s", t.toString().c_str());			}			usleep(100);			Timeval currentTime;			getCurrentTime(currentTime);			if (dummyQueryTime < currentTime)			{				g_pDatabaseManager->executeDummyQuery( pConnection );				// 1矫埃 ~ 1矫埃 30盒 荤捞俊辑 dummy query 矫埃阑 汲沥茄促.				// timeout捞 登瘤 臼霸 窍扁 困秦辑捞促.				dummyQueryTime.tv_sec += (60+rand()%30) * 60;			}		}	} 	catch (Throwable & t) 	{		filelog("LOGINSERVERMANAGER.log", "LoginServerManager::run() 4 : %s", t.toString().c_str());		cerr << t.toString() << endl;	}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void LoginServerManager::sendDatagram (Datagram* pDatagram)	throw (ProtocolException , Error){	__BEGIN_TRY    m_pDatagramSocket->send(pDatagram);	__END_CATCH}//////////////////////////////////////////////////////////////////////// send datagram packet to login server//////////////////////////////////////////////////////////////////////void LoginServerManager::sendPacket (const string& host , uint port , DatagramPacket* pPacket)	throw (ProtocolException , Error){	__BEGIN_TRY	__BEGIN_DEBUG	try 	{		// 单捞磐弊伐 按眉甫 窍唱 滴绊, 傈价且 peer 狼 龋胶飘客 器飘甫 瘤沥茄促.		Datagram datagram;		datagram.setHost(host);		datagram.setPort(port);		// 单捞磐弊伐 菩哦阑 单捞磐弊伐俊 笼绢持绰促.		datagram.write(pPacket);		// 单捞磐弊伐 家南阑 烹秦辑 单捞磐弊伐阑 傈价茄促.		m_pDatagramSocket->send(&datagram);	} 	catch (Throwable & t) 	{        //cerr << "====================================================================" << endl;		//cerr << t.toString() << endl;		//cerr << "====================================================================" << endl;	}	__END_DEBUG	__END_CATCH}// global variable definitionLoginServerManager* g_pLoginServerManager = NULL;

⌨️ 快捷键说明

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