From 362de597bb08f15022ae059cefd1959d5ae8fc11 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 Jun 2020 17:01:16 +0800 Subject: [PATCH] 1 --- server/imserver/IMConn.h | 6 +- server/imserver/player.cc | 138 +++++++++++++++++-------- server/imserver/player.h | 2 + server/imserver/types.h | 3 +- server/tools/protobuild/ss_proto.proto | 7 ++ 5 files changed, 110 insertions(+), 46 deletions(-) diff --git a/server/imserver/IMConn.h b/server/imserver/IMConn.h index a0746a6..e5334e4 100644 --- a/server/imserver/IMConn.h +++ b/server/imserver/IMConn.h @@ -27,9 +27,13 @@ class IMConn bool Connected(); template - void SendMsg(int socket_handle, T& msg) + void SendMsg(T& msg) { static int msgid = f8::Net_GetMessageId(msg); + SendMsg(tcp_client_, msgid, msg); + } + void SendMsg(int msgid, ::google::protobuf::Message& msg) + { f8::Net_SendMsg(tcp_client_, 0, msgid, msg); #ifdef DEBUG f8::DumpMsgToLog(msg, "<<<<<<GetConnInfo(friend_crc32_code); - DBEngine::Instance()-> - ExecAsyncScript( - conn_info, - "INSERT INTO `friend_apply`(applyid, target_id, sender_id, sender_nickmake, " - " sender_avatar_url, sender_sex, sender_group_id, sender_data_version1, " - " createtime)" - "VALUES(%d, '%s', '%s', '%s', '%s', %d, %d, %d, %d);", - { - App::Instance()->NewUUID(), - msg.friend_id(), - data.base_data.account_id, - data.base_data.nickname, - data.base_data.avatar_url, - data.base_data.sex, - data.base_data.group_id, - data.base_data.data_version1, - App::Instance()->nowtime - }, - a8::XParams(), - on_ok, - on_error, - friend_crc32_code - ); + DBEngine::Instance()->ExecAsyncScript + ( + conn_info, + "INSERT INTO `friend_apply`(applyid, target_id, sender_id, sender_nickmake, " + " sender_avatar_url, sender_sex, sender_group_id, sender_data_version1, " + " createtime)" + "VALUES(%d, '%s', '%s', '%s', '%s', %d, %d, %d, %d);", + { + App::Instance()->NewUUID(), + msg.friend_id(), + data.base_data.account_id, + data.base_data.nickname, + data.base_data.avatar_url, + data.base_data.sex, + data.base_data.group_id, + data.base_data.data_version1, + App::Instance()->nowtime + }, + a8::XParams(), + on_ok, + on_error, + friend_crc32_code + ); } } @@ -198,24 +201,24 @@ void Player::_CMFriendApplyList(f8::MsgHdr& hdr, const cs::CMFriendApplyList& ms cs::MFPaging* paging_copy = nullptr; *paging_copy = msg.paging(); a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(crc32_code); - DBEngine::Instance()-> - ExecAsyncScript( - conn_info, - "SELECT idx, applyid, target_id, sender_id, sender_nickname, " - " sender_avatar_url, sender_sex, sender_group_id, sender_data_version1 " - "FROM friend_apply WHERE %d > idx AND target_id='%s';", - { - last_apply_idx_, - data.base_data.account_id - }, - a8::XParams() - .SetSender(data.base_data.account_id) - .SetParam1(hdr.socket_handle) - .SetParam2(paging_copy), - on_ok, - on_error, - crc32_code - ); + DBEngine::Instance()->ExecAsyncScript + ( + conn_info, + "SELECT idx, applyid, target_id, sender_id, sender_nickname, " + " sender_avatar_url, sender_sex, sender_group_id, sender_data_version1 " + "FROM friend_apply WHERE %d > idx AND target_id='%s';", + { + last_apply_idx_, + data.base_data.account_id + }, + a8::XParams() + .SetSender(data.base_data.account_id) + .SetParam1(hdr.socket_handle) + .SetParam2(paging_copy), + on_ok, + on_error, + crc32_code + ); } void Player::_CMFriendAgree(f8::MsgHdr& hdr, const cs::CMFriendAgree& msg) @@ -514,22 +517,69 @@ void Player::NotifyOffline() void Player::OnDataVersion1Change() { - + if (!update_user_info_timer_) { + update_user_info_timer_ = a8::Timer::Instance()->AddDeadLineTimerAndAttach + ( + 1000 * 3, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Player* hum = (Player*)param.sender.GetUserData(); + hum->InternalUpdateUserInfo(); + }, + &timer_attacher.timer_list_, + [] (const a8::XParams& param) + { + Player* hum = (Player*)param.sender.GetUserData(); + hum->update_user_info_timer_ = nullptr; + } + ); + } } void Player::OnTempCustomDataChange() { - + if (!update_user_info_timer_) { + update_user_info_timer_ = a8::Timer::Instance()->AddDeadLineTimerAndAttach + ( + 1000 * 3, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Player* hum = (Player*)param.sender.GetUserData(); + hum->InternalUpdateUserInfo(); + }, + &timer_attacher.timer_list_, + [] (const a8::XParams& param) + { + Player* hum = (Player*)param.sender.GetUserData(); + hum->update_user_info_timer_ = nullptr; + } + ); + } } void Player::InternalSendSSMsg(const Friend& friend_data, int msgid, ::google::protobuf::Message& msg) { - + if (friend_data.server_key.empty()) { + return; + } + IMConn* conn = IMConnMgr::Instance()->GetConnByKey(friend_data.server_key); + if (conn) { + conn->SendMsg(msgid, msg); + } } const std::string Player::AccountId() { return data.base_data.account_id; } + +void Player::InternalUpdateUserInfo() +{ + +} diff --git a/server/imserver/player.h b/server/imserver/player.h index 04f17d6..5f203a3 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -109,10 +109,12 @@ private: void InternalSendSSMsg(const Friend& friend_data, int msgid, ::google::protobuf::Message& msg); + void InternalUpdateUserInfo(); private: bool dirty_ = false; timer_list* dirty_timer_ = nullptr; + timer_list* update_user_info_timer_ = nullptr; long long last_apply_idx_ = 0; std::map friend_hash_; diff --git a/server/imserver/types.h b/server/imserver/types.h index 763c895..b03e946 100644 --- a/server/imserver/types.h +++ b/server/imserver/types.h @@ -30,7 +30,8 @@ struct Friend std::string server_host; int server_port; - long long server_ident = 0; + std::string server_key; + long long server_instance_id = 0; unsigned int crc32_code = 0; }; diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index da61e51..6b4cb93 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -1,5 +1,7 @@ package ss; +import "cs_proto.proto"; + message MFIMMsgConext { optional string account_id = 1; //账号id @@ -171,3 +173,8 @@ message SS_IM_IMServerList message SS_MS_IMServerList { } + +message SS_IM_UpdateUserInfo +{ + optional cs.MFUserInfo user_info = 1; +}