From c471082c43740588accb694679aab9932522f69f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 18 Jun 2020 16:35:55 +0800 Subject: [PATCH] 1 --- server/imserver/player.cc | 31 ++++++++++--------------------- server/imserver/player.h | 6 +++--- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/server/imserver/player.cc b/server/imserver/player.cc index c163196..5761ddf 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -51,14 +51,7 @@ void Player::Deserialize(const ss::MFUserDB& user_db) for (auto& friend_db : user_db.friends()) { Friend* friendobj = new Friend; TypeConvert::Convert(friend_db.base_data(), friendobj->base_data); - friendobj->crc32_code = a8::openssl::Crc32 - ( - (unsigned char*)friendobj->base_data.account_id.data(), - friendobj->base_data.account_id.size() - ); - friendobj->hum = this; - friend_hash_[friendobj->base_data.account_id] = friendobj; - PlayerMgr::Instance()->WatchPlayer(friendobj); + AddFriend(friendobj); } } @@ -240,15 +233,11 @@ void Player::_CMFriendAgree(f8::MsgHdr& hdr, const cs::CMFriendAgree& msg) } Friend* friendobj = new Friend; TypeConvert::Convert(msg.apply().base_data(), friendobj->base_data); - friendobj->crc32_code = a8::openssl::Crc32 - ( - (unsigned char*)friendobj->base_data.account_id.data(), - friendobj->base_data.account_id.size() - ); - friendobj->hum = this; - friend_hash_[friendobj->base_data.account_id] = friendobj; - NotifyUserInfoUpdate(friendobj); - PlayerMgr::Instance()->WatchPlayer(friendobj); + if (AddFriend(friendobj) == 0) { + NotifyUserInfoUpdate(friendobj); + } else { + delete friendobj; + } SendMsg(respmsg); MarkDirty(); #if 1 @@ -707,11 +696,9 @@ void Player::InternalSendSSMsg(const Friend& friend_data, #endif } -void Player::AddFriend(Friend* p) +int Player::AddFriend(Friend* friendobj) { - if (!GetFriendById(p->base_data.account_id)) { - Friend* friendobj = new Friend; - *friendobj = *p; + if (!GetFriendById(friendobj->base_data.account_id)) { INIT_LIST_HEAD(&friendobj->watch_node); friendobj->crc32_code = a8::openssl::Crc32 ( @@ -722,7 +709,9 @@ void Player::AddFriend(Friend* p) friend_hash_[friendobj->base_data.account_id] = friendobj; NotifyUserInfoUpdate(friendobj); PlayerMgr::Instance()->WatchPlayer(friendobj); + return 0; } + return -1; } void Player::RemoveFriend(const std::string& account_id) diff --git a/server/imserver/player.h b/server/imserver/player.h index 3603b04..253867d 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -94,9 +94,6 @@ class Player void NotifyOnline(); void NotifyOffline(); void NotifyUserInfoUpdate(Friend* friend_data); - void PushFriendList(); - void AddFriend(Friend* friendobj); - void RemoveFriend(const std::string& account_id); const std::string AccountId(); @@ -115,6 +112,9 @@ private: int msgid, ::google::protobuf::Message& msg); void InternalUpdateUserInfo(); + int AddFriend(Friend* friendobj); + void RemoveFriend(const std::string& account_id); + void PushFriendList(); private: bool dirty_ = false;