📄 channelmanager.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 + -