diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 5726cfb..e5f62f5 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -492,8 +492,10 @@ void Player::_SS_IM_FriendAgreeRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendAg } QueryUserOnline({friendobj->base_data.account_id}); } else { - SyncHelper::Instance()->SyncDeleteFriend(this, - msg.context().user_info().base_data().account_id()); + SyncHelper::Instance()->SyncDeleteFriend + (this, + msg.context().user_info().base_data().account_id(), + 1); } } RemoveHandledApply(); @@ -531,7 +533,34 @@ void Player::_SS_IM_FriendAgreeRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendAg void Player::_SS_IM_FriendDeleteRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendDeleteRequest& msg) { if (GetFriendById(msg.context().user_info().base_data().account_id())) { + #ifdef DEBUG + a8::UdpLog::Instance()->Debug("SS_IM_FriendDeleteRequest %s", + { + msg.context().user_info().base_data().account_id() + }); + #endif RemoveFriend(msg.context().user_info().base_data().account_id(), false); + a8::Timer::Instance()->AddDeadLineTimerAndAttach + ( + 1000 * 2, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Player* hum = (Player*)param.sender.GetUserData(); + cs::SMFriendAgree respmsg; + respmsg.set_errcode(4); + respmsg.set_errmsg("添加失败,对方的好友数已达到上限"); + hum->SendMsg(respmsg); +#ifdef DEBUG + a8::UdpLog::Instance()->Debug("添加失败,对方的好友数已达到上限 %s", + { + hum->AccountId() + }); +#endif + }, + &timer_attacher.timer_list_ + ); } f8::MsgHdr* hdr_copy = hdr.Clone(); ss::SS_IM_FriendDeleteRequest* msg_copy = new ss::SS_IM_FriendDeleteRequest; @@ -805,7 +834,7 @@ void Player::RemoveFriend(const std::string& account_id, bool need_sync) SendMsg(notifymsg); } if (need_sync) { - SyncHelper::Instance()->SyncDeleteFriend(this, friendobj->base_data.account_id); + SyncHelper::Instance()->SyncDeleteFriend(this, friendobj->base_data.account_id, 0); } PlayerMgr::Instance()->UnWatchPlayer(friendobj); friend_hash_.erase(account_id); @@ -1025,7 +1054,7 @@ void Player::OnFriendAgreeEvent(Event& event) return; } if (!CanAddFriend(event.sender_id)) { - SyncHelper::Instance()->SyncDeleteFriend(this, event.sender_id); + SyncHelper::Instance()->SyncDeleteFriend(this, event.sender_id, 0); return; } Friend* friendobj = new Friend; @@ -1275,4 +1304,3 @@ void Player::QueryUserFromDB() } } } - diff --git a/server/imserver/player.h b/server/imserver/player.h index 724d85d..e7df6be 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -139,6 +139,7 @@ private: void QueryUserOnline(std::vector account_ids); void QueryUserFromDB(); + private: bool dirty_ = false; timer_list* dirty_timer_ = nullptr; diff --git a/server/imserver/synchelper.cc b/server/imserver/synchelper.cc index ee4970d..1c8e45b 100644 --- a/server/imserver/synchelper.cc +++ b/server/imserver/synchelper.cc @@ -51,11 +51,12 @@ void SyncHelper::SyncNewFriend(Player* hum, const std::string& target_id) ); } -void SyncHelper::SyncDeleteFriend(Player* hum, const std::string& target_id) +void SyncHelper::SyncDeleteFriend(Player* hum, const std::string& target_id, int reason) { ss::SS_IM_FriendDeleteRequest* notifymsg = new ss::SS_IM_FriendDeleteRequest(); hum->FillIMMsgConext(notifymsg->mutable_context()); notifymsg->set_target_id(target_id); + notifymsg->set_reason(reason); BroadcastIMConnMsg(*notifymsg); pending_request_hash_[notifymsg->context().seqid()] = a8::Timer::Instance()->AddDeadLineTimer diff --git a/server/imserver/synchelper.h b/server/imserver/synchelper.h index 12b9442..bb48566 100644 --- a/server/imserver/synchelper.h +++ b/server/imserver/synchelper.h @@ -24,7 +24,7 @@ public: void UnInit(); void SyncNewFriend(Player* hum, const std::string& target_id); - void SyncDeleteFriend(Player* hum, const std::string& target_id); + void SyncDeleteFriend(Player* hum, const std::string& target_id, int reason); void SyncUpdateFriend(Player* hum, const std::string& target_id); void SyncApplyFriend(Player* hum, const std::string& target_id); diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index 581a734..b0d94ff 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -221,6 +221,7 @@ message SS_IM_FriendDeleteRequest { optional MFIMMsgConext context = 1; optional string target_id = 3; + optional int32 reason = 4; } message SS_IM_FriendDeleteResponse