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

📄 serversessionmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "stdafx.h"
#include "ServerSessionManager.h"
#include "ServerInfoManager.h"
#include "ServerSession.h"
#include <assert.h>

// 烹拳樊 笼拌 困秦
#include "MasterServer.h"

ServerSessionManager::ServerSessionManager()
{
	m_pOpServer = NULL;
}

ServerSessionManager::~ServerSessionManager()
{
}

VOID ServerSessionManager::AddServer( ServerSession * pServer )
{
	//assert( FindServer( pServer->GetServerKey() ) == NULL );
	if( FindServer( pServer->GetServerKey() ) != NULL )
	{
		MessageOut( eCRITICAL_LOG, "Warning: 辑滚虐 吝汗(%u/%u/%u/%u)捞骨肺 楷搬阑 谗嚼聪促. DB ServerInfo 抛捞喉 沥焊甫 犬牢窍技夸.",
			pServer->GetServerKey().GetWorldID(), pServer->GetServerKey().GetChannelID(), pServer->GetServerKey().GetServerType(), 
			pServer->GetServerKey().GetServerID() );
		pServer->Disconnect();
	}
	m_mapSessions.insert( SERVER_SESSION_PAIR( pServer->GetServerKey(), pServer ) );

	switch( pServer->GetServerType() )
	{
	case OP_SERVER:
		m_pOpServer = pServer;
		MessageOut( eCRITICAL_LOG, "Add Opserver %u.", pServer->GetServerKey() );
		break;
	}
}

VOID ServerSessionManager::RemoveServer( SERVER_KEY serverKey )
{
	SERVER_SESSION_MAP_ITER it = m_mapSessions.find( serverKey );
	ServerSession *pServer = NULL;

	//assert( it != m_mapSessions.end() );

	//------------------------------------------------------------------------------------------------
	// TempServerSession篮 概聪廉俊 眠啊登瘤 臼绰促.(角力 荤侩瞪 技记栏肺 Redirect等 饶俊 眠啊凳)
	// 弊矾聪鳖 TempServerSesssion::OnDisconnect俊辑 捞 窃荐甫 龋免秦档 公矫窍磊.
	//------------------------------------------------------------------------------------------------
	if( it != m_mapSessions.end() )
	{
		pServer = it->second;

		m_mapSessions.erase( it );

		switch( pServer->GetServerType() )
		{
			case OP_SERVER:
				m_pOpServer = NULL;
				MessageOut( eCRITICAL_LOG, "OP_SERVER(%u/%u/%u/%u) Disconnected.", 
					serverKey.GetWorldID(), serverKey.GetChannelID(), serverKey.GetServerType(), serverKey.GetServerID() );
				break;
			case BATTLE_SERVER:
				MasterServer::Instance()->RemoveMoney( serverKey );
				break;
		}
	}
}

ServerSession *	ServerSessionManager::FindServer( SERVER_KEY serverKey )
{
	SERVER_SESSION_MAP_ITER it = m_mapSessions.find( serverKey );

	if( it == m_mapSessions.end() ) return NULL;

	return it->second;
}

VOID ServerSessionManager::Update()
{
	SERVER_SESSION_MAP_ITER it;

	for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
	{
		it->second->Update();
	}
}

SERVER_SESSION_VEC ServerSessionManager::GetWorldServerList()
{
	SERVER_SESSION_MAP_ITER it;
	ServerSession			*pServerSession;

	SERVER_SESSION_VEC		worldList;

	for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
	{
		pServerSession = it->second;

		if( pServerSession->GetServerType() == WORLD_SERVER )
		{
			worldList.push_back( pServerSession );
		}
	}

	return worldList;
}

SERVER_SESSION_VEC ServerSessionManager::GetGameServerList()
{
	SERVER_SESSION_MAP_ITER it;
	ServerSession			*pServerSession;

	SERVER_SESSION_VEC		gameList;

	for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
	{
		pServerSession = it->second;

		switch( pServerSession->GetServerType() )
		{
			case FIELD_SERVER:
			case BATTLE_SERVER:
			case GAME_SERVER:
			{
				gameList.push_back( pServerSession );
			}
		}
	}

	return gameList;
}

SERVER_SESSION_VEC ServerSessionManager::GetDBProxyList( SERVER_KEY serverKey )
{
	SERVER_SESSION_MAP_ITER it;
	ServerSession			*pServerSession;

	SERVER_SESSION_VEC		DBList;

	if( 0 == serverKey.GetWorldID() )
	{
		// 傈眉 辑滚
		for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
		{
			pServerSession = it->second;

			switch( pServerSession->GetServerType() )
			{
				case GAME_DBPROXY:
				case ACCOUNT_DBPROXY:
				{
					DBList.push_back( pServerSession );
					MessageOut( eFULL_LOG, "傈眉 辑滚 辆丰 - DBProxy [%u/%u/%u/%u] Add", pServerSession->GetServerKey().GetWorldID(), 
																							pServerSession->GetServerKey().GetChannelID(), 
																							pServerSession->GetServerKey().GetServerType(), 
																							pServerSession->GetServerKey().GetServerID() );
					break;
				}
			}
		}

		return DBList;
	}

	if( 0 == serverKey.GetChannelID() )
	{
		// 傈眉 岿靛
		for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
		{
			pServerSession = it->second;

			switch( pServerSession->GetServerType() )
			{
				case GAME_DBPROXY:
				case ACCOUNT_DBPROXY:
				{
					if( pServerSession->GetServerKey().GetWorldID() == serverKey.GetWorldID() )
					{
						DBList.push_back( pServerSession );
						MessageOut( eFULL_LOG, "岿靛(%u) 辆丰 - DBProxy [%u/%u/%u/%u] Add", serverKey.GetWorldID(), 
																							pServerSession->GetServerKey().GetWorldID(), 
																							pServerSession->GetServerKey().GetChannelID(), 
																							pServerSession->GetServerKey().GetServerType(), 
																							pServerSession->GetServerKey().GetServerID() );
					}
					break;
				}
			}
		}
		return DBList;
	}

	// 捞档历档 酒聪搁 傈眉 盲澄
	pServerSession = FindServer( serverKey );

	switch( pServerSession->GetServerType() )
	{
		case GAME_DBPROXY:
//		case ACCOUNT_DBPROXY:
		{
			if( (pServerSession->GetServerKey().GetWorldID() == serverKey.GetWorldID()) && 
				(pServerSession->GetServerKey().GetWorldID() == serverKey.GetChannelID()) )
			{
				DBList.push_back( pServerSession );
				MessageOut( eFULL_LOG, "盲澄(%u/%u) 辆丰 - DBProxy [%u/%u/%u/%u] Add", serverKey.GetWorldID(), 
																					serverKey.GetChannelID(), 
																					pServerSession->GetServerKey().GetWorldID(), 
																					pServerSession->GetServerKey().GetChannelID(), 
																					pServerSession->GetServerKey().GetServerType(), 
																					pServerSession->GetServerKey().GetServerID() );
			}
			break;
		}
	}

	return DBList;
}

SERVER_SESSION_VEC ServerSessionManager::GetServerList( SERVER_KEY serverKey )
{
	SERVER_SESSION_VEC	serverList;
	ServerSession *pSession = NULL;
	SERVER_SESSION_MAP_ITER it;

	if( 0 == serverKey.GetWorldID() )
	{
		// 傈眉 辑滚
		for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
		{
			pSession = it->second;

			switch( pSession->GetServerType() )
			{
				case ACCOUNT_DBPROXY:
				case GAME_DBPROXY:
				case OP_SERVER:
				case MASTER_SERVER:
				case AUTH_AGENT_SERVER:
				case TEMP_SERVER:
				case UNKNOWN_SERVER:
				{
					break;
				}
				default:
				{
					serverList.push_back( pSession );
					MessageOut( eFULL_LOG, "傈眉 辑滚 辆丰 - SERVERKEY [%u/%u/%u/%u] Add", it->second->GetServerKey().GetWorldID(), 
																							it->second->GetServerKey().GetChannelID(), 
																							it->second->GetServerKey().GetServerType(), 
																							it->second->GetServerKey().GetServerID() );
					break;
				}
			}
		}
		return serverList;
	}

	if( 0 == serverKey.GetChannelID() )
	{
		// 傈眉 岿靛
		for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
		{
			pSession = it->second;
			switch( pSession->GetServerType() )
			{
				case ACCOUNT_DBPROXY:
				case GAME_DBPROXY:
				case OP_SERVER:
				case MASTER_SERVER:
				case AUTH_AGENT_SERVER:
				case TEMP_SERVER:
				case UNKNOWN_SERVER:
				{
					break;
				}
				default:
				{
					serverList.push_back( pSession );
					MessageOut( eFULL_LOG, "岿靛 %u 辆丰 - SERVERKEY [%u/%u/%u/%u] Add", serverKey.GetWorldID(), 
																							it->second->GetServerKey().GetWorldID(), 
																							it->second->GetServerKey().GetChannelID(), 
																							it->second->GetServerKey().GetServerType(), 
																							it->second->GetServerKey().GetServerID() );
					break;
				}
			}
		}
		return serverList;
	}

	// 咯扁鳖瘤 坷搁 傈眉 盲澄 辆丰
	for( it = m_mapSessions.begin(); it != m_mapSessions.end(); ++it )
	{
		switch( pSession->GetServerType() )
		{
			case ACCOUNT_DBPROXY:
			case GAME_DBPROXY:
			case OP_SERVER:
			case MASTER_SERVER:
			case AUTH_AGENT_SERVER:
			case TEMP_SERVER:
			case UNKNOWN_SERVER:
			{
				break;
			}
			default:
			{
				serverList.push_back( pSession );
				MessageOut( eFULL_LOG, "盲澄 [%u/%u] 辆丰 - SERVERKEY [%u/%u/%u/%u] Add", serverKey.GetChannelID(), serverKey.GetWorldID(), 
																						it->second->GetServerKey().GetWorldID(), 
																						it->second->GetServerKey().GetChannelID(), 
																						it->second->GetServerKey().GetServerType(), 
																						it->second->GetServerKey().GetServerID() );
				break;
			}
		}
	}

	return serverList;
}

⌨️ 快捷键说明

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