package rpcclient import ( "context" "encoding/json" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/golang/protobuf/proto" ) type MsgClient struct { *MetaClient } func NewMsgClient(zk discoveryregistry.SvcDiscoveryRegistry) *MsgClient { return &MsgClient{NewMetaClient(zk, config.Config.RpcRegisterName.OpenImMsgName)} } func (m *MsgClient) SendMsg(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error) { cc, err := m.getConn() if err != nil { return nil, err } resp, err := msg.NewMsgClient(cc).SendMsg(ctx, req) return resp, err } func (m *MsgClient) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error) { cc, err := m.getConn() if err != nil { return nil, err } resp, err := msg.NewMsgClient(cc).GetMaxAndMinSeq(ctx, req) return resp, err } func (m *MsgClient) PullMessageBySeqList(ctx context.Context, req *sdkws.PullMessageBySeqsReq) (*sdkws.PullMessageBySeqsResp, error) { cc, err := m.getConn() if err != nil { return nil, err } resp, err := msg.NewMsgClient(cc).PullMessageBySeqs(ctx, req) return resp, err } func (c *MsgClient) Notification(ctx context.Context, sendID, recvID string, contentType, sessionType int32, m proto.Message, cfg config.NotificationConf, opts ...utils.OptionsOpt) error { content, err := json.Marshal(m) if err != nil { return err } var req msg.SendMsgReq var msg sdkws.MsgData var offlineInfo sdkws.OfflinePushInfo var title, desc, ex string msg.SendID = sendID msg.RecvID = recvID msg.Content = content msg.MsgFrom = constant.SysMsgType msg.ContentType = contentType msg.SessionType = sessionType msg.CreateTime = utils.GetCurrentTimestampByMill() msg.ClientMsgID = utils.GetMsgID(sendID) // msg.Options = make(map[string]bool, 7) // todo notification get sender name and face url // msg.SenderNickname, msg.SenderFaceURL, err = c.getFaceURLAndName(sendID) options := config.GetOptionsByNotification(cfg) options = utils.WithOptions(options, opts...) msg.Options = options offlineInfo.Title = title offlineInfo.Desc = desc offlineInfo.Ex = ex msg.OfflinePushInfo = &offlineInfo req.MsgData = &msg _, err = c.SendMsg(ctx, &req) return err }