Merge branch 'v2.3.0release' of github.com:OpenIMSDK/Open-IM-Server into v2.3.0release

pull/351/head
wangchuxiao 2 years ago
commit ac2cc154b4

@ -5,7 +5,6 @@ import (
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/db"
"Open_IM/pkg/common/log"
"Open_IM/pkg/tools/splitter"
"context"
"path/filepath"
"strconv"
@ -47,53 +46,68 @@ func newFcmClient() *Fcm {
return &Fcm{FcmMsgCli: fcmMsgClient}
}
func (f *Fcm) Push(accounts []string, alert, detailContent, operationID string, opts push.PushOpts) (string, error) {
func (f *Fcm) Push(accounts []string, title, detailContent, operationID string, opts push.PushOpts) (string, error) {
// accounts->registrationToken
Tokens := make([]string, 0)
allTokens := make(map[string][]string, 0)
for _, account := range accounts {
IosfcmToken, IosErr := db.DB.GetFcmToken(account, 1)
AndroidfcmToken, AndroidErr := db.DB.GetFcmToken(account, 2)
if IosErr == nil {
Tokens = append(Tokens, IosfcmToken)
var personTokens []string
for _, v := range push.PushTerminal {
Token, err := db.DB.GetFcmToken(account, v)
if err == nil {
personTokens = append(personTokens, Token)
}
if AndroidErr == nil {
Tokens = append(Tokens, AndroidfcmToken)
}
allTokens[account] = personTokens
}
Success := 0
Fail := 0
result := splitter.NewSplitter(SinglePushCountLimit, Tokens).GetSplitResult()
Msg := new(messaging.MulticastMessage)
Msg.Notification = &messaging.Notification{}
Msg.Notification.Body = detailContent
Msg.Notification.Title = alert
Msg.APNS = &messaging.APNSConfig{Payload: &messaging.APNSPayload{Aps: &messaging.Aps{}}}
if opts.IOSBadgeCount {
i := 1
Msg.APNS.Payload.Aps.Badge = &i
}
if opts.IOSPushSound != "" {
Msg.APNS.Payload.Aps.Sound = opts.IOSPushSound
}
notification := &messaging.Notification{}
notification.Body = detailContent
notification.Title = title
var messages []*messaging.Message
ctx := context.Background()
for _, v := range result {
Msg.Tokens = v.Item
//SendMulticast sends the given multicast message to all the FCM registration tokens specified.
//The tokens array in MulticastMessage may contain up to 500 tokens.
//SendMulticast uses the `SendAll()` function to send the given message to all the target recipients.
//The responses list obtained from the return value corresponds to the order of the input tokens.
//An error from SendMulticast indicates a total failure -- i.e.
//the message could not be sent to any of the recipients.
//Partial failures are indicated by a `BatchResponse` return value.
response, err := f.FcmMsgCli.SendMulticast(ctx, Msg)
apns := &messaging.APNSConfig{Payload: &messaging.APNSPayload{Aps: &messaging.Aps{Sound: opts.IOSPushSound}}}
for uid, personTokens := range allTokens {
messageCount := len(messages)
if messageCount >= SinglePushCountLimit {
response, err := f.FcmMsgCli.SendAll(ctx, messages)
if err != nil {
Fail = Fail + len(v.Item)
log.Info(operationID, "some token push err", err.Error(), len(v.Item))
Fail = Fail + messageCount
log.Info(operationID, "some token push err", err.Error(), messageCount)
} else {
Success = Success + response.SuccessCount
Fail = Fail + response.FailureCount
}
messages = messages[0:0]
}
if opts.IOSBadgeCount {
unreadCountSum, err := db.DB.IncrUserBadgeUnreadCountSum(uid)
if err == nil {
apns.Payload.Aps.Badge = &unreadCountSum
} else {
continue
}
}
for _, token := range personTokens {
temp := &messaging.Message{
Token: token,
Notification: notification,
APNS: apns,
}
messages = append(messages, temp)
}
}
messageCount := len(messages)
if messageCount > 0 {
response, err := f.FcmMsgCli.SendAll(ctx, messages)
if err != nil {
Fail = Fail + messageCount
log.Info(operationID, "some token push err", err.Error(), messageCount)
} else {
Success = Success + response.SuccessCount
Fail = Fail + response.FailureCount
}
}
return strconv.Itoa(Success) + " Success," + strconv.Itoa(Fail) + " Fail", nil
}

@ -112,7 +112,7 @@ func newGetuiClient() *Getui {
return &Getui{}
}
func (g *Getui) Push(userIDList []string, alert, detailContent, operationID string, opts push.PushOpts) (resp string, err error) {
func (g *Getui) Push(userIDList []string, title, detailContent, operationID string, opts push.PushOpts) (resp string, err error) {
token, err := db.DB.GetGetuiToken()
log.NewDebug(operationID, utils.GetSelfFuncName(), "token", token)
if err != nil {
@ -132,18 +132,18 @@ func (g *Getui) Push(userIDList []string, alert, detailContent, operationID stri
}{Alias: []string{userIDList[0]}},
}
pushReq.PushMessage.Notification = Notification{
Title: alert,
Title: title,
Body: detailContent,
ClickType: "startapp",
}
pushReq.PushChannel.Ios.Aps.Sound = "default"
pushReq.PushChannel.Ios.Aps.Alert = Alert{
Title: alert,
Body: alert,
Title: title,
Body: title,
}
pushReq.PushChannel.Android.Ups.Notification = Notification{
Title: alert,
Body: alert,
Title: title,
Body: title,
ClickType: "startapp",
}
pushReq.PushChannel.Android.Ups.Options = Options{

@ -33,7 +33,7 @@ func (j *JPush) SetAlias(cid, alias string) (resp string, err error) {
return resp, nil
}
func (j *JPush) Push(accounts []string, alert, detailContent, operationID string, opts push.PushOpts) (string, error) {
func (j *JPush) Push(accounts []string, title, detailContent, operationID string, opts push.PushOpts) (string, error) {
var pf requestBody.Platform
pf.SetAll()
@ -47,7 +47,7 @@ func (j *JPush) Push(accounts []string, alert, detailContent, operationID string
}
no.IOSEnableMutableContent()
no.SetExtras(extras)
no.SetAlert(alert)
no.SetAlert(title)
var me requestBody.Message
me.SetMsgContent(detailContent)
var o requestBody.Options

@ -12,7 +12,7 @@ import (
http2 "net/http"
)
func callbackOfflinePush(operationID string, userIDList []string, msg *commonPb.MsgData, offlinePushUserIDList *[]string, offlineInfo *commonPb.OfflinePushInfo) cbApi.CommonCallbackResp {
func callbackOfflinePush(operationID string, userIDList []string, msg *commonPb.MsgData, offlinePushUserIDList *[]string) cbApi.CommonCallbackResp {
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
if !config.Config.Callback.CallbackOfflinePush.Enable {
return callbackResp
@ -52,7 +52,7 @@ func callbackOfflinePush(operationID string, userIDList []string, msg *commonPb.
*offlinePushUserIDList = resp.UserIDList
}
if resp.OfflinePushInfo != nil {
*offlineInfo = *resp.OfflinePushInfo
msg.OfflinePushInfo = resp.OfflinePushInfo
}
}
log.NewDebug(operationID, utils.GetSelfFuncName(), offlinePushUserIDList, resp.UserIDList)

@ -21,7 +21,6 @@ import (
var (
rpcServer RPCServer
pushCh PushConsumerHandler
pushTerminal []int32
producer *kafka.Producer
offlinePusher pusher.OfflinePusher
successCount uint64
@ -30,7 +29,6 @@ var (
func Init(rpcPort int) {
rpcServer.Init(rpcPort)
pushCh.Init()
pushTerminal = []int32{constant.IOSPlatformID, constant.AndroidPlatformID}
}
func init() {

@ -17,10 +17,8 @@ import (
pbPush "Open_IM/pkg/proto/push"
pbRelay "Open_IM/pkg/proto/relay"
pbRtc "Open_IM/pkg/proto/rtc"
commonPb "Open_IM/pkg/proto/sdk_ws"
"Open_IM/pkg/utils"
"context"
"encoding/json"
"strings"
"github.com/golang/protobuf/proto"
@ -85,71 +83,58 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) {
return
}
}
customContent := OpenIMContent{
SessionType: int(pushMsg.MsgData.SessionType),
From: pushMsg.MsgData.SendID,
To: pushMsg.MsgData.RecvID,
Seq: pushMsg.MsgData.Seq,
var title, detailContent string
callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList, pushMsg.MsgData, &[]string{})
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp")
if callbackResp.ErrCode != 0 {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp)
}
if callbackResp.ActionCode != constant.ActionAllow {
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop")
return
}
bCustomContent, _ := json.Marshal(customContent)
jsonCustomContent := string(bCustomContent)
var content string
if pushMsg.MsgData.OfflinePushInfo != nil {
content = pushMsg.MsgData.OfflinePushInfo.Title
jsonCustomContent = pushMsg.MsgData.OfflinePushInfo.Desc
title = pushMsg.MsgData.OfflinePushInfo.Title
detailContent = pushMsg.MsgData.OfflinePushInfo.Desc
}
if content == "" {
if offlinePusher == nil {
return
}
opts, err := GetOfflinePushOpts(pushMsg)
if err != nil {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error())
}
log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), UIDList, title, detailContent, "opts:", opts)
if title == "" {
switch pushMsg.MsgData.ContentType {
case constant.Text:
content = constant.ContentType2PushContent[constant.Text]
fallthrough
case constant.Picture:
content = constant.ContentType2PushContent[constant.Picture]
fallthrough
case constant.Voice:
content = constant.ContentType2PushContent[constant.Voice]
fallthrough
case constant.Video:
content = constant.ContentType2PushContent[constant.Video]
fallthrough
case constant.File:
content = constant.ContentType2PushContent[constant.File]
title = constant.ContentType2PushContent[int64(pushMsg.MsgData.ContentType)]
case constant.AtText:
a := AtContent{}
_ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a)
if utils.IsContain(pushMsg.PushToUserID, a.AtUserList) {
content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common]
title = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common]
} else {
content = constant.ContentType2PushContent[constant.GroupMsg]
title = constant.ContentType2PushContent[constant.GroupMsg]
}
case constant.SignalingNotification:
content = constant.ContentType2PushContent[constant.SignalMsg]
title = constant.ContentType2PushContent[constant.SignalMsg]
default:
content = constant.ContentType2PushContent[constant.Common]
title = constant.ContentType2PushContent[constant.Common]
}
detailContent = title
}
var offlineInfo commonPb.OfflinePushInfo
callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList, pushMsg.MsgData, &[]string{}, &offlineInfo)
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp")
if callbackResp.ErrCode != 0 {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp)
}
if callbackResp.ActionCode != constant.ActionAllow {
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop")
return
}
if offlineInfo.Title != "" {
content = offlineInfo.Title
}
if offlineInfo.Desc != "" {
jsonCustomContent = offlineInfo.Desc
}
if offlinePusher == nil {
return
}
opts, err := GetOfflinePushOpts(pushMsg)
if err != nil {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error())
}
log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), UIDList, content, jsonCustomContent, "opts:", opts)
pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID, opts)
pushResult, err := offlinePusher.Push(UIDList, title, detailContent, pushMsg.OperationID, opts)
if err != nil {
log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error())
} else {
@ -229,51 +214,11 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) {
}
onlineFailedUserIDList := utils.DifferenceString(onlineSuccessUserIDList, pushToUserIDList)
//Use offline push messaging
customContent := OpenIMContent{
SessionType: int(pushMsg.MsgData.SessionType),
From: pushMsg.MsgData.SendID,
To: pushMsg.MsgData.RecvID,
Seq: pushMsg.MsgData.Seq,
}
bCustomContent, _ := json.Marshal(customContent)
jsonCustomContent := string(bCustomContent)
var content string
if pushMsg.MsgData.OfflinePushInfo != nil {
content = pushMsg.MsgData.OfflinePushInfo.Title
jsonCustomContent = pushMsg.MsgData.OfflinePushInfo.Desc
} else {
switch pushMsg.MsgData.ContentType {
case constant.Text:
content = constant.ContentType2PushContent[constant.Text]
case constant.Picture:
content = constant.ContentType2PushContent[constant.Picture]
case constant.Voice:
content = constant.ContentType2PushContent[constant.Voice]
case constant.Video:
content = constant.ContentType2PushContent[constant.Video]
case constant.File:
content = constant.ContentType2PushContent[constant.File]
case constant.AtText:
a := AtContent{}
_ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a)
if utils.IsContain(pushMsg.PushToUserID, a.AtUserList) {
content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common]
} else {
content = constant.ContentType2PushContent[constant.GroupMsg]
}
case constant.SignalingNotification:
content = constant.ContentType2PushContent[constant.SignalMsg]
default:
content = constant.ContentType2PushContent[constant.Common]
}
}
var title, detailContent string
if len(onlineFailedUserIDList) > 0 {
var offlinePushUserIDList []string
var needOfflinePushUserIDList []string
var offlineInfo commonPb.OfflinePushInfo
callbackResp := callbackOfflinePush(pushMsg.OperationID, onlineFailedUserIDList, pushMsg.MsgData, &offlinePushUserIDList, &offlineInfo)
callbackResp := callbackOfflinePush(pushMsg.OperationID, onlineFailedUserIDList, pushMsg.MsgData, &offlinePushUserIDList)
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp")
if callbackResp.ErrCode != 0 {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp)
@ -282,17 +227,16 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) {
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop")
return
}
if pushMsg.MsgData.OfflinePushInfo != nil {
title = pushMsg.MsgData.OfflinePushInfo.Title
detailContent = pushMsg.MsgData.OfflinePushInfo.Desc
}
if len(offlinePushUserIDList) > 0 {
needOfflinePushUserIDList = offlinePushUserIDList
} else {
needOfflinePushUserIDList = onlineFailedUserIDList
}
if offlineInfo.Title != "" {
content = offlineInfo.Title
}
if offlineInfo.Desc != "" {
jsonCustomContent = offlineInfo.Desc
}
if offlinePusher == nil {
return
}
@ -300,8 +244,36 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) {
if err != nil {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error())
}
log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), onlineFailedUserIDList, content, jsonCustomContent, "opts:", opts)
pushResult, err := offlinePusher.Push(needOfflinePushUserIDList, content, jsonCustomContent, pushMsg.OperationID, opts)
log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), onlineFailedUserIDList, title, detailContent, "opts:", opts)
if title == "" {
switch pushMsg.MsgData.ContentType {
case constant.Text:
fallthrough
case constant.Picture:
fallthrough
case constant.Voice:
fallthrough
case constant.Video:
fallthrough
case constant.File:
title = constant.ContentType2PushContent[int64(pushMsg.MsgData.ContentType)]
case constant.AtText:
a := AtContent{}
_ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a)
if utils.IsContain(pushMsg.PushToUserID, a.AtUserList) {
title = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common]
} else {
title = constant.ContentType2PushContent[constant.GroupMsg]
}
case constant.SignalingNotification:
title = constant.ContentType2PushContent[constant.SignalMsg]
default:
title = constant.ContentType2PushContent[constant.Common]
}
detailContent = title
}
pushResult, err := offlinePusher.Push(needOfflinePushUserIDList, title, detailContent, pushMsg.OperationID, opts)
if err != nil {
log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error())
} else {

@ -1,7 +1,11 @@
package push
import "Open_IM/pkg/common/constant"
var PushTerminal = []int{constant.IOSPlatformID, constant.AndroidPlatformID}
type OfflinePusher interface {
Push(userIDList []string, alert, detailContent, operationID string, opts PushOpts) (resp string, err error)
Push(userIDList []string, title, detailContent, operationID string, opts PushOpts) (resp string, err error)
}
type PushOpts struct {

@ -74,7 +74,15 @@ func (rpc *rpcConversation) ModifyConversationField(c context.Context, req *pbCo
err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"attached_info": conversation.AttachedInfo})
case constant.FieldUnread:
isSyncConversation = false
err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"update_unread_count_time": utils.GetCurrentTimestampByMill()})
err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"update_unread_count_time": conversation.UpdateUnreadCountTime})
for _, v := range req.UserIDList {
if err = db.DB.SetUserBadgeUnreadCountSum(v, int(req.BadgeUnreadCountSum)); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserBadgeUnreadCountSum, rpc return", err.Error())
resp.CommonResp = &pbConversation.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}
return resp, nil
}
}
}
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateColumnsConversations error", err.Error())
@ -83,7 +91,6 @@ func (rpc *rpcConversation) ModifyConversationField(c context.Context, req *pbCo
}
for _, v := range utils.DifferenceString(haveUserID, req.UserIDList) {
conversation.OwnerUserID = v
conversation.UpdateUnreadCountTime = utils.GetCurrentTimestampByMill()
err = rocksCache.DelUserConversationIDListFromCache(v)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), v, req.Conversation.ConversationID, err.Error())

@ -18,7 +18,7 @@ type GroupMemberUserIDListHash struct {
UserIDList []string
}
var CacheGroupMemberUserIDList map[string]*GroupMemberUserIDListHash = make(map[string]*GroupMemberUserIDListHash, 0)
var CacheGroupMemberUserIDList = make(map[string]*GroupMemberUserIDListHash, 0)
var CacheGroupMtx sync.RWMutex
func GetGroupMemberUserIDList(groupID string, operationID string) ([]string, error) {

@ -63,6 +63,7 @@ type ModifyConversationFieldReq struct {
Conversation
FieldType int32 `json:"fieldType" binding:"required"`
UserIDList []string `json:"userIDList" binding:"required"`
BadgeUnreadCountSum int32 `json:"badgeUnreadCountSum"`
OperationID string `json:"operationID" binding:"required"`
}
type ModifyConversationFieldResp struct {

@ -37,6 +37,7 @@ const (
groupMaxSeq = "GROUP_MAX_SEQ:"
groupMinSeq = "GROUP_MIN_SEQ:"
sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:"
userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:"
)
func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) {
@ -411,3 +412,12 @@ func (d *DataBases) GetFcmToken(account string, platformid int) (string, error)
key := FcmToken + account + ":" + strconv.Itoa(platformid)
return d.RDB.Get(context.Background(), key).Result()
}
func (d *DataBases) IncrUserBadgeUnreadCountSum(uid string) (int, error) {
key := userBadgeUnreadCountSum + uid
seq, err := d.RDB.Incr(context.Background(), key).Result()
return int(seq), err
}
func (d *DataBases) SetUserBadgeUnreadCountSum(uid string, value int) error {
key := userBadgeUnreadCountSum + uid
return d.RDB.Set(context.Background(), key, value, 0).Err()
}

@ -35,6 +35,7 @@ func loggerInit(moduleName string) *Logger {
//All logs will be printed
logger.SetLevel(logrus.Level(config.Config.Log.RemainLogLevel))
//Close std console output
//os.O_WRONLY | os.O_CREATE | os.O_APPEND
src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
if err != nil {
panic(err.Error())

@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: conversation/conversation.proto
package conversation // import "./conversation"
package conversation // import "Open_IM/pkg/proto/conversation"
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
@ -35,7 +35,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} }
func (m *CommonResp) String() string { return proto.CompactTextString(m) }
func (*CommonResp) ProtoMessage() {}
func (*CommonResp) Descriptor() ([]byte, []int) {
return fileDescriptor_conversation_ac55165355a1b6e6, []int{0}
return fileDescriptor_conversation_f01d9caff8d16987, []int{0}
}
func (m *CommonResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@ -94,7 +94,7 @@ func (m *Conversation) Reset() { *m = Conversation{} }
func (m *Conversation) String() string { return proto.CompactTextString(m) }
func (*Conversation) ProtoMessage() {}
func (*Conversation) Descriptor() ([]byte, []int) {
return fileDescriptor_conversation_ac55165355a1b6e6, []int{1}
return fileDescriptor_conversation_f01d9caff8d16987, []int{1}
}
func (m *Conversation) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Conversation.Unmarshal(m, b)
@ -224,6 +224,7 @@ type ModifyConversationFieldReq struct {
FieldType int32 `protobuf:"varint,2,opt,name=fieldType" json:"fieldType,omitempty"`
UserIDList []string `protobuf:"bytes,3,rep,name=userIDList" json:"userIDList,omitempty"`
OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"`
BadgeUnreadCountSum int32 `protobuf:"varint,5,opt,name=badgeUnreadCountSum" json:"badgeUnreadCountSum,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -233,7 +234,7 @@ func (m *ModifyConversationFieldReq) Reset() { *m = ModifyConversationFi
func (m *ModifyConversationFieldReq) String() string { return proto.CompactTextString(m) }
func (*ModifyConversationFieldReq) ProtoMessage() {}
func (*ModifyConversationFieldReq) Descriptor() ([]byte, []int) {
return fileDescriptor_conversation_ac55165355a1b6e6, []int{2}
return fileDescriptor_conversation_f01d9caff8d16987, []int{2}
}
func (m *ModifyConversationFieldReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ModifyConversationFieldReq.Unmarshal(m, b)
@ -281,6 +282,13 @@ func (m *ModifyConversationFieldReq) GetOperationID() string {
return ""
}
func (m *ModifyConversationFieldReq) GetBadgeUnreadCountSum() int32 {
if m != nil {
return m.BadgeUnreadCountSum
}
return 0
}
type ModifyConversationFieldResp struct {
CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -292,7 +300,7 @@ func (m *ModifyConversationFieldResp) Reset() { *m = ModifyConversationF
func (m *ModifyConversationFieldResp) String() string { return proto.CompactTextString(m) }
func (*ModifyConversationFieldResp) ProtoMessage() {}
func (*ModifyConversationFieldResp) Descriptor() ([]byte, []int) {
return fileDescriptor_conversation_ac55165355a1b6e6, []int{3}
return fileDescriptor_conversation_f01d9caff8d16987, []int{3}
}
func (m *ModifyConversationFieldResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ModifyConversationFieldResp.Unmarshal(m, b)
@ -399,40 +407,42 @@ var _Conversation_serviceDesc = grpc.ServiceDesc{
}
func init() {
proto.RegisterFile("conversation/conversation.proto", fileDescriptor_conversation_ac55165355a1b6e6)
}
var fileDescriptor_conversation_ac55165355a1b6e6 = []byte{
// 494 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x5f, 0x8b, 0x13, 0x31,
0x14, 0xc5, 0x99, 0x6e, 0xb7, 0xdb, 0xde, 0x76, 0xab, 0x04, 0xd4, 0xd0, 0xf5, 0x4f, 0x19, 0x44,
0x46, 0x1f, 0x2a, 0xac, 0x3e, 0x08, 0xc2, 0x82, 0x4e, 0x51, 0x06, 0xac, 0x2e, 0xa1, 0x8b, 0xe0,
0xdb, 0xd8, 0xb9, 0xed, 0x06, 0x6c, 0x32, 0x26, 0x99, 0xda, 0x7d, 0xf1, 0x33, 0xf8, 0x81, 0xfc,
0x70, 0x92, 0x4c, 0xbb, 0x4d, 0x56, 0x0b, 0x3e, 0xde, 0x5f, 0xee, 0x9c, 0x9c, 0x33, 0x3d, 0x1d,
0x78, 0x34, 0x93, 0x62, 0x85, 0x4a, 0xe7, 0x86, 0x4b, 0xf1, 0xdc, 0x1f, 0x46, 0xa5, 0x92, 0x46,
0x92, 0x9e, 0xcf, 0xe2, 0x33, 0x80, 0x54, 0x2e, 0x97, 0x52, 0x30, 0xd4, 0x25, 0xa1, 0x70, 0x84,
0x4a, 0xa5, 0xb2, 0x40, 0x1a, 0x0d, 0xa3, 0xe4, 0x90, 0x6d, 0x47, 0x72, 0x17, 0x5a, 0xa8, 0xd4,
0x44, 0x2f, 0x68, 0x63, 0x18, 0x25, 0x1d, 0xb6, 0x99, 0xe2, 0x5f, 0x4d, 0xe8, 0xa5, 0x9e, 0x20,
0x19, 0x42, 0x57, 0xfe, 0x10, 0xa8, 0x2e, 0x34, 0xaa, 0x6c, 0xec, 0x64, 0x3a, 0xcc, 0x47, 0xe4,
0x09, 0xf4, 0x7d, 0x0b, 0xd9, 0x78, 0x23, 0x79, 0x83, 0x92, 0x87, 0x00, 0x0a, 0x67, 0xab, 0x89,
0x5e, 0x7c, 0x2a, 0x0d, 0x3d, 0x70, 0x7e, 0x3c, 0x42, 0x9e, 0xc1, 0x6d, 0xff, 0x89, 0xe9, 0x55,
0x89, 0xb4, 0xe9, 0xb6, 0xfe, 0xe2, 0xd6, 0x7e, 0x55, 0x1b, 0x3a, 0xac, 0xed, 0xd7, 0x93, 0x0d,
0xbc, 0x50, 0xb2, 0x2a, 0xb3, 0x31, 0x6d, 0xb9, 0x83, 0xed, 0x68, 0x73, 0x54, 0x42, 0x61, 0x5e,
0xa4, 0xb2, 0x12, 0x86, 0x1e, 0x39, 0x61, 0x1f, 0x91, 0xc7, 0x70, 0x5c, 0xa8, 0x7c, 0x6e, 0xa6,
0xb8, 0x36, 0x53, 0xbe, 0x44, 0xda, 0x1e, 0x46, 0xc9, 0x01, 0x0b, 0x21, 0x19, 0x40, 0x9b, 0xeb,
0x73, 0x2e, 0x04, 0x16, 0xb4, 0x33, 0x8c, 0x92, 0x36, 0xbb, 0x9e, 0x49, 0x0c, 0xbd, 0xdc, 0x98,
0x7c, 0x76, 0x89, 0x45, 0x26, 0xe6, 0x92, 0x82, 0xb3, 0x10, 0x30, 0x7b, 0x0b, 0xd7, 0xe7, 0x8a,
0xaf, 0x72, 0x83, 0xe9, 0x65, 0x6e, 0x68, 0xd7, 0x89, 0x84, 0xd0, 0xba, 0x75, 0xc6, 0xdf, 0x18,
0xf7, 0x1a, 0x7a, 0xb5, 0x5b, 0x0f, 0xd9, 0xbb, 0xb8, 0xfe, 0x28, 0x4d, 0x26, 0xde, 0x5b, 0x4a,
0x8f, 0x9d, 0x4c, 0xc0, 0x48, 0x1f, 0x1a, 0xb8, 0xa6, 0x7d, 0xe7, 0xa2, 0x81, 0x6b, 0xf2, 0x12,
0xee, 0x54, 0x65, 0x91, 0x1b, 0xbc, 0xd8, 0xc5, 0x76, 0x49, 0x6f, 0xb9, 0xa4, 0xff, 0x3e, 0x8c,
0x7f, 0x47, 0x30, 0x98, 0xc8, 0x82, 0xcf, 0xaf, 0xfc, 0x62, 0xbc, 0xe3, 0xf8, 0xad, 0x60, 0xf8,
0x9d, 0x9c, 0x41, 0xd0, 0x40, 0xd7, 0x90, 0xee, 0xe9, 0x60, 0x14, 0x54, 0xd5, 0x7f, 0x92, 0x05,
0xfb, 0xe4, 0x3e, 0x74, 0xe6, 0x56, 0xcb, 0x05, 0x6d, 0xb8, 0xa0, 0x3b, 0x60, 0x4b, 0x53, 0xff,
0xb4, 0x1f, 0xb8, 0xb6, 0xa5, 0x39, 0x48, 0x3a, 0xcc, 0x23, 0xae, 0x9e, 0x25, 0xaa, 0x6d, 0xf3,
0x9a, 0x9b, 0x7a, 0xee, 0x50, 0xfc, 0x19, 0x4e, 0xf6, 0xba, 0xd7, 0x25, 0x79, 0x05, 0x30, 0xbb,
0xfe, 0xc3, 0x6c, 0xcc, 0xd3, 0x9b, 0xe6, 0xb7, 0xe7, 0xcc, 0xdb, 0x3d, 0xfd, 0x19, 0x06, 0x27,
0x02, 0xee, 0xed, 0xb9, 0x88, 0x24, 0xa1, 0xe0, 0xfe, 0xb7, 0x39, 0x78, 0xfa, 0x9f, 0x9b, 0xba,
0x7c, 0xfb, 0xe0, 0xcb, 0xc9, 0x28, 0xf8, 0x20, 0xbc, 0xf6, 0x87, 0xaf, 0x2d, 0xf7, 0x79, 0x78,
0xf1, 0x27, 0x00, 0x00, 0xff, 0xff, 0x12, 0x56, 0xaa, 0x7b, 0x41, 0x04, 0x00, 0x00,
proto.RegisterFile("conversation/conversation.proto", fileDescriptor_conversation_f01d9caff8d16987)
}
var fileDescriptor_conversation_f01d9caff8d16987 = []byte{
// 513 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x5d, 0x8b, 0x13, 0x3f,
0x18, 0xc5, 0x99, 0xbe, 0x6d, 0xfb, 0xb4, 0xdb, 0xff, 0x9f, 0x88, 0x1a, 0xba, 0xbe, 0x94, 0x22,
0x32, 0x7a, 0x51, 0x65, 0xf5, 0x42, 0x10, 0x16, 0xb4, 0x45, 0x19, 0xb0, 0xba, 0xc4, 0x2e, 0x82,
0x77, 0xb3, 0x9d, 0xa7, 0xdd, 0x80, 0x4d, 0xc6, 0x24, 0x53, 0xbb, 0x37, 0x7e, 0x06, 0x3f, 0xa9,
0x9f, 0x41, 0x92, 0x69, 0xb7, 0xc9, 0xba, 0x05, 0x2f, 0x9f, 0x5f, 0x32, 0x27, 0xe7, 0xa4, 0xa7,
0x81, 0x87, 0x33, 0x29, 0x56, 0xa8, 0x74, 0x6a, 0xb8, 0x14, 0xcf, 0xfc, 0x61, 0x98, 0x2b, 0x69,
0x24, 0xe9, 0xf8, 0x6c, 0x70, 0x02, 0x30, 0x92, 0xcb, 0xa5, 0x14, 0x0c, 0x75, 0x4e, 0x28, 0x1c,
0xa0, 0x52, 0x23, 0x99, 0x21, 0x8d, 0xfa, 0x51, 0x5c, 0x67, 0xdb, 0x91, 0xdc, 0x81, 0x06, 0x2a,
0x35, 0xd1, 0x0b, 0x5a, 0xe9, 0x47, 0x71, 0x8b, 0x6d, 0xa6, 0xc1, 0xaf, 0x1a, 0x74, 0x46, 0x9e,
0x20, 0xe9, 0x43, 0x5b, 0xfe, 0x10, 0xa8, 0xce, 0x34, 0xaa, 0x64, 0xec, 0x64, 0x5a, 0xcc, 0x47,
0xe4, 0x31, 0x74, 0x7d, 0x0b, 0xc9, 0x78, 0x23, 0x79, 0x8d, 0x92, 0x07, 0x00, 0x0a, 0x67, 0xab,
0x89, 0x5e, 0x7c, 0xca, 0x0d, 0xad, 0x3a, 0x3f, 0x1e, 0x21, 0x4f, 0xe1, 0x7f, 0xff, 0x8b, 0xe9,
0x65, 0x8e, 0xb4, 0xe6, 0x76, 0xfd, 0xc5, 0xad, 0xfd, 0xa2, 0x34, 0x54, 0x2f, 0xed, 0x97, 0x93,
0x0d, 0xbc, 0x50, 0xb2, 0xc8, 0x93, 0x31, 0x6d, 0xb8, 0x85, 0xed, 0x68, 0x73, 0x14, 0x42, 0x61,
0x9a, 0x8d, 0x64, 0x21, 0x0c, 0x3d, 0x70, 0xc2, 0x3e, 0x22, 0x8f, 0xe0, 0x30, 0x53, 0xe9, 0xdc,
0x4c, 0x71, 0x6d, 0xa6, 0x7c, 0x89, 0xb4, 0xd9, 0x8f, 0xe2, 0x2a, 0x0b, 0x21, 0xe9, 0x41, 0x93,
0xeb, 0x53, 0x2e, 0x04, 0x66, 0xb4, 0xd5, 0x8f, 0xe2, 0x26, 0xbb, 0x9a, 0xc9, 0x00, 0x3a, 0xa9,
0x31, 0xe9, 0xec, 0x02, 0xb3, 0x44, 0xcc, 0x25, 0x05, 0x67, 0x21, 0x60, 0xf6, 0x14, 0xae, 0x4f,
0x15, 0x5f, 0xa5, 0x06, 0x47, 0x17, 0xa9, 0xa1, 0x6d, 0x27, 0x12, 0x42, 0xeb, 0xd6, 0x19, 0x7f,
0x63, 0xdc, 0x35, 0x74, 0x4a, 0xb7, 0x1e, 0xb2, 0x67, 0x71, 0xfd, 0x51, 0x9a, 0x44, 0xbc, 0xb7,
0x94, 0x1e, 0x3a, 0x99, 0x80, 0x91, 0x2e, 0x54, 0x70, 0x4d, 0xbb, 0xce, 0x45, 0x05, 0xd7, 0xe4,
0x25, 0xdc, 0x2e, 0xf2, 0x2c, 0x35, 0x78, 0xb6, 0x8b, 0xed, 0x92, 0xfe, 0xe7, 0x92, 0xde, 0xbc,
0x38, 0xf8, 0x1d, 0x41, 0x6f, 0x22, 0x33, 0x3e, 0xbf, 0xf4, 0x8b, 0xf1, 0x8e, 0xe3, 0xb7, 0x8c,
0xe1, 0x77, 0x72, 0x02, 0x41, 0x03, 0x5d, 0x43, 0xda, 0xc7, 0xbd, 0x61, 0x50, 0x55, 0xff, 0x4b,
0x16, 0xec, 0x27, 0xf7, 0xa0, 0x35, 0xb7, 0x5a, 0x2e, 0x68, 0xc5, 0x05, 0xdd, 0x01, 0x5b, 0x9a,
0xf2, 0xa7, 0xfd, 0xc0, 0xb5, 0x2d, 0x4d, 0x35, 0x6e, 0x31, 0x8f, 0xb8, 0x7a, 0xe6, 0xa8, 0xb6,
0xcd, 0xab, 0x6d, 0xea, 0xb9, 0x43, 0xe4, 0x39, 0xdc, 0x3a, 0x4f, 0xb3, 0x85, 0x1f, 0xeb, 0x73,
0xb1, 0x74, 0xbd, 0xa9, 0xb3, 0x9b, 0x96, 0x06, 0x5f, 0xe0, 0x68, 0x6f, 0x5e, 0x9d, 0x93, 0x57,
0x00, 0xb3, 0xab, 0xbf, 0xd8, 0x26, 0x2e, 0xbd, 0x1e, 0x77, 0xbb, 0xce, 0xbc, 0xbd, 0xc7, 0x3f,
0xc3, 0xab, 0x22, 0x02, 0xee, 0xee, 0x39, 0x88, 0xc4, 0xa1, 0xe0, 0xfe, 0xfb, 0xef, 0x3d, 0xf9,
0xc7, 0x9d, 0x3a, 0x7f, 0x7b, 0xff, 0xeb, 0xd1, 0x30, 0x78, 0x42, 0x5e, 0xfb, 0xc3, 0x79, 0xc3,
0x3d, 0x28, 0x2f, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xf4, 0x2a, 0xa6, 0x73, 0x04, 0x00,
0x00,
}

@ -29,6 +29,7 @@ message ModifyConversationFieldReq{
int32 fieldType = 2;
repeated string userIDList = 3;
string operationID = 4;
int32 badgeUnreadCountSum = 5;
}
message ModifyConversationFieldResp{

Loading…
Cancel
Save