From aa6d5c94d76c2be604773f2fb1706eef36095843 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 2 Jul 2020 15:27:28 +0800 Subject: [PATCH] 1 --- server/imserver/player.cc | 39 +++++++++++++++++++++--------------- server/imserver/player.h | 5 +++-- server/imserver/playermgr.cc | 2 +- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 7f491f0..12171c6 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -379,7 +379,7 @@ void Player::_CMFriendAddBlack(f8::MsgHdr& hdr, const cs::CMFriendAddBlack& msg) SendMsg(notifymsg); } black_hash_[p->base_data.account_id] = p; - RemoveFriend(p->base_data.account_id, true); + InternalRemoveFriend(p->base_data.account_id, true, false); MarkDirty(); } ShowErrorMsg("成功添加到黑名单"); @@ -968,21 +968,7 @@ void Player::AddBlackList(Friend* friendobj) void Player::RemoveFriend(const std::string& account_id, bool need_sync) { - Friend* friendobj = GetFriendById(account_id); - if (friendobj) { - { - cs::SMDeleteFriendNotify notifymsg; - notifymsg.add_user_list(account_id); - SendMsg(notifymsg); - } - if (need_sync) { - SyncHelper::Instance()->SyncDeleteFriend(this, friendobj->base_data.account_id, 0); - } - PlayerMgr::Instance()->UnWatchPlayer(friendobj); - friend_hash_.erase(account_id); - delete friendobj; - MarkDirty(); - } + InternalRemoveFriend(account_id, need_sync, true); } void Player::Update(long long tick) @@ -1469,3 +1455,24 @@ void Player::ShowErrorMsg(const std::string& msg) notifymsg.set_msg(msg); SendMsg(notifymsg); } + +void Player::InternalRemoveFriend(const std::string& account_id, bool need_sync, bool auto_delete) +{ + Friend* friendobj = GetFriendById(account_id); + if (friendobj) { + { + cs::SMDeleteFriendNotify notifymsg; + notifymsg.add_user_list(account_id); + SendMsg(notifymsg); + } + if (need_sync) { + SyncHelper::Instance()->SyncDeleteFriend(this, friendobj->base_data.account_id, 0); + } + PlayerMgr::Instance()->UnWatchPlayer(friendobj); + friend_hash_.erase(account_id); + if (auto_delete) { + delete friendobj; + } + MarkDirty(); + } +} diff --git a/server/imserver/player.h b/server/imserver/player.h index 84e1429..82d352f 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -105,6 +105,8 @@ class Player void Update(long long tick); void FillMFUserInfo(cs::MFUserInfo* user_info); std::set& GetExcludeAccountIds(); + Friend* GetFriendById(const std::string& friend_id); + Friend* GetBlackListById(const std::string& friend_id); const std::string AccountId(); const std::string SessionId(); @@ -116,8 +118,6 @@ private: void FillBlackList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* black_list); void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code); void SaveToDB(a8::XParams param, f8::AsyncDBOnOkFunc on_ok, f8::AsyncDBOnErrorFunc on_error); - Friend* GetFriendById(const std::string& friend_id); - Friend* GetBlackListById(const std::string& friend_id); void FillApplyList(const cs::MFPaging& paging, cs::SMFriendApplyList& respmsg); void MarkDirty(); void OnDataVersion1Change(); @@ -149,6 +149,7 @@ private: void QueryUserOnline(std::vector account_ids); void QueryUserFromDB(); void ShowErrorMsg(const std::string& msg); + void InternalRemoveFriend(const std::string& account_id, bool need_sync, bool auto_delete); private: bool dirty_ = false; diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc index f1f25bc..d8cf711 100644 --- a/server/imserver/playermgr.cc +++ b/server/imserver/playermgr.cc @@ -50,7 +50,7 @@ void PlayerMgr::_SS_IM_SendChatMsg(f8::MsgHdr& hdr, const ss::SS_IM_SendChatMsg& void PlayerMgr::_SS_IM_SendCustomMsg(f8::MsgHdr& hdr, const ss::SS_IM_SendCustomMsg& msg) { Player* hum = GetPlayerByAccountId(msg.target()); - if (hum) { + if (hum && !hum->GetBlackListById(msg.target())) { cs::SMCustomMsgNotify notifymsg; notifymsg.set_sender(msg.context().user_info().base_data().account_id()); notifymsg.set_msg(msg.msg());