|
|
|
@ -151,6 +151,7 @@ type NotificationSender struct {
|
|
|
|
|
contentTypeConf map[int32]config.NotificationConf
|
|
|
|
|
sessionTypeConf map[int32]int32
|
|
|
|
|
sendMsg func(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error)
|
|
|
|
|
getUserInfo func(ctx context.Context, userID string) (*sdkws.UserInfo, error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type NewNotificationSenderOptions func(*NotificationSender)
|
|
|
|
@ -167,6 +168,12 @@ func WithRpcClient(msgRpcClient *MessageRpcClient) NewNotificationSenderOptions
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func WithUserRpcClient(userRpcClient *UserRpcClient) NewNotificationSenderOptions {
|
|
|
|
|
return func(s *NotificationSender) {
|
|
|
|
|
s.getUserInfo = userRpcClient.GetUserInfo
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewNotificationSender(opts ...NewNotificationSenderOptions) *NotificationSender {
|
|
|
|
|
notificationSender := &NotificationSender{contentTypeConf: newContentTypeConf(), sessionTypeConf: newSessionTypeConf()}
|
|
|
|
|
for _, opt := range opts {
|
|
|
|
@ -175,15 +182,40 @@ func NewNotificationSender(opts ...NewNotificationSenderOptions) *NotificationSe
|
|
|
|
|
return notificationSender
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, sendID, recvID string, contentType, sesstionType int32, m proto.Message, opts ...utils.OptionsOpt) (err error) {
|
|
|
|
|
type notificationOpt struct {
|
|
|
|
|
WithRpcGetUsername bool
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type NotificationOptions func(*notificationOpt)
|
|
|
|
|
|
|
|
|
|
func WithRpcGetUserName() NotificationOptions {
|
|
|
|
|
return func(opt *notificationOpt) {
|
|
|
|
|
opt.WithRpcGetUsername = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, sendID, recvID string, contentType, sesstionType int32, m proto.Message, opts ...NotificationOptions) (err error) {
|
|
|
|
|
n := sdkws.NotificationElem{Detail: utils.StructToJsonString(m)}
|
|
|
|
|
content, err := json.Marshal(&n)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.ZError(ctx, "MsgClient Notification json.Marshal failed", err, "sendID", sendID, "recvID", recvID, "contentType", contentType, "msg", m)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
notificationOpt := ¬ificationOpt{}
|
|
|
|
|
for _, opt := range opts {
|
|
|
|
|
opt(notificationOpt)
|
|
|
|
|
}
|
|
|
|
|
var req msg.SendMsgReq
|
|
|
|
|
var msg sdkws.MsgData
|
|
|
|
|
if notificationOpt.WithRpcGetUsername && s.getUserInfo != nil {
|
|
|
|
|
userInfo, err := s.getUserInfo(ctx, sendID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.ZWarn(ctx, "getUserInfo failed", err, "sendID", sendID)
|
|
|
|
|
} else {
|
|
|
|
|
msg.SenderNickname = userInfo.Nickname
|
|
|
|
|
msg.SenderFaceURL = userInfo.FaceURL
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var offlineInfo sdkws.OfflinePushInfo
|
|
|
|
|
var title, desc, ex string
|
|
|
|
|
msg.SendID = sendID
|
|
|
|
@ -198,7 +230,6 @@ func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, s
|
|
|
|
|
msg.CreateTime = utils.GetCurrentTimestampByMill()
|
|
|
|
|
msg.ClientMsgID = utils.GetMsgID(sendID)
|
|
|
|
|
options := config.GetOptionsByNotification(s.contentTypeConf[contentType])
|
|
|
|
|
options = utils.WithOptions(options, opts...)
|
|
|
|
|
msg.Options = options
|
|
|
|
|
offlineInfo.Title = title
|
|
|
|
|
offlineInfo.Desc = desc
|
|
|
|
@ -214,6 +245,6 @@ func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, s
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *NotificationSender) Notification(ctx context.Context, sendID, recvID string, contentType int32, m proto.Message, opts ...utils.OptionsOpt) error {
|
|
|
|
|
func (s *NotificationSender) Notification(ctx context.Context, sendID, recvID string, contentType int32, m proto.Message, opts ...NotificationOptions) error {
|
|
|
|
|
return s.NotificationWithSesstionType(ctx, sendID, recvID, contentType, s.sessionTypeConf[contentType], m, opts...)
|
|
|
|
|
}
|
|
|
|
|