📄 channelsystem.cpp
字号:
// ChannelSystem.cpp: implementation of the CChannelSystem class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ChannelSystem.h"
#include "MHFile.h"
#include "BattleSystem_Server.h"
#include "Object.h"
#include "NetWork.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern int g_nServerSetNum;
CChannelSystem::CChannelSystem()
{
}
CChannelSystem::~CChannelSystem()
{
for(int i=0; i<MAX_CHANNEL_NUM; ++i)
{
if(m_Channel[i])
{
delete m_Channel[i];
m_Channel[i] = NULL;
}
}
}
void CChannelSystem::LoadChannelInfo()
{
CMHFile file;
BYTE Kind, num = 0;
char value[64] = {0,};
char filename[256];
sprintf(filename,"serverset/%d/ChannelInfo.bin",g_nServerSetNum);
file.Init(filename, "rb");
if(file.IsInited() == FALSE)
{
MessageBox(NULL,"Can't Open ChannelInfo File", NULL, NULL);
return;
}
while(1)
{
if(file.IsEOF())
break;
strcpy( value, strupr(file.GetString()) );
if( strcmp( value,"*CHANNEL" ) == 0 )
{
Kind = file.GetByte();
num = file.GetByte();
file.GetStringInQuotation( m_ChannelName );
CreateChannel(Kind, num);
m_Count = num;
}
}
file.Release();
}
void CChannelSystem::CreateChannel(BYTE Kind, BYTE num)
{
for(BYTE i=0; i<num; ++i)
{
DWORD ChannelIDX = BATTLESYSTEM->CreateChannel(); // 弊府靛 酒捞叼 == ChannelIDX
m_Channel[i] = new CChannel;
m_Channel[i]->SetChannelID(ChannelIDX);
}
m_Count = num;
}
void CChannelSystem::IncreasePlayerNum(DWORD ChannelID)
{
ASSERT(ChannelID);
if(ChannelID > m_Count)
{
ASSERT(0); return;
}
m_Channel[ChannelID-1]->IncreaseNum();
}
void CChannelSystem::DecreasePlayerNum(DWORD ChannelID)
{
ASSERT(ChannelID);
if(ChannelID > m_Count)
{
return;
}
m_Channel[ChannelID-1]->DecreaseNum();
}
void CChannelSystem::SendChannelInfo(MSG_DWORD* pInfo, DWORD dwConnectionIndex)
{
if(g_pServerSystem->GetStart() == FALSE)
{
MSG_BYTE nmsg;
nmsg.Category = MP_USERCONN;
nmsg.Protocol = MP_USERCONN_CHANNELINFO_NACK;
nmsg.bData = 0;
nmsg.dwObjectID = pInfo->dwObjectID;
g_Network.Send2Server(dwConnectionIndex,(char*)&nmsg,sizeof(nmsg));
return;
}
MSG_CHANNEL_INFO msg;
memset(&msg, 0, sizeof(MSG_CHANNEL_INFO));
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_CHANNELINFO_ACK;
SafeStrCpy(msg.ChannelName, m_ChannelName, MAX_CHANNEL_NAME+1);
for(int i=0; i<m_Count; ++i)
{
msg.PlayerNum[i] = m_Channel[i]->GetPlayerNum();
}
msg.dwObjectID = pInfo->dwObjectID;
msg.dwUniqueIDinAgent = pInfo->dwData;
msg.Count = m_Count;
g_Network.Send2Server(dwConnectionIndex,(char*)&msg,sizeof(msg));
}
DWORD CChannelSystem::GetChannelID(int num)
{
if(num >= m_Count)
{
ASSERT(0);
return 0;
}
return m_Channel[num]->GetChannelID();
}
void CChannelSystem::SendChannelInfoToMS( DWORD dwConnectionIndex )
{
MSG_CHANNEL_INFO msg;
memset(&msg, 0, sizeof(MSG_CHANNEL_INFO));
msg.Category = MP_MORNITORMAPSERVER;
msg.Protocol = MP_MORNITORMAPSERVER_QUERY_CHANNELINFO_ACK;
SafeStrCpy(msg.ChannelName, m_ChannelName, MAX_CHANNEL_NAME+1);
for(int i=0; i<m_Count; ++i)
{
msg.PlayerNum[i] = m_Channel[i]->GetPlayerNum();
}
msg.Count = m_Count;
g_Network.Send2Server(dwConnectionIndex,(char*)&msg,sizeof(msg));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -