diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 884f5f842..af6fa025d 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -64,28 +64,37 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { } func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier, m.Data) - rpcReq := pbChat.GetMaxAndMinSeqReq{} - nReply := new(pbChat.GetMaxAndMinSeqResp) - rpcReq.UserID = m.SendID - rpcReq.OperationID = m.OperationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) - rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) - if err != nil { - log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err, rpcReq.String()) - nReply.ErrCode = 500 - nReply.ErrMsg = err.Error() - ws.getSeqResp(conn, m, nReply) + nReply := new(sdk_ws.GetMaxAndMinSeqResp) + isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq) + if isPass { + rpcReq := sdk_ws.GetMaxAndMinSeqReq{} + rpcReq.GroupIDList = data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList + rpcReq.UserID = m.SendID + rpcReq.OperationID = m.OperationID + log.Debug(m.OperationID, "Ws call success to getMaxAndMinSeq", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + msgClient := pbChat.NewChatClient(grpcConn) + rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) + if err != nil { + log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err.Error(), rpcReq.String()) + nReply.ErrCode = 500 + nReply.ErrMsg = err.Error() + ws.getSeqResp(conn, m, nReply) + } else { + log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) + ws.getSeqResp(conn, m, rpcReply) + } } else { - log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) - ws.getSeqResp(conn, m, rpcReply) + nReply.ErrCode = errCode + nReply.ErrMsg = errMsg + ws.getSeqResp(conn, m, nReply) + } + } -func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *pbChat.GetMaxAndMinSeqResp) { - var mReplyData sdk_ws.GetMaxAndMinSeqResp - mReplyData.MaxSeq = pb.GetMaxSeq() - mReplyData.MinSeq = pb.GetMinSeq() - b, _ := proto.Marshal(&mReplyData) +func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeqResp) { + log.Debug(m.OperationID, "getSeqResp come here ", pb.String()) + b, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, MsgIncr: m.MsgIncr, @@ -146,6 +155,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { sendMsgAllCountLock.Lock() sendMsgAllCount++ sendMsgAllCountLock.Unlock() + //stat.GaugeVecApiMethod.WithLabelValues("ws_send_message_count").Inc() log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) diff --git a/internal/msg_gateway/gate/validate.go b/internal/msg_gateway/gate/validate.go index 31198a918..0f4950728 100644 --- a/internal/msg_gateway/gate/validate.go +++ b/internal/msg_gateway/gate/validate.go @@ -59,6 +59,18 @@ type SeqListData struct { func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, errMsg string, returnData interface{}) { switch r { + case constant.WSGetNewestSeq: + data := open_im_sdk.GetMaxAndMinSeqReq{} + if err := proto.Unmarshal(m.Data, &data); err != nil { + log.Error("", "Decode Data struct err", err.Error(), r) + return false, 203, err.Error(), nil + } + if err := validate.Struct(data); err != nil { + log.Error("", "data args validate err", err.Error(), r) + return false, 204, err.Error(), nil + + } + return true, 0, "", data case constant.WSSendMsg: data := open_im_sdk.MsgData{} if err := proto.Unmarshal(m.Data, &data); err != nil { diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index f8c424dcc..8829906e4 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -14,14 +14,13 @@ const OnlineTopicBusy = 1 const OnlineTopicVacancy = 0 const Msg = 2 const ConsumerMsgs = 3 -const UserMessages = 4 +const AggregationMessages = 4 const MongoMessages = 5 const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler historyCH OnlineHistoryConsumerHandler - offlineHistoryCH OfflineHistoryConsumerHandler producer *kafka.Producer cmdCh chan Cmd2Value onlineTopicStatus int diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go deleted file mode 100644 index b7ee3b2e3..000000000 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ /dev/null @@ -1,313 +0,0 @@ -package logic - -import ( - "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/chat" - "Open_IM/pkg/utils" - "github.com/Shopify/sarama" - "github.com/golang/protobuf/proto" - "time" -) - -type OfflineHistoryConsumerHandler struct { - msgHandle map[string]fcb - historyConsumerGroup *kfk.MConsumerGroup - cmdCh chan Cmd2Value - msgCh chan Cmd2Value - chArrays [ChannelNum]chan Cmd2Value - msgDistributionCh chan Cmd2Value -} - -func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { - mc.msgHandle = make(map[string]fcb) - mc.msgDistributionCh = make(chan Cmd2Value) //no buffer channel - go mc.MessagesDistributionHandle() - mc.cmdCh = cmdCh - mc.msgCh = make(chan Cmd2Value, 1000) - for i := 0; i < ChannelNum; i++ { - mc.chArrays[i] = make(chan Cmd2Value, 1000) - go mc.Run(i) - } - if config.Config.ReliableStorage { - mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2Mongo - } else { - mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2MongoLowReliability - - } - mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, - OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschatOffline.Topic}, - config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline) - -} -func (och *OfflineHistoryConsumerHandler) Run(channelID int) { - for { - select { - case cmd := <-och.chArrays[channelID]: - switch cmd.Cmd { - case UserMessages: - msgChannelValue := cmd.Value.(MsgChannelValue) - msgList := msgChannelValue.msgList - triggerID := msgChannelValue.triggerID - storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - pushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) - for _, v := range msgList { - log.Debug(triggerID, "msg come to storage center", v.String()) - isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) - isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) - if isHistory { - storageMsgList = append(storageMsgList, v) - } - if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - pushMsgList = append(pushMsgList, v) - } - } - - //switch msgChannelValue.msg.MsgData.SessionType { - //case constant.SingleChatType: - //case constant.GroupChatType: - //case constant.NotificationChatType: - //default: - // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - // return - //} - - err, _ := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) - if err != nil { - singleMsgFailedCount += uint64(len(storageMsgList)) - log.NewError(triggerID, "single data insert to mongo err", err.Error(), storageMsgList) - } else { - singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount += uint64(len(storageMsgList)) - singleMsgSuccessCountMutex.Unlock() - for _, v := range pushMsgList { - sendMessageToPush(v, msgChannelValue.userID) - } - - } - } - } - } -} -func (och *OfflineHistoryConsumerHandler) MessagesDistributionHandle() { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) - for { - select { - case cmd := <-och.msgDistributionCh: - switch cmd.Cmd { - case ConsumerMsgs: - triggerChannelValue := cmd.Value.(TriggerChannelValue) - triggerID := triggerChannelValue.triggerID - consumerMessages := triggerChannelValue.cmsgList - //Aggregation map[userid]message list - log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) - for i := 0; i < len(consumerMessages); i++ { - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) - if err != nil { - log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) - return - } - log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String()) - if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { - oldM = append(oldM, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM - } else { - m := make([]*pbMsg.MsgDataToMQ, 0, 100) - m = append(m, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = m - } - } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) - for userID, v := range UserAggregationMsgs { - if len(v) >= 0 { - channelID := getHashCode(userID) % ChannelNum - go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} - }(channelID, userID, v) - } - } - } - } - } - -} -func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { - msg := cMsg.Value - now := time.Now() - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(msg, &msgFromMQ) - if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) - return - } - operationID := msgFromMQ.OperationID - log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) - //Control whether to store offline messages (mongo) - isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - //Control whether to store history messages (mysql) - isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) - isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - switch msgFromMQ.MsgData.SessionType { - case constant.SingleChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgKey, &msgFromMQ) - if err != nil { - singleMsgFailedCount++ - log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - return - } - singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount++ - singleMsgSuccessCountMutex.Unlock() - log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveSingleMsg cost time ", time.Since(now)) - case constant.GroupChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) - if err != nil { - log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) - return - } - groupMsgCount++ - } - go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) - log.NewDebug(operationID, "saveGroupMsg cost time ", time.Since(now)) - - case constant.NotificationChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgKey, &msgFromMQ) - if err != nil { - log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - return - } - log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) - default: - log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - return - } - sess.MarkMessage(cMsg, "") - log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) -} -func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { - msg := cMsg.Value - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(msg, &msgFromMQ) - if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) - return - } - operationID := msgFromMQ.OperationID - log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) - //Control whether to store offline messages (mongo) - isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - //mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} - //err := saveUserChat(msgKey, &msgFromMQ) - //if err != nil { - // singleMsgFailedCount++ - // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - // return - //} - //singleMsgSuccessCountMutex.Lock() - //singleMsgSuccessCount++ - //singleMsgSuccessCountMutex.Unlock() - //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } else { - if !(!isSenderSync && msgKey == msgFromMQ.MsgData.SendID) { - go sendMessageToPush(&msgFromMQ, msgKey) - } - } -} - -func (OfflineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } -func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } - -//func (mc *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, -// claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group -// //log.NewDebug("", "offline new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) -// //for msg := range claim.Messages() { -// // log.NewDebug("", "kafka get info to delay mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "offline") -// // //mc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) -// //} -// for msg := range claim.Messages() { -// if GetOnlineTopicStatus() == OnlineTopicVacancy { -// log.NewDebug("", "vacancy offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) -// } else { -// select { -// case <-mc.cmdCh: -// log.NewDebug("", "cmd offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// case <-time.After(time.Millisecond * time.Duration(100)): -// log.NewDebug("", "timeout offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// } -// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) -// } -// } -// -// return nil -//} -func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, - claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group - log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 0, 500) - t := time.NewTicker(time.Duration(500) * time.Millisecond) - var triggerID string - for msg := range claim.Messages() { - //och.TriggerCmd(OnlineTopicBusy) - cMsg = append(cMsg, msg) - select { - case <-t.C: - if len(cMsg) >= 0 { - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(cMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} - sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] - log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) - } - default: - if len(cMsg) >= 500 { - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "length trigger msg consumer start", len(cMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} - sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) - } - - } - log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) - - } - return nil -} diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index fb5b33ce9..62f0ea0e8 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -22,10 +22,10 @@ import ( ) type MsgChannelValue struct { - userID string - triggerID string - msgList []*pbMsg.MsgDataToMQ - lastSeq uint64 + aggregationID string //maybe userID or super groupID + triggerID string + msgList []*pbMsg.MsgDataToMQ + lastSeq uint64 } type TriggerChannelValue struct { triggerID string @@ -98,13 +98,13 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { select { case cmd := <-och.chArrays[channelID]: switch cmd.Cmd { - case UserMessages: + case AggregationMessages: msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - notStoragepushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) + notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) @@ -113,9 +113,10 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { storageMsgList = append(storageMsgList, v) //log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) } else { - if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - notStoragepushMsgList = append(notStoragepushMsgList, v) + if !(!isSenderSync && msgChannelValue.aggregationID == v.MsgData.SendID) { + notStoragePushMsgList = append(notStoragePushMsgList, v) } + } } @@ -128,8 +129,8 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) // return //} - log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragepushMsgList)) - err, lastSeq := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) + log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragePushMsgList)) + err, lastSeq := saveUserChatList(msgChannelValue.aggregationID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) log.NewError(triggerID, "single data insert to redis err", err.Error(), storageMsgList) @@ -137,28 +138,28 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) + och.SendMessageToMongoCH(msgChannelValue.aggregationID, triggerID, storageMsgList, lastSeq) go func(push, storage []*pbMsg.MsgDataToMQ) { for _, v := range storage { - sendMessageToPush(v, msgChannelValue.userID) + sendMessageToPush(v, msgChannelValue.aggregationID) } for _, x := range push { - sendMessageToPush(x, msgChannelValue.userID) + sendMessageToPush(x, msgChannelValue.aggregationID) } - }(notStoragepushMsgList, storageMsgList) + }(notStoragePushMsgList, storageMsgList) } } } } } -func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { - hashCode := getHashCode(userID) +func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { + hashCode := getHashCode(aggregationID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} + och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { for { @@ -169,9 +170,9 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID - userID := msgChannelValue.userID + aggregationID := msgChannelValue.aggregationID lastSeq := msgChannelValue.lastSeq - err := db.DB.BatchInsertChat2DB(userID, msgList, triggerID, lastSeq) + err := db.DB.BatchInsertChat2DB(aggregationID, msgList, triggerID, lastSeq) if err != nil { log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) } @@ -202,7 +203,7 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { for { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) + aggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) select { case cmd := <-och.msgDistributionCh: switch cmd.Cmd { @@ -220,23 +221,23 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { return } log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) - if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + if oldM, ok := aggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + aggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { m := make([]*pbMsg.MsgDataToMQ, 0, 100) m = append(m, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = m + aggregationMsgs[string(consumerMessages[i].Key)] = m } } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) - for userID, v := range UserAggregationMsgs { + log.Debug(triggerID, "generate map list users len", len(aggregationMsgs)) + for aggregationID, v := range aggregationMsgs { if len(v) >= 0 { - hashCode := getHashCode(userID) + hashCode := getHashCode(aggregationID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} + och.chArrays[channelID] <- Cmd2Value{Cmd: AggregationMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: v, triggerID: triggerID}} //}(channelID, userID, v) } } diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 1811d3847..d9bb49344 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -6,18 +6,25 @@ import ( commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" - pbMsg "Open_IM/pkg/proto/chat" open_im_sdk "Open_IM/pkg/proto/sdk_ws" ) -func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeqReq) (*pbMsg.GetMaxAndMinSeqResp, error) { +func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAndMinSeqReq) (*open_im_sdk.GetMaxAndMinSeqResp, error) { log.NewInfo(in.OperationID, "rpc getMaxAndMinSeq is arriving", in.String()) + resp := new(open_im_sdk.GetMaxAndMinSeqResp) + m := make(map[string]*open_im_sdk.MaxAndMinSeq) //seq, err := model.GetBiggestSeqFromReceive(in.UserID) maxSeq, err1 := commonDB.DB.GetUserMaxSeq(in.UserID) minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) - resp := new(pbMsg.GetMaxAndMinSeqResp) if err1 == nil { resp.MaxSeq = uint32(maxSeq) + for _, v := range in.GroupIDList { + x := new(open_im_sdk.MaxAndMinSeq) + maxSeq, _ := commonDB.DB.GetUserMaxSeq(v) + x.MaxSeq = uint32(maxSeq) + m[v] = x + } + resp.GroupMaxAndMinSeq = m } else if err1 == redis.ErrNil { resp.MaxSeq = 0 } else { @@ -39,6 +46,7 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) { log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String()) resp := new(open_im_sdk.PullMessageBySeqListResp) + m := make(map[string]*open_im_sdk.MsgDataList) //msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID) if err != nil { @@ -60,6 +68,32 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull } else { resp.List = redisMsgList } + for k, v := range in.GroupSeqList { + x := new(open_im_sdk.MsgDataList) + redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(k, v.SeqList, in.OperationID) + if err != nil { + if err != redis.ErrNil { + log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) + } else { + log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) + } + msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(k, failedSeqList, in.OperationID) + if err1 != nil { + log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) + resp.ErrCode = 201 + resp.ErrMsg = err.Error() + return resp, nil + } else { + redisMsgList = append(redisMsgList, msgList...) + x.MsgDataList = redisMsgList + m[k] = x + } + } else { + x.MsgDataList = redisMsgList + m[k] = x + } + } + resp.GroupMsgDataList = m //respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID) //respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat) return resp, nil diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index a97dd84ed..00a20ae13 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -50,46 +50,49 @@ type MsgCallBackResp struct { } func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { - if data.MsgData.SessionType == constant.GroupChatType { - return true, 0, "" - } - log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) - reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) - cacheClient := cacheRpc.NewCacheClient(etcdConn) - cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) - if err != nil { - log.NewError(data.OperationID, "GetBlackIDListFromCache rpc call failed ", err.Error()) - } else { - if cacheResp.CommonResp.ErrCode != 0 { - log.NewError(data.OperationID, "GetBlackIDListFromCache rpc logic call failed ", cacheResp.String()) - } else { - if utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { - return false, 600, "in black list" - } - } - } - log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) - if config.Config.MessageVerify.FriendVerify { - reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} + if data.MsgData.SessionType == constant.SingleChatType { + log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) + reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) cacheClient := cacheRpc.NewCacheClient(etcdConn) - cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) + cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) if err != nil { - log.NewError(data.OperationID, "GetFriendIDListFromCache rpc call failed ", err.Error()) + log.NewError(data.OperationID, "GetBlackIDListFromCache rpc call failed ", err.Error()) } else { if cacheResp.CommonResp.ErrCode != 0 { - log.NewError(data.OperationID, "GetFriendIDListFromCache rpc logic call failed ", cacheResp.String()) + log.NewError(data.OperationID, "GetBlackIDListFromCache rpc logic call failed ", cacheResp.String()) } else { - if !utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { - return false, 601, "not friend" + if utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { + return false, 600, "in black list" } } } - return true, 0, "" + log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) + if config.Config.MessageVerify.FriendVerify { + reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + cacheClient := cacheRpc.NewCacheClient(etcdConn) + cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) + if err != nil { + log.NewError(data.OperationID, "GetFriendIDListFromCache rpc call failed ", err.Error()) + } else { + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(data.OperationID, "GetFriendIDListFromCache rpc logic call failed ", cacheResp.String()) + } else { + if !utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { + return false, 601, "not friend" + } + } + } + return true, 0, "" + } else { + return true, 0, "" + } + } else { return true, 0, "" } + } func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { msg.ServerMsgID = GetMsgID(msg.SendID) @@ -368,6 +371,34 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.Debug(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) + case constant.SuperGroupChatType: + // callback + callbackResp := callbackBeforeSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSuperGroupMsg resp: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + if callbackResp.ErrCode == 0 { + callbackResp.ErrCode = 201 + } + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSuperGroupMsg result", "end rpc and return", callbackResp) + return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) + } + msgToMQSingle.MsgData = pb.MsgData + log.NewInfo(msgToMQSingle.OperationID, msgToMQSingle) + err1 := rpc.sendMsgToKafka(&msgToMQSingle, msgToMQSingle.MsgData.GroupID, constant.OnlineStatus) + if err1 != nil { + log.NewError(msgToMQSingle.OperationID, "kafka send msg err:RecvID", msgToMQSingle.MsgData.RecvID, msgToMQSingle.String()) + return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) + } + + // callback + callbackResp = callbackAfterSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendSuperGroupMsg resp: ", callbackResp) + } + return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) + default: return returnMsg(&replay, pb, 203, "unknown sessionType", "", 0) } diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 5878c3851..05906924a 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -105,9 +105,9 @@ const ( SysMsgType = 200 //SessionType - SingleChatType = 1 - GroupChatType = 2 - + SingleChatType = 1 + GroupChatType = 2 + SuperGroupChatType = 3 NotificationChatType = 4 //token NormalToken = 0 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 6784012a9..d96c1494a 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1032,6 +1032,10 @@ func getSeqUid(uid string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return indexGen(uid, seqSuffix) } +func getSeqSuperGroupID(groupID string, seq uint32) string { + seqSuffix := seq / singleGocMsgNum + return superGroupIndexGen(groupID, seqSuffix) +} func GetSeqUid(uid string, seq uint32) string { return getSeqUid(uid, seq) @@ -1069,3 +1073,6 @@ func isNotContainInt32(target uint32, List []uint32) bool { func indexGen(uid string, seqSuffix uint32) string { return uid + ":" + strconv.FormatInt(int64(seqSuffix), 10) } +func superGroupIndexGen(groupID string, seqSuffix uint32) string { + return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) +} diff --git a/pkg/proto/auto_proto.sh b/pkg/proto/auto_proto.sh index 25408d46e..7ecece08e 100644 --- a/pkg/proto/auto_proto.sh +++ b/pkg/proto/auto_proto.sh @@ -4,10 +4,14 @@ source ./proto_dir.cfg for ((i = 0; i < ${#all_proto[*]}; i++)); do proto=${all_proto[$i]} - protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto + + protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto s=`echo $proto | sed 's/ //g'` v=${s//proto/pb.go} protoc-go-inject-tag -input=./$v echo "protoc --go_out=plugins=grpc:." $proto done echo "proto file generate success..." + +find ./ -type f -path "*.pb.go"|xargs sed -i 's/\".\/sdk_ws\"/\"Open_IM\/pkg\/proto\/sdk_ws\"/g' + diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index cf1c6ba50..092fff9ca 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -37,7 +37,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{0} + return fileDescriptor_chat_732204f30d7bcb33, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{1} + return fileDescriptor_chat_732204f30d7bcb33, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{2} + return fileDescriptor_chat_732204f30d7bcb33, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -210,7 +210,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{3} + return fileDescriptor_chat_732204f30d7bcb33, []int{3} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -258,7 +258,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{4} + return fileDescriptor_chat_732204f30d7bcb33, []int{4} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -319,7 +319,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{5} + return fileDescriptor_chat_732204f30d7bcb33, []int{5} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{6} + return fileDescriptor_chat_732204f30d7bcb33, []int{6} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -451,7 +451,7 @@ const _ = grpc.SupportPackageIsVersion4 // Client API for Chat service type ChatClient interface { - GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*GetMaxAndMinSeqResp, error) + GetMaxAndMinSeq(ctx context.Context, in *sdk_ws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdk_ws.GetMaxAndMinSeqResp, error) PullMessageBySeqList(ctx context.Context, in *sdk_ws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, opts ...grpc.CallOption) (*sdk_ws.DelMsgListResp, error) @@ -465,8 +465,8 @@ func NewChatClient(cc *grpc.ClientConn) ChatClient { return &chatClient{cc} } -func (c *chatClient) GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*GetMaxAndMinSeqResp, error) { - out := new(GetMaxAndMinSeqResp) +func (c *chatClient) GetMaxAndMinSeq(ctx context.Context, in *sdk_ws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdk_ws.GetMaxAndMinSeqResp, error) { + out := new(sdk_ws.GetMaxAndMinSeqResp) err := grpc.Invoke(ctx, "/pbChat.Chat/GetMaxAndMinSeq", in, out, c.cc, opts...) if err != nil { return nil, err @@ -504,7 +504,7 @@ func (c *chatClient) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, o // Server API for Chat service type ChatServer interface { - GetMaxAndMinSeq(context.Context, *GetMaxAndMinSeqReq) (*GetMaxAndMinSeqResp, error) + GetMaxAndMinSeq(context.Context, *sdk_ws.GetMaxAndMinSeqReq) (*sdk_ws.GetMaxAndMinSeqResp, error) PullMessageBySeqList(context.Context, *sdk_ws.PullMessageBySeqListReq) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error) DelMsgList(context.Context, *sdk_ws.DelMsgListReq) (*sdk_ws.DelMsgListResp, error) @@ -515,7 +515,7 @@ func RegisterChatServer(s *grpc.Server, srv ChatServer) { } func _Chat_GetMaxAndMinSeq_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMaxAndMinSeqReq) + in := new(sdk_ws.GetMaxAndMinSeqReq) if err := dec(in); err != nil { return nil, err } @@ -527,7 +527,7 @@ func _Chat_GetMaxAndMinSeq_Handler(srv interface{}, ctx context.Context, dec fun FullMethod: "/pbChat.Chat/GetMaxAndMinSeq", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ChatServer).GetMaxAndMinSeq(ctx, req.(*GetMaxAndMinSeqReq)) + return srv.(ChatServer).GetMaxAndMinSeq(ctx, req.(*sdk_ws.GetMaxAndMinSeqReq)) } return interceptor(ctx, in, info, handler) } @@ -611,40 +611,40 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_83f286704599d5b1) } +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_732204f30d7bcb33) } -var fileDescriptor_chat_83f286704599d5b1 = []byte{ - // 507 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcd, 0x6e, 0xda, 0x40, - 0x10, 0x96, 0x49, 0x80, 0x32, 0x34, 0x42, 0xda, 0x44, 0x95, 0xe5, 0x5e, 0x1c, 0x9f, 0x50, 0x2b, - 0x19, 0x89, 0xf6, 0xd6, 0x53, 0x89, 0xa3, 0x8a, 0xaa, 0xdb, 0x24, 0x86, 0x5e, 0x7a, 0x41, 0x9b, - 0x30, 0x32, 0x16, 0x60, 0x2f, 0x3b, 0xa6, 0xa4, 0xed, 0x33, 0xf4, 0x19, 0xfa, 0x3e, 0x7d, 0xaa, - 0xca, 0xbb, 0x26, 0x98, 0x40, 0x15, 0x4e, 0xbd, 0x58, 0x9a, 0x6f, 0x3e, 0x7f, 0x3f, 0xeb, 0x1f, - 0x68, 0xdd, 0x4d, 0x44, 0xd6, 0xc9, 0x2f, 0xbe, 0x54, 0x69, 0x96, 0xb2, 0x9a, 0xbc, 0xbd, 0x98, - 0x88, 0xcc, 0x39, 0xbf, 0x92, 0x98, 0x8c, 0xfa, 0xbc, 0x23, 0xa7, 0x51, 0x47, 0xaf, 0x3a, 0x34, - 0x9e, 0x8e, 0x56, 0xd4, 0x59, 0x91, 0xa1, 0x7a, 0x3f, 0xa1, 0xc9, 0x29, 0x0a, 0x44, 0x26, 0x86, - 0x29, 0xbf, 0x61, 0x67, 0x50, 0xcd, 0xd2, 0x29, 0x26, 0xb6, 0xe5, 0x5a, 0xed, 0x46, 0x68, 0x06, - 0xe6, 0x42, 0x33, 0x95, 0xa8, 0x44, 0x16, 0xa7, 0x49, 0x3f, 0xb0, 0x2b, 0x7a, 0x57, 0x86, 0xd8, - 0x5b, 0xa8, 0xcf, 0x8d, 0x8c, 0x7d, 0xe4, 0x5a, 0xed, 0x66, 0xd7, 0xf1, 0x09, 0xd5, 0x37, 0x54, - 0x23, 0x21, 0xe3, 0x91, 0x14, 0x4a, 0xcc, 0xc9, 0x2f, 0x8c, 0xc2, 0x35, 0xd5, 0xc3, 0x92, 0x79, - 0xd0, 0x2b, 0x8b, 0x58, 0x07, 0x8b, 0x3c, 0x1d, 0xce, 0xfb, 0x65, 0x41, 0xeb, 0x7a, 0x49, 0x93, - 0x72, 0x51, 0x17, 0x9a, 0x57, 0xa5, 0xbb, 0x4c, 0xdd, 0x32, 0x54, 0x4e, 0x53, 0x39, 0x3c, 0x8d, - 0x07, 0xcf, 0xe5, 0x92, 0x26, 0xc3, 0xf4, 0x0b, 0xa1, 0xea, 0x07, 0xfa, 0x34, 0x1a, 0xe1, 0x16, - 0xe6, 0x7d, 0x06, 0xf6, 0x01, 0x33, 0x2e, 0xee, 0xdf, 0x27, 0x63, 0x1e, 0x27, 0x03, 0x5c, 0x84, - 0xb8, 0x60, 0x2f, 0xa0, 0x56, 0xdc, 0x63, 0xc2, 0x14, 0xd3, 0xe3, 0xa4, 0x95, 0x9d, 0xa4, 0xde, - 0x0a, 0x4e, 0x77, 0xf4, 0x48, 0x32, 0x1b, 0xea, 0x97, 0x4a, 0x5d, 0xa4, 0x63, 0xd4, 0x8a, 0xd5, - 0x70, 0x3d, 0xe6, 0x56, 0x97, 0x4a, 0x71, 0x8a, 0x0a, 0xb5, 0x62, 0xca, 0x71, 0x2e, 0xee, 0x07, - 0xb8, 0xd0, 0xb1, 0x4f, 0xc2, 0x62, 0xd2, 0xb8, 0xd6, 0xb5, 0x8f, 0x0b, 0x5c, 0x4f, 0xde, 0x0f, - 0x80, 0x01, 0x26, 0x63, 0x4e, 0x51, 0x5e, 0xe0, 0xff, 0xbe, 0x3b, 0xbf, 0x2d, 0x68, 0x3e, 0x98, - 0x9b, 0xb6, 0xb8, 0xdd, 0x16, 0x37, 0x6d, 0x71, 0xab, 0xad, 0x99, 0xf2, 0x64, 0xc6, 0x87, 0x53, - 0xd4, 0x0f, 0x74, 0xb5, 0x46, 0x58, 0x86, 0x72, 0xc6, 0xdd, 0x2c, 0xc6, 0x24, 0x33, 0x8c, 0xaa, - 0x61, 0x94, 0x20, 0xe6, 0xc0, 0x33, 0xc2, 0x64, 0x3c, 0x8c, 0xe7, 0x68, 0xd7, 0x5c, 0xab, 0x7d, - 0x14, 0x3e, 0xcc, 0xdd, 0x3f, 0x15, 0x38, 0xce, 0x3f, 0x43, 0xf6, 0x11, 0x5a, 0x8f, 0x9e, 0x0f, - 0x73, 0x7c, 0xf3, 0x89, 0xfa, 0xbb, 0x2f, 0x82, 0xf3, 0xf2, 0x9f, 0x3b, 0x92, 0x2c, 0x85, 0xb3, - 0xeb, 0xe5, 0x6c, 0xc6, 0x91, 0x48, 0x44, 0xd8, 0xfb, 0x3e, 0xc0, 0xc5, 0xa7, 0x98, 0x32, 0xf6, - 0x6a, 0xcf, 0x99, 0xed, 0x23, 0xe6, 0x06, 0xaf, 0x0f, 0xe6, 0x92, 0x64, 0x5d, 0xa8, 0x17, 0xc7, - 0xcc, 0xd8, 0x3a, 0xd8, 0xe6, 0xa1, 0x3b, 0xa7, 0x3b, 0x18, 0x49, 0x76, 0x03, 0x10, 0xe0, 0x8c, - 0x53, 0xa4, 0xa3, 0xb9, 0x7b, 0xec, 0x36, 0xeb, 0x5c, 0xe4, 0xfc, 0x09, 0x06, 0xc9, 0x5e, 0xeb, - 0xeb, 0x89, 0xaf, 0x7f, 0x71, 0xef, 0x8c, 0xdf, 0x6d, 0x4d, 0xff, 0xbf, 0xde, 0xfc, 0x0d, 0x00, - 0x00, 0xff, 0xff, 0x6f, 0x9d, 0x6f, 0xa0, 0xfd, 0x04, 0x00, 0x00, +var fileDescriptor_chat_732204f30d7bcb33 = []byte{ + // 508 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xdd, 0x6e, 0xda, 0x30, + 0x14, 0x56, 0x68, 0x0b, 0xe3, 0xb0, 0x0a, 0xc9, 0xad, 0xa6, 0x88, 0xab, 0x34, 0xd2, 0x26, 0xb4, + 0x49, 0x89, 0xc4, 0x76, 0xb7, 0xab, 0xd1, 0x54, 0x13, 0xd2, 0xbc, 0xb6, 0x81, 0xdd, 0xec, 0x86, + 0xb9, 0xcd, 0x51, 0x88, 0x80, 0xc4, 0xf8, 0x84, 0xd1, 0x6d, 0xcf, 0xb0, 0x67, 0xd8, 0xab, 0xed, + 0x51, 0xa6, 0xd8, 0x69, 0x09, 0x05, 0xa9, 0x5c, 0xed, 0x06, 0xe9, 0x7c, 0xfe, 0xfc, 0xfd, 0x18, + 0xc7, 0xd0, 0xbe, 0x9d, 0x88, 0xdc, 0x2f, 0x7e, 0x3c, 0xa9, 0xb2, 0x3c, 0x63, 0x75, 0x79, 0x73, + 0x3e, 0x11, 0x79, 0xe7, 0xec, 0x52, 0x62, 0x3a, 0x1e, 0x70, 0x5f, 0x4e, 0x63, 0x5f, 0x2f, 0xf9, + 0x14, 0x4d, 0xc7, 0x2b, 0xf2, 0x57, 0x64, 0xa8, 0xee, 0x2f, 0x68, 0x71, 0x8a, 0x03, 0x91, 0x8b, + 0x51, 0xc6, 0xaf, 0xd9, 0x29, 0x1c, 0xe5, 0xd9, 0x14, 0x53, 0xdb, 0x72, 0xac, 0x6e, 0x33, 0x34, + 0x03, 0x73, 0xa0, 0x95, 0x49, 0x54, 0x22, 0x4f, 0xb2, 0x74, 0x10, 0xd8, 0x35, 0xbd, 0x56, 0x85, + 0xd8, 0x3b, 0x68, 0xcc, 0x8d, 0x8c, 0x7d, 0xe0, 0x58, 0xdd, 0x56, 0xaf, 0xe3, 0x11, 0xaa, 0xef, + 0xa8, 0xc6, 0x42, 0x26, 0x63, 0x29, 0x94, 0x98, 0x93, 0x57, 0x1a, 0x85, 0xf7, 0x54, 0x17, 0x2b, + 0xe6, 0x41, 0xbf, 0x2a, 0x62, 0xed, 0x2d, 0xf2, 0x74, 0x38, 0xf7, 0xb7, 0x05, 0xed, 0xab, 0x25, + 0x4d, 0xaa, 0x45, 0x1d, 0x68, 0x5d, 0x56, 0x76, 0x99, 0xba, 0x55, 0xa8, 0x9a, 0xa6, 0xb6, 0x7f, + 0x1a, 0x17, 0x9e, 0xcb, 0x25, 0x4d, 0x46, 0xd9, 0x17, 0x42, 0x35, 0x08, 0xf4, 0x69, 0x34, 0xc3, + 0x0d, 0xcc, 0xfd, 0x0c, 0xec, 0x23, 0xe6, 0x5c, 0xdc, 0x7d, 0x48, 0x23, 0x9e, 0xa4, 0x43, 0x5c, + 0x84, 0xb8, 0x60, 0x2f, 0xa0, 0x5e, 0xee, 0x31, 0x61, 0xca, 0xe9, 0x71, 0xd2, 0xda, 0x56, 0x52, + 0x77, 0x05, 0x27, 0x5b, 0x7a, 0x24, 0x99, 0x0d, 0x8d, 0x0b, 0xa5, 0xce, 0xb3, 0x08, 0xb5, 0xe2, + 0x51, 0x78, 0x3f, 0x16, 0x56, 0x17, 0x4a, 0x71, 0x8a, 0x4b, 0xb5, 0x72, 0x2a, 0x70, 0x2e, 0xee, + 0x86, 0xb8, 0xd0, 0xb1, 0x8f, 0xc3, 0x72, 0xd2, 0xb8, 0xd6, 0xb5, 0x0f, 0x4b, 0x5c, 0x4f, 0xee, + 0x4f, 0x80, 0x21, 0xa6, 0x11, 0xa7, 0xb8, 0x28, 0xf0, 0x7f, 0xef, 0xce, 0x1f, 0x0b, 0x5a, 0x0f, + 0xe6, 0xa6, 0x2d, 0x6e, 0xb6, 0xc5, 0x75, 0x5b, 0xdc, 0x68, 0x6b, 0xa6, 0x22, 0x99, 0xf1, 0xe1, + 0x14, 0x0f, 0x02, 0x5d, 0xad, 0x19, 0x56, 0xa1, 0x82, 0x71, 0x3b, 0x4b, 0x30, 0xcd, 0x0d, 0xe3, + 0xc8, 0x30, 0x2a, 0x10, 0xeb, 0xc0, 0x33, 0xc2, 0x34, 0x1a, 0x25, 0x73, 0xb4, 0xeb, 0x8e, 0xd5, + 0x3d, 0x08, 0x1f, 0xe6, 0xde, 0xdf, 0x1a, 0x1c, 0x16, 0x9f, 0x21, 0xfb, 0x06, 0xed, 0x47, 0xff, + 0x0f, 0x7b, 0xb9, 0xa3, 0xe2, 0xf6, 0x9d, 0xe8, 0xbc, 0xda, 0x87, 0x46, 0x92, 0x65, 0x70, 0x7a, + 0xb5, 0x9c, 0xcd, 0x38, 0x12, 0x89, 0x18, 0xfb, 0x3f, 0x86, 0xb8, 0xf8, 0x94, 0x50, 0xce, 0x5e, + 0xef, 0xd8, 0xbf, 0x8b, 0x58, 0x78, 0xbd, 0xd9, 0x9b, 0x4b, 0x92, 0xf5, 0xa0, 0x51, 0x1e, 0x3e, + 0x63, 0x9e, 0x79, 0x6d, 0xbc, 0xf5, 0x55, 0xe8, 0x9c, 0x6c, 0x61, 0x24, 0xd9, 0x35, 0x40, 0x80, + 0x33, 0x4e, 0xb1, 0x8e, 0xe6, 0xec, 0xb0, 0x5b, 0x2f, 0x17, 0x22, 0x67, 0x4f, 0x30, 0x48, 0xf6, + 0xdb, 0x5f, 0x8f, 0x3d, 0xfd, 0xf0, 0xbd, 0x37, 0x7e, 0x37, 0x75, 0xfd, 0xaa, 0xbd, 0xfd, 0x17, + 0x00, 0x00, 0xff, 0xff, 0x9f, 0xc6, 0xef, 0x8e, 0x13, 0x05, 0x00, 0x00, } diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index 146994f01..d30010db2 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -75,7 +75,7 @@ message SendMsgResp { service Chat { - rpc GetMaxAndMinSeq(GetMaxAndMinSeqReq) returns(GetMaxAndMinSeqResp); + rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc SendMsg(SendMsgReq) returns(SendMsgResp); rpc DelMsgList(server_api_params.DelMsgListReq) returns(server_api_params.DelMsgListResp); diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 204cdfa50..6c768fcaa 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{0} + return fileDescriptor_ws_5ad487361de288a1, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{1} + return fileDescriptor_ws_5ad487361de288a1, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{2} + return fileDescriptor_ws_5ad487361de288a1, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{3} + return fileDescriptor_ws_5ad487361de288a1, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{4} + return fileDescriptor_ws_5ad487361de288a1, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{5} + return fileDescriptor_ws_5ad487361de288a1, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{6} + return fileDescriptor_ws_5ad487361de288a1, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{7} + return fileDescriptor_ws_5ad487361de288a1, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{8} + return fileDescriptor_ws_5ad487361de288a1, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{9} + return fileDescriptor_ws_5ad487361de288a1, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{10} + return fileDescriptor_ws_5ad487361de288a1, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{11} + return fileDescriptor_ws_5ad487361de288a1, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{12} + return fileDescriptor_ws_5ad487361de288a1, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1264,74 +1264,22 @@ func (m *UserInDepartment) GetDepartmentMemberList() []*DepartmentMember { return nil } -type PullMessageBySeqListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } -func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } -func (*PullMessageBySeqListResp) ProtoMessage() {} -func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{13} -} -func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) -} -func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) -} -func (m *PullMessageBySeqListResp) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListResp.Size(m) -} -func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo - -func (m *PullMessageBySeqListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *PullMessageBySeqListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *PullMessageBySeqListResp) GetList() []*MsgData { - if m != nil { - return m.List - } - return nil -} - +// /////////////////////////////////base end///////////////////////////////////// type PullMessageBySeqListReq struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` + SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + GroupSeqList map[string]*SeqList `protobuf:"bytes,4,rep,name=groupSeqList" json:"groupSeqList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq{} } func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{14} + return fileDescriptor_ws_5ad487361de288a1, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1372,7 +1320,155 @@ func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { return nil } +func (m *PullMessageBySeqListReq) GetGroupSeqList() map[string]*SeqList { + if m != nil { + return m.GroupSeqList + } + return nil +} + +type SeqList struct { + SeqList []uint32 `protobuf:"varint,1,rep,packed,name=seqList" json:"seqList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SeqList) Reset() { *m = SeqList{} } +func (m *SeqList) String() string { return proto.CompactTextString(m) } +func (*SeqList) ProtoMessage() {} +func (*SeqList) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_5ad487361de288a1, []int{14} +} +func (m *SeqList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SeqList.Unmarshal(m, b) +} +func (m *SeqList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SeqList.Marshal(b, m, deterministic) +} +func (dst *SeqList) XXX_Merge(src proto.Message) { + xxx_messageInfo_SeqList.Merge(dst, src) +} +func (m *SeqList) XXX_Size() int { + return xxx_messageInfo_SeqList.Size(m) +} +func (m *SeqList) XXX_DiscardUnknown() { + xxx_messageInfo_SeqList.DiscardUnknown(m) +} + +var xxx_messageInfo_SeqList proto.InternalMessageInfo + +func (m *SeqList) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + +type MsgDataList struct { + MsgDataList []*MsgData `protobuf:"bytes,1,rep,name=msgDataList" json:"msgDataList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MsgDataList) Reset() { *m = MsgDataList{} } +func (m *MsgDataList) String() string { return proto.CompactTextString(m) } +func (*MsgDataList) ProtoMessage() {} +func (*MsgDataList) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_5ad487361de288a1, []int{15} +} +func (m *MsgDataList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgDataList.Unmarshal(m, b) +} +func (m *MsgDataList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgDataList.Marshal(b, m, deterministic) +} +func (dst *MsgDataList) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDataList.Merge(dst, src) +} +func (m *MsgDataList) XXX_Size() int { + return xxx_messageInfo_MsgDataList.Size(m) +} +func (m *MsgDataList) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDataList.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDataList proto.InternalMessageInfo + +func (m *MsgDataList) GetMsgDataList() []*MsgData { + if m != nil { + return m.MsgDataList + } + return nil +} + +type PullMessageBySeqListResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` + GroupMsgDataList map[string]*MsgDataList `protobuf:"bytes,4,rep,name=groupMsgDataList" json:"groupMsgDataList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } +func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } +func (*PullMessageBySeqListResp) ProtoMessage() {} +func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_5ad487361de288a1, []int{16} +} +func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) +} +func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) +} +func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) +} +func (m *PullMessageBySeqListResp) XXX_Size() int { + return xxx_messageInfo_PullMessageBySeqListResp.Size(m) +} +func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { + xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) +} + +var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo + +func (m *PullMessageBySeqListResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *PullMessageBySeqListResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *PullMessageBySeqListResp) GetList() []*MsgData { + if m != nil { + return m.List + } + return nil +} + +func (m *PullMessageBySeqListResp) GetGroupMsgDataList() map[string]*MsgDataList { + if m != nil { + return m.GroupMsgDataList + } + return nil +} + type GetMaxAndMinSeqReq struct { + GroupIDList []string `protobuf:"bytes,1,rep,name=groupIDList" json:"groupIDList,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1382,7 +1478,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{15} + return fileDescriptor_ws_5ad487361de288a1, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1402,7 +1498,28 @@ func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo -type GetMaxAndMinSeqResp struct { +func (m *GetMaxAndMinSeqReq) GetGroupIDList() []string { + if m != nil { + return m.GroupIDList + } + return nil +} + +func (m *GetMaxAndMinSeqReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *GetMaxAndMinSeqReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type MaxAndMinSeq struct { MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1410,11 +1527,60 @@ type GetMaxAndMinSeqResp struct { XXX_sizecache int32 `json:"-"` } +func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } +func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } +func (*MaxAndMinSeq) ProtoMessage() {} +func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_5ad487361de288a1, []int{18} +} +func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) +} +func (m *MaxAndMinSeq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MaxAndMinSeq.Marshal(b, m, deterministic) +} +func (dst *MaxAndMinSeq) XXX_Merge(src proto.Message) { + xxx_messageInfo_MaxAndMinSeq.Merge(dst, src) +} +func (m *MaxAndMinSeq) XXX_Size() int { + return xxx_messageInfo_MaxAndMinSeq.Size(m) +} +func (m *MaxAndMinSeq) XXX_DiscardUnknown() { + xxx_messageInfo_MaxAndMinSeq.DiscardUnknown(m) +} + +var xxx_messageInfo_MaxAndMinSeq proto.InternalMessageInfo + +func (m *MaxAndMinSeq) GetMaxSeq() uint32 { + if m != nil { + return m.MaxSeq + } + return 0 +} + +func (m *MaxAndMinSeq) GetMinSeq() uint32 { + if m != nil { + return m.MinSeq + } + return 0 +} + +type GetMaxAndMinSeqResp struct { + MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` + MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` + ErrCode int32 `protobuf:"varint,3,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,4,opt,name=errMsg" json:"errMsg,omitempty"` + GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,5,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{16} + return fileDescriptor_ws_5ad487361de288a1, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1448,6 +1614,27 @@ func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { return 0 } +func (m *GetMaxAndMinSeqResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *GetMaxAndMinSeqResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *GetMaxAndMinSeqResp) GetGroupMaxAndMinSeq() map[string]*MaxAndMinSeq { + if m != nil { + return m.GroupMaxAndMinSeq + } + return nil +} + type UserSendMsgResp struct { ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID" json:"serverMsgID,omitempty"` ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` @@ -1461,7 +1648,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{17} + return fileDescriptor_ws_5ad487361de288a1, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1531,7 +1718,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{18} + return fileDescriptor_ws_5ad487361de288a1, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1699,7 +1886,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{19} + return fileDescriptor_ws_5ad487361de288a1, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1767,7 +1954,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{20} + return fileDescriptor_ws_5ad487361de288a1, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1824,7 +2011,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{21} + return fileDescriptor_ws_5ad487361de288a1, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1893,7 +2080,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{22} + return fileDescriptor_ws_5ad487361de288a1, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1948,7 +2135,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{23} + return fileDescriptor_ws_5ad487361de288a1, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2004,7 +2191,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{24} + return fileDescriptor_ws_5ad487361de288a1, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2059,7 +2246,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{25} + return fileDescriptor_ws_5ad487361de288a1, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2114,7 +2301,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{26} + return fileDescriptor_ws_5ad487361de288a1, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2170,7 +2357,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{27} + return fileDescriptor_ws_5ad487361de288a1, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2233,7 +2420,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{28} + return fileDescriptor_ws_5ad487361de288a1, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2296,7 +2483,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{29} + return fileDescriptor_ws_5ad487361de288a1, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2358,7 +2545,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{30} + return fileDescriptor_ws_5ad487361de288a1, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2412,7 +2599,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{31} + return fileDescriptor_ws_5ad487361de288a1, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2468,7 +2655,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{32} + return fileDescriptor_ws_5ad487361de288a1, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2537,7 +2724,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{33} + return fileDescriptor_ws_5ad487361de288a1, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2598,7 +2785,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{34} + return fileDescriptor_ws_5ad487361de288a1, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2652,7 +2839,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{35} + return fileDescriptor_ws_5ad487361de288a1, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2707,7 +2894,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{36} + return fileDescriptor_ws_5ad487361de288a1, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2767,7 +2954,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{37} + return fileDescriptor_ws_5ad487361de288a1, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2814,7 +3001,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{38} + return fileDescriptor_ws_5ad487361de288a1, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2867,7 +3054,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{39} + return fileDescriptor_ws_5ad487361de288a1, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2913,7 +3100,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{40} + return fileDescriptor_ws_5ad487361de288a1, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2953,7 +3140,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{41} + return fileDescriptor_ws_5ad487361de288a1, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3000,7 +3187,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{42} + return fileDescriptor_ws_5ad487361de288a1, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3048,7 +3235,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{43} + return fileDescriptor_ws_5ad487361de288a1, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3101,7 +3288,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{44} + return fileDescriptor_ws_5ad487361de288a1, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3139,7 +3326,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{45} + return fileDescriptor_ws_5ad487361de288a1, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3177,7 +3364,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{46} + return fileDescriptor_ws_5ad487361de288a1, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3215,7 +3402,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{47} + return fileDescriptor_ws_5ad487361de288a1, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3254,7 +3441,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{48} + return fileDescriptor_ws_5ad487361de288a1, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3293,7 +3480,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{49} + return fileDescriptor_ws_5ad487361de288a1, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3333,7 +3520,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{50} + return fileDescriptor_ws_5ad487361de288a1, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3388,7 +3575,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{51} + return fileDescriptor_ws_5ad487361de288a1, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3442,7 +3629,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{52} + return fileDescriptor_ws_5ad487361de288a1, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3488,7 +3675,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{53} + return fileDescriptor_ws_5ad487361de288a1, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3541,7 +3728,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{54} + return fileDescriptor_ws_5ad487361de288a1, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3808,7 +3995,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{55} + return fileDescriptor_ws_5ad487361de288a1, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4076,7 +4263,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{56} + return fileDescriptor_ws_5ad487361de288a1, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4172,7 +4359,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{57} + return fileDescriptor_ws_5ad487361de288a1, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4227,7 +4414,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{58} + return fileDescriptor_ws_5ad487361de288a1, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4288,7 +4475,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{59} + return fileDescriptor_ws_5ad487361de288a1, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4343,7 +4530,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{60} + return fileDescriptor_ws_5ad487361de288a1, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4404,7 +4591,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{61} + return fileDescriptor_ws_5ad487361de288a1, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4459,7 +4646,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{62} + return fileDescriptor_ws_5ad487361de288a1, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4517,7 +4704,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{63} + return fileDescriptor_ws_5ad487361de288a1, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4552,7 +4739,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{64} + return fileDescriptor_ws_5ad487361de288a1, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4620,7 +4807,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{65} + return fileDescriptor_ws_5ad487361de288a1, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4674,7 +4861,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{66} + return fileDescriptor_ws_5ad487361de288a1, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4725,7 +4912,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{67} + return fileDescriptor_ws_5ad487361de288a1, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4760,7 +4947,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{68} + return fileDescriptor_ws_5ad487361de288a1, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4825,7 +5012,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{69} + return fileDescriptor_ws_5ad487361de288a1, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -4859,7 +5046,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{70} + return fileDescriptor_ws_5ad487361de288a1, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -4919,7 +5106,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{71} + return fileDescriptor_ws_5ad487361de288a1, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -4967,10 +5154,16 @@ func init() { proto.RegisterType((*DepartmentMember)(nil), "server_api_params.DepartmentMember") proto.RegisterType((*UserDepartmentMember)(nil), "server_api_params.UserDepartmentMember") proto.RegisterType((*UserInDepartment)(nil), "server_api_params.UserInDepartment") - proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") + proto.RegisterMapType((map[string]*SeqList)(nil), "server_api_params.PullMessageBySeqListReq.GroupSeqListEntry") + proto.RegisterType((*SeqList)(nil), "server_api_params.seqList") + proto.RegisterType((*MsgDataList)(nil), "server_api_params.MsgDataList") + proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") + proto.RegisterMapType((map[string]*MsgDataList)(nil), "server_api_params.PullMessageBySeqListResp.GroupMsgDataListEntry") proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") + proto.RegisterType((*MaxAndMinSeq)(nil), "server_api_params.MaxAndMinSeq") proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") + proto.RegisterMapType((map[string]*MaxAndMinSeq)(nil), "server_api_params.GetMaxAndMinSeqResp.GroupMaxAndMinSeqEntry") proto.RegisterType((*UserSendMsgResp)(nil), "server_api_params.UserSendMsgResp") proto.RegisterType((*MsgData)(nil), "server_api_params.MsgData") proto.RegisterMapType((map[string]bool)(nil), "server_api_params.MsgData.OptionsEntry") @@ -5029,200 +5222,212 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_e8e186fa2bf7c43d) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_5ad487361de288a1) } -var fileDescriptor_ws_e8e186fa2bf7c43d = []byte{ - // 3059 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x6f, 0x24, 0x57, - 0xf1, 0xbf, 0xee, 0xf1, 0x8c, 0x3d, 0x35, 0xfe, 0xec, 0xdd, 0x9f, 0x33, 0x98, 0xcd, 0x62, 0x1a, - 0x2b, 0x84, 0x00, 0x1b, 0x94, 0x08, 0x09, 0x12, 0x58, 0xb4, 0xb6, 0xf7, 0x2b, 0xac, 0xbd, 0x4e, - 0xcf, 0x2e, 0x41, 0x80, 0x14, 0xb5, 0xa7, 0x9f, 0xc7, 0x1d, 0xf7, 0xf4, 0xeb, 0xe9, 0x0f, 0xef, - 0x2e, 0x42, 0x42, 0x02, 0x09, 0x71, 0xe3, 0x04, 0x07, 0x2e, 0x48, 0x5c, 0x10, 0x28, 0x8a, 0x22, - 0x04, 0x12, 0x07, 0x84, 0x38, 0xf0, 0x0f, 0x70, 0x44, 0x5c, 0x10, 0x67, 0xae, 0x1c, 0x90, 0x90, - 0x40, 0xaf, 0xea, 0x75, 0xf7, 0x7b, 0xdd, 0x33, 0xf6, 0xac, 0x65, 0x65, 0x37, 0x5a, 0x6e, 0x53, - 0xd5, 0xaf, 0xea, 0xd5, 0xab, 0xaa, 0x57, 0x55, 0xef, 0xd5, 0x1b, 0x58, 0x4a, 0xbc, 0xa3, 0xb7, - 0x1f, 0x24, 0x2f, 0x3f, 0x48, 0xae, 0x44, 0x31, 0x4f, 0xb9, 0xb5, 0x92, 0xb0, 0xf8, 0x98, 0xc5, - 0x6f, 0xbb, 0x91, 0xff, 0x76, 0xe4, 0xc6, 0xee, 0x30, 0xb1, 0xff, 0x69, 0x42, 0xfb, 0x66, 0xcc, - 0xb3, 0xe8, 0x76, 0x78, 0xc0, 0xad, 0x2e, 0xcc, 0x0e, 0x10, 0xd8, 0xee, 0x1a, 0xeb, 0xc6, 0x8b, - 0x6d, 0x27, 0x07, 0xad, 0x4b, 0xd0, 0xc6, 0x9f, 0xbb, 0xee, 0x90, 0x75, 0x4d, 0xfc, 0x56, 0x22, - 0x2c, 0x1b, 0xe6, 0x43, 0x9e, 0xfa, 0x07, 0x7e, 0xdf, 0x4d, 0x7d, 0x1e, 0x76, 0x1b, 0x38, 0x40, - 0xc3, 0x89, 0x31, 0x7e, 0x98, 0xc6, 0xdc, 0xcb, 0xfa, 0x38, 0x66, 0x86, 0xc6, 0xa8, 0x38, 0x31, - 0xff, 0x81, 0xdb, 0x67, 0xf7, 0x9d, 0x3b, 0xdd, 0x26, 0xcd, 0x2f, 0x41, 0x6b, 0x1d, 0x3a, 0xfc, - 0x41, 0xc8, 0xe2, 0xfb, 0x09, 0x8b, 0x6f, 0x6f, 0x77, 0x5b, 0xf8, 0x55, 0x45, 0x59, 0x97, 0x01, - 0xfa, 0x31, 0x73, 0x53, 0x76, 0xcf, 0x1f, 0xb2, 0xee, 0xec, 0xba, 0xf1, 0xe2, 0x82, 0xa3, 0x60, - 0x04, 0x87, 0x21, 0x1b, 0xee, 0xb3, 0x78, 0x8b, 0x67, 0x61, 0xda, 0x9d, 0xc3, 0x01, 0x2a, 0xca, - 0x5a, 0x04, 0x93, 0x3d, 0xec, 0xb6, 0x91, 0xb5, 0xc9, 0x1e, 0x5a, 0xab, 0xd0, 0x4a, 0x52, 0x37, - 0xcd, 0x92, 0x2e, 0xac, 0x1b, 0x2f, 0x36, 0x1d, 0x09, 0x59, 0x1b, 0xb0, 0x80, 0x7c, 0x79, 0x2e, - 0x4d, 0x07, 0x49, 0x74, 0x64, 0xa1, 0xb1, 0x7b, 0x8f, 0x22, 0xd6, 0x9d, 0x47, 0x06, 0x25, 0xc2, - 0xfe, 0x8b, 0x09, 0x17, 0x50, 0xef, 0x3b, 0x28, 0xc0, 0x8d, 0x2c, 0x08, 0x4e, 0xb1, 0xc0, 0x2a, - 0xb4, 0x32, 0x9a, 0x8e, 0xd4, 0x2f, 0x21, 0x31, 0x4f, 0xcc, 0x03, 0x76, 0x87, 0x1d, 0xb3, 0x00, - 0x15, 0xdf, 0x74, 0x4a, 0x84, 0xb5, 0x06, 0x73, 0xef, 0x70, 0x3f, 0x44, 0x9d, 0xcc, 0xe0, 0xc7, - 0x02, 0x16, 0xdf, 0x42, 0xbf, 0x7f, 0x14, 0x0a, 0x93, 0x92, 0xba, 0x0b, 0x58, 0xb5, 0x44, 0x4b, - 0xb7, 0xc4, 0x0b, 0xb0, 0xe8, 0x46, 0xd1, 0x8e, 0x1b, 0x0e, 0x58, 0x4c, 0x93, 0xce, 0x22, 0xdf, - 0x0a, 0x56, 0xd8, 0x43, 0xcc, 0xd4, 0xe3, 0x59, 0xdc, 0x67, 0xa8, 0xee, 0xa6, 0xa3, 0x60, 0x04, - 0x1f, 0x1e, 0xb1, 0x58, 0x51, 0x23, 0x69, 0xbe, 0x82, 0x95, 0x56, 0x81, 0xc2, 0x2a, 0xc2, 0x8e, - 0x59, 0xca, 0xae, 0x87, 0x1e, 0x2e, 0xaa, 0x23, 0xed, 0x58, 0xa2, 0xec, 0x1f, 0x18, 0xb0, 0xb8, - 0x97, 0xed, 0x07, 0x7e, 0x1f, 0x59, 0x08, 0xb5, 0x96, 0xca, 0x33, 0x34, 0xe5, 0xa9, 0x2a, 0x30, - 0x27, 0xab, 0xa0, 0xa1, 0xab, 0x60, 0x15, 0x5a, 0x03, 0x16, 0x7a, 0x2c, 0x96, 0x2a, 0x95, 0x90, - 0x14, 0xb5, 0x99, 0x8b, 0x6a, 0xff, 0xc4, 0x84, 0xb9, 0x0f, 0x58, 0x84, 0x75, 0xe8, 0x44, 0x87, - 0x3c, 0x64, 0xbb, 0x99, 0x70, 0x2b, 0x29, 0x8b, 0x8a, 0xb2, 0x2e, 0x42, 0x73, 0xdf, 0x8f, 0xd3, - 0x43, 0xb4, 0xeb, 0x82, 0x43, 0x80, 0xc0, 0xb2, 0xa1, 0xeb, 0x93, 0x31, 0xdb, 0x0e, 0x01, 0x72, - 0x41, 0x73, 0x85, 0xee, 0xf5, 0x3d, 0xd6, 0xae, 0xed, 0xb1, 0xba, 0x6f, 0xc0, 0x38, 0xdf, 0xb0, - 0xff, 0x65, 0x00, 0xdc, 0x88, 0x7d, 0x16, 0x7a, 0xa8, 0x9a, 0xca, 0xe6, 0x36, 0xea, 0x9b, 0x7b, - 0x15, 0x5a, 0x31, 0x1b, 0xba, 0xf1, 0x51, 0xee, 0xfc, 0x04, 0x55, 0x04, 0x6a, 0xd4, 0x04, 0x7a, - 0x1d, 0xe0, 0x00, 0xe7, 0x11, 0x7c, 0x50, 0x55, 0x9d, 0x57, 0x3e, 0x7a, 0xa5, 0x16, 0x06, 0xaf, - 0xe4, 0x56, 0x72, 0x94, 0xe1, 0x62, 0x67, 0xb9, 0x9e, 0x27, 0x1d, 0xb8, 0x49, 0x3b, 0xab, 0x40, - 0x8c, 0xf1, 0xdf, 0xd6, 0x09, 0xfe, 0x3b, 0x5b, 0x38, 0xc5, 0x3f, 0x0c, 0x68, 0x6f, 0x06, 0x6e, - 0xff, 0x68, 0xca, 0xa5, 0xeb, 0x4b, 0x34, 0x6b, 0x4b, 0xbc, 0x09, 0x0b, 0xfb, 0x82, 0x5d, 0xbe, - 0x04, 0xd4, 0x42, 0xe7, 0x95, 0x8f, 0x8f, 0x59, 0xa5, 0xbe, 0x29, 0x1c, 0x9d, 0x4e, 0x5f, 0xee, - 0xcc, 0xe9, 0xcb, 0x6d, 0x9e, 0xb0, 0xdc, 0x56, 0xb1, 0xdc, 0x3f, 0x9b, 0x30, 0x8f, 0x81, 0xce, - 0x61, 0xa3, 0x8c, 0x25, 0xa9, 0xf5, 0x65, 0x98, 0xcb, 0x72, 0x51, 0x8d, 0x69, 0x45, 0x2d, 0x48, - 0xac, 0xd7, 0x64, 0x58, 0x45, 0x7a, 0x13, 0xe9, 0x2f, 0x8d, 0xa1, 0x2f, 0x72, 0x9a, 0x53, 0x0e, - 0x17, 0x29, 0xe8, 0xd0, 0x0d, 0xbd, 0x80, 0x39, 0x2c, 0xc9, 0x82, 0x54, 0x46, 0x4b, 0x0d, 0x47, - 0x9e, 0x36, 0xda, 0x49, 0x06, 0x32, 0x41, 0x49, 0x48, 0x68, 0x87, 0xc6, 0x89, 0x4f, 0xb4, 0xf4, - 0x12, 0x21, 0x36, 0x6a, 0xcc, 0x46, 0x68, 0x21, 0xda, 0x56, 0x39, 0x58, 0xce, 0x29, 0xb5, 0x46, - 0x8e, 0xa0, 0xe1, 0x84, 0x89, 0x09, 0x46, 0x06, 0x94, 0x99, 0x14, 0x4c, 0x35, 0x31, 0xd9, 0x7f, - 0x6d, 0xc0, 0x02, 0x6d, 0x9f, 0x5c, 0xa9, 0x97, 0x85, 0x9f, 0xf3, 0xa1, 0xe6, 0x45, 0x0a, 0x46, - 0x48, 0x21, 0xa0, 0x5d, 0x3d, 0xd0, 0x68, 0x38, 0xe1, 0x8a, 0x02, 0xbe, 0xa1, 0x05, 0x1c, 0x15, - 0x95, 0xcf, 0x72, 0x53, 0x0d, 0x3c, 0x0a, 0x46, 0x84, 0xb2, 0x94, 0x6b, 0xde, 0x51, 0xc0, 0x82, - 0x36, 0xe5, 0xc5, 0xfc, 0xe4, 0x1f, 0x0a, 0x46, 0xe8, 0x37, 0xe5, 0xf9, 0xdc, 0xa4, 0xa4, 0x12, - 0x41, 0x9c, 0xe5, 0xbc, 0x94, 0x4a, 0x0a, 0xb8, 0x66, 0xd5, 0xf6, 0x89, 0x56, 0x05, 0xcd, 0xaa, - 0xfa, 0xe6, 0xea, 0xd4, 0x36, 0xd7, 0x06, 0x2c, 0x10, 0x9f, 0xdc, 0xe9, 0xe7, 0x29, 0xd5, 0x6b, - 0x48, 0xdd, 0x37, 0x16, 0xaa, 0xbe, 0xa1, 0x5b, 0x77, 0x71, 0x82, 0x75, 0x97, 0x0a, 0xeb, 0xfe, - 0xda, 0x04, 0xd8, 0x66, 0x91, 0x1b, 0xa7, 0x43, 0x16, 0xa6, 0x62, 0x79, 0x5e, 0x01, 0x15, 0xc6, - 0xd5, 0x70, 0x6a, 0x9e, 0x30, 0xf5, 0x3c, 0x61, 0xc1, 0x0c, 0x2a, 0x9c, 0xac, 0x89, 0xbf, 0x85, - 0x32, 0x23, 0x37, 0x26, 0x6e, 0xe4, 0xe4, 0x05, 0x2c, 0xf2, 0x00, 0x8f, 0x3d, 0x99, 0x39, 0x9a, - 0x0e, 0x01, 0x62, 0xf3, 0x97, 0xf3, 0x61, 0x41, 0xd3, 0xa2, 0xb8, 0xae, 0x63, 0x4f, 0xad, 0xc1, - 0x5e, 0x82, 0xe5, 0x24, 0xdb, 0x2f, 0x17, 0xb7, 0x9b, 0x0d, 0xa5, 0xbb, 0xd7, 0xf0, 0x42, 0xa9, - 0x54, 0x9c, 0x89, 0x41, 0x94, 0x6a, 0x4a, 0x44, 0xb5, 0x2a, 0xb0, 0xdf, 0x35, 0x61, 0xf9, 0x6e, - 0x3c, 0x70, 0x43, 0xff, 0xdb, 0x58, 0x6e, 0x62, 0x00, 0x3f, 0x4b, 0xca, 0x5d, 0x87, 0x0e, 0x0b, - 0x07, 0x81, 0x9f, 0x1c, 0xee, 0x96, 0x7a, 0x53, 0x51, 0xaa, 0xb2, 0x67, 0x26, 0x25, 0xe5, 0xa6, - 0x96, 0x94, 0x57, 0xa1, 0x35, 0xe4, 0xfb, 0x7e, 0x90, 0xfb, 0xbd, 0x84, 0xd0, 0xe7, 0x59, 0xc0, - 0x30, 0x3b, 0x17, 0x3e, 0x9f, 0x23, 0xca, 0x44, 0x3d, 0x37, 0x36, 0x51, 0xb7, 0xd5, 0x44, 0xad, - 0x2b, 0x1e, 0x6a, 0x8a, 0x27, 0x75, 0x75, 0x0a, 0x75, 0xfd, 0xd1, 0x80, 0xe5, 0x52, 0xdd, 0x54, - 0x83, 0x4e, 0x54, 0x57, 0xd5, 0x03, 0xcd, 0x31, 0x1e, 0x58, 0xf8, 0x4d, 0x43, 0xf5, 0x1b, 0xe1, - 0x69, 0x3c, 0xf1, 0x95, 0x7a, 0xbf, 0x80, 0xc5, 0x6c, 0x01, 0x73, 0x15, 0x65, 0x11, 0xa4, 0x54, - 0xdd, 0x2d, 0xad, 0xea, 0xae, 0xe6, 0xd1, 0xdf, 0x19, 0x70, 0x51, 0x58, 0xb9, 0xb6, 0x8c, 0xbb, - 0xb0, 0xcc, 0x2b, 0x9e, 0x20, 0x13, 0xcd, 0x27, 0xc6, 0x24, 0x8a, 0xaa, 0xd3, 0x38, 0x35, 0x62, - 0xc1, 0xd0, 0xab, 0x4c, 0x22, 0x33, 0xcf, 0x38, 0x86, 0x55, 0x79, 0x9c, 0x1a, 0xb1, 0xfd, 0x7b, - 0x03, 0x96, 0x29, 0xb5, 0x29, 0xfb, 0xfc, 0xdc, 0xc5, 0x7e, 0x0b, 0x2e, 0x56, 0x67, 0xbe, 0xe3, - 0x27, 0x69, 0xd7, 0x5c, 0x6f, 0x4c, 0x2b, 0xfa, 0x58, 0x06, 0xf6, 0x77, 0xa0, 0xbb, 0x97, 0x05, - 0xc1, 0x0e, 0x4b, 0x12, 0x77, 0xc0, 0x36, 0x1f, 0xf5, 0xd8, 0x48, 0xe0, 0x1d, 0x96, 0x44, 0x62, - 0x73, 0xb0, 0x38, 0xde, 0xe2, 0x1e, 0x43, 0xe1, 0x9b, 0x4e, 0x0e, 0x0a, 0xbb, 0xb2, 0x38, 0x16, - 0x11, 0x52, 0x96, 0x70, 0x04, 0x59, 0x57, 0x60, 0x26, 0x10, 0x62, 0x35, 0x50, 0xac, 0xb5, 0x31, - 0x62, 0xed, 0x24, 0x83, 0x6d, 0x37, 0x75, 0x1d, 0x1c, 0x67, 0x0f, 0xe1, 0xb9, 0xf1, 0xb3, 0x8f, - 0x26, 0x3a, 0xb0, 0x28, 0xb2, 0xb0, 0x4a, 0xf1, 0x79, 0x58, 0xf8, 0xaf, 0x8a, 0x12, 0x62, 0x27, - 0xc4, 0x07, 0xe5, 0x58, 0x70, 0x72, 0xd0, 0xbe, 0x08, 0xd6, 0x4d, 0x96, 0xee, 0xb8, 0x0f, 0xaf, - 0x85, 0xde, 0x8e, 0x1f, 0xf6, 0xd8, 0xc8, 0x61, 0x23, 0xfb, 0x3a, 0x5c, 0xa8, 0x61, 0x93, 0x08, - 0x37, 0xba, 0xfb, 0xb0, 0xc7, 0x46, 0x28, 0xc0, 0x82, 0x23, 0x21, 0xc4, 0xe3, 0x28, 0x59, 0xbf, - 0x49, 0xc8, 0x1e, 0xc1, 0x92, 0x30, 0x55, 0x8f, 0x85, 0xde, 0x4e, 0x32, 0x40, 0x16, 0xeb, 0xd0, - 0x21, 0x0d, 0xec, 0x24, 0x83, 0xb2, 0x20, 0x54, 0x50, 0x62, 0x44, 0x3f, 0xf0, 0x85, 0x49, 0x70, - 0x84, 0x5c, 0x8d, 0x82, 0x12, 0xdb, 0x2e, 0x61, 0xf2, 0x7c, 0x24, 0xf6, 0x63, 0xc3, 0x29, 0x60, - 0xfb, 0x6f, 0x4d, 0x98, 0x95, 0x0a, 0xc5, 0xad, 0x26, 0x6a, 0xf0, 0x42, 0x5f, 0x04, 0x51, 0xb6, - 0xec, 0x1f, 0x97, 0x47, 0x4d, 0x82, 0xd4, 0xc3, 0x69, 0x43, 0x3f, 0x9c, 0x56, 0x64, 0x9a, 0xa9, - 0xcb, 0x54, 0x59, 0x57, 0xb3, 0xbe, 0x2e, 0x91, 0x1c, 0x30, 0x5e, 0xee, 0x05, 0x6e, 0x7a, 0xc0, - 0xe3, 0xa1, 0x2c, 0xa9, 0x9b, 0x4e, 0x0d, 0x2f, 0x12, 0x12, 0xe1, 0x8a, 0x8a, 0x82, 0x02, 0x43, - 0x05, 0x2b, 0xf2, 0x37, 0x61, 0xf2, 0xca, 0x82, 0xce, 0x32, 0x3a, 0x92, 0x64, 0x4b, 0x12, 0x9f, - 0x87, 0x98, 0xdb, 0xa8, 0x80, 0x50, 0x51, 0x62, 0xe5, 0xc3, 0x64, 0x70, 0x23, 0xe6, 0x43, 0x79, - 0xa2, 0xc9, 0x41, 0x5c, 0x39, 0x0f, 0xd3, 0x3c, 0x2f, 0x76, 0x88, 0x56, 0x41, 0x09, 0x5a, 0x09, - 0x62, 0xf5, 0x30, 0xef, 0xe4, 0xa0, 0xb5, 0x0c, 0x8d, 0x84, 0x8d, 0x64, 0x49, 0x20, 0x7e, 0x6a, - 0x96, 0x5b, 0xd2, 0x2d, 0x57, 0x89, 0xf1, 0xcb, 0xf8, 0x55, 0x8d, 0xf1, 0x65, 0xe0, 0x5c, 0xd1, - 0x02, 0xe7, 0x35, 0x98, 0xe5, 0x91, 0xf0, 0xf3, 0xa4, 0x6b, 0xe1, 0x1e, 0xfb, 0xe4, 0xe4, 0x3d, - 0x76, 0xe5, 0x2e, 0x8d, 0xbc, 0x1e, 0xa6, 0xf1, 0x23, 0x27, 0xa7, 0xb3, 0xee, 0xc0, 0x12, 0x3f, - 0x38, 0x08, 0xfc, 0x90, 0xed, 0x65, 0xc9, 0x21, 0x96, 0xde, 0x17, 0x30, 0x34, 0xd9, 0xe3, 0x42, - 0x93, 0x3e, 0xd2, 0xa9, 0x92, 0x8a, 0x7c, 0xe2, 0xa6, 0x54, 0x3a, 0xe1, 0x8e, 0xbb, 0xb8, 0xde, - 0x10, 0xf9, 0x44, 0xc5, 0xad, 0xbd, 0x06, 0xf3, 0xaa, 0x28, 0x42, 0x55, 0x47, 0xec, 0x91, 0xf4, - 0x53, 0xf1, 0x53, 0x64, 0x9c, 0x63, 0x37, 0xc8, 0x28, 0x83, 0xcf, 0x39, 0x04, 0xbc, 0x66, 0x7e, - 0xc1, 0xb0, 0x7f, 0x6c, 0xc0, 0x52, 0x45, 0x08, 0x31, 0x3a, 0xf5, 0xd3, 0x80, 0x49, 0x0e, 0x04, - 0x88, 0xea, 0xc8, 0x63, 0x49, 0x5f, 0xba, 0x39, 0xfe, 0x96, 0x79, 0xa6, 0x51, 0x9c, 0x79, 0x6d, - 0x98, 0xf7, 0xef, 0xf6, 0x04, 0xa3, 0x1e, 0xcf, 0x42, 0xaf, 0xb8, 0xb7, 0x52, 0x70, 0xc2, 0xcd, - 0xfc, 0xbb, 0xbd, 0x4d, 0xd7, 0x1b, 0x30, 0xba, 0x5d, 0x6a, 0xa2, 0x4c, 0x3a, 0xd2, 0xf6, 0x60, - 0xee, 0x9e, 0x1f, 0x25, 0x5b, 0x7c, 0x38, 0x14, 0xc6, 0xf2, 0x58, 0x2a, 0xf2, 0xb8, 0x81, 0x3e, - 0x21, 0x21, 0xe1, 0x4e, 0x1e, 0x3b, 0x70, 0xb3, 0x20, 0x15, 0x43, 0xf3, 0xcd, 0xad, 0xa0, 0xf0, - 0x5e, 0x25, 0xe1, 0xe1, 0x36, 0x51, 0x93, 0x9c, 0x0a, 0xc6, 0xfe, 0x93, 0x09, 0xcb, 0x78, 0xfa, - 0xd9, 0x42, 0xd7, 0xf0, 0x90, 0xe8, 0x15, 0x68, 0xe2, 0x56, 0x95, 0x19, 0xe5, 0xe4, 0x13, 0x13, - 0x0d, 0xb5, 0xae, 0x42, 0x8b, 0x47, 0x98, 0x86, 0x28, 0xd9, 0xbd, 0x30, 0x89, 0x48, 0xbf, 0xc2, - 0x72, 0x24, 0x95, 0x75, 0x03, 0x60, 0x58, 0x66, 0x1d, 0x0a, 0xef, 0xd3, 0xf2, 0x50, 0x28, 0x85, - 0x72, 0x8b, 0x50, 0x5d, 0xdc, 0x63, 0x35, 0x1c, 0x1d, 0x69, 0xed, 0xc2, 0x22, 0x8a, 0x7d, 0x37, - 0x3f, 0x3a, 0xa3, 0x0d, 0xa6, 0x9f, 0xb1, 0x42, 0x6d, 0xff, 0xdc, 0x90, 0x6a, 0x14, 0x5f, 0x7b, - 0x8c, 0x74, 0x5f, 0xaa, 0xc4, 0x38, 0x93, 0x4a, 0xd6, 0x60, 0x6e, 0x98, 0x29, 0x27, 0xf9, 0x86, - 0x53, 0xc0, 0xa5, 0x89, 0x1a, 0x53, 0x9b, 0xc8, 0xfe, 0x85, 0x01, 0xdd, 0x37, 0xb8, 0x1f, 0xe2, - 0x87, 0x6b, 0x51, 0x14, 0xc8, 0xcb, 0xd6, 0x33, 0xdb, 0xfc, 0x2b, 0xd0, 0x76, 0x89, 0x4d, 0x98, - 0x4a, 0xb3, 0x4f, 0x71, 0x3a, 0x2f, 0x69, 0x94, 0x83, 0x56, 0x43, 0x3d, 0x68, 0xd9, 0xef, 0x19, - 0xb0, 0x48, 0x4a, 0x79, 0x33, 0xf3, 0xd3, 0x33, 0xcb, 0xb7, 0x09, 0x73, 0xa3, 0xcc, 0x4f, 0xcf, - 0xe0, 0x95, 0x05, 0x5d, 0xdd, 0x9f, 0x1a, 0x63, 0xfc, 0xc9, 0x7e, 0xdf, 0x80, 0x4b, 0x55, 0xb5, - 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, 0x8a, - 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xfb, 0x26, 0x7c, 0xe4, 0x66, 0xb1, 0xf1, 0xee, - 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, 0x65, - 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, 0xe7, - 0xab, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, 0x6c, - 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, 0x3a, - 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x35, 0x60, - 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, 0xc3, - 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, 0xa1, - 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x53, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, 0xf4, - 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, 0xa2, - 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, 0xd0, - 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xca, 0x80, 0x45, 0x1a, - 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8d, 0x95, 0x84, 0x7b, 0xad, 0x2a, 0x5c, - 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, 0xa5, - 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, 0x9c, - 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, 0xac, - 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, 0x78, - 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, 0x98, - 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, 0xbf, - 0xc8, 0xfe, 0x16, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, 0xcb, - 0x7c, 0x6c, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x9e, 0x01, 0xcf, 0xd7, 0xd8, 0x5f, - 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, 0xb1, - 0x42, 0x68, 0x05, 0xfb, 0x07, 0x20, 0xc4, 0x2f, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, 0xf6, - 0xf3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, 0xae, - 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xb1, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, 0x7a, - 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, 0xc1, - 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, 0x94, - 0x9c, 0x0b, 0xf7, 0xcf, 0xc2, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, 0xbd, - 0x6e, 0x7f, 0x0e, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, 0x68, - 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, 0x95, - 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, 0x4f, - 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, 0xa7, - 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, 0x07, - 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, 0x0f, - 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, 0x62, - 0xec, 0xaf, 0x81, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, 0xe2, - 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, 0x57, - 0x30, 0xf6, 0xcf, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x04, 0x2d, - 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, 0xff, - 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0xa7, 0x4e, - 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, 0x05, - 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, 0xd3, - 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, 0x4c, - 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, 0x14, - 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, 0x1b, - 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, 0x46, - 0xea, 0x8d, 0x37, 0xd2, 0xa7, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, 0x1b, - 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, 0xa5, - 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, 0x36, - 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0x7d, 0x13, 0x16, 0x51, 0x65, 0xd4, 0x4c, 0x0c, 0x0f, - 0x38, 0xf6, 0x03, 0x50, 0x5d, 0xfa, 0xbb, 0x2e, 0x1d, 0x69, 0x7d, 0x06, 0x56, 0x08, 0xc1, 0x94, - 0x66, 0x88, 0x89, 0xcd, 0x90, 0xfa, 0x07, 0x6c, 0xff, 0x64, 0x49, 0xca, 0x87, 0xdb, 0x6e, 0xea, - 0xe6, 0xc5, 0x57, 0x89, 0x51, 0x9b, 0x73, 0x33, 0xb5, 0x97, 0xa3, 0x31, 0xe7, 0xc3, 0xa2, 0xeb, - 0x26, 0x21, 0x41, 0x91, 0xfa, 0x43, 0xc6, 0xb3, 0x54, 0x86, 0x89, 0x1c, 0xa4, 0xb7, 0x17, 0x9e, - 0xef, 0x62, 0x4b, 0x4b, 0x3e, 0x4c, 0x28, 0x10, 0x18, 0xd9, 0xca, 0x16, 0x9d, 0x7c, 0xd9, 0x59, - 0x62, 0x4e, 0x6f, 0xa7, 0xd9, 0x7f, 0x37, 0xe0, 0xc2, 0x9e, 0x1b, 0xa7, 0x7e, 0xdf, 0x8f, 0xdc, - 0x30, 0xdd, 0x61, 0xa9, 0x8b, 0x6b, 0xd0, 0x1e, 0x77, 0x19, 0x8f, 0xf7, 0xb8, 0x6b, 0x0f, 0x96, - 0x06, 0xfa, 0xe9, 0xe2, 0x31, 0x0f, 0x06, 0x55, 0x72, 0xed, 0xa5, 0x5a, 0xe3, 0xb1, 0x5f, 0xaa, - 0xd9, 0x3f, 0x34, 0x61, 0xa9, 0x12, 0x3a, 0x4f, 0xcc, 0x3b, 0xd7, 0x00, 0xfc, 0xc2, 0x8d, 0x4e, - 0xb8, 0x7c, 0xd7, 0x7d, 0xcd, 0x51, 0x88, 0xc6, 0xf5, 0xe9, 0x1a, 0x67, 0xef, 0xd3, 0xdd, 0x82, - 0x4e, 0x54, 0x1a, 0xe9, 0x84, 0xb3, 0xcf, 0x18, 0x53, 0x3a, 0x2a, 0xa9, 0xfd, 0x4d, 0x58, 0xa9, - 0x45, 0x28, 0x6c, 0xc9, 0xf1, 0x23, 0x16, 0x16, 0x2d, 0x39, 0x01, 0x28, 0xce, 0x6a, 0x56, 0x9d, - 0x35, 0xf0, 0x8f, 0xd5, 0xa7, 0xb0, 0x12, 0xb4, 0x7f, 0x64, 0xc2, 0xea, 0xf8, 0xec, 0xf2, 0xac, - 0xaa, 0x7b, 0x1f, 0xba, 0x93, 0x22, 0xf9, 0xb9, 0x69, 0xbd, 0xf4, 0xee, 0x22, 0x0f, 0x3f, 0xab, - 0xea, 0xbe, 0x90, 0x7b, 0xb7, 0x92, 0xea, 0xec, 0xdf, 0x14, 0xfa, 0x29, 0x2a, 0x8d, 0x67, 0x54, - 0x3f, 0xd6, 0x4b, 0xb0, 0x4c, 0xcb, 0x54, 0x1e, 0x76, 0x50, 0xe1, 0x5a, 0xc3, 0x97, 0x91, 0x42, - 0x49, 0xfb, 0xe7, 0xe6, 0xb3, 0x7f, 0x30, 0x72, 0x9b, 0x14, 0xf5, 0xdb, 0x87, 0xca, 0x26, 0xa5, - 0xa7, 0x29, 0x45, 0x8d, 0xe2, 0x69, 0x45, 0x5d, 0xf9, 0x3f, 0x4f, 0x3b, 0xdd, 0xd3, 0x0a, 0x5d, - 0x2a, 0x05, 0x9e, 0xfd, 0x5d, 0x58, 0xd8, 0x66, 0xc1, 0x4e, 0x32, 0xc8, 0x9f, 0x94, 0x9d, 0xeb, - 0x41, 0xb1, 0xfa, 0x10, 0x6d, 0xa6, 0xf6, 0x10, 0xcd, 0xde, 0x84, 0x45, 0x55, 0x80, 0xb3, 0xbc, - 0xa8, 0xdb, 0xbc, 0xf4, 0x8d, 0xb5, 0x2b, 0x2f, 0xd3, 0x7f, 0xbf, 0x5e, 0xaf, 0x29, 0x71, 0xbf, - 0x85, 0xff, 0x05, 0x7b, 0xf5, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x11, 0x1c, 0x36, 0x1e, - 0x36, 0x00, 0x00, +var fileDescriptor_ws_5ad487361de288a1 = []byte{ + // 3252 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, + 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, + 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, + 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, + 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, 0x28, 0x8a, 0x10, + 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x1c, 0x11, 0x17, 0xc4, 0x99, 0x2b, 0x07, 0x24, 0x24, + 0xd0, 0xab, 0x7a, 0xdd, 0xfd, 0x5e, 0x77, 0x8f, 0x3d, 0x3b, 0xb2, 0xb2, 0x1b, 0x2d, 0xb7, 0xa9, + 0xea, 0x57, 0xf5, 0xea, 0xd5, 0x57, 0xef, 0x55, 0xbd, 0x9f, 0x81, 0x85, 0xd8, 0x39, 0x7c, 0xef, + 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, + 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, + 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, + 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x9f, 0x3b, 0xf6, 0x90, 0x75, 0x75, 0xfc, 0x56, 0x30, + 0x0c, 0x13, 0x66, 0xfd, 0x20, 0x71, 0xf7, 0xdd, 0xbe, 0x9d, 0xb8, 0x81, 0xdf, 0x6d, 0x60, 0x03, + 0x85, 0xc7, 0xdb, 0xb8, 0x7e, 0x12, 0x05, 0x4e, 0xda, 0xc7, 0x36, 0x53, 0xd4, 0x46, 0xe6, 0xf1, + 0xfe, 0xf7, 0xed, 0x3e, 0xbb, 0x6d, 0xdd, 0xe8, 0x36, 0xa9, 0x7f, 0x41, 0x1a, 0xab, 0xd0, 0x09, + 0xee, 0xfa, 0x2c, 0xba, 0x1d, 0xb3, 0xe8, 0xfa, 0x56, 0xb7, 0x85, 0x5f, 0x65, 0x96, 0x71, 0x11, + 0xa0, 0x1f, 0x31, 0x3b, 0x61, 0xb7, 0xdc, 0x21, 0xeb, 0x4e, 0xaf, 0x6a, 0xcf, 0xce, 0x59, 0x12, + 0x87, 0x6b, 0x18, 0xb2, 0xe1, 0x1e, 0x8b, 0x36, 0x83, 0xd4, 0x4f, 0xba, 0x33, 0xd8, 0x40, 0x66, + 0x19, 0xf3, 0xa0, 0xb3, 0x7b, 0xdd, 0x36, 0xaa, 0xd6, 0xd9, 0x3d, 0x63, 0x19, 0x5a, 0x71, 0x62, + 0x27, 0x69, 0xdc, 0x85, 0x55, 0xed, 0xd9, 0xa6, 0x25, 0x28, 0x63, 0x0d, 0xe6, 0x50, 0x6f, 0x90, + 0x59, 0xd3, 0x41, 0x11, 0x95, 0x99, 0x7b, 0xec, 0xd6, 0xfd, 0x90, 0x75, 0x67, 0x51, 0x41, 0xc1, + 0x30, 0xff, 0xaa, 0xc3, 0x39, 0xf4, 0xfb, 0x36, 0x1a, 0x70, 0x25, 0xf5, 0xbc, 0x53, 0x10, 0x58, + 0x86, 0x56, 0x4a, 0xdd, 0x91, 0xfb, 0x05, 0xc5, 0xfb, 0x89, 0x02, 0x8f, 0xdd, 0x60, 0xc7, 0xcc, + 0x43, 0xc7, 0x37, 0xad, 0x82, 0x61, 0xac, 0xc0, 0xcc, 0x9d, 0xc0, 0xf5, 0xd1, 0x27, 0x53, 0xf8, + 0x31, 0xa7, 0xf9, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, 0xb4, + 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0xea, 0x74, 0x1a, 0xf5, + 0x96, 0xb8, 0x1c, 0x0f, 0xde, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, 0xc3, + 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, 0x1c, + 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0x38, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, 0x7e, + 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, + 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, 0x28, + 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, 0x0f, + 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, 0x4a, + 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, 0x62, + 0x40, 0x33, 0xb9, 0xef, 0xd5, 0x39, 0xd6, 0xae, 0xcc, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, 0x98, + 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x72, 0x6b, 0xd5, 0xc9, 0xbd, + 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, 0xbd, + 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x59, 0x06, 0x2f, + 0x65, 0x28, 0x59, 0x52, 0x73, 0x3e, 0xb3, 0x6c, 0xc7, 0x11, 0x01, 0xdc, 0xa4, 0x99, 0x95, 0x33, + 0x6a, 0xe2, 0xb7, 0x75, 0x42, 0xfc, 0x4e, 0xe7, 0x41, 0xf1, 0x4f, 0x0d, 0xda, 0x1b, 0x9e, 0xdd, + 0x3f, 0x1c, 0x73, 0xe8, 0xea, 0x10, 0xf5, 0xca, 0x10, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0x0d, + 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x33, 0x35, 0xa3, 0x54, 0x27, 0x85, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, + 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, 0x87, 0xfb, 0x17, 0x1d, 0x66, 0x71, 0xa1, 0xb3, + 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, 0xd2, 0xcc, 0x54, 0x6d, 0x5c, 0x53, 0x73, 0x11, + 0xe3, 0x15, 0xb1, 0xac, 0xa2, 0xbc, 0x8e, 0xf2, 0x17, 0x6a, 0xe4, 0xf3, 0x9c, 0x66, 0x15, 0xcd, + 0x79, 0x0a, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, 0x8b, 0x53, 0x2f, 0x11, 0xab, 0xa5, 0xc2, 0xa3, + 0x48, 0x3b, 0xda, 0x8e, 0x07, 0x22, 0x41, 0x09, 0x8a, 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, + 0x82, 0xc1, 0x27, 0x6a, 0xc4, 0x8e, 0x10, 0x21, 0x9a, 0x56, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, + 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, 0x4c, 0x12, 0xa7, 0x9c, 0x98, 0xcc, 0xbf, + 0x35, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0x8b, 0x3c, 0xce, 0x83, 0xa1, 0x12, 0x45, 0x12, 0x87, + 0x5b, 0xc1, 0xa9, 0x1d, 0x75, 0xa1, 0x51, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x45, 0x59, 0x70, 0x64, + 0x56, 0xd6, 0xcb, 0x55, 0x79, 0xe1, 0x91, 0x38, 0x7c, 0x29, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, + 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, + 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x25, 0x39, 0x5d, 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, + 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0x52, 0xbd, + 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, 0xba, 0xf3, 0x23, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, + 0x95, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x86, 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, + 0x55, 0x78, 0x72, 0x9e, 0xd0, 0xd5, 0x3c, 0x61, 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, + 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, 0xe6, 0x79, 0x20, 0x88, 0x1c, 0x91, 0x39, 0x9a, + 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0x41, 0xd3, 0xa2, 0x75, 0x5d, 0xe5, 0x9e, 0x5a, 0x83, + 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x27, 0x1d, 0x8a, 0x70, 0xaf, 0xf0, 0xb9, 0x53, + 0xa9, 0x38, 0xe3, 0x8d, 0x28, 0xd5, 0x14, 0x8c, 0x72, 0x55, 0x60, 0xbe, 0xaf, 0xc3, 0xe2, 0xcd, + 0x68, 0x60, 0xfb, 0xee, 0xb7, 0xb1, 0xdc, 0xc4, 0x05, 0x7c, 0x92, 0x94, 0xbb, 0x0a, 0x1d, 0xe6, + 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x4a, 0xca, 0x4d, + 0x25, 0x29, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, + 0xc3, 0xec, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x12, 0xf5, 0x4c, 0x6d, 0xa2, 0x6e, 0xcb, 0x89, 0x5a, + 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0x83, 0x06, 0x8b, 0x85, 0xbb, 0xa9, + 0x06, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, + 0x69, 0x41, 0xec, 0x4a, 0xf5, 0x7e, 0x4e, 0xf3, 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, + 0xba, 0x5b, 0x4a, 0xd5, 0x5d, 0xce, 0xa3, 0xbf, 0xd5, 0xe0, 0x3c, 0x47, 0xb9, 0x32, 0x8c, 0x9b, + 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, + 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x4e, + 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x9e, 0x6f, 0xb8, + 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, + 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x1f, 0x2c, 0x76, 0x34, 0x32, + 0x86, 0x78, 0x9d, 0x83, 0x85, 0x82, 0x1b, 0xf8, 0x79, 0x08, 0xc9, 0x2c, 0x3e, 0xad, 0x62, 0xd2, + 0xd3, 0x6d, 0xac, 0x36, 0x78, 0x0a, 0x15, 0xa4, 0xf1, 0x2d, 0x98, 0xc5, 0x1c, 0x2e, 0xba, 0xe9, + 0x4e, 0xe1, 0x00, 0x5e, 0xab, 0xad, 0x1a, 0x6a, 0xad, 0xa2, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x49, + 0x74, 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x26, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, + 0x31, 0x0e, 0xfe, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, + 0xc2, 0x66, 0x8b, 0x1a, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x07, 0x26, 0x8f, 0x51, 0x53, + 0xc6, 0x68, 0xbe, 0x05, 0x9d, 0xed, 0x78, 0xb0, 0x65, 0x27, 0x36, 0x36, 0x7c, 0x0d, 0x3a, 0xc3, + 0x82, 0xc4, 0xc6, 0xf5, 0xfd, 0x09, 0x21, 0x4b, 0x6e, 0x6e, 0xfe, 0x59, 0x87, 0x6e, 0xbd, 0x2b, + 0xe2, 0x90, 0xdb, 0xc0, 0xa2, 0x68, 0x33, 0x70, 0x18, 0x0e, 0xad, 0x69, 0x65, 0x24, 0xc7, 0x8e, + 0x45, 0x11, 0xcf, 0x61, 0xa2, 0xc8, 0x26, 0xca, 0xb8, 0x04, 0x53, 0x5e, 0x06, 0xcb, 0xc9, 0x56, + 0x60, 0x3b, 0x63, 0x08, 0x8b, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xf5, 0xb1, 0x31, 0x8b, 0x43, + 0x02, 0x4d, 0xd2, 0x41, 0xc0, 0x55, 0x54, 0xaf, 0xf4, 0xe1, 0x89, 0xda, 0xa6, 0x35, 0x00, 0x7e, + 0x49, 0x05, 0xf0, 0xe2, 0xe8, 0xa1, 0x94, 0x41, 0x0c, 0xc1, 0xb8, 0xca, 0x92, 0x6d, 0xfb, 0xde, + 0xba, 0xef, 0x6c, 0xbb, 0x7e, 0x8f, 0x1d, 0xf1, 0x68, 0x5f, 0x85, 0x8e, 0xd8, 0x9e, 0xe7, 0x30, + 0xb5, 0x2d, 0x99, 0x35, 0x72, 0xd7, 0x5e, 0x9a, 0x0f, 0x8d, 0xca, 0x7c, 0x30, 0x2f, 0xc3, 0xac, + 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x5e, 0x8f, 0x1d, 0xe1, 0x80, 0xe6, 0x2c, 0x41, 0x21, 0x1f, 0x5b, + 0x88, 0xbd, 0x81, 0xa0, 0xcc, 0x3f, 0xe9, 0x70, 0xae, 0x62, 0x72, 0x1c, 0x3e, 0xa8, 0x1e, 0x39, + 0x5e, 0x1a, 0xa3, 0xe2, 0x65, 0x4a, 0x89, 0x97, 0x43, 0x58, 0x22, 0x90, 0xa4, 0xae, 0xbb, 0x4d, + 0x0c, 0x80, 0xd7, 0xeb, 0x4a, 0xf5, 0xaa, 0x91, 0x02, 0x7b, 0x89, 0x4b, 0xe0, 0x57, 0xf5, 0xae, + 0x30, 0x58, 0xae, 0x6f, 0x5c, 0x03, 0xff, 0xcb, 0x2a, 0xfc, 0x9f, 0xae, 0x83, 0x5f, 0xb6, 0x44, + 0xc2, 0xff, 0x08, 0x16, 0xf8, 0xa2, 0xda, 0x63, 0xbe, 0xb3, 0x1d, 0x0f, 0xd0, 0x91, 0xab, 0xd0, + 0x21, 0xf9, 0xed, 0x78, 0x50, 0x6c, 0xdd, 0x24, 0x16, 0x6f, 0xd1, 0xf7, 0x5c, 0xbe, 0x78, 0x62, + 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x9e, 0x20, 0x63, 0x26, 0x4e, 0x32, 0xb8, 0x77, 0x1b, 0x56, 0x4e, + 0x9b, 0x7f, 0x6f, 0xc2, 0xb4, 0x88, 0x46, 0x4c, 0x8a, 0x7c, 0xb7, 0x9c, 0x2f, 0xab, 0x44, 0x51, + 0x5d, 0xdb, 0x3f, 0x2e, 0xc2, 0x8b, 0x28, 0xf9, 0x18, 0xa9, 0xa1, 0x1e, 0x23, 0x95, 0x6c, 0x9a, + 0xaa, 0xda, 0x54, 0x1a, 0x57, 0xb3, 0x3a, 0x2e, 0x5e, 0xc6, 0x61, 0x65, 0xb3, 0xeb, 0xd9, 0xc9, + 0x7e, 0x10, 0x0d, 0xc5, 0xe6, 0xb7, 0x69, 0x55, 0xf8, 0xbc, 0x74, 0x24, 0x5e, 0x5e, 0xfb, 0x53, + 0x0a, 0x2f, 0x71, 0x79, 0xa5, 0x4d, 0x9c, 0x6c, 0x0f, 0x40, 0xa7, 0x0e, 0x2a, 0x93, 0x6c, 0x8b, + 0x63, 0x37, 0xf0, 0xb1, 0x0a, 0xa5, 0x52, 0x5f, 0x66, 0xf1, 0x91, 0x0f, 0xe3, 0xc1, 0x95, 0x28, + 0x18, 0x8a, 0xb3, 0x87, 0x8c, 0xc4, 0x91, 0x07, 0x7e, 0x92, 0x55, 0xb0, 0x1d, 0x92, 0x95, 0x58, + 0x5c, 0x56, 0x90, 0x58, 0xe7, 0xcf, 0x5a, 0x19, 0xc9, 0x63, 0x29, 0x66, 0x47, 0xa2, 0x78, 0xe7, + 0x3f, 0x15, 0xe4, 0x16, 0x54, 0xe4, 0x4a, 0xd5, 0xd8, 0x22, 0x7e, 0x95, 0xab, 0xb1, 0xa2, 0xc4, + 0x59, 0x52, 0x4a, 0x9c, 0x75, 0x98, 0x0e, 0x42, 0x3e, 0xfd, 0xe3, 0xae, 0x81, 0xd3, 0xe5, 0xb3, + 0xa3, 0x17, 0xa8, 0x4b, 0x37, 0xa9, 0x25, 0x4d, 0x8c, 0x4c, 0xce, 0xb8, 0x01, 0x0b, 0xc1, 0xfe, + 0xbe, 0xe7, 0xfa, 0x6c, 0x37, 0x8d, 0x0f, 0x70, 0x93, 0x7c, 0x0e, 0x83, 0xdd, 0xac, 0x2b, 0x22, + 0xd4, 0x96, 0x56, 0x59, 0x94, 0x57, 0x7e, 0x76, 0x42, 0x9b, 0x1c, 0x5c, 0xe0, 0xce, 0xe3, 0x02, + 0xa7, 0xf0, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0x94, 0x9a, 0x69, 0x77, 0x5e, 0x9e, 0x76, 0x33, 0xf2, + 0xac, 0xfa, 0x91, 0x06, 0x0b, 0x25, 0x23, 0x78, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, + 0xf7, 0x31, 0x0e, 0x8b, 0xfb, 0x22, 0xcc, 0xf1, 0xb7, 0xa8, 0x08, 0x1b, 0xf9, 0xe9, 0x94, 0x09, + 0xb3, 0xee, 0xcd, 0x1e, 0x57, 0xd4, 0x0b, 0x52, 0xdf, 0xc9, 0x4f, 0x98, 0x25, 0x1e, 0x0f, 0x33, + 0xf7, 0x66, 0x6f, 0xc3, 0x76, 0x06, 0x8c, 0xce, 0x81, 0x9b, 0x68, 0x93, 0xca, 0x34, 0x1d, 0x98, + 0xb9, 0xe5, 0x86, 0xf1, 0x66, 0x30, 0x1c, 0x72, 0xb0, 0x1c, 0x96, 0xf0, 0x8a, 0x5b, 0xc3, 0x98, + 0x10, 0x14, 0x0f, 0x27, 0x87, 0xed, 0xdb, 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xe4, 0x96, 0x58, 0x78, + 0x02, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, 0x9d, 0x12, 0xc7, 0xfc, 0xa3, 0x0e, 0x8b, 0xb8, 0x76, + 0x6d, 0x62, 0x68, 0x38, 0x28, 0xf4, 0x22, 0x34, 0x71, 0xaa, 0x8a, 0xda, 0xef, 0xe4, 0xb3, 0x0d, + 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, 0xc1, 0x48, 0x0b, 0xdb, 0x33, 0xa3, 0x84, 0xd4, 0xc3, + 0x66, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, 0x45, 0x7d, 0x48, 0x69, 0x7e, 0x5c, 0x1d, 0x92, 0x24, + 0x77, 0x6e, 0x9e, 0xc1, 0xf2, 0x13, 0xe7, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, + 0x66, 0x87, 0x5c, 0x88, 0xc1, 0xf8, 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x69, 0xc2, 0x8d, 0xfc, 0x6b, + 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0xe6, 0xd6, + 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, 0x36, 0x44, 0xe6, 0xcf, 0x35, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, + 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, 0x8b, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, + 0x11, 0xb0, 0x8f, 0x71, 0x8e, 0x56, 0xc8, 0x48, 0x47, 0x22, 0x0d, 0xf9, 0x48, 0xc4, 0xfc, 0x40, + 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, + 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0xa1, 0x06, 0x17, 0xca, 0x6e, + 0x5d, 0xef, 0xf7, 0x59, 0xf8, 0x30, 0xa7, 0x94, 0x72, 0x24, 0x34, 0x55, 0x3a, 0x12, 0xaa, 0x35, + 0xd9, 0x62, 0x77, 0x58, 0xff, 0xd1, 0x35, 0xf9, 0x7b, 0x3a, 0x7c, 0xf2, 0x6a, 0x3e, 0xf1, 0x6e, + 0x45, 0xb6, 0x1f, 0xef, 0xb3, 0x28, 0x7a, 0x88, 0xf6, 0xde, 0x80, 0x39, 0x9f, 0xdd, 0x2d, 0x6c, + 0x12, 0xd3, 0x71, 0x5c, 0x35, 0xaa, 0xf0, 0x78, 0x6b, 0x97, 0xf9, 0x1f, 0x0d, 0x16, 0x49, 0xcf, + 0x5b, 0x6e, 0xff, 0xf0, 0x21, 0x0e, 0x7e, 0x07, 0xe6, 0x0f, 0xd1, 0x02, 0x4e, 0x4d, 0xb0, 0x6c, + 0x97, 0xa4, 0xc7, 0x1c, 0xfe, 0x7f, 0x35, 0x58, 0x22, 0x45, 0xd7, 0xfd, 0x63, 0xf7, 0x61, 0x06, + 0xeb, 0x2e, 0x2c, 0xb8, 0x64, 0xc2, 0x84, 0x0e, 0x28, 0x8b, 0x8f, 0xe9, 0x81, 0xdf, 0x68, 0xb0, + 0x40, 0x9a, 0xde, 0xf0, 0x13, 0x16, 0x4d, 0x3c, 0xfe, 0x6b, 0xd0, 0x61, 0x7e, 0x12, 0xd9, 0xfe, + 0x24, 0x2b, 0xa4, 0x2c, 0x3a, 0xe6, 0x22, 0xf9, 0x81, 0x06, 0x06, 0xaa, 0xda, 0x72, 0xe3, 0xa1, + 0x1b, 0xc7, 0x0f, 0x11, 0xba, 0xf1, 0x0c, 0xfe, 0x89, 0x0e, 0xe7, 0x25, 0x2d, 0xdb, 0x69, 0xf2, + 0xa8, 0x9b, 0x6c, 0x6c, 0x41, 0x9b, 0xd7, 0x08, 0xf2, 0x5d, 0xe3, 0xb8, 0x1d, 0x15, 0x82, 0xbc, + 0x8a, 0x45, 0xa2, 0xc7, 0xfa, 0x81, 0xef, 0xc4, 0x58, 0x1c, 0xcd, 0x59, 0x0a, 0x8f, 0x2f, 0x43, + 0x2b, 0x92, 0x9a, 0x4d, 0xdb, 0xef, 0x33, 0xef, 0xb1, 0x71, 0x91, 0xf9, 0x4b, 0x0d, 0xe6, 0xa9, + 0xc9, 0xa3, 0x3f, 0x64, 0x9e, 0xeb, 0x29, 0x90, 0x3f, 0x36, 0x28, 0xf1, 0xf0, 0x5a, 0x96, 0xb4, + 0xc8, 0x75, 0xf5, 0xa3, 0x1b, 0x5a, 0xd7, 0xa0, 0xd3, 0x3f, 0xb0, 0xfd, 0xc1, 0x44, 0xc1, 0x25, + 0x8b, 0x9a, 0x09, 0x3c, 0x29, 0x1f, 0xaf, 0x6f, 0xd2, 0x27, 0x1c, 0xfe, 0x4b, 0xa5, 0xa1, 0x9c, + 0xf8, 0x96, 0xe0, 0xc1, 0x9c, 0x7e, 0x08, 0x4b, 0x74, 0xa7, 0x2b, 0xd5, 0x84, 0x46, 0x17, 0xa6, + 0x6d, 0x87, 0x0e, 0x19, 0x34, 0x14, 0xca, 0x48, 0xf5, 0xb6, 0x5e, 0x3c, 0xc8, 0x2a, 0x6e, 0xeb, + 0x2f, 0x02, 0xd8, 0x8e, 0xf3, 0x4e, 0x10, 0x39, 0xae, 0x9f, 0x15, 0xf8, 0x12, 0xc7, 0x7c, 0x13, + 0x66, 0xaf, 0x44, 0xc1, 0xf0, 0x96, 0x74, 0x3b, 0x7b, 0xe2, 0xfd, 0xb1, 0x7c, 0xb3, 0xab, 0xab, + 0x37, 0xbb, 0xe6, 0x37, 0xe1, 0x89, 0x8a, 0xe1, 0xe8, 0xac, 0x4d, 0xba, 0x74, 0xce, 0x3a, 0x11, + 0x21, 0x53, 0x77, 0xea, 0x26, 0xdb, 0x62, 0x29, 0x42, 0xe6, 0x77, 0x35, 0x78, 0xaa, 0xa2, 0x7e, + 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, + 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, 0x88, 0x5f, 0x68, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, + 0xcb, 0xd0, 0xa2, 0x07, 0x2b, 0xa2, 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x1e, 0xda, 0x58, 0xa2, 0x71, + 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x52, 0x22, 0x04, 0xcc, 0xaf, + 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0x9e, 0x29, 0x7c, + 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, + 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, + 0x85, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0xd7, 0x84, 0x28, 0x92, 0x49, + 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, + 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, + 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0x3a, 0x08, + 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xb9, 0x32, 0xf2, 0x2a, 0xd1, + 0xec, 0xc1, 0x92, 0x78, 0x32, 0xb3, 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, + 0xc8, 0x9e, 0xcc, 0xd1, 0xa5, 0x98, 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, + 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, + 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, 0xde, 0x8f, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, + 0x03, 0x74, 0x89, 0x63, 0xfe, 0xb4, 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, + 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, 0xba, 0x03, 0x5d, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, + 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, + 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, + 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, + 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, + 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, + 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, + 0xe6, 0xfb, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, + 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, + 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, + 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, + 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd4, 0x61, 0x1e, 0x5d, 0x46, 0x77, 0xac, 0xfe, + 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x05, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, 0x60, + 0xd2, 0x65, 0x88, 0x8e, 0x97, 0x21, 0xd5, 0x0f, 0x78, 0xfd, 0x93, 0xc6, 0x49, 0x30, 0xdc, 0xb2, + 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x39, 0x37, 0x55, 0x79, 0xe3, 0x1d, 0x05, 0xc1, 0x30, + 0xbf, 0x75, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xaf, + 0xa4, 0x1c, 0xd7, 0xc6, 0x2b, 0x2d, 0xf1, 0x84, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xd1, 0x89, + 0x37, 0xd8, 0x05, 0xe7, 0xf4, 0xeb, 0x34, 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, + 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0x71, 0x0c, 0xca, 0x33, 0x4c, 0xed, 0xc1, 0x9e, 0x61, + 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x29, 0x6d, 0x3c, + 0xf0, 0x9b, 0x52, 0xf3, 0x07, 0x3a, 0x2c, 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, + 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, 0x59, 0x92, 0x50, 0xdd, 0x3d, 0x5d, 0x63, 0xf2, 0x7b, + 0xba, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, + 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, + 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x68, 0x5d, 0x90, 0xe6, 0x0f, 0x75, 0x58, 0xae, 0xcf, + 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, + 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xeb, 0xdc, 0x3f, 0x79, 0xa5, + 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xc3, 0x0e, 0x2a, 0x5c, 0x2b, 0xfc, + 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, 0xec, 0xef, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x58, + 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, + 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0xe5, + 0xe9, 0x99, 0x6e, 0x14, 0xcb, 0xef, 0xf3, 0xa6, 0xaa, 0xef, 0xf3, 0x36, 0x60, 0x5e, 0x36, 0x60, + 0x92, 0x97, 0x95, 0x1b, 0x17, 0xbe, 0xb1, 0x72, 0xe9, 0x79, 0xfa, 0x97, 0xe6, 0xab, 0x15, 0x27, + 0xee, 0xb5, 0xf0, 0x5f, 0x9b, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x59, 0x84, 0xce, + 0xc8, 0x39, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 8d9e04fc5..7c24f3078 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -170,30 +170,54 @@ message UserInDepartment { ///////////////////////////////////base end///////////////////////////////////// +message PullMessageBySeqListReq{ + string userID = 1; + string operationID = 2; + repeated uint32 seqList = 3; + map groupSeqList = 4; +} + +message seqList { + repeated uint32 seqList = 1; +} + + +message MsgDataList { + repeated MsgData msgDataList = 1; +} message PullMessageBySeqListResp { int32 errCode = 1; string errMsg = 2; repeated MsgData list = 3; + map groupMsgDataList = 4; } -message PullMessageBySeqListReq{ - string userID = 1; - string operationID = 2; - repeated uint32 seqList = 3; -} + + + message GetMaxAndMinSeqReq { + repeated string groupIDList = 1; + string userID = 2; + string operationID =3; +} +message MaxAndMinSeq{ + uint32 maxSeq = 1; + uint32 minSeq = 2; } message GetMaxAndMinSeqResp { uint32 maxSeq = 1; uint32 minSeq = 2; + int32 errCode = 3; + string errMsg = 4; + map groupMaxAndMinSeq = 5; } message UserSendMsgResp { string serverMsgID = 1; string clientMsgID = 2; int64 sendTime = 3; - } + message MsgData { string sendID = 1; string recvID = 2;