gameservermanager.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 209 行

CPP
209
字号
////////////////////////////////////////////////////////////////////////// Filename    : GameServerManager.cpp// Written By  : Reiot// Description :////////////////////////////////////////////////////////////////////////#include "GameServerManager.h"#include "Properties.h"#include "Datagram.h"#include "DatagramPacket.h"#include <unistd.h>#include "DB.h"#include "Properties.h"#include "Lpackets/LGKickCharacter.h"//////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////GameServerManager::GameServerManager () 	throw ( Error ): m_pDatagramSocket(NULL){	__BEGIN_TRY	// create datagram server socket	m_pDatagramSocket = new DatagramSocket(g_pConfig->getPropertyInt("TheOneServerUDPPort") );	__END_CATCH}//////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////GameServerManager::~GameServerManager () 	throw ( Error ){	__BEGIN_TRY	SAFE_DELETE( m_pDatagramSocket );	__END_CATCH}//////////////////////////////////////////////////////////////////////// main method//////////////////////////////////////////////////////////////////////void GameServerManager::run () 	throw (Error){	try 	{		string host     = g_pConfig->getProperty("DB_HOST");		string db       = DB_DB;		string user     = DB_USER;		string password = DB_PASSWORD;		/*		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);		while ( m_bRunning ) 		{			Datagram*       pDatagram       = NULL;			DatagramPacket* pDatagramPacket = NULL;						try 			{				// 单捞磐弊伐 按眉甫 掺笼绢辰促.				pDatagram = m_pDatagramSocket->receive();				if (pDatagram!=NULL)	// 老何 exception力芭. by sigi. 2002.5.17				{					// 单捞磐弊伐 菩哦 按眉甫 掺笼绢辰促.					pDatagram->read( pDatagramPacket );					if (pDatagramPacket!=NULL)					{						// 掺笼绢辰 单捞磐弊伐 菩哦 按眉甫 角青茄促.						pDatagramPacket->execute(NULL);						// 单捞磐弊伐 菩哦 按眉甫 昏力茄促.						SAFE_DELETE(pDatagramPacket);						pDatagramPacket = NULL;					}					// 单捞磐弊伐 按眉甫 昏力茄促.					SAFE_DELETE(pDatagram);					pDatagram = NULL;				}			} 			catch ( ProtocolException & pe ) 			{				cout << "GameServerManager::run Exception Check(ProtocolException)" << endl;				cout << pe.toString() << endl;				// 辑滚埃 烹脚俊辑 橇肺配妮 俊矾啊 惯积窍搁, 				// 橇肺弊贰怪 坷幅捞芭唱 秦欧 矫档捞促.				// 老窜篮 傈磊父捞 秦寸登骨肺.. 俊矾肺 埃林茄促.				//throw Error( pe.toString() );				SAFE_DELETE(pDatagramPacket);				SAFE_DELETE(pDatagram);			} 			catch ( ConnectException & ce ) 			{				cout << "GameServerManager::run Exception Check(ConnectException)" << endl;				cout << ce.toString() << endl;				// 栏澜.. 赣瘤 捞扒..				// 老窜 俊矾寸..				//throw Error( ce.toString() );				SAFE_DELETE(pDatagramPacket);				SAFE_DELETE(pDatagram);			}			catch ( Throwable & t )			{				cout << "GameServerManager::run Exception Check(ConnectException)" << endl;				cout << t.toString() << endl;				SAFE_DELETE(pDatagramPacket);				SAFE_DELETE(pDatagram);			}			usleep(100);		}		cout << "GameServerManager thread exiting... " << endl;		//::exit(1);	} 	catch ( Throwable & t ) 	{		cout << "GameServerManager thread exiting... : " << t.toString() << endl;	}}//////////////////////////////////////////////////////////////////////// send datagram to datagram-socket//////////////////////////////////////////////////////////////////////void GameServerManager::sendDatagram ( Datagram * pDatagram )	throw ( ConnectException , Error ){	__BEGIN_TRY	try 	{		m_pDatagramSocket->send( pDatagram );	} 	catch ( ConnectException & t ) 	{		cout << "GameServerManager::sendDatagram Exception Check!!" << endl;		cout << t.toString() << endl;		throw ConnectException( "GameServerManager::sendDatagram 惑困肺 带柳促");	}	__END_CATCH}//////////////////////////////////////////////////////////////////////// send datagram-packet to datagram-socket//////////////////////////////////////////////////////////////////////void GameServerManager::sendPacket ( string host , uint port , DatagramPacket * pPacket )	throw ( ConnectException , Error ){	__BEGIN_TRY	__BEGIN_DEBUG	try {//	try //	{		// 单捞磐弊伐 按眉甫 窍唱 滴绊, 傈价且 peer 狼 龋胶飘客 器飘甫 瘤沥茄促.		Datagram datagram;		datagram.setHost(host);		datagram.setPort(port);		// 单捞磐弊伐 菩哦阑 单捞磐弊伐俊 笼绢持绰促.		datagram.write(pPacket);		// 单捞磐弊伐 家南阑 烹秦辑 单捞磐弊伐阑 傈价茄促.		m_pDatagramSocket->send( &datagram );//	}//	catch ( ConnectException & t ) //	{//		cout << "GameServerManager::sendDatagram Exception Check!!" << endl;//		cout << t.toString() << endl;//		throw ConnectException( "GameServerManager::sendDatagram 惑困肺 带柳促");//	}	} catch ( Throwable & t ) {		cout << "====================================================================" << endl;		cout << t.toString() << endl;		cout << "====================================================================" << endl;	}	__END_DEBUG	__END_CATCH}// global variable definitionGameServerManager * g_pGameServerManager = NULL;

⌨️ 快捷键说明

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