diff --git a/pkg/rpcclient/msg.go b/pkg/rpcclient/msg.go index 47958518a..c9cb2d9de 100644 --- a/pkg/rpcclient/msg.go +++ b/pkg/rpcclient/msg.go @@ -56,13 +56,54 @@ func newContentTypeConf() map[int32]config.NotificationConf { } } +func newSessionTypeConf() map[int32]int32 { + return map[int32]int32{ + // group + constant.GroupCreatedNotification: constant.SuperGroupChatType, + constant.GroupInfoSetNotification: constant.SuperGroupChatType, + constant.JoinGroupApplicationNotification: constant.SuperGroupChatType, + constant.MemberQuitNotification: constant.SingleChatType, + constant.GroupApplicationAcceptedNotification: constant.SingleChatType, + constant.GroupApplicationRejectedNotification: constant.SingleChatType, + constant.GroupOwnerTransferredNotification: constant.SuperGroupChatType, + constant.MemberKickedNotification: constant.SuperGroupChatType, + constant.MemberInvitedNotification: constant.SuperGroupChatType, + constant.MemberEnterNotification: constant.SuperGroupChatType, + constant.GroupDismissedNotification: constant.SuperGroupChatType, + constant.GroupMutedNotification: constant.SuperGroupChatType, + constant.GroupCancelMutedNotification: constant.SuperGroupChatType, + constant.GroupMemberMutedNotification: constant.SuperGroupChatType, + constant.GroupMemberCancelMutedNotification: constant.SuperGroupChatType, + constant.GroupMemberInfoSetNotification: constant.SuperGroupChatType, + constant.GroupMemberSetToAdminNotification: constant.SuperGroupChatType, + constant.GroupMemberSetToOrdinaryUserNotification: constant.SuperGroupChatType, + // user + constant.UserInfoUpdatedNotification: constant.SingleChatType, + // friend + constant.FriendApplicationNotification: constant.SingleChatType, + constant.FriendApplicationApprovedNotification: constant.SingleChatType, + constant.FriendApplicationRejectedNotification: constant.SingleChatType, + constant.FriendAddedNotification: constant.SingleChatType, + constant.FriendDeletedNotification: constant.SingleChatType, + constant.FriendRemarkSetNotification: constant.SingleChatType, + constant.BlackAddedNotification: constant.SingleChatType, + constant.BlackDeletedNotification: constant.SingleChatType, + constant.FriendInfoUpdatedNotification: constant.SingleChatType, + // conversation + constant.ConversationChangeNotification: constant.SingleChatType, + constant.ConversationUnreadNotification: constant.SingleChatType, + constant.ConversationPrivateChatNotification: constant.SingleChatType, + } +} + type MsgClient struct { *MetaClient contentTypeConf map[int32]config.NotificationConf + sessionTypeConf map[int32]int32 } func NewMsgClient(zk discoveryregistry.SvcDiscoveryRegistry) *MsgClient { - return &MsgClient{MetaClient: NewMetaClient(zk, config.Config.RpcRegisterName.OpenImMsgName), contentTypeConf: newContentTypeConf()} + return &MsgClient{MetaClient: NewMetaClient(zk, config.Config.RpcRegisterName.OpenImMsgName), contentTypeConf: newContentTypeConf(), sessionTypeConf: newSessionTypeConf()} } func (m *MsgClient) SendMsg(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error) { @@ -92,7 +133,7 @@ func (m *MsgClient) PullMessageBySeqList(ctx context.Context, req *sdkws.PullMes return resp, err } -func (c *MsgClient) Notification(ctx context.Context, sendID, recvID string, contentType, sessionType int32, m proto.Message, opts ...utils.OptionsOpt) error { +func (c *MsgClient) Notification(ctx context.Context, sendID, recvID string, contentType int32, m proto.Message, opts ...utils.OptionsOpt) error { content, err := json.Marshal(m) if err != nil { log.ZError(ctx, "MsgClient Notification json.Marshal failed", err) @@ -104,13 +145,13 @@ func (c *MsgClient) Notification(ctx context.Context, sendID, recvID string, con var title, desc, ex string msg.SendID = sendID msg.RecvID = recvID - if sessionType == constant.SuperGroupChatType { - msg.GroupID = recvID - } msg.Content = content msg.MsgFrom = constant.SysMsgType msg.ContentType = contentType - msg.SessionType = sessionType + msg.SessionType = c.sessionTypeConf[contentType] + if msg.SessionType == constant.SuperGroupChatType { + msg.GroupID = recvID + } msg.CreateTime = utils.GetCurrentTimestampByMill() msg.ClientMsgID = utils.GetMsgID(sendID) // msg.Options = make(map[string]bool, 7) diff --git a/pkg/rpcclient/notification/conevrsation.go b/pkg/rpcclient/notification/conevrsation.go index b0307cea2..99cba92fe 100644 --- a/pkg/rpcclient/notification/conevrsation.go +++ b/pkg/rpcclient/notification/conevrsation.go @@ -24,7 +24,7 @@ func (c *ConversationNotificationSender) ConversationSetPrivateNotification(ctx SendID: sendID, IsPrivate: isPrivateChat, } - return c.Notification(ctx, sendID, recvID, constant.ConversationPrivateChatNotification, constant.SingleChatType, tips) + return c.Notification(ctx, sendID, recvID, constant.ConversationPrivateChatNotification, tips) } // 会话改变 @@ -32,7 +32,7 @@ func (c *ConversationNotificationSender) ConversationChangeNotification(ctx cont tips := &sdkws.ConversationUpdateTips{ UserID: userID, } - return c.Notification(ctx, userID, userID, constant.ConversationChangeNotification, constant.SingleChatType, tips) + return c.Notification(ctx, userID, userID, constant.ConversationChangeNotification, tips) } // 会话未读数同步 @@ -42,5 +42,5 @@ func (c *ConversationNotificationSender) ConversationUnreadChangeNotification(ct ConversationIDList: []string{conversationID}, UpdateUnreadCountTime: updateUnreadCountTime, } - return c.Notification(ctx, userID, userID, constant.ConversationUnreadNotification, constant.SingleChatType, tips) + return c.Notification(ctx, userID, userID, constant.ConversationUnreadNotification, tips) } diff --git a/pkg/rpcclient/notification/friend.go b/pkg/rpcclient/notification/friend.go index 63afbb0b2..7e0e48c84 100644 --- a/pkg/rpcclient/notification/friend.go +++ b/pkg/rpcclient/notification/friend.go @@ -92,7 +92,7 @@ func (f *FriendNotificationSender) getFromToUserNickname(ctx context.Context, fr func (f *FriendNotificationSender) UserInfoUpdatedNotification(ctx context.Context, opUserID string, changedUserID string) error { tips := sdkws.UserInfoUpdatedTips{UserID: changedUserID} - return f.Notification(ctx, opUserID, changedUserID, constant.SingleChatType, constant.UserInfoUpdatedNotification, &tips) + return f.Notification(ctx, opUserID, changedUserID, constant.UserInfoUpdatedNotification, &tips) } func (f *FriendNotificationSender) FriendApplicationAddNotification(ctx context.Context, req *pbFriend.ApplyToAddFriendReq) error { @@ -100,7 +100,7 @@ func (f *FriendNotificationSender) FriendApplicationAddNotification(ctx context. FromUserID: req.FromUserID, ToUserID: req.ToUserID, }} - return f.Notification(ctx, req.FromUserID, req.ToUserID, constant.SingleChatType, constant.FriendApplicationNotification, &tips) + return f.Notification(ctx, req.FromUserID, req.ToUserID, constant.FriendApplicationNotification, &tips) } func (c *FriendNotificationSender) FriendApplicationAgreedNotification(ctx context.Context, req *pbFriend.RespondFriendApplyReq) error { @@ -108,7 +108,7 @@ func (c *FriendNotificationSender) FriendApplicationAgreedNotification(ctx conte FromUserID: req.FromUserID, ToUserID: req.ToUserID, }, HandleMsg: req.HandleMsg} - return c.Notification(ctx, req.ToUserID, req.FromUserID, constant.SingleChatType, constant.FriendApplicationApprovedNotification, &tips) + return c.Notification(ctx, req.ToUserID, req.FromUserID, constant.FriendApplicationApprovedNotification, &tips) } func (c *FriendNotificationSender) FriendApplicationRefusedNotification(ctx context.Context, req *pbFriend.RespondFriendApplyReq) error { @@ -116,7 +116,7 @@ func (c *FriendNotificationSender) FriendApplicationRefusedNotification(ctx cont FromUserID: req.FromUserID, ToUserID: req.ToUserID, }, HandleMsg: req.HandleMsg} - return c.Notification(ctx, req.ToUserID, req.FromUserID, constant.SingleChatType, constant.FriendApplicationRejectedNotification, &tips) + return c.Notification(ctx, req.ToUserID, req.FromUserID, constant.FriendApplicationRejectedNotification, &tips) } func (c *FriendNotificationSender) FriendAddedNotification(ctx context.Context, operationID, opUserID, fromUserID, toUserID string) error { @@ -137,7 +137,7 @@ func (c *FriendNotificationSender) FriendAddedNotification(ctx context.Context, if err != nil { return err } - return c.Notification(ctx, fromUserID, toUserID, constant.SingleChatType, constant.FriendAddedNotification, &tips) + return c.Notification(ctx, fromUserID, toUserID, constant.FriendAddedNotification, &tips) } func (c *FriendNotificationSender) FriendDeletedNotification(ctx context.Context, req *pbFriend.DeleteFriendReq) error { @@ -145,21 +145,21 @@ func (c *FriendNotificationSender) FriendDeletedNotification(ctx context.Context FromUserID: req.OwnerUserID, ToUserID: req.FriendUserID, }} - return c.Notification(ctx, req.OwnerUserID, req.FriendUserID, constant.SingleChatType, constant.FriendDeletedNotification, &tips) + return c.Notification(ctx, req.OwnerUserID, req.FriendUserID, constant.FriendDeletedNotification, &tips) } func (c *FriendNotificationSender) FriendRemarkSetNotification(ctx context.Context, fromUserID, toUserID string) error { tips := sdkws.FriendInfoChangedTips{FromToUserID: &sdkws.FromToUserID{}} tips.FromToUserID.FromUserID = fromUserID tips.FromToUserID.ToUserID = toUserID - return c.Notification(ctx, fromUserID, toUserID, constant.SingleChatType, constant.FriendRemarkSetNotification, &tips) + return c.Notification(ctx, fromUserID, toUserID, constant.FriendRemarkSetNotification, &tips) } func (c *FriendNotificationSender) BlackAddedNotification(ctx context.Context, req *pbFriend.AddBlackReq) error { tips := sdkws.BlackAddedTips{FromToUserID: &sdkws.FromToUserID{}} tips.FromToUserID.FromUserID = req.OwnerUserID tips.FromToUserID.ToUserID = req.BlackUserID - return c.Notification(ctx, req.OwnerUserID, req.BlackUserID, constant.SingleChatType, constant.BlackAddedNotification, &tips) + return c.Notification(ctx, req.OwnerUserID, req.BlackUserID, constant.BlackAddedNotification, &tips) } func (c *FriendNotificationSender) BlackDeletedNotification(ctx context.Context, req *pbFriend.RemoveBlackReq) { @@ -167,10 +167,10 @@ func (c *FriendNotificationSender) BlackDeletedNotification(ctx context.Context, FromUserID: req.OwnerUserID, ToUserID: req.BlackUserID, }} - c.Notification(ctx, req.OwnerUserID, req.BlackUserID, constant.SingleChatType, constant.BlackDeletedNotification, &blackDeletedTips) + c.Notification(ctx, req.OwnerUserID, req.BlackUserID, constant.BlackDeletedNotification, &blackDeletedTips) } func (c *FriendNotificationSender) FriendInfoUpdatedNotification(ctx context.Context, changedUserID string, needNotifiedUserID string, opUserID string) { tips := sdkws.UserInfoUpdatedTips{UserID: changedUserID} - c.Notification(ctx, opUserID, needNotifiedUserID, constant.SingleChatType, constant.FriendInfoUpdatedNotification, &tips) + c.Notification(ctx, opUserID, needNotifiedUserID, constant.FriendInfoUpdatedNotification, &tips) } diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index b72be12c4..167ce40a7 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -322,11 +322,11 @@ func (g *GroupNotificationSender) GroupInfoSetNotification(ctx context.Context, if err != nil { return err } - groupInfoChangedTips := &sdkws.GroupInfoSetTips{Group: groupInfo.Group, OpUser: groupInfo.GroupOwnerUser} + tips := &sdkws.GroupInfoSetTips{Group: groupInfo.Group, OpUser: groupInfo.GroupOwnerUser} if needVerification != nil { - groupInfoChangedTips.Group.NeedVerification = *needVerification + tips.Group.NeedVerification = *needVerification } - return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupInfoSetNotification, constant.SuperGroupChatType, groupInfoChangedTips) + return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupInfoSetNotification, tips) } // #################################### @@ -350,10 +350,9 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.C if err != nil { return err } - joinGroupApplicationTips := &sdkws.JoinGroupApplicationTips{Group: group, Applicant: user, ReqMsg: req.ReqMessage} + tips := &sdkws.JoinGroupApplicationTips{Group: group, Applicant: user, ReqMsg: req.ReqMessage} for _, userID := range userIDs { - err := g.groupNotification(ctx, constant.JoinGroupApplicationNotification, joinGroupApplicationTips, mcontext.GetOpUserID(ctx), "", userID) - err = g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.JoinGroupApplicationNotification, constant.SuperGroupChatType, joinGroupApplicationTips) + err = g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.JoinGroupApplicationNotification, tips) if err != nil { log.ZError(ctx, "JoinGroupApplicationNotification failed", err, "group", req.GroupID, "userID", userID) } @@ -382,14 +381,14 @@ func (g *GroupNotificationSender) MemberQuitNotification(ctx context.Context, re if err != nil { return err } - memberQuitTips := &sdkws.MemberQuitTips{Group: group, QuitUser: &sdkws.GroupMemberFullInfo{ + tips := &sdkws.MemberQuitTips{Group: group, QuitUser: &sdkws.GroupMemberFullInfo{ GroupID: group.GroupID, UserID: user.UserID, Nickname: user.Nickname, FaceURL: user.FaceURL, }} for _, userID := range append(userIDs, opUserID) { - err := g.groupNotification(ctx, constant.MemberQuitNotification, memberQuitTips, mcontext.GetOpUserID(ctx), "", userID) + err = g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), userID, constant.MemberQuitNotification, tips) if err != nil { return err }