From bf4d78aeaaf0737f23e569e6d7a459e2105ea8bb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 8 Dec 2020 15:38:16 +0800 Subject: [PATCH] 1 --- server/imserver/constant.h | 7 ++++++ server/imserver/handlermgr.cc | 2 ++ server/imserver/player.cc | 32 +++++++++++++++++++++++--- server/imserver/player.h | 5 ++++ server/imserver/playermgr.h | 2 ++ server/tools/protobuild/ss_proto.proto | 7 +++--- 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/server/imserver/constant.h b/server/imserver/constant.h index b3947aa..9914565 100644 --- a/server/imserver/constant.h +++ b/server/imserver/constant.h @@ -75,6 +75,13 @@ enum GuildMemberUpdateReason kGuildUpdateReasonUpdate = 4, }; +enum ChatChannel_e +{ + kCCWorld = 0, + kCCFriend = 1, + kCCGuild = 2 +}; + const char* const PROJ_NAME_FMT = "friend_imserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index 71a6e71..c378bea 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -102,6 +102,8 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendIdList); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMSendChatMsg); + RegisterNetMsgHandler(&wsmsghandler, &Player::_CMReadMsgAndOpenChatNotify); + RegisterNetMsgHandler(&wsmsghandler, &Player::_CMCloseChatNotify); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMSendCustomMsg); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMDirtyWordCheck); diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 6a5e497..bee0d8f 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -548,16 +548,33 @@ void Player::_CMFriendIdList(f8::MsgHdr& hdr, const cs::CMFriendIdList& msg) void Player::_CMSendChatMsg(f8::MsgHdr& hdr, const cs::CMSendChatMsg& msg) { - #if 0 ss::SS_IM_SendChatMsg ss_msg; FillIMMsgConext(ss_msg.mutable_context()); ss_msg.set_chat_channel(msg.chat_channel()); - ss_msg.set_msg(msg.msg()); + ss_msg.set_target(msg.target()); + ss_msg.set_msg_type(msg.msg_type()); + ss_msg.set_msg_body(msg.msg_body()); Friend* friend_data = GetFriendById(msg.target()); if (friend_data) { SendSSMsg(*friend_data, ss_msg); } - #endif +} + +void Player::_CMReadMsgAndOpenChatNotify(f8::MsgHdr& hdr, const cs::CMReadMsgAndOpenChatNotify& msg) +{ + if (IsValidChatChannel(msg.curr_channel())) { + chat_channel_ = msg.curr_channel(); + } + for (auto& pair : msg.last_ids()) { + if (IsValidChatChannel(pair.key())) { + chat_last_ids_hash_[pair.key()] = pair.val(); + } + } +} + +void Player::_CMCloseChatNotify(f8::MsgHdr& hdr, const cs::CMCloseChatNotify& msg) +{ + chat_channel_ = -1; } void Player::_CMSendCustomMsg(f8::MsgHdr& hdr, const cs::CMSendCustomMsg& msg) @@ -2252,3 +2269,12 @@ void Player::SyncGuildNewApply(long long guild_id) ss::SSMessageId_e::_SS_IM_GuildNewApply, msg); } + +bool Player::IsValidChatChannel(int chat_channel) +{ + if (chat_channel >= 0 && chat_channel < 2) { + return true; + } else { + return false; + } +} diff --git a/server/imserver/player.h b/server/imserver/player.h index 04b35de..f9909dc 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -94,6 +94,8 @@ class Player void _CMFriendIdList(f8::MsgHdr& hdr, const cs::CMFriendIdList& msg); void _CMSendChatMsg(f8::MsgHdr& hdr, const cs::CMSendChatMsg& msg); + void _CMReadMsgAndOpenChatNotify(f8::MsgHdr& hdr, const cs::CMReadMsgAndOpenChatNotify& msg); + void _CMCloseChatNotify(f8::MsgHdr& hdr, const cs::CMCloseChatNotify& msg); void _CMSendCustomMsg(f8::MsgHdr& hdr, const cs::CMSendCustomMsg& msg); void _CMDirtyWordCheck(f8::MsgHdr& hdr, const cs::CMDirtyWordCheck& msg); @@ -197,6 +199,7 @@ private: void SyncGuildMemberInfo(); void SyncGuildRedPoint(); void SyncGuildNewApply(long long guild_id); + bool IsValidChatChannel(int chat_channel); private: bool dirty_ = false; @@ -212,6 +215,8 @@ private: std::set exclude_account_ids_; std::string user_sign_; int last_create_guild_time_ = 0; + int chat_channel_ = -1; + std::map chat_last_ids_hash_; std::map friend_hash_; std::map black_hash_; diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h index 9e06527..c178390 100644 --- a/server/imserver/playermgr.h +++ b/server/imserver/playermgr.h @@ -11,6 +11,8 @@ namespace ss class SS_WSP_SocketDisconnect; class SS_MS_PushUserList; class SS_IM_SendChatMsg; + class SS_IM_ReadMsgAndOpenChatNotify; + class SS_IM_CloseChatNotify; class SS_IM_SendCustomMsg; class SS_IM_UpdateUserInfo; class SS_IM_FriendAgreeRequest; diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index 0b1742c..ad2c179 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -238,9 +238,10 @@ message SS_MS_PushUserList message SS_IM_SendChatMsg { optional MFIMMsgConext context = 1; - optional string target = 2; - optional int32 chat_channel = 3; - optional string msg = 4; + optional int32 chat_channel = 2; + optional string target = 3; + optional int32 msg_type = 4; + optional string msg_body = 5; } message SS_IM_SendCustomMsg