diff --git a/server/imserver/constant.h b/server/imserver/constant.h index e4627da..dbd6f56 100644 --- a/server/imserver/constant.h +++ b/server/imserver/constant.h @@ -42,3 +42,5 @@ const char* const EVENT_FRIEND_DELETE = "friend.delete"; const int MAX_INSTANCE_ID = 1023; +const int MAX_FRIEND_NUM = 50; +const int DAILY_JOIN_FRIEND_TIMES = 100; diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 6516615..f648c5d 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -786,6 +786,11 @@ const std::string Player::AccountId() return myself.base_data.account_id; } +int Player::GetFriendNum() +{ + return friend_hash_.size(); +} + void Player::InternalUpdateUserInfo() { ss::SS_IM_UpdateUserInfo ss_msg; @@ -927,6 +932,14 @@ void Player::ProcessEvent() if (processed_events.size() > 100) { break; } + Event& event = pair.second; + if (event.event_name == EVENT_FRIEND_AGREE) { + OnFriendAgreeEvent(event); + DBHelper::Instance()->SetEventStatus(event.idx, AccountId(), 1); + } else if (event.event_name == EVENT_FRIEND_DELETE) { + OnFriendDeleteEvent(event); + DBHelper::Instance()->SetEventStatus(event.idx, AccountId(), 1); + } processed_events.push_back(pair.first); } for (long long event_id : processed_events) { @@ -936,10 +949,18 @@ void Player::ProcessEvent() void Player::OnFriendAgreeEvent(Event& event) { - + if (GetFriendById(event.sender_id)) { + return; + } + if (GetFriendNum() >= MAX_FRIEND_NUM) { + return; + } } void Player::OnFriendDeleteEvent(Event& event) { - + if (!GetFriendById(event.sender_id)) { + return; + } + RemoveFriend(event.sender_id); } diff --git a/server/imserver/player.h b/server/imserver/player.h index 94e17d5..ed5919c 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -101,6 +101,7 @@ class Player void Update(long long tick); const std::string AccountId(); + int GetFriendNum(); private: void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list);