diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 6172e6d..f70d58f 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -18,7 +18,6 @@ void Player::Init() ); SyncLocToMasterServer(); NotifyOnline(); - AsyncGetFriendList(); } void Player::UnInit() @@ -28,25 +27,39 @@ void Player::UnInit() void Player::Deserialize(const cs::MFUserDB& user_db) { - + for (auto& friend_db : user_db.friends()) { + Friend friendobj; + friendobj.account_id = friend_db.account_id(); + friendobj.nickname = friend_db.nickname(); + friendobj.avatar_url = friend_db.avatar_url(); + friendobj.sex = friend_db.sex(); + friendobj.data_version1 = friend_db.data_version1(); + friendobj.group_id = friend_db.group_id(); + friendobj.crc32_code = a8::openssl::Crc32( + (unsigned char*)account_id.data(), + account_id.size() + );; + friend_hash_[friendobj.account_id] = friendobj; + } } void Player::Serialize(cs::MFUserDB& user_db) { - + for (auto& pair : friend_hash_) { + auto p = user_db.add_friends(); + p->set_account_id(pair.second.account_id); + p->set_nickname(pair.second.nickname); + p->set_avatar_url(pair.second.avatar_url); + p->set_sex(pair.second.sex); + p->set_data_version1(pair.second.data_version1); + p->set_group_id(pair.second.group_id); + } } void Player::_CMFriendList(f8::MsgHdr& hdr, const cs::CMFriendList& msg) { cs::SMFriendList respmsg; - if (friend_list_syncok_) { - FillFriendList(respmsg.mutable_friend_list()); - } else { - if (!reading_friends_list_) { - AsyncGetFriendList(); - } - respmsg.set_error_code(1); - } + FillFriendList(respmsg.mutable_friend_list()); SendMsg(respmsg); } @@ -175,10 +188,6 @@ void Player::NotifyOffline() } -void Player::AsyncGetFriendList() -{ -} - void Player::FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list) { for (auto& pair : friend_hash_) { @@ -261,11 +270,17 @@ void Player::SaveToDB() DBEngine::Instance()-> ExecAsyncScript( conn_info, - "UPDATE `user` SET friend_data='%s', modifytime=%d " + "UPDATE `user` SET friend_data='%s', modifytime=%d, " + " nickname='%s', avatar_url='%s', sex=%d, group_id=%d, data_version1=%d " "WHERE account_id='%s';", { friend_data, App::Instance()->nowtime, + nickname, + avatar_url, + sex, + group_id, + data_version1, account_id }, a8::XParams(), diff --git a/server/imserver/player.h b/server/imserver/player.h index 42914e8..81ab436 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -57,7 +57,6 @@ class Player void MarkDirty(); private: - void AsyncGetFriendList(); void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list); void FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext); void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code); @@ -68,6 +67,4 @@ private: timer_list* dirty_timer_ = nullptr; std::map friend_hash_; - bool reading_friends_list_ = false; - bool friend_list_syncok_ = false; }; diff --git a/server/imserver/types.h b/server/imserver/types.h index bcbaf00..ee2d7c6 100644 --- a/server/imserver/types.h +++ b/server/imserver/types.h @@ -19,6 +19,7 @@ struct Friend std::string avatar_url; int sex = 0; int online = 0; + long long group_id = 0; std::string server_host; int server_port; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index b0032b9..ea128ab 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -39,14 +39,19 @@ message MFGroupDB repeated MFGroupMemberDB members = 1; } -message MFFriendDB1 +message MFFriendDB { - + optional string account_id = 1; + optional string nickname = 2; + optional string avatar_url = 3; + optional int32 sex = 4; + optional int64 group_id = 5; + optional int32 data_version1 = 6; } message MFUserDB { - + repeated MFGroupMemberDB friends = 1; } //