📄 loginservermanager.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 + -