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

📄 chatroom.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			{
			case GroupAbandonManagement_Self://自己放弃
				sprintf(str,"[%s]放弃聊管,[%s]成为聊管", pSrcMember ? pSrcMember->GetString("szNick") : "无", pDstMember ? pDstMember->GetString("szNick") : "无" );
				break;
			case GroupAbandonManagement_System://系统放弃
				if( pSrcMember )
					sprintf(strSrc, "系统放弃[%s]聊管,", pSrcMember->GetString("szNick") );
				sprintf(strDst, "[%s]成为聊管", pDstMember ? pDstMember->GetString("szNick"): "无");
				sprintf( str, "%s%s",strSrc, strDst);
				break;
			case GroupAbandonManagement_Quit://退出聊天室
				if( pSrcMember )
					sprintf(strSrc, "[%s]退出聊天室,", pSrcMember->GetString("szNick"));
				else
					strcpy(strSrc , "聊管退出");
				
				sprintf(strDst,"[%s]成为聊管", pDstMember ? pDstMember->GetString("szNick"): "无");
				sprintf( str, "%s%s",strSrc, strDst);
				break;
			case GroupAbandonManagement_Apply://请求聊管
				sprintf(str,"[%s]成为聊管", pDstMember ? pDstMember->GetString("szNick") : "无" );
				break;
			case GroupAbandonManagement_AbandonRequest://放弃请求
				if( pSrcMember )
					sprintf(str,"[%s]放弃聊管请求", pSrcMember ? pSrcMember->GetString("szNick") : "无" );
				break;
			case GroupAbandonManagement_ApplyRequest://申请请求
				if( pSrcMember )
					sprintf(str,"[%s]申请聊管", pSrcMember ? pSrcMember->GetString("szNick") : "无" );
				break;
			default:
//				ShowMessageText( "系统有误" );
				MessageBox(NULL,"系统有误","test",MB_OK );						
				return 0;
			}
			MessageBox(NULL,str,"test",MB_OK );						
		}
		break;
	case EV_APPLYMANAGER://请求成为管理员(wParam=dwGroupID, lParam=dwUin)
		{
			IGroupInfo* pGroupInfo = (IGroupInfo*)wParam;
			if( pGroupInfo == NULL ) return 0;
			
			uint32 dwUin = lParam;
			IGroupMember* pGroupMember = pGroupInfo->MemberFind( dwUin );
			if( pGroupMember )
			{
				char str[256];
				sprintf(str, "[%s]申请成为聊天室管理员", pGroupMember->GetString( "szNick") );				
				MessageBox(NULL,str,"test",MB_OK );			
			}
		}
		break;	
	case EV_MODIFYGROUPREGMEMBERINFO://修改群成员信息(wParam = IGroupMember*, lParam = enum Enum_MemberChange)
		{
			IGroupMember* pGroupMember = (IGroupMember*)wParam;
			uint32 dwType = lParam;
			
//			char str[256];
			char strTemp[256];
			switch( dwType )
			{
			case MemberChange_Rename://改名
				::Post91UCmd(CMD_91U_ABANDONGROUPMANAGER);
				sprintf(strTemp,"[%lu]修改呢称[%s]", pGroupMember->GetLong("dwUin"), pGroupMember->GetString("szNick") );
				break;
			case MemberChange_Idiograph://玩家签名
				::Post91UCmd(CMD_91U_ABANDONGROUPMANAGER);
				sprintf(strTemp,"[%lu]修改签名[%s]", pGroupMember->GetLong("dwUin"), pGroupMember->GetString("szIdiograph") );
				break;
			default:
				return 0;
			}
			MessageBox(NULL,strTemp,"test",MB_OK );			
		}
		break;
		
	default:
		break;
	}
	return 0;

}

#ifdef WM_91U_MESSAGE
void Post91UCmd(DWORD dwCommand, int nData)
{
	if(g_hGameWnd)
		::PostMessage(g_hGameWnd, WM_91U_MESSAGE, dwCommand, nData);
}
#endif

void CChatRoom::DeInit()
{
	im_Deinit();
}

void CChatRoom::GetRoomList()
{
	im_GetChatRoomLst( 0, 0, atoi( m_strGameCode ));
}

void CChatRoom::SetRoomListInfo(CGroupSummary* pGroupSummary,int iCount)
{
	m_setGroupList.clear();
	if (pGroupSummary == NULL)
		return;
	if (iCount <= 0)
		return;
	for(int i=0;i< iCount;i++)
	{
		CGroupSummary* pGroup = new CGroupSummary;
		MYASSERT (pGroup);

		*pGroup = pGroupSummary[i];

		m_setGroupList.push_back(pGroup);
	}
}

CGroupSummary* CChatRoom::GetRoomInfoList(int nIndex)
{
	int nAmount = m_setGroupList.size();
	if(nIndex>=0 && nIndex<nAmount)
		return m_setGroupList[nIndex];
	return NULL;
}

CGroupSummary* CChatRoom::GetRoomInfoListByID(UINT GroupID)
{
	int nAmount = m_setGroupList.size();
	for(int i=0;i<nAmount;i++)
	{
		CGroupSummary* pGroup = m_setGroupList[i];
		if(pGroup && pGroup->m_dwGroupID == GroupID)
			return pGroup;
	}
	return NULL;	
}

void CChatRoom::ClearRoomListInfo()
{
	m_setGroupList.clear();
}

void CChatRoom::GetRoomInfo()
{
	im_GetChatRoomInfo( m_dwGroupID, m_strGroupDomain );
}

void CChatRoom::EnterRoom(int nIndex)
{
	CGroupSummary* pGroup = this->GetRoomInfoList(nIndex); 
	if (pGroup == NULL)
		return ;
	if (m_dwGroupID == pGroup->m_dwGroupID && m_curGroup && m_curGroup->GetLong("dwGroupID") == pGroup->m_dwGroupID)
		return;	//已经进入了当前聊天室
	
	im_EnterChatRoom( pGroup->m_dwGroupID, pGroup->m_strDomain.c_str() );		
}

void CChatRoom::EnterRoomByID(UINT GroupID)
{
	if (GroupID == 0 )
		return;
	if (m_dwGroupID == GroupID && m_curGroup && m_curGroup->GetLong("dwGroupID") == GroupID)
		return;	//已经进入了当前聊天室
	
	if (this->GetRoomInfoListByID(GroupID))
	{
		im_EnterChatRoom( GroupID, this->GetRoomInfoListByID(GroupID)->m_strDomain.c_str() );		
	}
}

void CChatRoom::LeaveRoom()
{
	im_LeaveChatRoom( m_dwGroupID, m_strGroupDomain );
}

void CChatRoom::KickMember()
{
	im_KickMember( m_dwGroupID, m_strGroupDomain, m_dwUin );
}

void CChatRoom::ApplyManager()
{
	im_RequestMgrRole( m_dwGroupID, m_strGroupDomain );
}

void CChatRoom::AbandonManger()
{
	im_RequestGiveupMgrRole( m_dwGroupID, m_strGroupDomain );
}

void CChatRoom::ChangeMyInfo()
{
	im_ChangeMyInfo( m_dwGroupID, m_strGroupDomain, (Enum_MemberChange)m_dwAttrib, m_strValue ); ///(LPTSTR)(LPCTSTR)m_strValue 
}

void CChatRoom::ChangeRoomInfo()
{
	im_ChangeChatRoomInfo( m_dwGroupID, m_strGroupDomain, (CHATRM_ATTR)m_dwAttrib,m_strValue ); //(LPTSTR)(LPCTSTR)m_strValue 
}

void CChatRoom::SendMsg(UINT dwFriendID)
{
	
	IMsgPacket* pObj;
	im_CreateMsgPacket( &pObj ) ;   
	
	pObj->InsertText( m_strMsg );
	
	UDATATYPE DataType;
	DataType.dwVal = m_dwGroupID;
	pObj->Set( "dwGroupID", &DataType );
	
	DataType.dwVal = 0;
	pObj->Set( "dwFriendUin", &DataType );
	
	DataType.pszVal = m_strGroupDomain; //(LPCTSTR)m_strGroupDomain;
	pObj->Set( "szDomain", &DataType );
	
	DataType.dwVal = ChatMsgType_GroupMsg;
	pObj->Set( "dwMsgType", &DataType );
	
	im_SendMsgPacket( pObj );
}


BOOL CChatRoom::AddRoomMember(IGroupInfo* pGroupInfo, IGroupMember* pGroupMember)
{
	if( pGroupInfo == NULL ) return false;
	
	if (pGroupMember == NULL ) return false;
	
	if (!this->UpdateRoomMember(pGroupMember)) 
	{		
		GroupMember* pMember = new GroupMember;
		MYASSERT (pMember);

		pMember->dwUin = pGroupMember->GetLong("dwUin");
		pMember->dwStatus = pGroupMember->GetLong("dwStatus");
		pMember->dwEntryTime = pGroupMember->GetLong("dwEnterTime");
		strcpy(pMember->szNick,pGroupMember->GetString("szNick"));
		strcpy(pMember->szDomain,pGroupMember->GetString("szDomain"));
		strcpy(pMember->szIdiograph,pGroupMember->GetString("szIdiograph"));

		m_setGroupMember.push_back(pMember);
	}
	return TRUE;
}

BOOL CChatRoom::UpdateRoomMember(IGroupMember* pGroupMember)
{
	if (pGroupMember == NULL ) return false;
	
	GroupMember* pMember = this->GetRoomMemberByUin(pGroupMember->GetLong("dwUin"));
	if (pMember)
	{
		pMember->dwUin = pGroupMember->GetLong("dwUin");
		pMember->dwStatus = pGroupMember->GetLong("dwStatus");
		pMember->dwEntryTime = pGroupMember->GetLong("dwEnterTime");
		strcpy(pMember->szNick,pGroupMember->GetString("szNick"));
		strcpy(pMember->szDomain,pGroupMember->GetString("szDomain"));
		strcpy(pMember->szIdiograph,pGroupMember->GetString("szIdiograph"));
		
		return TRUE;
	}	
	return FALSE;
}
BOOL CChatRoom::DelRoomMember(IGroupInfo* pGroupInfo, IGroupMember* pGroupMember)
{
	if( pGroupInfo == NULL ) return false;
				
	if (m_curGroup->GetLong("dwGroupID") == pGroupInfo->GetLong("dwGroupID"))
		return false;

	if (pGroupMember == NULL ) return false;
	
	int nAmount = m_setGroupMember.size();
	for(int i = nAmount -1;i>=0;i--)
	{
		GroupMember* pMember = this->GetRoomMemberByIndex(pGroupMember->GetLong("dwUin"));
		if (pMember)
		{
			pMember = NULL;
			m_setGroupMember.erase(m_setGroupMember.begin() + i);
			return TRUE;
		}
	}
	return false;
}

GroupMember* CChatRoom::GetRoomMemberByIndex(int nIndex)
{
	int nAmount  = m_setGroupMember.size();
	if (nIndex>=0 && nIndex<nAmount)
	{
		return m_setGroupMember[nIndex];
	}
	return NULL;
}

GroupMember* CChatRoom::GetRoomMemberByUin(int nUin)
{
	int nAmount  = m_setGroupMember.size();
	for(int i=0;i< nAmount;i++)
	{
		GroupMember* pMember = this->GetRoomMemberByIndex(i);
		if (pMember && pMember->dwUin == nUin) 
			return pMember;
	}
	return NULL;
}

void CChatRoom::ClearRoomMembers()
{
	int nAmount = m_setGroupMember.size();
	for(int i=0;i<nAmount;i++)
	{
		GroupMember* pMember =m_setGroupMember[i];
		pMember = NULL;
//		SAFE_DELETE(pMember);
	}
	m_setGroupMember.clear();
}

⌨️ 快捷键说明

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