This commit is contained in:
aozhiwei 2020-06-17 19:17:50 +08:00
parent 48e1d01d6d
commit 3abbe22431
4 changed files with 30 additions and 30 deletions

View File

@ -36,27 +36,27 @@ void Player::UnInit()
SaveToDB(); SaveToDB();
timer_attacher.ClearTimerList(); timer_attacher.ClearTimerList();
for (auto& pair : friend_hash_) { for (auto& pair : friend_hash_) {
if (!list_empty(&pair.second.watch_node)) { if (!list_empty(&pair.second->watch_node)) {
PlayerMgr::Instance()->UnWatchPlayer(pair.second); PlayerMgr::Instance()->UnWatchPlayer(pair.second);
delete pair.second;
} }
} }
friend_hash_.clear();
} }
void Player::Deserialize(const ss::MFUserDB& user_db) void Player::Deserialize(const ss::MFUserDB& user_db)
{ {
for (auto& friend_db : user_db.friends()) { for (auto& friend_db : user_db.friends()) {
Friend friendobj; Friend* friendobj = new Friend;
TypeConvert::Convert(friend_db.base_data(), friendobj.base_data); TypeConvert::Convert(friend_db.base_data(), friendobj->base_data);
friendobj.crc32_code = a8::openssl::Crc32( friendobj->crc32_code = a8::openssl::Crc32
(unsigned char*)myself.base_data.account_id.data(), (
myself.base_data.account_id.size() (unsigned char*)friendobj->base_data.account_id.data(),
);; friendobj->base_data.account_id.size()
friend_hash_[friendobj.base_data.account_id] = friendobj; );
} friendobj->hum = this;
for (auto& pair : friend_hash_) { friend_hash_[friendobj->base_data.account_id] = friendobj;
pair.second.hum = this; PlayerMgr::Instance()->WatchPlayer(friendobj);
INIT_LIST_HEAD(&pair.second.watch_node);
PlayerMgr::Instance()->WatchPlayer(pair.second);
} }
} }
@ -64,7 +64,7 @@ void Player::Serialize(ss::MFUserDB& user_db)
{ {
for (auto& pair : friend_hash_) { for (auto& pair : friend_hash_) {
auto p = user_db.add_friends(); auto p = user_db.add_friends();
TypeConvert::Convert(pair.second.base_data, *(p->mutable_base_data())); TypeConvert::Convert(pair.second->base_data, *(p->mutable_base_data()));
} }
} }
@ -438,8 +438,8 @@ void Player::FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserIn
} }
for (auto& pair : friend_hash_) { for (auto& pair : friend_hash_) {
auto p = friend_list->Add(); auto p = friend_list->Add();
TypeConvert::Convert(pair.second.base_data, *(p->mutable_base_data())); TypeConvert::Convert(pair.second->base_data, *(p->mutable_base_data()));
TypeConvert::Convert(pair.second.temp_custom_data, *(p->mutable_temp_custom_data())); TypeConvert::Convert(pair.second->temp_custom_data, *(p->mutable_temp_custom_data()));
} }
} }
@ -543,7 +543,7 @@ void Player::SaveToDB()
Friend* Player::GetFriendById(const std::string& friend_id) Friend* Player::GetFriendById(const std::string& friend_id)
{ {
auto itr = friend_hash_.find(friend_id); auto itr = friend_hash_.find(friend_id);
return itr != friend_hash_.end() ? &itr->second : nullptr; return itr != friend_hash_.end() ? itr->second : nullptr;
} }
void Player::FillApplyList(const cs::MFPaging& paging, cs::SMFriendApplyList& respmsg) void Player::FillApplyList(const cs::MFPaging& paging, cs::SMFriendApplyList& respmsg)

View File

@ -121,7 +121,7 @@ private:
timer_list* update_user_info_timer_ = nullptr; timer_list* update_user_info_timer_ = nullptr;
long long last_apply_idx_ = 0; long long last_apply_idx_ = 0;
std::map<std::string, Friend> friend_hash_; std::map<std::string, Friend*> friend_hash_;
std::map<long long, FriendApply*> apply_hash_; std::map<long long, FriendApply*> apply_hash_;
std::list<FriendApply> apply_list_; std::list<FriendApply> apply_list_;
}; };

View File

@ -88,32 +88,32 @@ void PlayerMgr::_CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg)
AsyncLogin1(msg); AsyncLogin1(msg);
} }
void PlayerMgr::WatchPlayer(Friend& friend_data) void PlayerMgr::WatchPlayer(Friend* friend_data)
{ {
#ifdef DEBUG #ifdef DEBUG
if (!list_empty(&friend_data.watch_node)) { if (!list_empty(&friend_data->watch_node)) {
abort(); abort();
} }
#endif #endif
auto itr = watch_players_.find(friend_data.base_data.account_id); auto itr = watch_players_.find(friend_data->base_data.account_id);
if (itr == watch_players_.end()) { if (itr == watch_players_.end()) {
watch_players_[friend_data.base_data.account_id] = list_head(); watch_players_[friend_data->base_data.account_id] = list_head();
itr = watch_players_.find(friend_data.base_data.account_id); itr = watch_players_.find(friend_data->base_data.account_id);
if (itr == watch_players_.end()) { if (itr == watch_players_.end()) {
abort(); abort();
} }
INIT_LIST_HEAD(&itr->second); INIT_LIST_HEAD(&itr->second);
} }
list_add(&friend_data.watch_node, &itr->second); list_add(&friend_data->watch_node, &itr->second);
} }
void PlayerMgr::UnWatchPlayer(Friend& friend_data) void PlayerMgr::UnWatchPlayer(Friend* friend_data)
{ {
if (!list_empty(&friend_data.watch_node)) { if (!list_empty(&friend_data->watch_node)) {
list_del_init(&friend_data.watch_node); list_del_init(&friend_data->watch_node);
} }
{ {
auto itr = watch_players_.find(friend_data.base_data.account_id); auto itr = watch_players_.find(friend_data->base_data.account_id);
if (itr != watch_players_.end()) { if (itr != watch_players_.end()) {
if (list_empty(&itr->second)) { if (list_empty(&itr->second)) {
watch_players_.erase(itr); watch_players_.erase(itr);

View File

@ -41,8 +41,8 @@ class PlayerMgr : public a8::Singleton<PlayerMgr>
Player* GetPlayerByAccountId(const std::string& account_id); Player* GetPlayerByAccountId(const std::string& account_id);
void ReBindSocket(int socket_handle, Player* hum); void ReBindSocket(int socket_handle, Player* hum);
void OnWSProxyDisconnect(a8::XParams& param); void OnWSProxyDisconnect(a8::XParams& param);
void WatchPlayer(Friend& friend_data); void WatchPlayer(Friend* friend_data);
void UnWatchPlayer(Friend& friend_data); void UnWatchPlayer(Friend* friend_data);
int OnlineNum(); int OnlineNum();
private: private: