mongo operation

This commit is contained in:
wangchuxiao 2022-12-12 19:22:50 +08:00
parent 63d75bb68b
commit 0f1208dba9
11 changed files with 404 additions and 227 deletions

View File

@ -62,12 +62,15 @@ kafka:
ms2pschat: ms2pschat:
addr: [ 127.0.0.1:9092 ] #kafka配置默认即可 addr: [ 127.0.0.1:9092 ] #kafka配置默认即可
topic: "ms2ps_chat" #消息push topic: "ms2ps_chat" #消息push
msgtomodify:
addr: [ 127.0.0.1:9092 ] #kafka配置默认即可
topic: "msg_to_modify"
consumergroupid: consumergroupid:
msgToTransfer: mongo msgToTransfer: mongo
msgToMongo: mongo_ex msgToMongo: mongo_ex
msgToMySql: mysql msgToMySql: mysql
msgToPush: push msgToPush: push
msgToModify: modify
#---------------Internal service configuration---------------------# #---------------Internal service configuration---------------------#

View File

@ -22,7 +22,9 @@ var (
persistentCH PersistentConsumerHandler persistentCH PersistentConsumerHandler
historyCH OnlineHistoryRedisConsumerHandler historyCH OnlineHistoryRedisConsumerHandler
historyMongoCH OnlineHistoryMongoConsumerHandler historyMongoCH OnlineHistoryMongoConsumerHandler
modifyCH ModifyMsgConsumerHandler
producer *kafka.Producer producer *kafka.Producer
producerToModify *kafka.Producer
producerToMongo *kafka.Producer producerToMongo *kafka.Producer
cmdCh chan Cmd2Value cmdCh chan Cmd2Value
onlineTopicStatus int onlineTopicStatus int
@ -43,11 +45,13 @@ func Init() {
persistentCH.Init() // ws2mschat save mysql persistentCH.Init() // ws2mschat save mysql
historyCH.Init(cmdCh) // historyCH.Init(cmdCh) //
historyMongoCH.Init() historyMongoCH.Init()
modifyCH.Init()
onlineTopicStatus = OnlineTopicVacancy onlineTopicStatus = OnlineTopicVacancy
//offlineHistoryCH.Init(cmdCh) //offlineHistoryCH.Init(cmdCh)
statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval)
statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval)
producer = kafka.NewKafkaProducer(config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.Ms2pschat.Topic) producer = kafka.NewKafkaProducer(config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.Ms2pschat.Topic)
producerToModify = kafka.NewKafkaProducer(config.Config.Kafka.MsgToModify.Addr, config.Config.Kafka.MsgToModify.Topic)
producerToMongo = kafka.NewKafkaProducer(config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.MsgToMongo.Topic) producerToMongo = kafka.NewKafkaProducer(config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.MsgToMongo.Topic)
} }
func Run(promethuesPort int) { func Run(promethuesPort int) {
@ -59,6 +63,7 @@ func Run(promethuesPort int) {
} }
go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH)
go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH)
go modifyCH.modifyMsgConsumerGroup.RegisterHandleAndConsumer(&modifyCH)
//go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH)
go func() { go func() {
err := promePkg.StartPromeSrv(promethuesPort) err := promePkg.StartPromeSrv(promethuesPort)

View File

@ -0,0 +1,117 @@
package logic
import (
"Open_IM/pkg/base_info"
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
"Open_IM/pkg/common/db"
kfk "Open_IM/pkg/common/kafka"
"Open_IM/pkg/common/log"
pbMsg "Open_IM/pkg/proto/msg"
server_api_params "Open_IM/pkg/proto/sdk_ws"
"Open_IM/pkg/utils"
"encoding/json"
"github.com/Shopify/sarama"
"github.com/golang/protobuf/proto"
)
type ModifyMsgConsumerHandler struct {
msgHandle map[string]fcb
modifyMsgConsumerGroup *kfk.MConsumerGroup
}
func (mmc *ModifyMsgConsumerHandler) Init() {
mmc.msgHandle = make(map[string]fcb)
mmc.msgHandle[config.Config.Kafka.MsgToModify.Topic] = mmc.ModifyMsg
mmc.modifyMsgConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0,
OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToModify.Topic},
config.Config.Kafka.MsgToModify.Addr, config.Config.Kafka.ConsumerGroupID.MsgToModify)
}
func (ModifyMsgConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil }
func (ModifyMsgConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil }
func (mmc *ModifyMsgConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession,
claim sarama.ConsumerGroupClaim) error {
for msg := range claim.Messages() {
log.NewDebug("", "kafka get info to mysql", "ModifyMsgConsumerHandler", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key))
if len(msg.Value) != 0 {
mmc.msgHandle[msg.Topic](msg, string(msg.Key), sess)
} else {
log.Error("", "msg get from kafka but is nil", msg.Key)
}
sess.MarkMessage(msg, "")
}
return nil
}
func (mmc *ModifyMsgConsumerHandler) ModifyMsg(cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) {
log.NewInfo("msg come here ModifyMsg!!!", "", "msg", string(cMsg.Value), msgKey)
msgFromMQ := pbMsg.MsgDataToModifyByMQ{}
err := proto.Unmarshal(cMsg.Value, &msgFromMQ)
if err != nil {
log.NewError(msgFromMQ.TriggerID, "msg_transfer Unmarshal msg err", "msg", string(cMsg.Value), "err", err.Error())
return
}
log.Debug(msgFromMQ.TriggerID, "proto.Unmarshal MsgDataToMQ", msgFromMQ.String())
for _, msgDataToMQ := range msgFromMQ.MessageList {
if msgDataToMQ.MsgData.ContentType == constant.ReactionMessageModifier {
notification := &base_info.ReactionMessageModifierNotification{}
if err := json.Unmarshal(msgDataToMQ.MsgData.Content, notification); err != nil {
continue
}
if notification.IsExternalExtensions {
log.NewInfo(msgDataToMQ.OperationID, "msg:", notification, "this is external extensions")
continue
}
if !notification.IsReact {
// first time to modify
var reactionExtensionList = make(map[string]db.KeyValue)
extendMsg := db.ExtendMsg{
ReactionExtensionList: reactionExtensionList,
ClientMsgID: notification.ClientMsgID,
MsgFirstModifyTime: notification.MsgFirstModifyTime,
}
for _, v := range notification.SuccessReactionExtensionList {
reactionExtensionList[v.TypeKey] = db.KeyValue{
TypeKey: v.TypeKey,
Value: v.Value,
LatestUpdateTime: v.LatestUpdateTime,
}
}
if err := db.DB.InsertExtendMsg(notification.SourceID, notification.SessionType, &extendMsg); err != nil {
log.NewError(msgDataToMQ.OperationID, "MsgFirstModify InsertExtendMsg failed", notification.SourceID, notification.SessionType, extendMsg, err.Error())
continue
}
} else {
var reactionExtensionList = make(map[string]*server_api_params.KeyValue)
for _, v := range notification.SuccessReactionExtensionList {
reactionExtensionList[v.TypeKey] = &server_api_params.KeyValue{
TypeKey: v.TypeKey,
Value: v.Value,
LatestUpdateTime: v.LatestUpdateTime,
}
}
// is already modify
if err := db.DB.InsertOrUpdateReactionExtendMsgSet(notification.SourceID, notification.SessionType, notification.ClientMsgID, notification.MsgFirstModifyTime, reactionExtensionList); err != nil {
log.NewError(msgDataToMQ.OperationID, "InsertOrUpdateReactionExtendMsgSet failed")
}
}
} else if msgDataToMQ.MsgData.ContentType == constant.ReactionMessageDeleter {
notification := &base_info.ReactionMessageDeleteNotification{}
if err := json.Unmarshal(msgDataToMQ.MsgData.Content, notification); err != nil {
continue
}
if err := db.DB.DeleteReactionExtendMsgSet(notification.SourceID, notification.SessionType, notification.ClientMsgID, notification.MsgFirstModifyTime, notification.SuccessReactionExtensionList); err != nil {
log.NewError(msgDataToMQ.OperationID, "InsertOrUpdateReactionExtendMsgSet failed")
}
}
}
}
func UnMarshallSetReactionMsgContent(content []byte) (notification *base_info.ReactionMessageModifierNotification, err error) {
return notification, nil
}

View File

@ -72,6 +72,7 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) {
storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80)
notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80)
log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList)) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList))
var modifyMsgList []*pbMsg.MsgDataToMQ
for _, v := range msgList { for _, v := range msgList {
log.Debug(triggerID, "msg come to storage center", v.String()) log.Debug(triggerID, "msg come to storage center", v.String())
isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory)
@ -85,8 +86,13 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) {
} }
} }
if v.MsgData.ContentType == constant.ReactionMessageModifier || v.MsgData.ContentType == constant.ReactionMessageDeleter {
modifyMsgList = append(modifyMsgList, v)
}
}
if len(modifyMsgList) > 0 {
sendMessageToModifyMQ(msgChannelValue.aggregationID, triggerID, modifyMsgList)
} }
//switch msgChannelValue.msg.MsgData.SessionType { //switch msgChannelValue.msg.MsgData.SessionType {
//case constant.SingleChatType: //case constant.SingleChatType:
//case constant.GroupChatType: //case constant.GroupChatType:
@ -552,6 +558,17 @@ func sendMessageToPushMQ(message *pbMsg.MsgDataToMQ, pushToUserID string) {
return return
} }
func sendMessageToModifyMQ(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ) {
if len(messages) > 0 {
pid, offset, err := producerToModify.SendMessage(&pbMsg.MsgDataToModifyByMQ{AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID)
if err != nil {
log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID)
} else {
// log.NewWarn(m.OperationID, "sendMsgToKafka client msgID ", m.MsgData.ClientMsgID)
}
}
}
// String hashes a string to a unique hashcode. // String hashes a string to a unique hashcode.
// //
// crc32 returns a uint32, but for our use we need // crc32 returns a uint32, but for our use we need

View File

@ -61,50 +61,6 @@ func (mc *OnlineHistoryMongoConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Con
if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil {
log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList)
} }
} else if v.MsgData.ContentType == constant.ReactionMessageModifier {
var req pbMsg.ModifyMessageReactionExtensionsReq
if req.IsExternalExtensions {
log.NewInfo(req.OperationID, "msg:", req.String(), "this is external extensions")
continue
}
if !req.IsReact {
// first time to modify
var reactionExtensionList = make(map[string]db.KeyValue)
for k, v := range req.ReactionExtensionList {
reactionExtensionList[k] = db.KeyValue{
TypeKey: v.TypeKey,
Value: v.Value,
LatestUpdateTime: v.LatestUpdateTime,
}
}
extendMsg := db.ExtendMsg{
ReactionExtensionList: reactionExtensionList,
ClientMsgID: req.ClientMsgID,
MsgFirstModifyTime: req.MsgFirstModifyTime,
}
if req.AttachedInfo != nil {
extendMsg.AttachedInfo = req.AttachedInfo.Value
}
if req.Ex != nil {
extendMsg.Ex = req.Ex.Value
}
if err := db.DB.InsertExtendMsg(req.SourceID, req.SessionType, &extendMsg); err != nil {
log.NewError(req.OperationID, "MsgFirstModify InsertExtendMsg failed", req.SourceID, req.SessionType, extendMsg, err.Error())
continue
}
} else {
// is already modify
if err := db.DB.InsertOrUpdateReactionExtendMsgSet(req.SourceID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime, req.ReactionExtensionList); err != nil {
log.NewError(req.OperationID, "InsertOrUpdateReactionExtendMsgSet failed")
}
}
} else if v.MsgData.ContentType == constant.ReactionMessageDeleter {
var req pbMsg.OperateMessageListReactionExtensionsReq
for _, v := range req.MessageReactionKeyList {
if err := db.DB.DeleteReactionExtendMsgSet(req.SourceID, req.SessionType, v.ClientMsgID, v.MsgFirstModifyTime, v.ReactionExtensionList); err != nil {
log.NewError(req.OperationID, "InsertOrUpdateReactionExtendMsgSet failed")
}
}
} }
} }
} }

View File

@ -116,3 +116,12 @@ type ReactionMessageModifierNotification struct {
IsExternalExtensions bool `json:"isExternalExtensions"` IsExternalExtensions bool `json:"isExternalExtensions"`
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
} }
type ReactionMessageDeleteNotification struct {
SourceID string `json:"sourceID" binding:"required"`
OpUserID string `json:"opUserID" binding:"required"`
SessionType int32 `json:"sessionType" binding:"required"`
SuccessReactionExtensionList map[string]*sdk_ws.KeyValue `json:"reactionExtensionList,omitempty" binding:"required"`
ClientMsgID string `json:"clientMsgID" binding:"required"`
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
}

View File

@ -248,11 +248,16 @@ type config struct {
Addr []string `yaml:"addr"` Addr []string `yaml:"addr"`
Topic string `yaml:"topic"` Topic string `yaml:"topic"`
} }
MsgToModify struct {
Addr []string `yaml:"addr"`
Topic string `yaml:"topic"`
}
ConsumerGroupID struct { ConsumerGroupID struct {
MsgToRedis string `yaml:"msgToTransfer"` MsgToRedis string `yaml:"msgToTransfer"`
MsgToMongo string `yaml:"msgToMongo"` MsgToMongo string `yaml:"msgToMongo"`
MsgToMySql string `yaml:"msgToMySql"` MsgToMySql string `yaml:"msgToMySql"`
MsgToPush string `yaml:"msgToPush"` MsgToPush string `yaml:"msgToPush"`
MsgToModify string `yaml:"msgToModify"`
} }
} }
Secret string `yaml:"secret"` Secret string `yaml:"secret"`

View File

@ -8,6 +8,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/options"
"strconv" "strconv"
"strings" "strings"
@ -89,30 +90,41 @@ func (d *DataBases) GetAllExtendMsgSet(ID string, opts *GetAllExtendMsgSetOpts)
return sets, nil return sets, nil
} }
type GetExtendMsgSetOpts struct { func (d *DataBases) GetExtendMsgSet(ctx context.Context, sourceID string, sessionType int32, maxMsgUpdateTime int64, c *mongo.Collection) (*ExtendMsgSet, error) {
ExcludeExtendMsgs bool regex := fmt.Sprintf("^%s", sourceID)
var err error
findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{"extend_msgs": 0})
// update newest
find := bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType}
if maxMsgUpdateTime > 0 {
find["max_msg_update_time"] = maxMsgUpdateTime
}
result, err := c.Find(ctx, find, findOpts)
if err != nil {
return nil, utils.Wrap(err, "")
}
var setList []ExtendMsgSet
if err := result.All(ctx, &setList); err != nil {
return nil, utils.Wrap(err, "")
}
if len(setList) == 0 {
return nil, nil
}
return &setList[0], nil
} }
// first modify msg // first modify msg
func (d *DataBases) InsertExtendMsg(sourceID string, sessionType int32, msg *ExtendMsg) error { func (d *DataBases) InsertExtendMsg(sourceID string, sessionType int32, msg *ExtendMsg) error {
ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second)
c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet)
regex := fmt.Sprintf("^%s", sourceID) set, err := d.GetExtendMsgSet(ctx, sourceID, sessionType, 0, c)
var err error
findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{"extend_msgs": 0})
// update newest
result, err := c.Find(ctx, bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType}, findOpts)
if err != nil { if err != nil {
return utils.Wrap(err, "") return utils.Wrap(err, "")
} }
var setList []ExtendMsgSet if set == nil || set.ExtendMsgNum >= GetExtendMsgMaxNum() {
if err := result.All(ctx, &setList); err != nil {
return utils.Wrap(err, "")
}
if len(setList) == 0 || setList[0].ExtendMsgNum >= GetExtendMsgMaxNum() {
var index int32 var index int32
if len(setList) > 0 { if set != nil {
index = SplitSourceIDAndGetIndex(setList[0].SourceID) index = SplitSourceIDAndGetIndex(set.SourceID)
} }
err = d.CreateExtendMsgSet(&ExtendMsgSet{ err = d.CreateExtendMsgSet(&ExtendMsgSet{
SourceID: GetExtendMsgSourceID(sourceID, index), SourceID: GetExtendMsgSourceID(sourceID, index),
@ -123,7 +135,7 @@ func (d *DataBases) InsertExtendMsg(sourceID string, sessionType int32, msg *Ext
MaxMsgUpdateTime: msg.MsgFirstModifyTime, MaxMsgUpdateTime: msg.MsgFirstModifyTime,
}) })
} else { } else {
_, err = c.UpdateOne(ctx, bson.M{"source_id": setList[0].SourceID, "session_type": sessionType}, bson.M{"$set": bson.M{"max_msg_update_time": msg.MsgFirstModifyTime, "$inc": bson.M{"extend_msg_num": 1}, fmt.Sprintf("extend_msgs.%s", msg.ClientMsgID): msg}}) _, err = c.UpdateOne(ctx, bson.M{"source_id": set.SourceID, "session_type": sessionType}, bson.M{"$set": bson.M{"max_msg_update_time": msg.MsgFirstModifyTime, "$inc": bson.M{"extend_msg_num": 1}, fmt.Sprintf("extend_msgs.%s", msg.ClientMsgID): msg}})
} }
return utils.Wrap(err, "") return utils.Wrap(err, "")
} }
@ -140,47 +152,33 @@ func (d *DataBases) InsertOrUpdateReactionExtendMsgSet(sourceID string, sessionT
opt := &options.UpdateOptions{ opt := &options.UpdateOptions{
Upsert: &upsert, Upsert: &upsert,
} }
findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{"extend_msgs": 0}) set, err := d.GetExtendMsgSet(ctx, sourceID, sessionType, msgFirstModifyTime, c)
regex := fmt.Sprintf("^%s", sourceID)
result, err := c.Find(ctx, bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType, "max_msg_update_time": bson.M{"$lte": msgFirstModifyTime}}, findOpts)
if err != nil { if err != nil {
return utils.Wrap(err, "") return utils.Wrap(err, "")
} }
var setList []ExtendMsgSet if set == nil {
if err := result.All(ctx, &setList); err != nil { return errors.New(fmt.Sprintf("sourceID %s has no set", sourceID))
return utils.Wrap(err, "")
} }
if len(setList) == 0 { _, err = c.UpdateOne(ctx, bson.M{"source_id": set.SourceID, "session_type": sessionType}, bson.M{"$set": updateBson}, opt)
return utils.Wrap(errors.New("InsertOrUpdateReactionExtendMsgSet failed, len(setList) == 0"), "")
}
_, err = c.UpdateOne(ctx, bson.M{"source_id": setList[0].SourceID, "session_type": sessionType}, bson.M{"$set": updateBson}, opt)
return utils.Wrap(err, "") return utils.Wrap(err, "")
} }
// delete TypeKey // delete TypeKey
func (d *DataBases) DeleteReactionExtendMsgSet(sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList []*server_api_params.KeyValue) error { func (d *DataBases) DeleteReactionExtendMsgSet(sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*server_api_params.KeyValue) error {
ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second)
c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet)
var updateBson = bson.M{} var updateBson = bson.M{}
for _, v := range reactionExtensionList { for _, v := range reactionExtensionList {
updateBson[fmt.Sprintf("extend_msgs.%s.%s", clientMsgID, v.TypeKey)] = "" updateBson[fmt.Sprintf("extend_msgs.%s.%s", clientMsgID, v.TypeKey)] = ""
} }
set, err := d.GetExtendMsgSet(ctx, sourceID, sessionType, msgFirstModifyTime, c)
findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{"extend_msgs": 0})
regex := fmt.Sprintf("^%s", sourceID)
result, err := c.Find(ctx, bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType, "max_msg_update_time": bson.M{"$lte": msgFirstModifyTime}}, findOpts)
if err != nil { if err != nil {
return utils.Wrap(err, "") return utils.Wrap(err, "")
} }
var setList []ExtendMsgSet if set == nil {
if err := result.All(ctx, &setList); err != nil { return errors.New(fmt.Sprintf("sourceID %s has no set", sourceID))
return utils.Wrap(err, "")
} }
if len(setList) == 0 { _, err = c.UpdateOne(ctx, bson.M{"source_id": set.SourceID, "session_type": sessionType}, bson.M{"$unset": updateBson})
return utils.Wrap(errors.New("InsertOrUpdateReactionExtendMsgSet failed, len(setList) == 0"), "")
}
_, err = c.UpdateOne(ctx, bson.M{"source_id": setList[0].SourceID, "session_type": sessionType}, bson.M{"$unset": updateBson})
return err return err
} }
@ -189,16 +187,19 @@ func (d *DataBases) GetExtendMsg(sourceID string, sessionType int32, clientMsgID
c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet)
findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{fmt.Sprintf("extend_msgs.%s", clientMsgID): 1}) findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{fmt.Sprintf("extend_msgs.%s", clientMsgID): 1})
regex := fmt.Sprintf("^%s", sourceID) regex := fmt.Sprintf("^%s", sourceID)
result, err := c.Find(ctx, bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType, "msgFirstModifyTime": bson.M{"$lte": maxMsgUpdateTime}}, findOpts) result, err := c.Find(ctx, bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType, "max_msg_update_time": bson.M{"$lte": maxMsgUpdateTime}}, findOpts)
if err != nil { if err != nil {
return nil, utils.Wrap(err, "") return nil, utils.Wrap(err, "")
} }
var extendMsgList []ExtendMsg var setList []ExtendMsgSet
if err := result.All(ctx, &extendMsgList); err != nil { if err := result.All(ctx, &setList); err != nil {
return nil, utils.Wrap(err, "") return nil, utils.Wrap(err, "")
} }
if len(extendMsgList) == 0 { if len(setList) == 0 {
return nil, utils.Wrap(errors.New("GetExtendMsg failed, len(setList) == 0"), "") return nil, utils.Wrap(errors.New("GetExtendMsg failed, len(setList) == 0"), "")
} }
return &extendMsgList[0], nil if v, ok := setList[0].ExtendMsgs[clientMsgID]; ok {
return &v, nil
}
return nil, errors.New(fmt.Sprintf("cant find client msg id: %s", clientMsgID))
} }

View File

@ -567,9 +567,9 @@ func DelConversationFromCache(ownerUserID, conversationID string) error {
return utils.Wrap(db.DB.Rc.TagAsDeleted(conversationCache+ownerUserID+":"+conversationID), "DelConversationFromCache err") return utils.Wrap(db.DB.Rc.TagAsDeleted(conversationCache+ownerUserID+":"+conversationID), "DelConversationFromCache err")
} }
func GetExtendMsg(sourceID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (*db.ExtendMsg, error) { func GetExtendMsg(sourceID string, sessionType int32, clientMsgID string, firstModifyTime int64) (*db.ExtendMsg, error) {
getExtendMsg := func() (string, error) { getExtendMsg := func() (string, error) {
extendMsg, err := db.DB.GetExtendMsg(sourceID, sessionType, clientMsgID, maxMsgUpdateTime) extendMsg, err := db.DB.GetExtendMsg(sourceID, sessionType, clientMsgID, firstModifyTime)
if err != nil { if err != nil {
return "", utils.Wrap(err, "GetExtendMsgList failed") return "", utils.Wrap(err, "GetExtendMsgList failed")
} }

View File

@ -38,7 +38,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} }
func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) }
func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) ProtoMessage() {}
func (*MsgDataToMQ) Descriptor() ([]byte, []int) { func (*MsgDataToMQ) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{0} return fileDescriptor_msg_a1760b784e1ce32d, []int{0}
} }
func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b)
@ -91,7 +91,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} }
func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) }
func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) ProtoMessage() {}
func (*MsgDataToDB) Descriptor() ([]byte, []int) { func (*MsgDataToDB) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{1} return fileDescriptor_msg_a1760b784e1ce32d, []int{1}
} }
func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b)
@ -138,7 +138,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} }
func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) }
func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) ProtoMessage() {}
func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{2} return fileDescriptor_msg_a1760b784e1ce32d, []int{2}
} }
func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b)
@ -193,7 +193,7 @@ func (m *MsgDataToMongoByMQ) Reset() { *m = MsgDataToMongoByMQ{} }
func (m *MsgDataToMongoByMQ) String() string { return proto.CompactTextString(m) } func (m *MsgDataToMongoByMQ) String() string { return proto.CompactTextString(m) }
func (*MsgDataToMongoByMQ) ProtoMessage() {} func (*MsgDataToMongoByMQ) ProtoMessage() {}
func (*MsgDataToMongoByMQ) Descriptor() ([]byte, []int) { func (*MsgDataToMongoByMQ) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{3} return fileDescriptor_msg_a1760b784e1ce32d, []int{3}
} }
func (m *MsgDataToMongoByMQ) XXX_Unmarshal(b []byte) error { func (m *MsgDataToMongoByMQ) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MsgDataToMongoByMQ.Unmarshal(m, b) return xxx_messageInfo_MsgDataToMongoByMQ.Unmarshal(m, b)
@ -273,7 +273,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} }
func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) }
func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) ProtoMessage() {}
func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{4} return fileDescriptor_msg_a1760b784e1ce32d, []int{4}
} }
func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b)
@ -321,7 +321,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} }
func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) }
func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) ProtoMessage() {}
func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{5} return fileDescriptor_msg_a1760b784e1ce32d, []int{5}
} }
func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b)
@ -382,7 +382,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} }
func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) }
func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) ProtoMessage() {}
func (*SendMsgReq) Descriptor() ([]byte, []int) { func (*SendMsgReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{6} return fileDescriptor_msg_a1760b784e1ce32d, []int{6}
} }
func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { func (m *SendMsgReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) return xxx_messageInfo_SendMsgReq.Unmarshal(m, b)
@ -438,7 +438,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} }
func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) }
func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) ProtoMessage() {}
func (*SendMsgResp) Descriptor() ([]byte, []int) { func (*SendMsgResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{7} return fileDescriptor_msg_a1760b784e1ce32d, []int{7}
} }
func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { func (m *SendMsgResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) return xxx_messageInfo_SendMsgResp.Unmarshal(m, b)
@ -506,7 +506,7 @@ func (m *ClearMsgReq) Reset() { *m = ClearMsgReq{} }
func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) } func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) }
func (*ClearMsgReq) ProtoMessage() {} func (*ClearMsgReq) ProtoMessage() {}
func (*ClearMsgReq) Descriptor() ([]byte, []int) { func (*ClearMsgReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{8} return fileDescriptor_msg_a1760b784e1ce32d, []int{8}
} }
func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error { func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b) return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b)
@ -559,7 +559,7 @@ func (m *ClearMsgResp) Reset() { *m = ClearMsgResp{} }
func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) } func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) }
func (*ClearMsgResp) ProtoMessage() {} func (*ClearMsgResp) ProtoMessage() {}
func (*ClearMsgResp) Descriptor() ([]byte, []int) { func (*ClearMsgResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{9} return fileDescriptor_msg_a1760b784e1ce32d, []int{9}
} }
func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error { func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b) return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b)
@ -608,7 +608,7 @@ func (m *SetMsgMinSeqReq) Reset() { *m = SetMsgMinSeqReq{} }
func (m *SetMsgMinSeqReq) String() string { return proto.CompactTextString(m) } func (m *SetMsgMinSeqReq) String() string { return proto.CompactTextString(m) }
func (*SetMsgMinSeqReq) ProtoMessage() {} func (*SetMsgMinSeqReq) ProtoMessage() {}
func (*SetMsgMinSeqReq) Descriptor() ([]byte, []int) { func (*SetMsgMinSeqReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{10} return fileDescriptor_msg_a1760b784e1ce32d, []int{10}
} }
func (m *SetMsgMinSeqReq) XXX_Unmarshal(b []byte) error { func (m *SetMsgMinSeqReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetMsgMinSeqReq.Unmarshal(m, b) return xxx_messageInfo_SetMsgMinSeqReq.Unmarshal(m, b)
@ -675,7 +675,7 @@ func (m *SetMsgMinSeqResp) Reset() { *m = SetMsgMinSeqResp{} }
func (m *SetMsgMinSeqResp) String() string { return proto.CompactTextString(m) } func (m *SetMsgMinSeqResp) String() string { return proto.CompactTextString(m) }
func (*SetMsgMinSeqResp) ProtoMessage() {} func (*SetMsgMinSeqResp) ProtoMessage() {}
func (*SetMsgMinSeqResp) Descriptor() ([]byte, []int) { func (*SetMsgMinSeqResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{11} return fileDescriptor_msg_a1760b784e1ce32d, []int{11}
} }
func (m *SetMsgMinSeqResp) XXX_Unmarshal(b []byte) error { func (m *SetMsgMinSeqResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetMsgMinSeqResp.Unmarshal(m, b) return xxx_messageInfo_SetMsgMinSeqResp.Unmarshal(m, b)
@ -721,7 +721,7 @@ func (m *SetSendMsgStatusReq) Reset() { *m = SetSendMsgStatusReq{} }
func (m *SetSendMsgStatusReq) String() string { return proto.CompactTextString(m) } func (m *SetSendMsgStatusReq) String() string { return proto.CompactTextString(m) }
func (*SetSendMsgStatusReq) ProtoMessage() {} func (*SetSendMsgStatusReq) ProtoMessage() {}
func (*SetSendMsgStatusReq) Descriptor() ([]byte, []int) { func (*SetSendMsgStatusReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{12} return fileDescriptor_msg_a1760b784e1ce32d, []int{12}
} }
func (m *SetSendMsgStatusReq) XXX_Unmarshal(b []byte) error { func (m *SetSendMsgStatusReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetSendMsgStatusReq.Unmarshal(m, b) return xxx_messageInfo_SetSendMsgStatusReq.Unmarshal(m, b)
@ -767,7 +767,7 @@ func (m *SetSendMsgStatusResp) Reset() { *m = SetSendMsgStatusResp{} }
func (m *SetSendMsgStatusResp) String() string { return proto.CompactTextString(m) } func (m *SetSendMsgStatusResp) String() string { return proto.CompactTextString(m) }
func (*SetSendMsgStatusResp) ProtoMessage() {} func (*SetSendMsgStatusResp) ProtoMessage() {}
func (*SetSendMsgStatusResp) Descriptor() ([]byte, []int) { func (*SetSendMsgStatusResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{13} return fileDescriptor_msg_a1760b784e1ce32d, []int{13}
} }
func (m *SetSendMsgStatusResp) XXX_Unmarshal(b []byte) error { func (m *SetSendMsgStatusResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetSendMsgStatusResp.Unmarshal(m, b) return xxx_messageInfo_SetSendMsgStatusResp.Unmarshal(m, b)
@ -812,7 +812,7 @@ func (m *GetSendMsgStatusReq) Reset() { *m = GetSendMsgStatusReq{} }
func (m *GetSendMsgStatusReq) String() string { return proto.CompactTextString(m) } func (m *GetSendMsgStatusReq) String() string { return proto.CompactTextString(m) }
func (*GetSendMsgStatusReq) ProtoMessage() {} func (*GetSendMsgStatusReq) ProtoMessage() {}
func (*GetSendMsgStatusReq) Descriptor() ([]byte, []int) { func (*GetSendMsgStatusReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{14} return fileDescriptor_msg_a1760b784e1ce32d, []int{14}
} }
func (m *GetSendMsgStatusReq) XXX_Unmarshal(b []byte) error { func (m *GetSendMsgStatusReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSendMsgStatusReq.Unmarshal(m, b) return xxx_messageInfo_GetSendMsgStatusReq.Unmarshal(m, b)
@ -852,7 +852,7 @@ func (m *GetSendMsgStatusResp) Reset() { *m = GetSendMsgStatusResp{} }
func (m *GetSendMsgStatusResp) String() string { return proto.CompactTextString(m) } func (m *GetSendMsgStatusResp) String() string { return proto.CompactTextString(m) }
func (*GetSendMsgStatusResp) ProtoMessage() {} func (*GetSendMsgStatusResp) ProtoMessage() {}
func (*GetSendMsgStatusResp) Descriptor() ([]byte, []int) { func (*GetSendMsgStatusResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{15} return fileDescriptor_msg_a1760b784e1ce32d, []int{15}
} }
func (m *GetSendMsgStatusResp) XXX_Unmarshal(b []byte) error { func (m *GetSendMsgStatusResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSendMsgStatusResp.Unmarshal(m, b) return xxx_messageInfo_GetSendMsgStatusResp.Unmarshal(m, b)
@ -907,7 +907,7 @@ func (m *DelSuperGroupMsgReq) Reset() { *m = DelSuperGroupMsgReq{} }
func (m *DelSuperGroupMsgReq) String() string { return proto.CompactTextString(m) } func (m *DelSuperGroupMsgReq) String() string { return proto.CompactTextString(m) }
func (*DelSuperGroupMsgReq) ProtoMessage() {} func (*DelSuperGroupMsgReq) ProtoMessage() {}
func (*DelSuperGroupMsgReq) Descriptor() ([]byte, []int) { func (*DelSuperGroupMsgReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{16} return fileDescriptor_msg_a1760b784e1ce32d, []int{16}
} }
func (m *DelSuperGroupMsgReq) XXX_Unmarshal(b []byte) error { func (m *DelSuperGroupMsgReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DelSuperGroupMsgReq.Unmarshal(m, b) return xxx_messageInfo_DelSuperGroupMsgReq.Unmarshal(m, b)
@ -967,7 +967,7 @@ func (m *DelSuperGroupMsgResp) Reset() { *m = DelSuperGroupMsgResp{} }
func (m *DelSuperGroupMsgResp) String() string { return proto.CompactTextString(m) } func (m *DelSuperGroupMsgResp) String() string { return proto.CompactTextString(m) }
func (*DelSuperGroupMsgResp) ProtoMessage() {} func (*DelSuperGroupMsgResp) ProtoMessage() {}
func (*DelSuperGroupMsgResp) Descriptor() ([]byte, []int) { func (*DelSuperGroupMsgResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{17} return fileDescriptor_msg_a1760b784e1ce32d, []int{17}
} }
func (m *DelSuperGroupMsgResp) XXX_Unmarshal(b []byte) error { func (m *DelSuperGroupMsgResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DelSuperGroupMsgResp.Unmarshal(m, b) return xxx_messageInfo_DelSuperGroupMsgResp.Unmarshal(m, b)
@ -1014,7 +1014,7 @@ func (m *GetSuperGroupMsgReq) Reset() { *m = GetSuperGroupMsgReq{} }
func (m *GetSuperGroupMsgReq) String() string { return proto.CompactTextString(m) } func (m *GetSuperGroupMsgReq) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupMsgReq) ProtoMessage() {} func (*GetSuperGroupMsgReq) ProtoMessage() {}
func (*GetSuperGroupMsgReq) Descriptor() ([]byte, []int) { func (*GetSuperGroupMsgReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{18} return fileDescriptor_msg_a1760b784e1ce32d, []int{18}
} }
func (m *GetSuperGroupMsgReq) XXX_Unmarshal(b []byte) error { func (m *GetSuperGroupMsgReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupMsgReq.Unmarshal(m, b) return xxx_messageInfo_GetSuperGroupMsgReq.Unmarshal(m, b)
@ -1068,7 +1068,7 @@ func (m *GetSuperGroupMsgResp) Reset() { *m = GetSuperGroupMsgResp{} }
func (m *GetSuperGroupMsgResp) String() string { return proto.CompactTextString(m) } func (m *GetSuperGroupMsgResp) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupMsgResp) ProtoMessage() {} func (*GetSuperGroupMsgResp) ProtoMessage() {}
func (*GetSuperGroupMsgResp) Descriptor() ([]byte, []int) { func (*GetSuperGroupMsgResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{19} return fileDescriptor_msg_a1760b784e1ce32d, []int{19}
} }
func (m *GetSuperGroupMsgResp) XXX_Unmarshal(b []byte) error { func (m *GetSuperGroupMsgResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupMsgResp.Unmarshal(m, b) return xxx_messageInfo_GetSuperGroupMsgResp.Unmarshal(m, b)
@ -1121,7 +1121,7 @@ func (m *GetWriteDiffMsgReq) Reset() { *m = GetWriteDiffMsgReq{} }
func (m *GetWriteDiffMsgReq) String() string { return proto.CompactTextString(m) } func (m *GetWriteDiffMsgReq) String() string { return proto.CompactTextString(m) }
func (*GetWriteDiffMsgReq) ProtoMessage() {} func (*GetWriteDiffMsgReq) ProtoMessage() {}
func (*GetWriteDiffMsgReq) Descriptor() ([]byte, []int) { func (*GetWriteDiffMsgReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{20} return fileDescriptor_msg_a1760b784e1ce32d, []int{20}
} }
func (m *GetWriteDiffMsgReq) XXX_Unmarshal(b []byte) error { func (m *GetWriteDiffMsgReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetWriteDiffMsgReq.Unmarshal(m, b) return xxx_messageInfo_GetWriteDiffMsgReq.Unmarshal(m, b)
@ -1168,7 +1168,7 @@ func (m *GetWriteDiffMsgResp) Reset() { *m = GetWriteDiffMsgResp{} }
func (m *GetWriteDiffMsgResp) String() string { return proto.CompactTextString(m) } func (m *GetWriteDiffMsgResp) String() string { return proto.CompactTextString(m) }
func (*GetWriteDiffMsgResp) ProtoMessage() {} func (*GetWriteDiffMsgResp) ProtoMessage() {}
func (*GetWriteDiffMsgResp) Descriptor() ([]byte, []int) { func (*GetWriteDiffMsgResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{21} return fileDescriptor_msg_a1760b784e1ce32d, []int{21}
} }
func (m *GetWriteDiffMsgResp) XXX_Unmarshal(b []byte) error { func (m *GetWriteDiffMsgResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetWriteDiffMsgResp.Unmarshal(m, b) return xxx_messageInfo_GetWriteDiffMsgResp.Unmarshal(m, b)
@ -1230,7 +1230,7 @@ func (m *ModifyMessageReactionExtensionsReq) Reset() { *m = ModifyMessag
func (m *ModifyMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) } func (m *ModifyMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
func (*ModifyMessageReactionExtensionsReq) ProtoMessage() {} func (*ModifyMessageReactionExtensionsReq) ProtoMessage() {}
func (*ModifyMessageReactionExtensionsReq) Descriptor() ([]byte, []int) { func (*ModifyMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{22} return fileDescriptor_msg_a1760b784e1ce32d, []int{22}
} }
func (m *ModifyMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error { func (m *ModifyMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ModifyMessageReactionExtensionsReq.Unmarshal(m, b) return xxx_messageInfo_ModifyMessageReactionExtensionsReq.Unmarshal(m, b)
@ -1348,7 +1348,7 @@ func (m *SetMessageReactionExtensionsReq) Reset() { *m = SetMessageReact
func (m *SetMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) } func (m *SetMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
func (*SetMessageReactionExtensionsReq) ProtoMessage() {} func (*SetMessageReactionExtensionsReq) ProtoMessage() {}
func (*SetMessageReactionExtensionsReq) Descriptor() ([]byte, []int) { func (*SetMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{23} return fileDescriptor_msg_a1760b784e1ce32d, []int{23}
} }
func (m *SetMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error { func (m *SetMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetMessageReactionExtensionsReq.Unmarshal(m, b) return xxx_messageInfo_SetMessageReactionExtensionsReq.Unmarshal(m, b)
@ -1461,7 +1461,7 @@ func (m *SetMessageReactionExtensionsResp) Reset() { *m = SetMessageReac
func (m *SetMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) } func (m *SetMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
func (*SetMessageReactionExtensionsResp) ProtoMessage() {} func (*SetMessageReactionExtensionsResp) ProtoMessage() {}
func (*SetMessageReactionExtensionsResp) Descriptor() ([]byte, []int) { func (*SetMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{24} return fileDescriptor_msg_a1760b784e1ce32d, []int{24}
} }
func (m *SetMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error { func (m *SetMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetMessageReactionExtensionsResp.Unmarshal(m, b) return xxx_messageInfo_SetMessageReactionExtensionsResp.Unmarshal(m, b)
@ -1537,7 +1537,7 @@ func (m *ModifyMessageReactionExtensionsResp) Reset() { *m = ModifyMessa
func (m *ModifyMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) } func (m *ModifyMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
func (*ModifyMessageReactionExtensionsResp) ProtoMessage() {} func (*ModifyMessageReactionExtensionsResp) ProtoMessage() {}
func (*ModifyMessageReactionExtensionsResp) Descriptor() ([]byte, []int) { func (*ModifyMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{25} return fileDescriptor_msg_a1760b784e1ce32d, []int{25}
} }
func (m *ModifyMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error { func (m *ModifyMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ModifyMessageReactionExtensionsResp.Unmarshal(m, b) return xxx_messageInfo_ModifyMessageReactionExtensionsResp.Unmarshal(m, b)
@ -1602,7 +1602,7 @@ func (m *OperateMessageListReactionExtensionsReq) Reset() {
func (m *OperateMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) } func (m *OperateMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
func (*OperateMessageListReactionExtensionsReq) ProtoMessage() {} func (*OperateMessageListReactionExtensionsReq) ProtoMessage() {}
func (*OperateMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) { func (*OperateMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{26} return fileDescriptor_msg_a1760b784e1ce32d, []int{26}
} }
func (m *OperateMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error { func (m *OperateMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateMessageListReactionExtensionsReq.Unmarshal(m, b) return xxx_messageInfo_OperateMessageListReactionExtensionsReq.Unmarshal(m, b)
@ -1674,7 +1674,7 @@ func (m *OperateMessageListReactionExtensionsReq_MessageReactionKey) String() st
} }
func (*OperateMessageListReactionExtensionsReq_MessageReactionKey) ProtoMessage() {} func (*OperateMessageListReactionExtensionsReq_MessageReactionKey) ProtoMessage() {}
func (*OperateMessageListReactionExtensionsReq_MessageReactionKey) Descriptor() ([]byte, []int) { func (*OperateMessageListReactionExtensionsReq_MessageReactionKey) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{26, 0} return fileDescriptor_msg_a1760b784e1ce32d, []int{26, 0}
} }
func (m *OperateMessageListReactionExtensionsReq_MessageReactionKey) XXX_Unmarshal(b []byte) error { func (m *OperateMessageListReactionExtensionsReq_MessageReactionKey) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateMessageListReactionExtensionsReq_MessageReactionKey.Unmarshal(m, b) return xxx_messageInfo_OperateMessageListReactionExtensionsReq_MessageReactionKey.Unmarshal(m, b)
@ -1731,7 +1731,7 @@ func (m *OperateMessageListReactionExtensionsResp) Reset() {
func (m *OperateMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) } func (m *OperateMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
func (*OperateMessageListReactionExtensionsResp) ProtoMessage() {} func (*OperateMessageListReactionExtensionsResp) ProtoMessage() {}
func (*OperateMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) { func (*OperateMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{27} return fileDescriptor_msg_a1760b784e1ce32d, []int{27}
} }
func (m *OperateMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error { func (m *OperateMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateMessageListReactionExtensionsResp.Unmarshal(m, b) return xxx_messageInfo_OperateMessageListReactionExtensionsResp.Unmarshal(m, b)
@ -1792,7 +1792,7 @@ func (m *ExtendMsgResp) Reset() { *m = ExtendMsgResp{} }
func (m *ExtendMsgResp) String() string { return proto.CompactTextString(m) } func (m *ExtendMsgResp) String() string { return proto.CompactTextString(m) }
func (*ExtendMsgResp) ProtoMessage() {} func (*ExtendMsgResp) ProtoMessage() {}
func (*ExtendMsgResp) Descriptor() ([]byte, []int) { func (*ExtendMsgResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{28} return fileDescriptor_msg_a1760b784e1ce32d, []int{28}
} }
func (m *ExtendMsgResp) XXX_Unmarshal(b []byte) error { func (m *ExtendMsgResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExtendMsgResp.Unmarshal(m, b) return xxx_messageInfo_ExtendMsgResp.Unmarshal(m, b)
@ -1848,7 +1848,7 @@ func (m *ExtendMsg) Reset() { *m = ExtendMsg{} }
func (m *ExtendMsg) String() string { return proto.CompactTextString(m) } func (m *ExtendMsg) String() string { return proto.CompactTextString(m) }
func (*ExtendMsg) ProtoMessage() {} func (*ExtendMsg) ProtoMessage() {}
func (*ExtendMsg) Descriptor() ([]byte, []int) { func (*ExtendMsg) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{29} return fileDescriptor_msg_a1760b784e1ce32d, []int{29}
} }
func (m *ExtendMsg) XXX_Unmarshal(b []byte) error { func (m *ExtendMsg) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExtendMsg.Unmarshal(m, b) return xxx_messageInfo_ExtendMsg.Unmarshal(m, b)
@ -1916,7 +1916,7 @@ func (m *KeyValueResp) Reset() { *m = KeyValueResp{} }
func (m *KeyValueResp) String() string { return proto.CompactTextString(m) } func (m *KeyValueResp) String() string { return proto.CompactTextString(m) }
func (*KeyValueResp) ProtoMessage() {} func (*KeyValueResp) ProtoMessage() {}
func (*KeyValueResp) Descriptor() ([]byte, []int) { func (*KeyValueResp) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_489179134d252ef4, []int{30} return fileDescriptor_msg_a1760b784e1ce32d, []int{30}
} }
func (m *KeyValueResp) XXX_Unmarshal(b []byte) error { func (m *KeyValueResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KeyValueResp.Unmarshal(m, b) return xxx_messageInfo_KeyValueResp.Unmarshal(m, b)
@ -1957,6 +1957,60 @@ func (m *KeyValueResp) GetErrMsg() string {
return "" return ""
} }
type MsgDataToModifyByMQ struct {
AggregationID string `protobuf:"bytes,1,opt,name=aggregationID" json:"aggregationID,omitempty"`
MessageList []*MsgDataToMQ `protobuf:"bytes,2,rep,name=messageList" json:"messageList,omitempty"`
TriggerID string `protobuf:"bytes,3,opt,name=triggerID" json:"triggerID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MsgDataToModifyByMQ) Reset() { *m = MsgDataToModifyByMQ{} }
func (m *MsgDataToModifyByMQ) String() string { return proto.CompactTextString(m) }
func (*MsgDataToModifyByMQ) ProtoMessage() {}
func (*MsgDataToModifyByMQ) Descriptor() ([]byte, []int) {
return fileDescriptor_msg_a1760b784e1ce32d, []int{31}
}
func (m *MsgDataToModifyByMQ) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MsgDataToModifyByMQ.Unmarshal(m, b)
}
func (m *MsgDataToModifyByMQ) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MsgDataToModifyByMQ.Marshal(b, m, deterministic)
}
func (dst *MsgDataToModifyByMQ) XXX_Merge(src proto.Message) {
xxx_messageInfo_MsgDataToModifyByMQ.Merge(dst, src)
}
func (m *MsgDataToModifyByMQ) XXX_Size() int {
return xxx_messageInfo_MsgDataToModifyByMQ.Size(m)
}
func (m *MsgDataToModifyByMQ) XXX_DiscardUnknown() {
xxx_messageInfo_MsgDataToModifyByMQ.DiscardUnknown(m)
}
var xxx_messageInfo_MsgDataToModifyByMQ proto.InternalMessageInfo
func (m *MsgDataToModifyByMQ) GetAggregationID() string {
if m != nil {
return m.AggregationID
}
return ""
}
func (m *MsgDataToModifyByMQ) GetMessageList() []*MsgDataToMQ {
if m != nil {
return m.MessageList
}
return nil
}
func (m *MsgDataToModifyByMQ) GetTriggerID() string {
if m != nil {
return m.TriggerID
}
return ""
}
func init() { func init() {
proto.RegisterType((*MsgDataToMQ)(nil), "msg.MsgDataToMQ") proto.RegisterType((*MsgDataToMQ)(nil), "msg.MsgDataToMQ")
proto.RegisterType((*MsgDataToDB)(nil), "msg.MsgDataToDB") proto.RegisterType((*MsgDataToDB)(nil), "msg.MsgDataToDB")
@ -1993,6 +2047,7 @@ func init() {
proto.RegisterType((*ExtendMsg)(nil), "msg.ExtendMsg") proto.RegisterType((*ExtendMsg)(nil), "msg.ExtendMsg")
proto.RegisterMapType((map[string]*KeyValueResp)(nil), "msg.ExtendMsg.ReactionExtensionListEntry") proto.RegisterMapType((map[string]*KeyValueResp)(nil), "msg.ExtendMsg.ReactionExtensionListEntry")
proto.RegisterType((*KeyValueResp)(nil), "msg.KeyValueResp") proto.RegisterType((*KeyValueResp)(nil), "msg.KeyValueResp")
proto.RegisterType((*MsgDataToModifyByMQ)(nil), "msg.MsgDataToModifyByMQ")
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -2531,105 +2586,107 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
Metadata: "msg/msg.proto", Metadata: "msg/msg.proto",
} }
func init() { proto.RegisterFile("msg/msg.proto", fileDescriptor_msg_489179134d252ef4) } func init() { proto.RegisterFile("msg/msg.proto", fileDescriptor_msg_a1760b784e1ce32d) }
var fileDescriptor_msg_489179134d252ef4 = []byte{ var fileDescriptor_msg_a1760b784e1ce32d = []byte{
// 1548 bytes of a gzipped FileDescriptorProto // 1577 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x4f, 0x73, 0xdb, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x4f, 0x6f, 0xdb, 0xc6,
0x14, 0x1f, 0x59, 0xb1, 0x93, 0x3c, 0x27, 0x4d, 0xba, 0x4d, 0x83, 0xaa, 0x66, 0xa6, 0x46, 0xb4, 0x12, 0x07, 0x49, 0x4b, 0xb6, 0x47, 0x76, 0xec, 0xac, 0x1d, 0x3f, 0x86, 0x31, 0x10, 0x3d, 0xbe,
0xd4, 0x85, 0xd6, 0x19, 0x02, 0x33, 0x65, 0xe8, 0x81, 0x36, 0x75, 0x70, 0x33, 0x45, 0xa4, 0x91, 0xe4, 0x45, 0x79, 0x2f, 0x91, 0x51, 0xb7, 0x40, 0x8a, 0xe6, 0xd0, 0xc4, 0x91, 0xab, 0x18, 0x29,
0x03, 0xcc, 0xc0, 0x21, 0x55, 0xed, 0x8d, 0xaa, 0x89, 0x2d, 0x29, 0x5a, 0xa9, 0x89, 0x61, 0x28, 0xeb, 0x98, 0x72, 0x5b, 0xa0, 0x3d, 0x38, 0x8c, 0xb4, 0x66, 0x08, 0x4b, 0x24, 0xcd, 0xa5, 0x62,
0x27, 0x4e, 0x0c, 0x07, 0xb8, 0x71, 0xe2, 0xc6, 0x77, 0xe0, 0xc8, 0x85, 0x2b, 0x77, 0xbe, 0x02, 0xab, 0x45, 0xd3, 0x53, 0x4f, 0x45, 0x0e, 0xed, 0xad, 0xa7, 0xde, 0xfa, 0x1d, 0x7a, 0xec, 0xa5,
0x5f, 0x82, 0xd9, 0x5d, 0xd9, 0x5e, 0xfd, 0x8b, 0x15, 0x97, 0xe9, 0x94, 0x19, 0x6e, 0x7e, 0x6f, 0xd7, 0xde, 0xfb, 0x15, 0xfa, 0x25, 0x8a, 0xdd, 0xa5, 0xa4, 0xe5, 0x3f, 0x8b, 0x56, 0x8a, 0x20,
0xdf, 0xbe, 0x7d, 0xbf, 0xf7, 0x7e, 0xda, 0xb7, 0xbb, 0x86, 0xc5, 0x3e, 0xb1, 0xd6, 0xfb, 0xc4, 0x05, 0x7a, 0xd3, 0xec, 0xce, 0xce, 0xce, 0x6f, 0xe6, 0xc7, 0x9d, 0xdd, 0x11, 0x2c, 0xf6, 0x88,
0x6a, 0x78, 0xbe, 0x1b, 0xb8, 0x48, 0xee, 0x13, 0x4b, 0xad, 0xef, 0x78, 0xd8, 0xb9, 0xb5, 0xad, 0xbd, 0xd1, 0x23, 0x76, 0xdd, 0x0f, 0xbc, 0xd0, 0x43, 0x4a, 0x8f, 0xd8, 0x5a, 0x6d, 0xd7, 0xc7,
0xdf, 0x6a, 0x63, 0xff, 0x19, 0xf6, 0xd7, 0xbd, 0x43, 0x6b, 0x9d, 0x0d, 0xaf, 0x93, 0xee, 0xe1, 0xee, 0xed, 0x1d, 0xe3, 0x76, 0x0b, 0x07, 0xcf, 0x71, 0xb0, 0xe1, 0x1f, 0xd9, 0x1b, 0x6c, 0x7a,
0xfe, 0x31, 0x59, 0x3f, 0x26, 0xdc, 0x5c, 0x6d, 0x4c, 0xb4, 0xf4, 0x4d, 0xcf, 0xc3, 0x7e, 0x64, 0x83, 0x74, 0x8e, 0x0e, 0x4e, 0xc8, 0xc6, 0x09, 0xe1, 0xea, 0x5a, 0x7d, 0xa2, 0x66, 0x60, 0xf9,
0xaf, 0x7d, 0x0d, 0x55, 0x9d, 0x58, 0x4d, 0x33, 0x30, 0xf7, 0x5c, 0x7d, 0x17, 0xad, 0x40, 0x39, 0x3e, 0x0e, 0x22, 0x7d, 0xfd, 0x4b, 0xa8, 0x18, 0xc4, 0x6e, 0x58, 0xa1, 0xb5, 0xef, 0x19, 0x7b,
0x70, 0x0f, 0xb1, 0xa3, 0x48, 0x35, 0xa9, 0x3e, 0x6f, 0x70, 0x01, 0xd5, 0xa0, 0xea, 0x7a, 0xd8, 0x68, 0x15, 0x4a, 0xa1, 0x77, 0x84, 0x5d, 0x55, 0xaa, 0x4a, 0xb5, 0x79, 0x93, 0x0b, 0xa8, 0x0a,
0x37, 0x03, 0xdb, 0x75, 0xb6, 0x9b, 0x4a, 0x89, 0x8d, 0x89, 0x2a, 0xf4, 0x1e, 0xcc, 0xf6, 0xb9, 0x15, 0xcf, 0xc7, 0x81, 0x15, 0x3a, 0x9e, 0xbb, 0xd3, 0x50, 0x65, 0x36, 0x27, 0x0e, 0xa1, 0x77,
0x1b, 0x45, 0xae, 0x49, 0xf5, 0xea, 0x86, 0xda, 0x20, 0x2c, 0x80, 0x7d, 0xd3, 0xb3, 0xf7, 0x3d, 0x60, 0xb6, 0xc7, 0xcd, 0xa8, 0x4a, 0x55, 0xaa, 0x55, 0x36, 0xb5, 0x3a, 0x61, 0x0e, 0x1c, 0x58,
0xd3, 0x37, 0xfb, 0xa4, 0x11, 0x2d, 0x64, 0x0c, 0x4d, 0x35, 0x2c, 0x2c, 0xde, 0xdc, 0x14, 0x9d, 0xbe, 0x73, 0xe0, 0x5b, 0x81, 0xd5, 0x23, 0xf5, 0x68, 0x23, 0x73, 0xa8, 0xaa, 0x63, 0x61, 0xf3,
0x48, 0x85, 0x9d, 0x4c, 0x0e, 0x4e, 0xfb, 0x41, 0x82, 0xa5, 0x47, 0x21, 0x79, 0x2a, 0x02, 0xad, 0xc6, 0x96, 0x68, 0x44, 0x2a, 0x6c, 0x64, 0xb2, 0x73, 0xfa, 0x4b, 0x09, 0x96, 0x1e, 0xf7, 0xc9,
0x41, 0x75, 0x47, 0x98, 0xc5, 0xe1, 0x8a, 0x2a, 0x31, 0x9a, 0x52, 0xf1, 0x68, 0x34, 0x58, 0xf0, 0x33, 0x11, 0x68, 0x15, 0x2a, 0xbb, 0xc2, 0x2a, 0x0e, 0x57, 0x1c, 0x12, 0xbd, 0x91, 0x8b, 0x7b,
0x42, 0xf2, 0x74, 0xcf, 0xfd, 0x94, 0x60, 0x7f, 0xbb, 0xc9, 0xb2, 0x31, 0x6f, 0xc4, 0x74, 0xda, 0xa3, 0xc3, 0x82, 0xdf, 0x27, 0xcf, 0xf6, 0xbd, 0x8f, 0x09, 0x0e, 0x76, 0x1a, 0x2c, 0x1a, 0xf3,
0xaf, 0x12, 0xa0, 0x71, 0x2c, 0xae, 0x63, 0xb9, 0x9b, 0x03, 0x7d, 0x17, 0x29, 0x30, 0xdb, 0x33, 0x66, 0x6c, 0x4c, 0xff, 0x49, 0x02, 0x34, 0xf6, 0xc5, 0x73, 0x6d, 0x6f, 0x6b, 0x60, 0xec, 0x21,
0x49, 0xd0, 0xc6, 0x47, 0x2c, 0x9c, 0x19, 0x63, 0x28, 0xa2, 0xab, 0xb0, 0x68, 0x5a, 0x96, 0x8f, 0x15, 0x66, 0xbb, 0x16, 0x09, 0x5b, 0xf8, 0x98, 0xb9, 0x33, 0x63, 0x0e, 0x45, 0x74, 0x0d, 0x16,
0xad, 0x38, 0xc8, 0xb8, 0x12, 0x6d, 0x40, 0xb5, 0x8f, 0x09, 0x31, 0x2d, 0xfc, 0xb1, 0x4d, 0x02, 0x2d, 0xdb, 0x0e, 0xb0, 0x1d, 0x07, 0x19, 0x1f, 0x44, 0x9b, 0x50, 0xe9, 0x61, 0x42, 0x2c, 0x1b,
0x45, 0xae, 0xc9, 0xf5, 0xea, 0xc6, 0x72, 0x83, 0x52, 0x49, 0x40, 0x6e, 0x88, 0x46, 0x68, 0x0d, 0x7f, 0xe8, 0x90, 0x50, 0x55, 0xaa, 0x4a, 0xad, 0xb2, 0xb9, 0x5c, 0xa7, 0x54, 0x12, 0x90, 0x9b,
0xe6, 0x03, 0xdf, 0xb6, 0x2c, 0x16, 0xeb, 0x0c, 0xf3, 0x3a, 0x56, 0x68, 0x9f, 0x00, 0x6a, 0xe1, 0xa2, 0x12, 0x5a, 0x87, 0xf9, 0x30, 0x70, 0x6c, 0x9b, 0xf9, 0x3a, 0xc3, 0xac, 0x8e, 0x07, 0xf4,
0x40, 0x37, 0x4f, 0xee, 0x39, 0x5d, 0xdd, 0x76, 0xda, 0xf8, 0xc8, 0xc0, 0x47, 0x68, 0x15, 0x2a, 0x8f, 0x00, 0x35, 0x71, 0x68, 0x58, 0xa7, 0xf7, 0xdd, 0x8e, 0xe1, 0xb8, 0x2d, 0x7c, 0x6c, 0xe2,
0x11, 0x38, 0x9e, 0xb5, 0x48, 0x4a, 0xa6, 0xb4, 0x94, 0x4a, 0xa9, 0x76, 0x0c, 0x17, 0x52, 0xfe, 0x63, 0xb4, 0x06, 0xe5, 0x08, 0x1c, 0x8f, 0x5a, 0x24, 0x25, 0x43, 0x2a, 0xa7, 0x42, 0xaa, 0x9f,
0x88, 0x47, 0x81, 0x6f, 0xf9, 0xfe, 0x7d, 0xb7, 0x8b, 0x99, 0xc7, 0xb2, 0x31, 0x14, 0xe9, 0x52, 0xc0, 0x4a, 0xca, 0x1e, 0xf1, 0x29, 0xf0, 0xed, 0x20, 0x78, 0xe0, 0x75, 0x30, 0xb3, 0x58, 0x32,
0x5b, 0xbe, 0xaf, 0x13, 0x2b, 0xf2, 0x16, 0x49, 0x54, 0xaf, 0x9b, 0x27, 0x34, 0x53, 0x34, 0xbf, 0x87, 0x22, 0xdd, 0x6a, 0x3b, 0x08, 0x0c, 0x62, 0x47, 0xd6, 0x22, 0x89, 0x8e, 0x1b, 0xd6, 0x29,
0x8b, 0x46, 0x24, 0x31, 0x3d, 0xf3, 0xcb, 0xb0, 0x50, 0x3d, 0x93, 0xb4, 0xaf, 0x00, 0xda, 0xd8, 0x8d, 0x14, 0x8d, 0xef, 0xa2, 0x19, 0x49, 0x6c, 0x9c, 0xd9, 0x65, 0x58, 0xe8, 0x38, 0x93, 0xf4,
0xe9, 0xea, 0xc4, 0xa2, 0x00, 0x5e, 0x2e, 0xc9, 0x7f, 0x91, 0xa0, 0x3a, 0x5a, 0x9c, 0xa3, 0xc5, 0x2f, 0x00, 0x5a, 0xd8, 0xed, 0x18, 0xc4, 0xa6, 0x00, 0x5e, 0x2f, 0xc9, 0x7f, 0x94, 0xa0, 0x32,
0x71, 0xb4, 0x78, 0x8c, 0x16, 0xc7, 0xd0, 0x72, 0x89, 0x46, 0xc6, 0xd7, 0xd1, 0x89, 0x35, 0x2a, 0xda, 0x9c, 0xa3, 0xc5, 0x71, 0xb4, 0x78, 0x8c, 0x16, 0xc7, 0xd0, 0x72, 0x89, 0x7a, 0xc6, 0xf7,
0x93, 0xa8, 0xa2, 0x16, 0x9d, 0x9e, 0x8d, 0x9d, 0x80, 0x5b, 0x94, 0xb9, 0x85, 0xa0, 0x42, 0x2a, 0x31, 0x88, 0x3d, 0x4a, 0x93, 0x38, 0x44, 0x35, 0xda, 0x5d, 0x07, 0xbb, 0x21, 0xd7, 0x28, 0x71,
0xcc, 0x11, 0xec, 0x74, 0xf7, 0xec, 0x3e, 0x56, 0x2a, 0x35, 0xa9, 0x2e, 0x1b, 0x23, 0x59, 0xeb, 0x0d, 0x61, 0x08, 0x69, 0x30, 0x47, 0xb0, 0xdb, 0xd9, 0x77, 0x7a, 0x58, 0x2d, 0x57, 0xa5, 0x9a,
0x40, 0xf5, 0x7e, 0x0f, 0x9b, 0x7e, 0x94, 0x9e, 0x55, 0xa8, 0x84, 0xb1, 0xfa, 0x72, 0x89, 0xba, 0x62, 0x8e, 0x64, 0xbd, 0x0d, 0x95, 0x07, 0x5d, 0x6c, 0x05, 0x51, 0x78, 0xd6, 0xa0, 0xdc, 0x8f,
0x70, 0xbd, 0xa8, 0xf2, 0x3c, 0xc0, 0x91, 0x9c, 0x4c, 0x9e, 0x9c, 0xfe, 0x08, 0xef, 0xc2, 0xc2, 0xe5, 0x97, 0x4b, 0xd4, 0x84, 0xe7, 0x47, 0x99, 0xe7, 0x0e, 0x8e, 0xe4, 0x64, 0xf0, 0x94, 0xf4,
0x78, 0x91, 0x69, 0xd2, 0xa0, 0xfd, 0x2c, 0xc1, 0x52, 0x1b, 0x53, 0x3c, 0x31, 0x2e, 0x66, 0xc6, 0x47, 0x78, 0x0f, 0x16, 0xc6, 0x9b, 0x4c, 0x13, 0x06, 0xfd, 0x07, 0x09, 0x96, 0x5a, 0x98, 0xe2,
0xaa, 0xc0, 0xac, 0xe5, 0xbb, 0xa1, 0x37, 0x0a, 0x75, 0x28, 0xd2, 0x19, 0x7d, 0x4e, 0x91, 0x88, 0x89, 0x71, 0x31, 0xd3, 0x57, 0x15, 0x66, 0xed, 0xc0, 0xeb, 0xfb, 0x23, 0x57, 0x87, 0x22, 0x5d,
0x3a, 0x5c, 0x4a, 0x22, 0x98, 0x49, 0x97, 0x5f, 0xc4, 0x5f, 0x8e, 0xe3, 0xd7, 0x9a, 0xb0, 0x1c, 0xd1, 0xe3, 0x14, 0x89, 0xa8, 0xc3, 0xa5, 0x24, 0x82, 0x99, 0x74, 0xfa, 0x45, 0xfc, 0xa5, 0x38,
0x0f, 0x6d, 0x2a, 0x84, 0x3b, 0x70, 0xa1, 0x8d, 0x83, 0x88, 0x2c, 0xed, 0xc0, 0x0c, 0x42, 0x62, 0x7e, 0xbd, 0x01, 0xcb, 0x71, 0xd7, 0xa6, 0x42, 0xb8, 0x0b, 0x2b, 0x2d, 0x1c, 0x46, 0x64, 0x69,
0xa4, 0x43, 0x93, 0xd2, 0xa1, 0xad, 0x42, 0x85, 0x30, 0x73, 0xe6, 0xb0, 0x6c, 0x44, 0x92, 0xf6, 0x85, 0x56, 0xd8, 0x27, 0x66, 0xda, 0x35, 0x29, 0xed, 0xda, 0x1a, 0x94, 0x09, 0x53, 0x67, 0x06,
0x00, 0x56, 0xd2, 0x0e, 0xa7, 0x0a, 0xed, 0x36, 0xfb, 0x74, 0xcf, 0x1e, 0x9a, 0xf6, 0x18, 0x56, 0x4b, 0x66, 0x24, 0xe9, 0x0f, 0x61, 0x35, 0x6d, 0x70, 0x2a, 0xd7, 0xee, 0xb0, 0x4f, 0xf7, 0xfc,
0x5a, 0xff, 0x4a, 0x08, 0x02, 0x48, 0x39, 0x06, 0xf2, 0x3b, 0x09, 0x2e, 0x34, 0x71, 0xaf, 0x1d, 0xae, 0xe9, 0x4f, 0x60, 0xb5, 0xf9, 0x97, 0xb8, 0x20, 0x80, 0x54, 0x62, 0x20, 0xbf, 0x91, 0x60,
0x7a, 0xd8, 0x6f, 0xd1, 0x2a, 0x47, 0x3c, 0x16, 0xeb, 0x25, 0x25, 0xf8, 0x3a, 0xe6, 0x4d, 0x29, 0xa5, 0x81, 0xbb, 0xad, 0xbe, 0x8f, 0x83, 0x26, 0xcd, 0x72, 0xc4, 0x63, 0x31, 0x5f, 0x52, 0x82,
0x8f, 0x37, 0x72, 0x9c, 0x37, 0x13, 0xf9, 0x41, 0x93, 0x9d, 0x0e, 0x63, 0xaa, 0x64, 0x77, 0x78, 0xaf, 0x63, 0xde, 0xc8, 0x79, 0xbc, 0x51, 0xe2, 0xbc, 0x99, 0xc8, 0x0f, 0x1a, 0xec, 0xb4, 0x1b,
0xb2, 0x93, 0x80, 0x26, 0xf3, 0x60, 0x19, 0x64, 0xca, 0xec, 0x12, 0x63, 0x36, 0xfd, 0x99, 0x0f, 0x53, 0x05, 0xbb, 0xcd, 0x83, 0x9d, 0x04, 0x34, 0x99, 0x07, 0xcb, 0xa0, 0x50, 0x66, 0xcb, 0x8c,
0x48, 0x7b, 0xce, 0x0b, 0xf3, 0xe2, 0xe1, 0x4e, 0xb9, 0x2f, 0x3e, 0x60, 0xcd, 0xe5, 0x73, 0xdf, 0xd9, 0xf4, 0x67, 0x3e, 0x20, 0xfd, 0x05, 0x4f, 0xcc, 0xab, 0xbb, 0x3b, 0xe5, 0xb9, 0xf8, 0x90,
0x0e, 0x70, 0xd3, 0x3e, 0x38, 0x98, 0x1e, 0xa3, 0xf6, 0x0d, 0x4b, 0x57, 0xdc, 0xd3, 0x4b, 0x04, 0x15, 0x97, 0x4f, 0x03, 0x27, 0xc4, 0x0d, 0xe7, 0xf0, 0x70, 0x7a, 0x8c, 0xfa, 0x57, 0x2c, 0x5c,
0xf2, 0x63, 0x19, 0x34, 0xdd, 0xed, 0xda, 0x07, 0x03, 0x9d, 0x77, 0x56, 0x03, 0x9b, 0x1d, 0x1a, 0x71, 0x4b, 0xaf, 0x11, 0xc8, 0x77, 0x25, 0xd0, 0x0d, 0xaf, 0xe3, 0x1c, 0x0e, 0x0c, 0x5e, 0x59,
0xec, 0xd6, 0x49, 0x80, 0x1d, 0x62, 0xbb, 0x4e, 0xc1, 0xaf, 0x98, 0xee, 0xd1, 0x6e, 0xe8, 0x77, 0x4d, 0x6c, 0xb5, 0xa9, 0xb3, 0xdb, 0xa7, 0x21, 0x76, 0x89, 0xe3, 0xb9, 0x05, 0xbf, 0x62, 0x7a,
0xf0, 0x78, 0x83, 0x1d, 0xca, 0x31, 0x32, 0xcb, 0xe9, 0xcd, 0x97, 0x60, 0x42, 0x17, 0xda, 0x1b, 0x46, 0x7b, 0xfd, 0xa0, 0x8d, 0xc7, 0x07, 0xec, 0x50, 0x8e, 0x91, 0x59, 0x49, 0x1f, 0xbe, 0x04,
0x78, 0x98, 0x51, 0xb3, 0x6c, 0x88, 0x2a, 0x74, 0x02, 0x17, 0xfd, 0x64, 0x50, 0xec, 0x90, 0x50, 0x13, 0xba, 0xd1, 0xfe, 0xc0, 0xc7, 0x8c, 0x9a, 0x25, 0x53, 0x1c, 0x42, 0xa7, 0x70, 0x29, 0x48,
0x66, 0x87, 0x84, 0x4d, 0x7e, 0x48, 0x98, 0x88, 0xa1, 0x61, 0x64, 0x39, 0xd9, 0x72, 0x02, 0x7f, 0x3a, 0xc5, 0x2e, 0x09, 0x25, 0x76, 0x49, 0xd8, 0xe2, 0x97, 0x84, 0x89, 0x18, 0xea, 0x66, 0x96,
0x60, 0x64, 0x2f, 0x90, 0xec, 0x4c, 0x95, 0x74, 0x67, 0xba, 0x09, 0x25, 0x7c, 0xa2, 0xcc, 0xb2, 0x91, 0x6d, 0x37, 0x0c, 0x06, 0x66, 0xf6, 0x06, 0xc9, 0xca, 0x54, 0x4e, 0x57, 0xa6, 0x5b, 0x20,
0x7c, 0xaf, 0x35, 0x2c, 0xd7, 0xb5, 0x7a, 0x98, 0x1f, 0x4e, 0x9f, 0x84, 0x07, 0x8d, 0x76, 0xe0, 0xe3, 0x53, 0x75, 0x96, 0xc5, 0x7b, 0xbd, 0x6e, 0x7b, 0x9e, 0xdd, 0xc5, 0xfc, 0x72, 0xfa, 0xb4,
0xdb, 0x8e, 0xf5, 0x99, 0xd9, 0x0b, 0xb1, 0x51, 0xc2, 0x27, 0xe8, 0x2e, 0x2c, 0x98, 0x41, 0x60, 0x7f, 0x58, 0x6f, 0x85, 0x81, 0xe3, 0xda, 0x9f, 0x58, 0xdd, 0x3e, 0x36, 0x65, 0x7c, 0x8a, 0xee,
0x76, 0x9e, 0xe2, 0xee, 0xb6, 0x73, 0xe0, 0x2a, 0x73, 0x05, 0xe6, 0xc5, 0x66, 0x50, 0x5a, 0xd8, 0xc1, 0x82, 0x15, 0x86, 0x56, 0xfb, 0x19, 0xee, 0xec, 0xb8, 0x87, 0x9e, 0x3a, 0x57, 0x60, 0x5d,
0x84, 0x01, 0x51, 0xe6, 0x6b, 0x52, 0x7d, 0xce, 0x18, 0x8a, 0x68, 0x03, 0x56, 0x6c, 0x42, 0xc3, 0x6c, 0x05, 0xa5, 0x85, 0x43, 0x18, 0x10, 0x75, 0xbe, 0x2a, 0xd5, 0xe6, 0xcc, 0xa1, 0x88, 0x36,
0xf7, 0x1d, 0xb3, 0x37, 0x06, 0xae, 0x00, 0x33, 0xcb, 0x1c, 0x43, 0x0d, 0x40, 0x7d, 0x62, 0x7d, 0x61, 0xd5, 0x21, 0xd4, 0xfd, 0xc0, 0xb5, 0xba, 0x63, 0xe0, 0x2a, 0x30, 0xb5, 0xcc, 0x39, 0x54,
0x64, 0xfb, 0x24, 0xe0, 0xf9, 0x63, 0x1d, 0xb6, 0xca, 0x3a, 0x6c, 0xc6, 0x88, 0x8a, 0x41, 0xcd, 0x07, 0xd4, 0x23, 0xf6, 0x07, 0x4e, 0x40, 0x42, 0x1e, 0x3f, 0x56, 0x61, 0x2b, 0xac, 0xc2, 0x66,
0x4f, 0x22, 0xe5, 0xf6, 0x21, 0x1e, 0x44, 0xdc, 0xa0, 0x3f, 0xd1, 0x3b, 0x50, 0x7e, 0x46, 0x41, 0xcc, 0x68, 0x18, 0xb4, 0xfc, 0x20, 0x52, 0x6e, 0x1f, 0xe1, 0x41, 0xc4, 0x0d, 0xfa, 0x13, 0xbd,
0x44, 0x67, 0xd0, 0xcb, 0x19, 0x84, 0x7c, 0x88, 0x07, 0x1c, 0x27, 0xb7, 0xfc, 0xa0, 0xf4, 0xbe, 0x05, 0xa5, 0xe7, 0x14, 0x44, 0x74, 0x07, 0xbd, 0x92, 0x41, 0xc8, 0x47, 0x78, 0xc0, 0x71, 0x72,
0xa4, 0x7d, 0x5f, 0x86, 0x2b, 0xb4, 0x21, 0xbd, 0xaa, 0x84, 0x0c, 0x4f, 0x27, 0xe4, 0x87, 0x8c, 0xcd, 0xf7, 0xe4, 0x77, 0x25, 0xfd, 0xdb, 0x12, 0x5c, 0xa5, 0x05, 0xe9, 0x4d, 0x25, 0x64, 0xff,
0x90, 0x13, 0x00, 0xfc, 0xcf, 0xc6, 0xff, 0x0a, 0x1b, 0xff, 0x96, 0xa0, 0x76, 0x7a, 0x31, 0xa7, 0x6c, 0x42, 0xbe, 0xcf, 0x08, 0x39, 0x01, 0xc0, 0x3f, 0x6c, 0xfc, 0xbb, 0xb0, 0xf1, 0x0f, 0x09,
0x3d, 0x17, 0x8b, 0xd5, 0x94, 0xd3, 0xd5, 0xcc, 0xce, 0xc7, 0x4c, 0x5e, 0x3e, 0xc4, 0x6a, 0x94, 0xaa, 0x67, 0x27, 0x73, 0xda, 0x7b, 0xb1, 0x98, 0x4d, 0x25, 0x9d, 0xcd, 0xec, 0x78, 0xcc, 0xe4,
0xe3, 0xd5, 0xb8, 0x01, 0x15, 0x1f, 0x93, 0xb0, 0x17, 0x28, 0x15, 0xc6, 0xd0, 0xf3, 0x8c, 0xa1, 0xc5, 0x43, 0xcc, 0x46, 0x29, 0x9e, 0x8d, 0x9b, 0x50, 0x0e, 0x30, 0xe9, 0x77, 0x43, 0xb5, 0xcc,
0x23, 0xb0, 0x98, 0x78, 0x46, 0x64, 0xa0, 0xfd, 0x2e, 0xc1, 0x1b, 0x13, 0xf7, 0xd2, 0x29, 0xfb, 0x18, 0x7a, 0x91, 0x31, 0x74, 0x04, 0x16, 0x13, 0xdf, 0x8c, 0x14, 0xf4, 0x5f, 0x24, 0xf8, 0xcf,
0x53, 0x95, 0x84, 0x9d, 0x0e, 0x26, 0x44, 0xb8, 0xe1, 0x21, 0x16, 0x09, 0xf3, 0x3d, 0xbc, 0x63, 0xc4, 0xb3, 0x74, 0xca, 0xfa, 0x54, 0x21, 0xfd, 0x76, 0x1b, 0x13, 0x22, 0xbc, 0xf0, 0x10, 0xf3,
0x18, 0xa2, 0x19, 0xda, 0x00, 0x38, 0x30, 0xed, 0x1e, 0xee, 0xb2, 0x49, 0x33, 0xb9, 0x93, 0x04, 0x84, 0xd9, 0x1e, 0xbe, 0x31, 0x4c, 0x51, 0x0d, 0x6d, 0x02, 0x1c, 0x5a, 0x4e, 0x17, 0x77, 0xd8,
0x2b, 0xed, 0x2f, 0x19, 0xae, 0xf3, 0x9b, 0x1b, 0xd6, 0xc7, 0xd7, 0xc5, 0x17, 0xd8, 0x47, 0x72, 0xa2, 0x99, 0xdc, 0x45, 0x82, 0x96, 0xfe, 0xbb, 0x02, 0x37, 0xf8, 0xcb, 0x0d, 0x1b, 0xe3, 0xe7,
0x6f, 0x0e, 0xe2, 0x1e, 0x23, 0x27, 0xf6, 0x98, 0xc9, 0xfb, 0xc8, 0x31, 0xac, 0xf6, 0xe3, 0x49, 0xe2, 0x2b, 0x9c, 0x23, 0xb9, 0x2f, 0x07, 0xf1, 0x8c, 0x51, 0x12, 0x67, 0xcc, 0xe4, 0x73, 0xe4,
0x7e, 0x88, 0x07, 0xa9, 0x8d, 0xa4, 0x20, 0x92, 0x86, 0x9e, 0x72, 0x65, 0xe4, 0xb8, 0x57, 0x7f, 0x04, 0xd6, 0x7a, 0xf1, 0x20, 0x3f, 0xc2, 0x83, 0xd4, 0x41, 0x52, 0x10, 0x49, 0xdd, 0x48, 0x99,
0xa3, 0x77, 0xf8, 0xd4, 0x50, 0x92, 0x92, 0x52, 0x51, 0x4a, 0x96, 0x72, 0x29, 0xb9, 0x9b, 0xb7, 0x32, 0x73, 0xcc, 0x6b, 0x3f, 0xd3, 0x37, 0x7c, 0x6a, 0x2a, 0x49, 0x49, 0xa9, 0x28, 0x25, 0xe5,
0x53, 0xf2, 0xea, 0x9f, 0xfa, 0x09, 0x66, 0xcf, 0xd4, 0xfe, 0x90, 0xa0, 0x5e, 0x2c, 0x25, 0xaf, 0x5c, 0x4a, 0xee, 0xe5, 0x9d, 0x94, 0x3c, 0xfb, 0x67, 0x7e, 0x82, 0xd9, 0x2b, 0xf5, 0x5f, 0x25,
0x38, 0x4b, 0x5d, 0x58, 0x8c, 0x0d, 0xa2, 0x9b, 0x30, 0x8f, 0x87, 0x8a, 0xe8, 0x0d, 0xe9, 0x5c, 0xa8, 0x15, 0x0b, 0xc9, 0x1b, 0xce, 0x52, 0x0f, 0x16, 0x63, 0x93, 0xe8, 0x16, 0xcc, 0xe3, 0xe1,
0xc2, 0xc7, 0xd8, 0x40, 0x84, 0x56, 0xca, 0x83, 0x26, 0xc7, 0x0e, 0xe6, 0x7f, 0x96, 0x60, 0x7e, 0x40, 0xd4, 0x43, 0xba, 0x90, 0xb0, 0x31, 0x56, 0x10, 0xa1, 0xc9, 0x79, 0xd0, 0x94, 0xd8, 0xc5,
0xe4, 0x0a, 0xed, 0xe7, 0x95, 0x46, 0x62, 0xd1, 0xdf, 0x88, 0xaf, 0xfc, 0xe2, 0xed, 0xaa, 0x54, 0xfc, 0x37, 0x19, 0xe6, 0x47, 0xa6, 0xd0, 0x41, 0x5e, 0x6a, 0x24, 0xe6, 0xfd, 0xcd, 0xf8, 0xce,
0x94, 0x4d, 0x72, 0x2e, 0x9b, 0xb4, 0x44, 0xc3, 0xe2, 0xd7, 0x98, 0x78, 0x4b, 0x3a, 0xc7, 0x5a, 0xaf, 0x5e, 0xae, 0xe4, 0xa2, 0x6c, 0x52, 0x72, 0xd9, 0xa4, 0x27, 0x0a, 0x16, 0x7f, 0xc6, 0xc4,
0x20, 0xbf, 0xe1, 0x96, 0xf0, 0x89, 0xfa, 0xe5, 0x19, 0x9b, 0xc4, 0xf5, 0x78, 0x93, 0xc8, 0xd8, 0x4b, 0xd2, 0x05, 0x56, 0x02, 0xf9, 0x0b, 0x57, 0xc6, 0xa7, 0xda, 0xe7, 0xe7, 0x2c, 0x12, 0x37,
0x29, 0x85, 0xd6, 0x30, 0x80, 0x05, 0x71, 0x08, 0xdd, 0x86, 0xb9, 0xc3, 0x48, 0x8e, 0x0a, 0x78, 0xe2, 0x45, 0x22, 0xe3, 0xa4, 0x14, 0x4a, 0xc3, 0x00, 0x16, 0xc4, 0x29, 0x74, 0x07, 0xe6, 0x8e,
0x2a, 0xc3, 0x47, 0xc6, 0x67, 0x2f, 0xe6, 0xc6, 0x4f, 0x00, 0x72, 0x9f, 0x58, 0xe8, 0x31, 0x2c, 0x22, 0x39, 0x4a, 0xe0, 0x99, 0x0c, 0x1f, 0x29, 0x4f, 0x91, 0xcc, 0x97, 0x12, 0xac, 0x08, 0x6d,
0x25, 0x5e, 0xa5, 0xd0, 0xb5, 0x8c, 0x35, 0xd3, 0x2f, 0x61, 0xea, 0x9b, 0x45, 0xcc, 0x88, 0x87, 0x38, 0x1a, 0x23, 0xd6, 0x87, 0x4b, 0x75, 0xdb, 0xa4, 0x02, 0xdd, 0x36, 0xf9, 0xdc, 0xdd, 0x36,
0x5c, 0x58, 0x79, 0x14, 0xf6, 0x7a, 0xd1, 0xc7, 0xb6, 0x39, 0x68, 0xe3, 0x23, 0x56, 0xdf, 0xb7, 0x25, 0xd1, 0x6d, 0xdb, 0xfc, 0x1e, 0x40, 0xe9, 0x11, 0x1b, 0x3d, 0x81, 0xa5, 0x44, 0x97, 0x0c,
0x32, 0xe6, 0x67, 0x19, 0xd2, 0xb5, 0xde, 0x2e, 0x6c, 0xcb, 0xbe, 0x83, 0xd9, 0xe8, 0xc6, 0x8d, 0x5d, 0xcf, 0x88, 0x41, 0xba, 0x33, 0xa7, 0xfd, 0xb7, 0x88, 0x1a, 0xf1, 0x91, 0x07, 0xab, 0x8f,
0x96, 0xa2, 0xa3, 0xd4, 0xf0, 0xf5, 0x4b, 0x5d, 0x8e, 0x2b, 0x88, 0x87, 0x76, 0x01, 0x9a, 0xb8, 0xfb, 0xdd, 0x6e, 0xf4, 0xf1, 0x6f, 0x0d, 0x5a, 0xf8, 0x98, 0xf9, 0xf7, 0xbf, 0x8c, 0xf5, 0x59,
0xa7, 0x13, 0x8b, 0x93, 0x2e, 0x63, 0xa1, 0xf1, 0x30, 0xf5, 0xf0, 0xfa, 0x04, 0x0b, 0xe2, 0xa1, 0x8a, 0x74, 0xaf, 0xff, 0x17, 0xd6, 0x65, 0xdf, 0xe5, 0x6c, 0xd4, 0x01, 0x40, 0x4b, 0xd1, 0xd5,
0x16, 0x2c, 0x27, 0xef, 0xc2, 0x48, 0x61, 0x0b, 0x67, 0xdc, 0xd4, 0xd5, 0x4b, 0x39, 0x23, 0xc4, 0x6e, 0xd8, 0x8d, 0xd3, 0x96, 0xe3, 0x03, 0xc4, 0x47, 0x7b, 0x00, 0x0d, 0xdc, 0x35, 0x88, 0xcd,
0x43, 0xeb, 0x30, 0x37, 0x7c, 0x36, 0x42, 0x3c, 0x72, 0xe1, 0xa9, 0x4a, 0x3d, 0x9f, 0xd0, 0x10, 0x3f, 0x82, 0x8c, 0x8d, 0xc6, 0xd3, 0xd4, 0xc2, 0xbf, 0x27, 0x68, 0x10, 0x1f, 0x35, 0x61, 0x39,
0x0f, 0xdd, 0x81, 0x05, 0xf1, 0x25, 0x06, 0xad, 0x8c, 0x8e, 0x92, 0xc2, 0xbb, 0x91, 0x7a, 0x31, 0xf9, 0x36, 0x47, 0x2a, 0xdb, 0x38, 0xa3, 0x73, 0xa0, 0x5d, 0xce, 0x99, 0x21, 0x3e, 0xda, 0x80,
0x43, 0xcb, 0xc3, 0x4e, 0xbe, 0x97, 0x44, 0x61, 0x67, 0xbc, 0xcb, 0x44, 0x61, 0x67, 0x3e, 0xb0, 0xb9, 0x61, 0x1b, 0x0b, 0x71, 0xcf, 0x85, 0xd6, 0x99, 0x76, 0x31, 0x31, 0x42, 0x7c, 0x74, 0x17,
0xb4, 0x60, 0xb9, 0x95, 0xed, 0xa8, 0x95, 0xeb, 0xa8, 0x75, 0x8a, 0xa3, 0x8c, 0x44, 0x66, 0xbc, 0x16, 0xc4, 0xce, 0x10, 0x5a, 0x1d, 0x5d, 0x6d, 0x85, 0x3e, 0x96, 0x76, 0x29, 0x63, 0x94, 0xbb,
0x10, 0x08, 0x8e, 0x52, 0x89, 0x6c, 0x32, 0x96, 0x8b, 0x97, 0x64, 0xf4, 0xda, 0xd0, 0x3a, 0x71, 0x9d, 0xec, 0xdf, 0x44, 0x6e, 0x67, 0xf4, 0x89, 0x22, 0xb7, 0x33, 0x1b, 0x3e, 0x4d, 0x58, 0x6e,
0x09, 0x57, 0x95, 0xec, 0x01, 0xe2, 0xa1, 0x43, 0x58, 0x3b, 0xed, 0x20, 0x87, 0xae, 0x16, 0x39, 0x66, 0x1b, 0x6a, 0xe6, 0x1a, 0x6a, 0x9e, 0x61, 0x28, 0x23, 0x90, 0x19, 0x1d, 0x0b, 0xc1, 0x50,
0xb8, 0xab, 0xd7, 0x0a, 0x58, 0x11, 0x0f, 0x7d, 0x0b, 0xb5, 0xd6, 0xc8, 0x26, 0xbb, 0x45, 0xa1, 0x2a, 0x90, 0x0d, 0xc6, 0x72, 0xf1, 0xd1, 0x8e, 0xfe, 0x35, 0xd4, 0x4e, 0x34, 0x05, 0x34, 0x35,
0x9b, 0x67, 0x69, 0xf0, 0xea, 0xad, 0x33, 0x58, 0x13, 0x0f, 0x1d, 0xc1, 0xda, 0xbd, 0x6e, 0x37, 0x7b, 0x82, 0xf8, 0xe8, 0x08, 0xd6, 0xcf, 0xba, 0x58, 0xa2, 0x6b, 0x45, 0x1e, 0x12, 0xda, 0xf5,
0x1f, 0xed, 0xf5, 0x82, 0xf7, 0x66, 0xb5, 0x5e, 0xcc, 0x90, 0x78, 0xe8, 0x39, 0x5c, 0x69, 0xe2, 0x02, 0x5a, 0xc4, 0x47, 0x5f, 0x43, 0xb5, 0x39, 0xd2, 0xc9, 0x2e, 0x99, 0xe8, 0xd6, 0x79, 0x2e,
0x1e, 0x1e, 0x45, 0xf7, 0x92, 0x21, 0x6f, 0x5e, 0xfe, 0xe2, 0xd2, 0x8e, 0x87, 0x9d, 0xfd, 0x6d, 0x1c, 0xda, 0xed, 0x73, 0x68, 0x13, 0x1f, 0x1d, 0xc3, 0xfa, 0xfd, 0x4e, 0x27, 0x1f, 0xed, 0x8d,
0x5d, 0xf8, 0xeb, 0xa8, 0x4f, 0xac, 0x3b, 0x7d, 0x62, 0x3d, 0xa9, 0x30, 0xf1, 0xdd, 0x7f, 0x02, 0x82, 0xef, 0x78, 0xad, 0x56, 0x4c, 0x91, 0xf8, 0xe8, 0x05, 0x5c, 0x6d, 0xe0, 0x2e, 0x1e, 0x79,
0x00, 0x00, 0xff, 0xff, 0xa6, 0x82, 0xfe, 0x0e, 0xa3, 0x1a, 0x00, 0x00, 0xf7, 0x9a, 0x21, 0x6f, 0x5d, 0xf9, 0xec, 0xf2, 0xae, 0x8f, 0xdd, 0x83, 0x1d, 0x43, 0xf8, 0x2b,
0xab, 0x47, 0xec, 0xbb, 0x3d, 0x62, 0x3f, 0x2d, 0x33, 0xf1, 0xed, 0x3f, 0x03, 0x00, 0x00, 0xff,
0xff, 0x57, 0xed, 0x19, 0x89, 0x33, 0x1b, 0x00, 0x00,
} }

View File

@ -236,6 +236,13 @@ message KeyValueResp {
string errMsg = 3; string errMsg = 3;
} }
message MsgDataToModifyByMQ{
string aggregationID = 1;
repeated MsgDataToMQ messageList = 2;
string triggerID = 3;
}
service msg { service msg {
rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp);
rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp);