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

📄 servertable2.cpp

📁 Agent in c++ for DragonRaja
💻 CPP
字号:
#include "servertable.h"
#include "servertable2.h"

#if defined (__IS_AGENT_SERVER) || defined(__IS_PROXY_SERVER)
#include "usertable.h"
#endif

#ifdef __IS_DB_DEMON
#include <sqltypes.h>
#include "Network.h"
#endif


// ------------------------------------------------------------------------------------------
// For Proxy Server
// ------------------------------------------------------------------------------------------
#ifdef __IS_PROXY_SERVER
bool RequestClearPayTable( DWORD dwConnectionIndex );

void CServerTable::OnConnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
		}
		break;
	case SERVER_TYPE_AGENT:
		{
			if( !RequestClearPayTable( pServerData->dwConnectionIndex ) )
			{
				MyLog( LOG_FATAL, "AGENT SERVER UP :: Failed to request to clear PAY TABLE to DB DEMON" );
			}
		}
		break;
	case SERVER_TYPE_DB:
		{
		}
		break;
	case SERVER_TYPE_MAP:
		{
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
}
void CServerTable::OnDisconnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
		}
		break;
	case SERVER_TYPE_AGENT:
		{
			if( !RequestClearPayTable( pServerData->dwConnectionIndex ) )
			{
				MyLog( LOG_FATAL, "AGENT SERVER UP :: Failed to request to clear PAY TABLE to DB DEMON" );
			}
		}
		break;
	case SERVER_TYPE_DB:
		{
			LP_SERVER_DATA pDummyServerData;

			// Clear Using Servers
			for( WORD i = 0; i < MAX_SERVER_NUM; i++ )
			{
				pServerData->ppUsingServers[i] = NULL;
			}

			// Unlink and change status
			for( pDummyServerData = g_pServerTable->GetServerListHead(); pDummyServerData; pDummyServerData = pDummyServerData->pNextServerData )
			{
				if( pDummyServerData->pUsingDBDemon && pDummyServerData->pUsingDBDemon == pServerData )
				{
					pDummyServerData->pUsingDBDemon = NULL;
					this->SetServerStatus( pDummyServerData, STATUS_AWAITING_DB_DEMON_SETTING );
				}
			}
		}
		break;
	case SERVER_TYPE_MAP:
		{
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
}
void CServerTable::OnChangeServerStatus( LP_SERVER_DATA pServerData )
{
	// 泅犁 酒公巴档 救窃.
}
#endif
// ------------------------------------------------------------------------------------------



// ------------------------------------------------------------------------------------------
// For Agent Server
// ------------------------------------------------------------------------------------------
#ifdef __IS_AGENT_SERVER
void CServerTable::OnConnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
		}
		break;
	case SERVER_TYPE_AGENT:
		{
		}
		break;
	case SERVER_TYPE_DB:
		{
		}
		break;
	case SERVER_TYPE_MAP:
		{
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
	return;
}
void CServerTable::OnDisconnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
			if( this->GetServerStatus() < STATUS_ACTIVATED )
			{
				// 何泼 矫啮胶啊 场唱扁 傈俊 PROXY客 楷搬捞 辆丰登菌促.
				// 捞 辑滚绰 辆丰等促.
				this->DestroyServer( FINISH_TYPE_PROXY_LOST_CONNECTION_UNDER_BOOT_PROGRESS );
			}
		}
		break;
	case SERVER_TYPE_AGENT:
		{
			// 促弗 Agent啊 磷篮 版快, 喊肺 秦临扒 绝促.
		}
		break;
	case SERVER_TYPE_DB:
		{
			// DB Demon捞 磷篮 版快
			// DB Demon俊 浚飘府甫 啊柳 葛电 荤侩磊甫 肋扼拎具 茄促.
			g_pUserTable->RemoveAllUserByDBDemonConnectionIndex( pServerData->dwConnectionIndex );
		}
		break;
	case SERVER_TYPE_MAP:
		{
			// Map Server啊 磷篮 版快
			// Map Server俊 浚飘府甫 啊柳 葛电 荤侩磊甫 肋扼拎具 茄促.
			g_pUserTable->RemoveAllUserByMapServerConnectionIndex( pServerData->dwConnectionIndex );
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
}
void CServerTable::OnChangeServerStatus( LP_SERVER_DATA pServerData )
{
}
#endif
// ------------------------------------------------------------------------------------------



// ------------------------------------------------------------------------------------------
// For DB Demon
// ------------------------------------------------------------------------------------------
#ifdef __IS_DB_DEMON
void CServerTable::OnConnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
		}
		break;
	case SERVER_TYPE_AGENT:
		{
		}
		break;
	case SERVER_TYPE_DB:
		{
		}
		break;
	case SERVER_TYPE_MAP:
		{
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
}
void CServerTable::OnDisconnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
			if( this->GetServerStatus() < STATUS_ACTIVATED )
			{
				// 何泼 矫啮胶啊 场唱扁 傈俊 PROXY客 楷搬捞 辆丰登菌促.
				// 捞 辑滚绰 辆丰等促.
				this->DestroyServer( FINISH_TYPE_PROXY_LOST_CONNECTION_UNDER_BOOT_PROGRESS );
			}
		}
		break;
	case SERVER_TYPE_AGENT:
		{
			// Agent啊 磷篮 版快. t_connection苞 SERVER_DATA 狼 牢郸胶甫 沥府秦拎具 茄促.
			memset( pServerData->dwUSERCN, 0, (sizeof(IDCN)*MAX_USER_NUM) );

			for( DWORD i = DRAGON_CONNECTIONS_START; i < MAX_USER_NUM; i++ )
			{
				if( connections[i].dwMyAgentIndex == pServerData->dwConnectionIndex )
				{
					connections[i].bUse = false;
					connections[i].dwMyAgentIndex = 0;
					connections[i].dwUserID = 0;
				}
			}
		}
		break;
	case SERVER_TYPE_DB:
		{
		}
		break;
	case SERVER_TYPE_MAP:
		{
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
}
void CServerTable::OnChangeServerStatus( LP_SERVER_DATA pServerData )
{
}
#endif
// ------------------------------------------------------------------------------------------



// ------------------------------------------------------------------------------------------
// For MAP Server
// ------------------------------------------------------------------------------------------
#ifdef __IS_MAP_SERVER

#include "..\HigherLayers\DefaultHeader.h"
#include "..\HigherLayers\Dr_Network.h"

void CServerTable::OnConnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
		}
		break;
	case SERVER_TYPE_AGENT:
		{
			// -----------------------------
			// Alloc this Agent's CPackedMsg
			// -----------------------------
			CPackedMsg*	pPack = new CPackedMsg;
			m_ppPackedTable[this->m_dwNumOfTypedServers[SERVER_TYPE_AGENT]] = pPack;
			pPack->SetConnectionIndex( pServerData->dwConnectionIndex );
			pPack->SetAgentServerIndex( this->m_dwNumOfTypedServers[SERVER_TYPE_AGENT] );
		}
		break;
	case SERVER_TYPE_DB:
		{
		}
		break;
	case SERVER_TYPE_MAP:
		{
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
}
void CServerTable::OnDisconnectTypedServer( LP_SERVER_DATA pServerData )
{
	switch( pServerData->dwServerType )
	{
	case SERVER_TYPE_PROXY:
		{
			if( this->GetServerStatus() < STATUS_ACTIVATED )
			{
				// 何泼 矫啮胶啊 场唱扁 傈俊 PROXY客 楷搬捞 辆丰登菌促.
				// 捞 辑滚绰 辆丰等促.
				this->DestroyServer( FINISH_TYPE_PROXY_LOST_CONNECTION_UNDER_BOOT_PROGRESS );
			}
		}
		break;
	case SERVER_TYPE_AGENT:
		{
			// ------------------------------
			// Remove this Agent's CPackedMsg
			// ------------------------------
			DWORD dwPackedIndex = 0;
	
			CPackedMsg* pPack = GetPackedMsg( &dwPackedIndex, pServerData->dwConnectionIndex);
			if ( pPack )
			{
				delete pPack;
				pPack = NULL;
				this->m_ppPackedTable[dwPackedIndex] = NULL;
			}
			this->m_ppPackedTable[dwPackedIndex] = this->m_ppPackedTable[this->m_dwNumOfTypedServers[SERVER_TYPE_AGENT]-1];

			// ---------------------------------
			// Close Connections From this Agent
			// ---------------------------------
			for( DWORD i = DRAGON_CONNECTIONS_START; i < DRAGON_MAX_CONNECTIONS; i++ )
			{
				if( connections[i].dwAgentConnectionIndex == pServerData->dwConnectionIndex )
				{
					closeconnection(connections, i, -1);
				}
			}
		}
		break;
	case SERVER_TYPE_DB:
		{
		}
		break;
	case SERVER_TYPE_MAP:
		{
		}
		break;
	default:
		{
			// Fatal
		}
		break;
	}
}
void CServerTable::OnChangeServerStatus( LP_SERVER_DATA pServerData )
{
}
#endif
// ------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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