Ejemplo n.º 1
0
void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid friend_guid, bool broadcast)
{
    uint32 friend_lowguid = friend_guid.GetCounter();

    FriendInfo fi;

    WorldPacket data;
    MakeFriendStatusPacket(result, friend_lowguid, data);
    GetFriendInfo(player, friend_lowguid, fi);

    switch (result)
    {
        case FRIEND_ADDED_ONLINE:
        case FRIEND_ONLINE:
            data << uint8(fi.Status);
            data << uint32(fi.Area);
            data << uint32(fi.Level);
            data << uint32(fi.Class);
            break;
        default:
            break;
    }

    if (broadcast)
        BroadcastToFriendListers(player, data);
    else
        player->GetSession()->SendPacket(data);
}
Ejemplo n.º 2
0
void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, uint32 friendGuid, bool broadcast)
{
    FriendInfo fi;

    WorldPacket data;
    MakeFriendStatusPacket(result, friendGuid, &data);
    GetFriendInfo(player, friendGuid, fi);
    switch (result)
    {
        case FRIEND_ADDED_OFFLINE:
        case FRIEND_ADDED_ONLINE:
            data << fi.Note;
            break;
        default:
            break;
    }

    switch (result)
    {
        case FRIEND_ADDED_ONLINE:
        case FRIEND_ONLINE:
            data << uint8(fi.Status);
            data << uint32(fi.Area);
            data << uint32(fi.Level);
            data << uint32(fi.Class);
            break;
        default:
            break;
    }

    if (broadcast)
        BroadcastToFriendListers(player, &data);
    else
        player->GetSession()->SendPacket(&data);
}
Ejemplo n.º 3
0
void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friendGuid, bool broadcast /*= false*/)
{
    FriendInfo fi;
    GetFriendInfo(player, friendGuid, fi);

    WorldPackets::Social::FriendStatus friendStatus;
    friendStatus.Initialize(friendGuid, result, fi);

    if (broadcast)
        BroadcastToFriendListers(player, friendStatus.Write());
    else
        player->SendDirectMessage(friendStatus.Write());
}
Ejemplo n.º 4
0
/*********************************************************
函数名称:RecvMsg
功能描述:接收信息
作者:    余志荣
创建日期:2016-08-03
参数说明:pSocket -- 接收到消息的pSocket
返 回 值:接收到的字节数
*********************************************************/
int CSocketServerDlg::RecvMsg(CChatSocket * pSocket)
{
	int iBufSize = MSG_SIZE_MAX; // 接收的最大字节数
	struct MSG_T *msg = new struct MSG_T;
	int iRes = pSocket->Receive((char *)msg, iBufSize);	
	if(iRes == SOCKET_ERROR) // 接收失败
	{
		//MessageBox(_T("SOCKET_ERROR"));
		OutputInfo(_T("SOCKET_ERROR"));
		return 0;
	}
	
	switch(msg->nType)
	{
	// 登陆/下线
	case LOGIN: // 登录消息
		Login((struct MSG_LOGIN *)msg, pSocket);
		break;
	case LOGIN_OUT: // 下线消息
		LoginOut((struct MSG_LOGIN *)msg, pSocket);
		break;
	case GET_FRIEND_LIST: // 请求获得好友列表
		GetFriendList((struct MSG_USERINFO *)msg, pSocket);break;
	case GET_ALL_FRIEND_INFO: // 请求获得全部好友的基本信息
		GetAllFriendInfo((struct MSG_FRND_INFO*)msg, pSocket);break;
	case SET_USER_STATUS: // 设置在线状态
		SetUserStatus((struct MSG_USERINFO *)msg, pSocket);break;
	
	// 注册
	case REGISTER: // 注册消息
		Register((struct MSG_REGISTER *)msg, pSocket);
		break;

	// 一对一聊天
	case GET_FRIEND_INFO: // 请求获得好友信息
		GetFriendInfo((struct MSG_USERINFO *)msg, pSocket);break;
	case CHATING_TEXT_MSG: // 聊天消息
		RelayChatMsg((struct MSG_TRANSPOND *)msg, pSocket);break;
	
	// 增删好友
	case ADD_FRIEND_REQUEST: // 添加好友请求
		RelayChatMsg((struct MSG_TRANSPOND *)msg, pSocket);break;
	case ADD_FRIEND_ANSWER: // 添加请求回应
		AddFriend((struct MSG_TRANSPOND *)msg, pSocket);break;
	case DELETE_FRIEND: // 删除好友
		DeleteFriend((MSG_MAKE_FRIEND *)msg, pSocket);break;
	case GET_STRANGER_INFO: // 请求获得陌生人信息
		GetStrangerInfo((struct MSG_USERINFO *)msg, pSocket);break;

	
	// 心跳包
	case HEARTBEAT:
		pSocket->Send(msg, sizeof(MSG_SYS));
		//TRACE(pSocket->m_userID);
		//TRACE("\n");
		break;
	
	// 文件传输
	case MESSAGE_FILE_REQUEST: // 发送请求
		FileTransRequest((MSG_FILE_REQUEST*)msg);
		break;
	case MESSAGE_FILE_AGREE: // 同意发送
	case MESSAGE_FILE_REFUSE: // 拒绝发送
	case MESSAGE_FILE_ERROR: // 出现错误
		FileTransAnswer((MSG_FILE_REQUEST*)msg);
		break;
	case FILE_TRANS_SOCKET:
		strcpy_s(pSocket->m_userID, ((MSG_SYS*)msg)->nID);
		AddToFileSocketList(pSocket);
		break;
	case MESSAGE_FILE_TRANS_BEGIN:
	case MESSAGE_FILE_TRANS_END:
		FileTransOpera((MSG_FILE_OPERA *)msg, pSocket);
		//FileTransRelay((MSG_FILE_REQUEST*)msg);// (未使用)
		break;
	case MESSAGE_FILE_CONTENT:
		FileTransRelay((MSG_FILE_CONTENT*)msg);
		break;



	default:
		//MessageBox(L"未定义的数据类型!");

		break;
	}
	return iRes;
}