📄 dbproxyserver.cpp
字号:
#include "stdafx.h"
#include <IOCPServer.h>
#include <NetworkObject.h>
#include <conio.h>
#include "DBProxyServer.h"
#include "DatabaseProxyQuery.h"
#include "QueryPoolFactory.h"
#include <ISolarConsole_Define.h>
#include <ISolarConsole.h>
#include "ServerSessionFactory.h"
#include "ServerSessionManager.h"
#include "ServerSession.h"
#include "DBUserManager.h"
#include "DBUSer.h"
#include "DBSerialGenerator.h"
#include "PacketHandler.h"
#include <SolarDatabaseDefine.h>
#include <Version.h>
#include <ServerBuildVersion.h>
#include <ServerGlobal.h>
extern ISolarConsole * g_pIConsole;
//=================================================================================================
// 妮归窃荐
//=================================================================================================
NetworkObject* CreateAcceptedObject();
VOID DestroyAcceptedObject( NetworkObject *pNetworkObject );
VOID DestroyConnectedObject( NetworkObject *pNetworkObject );
void CallBackCommand( char * szMessage );
void CallBackMessage1( char * szMessage );
void CallBackQueryResult1( DWORD dwIndex, QueryResult * pData );
DBProxyServer g_DBProxyServer;
DBProxyServer::DBProxyServer() :
m_eShutdownState ( RUNNING )
{
m_pIOCPServer = NULL;
m_pDBSerialGenerator = NULL;
SetServerGUID( GAME_DBPROXY );
}
DBProxyServer::~DBProxyServer()
{
if( m_pIOCPServer ) delete m_pIOCPServer;
}
//-------------------------------------------------------------------------------------------------
// m_pIOCPServer->Shutdown();阑 沁阑 版快
// 促澜 平阑 update窍瘤 臼栏搁 DestroyAcceptObject()妮归捞 坷瘤 臼绰促.
// 蝶扼辑 session manager俊 乐绰 serverSession甸阑 pool肺 流立 馆券窍绰 累诀阑 眠啊 沁促!
//-------------------------------------------------------------------------------------------------
VOID DBProxyServer::Release()
{
if( m_pDBSerialGenerator )
{
delete m_pDBSerialGenerator;
m_pDBSerialGenerator = NULL;
}
m_DB.Release();
m_pIOCPServer->Shutdown();
g_DBUserManager.Release();
ServerSessionManager::Instance()->Release( ServerSessionFactory::Instance() ); ServerSessionManager::DestroyInstance();
ServerSessionFactory::Instance()->Release(); ServerSessionFactory::DestroyInstance();
QueryPoolFactory::Instance()->Release(); QueryPoolFactory::DestroyInstance();
PacketHandler::DestroyInstance();
if( m_pFileParser )
{
delete m_pFileParser;
m_pFileParser = NULL;
}
// 霸烙肺弊
// SAFE_DELETE(g_pSunLog);
}
BOOL DBProxyServer::Init()
{
//-------------------------------------------------------------------------------------------------
// INI 沥焊 肺爹
//-------------------------------------------------------------------------------------------------
DISPMSG( "Parsing \"SUNServer.ini\"..." );
m_pFileParser = new CFileParser;
if( !m_pFileParser->ParseInitFile("SUNServer.ini") )
{
return FALSE;
}
DISPMSG( "Parsing OK \n" );
QueryPoolFactory::Instance()->Init();
g_DBUserManager.Init( 1000 );
DISPMSG( "============== DataBaseProxy Start ================= \n" );
ServerSessionFactory::Instance()->Init();
ServerSessionManager::Instance()->Init();
m_pDBSerialGenerator = new DBSerialGenerator;
//-------------------------------------------------------------------------------------------------
// Tile俊 沥焊扁废
//-------------------------------------------------------------------------------------------------
#ifdef _DEBUG
DisplayDebugInfo( GetServerType(), TRUE, C2S_HIGH_VERSION_NO, C2S_MIDDLE_VERSION_NO, C2S_LOW_VERSION_NO, SERVER_RELEASE_BUILD_NO,0,0 );
#else
DisplayDebugInfo( GetServerType(), FALSE, C2S_HIGH_VERSION_NO, C2S_MIDDLE_VERSION_NO, C2S_LOW_VERSION_NO, SERVER_RELEASE_BUILD_NO,0,0 );
#endif
// 霸烙肺弊
//_GAMELOGINIT(GameLogDBP)
// 叼厚 檬扁拳
SolarDatabaseDesc db_desc;
//db_desc.DataBaseModuleType = DBCInterfaceType_OLEDB;
db_desc.DataBaseModuleType = DBCInterfaceType_ODBC;
db_desc.dwQueryPoolSize = 2000;
db_desc.wQueryProcessorNum = 1;
// 瞒饶 ODBC技泼俊辑 沥焊甫 佬绢啊扁 锭巩俊 鞘夸绝绰 沥焊烙!!
if( 0 != strcmp(m_pFileParser->GetServerEnv()->pszSQLServerIP, "") )
db_desc.pszDatabaseIP = m_pFileParser->GetServerEnv()->pszSQLServerIP;
else
db_desc.pszDatabaseIP = "10.11.3.6";
db_desc.pszDatabaseName = "SUNOnline";
db_desc.pszUserName = "SunDevAdmin";
db_desc.pszUserPassword = "Tjs123!@#";
db_desc.fnErrorMessage = CallBackMessage1;
db_desc.fnQueryResult = CallBackQueryResult1;
if( !m_DB.Initialize( db_desc ) )
{
ASSERT ( !"皋牢 叼厚 檬扁拳 角菩" );
return FALSE;
}
SERVER_ENV * pServerEnv = m_pFileParser->GetServerEnv();
// IO 牢胶畔胶 积己
/*
IOHANDLER_DESC desc;
desc.dwIoHandlerKey = IOHANDLER_SERVER_IDX;
desc.dwMaxAcceptSession = 100;
desc.dwMaxConnectSession = 2;
desc.dwSendBufferSize = 60000;
desc.dwRecvBufferSize = 60000;
desc.dwTimeOut = 0;
desc.dwNumberOfAcceptThreads = 1;
desc.dwNumberOfIoThreads = 1;
desc.dwNumberOfConnectThreads = 1;
desc.dwMaxPacketSize = 4096;
desc.fnCreateAcceptedObject = CreateAcceptedObject;
desc.fnDestroyAcceptedObject = DestroyAcceptedObject;
desc.fnDestroyConnectedObject = DestroyConnectedObject;
*/
IOHANDLER_DESC desc;
desc.dwIoHandlerKey = IOHANDLER_SERVER_IDX;
desc.dwMaxAcceptSession = pServerEnv->ServerIoHandler.dwMaxAcceptSession;
desc.dwMaxConnectSession = pServerEnv->ServerIoHandler.dwMaxConnectSession;
desc.dwSendBufferSize = pServerEnv->ServerIoHandler.dwSendBufferSize;
desc.dwRecvBufferSize = pServerEnv->ServerIoHandler.dwRecvBufferSize;
desc.dwTimeOut = pServerEnv->ServerIoHandler.dwTimeOut;
desc.dwNumberOfAcceptThreads = pServerEnv->ServerIoHandler.dwNumberOfAcceptThreads;
desc.dwNumberOfIoThreads = pServerEnv->ServerIoHandler.dwNumberOfIoThreads;
desc.dwNumberOfConnectThreads = pServerEnv->ServerIoHandler.dwNumberOfConnectThreads;
desc.dwMaxPacketSize = pServerEnv->ServerIoHandler.dwMaxPacketSize;
desc.fnCreateAcceptedObject = CreateAcceptedObject;
desc.fnDestroyAcceptedObject = DestroyAcceptedObject;
desc.fnDestroyConnectedObject = DestroyConnectedObject;
// 辑滚 檬扁拳(I/O 勤甸矾啊 2俺 捞惑老 版快 desc甫 硅凯肺 荤侩且 巴)
m_pIOCPServer = new IOCPServer;
if( !m_pIOCPServer->Init( &desc, 1 ) )
return FALSE;
// SUNLOG 檬扁拳
g_pSunLog = new CSunLog;
if(g_pSunLog->Init(pServerEnv->bySunLogOption, pServerEnv->bySunLogfileLevel, pServerEnv->pszSunLogfilePath, "DBProxy") == false)
{
//SunLog甫 父甸瘤 臼嚼聪促.
}
// DBProxy 辑滚 矫累 肺弊
SUNLOG( eFULL_LOG, "DBProxy Server Start " );
#ifdef _USING_ACCOUNT_DBPROXY_SERVER
StartServerListen( pServerEnv->pszAccountDBProxyServerIP, pServerEnv->wAccountDBProxyServerPort );
#else
if(!pServerEnv->bGetServerInfoFromFile)
{
ServerSession * pMasterSession = ServerSessionFactory::Instance()->AllocServerSession( MASTER_SERVER );
pMasterSession->SetAddr( m_pFileParser->GetServerEnv()->pszMasterServerIP, m_pFileParser->GetServerEnv()->wMasterServerPort );
pMasterSession->TryToConnect();
}
#endif
// 叼厚 矫府倔 掘绢 坷绰 孽府
ExecuteSelectSerialQuery();
return TRUE;
}
VOID DBProxyServer::StartServerListen( char * pszIP, WORD wPort )
{
if( !m_pIOCPServer->StartListen( IOHANDLER_SERVER_IDX, pszIP, wPort ) )
{
DISPMSG( "StartServerListen [角菩] : (%s@%u) \n", pszIP, wPort );
}
else
{
DISPMSG( "StartServerListen [己傍] : (%s@%u) \n", pszIP, wPort );
}
}
DWORD DBProxyServer::ConnectToServer( NetworkObject * pNetworkObject, char * pszIP, WORD wPort )
{
return m_pIOCPServer->Connect( IOHANDLER_SERVER_IDX, pNetworkObject, pszIP, wPort );
}
VOID DBProxyServer::Run()
{
#ifndef _USING_ACCOUNT_DBPROXY_SERVER
SERVER_ENV * pServerEnv = m_pFileParser->GetServerEnv();
if(pServerEnv->bGetServerInfoFromFile)
{
StartServerListen( pServerEnv->pszGameDBProxyServerIP, pServerEnv->wGameDBProxyServerPort );
}
#endif
while( TRUE )
{
Sleep( 10 );
if( !Update() ) break;
}
}
BOOL DBProxyServer::Update()
{
m_DB.Update();
UpdateFPS();
g_DBUserManager.UpdatePlayer();
ServerSessionManager::Instance()->Process();
// I/O 浚柳 诀单捞飘
m_pIOCPServer->Update();
// 能贾贸府
if( ProcessConsole() == FALSE )
{
//return FALSE;
Shutdown(); //< 搬苞 棵锭 鳖瘤 扁促妨具 窃
}
if( m_eShutdownState == READYTOSHUTDOWN )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -