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); }
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); }
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()); }
/********************************************************* 函数名称: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; }