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

📄 channelmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\channelmanager.h"
#include "Channel.h"
#include "UserManager.h"
#include "User.h"
#include <assert.h>

// 悼立 焊绊 困秦
#include <PacketStruct_MW.h>
#include "ServerSession.h"
#include "ServerSessionManager.h"

// 付胶磐 辑滚 包府 困秦
#include "WorldServerInfoParser.h"

ChannelManager::ChannelManager(void)
{
	m_pChannelPool = NULL;
}

ChannelManager::~ChannelManager(void)
{
	assert( m_pChannelPool == NULL );
}

VOID ChannelManager::Init()
{
	m_pChannelPool = new CMemoryPoolFactory<Channel>;
	m_pChannelPool->Initialize( 5, 1 );

	m_StatisticsTimer.SetTimer( WorldServerInfoParser::Instance()->GetStatisticsInterval() );
//	MessageOut( eFULL_LOG, "Set Timer %u", m_StatisticsTimer.GetIntervalTime() );
}

VOID ChannelManager::Release()
{	
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	CHANNEL_MAP mapClone = m_mapChannels;
	for( it = mapClone.begin(); it != mapClone.end(); ++it )
	{
		pChannel = it->second;
		RemoveChannel( pChannel->GetChannelID() );
	}
	mapClone.clear();
}

VOID ChannelManager::Update()
{
	// 老沥 矫埃付促 悼立 沥焊 傈价
	DWORD			dwTotalCount=0, dwVillageCount=0, dwBattleZoneCount=0;

	// 10檬付促 眉农...歹反霸 弧府 窍匙...-0-
	if( m_StatisticsTimer.IsExpired() )
	{
		CHANNEL_MAP_ITER	it;
		Channel *pChannel;
		MSG_MW_USERCOUNT_SYN	sendMsg;
		BYTE					byChannel;

		sendMsg.byChannelCount = 0;
		for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
		{
			pChannel = it->second;
			byChannel = sendMsg.byChannelCount;
			sendMsg.ChannelInfo[byChannel].dwChannelID = pChannel->GetChannelID();
			sendMsg.ChannelInfo[byChannel].dwVillageCount = pChannel->GetVillageUserNum();
			sendMsg.ChannelInfo[byChannel].dwBattleZoneCount = pChannel->GetHuntingUserNum()
																			+ pChannel->GetMissionUserNum()
																			+ pChannel->GetLobbyUserNum()
																			+ pChannel->GetGuildUserNum()
																			+ pChannel->GetEventUserNum()
																			+ pChannel->GetPVPUserNum()
																			+ pChannel->GetQuestUserNum()
																			+ pChannel->GetSiegeUserNum();

			MessageCount( eFULL_LOG, "悼立荐 犬牢: 配呕(%u) 盲澄(%d) 付阑(%d) 傈捧(%d)",
							pChannel->GetTotalUserNum(), 
							sendMsg.ChannelInfo[byChannel].dwChannelID, 
							sendMsg.ChannelInfo[byChannel].dwVillageCount, 
							sendMsg.ChannelInfo[byChannel].dwBattleZoneCount );

			sendMsg.byChannelCount++;
			dwTotalCount += pChannel->GetTotalUserNum();
			dwVillageCount += sendMsg.ChannelInfo[byChannel].dwVillageCount;
			dwBattleZoneCount += sendMsg.ChannelInfo[byChannel].dwBattleZoneCount;
		}

		MessageCount( eCRITICAL_LOG, "悼立 钦拌: 配呕(%u) 付阑(%u) 傈捧(%u)", dwTotalCount, dwVillageCount, dwBattleZoneCount );

		// ServerInfo甫 颇老俊辑 罐瘤 臼疽绰单
		if( !WorldServerInfoParser::Instance()->IsServerInfoFromFile() )
		{
			// 付胶磐 辑滚俊 立加档 救 蹬 乐栏搁 悼立 焊绊俊 角菩茄 芭促!
			ServerSession *pMasterServer = ServerSessionManager::Instance()->GetMasterServer();
			if( !pMasterServer )
			{
				MessageOut( eCRITICAL_LOG, "悼立 焊绊 角菩 - No Master Server");
				return;
			}
			pMasterServer->Send( (BYTE*)&sendMsg, sendMsg.GetSize() );
			MessageOut( eFULL_LOG, "Master Server俊 悼立 焊绊");
		}

	}
}

Channel* ChannelManager::AllocChannel()
{
	Channel *pChannel = m_pChannelPool->Alloc();
	pChannel->Init();
	return pChannel;
}

VOID ChannelManager::FreeChannel( Channel *pChannel )
{
	pChannel->Release();
	m_pChannelPool->Free( pChannel );
}

VOID ChannelManager::AddChannel( DWORD dwChannelID )
{
	CHANNEL_MAP_ITER it = m_mapChannels.find( dwChannelID );
	assert( it == m_mapChannels.end() );
	Channel *pChannel = AllocChannel();
	pChannel->SetChannelID( dwChannelID );
	m_mapChannels.insert( CHANNEL_MAP_PAIR( dwChannelID, pChannel ) );
	MessageOut( eCRITICAL_LOG,   "盲澄(%d) 眠啊", dwChannelID );
}

VOID ChannelManager::RemoveChannel( DWORD dwChannelID )
{
	CHANNEL_MAP_ITER it = m_mapChannels.find( dwChannelID );
	Channel *pChannel;
	if( it != m_mapChannels.end() )
	{
		pChannel = it->second;
		m_mapChannels.erase( it );
		FreeChannel( pChannel );		
		MessageOut( eCRITICAL_LOG,   "盲澄(%d) 昏力", dwChannelID );
	}
}

Channel* ChannelManager::GetChannel( DWORD dwChannelID )
{
	CHANNEL_MAP_ITER it = m_mapChannels.find( dwChannelID );
	if( it == m_mapChannels.end() )
	{
		return NULL;
	}
	else
	{
		return it->second;
	}
}
/*
VOID ChannelManager::SendToAllChannel( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToAll( pMsg, wSize );
	}
}
*/

VOID ChannelManager::SendToVillages( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToVillages( pMsg, wSize );
	}
}
/*
VOID ChannelManager::SendToBattleZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToBattleZones( pMsg, wSize );
	}
}
*/
VOID ChannelManager::SendToLobby( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToLobby( pMsg, wSize );
	}
}

VOID ChannelManager::SendToMissionZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToMissionZones( pMsg, wSize );
	}
}

VOID ChannelManager::SendToHuntingZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToHuntingZones( pMsg, wSize );
	}
}

VOID ChannelManager::SendToQuestZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToQuestZones( pMsg, wSize );
	}
}

VOID ChannelManager::SendToPVPZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToPVPZones( pMsg, wSize );
	}
}

VOID ChannelManager::SendToEventZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToEventZones( pMsg, wSize );
	}
}

VOID ChannelManager::SendToGuildZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToGuildZones( pMsg, wSize );
	}
}

VOID ChannelManager::SendToSiegeZones( BYTE *pMsg, WORD wSize )
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;
	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->SendToSiegeZones( pMsg, wSize );
	}
}

VOID ChannelManager::DisplayChannelInfo()
{
	CHANNEL_MAP_ITER	it;
	Channel				*pChannel;

	if( m_mapChannels.empty() )
	{
		MessageOut(eCRITICAL_LOG,   "劝己拳等 盲澄捞 绝嚼聪促." );
		return;
	}

	for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
	{
		pChannel = it->second;
		pChannel->DisplayInfo();
	}
}

⌨️ 快捷键说明

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