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();
timer_attacher.ClearTimerList();
for (auto& pair : friend_hash_) {
if (!list_empty(&pair.second.watch_node)) {
if (!list_empty(&pair.second->watch_node)) {
PlayerMgr::Instance()->UnWatchPlayer(pair.second);
delete pair.second;
}
}
friend_hash_.clear();
}
void Player::Deserialize(const ss::MFUserDB& user_db)
{
for (auto& friend_db : user_db.friends()) {
Friend friendobj;
TypeConvert::Convert(friend_db.base_data(), friendobj.base_data);
friendobj.crc32_code = a8::openssl::Crc32(
(unsigned char*)myself.base_data.account_id.data(),
myself.base_data.account_id.size()
);;
friend_hash_[friendobj.base_data.account_id] = friendobj;
}
for (auto& pair : friend_hash_) {
pair.second.hum = this;
INIT_LIST_HEAD(&pair.second.watch_node);
PlayerMgr::Instance()->WatchPlayer(pair.second);
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);
}
}
@ -64,7 +64,7 @@ void Player::Serialize(ss::MFUserDB& user_db)
{
for (auto& pair : friend_hash_) {
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_) {
auto p = friend_list->Add();
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->base_data, *(p->mutable_base_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)
{
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)

View File

@ -121,7 +121,7 @@ private:
timer_list* update_user_info_timer_ = nullptr;
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::list<FriendApply> apply_list_;
};

View File

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

View File

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