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

📄 msgchatroom.cpp

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 CPP
字号:
// MsgChatRoom.cpp: implementation of the CMsgChatRoom class.
//
//////////////////////////////////////////////////////////////////////
#include "AllMsg.h"
#include "mapgroup.h"
#include "transformation.h"
#include "Agent.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMsgChatRoom::CMsgChatRoom()
{
	Init();
	m_pInfo	=(MSG_Info *)m_bufMsg;  
	m_sString.SetBuf(m_pInfo->szBuf, _MAX_MSGSIZE-sizeof(MSG_Info)+1);

}

CMsgChatRoom::~CMsgChatRoom()
{

}

//////////////////////////////////////////////////////////////////////
void CMsgChatRoom::Process(void* pSocket)
{
	CUserPtr pUser = UserManager()->GetUser(this);
	CHECK(pUser);
	
	switch( m_pInfo->usAction )
	{
	case ACTION_ENTERROOM_APPLY://玩家申请进入聊天室
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
		}
		break;
	case ACTION_LEAVEROOM:	//离开聊天室
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);			
		}
		break;
	case ACTION_APPLYMANAGER:	//申请聊天室管理员
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
		}
		break;
	case ACTION_QUITMANAGER: //放弃聊天室管理员
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
		}
		break;
	case ACTION_ENTERROOM_CHECKMONEY: //检查钱
		{
			ULONG dwMoney = m_pInfo->ulData;

			if(pUser->SpendMoney(dwMoney,true))
			{
				MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);//可以进入聊天室
			}
			else
			{
				pUser->SendSysMsg(STR_CHATROOM_CANNOT_INMOREROOM_FORNOMONEY);
			}
		}
		break;
	case ACTION_FEE_DEDUCT://抠钱--对非管理员
		{
			ULONG dwMoney = m_pInfo->ulData;
			if(!pUser->SpendMoney(dwMoney,true))
			{
				//假如没有钱了,从聊天室剔出
				if(this->Create(ACTION_LEAVEROOM))
					MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
			}
		}
		break;
	case ACTION_FEE_INCOME://收管理费用--对管理员
		{
			ULONG dwMoney = m_pInfo->ulData;
			pUser->AddMoney(dwMoney);
		}
		break;
	case ACTION_SETFEE:	//设置聊天费用
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
		}
		break;
	case ACTION_SETROOMNAME:
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
		}
		break;
	case ACTION_OFFLINE:
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
		}
		break;
	case ACTION_KICKMEMBER: //踢
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);

		}
	case ACTION_TALK: //谈话
		{
			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(pUser->GetSocketID(),this);
		}
		break;

	default:
		break;
	}
	
}


bool CMsgChatRoom::Create(unsigned short usAction, ULONG ulData, const char *pString)
{
	// check param
	if(usAction == ACTION_NONE) //  || idTarget == ID_NONE
	{
		ASSERT(!"CMsgSyndicate::Create()");
		return false;
	}
	
	// init
	this->Init();
	
	m_pInfo->usAction	=usAction;	
	m_pInfo->ulData	=ulData;
	if(pString)
		m_sString.AddString(pString);
	// fill info now	
	m_unMsgType	=_MSG_CHATROOM;
	if(pString)
		m_unMsgSize	=sizeof(MSG_Info)-1+m_sString.GetSize();
	else
		m_unMsgSize	=sizeof(MSG_Info)-1;
	
	
	return true;
}

⌨️ 快捷键说明

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