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

📄 dbproxyserver.cpp

📁 奇迹世界data 服务器代码,研究游戏的朋友有帮助
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -