diff --git a/.gitignore b/.gitignore
index f0570e65b..2845f5572 100644
--- a/.gitignore
+++ b/.gitignore
@@ -163,6 +163,7 @@ go.work
# User-specific stuff
.idea/
+.idea
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 94a25f7f4..35eb1ddfb 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/cmd/api/main.go b/cmd/api/main.go
index 89235bd05..1c947c12b 100644
--- a/cmd/api/main.go
+++ b/cmd/api/main.go
@@ -42,6 +42,7 @@ func startPprof() {
}
func run(port int) error {
+ port = 10002
if port == 0 {
return fmt.Errorf("port is empty")
}
diff --git a/config/config.yaml b/config/config.yaml
index a7c1abc8d..fac3cff60 100644
--- a/config/config.yaml
+++ b/config/config.yaml
@@ -1,7 +1,3 @@
-#OpenIM config
-
-
-#---------------Infrastructure configuration---------------------#
zookeeper:
schema: openim #不建议修改
address: [ 127.0.0.1:2181 ] #
@@ -9,9 +5,9 @@ zookeeper:
password: #密码
mysql:
- address: [ 127.0.0.1:13306 ] #目前仅支持单机
+ address: [ 127.0.0.1:3306 ] #目前仅支持单机
username: root #用户名
- password: openIM123 #密码
+ password: #密码
database: openIM_v3 #不建议修改
maxOpenConn: 1000 #最大连接数
maxIdleConn: 100 #最大空闲连接数
@@ -28,7 +24,7 @@ mongo:
maxPoolSize: 100
redis:
- address: [ 127.0.0.1:16379 ] #
+ address: [ 127.0.0.1:6379 ] #
username: #only redis version 6.0+ need username
password: openIM123 #密码
@@ -42,14 +38,11 @@ kafka:
topic: "offlineMsgToMongoMysql" #不建议修改
msgToPush:
topic: "msgToPush" #不建议修改
- msgToModify:
- topic: "msgToModify" #不建议修改
consumerGroupID: #消费者组,不建议修改
msgToRedis: redis #
msgToMongo: mongo #
msgToMySql: mysql #
msgToPush: push #
- msgToModify: modify #
rpc:
@@ -63,40 +56,25 @@ api:
object:
enable: minio #使用minio
- apiURL: http://127.0.0.1:10002/third/object
+ apiURL: http://127.0.0.1:10002/object/
minio:
- tempBucket: "openim" #不建议修改
- dataBucket: "openim" #不建议修改
- location: us-east-1 #不建议修改
+ bucket: "openim" #不建议修改
endpoint: http://127.0.0.1:10005 #minio对外服务的ip和端口,app要能访问此ip和端口
accessKeyID: root #ID
secretAccessKey: openIM123 #秘钥
- isDistributedMod: false #是否分布式多硬盘部署,如果是多硬盘部署,需要修改为true
- tencent: #tencent cos
- appID: 1314570205
- region: ap-guangzhou
- bucket: openim-test-1314570205
- secretID: AKIDypY3K8lJk3NYVHqBXkneH5pMhsQFtKWX
- secretKey: MZdXKxb9WhedR6dzAAzZyEVfgeR1NVP6
- ali: #ali oss
- regionID:
- accessKeyID:
- accessKeySecret:
- stsEndpoint:
- ossEndpoint:
- bucket:
- finalHost:
- stsDurationSeconds:
- OssRoleArn:
- aws:
- accessKeyID:
- accessKeySecret:
- region:
- bucket:
- finalHost:
- roleArn:
- externalId:
- roleSessionName:
+ sessionToken: #token
+ cos: #tencent cos
+ bucketURL: "https://temp-1252357374.cos.ap-chengdu.myqcloud.com"
+ secretID: ""
+ secretKey: ""
+ sessionToken: ""
+ oss: #ali oss
+ endpoint: "https://oss-cn-chengdu.aliyuncs.com"
+ bucket: "demo-9999999"
+ bucketURL: "https://demo-9999999.oss-cn-chengdu.aliyuncs.com"
+ accessKeyID: ""
+ accessKeySecret: ""
+ sessionToken: ""
rpcPort: #rpc服务端口,不建议修改,端口由脚本读取后传入程序,如启动多个程序,只需要填入多个端口,用逗号隔开,如 [10110, 10111]
openImUserPort: [ 10110 ]
@@ -168,7 +146,8 @@ groupMessageHasReadReceiptEnable: true #群聊已读是否开
singleMessageHasReadReceiptEnable: true #单聊已读是否开启
retainChatRecords: 365 #mongo保存离线消息时间(天)
-chatRecordsClearTime: "0 2 * * 3" #每周三凌晨2点清理mongo中的过期(超过retainChatRecords时间)消息
+chatRecordsClearTime: "0 2 * * 3" #每周三凌晨2点清理mongo中的过期(超过retainChatRecords时间)消息,这个删除是为了清理满足上个配置retainChatRecords的过期消息,不会发送通知,仅仅作为清理磁盘使用
+msgDestructTime: "0 2 * * *" #消息自动删除时间,每天凌晨2点删除过期消息,这个删除是为了删除保留时间超过超过会话字段msg_destruct_time(秒)的消息。
secret: tuoyun #秘钥,获取token时校验
@@ -261,4 +240,3 @@ prometheus: #prometheus每个服务的端口数量需要和rpcPort保持对应
rtcPrometheusPort: [ 21300 ]
thirdPrometheusPort: [ 21301 ]
messageTransferPrometheusPort: [ 21400, 21401, 21402, 21403 ] #端口数量需要和script/path_info.cfg中的msg_transfer_service_num保持一致
-
diff --git a/go.mod b/go.mod
index 1e3d4dd86..8a7fd7153 100644
--- a/go.mod
+++ b/go.mod
@@ -17,13 +17,13 @@ require (
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
github.com/jinzhu/copier v0.3.5
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
- github.com/minio/minio-go/v7 v7.0.22
+ github.com/minio/minio-go/v7 v7.0.59
github.com/mitchellh/mapstructure v1.5.0
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.13.0
github.com/robfig/cron/v3 v3.0.1
- github.com/sirupsen/logrus v1.9.0 // indirect
+ github.com/sirupsen/logrus v1.9.2 // indirect
github.com/stretchr/testify v1.8.3
github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca
go.mongodb.org/mongo-driver v1.8.3
@@ -39,6 +39,7 @@ require (
require github.com/google/uuid v1.3.0
require (
+ github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible
github.com/go-redis/redis v6.15.9+incompatible
github.com/go-sql-driver/mysql v1.6.0
github.com/go-zookeeper/zk v1.0.3
@@ -61,7 +62,7 @@ require (
github.com/clbanning/mxj v1.8.4 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
- github.com/dustin/go-humanize v1.0.0 // indirect
+ github.com/dustin/go-humanize v1.0.1 // indirect
github.com/eapache/go-resiliency v1.2.0 // indirect
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
github.com/eapache/queue v1.1.0 // indirect
@@ -85,15 +86,13 @@ require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.13.6 // indirect
- github.com/klauspost/cpuid v1.3.1 // indirect
+ github.com/klauspost/compress v1.16.5 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/lithammer/shortuuid v3.0.0+incompatible // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
- github.com/minio/md5-simd v1.1.0 // indirect
- github.com/minio/sha256-simd v0.1.1 // indirect
- github.com/mitchellh/go-homedir v1.1.0 // indirect
+ github.com/minio/md5-simd v1.1.2 // indirect
+ github.com/minio/sha256-simd v1.0.1 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mozillazg/go-httpheader v0.4.0 // indirect
@@ -106,7 +105,7 @@ require (
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
- github.com/rs/xid v1.2.1 // indirect
+ github.com/rs/xid v1.5.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
@@ -140,7 +139,7 @@ require (
go.uber.org/zap v1.24.0
golang.org/x/crypto v0.10.0 // indirect
google.golang.org/genproto v0.0.0-20230525234025-438c736192d0 // indirect
- gopkg.in/ini.v1 v1.66.2 // indirect
+ gopkg.in/ini.v1 v1.67.0 // indirect
)
replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0
diff --git a/go.sum b/go.sum
index 4d3191dec..e95d2e81e 100644
--- a/go.sum
+++ b/go.sum
@@ -61,6 +61,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible h1:KpbJFXwhVeuxNtBJ74MCGbIoaBok2uZvkD7QXp2+Wis=
+github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
@@ -97,8 +99,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/dtm-labs/rockscache v0.1.1 h1:6S1vgaHvGqrLd8Ka4hRTKeKPV7v+tT0MSkTIX81LRyA=
github.com/dtm-labs/rockscache v0.1.1/go.mod h1:c76WX0kyIibmQ2ACxUXvDvaLykoPakivMqIxt+UzE7A=
-github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
+github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q=
github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw=
@@ -281,11 +283,10 @@ github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
-github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
-github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
-github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
+github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
+github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
@@ -313,14 +314,12 @@ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APP
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
-github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
-github.com/minio/minio-go/v7 v7.0.22 h1:iXhsiRyYh1ozm/+jN2qGgEIahYjEkvcpuu6NcdpSxcA=
-github.com/minio/minio-go/v7 v7.0.22/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do=
-github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
-github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
-github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
+github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
+github.com/minio/minio-go/v7 v7.0.59 h1:lxIXwsTIcQkYoEG25rUJbzpmSB/oWeVDmxFo/uWUUsw=
+github.com/minio/minio-go/v7 v7.0.59/go.mod h1:NUDy4A4oXPq1l2yK6LTSvCEzAMeIcoz9lcj5dbzSrRE=
+github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
+github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
@@ -395,14 +394,14 @@ github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDO
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
-github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
+github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
+github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
-github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y=
+github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@@ -797,8 +796,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
-gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/internal/api/msg.go b/internal/api/msg.go
index e16ae5b70..8e75ec816 100644
--- a/internal/api/msg.go
+++ b/internal/api/msg.go
@@ -149,22 +149,6 @@ func (m *MessageApi) DeleteMsgPhysical(c *gin.Context) {
a2r.Call(msg.MsgClient.DeleteMsgPhysical, m.Client, c)
}
-func (m *MessageApi) SetMessageReactionExtensions(c *gin.Context) {
- a2r.Call(msg.MsgClient.SetMessageReactionExtensions, m.Client, c)
-}
-
-func (m *MessageApi) GetMessageListReactionExtensions(c *gin.Context) {
- a2r.Call(msg.MsgClient.GetMessagesReactionExtensions, m.Client, c)
-}
-
-func (m *MessageApi) AddMessageReactionExtensions(c *gin.Context) {
- a2r.Call(msg.MsgClient.AddMessageReactionExtensions, m.Client, c)
-}
-
-func (m *MessageApi) DeleteMessageReactionExtensions(c *gin.Context) {
- a2r.Call(msg.MsgClient.DeleteMessageReactionExtensions, m.Client, c)
-}
-
func (m *MessageApi) SendMessage(c *gin.Context) {
params := apistruct.ManagementSendMsgReq{}
if err := c.BindJSON(¶ms); err != nil {
@@ -351,6 +335,69 @@ func (m *MessageApi) SearchMsg(c *gin.Context) {
a2r.Call(msg.MsgClient.SearchMessage, m.Client, c)
}
-func (m MessageApi) GetChatLogs(c *gin.Context) {
+func (m *MessageApi) GetChatLogs(c *gin.Context) {
a2r.Call(msg.MsgClient.GetChatLogs, m.Client, c)
}
+
+func (m *MessageApi) ManagementSendMsg(c *gin.Context) {
+ params := apistruct.ManagementSendMsgReq{}
+ if err := c.BindJSON(¶ms); err != nil {
+ apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error()))
+ return
+ }
+ var data interface{}
+ switch params.ContentType {
+ case constant.Text:
+ data = apistruct.TextElem{}
+ case constant.Picture:
+ data = apistruct.PictureElem{}
+ case constant.Voice:
+ data = apistruct.SoundElem{}
+ case constant.Video:
+ data = apistruct.VideoElem{}
+ case constant.File:
+ data = apistruct.FileElem{}
+ case constant.Custom:
+ data = apistruct.CustomElem{}
+ case constant.Revoke:
+ data = apistruct.RevokeElem{}
+ case constant.OANotification:
+ data = apistruct.OANotificationElem{}
+ params.SessionType = constant.NotificationChatType
+ case constant.CustomNotTriggerConversation:
+ data = apistruct.CustomElem{}
+ case constant.CustomOnlineOnly:
+ data = apistruct.CustomElem{}
+ default:
+ apiresp.GinError(c, errs.ErrArgs.WithDetail("not support err contentType").Wrap())
+ return
+ }
+ if err := mapstructure.WeakDecode(params.Content, &data); err != nil {
+ apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error()))
+ return
+ } else if err := m.validate.Struct(params); err != nil {
+ apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error()))
+ return
+ }
+
+ pbReq := m.newUserSendMsgReq(c, ¶ms)
+ var status int32
+ RpcResp, err := m.Client.SendMsg(c, pbReq)
+ if err != nil {
+ status = constant.MsgSendFailed
+ } else {
+ status = constant.MsgSendSuccessed
+ }
+
+ _, err2 := m.Client.SetSendMsgStatus(c, &msg.SetSendMsgStatusReq{Status: status})
+ if err2 != nil {
+ apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error()))
+ return
+ }
+ resp := apistruct.ManagementSendMsgResp{ResultList: sdkws.UserSendMsgResp{ServerMsgID: RpcResp.ServerMsgID, ClientMsgID: RpcResp.ClientMsgID, SendTime: RpcResp.SendTime}}
+ apiresp.GinSuccess(c, resp)
+}
+
+func (m *MessageApi) ManagementMsg(c *gin.Context) {
+ a2r.Call(msg.MsgClient.ManageMsg, m.Client, c)
+}
diff --git a/internal/api/route.go b/internal/api/route.go
index ed85f4d45..e90af2072 100644
--- a/internal/api/route.go
+++ b/internal/api/route.go
@@ -110,13 +110,15 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive
thirdGroup.POST("/fcm_update_token", t.FcmUpdateToken)
thirdGroup.POST("/set_app_badge", t.SetAppBadge)
- thirdGroup.POST("/apply_put", t.ApplyPut)
- thirdGroup.POST("/get_put", t.GetPut)
- thirdGroup.POST("/confirm_put", t.ConfirmPut)
- thirdGroup.POST("/get_hash", t.GetHash)
- thirdGroup.POST("/object", t.GetURL)
- thirdGroup.GET("/object", t.GetURL)
+ objectGroup := r.Group("/object", ParseToken)
+ objectGroup.POST("/part_limit", t.PartLimit)
+ objectGroup.POST("/part_size", t.PartSize)
+ objectGroup.POST("/initiate_multipart_upload", t.InitiateMultipartUpload)
+ objectGroup.POST("/auth_sign", t.AuthSign)
+ objectGroup.POST("/complete_multipart_upload", t.CompleteMultipartUpload)
+ objectGroup.POST("/access_url", t.AccessURL)
+ objectGroup.GET("/*name", t.ObjectRedirect)
thirdGroup.POST("/minio_upload", t.MinioUploadFile)
}
//Message
@@ -128,6 +130,8 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive
msgGroup.POST("/revoke_msg", m.RevokeMsg)
msgGroup.POST("/mark_msgs_as_read", m.MarkMsgsAsRead)
msgGroup.POST("/mark_conversation_as_read", m.MarkConversationAsRead)
+ msgGroup.POST("/manage_send_msg", m.ManagementSendMsg)
+ msgGroup.POST("/manage_msg", m.ManagementMsg)
msgGroup.POST("/get_conversations_has_read_and_max_seq", m.GetConversationsHasReadAndMaxSeq)
msgGroup.POST("/set_conversation_has_read_seq", m.SetConversationHasReadSeq)
diff --git a/internal/api/third.go b/internal/api/third.go
index 7d45e8001..1f48d1716 100644
--- a/internal/api/third.go
+++ b/internal/api/third.go
@@ -2,22 +2,21 @@ package api
import (
"context"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/a2r"
"github.com/OpenIMSDK/Open-IM-Server/pkg/apistruct"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "github.com/minio/minio-go/v7"
- "math/rand"
- "net/http"
- "strconv"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/a2r"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
"github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry"
"github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
"github.com/OpenIMSDK/Open-IM-Server/pkg/proto/third"
"github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
"github.com/gin-gonic/gin"
+ "github.com/minio/minio-go/v7"
+ "math/rand"
+ "net/http"
+ "strconv"
)
type ThirdApi rpcclient.Third
@@ -26,51 +25,55 @@ func NewThirdApi(discov discoveryregistry.SvcDiscoveryRegistry) ThirdApi {
return ThirdApi(*rpcclient.NewThird(discov))
}
-func (o *ThirdApi) ApplyPut(c *gin.Context) {
- a2r.Call(third.ThirdClient.ApplyPut, o.Client, c)
+func (o *ThirdApi) FcmUpdateToken(c *gin.Context) {
+ a2r.Call(third.ThirdClient.FcmUpdateToken, o.Client, c)
+}
+
+func (o *ThirdApi) SetAppBadge(c *gin.Context) {
+ a2r.Call(third.ThirdClient.SetAppBadge, o.Client, c)
}
-func (o *ThirdApi) GetPut(c *gin.Context) {
- a2r.Call(third.ThirdClient.GetPut, o.Client, c)
+// #################### s3 ####################
+
+func (o *ThirdApi) PartLimit(c *gin.Context) {
+ a2r.Call(third.ThirdClient.PartLimit, o.Client, c)
}
-func (o *ThirdApi) ConfirmPut(c *gin.Context) {
- a2r.Call(third.ThirdClient.ConfirmPut, o.Client, c)
+func (o *ThirdApi) PartSize(c *gin.Context) {
+ a2r.Call(third.ThirdClient.PartSize, o.Client, c)
}
-func (o *ThirdApi) GetHash(c *gin.Context) {
- a2r.Call(third.ThirdClient.GetHashInfo, o.Client, c)
+func (o *ThirdApi) InitiateMultipartUpload(c *gin.Context) {
+ a2r.Call(third.ThirdClient.InitiateMultipartUpload, o.Client, c)
}
-func (o *ThirdApi) FcmUpdateToken(c *gin.Context) {
- a2r.Call(third.ThirdClient.FcmUpdateToken, o.Client, c)
+func (o *ThirdApi) AuthSign(c *gin.Context) {
+ a2r.Call(third.ThirdClient.AuthSign, o.Client, c)
}
-func (o *ThirdApi) SetAppBadge(c *gin.Context) {
- a2r.Call(third.ThirdClient.SetAppBadge, o.Client, c)
+func (o *ThirdApi) CompleteMultipartUpload(c *gin.Context) {
+ a2r.Call(third.ThirdClient.CompleteMultipartUpload, o.Client, c)
}
-func (o *ThirdApi) GetURL(c *gin.Context) {
- if c.Request.Method == http.MethodPost {
- a2r.Call(third.ThirdClient.GetUrl, o.Client, c)
- return
- }
- name := c.Query("name")
+func (o *ThirdApi) AccessURL(c *gin.Context) {
+ a2r.Call(third.ThirdClient.AccessURL, o.Client, c)
+}
+
+func (o *ThirdApi) ObjectRedirect(c *gin.Context) {
+ name := c.Param("name")
if name == "" {
c.String(http.StatusBadRequest, "name is empty")
return
}
+ if name[0] == '/' {
+ name = name[1:]
+ }
operationID := c.Query("operationID")
if operationID == "" {
- operationID = "auto_" + strconv.Itoa(rand.Int())
- }
- expires, _ := strconv.ParseInt(c.Query("expires"), 10, 64)
- if expires <= 0 {
- expires = 3600 * 1000
+ operationID = strconv.Itoa(rand.Int())
}
- attachment, _ := strconv.ParseBool(c.Query("attachment"))
- c.Set(constant.OperationID, operationID)
- resp, err := o.Client.GetUrl(mcontext.SetOperationID(c, operationID), &third.GetUrlReq{Name: name, Expires: expires, Attachment: attachment})
+ ctx := mcontext.SetOperationID(c, operationID)
+ resp, err := o.Client.AccessURL(ctx, &third.AccessURLReq{Name: name})
if err != nil {
if errs.ErrArgs.Is(err) {
c.String(http.StatusBadRequest, err.Error())
@@ -110,12 +113,12 @@ func (o *ThirdApi) MinioUploadFile(c *gin.Context) {
return
}
snapShotNewName, snapShotNewType := utils.GetNewFileNameAndContentType(snapShotFile.Filename, constant.ImageType)
- _, err = o.MinioClient.PutObject(context.Background(), config.Config.Object.Minio.DataBucket, snapShotNewName, snapShotFileObj, snapShotFile.Size, minio.PutObjectOptions{ContentType: snapShotNewType})
+ _, err = o.MinioClient.PutObject(context.Background(), config.Config.Object.Minio.Bucket, snapShotNewName, snapShotFileObj, snapShotFile.Size, minio.PutObjectOptions{ContentType: snapShotNewType})
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
- resp.SnapshotURL = config.Config.Object.Minio.Endpoint + "/" + config.Config.Object.Minio.DataBucket + "/" + snapShotNewName
+ resp.SnapshotURL = config.Config.Object.Minio.Endpoint + "/" + config.Config.Object.Minio.Bucket + "/" + snapShotNewName
resp.SnapshotNewName = snapShotNewName
}
file, err := c.FormFile("file")
@@ -129,13 +132,13 @@ func (o *ThirdApi) MinioUploadFile(c *gin.Context) {
return
}
newName, newType := utils.GetNewFileNameAndContentType(file.Filename, req.FileType)
- _, err = o.MinioClient.PutObject(context.Background(), config.Config.Object.Minio.DataBucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType})
+ _, err = o.MinioClient.PutObject(context.Background(), config.Config.Object.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType})
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "upload file error" + err.Error()})
return
}
resp.NewName = newName
- resp.URL = config.Config.Object.Minio.Endpoint + "/" + config.Config.Object.Minio.DataBucket + "/" + newName
+ resp.URL = config.Config.Object.Minio.Endpoint + "/" + config.Config.Object.Minio.Bucket + "/" + newName
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp})
return
}
diff --git a/internal/api/user.go b/internal/api/user.go
index 2f7352c41..e39b1488c 100644
--- a/internal/api/user.go
+++ b/internal/api/user.go
@@ -3,11 +3,9 @@ package api
import (
"github.com/OpenIMSDK/Open-IM-Server/pkg/a2r"
"github.com/OpenIMSDK/Open-IM-Server/pkg/apiresp"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/apistruct"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify"
"github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry"
"github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
"github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msggateway"
@@ -51,15 +49,54 @@ func (u *UserApi) GetUsers(c *gin.Context) {
}
func (u *UserApi) GetUsersOnlineStatus(c *gin.Context) {
- params := apistruct.ManagementSendMsgReq{}
- if err := c.BindJSON(¶ms); err != nil {
+ var req msggateway.GetUsersOnlineStatusReq
+ if err := c.BindJSON(&req); err != nil {
apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap())
return
}
- if !tokenverify.IsAppManagerUid(c) {
- apiresp.GinError(c, errs.ErrNoPermission.Wrap("only app manager can send message"))
+ conns, err := u.Discov.GetConns(c, config.Config.RpcRegisterName.OpenImMessageGatewayName)
+ if err != nil {
+ apiresp.GinError(c, err)
return
}
+
+ var wsResult []*msggateway.GetUsersOnlineStatusResp_SuccessResult
+ var respResult []*msggateway.GetUsersOnlineStatusResp_SuccessResult
+ flag := false
+
+ //Online push message
+ for _, v := range conns {
+ msgClient := msggateway.NewMsgGatewayClient(v)
+ reply, err := msgClient.GetUsersOnlineStatus(c, &req)
+ if err != nil {
+ log.ZWarn(c, "GetUsersOnlineStatus rpc err", err)
+ continue
+ } else {
+ wsResult = append(wsResult, reply.SuccessResult...)
+ }
+ }
+ // 遍历 api 请求体中的 userIDs
+ for _, v1 := range req.UserIDs {
+ flag = false
+ res := new(msggateway.GetUsersOnlineStatusResp_SuccessResult)
+ // 遍历从各个网关中获取的在线结果
+ for _, v2 := range wsResult {
+ // 如果匹配上说明在线,反之
+ if v2.UserID == v1 {
+ flag = true
+ res.UserID = v1
+ res.Status = constant.OnlineStatus
+ res.DetailPlatformStatus = append(res.DetailPlatformStatus, v2.DetailPlatformStatus...)
+ break
+ }
+ }
+ if !flag {
+ res.UserID = v1
+ res.Status = constant.OnlineStatus
+ }
+ respResult = append(respResult, res)
+ }
+ apiresp.GinSuccess(c, respResult)
}
func (u *UserApi) UserRegisterCount(c *gin.Context) {
diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go
index 2e001667a..2cb7b4f0d 100644
--- a/internal/msggateway/init.go
+++ b/internal/msggateway/init.go
@@ -8,6 +8,8 @@ import (
)
func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error {
+ rpcPort = 10040
+ wsPort = 10001
fmt.Println("start rpc/msg_gateway server, port: ", rpcPort, wsPort, prometheusPort, ", OpenIM version: ", config.Version)
longServer, err := NewWsServer(
WithPort(wsPort),
diff --git a/internal/msgtransfer/init.go b/internal/msgtransfer/init.go
index bec22c49c..12267665c 100644
--- a/internal/msgtransfer/init.go
+++ b/internal/msgtransfer/init.go
@@ -10,7 +10,6 @@ import (
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/relation"
relationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/tx"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/unrelation"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/mw"
@@ -25,7 +24,7 @@ type MsgTransfer struct {
persistentCH *PersistentConsumerHandler // 聊天记录持久化到mysql的消费者 订阅的topic: ws2ms_chat
historyCH *OnlineHistoryRedisConsumerHandler // 这个消费者聚合消息, 订阅的topic:ws2ms_chat, 修改通知发往msg_to_modify topic, 消息存入redis后Incr Redis, 再发消息到ms2pschat topic推送, 发消息到msg_to_mongo topic持久化
historyMongoCH *OnlineHistoryMongoConsumerHandler // mongoDB批量插入, 成功后删除redis中消息,以及处理删除通知消息删除的 订阅的topic: msg_to_mongo
- modifyCH *ModifyMsgConsumerHandler // 负责消费修改消息通知的consumer, 订阅的topic: msg_to_modify
+ // modifyCH *ModifyMsgConsumerHandler // 负责消费修改消息通知的consumer, 订阅的topic: msg_to_modify
}
func StartTransfer(prometheusPort int) error {
@@ -60,23 +59,20 @@ func StartTransfer(prometheusPort int) error {
msgModel := cache.NewMsgCacheModel(rdb)
msgDocModel := unrelation.NewMsgMongoDriver(mongo.GetDatabase())
msgMysModel := relation.NewChatLogGorm(db)
- extendMsgModel := unrelation.NewExtendMsgSetMongoDriver(mongo.GetDatabase())
- extendMsgCache := cache.NewExtendMsgSetCacheRedis(rdb, extendMsgModel, cache.GetDefaultOpt())
chatLogDatabase := controller.NewChatLogDatabase(msgMysModel)
- extendMsgDatabase := controller.NewExtendMsgDatabase(extendMsgModel, extendMsgCache, tx.NewMongo(mongo.GetClient()))
msgDatabase := controller.NewCommonMsgDatabase(msgDocModel, msgModel, msgMysModel)
conversationRpcClient := rpcclient.NewConversationRpcClient(client)
groupRpcClient := rpcclient.NewGroupRpcClient(client)
- msgTransfer := NewMsgTransfer(chatLogDatabase, extendMsgDatabase, msgDatabase, &conversationRpcClient, &groupRpcClient)
+ msgTransfer := NewMsgTransfer(chatLogDatabase, msgDatabase, &conversationRpcClient, &groupRpcClient)
msgTransfer.initPrometheus()
return msgTransfer.Start(prometheusPort)
}
func NewMsgTransfer(chatLogDatabase controller.ChatLogDatabase,
- extendMsgDatabase controller.ExtendMsgDatabase, msgDatabase controller.CommonMsgDatabase,
+ msgDatabase controller.CommonMsgDatabase,
conversationRpcClient *rpcclient.ConversationRpcClient, groupRpcClient *rpcclient.GroupRpcClient) *MsgTransfer {
return &MsgTransfer{persistentCH: NewPersistentConsumerHandler(chatLogDatabase), historyCH: NewOnlineHistoryRedisConsumerHandler(msgDatabase, conversationRpcClient, groupRpcClient),
- historyMongoCH: NewOnlineHistoryMongoConsumerHandler(msgDatabase), modifyCH: NewModifyMsgConsumerHandler(extendMsgDatabase)}
+ historyMongoCH: NewOnlineHistoryMongoConsumerHandler(msgDatabase)}
}
func (m *MsgTransfer) initPrometheus() {
@@ -101,7 +97,7 @@ func (m *MsgTransfer) Start(prometheusPort int) error {
}
go m.historyCH.historyConsumerGroup.RegisterHandleAndConsumer(m.historyCH)
go m.historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(m.historyMongoCH)
- go m.modifyCH.modifyMsgConsumerGroup.RegisterHandleAndConsumer(m.modifyCH)
+ // go m.modifyCH.modifyMsgConsumerGroup.RegisterHandleAndConsumer(m.modifyCH)
err := prome.StartPrometheusSrv(prometheusPort)
if err != nil {
return err
diff --git a/internal/msgtransfer/modify_msg_handler.go b/internal/msgtransfer/modify_msg_handler.go
deleted file mode 100644
index 0b9ad2aff..000000000
--- a/internal/msgtransfer/modify_msg_handler.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package msgtransfer
-
-import (
- "context"
- "encoding/json"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller"
- unRelationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation"
- kfk "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
- pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "github.com/Shopify/sarama"
-
- "google.golang.org/protobuf/proto"
-)
-
-type ModifyMsgConsumerHandler struct {
- modifyMsgConsumerGroup *kfk.MConsumerGroup
-
- extendMsgDatabase controller.ExtendMsgDatabase
- extendSetMsgModel unRelationTb.ExtendMsgSetModel
-}
-
-func NewModifyMsgConsumerHandler(database controller.ExtendMsgDatabase) *ModifyMsgConsumerHandler {
- return &ModifyMsgConsumerHandler{
- modifyMsgConsumerGroup: kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0,
- OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToModify.Topic},
- config.Config.Kafka.Addr, config.Config.Kafka.ConsumerGroupID.MsgToModify),
- extendMsgDatabase: database,
- }
-}
-
-func (ModifyMsgConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil }
-func (ModifyMsgConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil }
-func (mmc *ModifyMsgConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession,
- claim sarama.ConsumerGroupClaim) error {
- for msg := range claim.Messages() {
- ctx := mmc.modifyMsgConsumerGroup.GetContextFromMsg(msg)
- log.ZDebug(ctx, "kafka get info to mysql", "ModifyMsgConsumerHandler", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key))
- if len(msg.Value) != 0 {
- mmc.ModifyMsg(ctx, msg, string(msg.Key), sess)
- } else {
- log.ZError(ctx, "msg get from kafka but is nil", nil, "key", msg.Key)
- }
- sess.MarkMessage(msg, "")
- }
- return nil
-}
-
-func (mmc *ModifyMsgConsumerHandler) ModifyMsg(ctx context.Context, cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) {
- msgFromMQ := pbMsg.MsgDataToModifyByMQ{}
- operationID := mcontext.GetOperationID(ctx)
- err := proto.Unmarshal(cMsg.Value, &msgFromMQ)
- if err != nil {
- log.ZError(ctx, "msg_transfer Unmarshal msg err", err, "msg", string(cMsg.Value))
- return
- }
- log.ZDebug(ctx, "proto.Unmarshal MsgDataToMQ", "msgs", msgFromMQ.String())
- for _, msg := range msgFromMQ.Messages {
- isReactionFromCache := utils.GetSwitchFromOptions(msg.Options, constant.IsReactionFromCache)
- if !isReactionFromCache {
- continue
- }
- ctx = mcontext.SetOperationID(ctx, operationID)
- if msg.ContentType == constant.ReactionMessageModifier {
- notification := &sdkws.ReactionMessageModifierNotification{}
- if err := json.Unmarshal(msg.Content, notification); err != nil {
- continue
- }
- if notification.IsExternalExtensions {
- continue
- }
- if !notification.IsReact {
- // first time to modify
- var reactionExtensionList = make(map[string]unRelationTb.KeyValueModel)
- extendMsg := unRelationTb.ExtendMsgModel{
- ReactionExtensionList: reactionExtensionList,
- ClientMsgID: notification.ClientMsgID,
- MsgFirstModifyTime: notification.MsgFirstModifyTime,
- }
- for _, v := range notification.SuccessReactionExtensions {
- reactionExtensionList[v.TypeKey] = unRelationTb.KeyValueModel{
- TypeKey: v.TypeKey,
- Value: v.Value,
- LatestUpdateTime: v.LatestUpdateTime,
- }
- }
-
- if err := mmc.extendMsgDatabase.InsertExtendMsg(ctx, notification.ConversationID, notification.SessionType, &extendMsg); err != nil {
- // log.ZError(ctx, "MsgFirstModify InsertExtendMsg failed", notification.ConversationID, notification.SessionType, extendMsg, err.Error())
- continue
- }
- } else {
- if err := mmc.extendMsgDatabase.InsertOrUpdateReactionExtendMsgSet(ctx, notification.ConversationID, notification.SessionType, notification.ClientMsgID, notification.MsgFirstModifyTime, mmc.extendSetMsgModel.Pb2Model(notification.SuccessReactionExtensions)); err != nil {
- // log.NewError(operationID, "InsertOrUpdateReactionExtendMsgSet failed")
- }
- }
- } else if msg.ContentType == constant.ReactionMessageDeleter {
- notification := &sdkws.ReactionMessageDeleteNotification{}
- if err := json.Unmarshal(msg.Content, notification); err != nil {
- continue
- }
- if err := mmc.extendMsgDatabase.DeleteReactionExtendMsgSet(ctx, notification.ConversationID, notification.SessionType, notification.ClientMsgID, notification.MsgFirstModifyTime, mmc.extendSetMsgModel.Pb2Model(notification.SuccessReactionExtensions)); err != nil {
- // log.NewError(operationID, "InsertOrUpdateReactionExtendMsgSet failed")
- }
- }
- }
-}
diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go
index a762e57f5..1f45d0224 100644
--- a/internal/rpc/conversation/conversaion.go
+++ b/internal/rpc/conversation/conversaion.go
@@ -108,12 +108,12 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbConver
if groupInfo.Status == constant.GroupStatusDismissed {
return nil, err
}
- for _, userID := range req.UserIDs {
- if _, err := c.groupRpcClient.GetGroupMemberCache(ctx, req.Conversation.GroupID, userID); err != nil {
- log.ZError(ctx, "user not in group", err, "userID", userID, "groupID", req.Conversation.GroupID)
- return nil, err
- }
- }
+ // for _, userID := range req.UserIDs {
+ // if _, err := c.groupRpcClient.GetGroupMemberCache(ctx, req.Conversation.GroupID, userID); err != nil {
+ // log.ZError(ctx, "user not in group", err, "userID", userID, "groupID", req.Conversation.GroupID)
+ // return nil, err
+ // }
+ // }
}
var conversation tableRelation.ConversationModel
conversation.ConversationID = req.Conversation.ConversationID
@@ -136,6 +136,12 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbConver
if req.Conversation.GroupAtType != nil {
m["group_at_type"] = req.Conversation.GroupAtType.Value
}
+ if req.Conversation.MsgDestructTime != nil {
+ m["msg_destruct_time"] = req.Conversation.MsgDestructTime.Value
+ }
+ if req.Conversation.IsMsgDestruct != nil {
+ m["is_msg_destruct"] = req.Conversation.IsMsgDestruct.Value
+ }
if req.Conversation.IsPrivateChat != nil && req.Conversation.ConversationType != constant.SuperGroupChatType {
var conversations []*tableRelation.ConversationModel
for _, ownerUserID := range req.UserIDs {
diff --git a/internal/rpc/msg/extend_msg.go b/internal/rpc/msg/extend_msg.go
deleted file mode 100644
index 1da53c322..000000000
--- a/internal/rpc/msg/extend_msg.go
+++ /dev/null
@@ -1,361 +0,0 @@
-package msg
-
-import (
- "context"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
-)
-
-func (m *msgServer) SetMessageReactionExtensions(ctx context.Context, req *msg.SetMessageReactionExtensionsReq) (resp *msg.SetMessageReactionExtensionsResp, err error) {
- //resp = &msg.SetMessageReactionExtensionsResp{}
- ////resp.ClientMsgID = req.ClientMsgID
- ////resp.MsgFirstModifyTime = req.MsgFirstModifyTime
- //
- //if err := CallbackSetMessageReactionExtensions(ctx, req); err != nil {
- // return nil, err
- //}
- ////if ExternalExtension
- //if req.IsExternalExtensions {
- // resp.MsgFirstModifyTime = req.MsgFirstModifyTime
- // notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.conversationID, req.SessionType, req, &resp, !req.IsReact, false)
- // return resp, nil
- //}
- //isExists, err := m.MsgDatabase.JudgeMessageReactionExist(ctx, req.ClientMsgID, req.SessionType)
- //if err != nil {
- // return nil, err
- //}
- //
- //if !isExists {
- // if !req.IsReact {
- // resp.MsgFirstModifyTime = utils.GetCurrentTimestampByMill()
- // for k, v := range req.ReactionExtensions {
- // err := m.MessageLocker.LockMessageTypeKey(ctx, req.ClientMsgID, k)
- // if err != nil {
- // return nil, err
- // }
- // v.LatestUpdateTime = utils.GetCurrentTimestampByMill()
- // if err := m.MsgDatabase.SetMessageTypeKeyValue(ctx, req.ClientMsgID, req.SessionType, k, utils.StructToJsonString(v)); err != nil {
- // return nil, err
- // }
- // }
- // resp.IsReact = true
- // _, err := m.MsgDatabase.SetMessageReactionExpire(ctx, req.ClientMsgID, req.SessionType, time.Duration(24*3)*time.Hour)
- // if err != nil {
- // return nil, err
- // }
- // } else {
- // err := m.MessageLocker.LockGlobalMessage(ctx, req.ClientMsgID)
- // if err != nil {
- // return nil, err
- // }
- // mongoValue, err := m.MsgDatabase.GetExtendMsg(ctx, req.conversationID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime)
- // if err != nil {
- // return nil, err
- // }
- // setValue := make(map[string]*sdkws.KeyValue)
- // for k, v := range req.ReactionExtensions {
- //
- // temp := new(sdkws.KeyValue)
- // if vv, ok := mongoValue.ReactionExtensions[k]; ok {
- // utils.CopyStructFields(temp, &vv)
- // if v.LatestUpdateTime != vv.LatestUpdateTime {
- // setKeyResultInfo(&resp, 300, "message have update", req.ClientMsgID, k, temp)
- // continue
- // }
- // }
- // temp.TypeKey = k
- // temp.Value = v.Value
- // temp.LatestUpdateTime = utils.GetCurrentTimestampByMill()
- // setValue[k] = temp
- // }
- // err = db.DB.InsertOrUpdateReactionExtendMsgSet(req.conversationID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime, setValue)
- // if err != nil {
- // for _, value := range setValue {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // temp.ErrMsg = err.Error()
- // temp.ErrCode = 100
- // resp.Result = append(resp.Result, temp)
- // }
- // } else {
- // for _, value := range setValue {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // resp.Result = append(resp.Result, temp)
- // }
- // }
- // lockErr := m.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID)
- // if lockErr != nil {
- // log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error())
- // }
- // }
- //
- //} else {
- // log.Debug(req.OperationID, "redis handle secondly", req.String())
- //
- // for k, v := range req.Pb2Model {
- // err := m.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, k)
- // if err != nil {
- // setKeyResultInfo(&resp, 100, err.Error(), req.ClientMsgID, k, v)
- // continue
- // }
- // redisValue, err := db.DB.GetMessageTypeKeyValue(req.ClientMsgID, req.SessionType, k)
- // if err != nil && err != go_redis.Nil {
- // setKeyResultInfo(&resp, 200, err.Error(), req.ClientMsgID, k, v)
- // continue
- // }
- // temp := new(sdkws.KeyValue)
- // utils.JsonStringToStruct(redisValue, temp)
- // if v.LatestUpdateTime != temp.LatestUpdateTime {
- // setKeyResultInfo(&resp, 300, "message have update", req.ClientMsgID, k, temp)
- // continue
- // } else {
- // v.LatestUpdateTime = utils.GetCurrentTimestampByMill()
- // newerr := db.DB.SetMessageTypeKeyValue(req.ClientMsgID, req.SessionType, k, utils.StructToJsonString(v))
- // if newerr != nil {
- // setKeyResultInfo(&resp, 201, newerr.Error(), req.ClientMsgID, k, temp)
- // continue
- // }
- // setKeyResultInfo(&resp, 0, "", req.ClientMsgID, k, v)
- // }
- //
- // }
- //}
- //if !isExists {
- // if !req.IsReact {
- // notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.conversationID, req.SessionType, req, &resp, true, true)
- // } else {
- // notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.conversationID, req.SessionType, req, &resp, false, false)
- // }
- //} else {
- // notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.conversationID, req.SessionType, req, &resp, false, true)
- //}
- //log.Debug(req.OperationID, utils.GetSelfFuncName(), "m return is:", resp.String())
- return resp, nil
-
-}
-func (m *msgServer) setKeyResultInfo(ctx context.Context, r *msg.SetMessageReactionExtensionsResp, errCode int32, errMsg, clientMsgID, typeKey string, keyValue *sdkws.KeyValue) {
- temp := new(msg.KeyValueResp)
- temp.KeyValue = keyValue
- temp.ErrCode = errCode
- temp.ErrMsg = errMsg
- r.Result = append(r.Result, temp)
- _ = m.MessageLocker.UnLockMessageTypeKey(ctx, clientMsgID, typeKey)
-}
-func (m *msgServer) setDeleteKeyResultInfo(ctx context.Context, r *msg.DeleteMessagesReactionExtensionsResp, errCode int32, errMsg, clientMsgID, typeKey string, keyValue *sdkws.KeyValue) {
- temp := new(msg.KeyValueResp)
- temp.KeyValue = keyValue
- temp.ErrCode = errCode
- temp.ErrMsg = errMsg
- r.Result = append(r.Result, temp)
- _ = m.MessageLocker.UnLockMessageTypeKey(ctx, clientMsgID, typeKey)
-}
-
-func (m *msgServer) GetMessagesReactionExtensions(ctx context.Context, req *msg.GetMessagesReactionExtensionsReq) (resp *msg.GetMessagesReactionExtensionsResp, err error) {
- //log.Debug(req.OperationID, utils.GetSelfFuncName(), "m args is:", req.String())
- //var rResp msg.GetMessageListReactionExtensionsResp
- //for _, messageValue := range req.MessageReactionKeyList {
- // var oneMessage msg.SingleMessageExtensionResult
- // oneMessage.ClientMsgID = messageValue.ClientMsgID
- //
- // isExists, err := db.DB.JudgeMessageReactionExist(messageValue.ClientMsgID, req.SessionType)
- // if err != nil {
- // rResp.ErrCode = 100
- // rResp.ErrMsg = err.Error()
- // return &rResp, nil
- // }
- // if isExists {
- // redisValue, err := db.DB.GetOneMessageAllReactionList(messageValue.ClientMsgID, req.SessionType)
- // if err != nil {
- // oneMessage.ErrCode = 100
- // oneMessage.ErrMsg = err.Error()
- // rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage)
- // continue
- // }
- // keyMap := make(map[string]*sdkws.KeyValue)
- //
- // for k, v := range redisValue {
- // temp := new(sdkws.KeyValue)
- // utils.JsonStringToStruct(v, temp)
- // keyMap[k] = temp
- // }
- // oneMessage.Pb2Model = keyMap
- //
- // } else {
- // mongoValue, err := db.DB.GetExtendMsg(req.conversationID, req.SessionType, messageValue.ClientMsgID, messageValue.MsgFirstModifyTime)
- // if err != nil {
- // oneMessage.ErrCode = 100
- // oneMessage.ErrMsg = err.Error()
- // rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage)
- // continue
- // }
- // keyMap := make(map[string]*sdkws.KeyValue)
- //
- // for k, v := range mongoValue.Pb2Model {
- // temp := new(sdkws.KeyValue)
- // temp.TypeKey = v.TypeKey
- // temp.Value = v.Value
- // temp.LatestUpdateTime = v.LatestUpdateTime
- // keyMap[k] = temp
- // }
- // oneMessage.Pb2Model = keyMap
- // }
- // rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage)
- //}
- //log.Debug(req.OperationID, utils.GetSelfFuncName(), "m return is:", rResp.String())
- return resp, nil
-
-}
-
-func (m *msgServer) AddMessageReactionExtensions(ctx context.Context, req *msg.ModifyMessageReactionExtensionsReq) (resp *msg.ModifyMessageReactionExtensionsResp, err error) {
- return
-}
-
-func (m *msgServer) DeleteMessageReactionExtensions(ctx context.Context, req *msg.DeleteMessagesReactionExtensionsReq) (resp *msg.DeleteMessagesReactionExtensionsResp, err error) {
- //log.Debug(req.OperationID, utils.GetSelfFuncName(), "m args is:", req.String())
- //var rResp msg.DeleteMessagesReactionExtensionsResp
- //callbackResp := notification.callbackDeleteMessageReactionExtensions(req)
- //if callbackResp.ActionCode != constant.ActionAllow || callbackResp.ErrCode != 0 {
- // rResp.ErrCode = int32(callbackResp.ErrCode)
- // rResp.ErrMsg = callbackResp.ErrMsg
- // for _, value := range req.Pb2Model {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // temp.ErrMsg = callbackResp.ErrMsg
- // temp.ErrCode = 100
- // rResp.Result = append(rResp.Result, temp)
- // }
- // return &rResp, nil
- //}
- ////if ExternalExtension
- //if req.IsExternalExtensions {
- // rResp.Result = callbackResp.ResultReactionExtensionList
- // notification.ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.conversationID, req.SessionType, req, &rResp, false, false)
- // return &rResp, nil
- //
- //}
- //for _, v := range callbackResp.ResultReactionExtensions {
- // if v.ErrCode != 0 {
- // func(req *[]*sdkws.KeyValue, typeKey string) {
- // for i := 0; i < len(*req); i++ {
- // if (*req)[i].TypeKey == typeKey {
- // *req = append((*req)[:i], (*req)[i+1:]...)
- // }
- // }
- // }(&req.Pb2Model, v.KeyValue.TypeKey)
- // rResp.Result = append(rResp.Result, v)
- // }
- //}
- //isExists, err := db.DB.JudgeMessageReactionExist(req.ClientMsgID, req.SessionType)
- //if err != nil {
- // rResp.ErrCode = 100
- // rResp.ErrMsg = err.Error()
- // for _, value := range req.Pb2Model {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // temp.ErrMsg = err.Error()
- // temp.ErrCode = 100
- // rResp.Result = append(rResp.Result, temp)
- // }
- // return &rResp, nil
- //}
- //
- //if isExists {
- // log.Debug(req.OperationID, "redis handle this delete", req.String())
- // for _, v := range req.Pb2Model {
- // err := m.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, v.TypeKey)
- // if err != nil {
- // setDeleteKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, v.TypeKey, v)
- // continue
- // }
- //
- // redisValue, err := db.DB.GetMessageTypeKeyValue(req.ClientMsgID, req.SessionType, v.TypeKey)
- // if err != nil && err != go_redis.Nil {
- // setDeleteKeyResultInfo(&rResp, 200, err.Error(), req.ClientMsgID, v.TypeKey, v)
- // continue
- // }
- // temp := new(sdkws.KeyValue)
- // utils.JsonStringToStruct(redisValue, temp)
- // if v.LatestUpdateTime != temp.LatestUpdateTime {
- // setDeleteKeyResultInfo(&rResp, 300, "message have update", req.ClientMsgID, v.TypeKey, temp)
- // continue
- // } else {
- // newErr := db.DB.DeleteOneMessageKey(req.ClientMsgID, req.SessionType, v.TypeKey)
- // if newErr != nil {
- // setDeleteKeyResultInfo(&rResp, 201, newErr.Error(), req.ClientMsgID, v.TypeKey, temp)
- // continue
- // }
- // setDeleteKeyResultInfo(&rResp, 0, "", req.ClientMsgID, v.TypeKey, v)
- // }
- // }
- //} else {
- // err := m.dMessageLocker.LockGlobalMessage(req.ClientMsgID)
- // if err != nil {
- // rResp.ErrCode = 100
- // rResp.ErrMsg = err.Error()
- // for _, value := range req.Pb2Model {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // temp.ErrMsg = err.Error()
- // temp.ErrCode = 100
- // rResp.Result = append(rResp.Result, temp)
- // }
- // return &rResp, nil
- // }
- // mongoValue, err := db.DB.GetExtendMsg(req.conversationID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime)
- // if err != nil {
- // rResp.ErrCode = 200
- // rResp.ErrMsg = err.Error()
- // for _, value := range req.Pb2Model {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // temp.ErrMsg = err.Error()
- // temp.ErrCode = 100
- // rResp.Result = append(rResp.Result, temp)
- // }
- // return &rResp, nil
- // }
- // setValue := make(map[string]*sdkws.KeyValue)
- // for _, v := range req.Pb2Model {
- //
- // temp := new(sdkws.KeyValue)
- // if vv, ok := mongoValue.Pb2Model[v.TypeKey]; ok {
- // utils.CopyStructFields(temp, &vv)
- // if v.LatestUpdateTime != vv.LatestUpdateTime {
- // setDeleteKeyResultInfo(&rResp, 300, "message have update", req.ClientMsgID, v.TypeKey, temp)
- // continue
- // }
- // } else {
- // setDeleteKeyResultInfo(&rResp, 400, "key not in", req.ClientMsgID, v.TypeKey, v)
- // continue
- // }
- // temp.TypeKey = v.TypeKey
- // setValue[v.TypeKey] = temp
- // }
- // err = db.DB.DeleteReactionExtendMsgSet(req.conversationID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime, setValue)
- // if err != nil {
- // for _, value := range setValue {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // temp.ErrMsg = err.Error()
- // temp.ErrCode = 100
- // rResp.Result = append(rResp.Result, temp)
- // }
- // } else {
- // for _, value := range setValue {
- // temp := new(msg.KeyValueResp)
- // temp.KeyValue = value
- // rResp.Result = append(rResp.Result, temp)
- // }
- // }
- // lockErr := m.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID)
- // if lockErr != nil {
- // log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error())
- // }
- //
- //}
- //notification.ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.conversationID, req.SessionType, req, &rResp, false, isExists)
- //log.Debug(req.OperationID, utils.GetSelfFuncName(), "m return is:", rResp.String())
- return resp, nil
-}
diff --git a/internal/rpc/msg/extend_msg_callback.go b/internal/rpc/msg/extend_msg_callback.go
deleted file mode 100644
index 216d65dfa..000000000
--- a/internal/rpc/msg/extend_msg_callback.go
+++ /dev/null
@@ -1,88 +0,0 @@
-package msg
-
-import (
- "context"
-
- cbapi "github.com/OpenIMSDK/Open-IM-Server/pkg/callbackstruct"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg"
-)
-
-func callbackSetMessageReactionExtensions(ctx context.Context, setReq *msg.SetMessageReactionExtensionsReq) error {
- if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
- return nil
- }
- req := &cbapi.CallbackBeforeSetMessageReactionExtReq{
- OperationID: mcontext.GetOperationID(ctx),
- CallbackCommand: constant.CallbackBeforeSetMessageReactionExtensionCommand,
- ConversationID: setReq.ConversationID,
- OpUserID: mcontext.GetOpUserID(ctx),
- SessionType: setReq.SessionType,
- ReactionExtensionList: setReq.ReactionExtensions,
- ClientMsgID: setReq.ClientMsgID,
- IsReact: setReq.IsReact,
- IsExternalExtensions: setReq.IsExternalExtensions,
- MsgFirstModifyTime: setReq.MsgFirstModifyTime,
- }
- resp := &cbapi.CallbackBeforeSetMessageReactionExtResp{}
- if err := http.CallBackPostReturn(ctx, cbURL(), req, resp, config.Config.Callback.CallbackAfterSendGroupMsg); err != nil {
- return err
- }
- setReq.MsgFirstModifyTime = resp.MsgFirstModifyTime
- return nil
-}
-
-func callbackDeleteMessageReactionExtensions(ctx context.Context, setReq *msg.DeleteMessagesReactionExtensionsReq) error {
- if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
- return nil
- }
- req := &cbapi.CallbackDeleteMessageReactionExtReq{
- OperationID: setReq.OperationID,
- CallbackCommand: constant.CallbackBeforeDeleteMessageReactionExtensionsCommand,
- ConversationID: setReq.ConversationID,
- OpUserID: setReq.OpUserID,
- SessionType: setReq.SessionType,
- ReactionExtensionList: setReq.ReactionExtensions,
- ClientMsgID: setReq.ClientMsgID,
- IsExternalExtensions: setReq.IsExternalExtensions,
- MsgFirstModifyTime: setReq.MsgFirstModifyTime,
- }
- resp := &cbapi.CallbackDeleteMessageReactionExtResp{}
- return http.CallBackPostReturn(ctx, cbURL(), req, resp, config.Config.Callback.CallbackAfterSendGroupMsg)
-}
-
-func callbackGetMessageListReactionExtensions(ctx context.Context, getReq *msg.GetMessagesReactionExtensionsReq) error {
- if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
- return nil
- }
- req := &cbapi.CallbackGetMessageListReactionExtReq{
- OperationID: mcontext.GetOperationID(ctx),
- CallbackCommand: constant.CallbackGetMessageListReactionExtensionsCommand,
- ConversationID: getReq.ConversationID,
- OpUserID: mcontext.GetOperationID(ctx),
- SessionType: getReq.SessionType,
- TypeKeyList: getReq.TypeKeys,
- }
- resp := &cbapi.CallbackGetMessageListReactionExtResp{}
- return http.CallBackPostReturn(ctx, cbURL(), req, resp, config.Config.Callback.CallbackAfterSendGroupMsg)
-}
-
-func callbackAddMessageReactionExtensions(ctx context.Context, setReq *msg.ModifyMessageReactionExtensionsReq) error {
- req := &cbapi.CallbackAddMessageReactionExtReq{
- OperationID: mcontext.GetOperationID(ctx),
- CallbackCommand: constant.CallbackAddMessageListReactionExtensionsCommand,
- ConversationID: setReq.ConversationID,
- OpUserID: mcontext.GetOperationID(ctx),
- SessionType: setReq.SessionType,
- ReactionExtensionList: setReq.ReactionExtensions,
- ClientMsgID: setReq.ClientMsgID,
- IsReact: setReq.IsReact,
- IsExternalExtensions: setReq.IsExternalExtensions,
- MsgFirstModifyTime: setReq.MsgFirstModifyTime,
- }
- resp := &cbapi.CallbackAddMessageReactionExtResp{}
- return http.CallBackPostReturn(ctx, cbURL(), req, resp, config.Config.Callback.CallbackAfterSendGroupMsg)
-}
diff --git a/internal/rpc/msg/revoke.go b/internal/rpc/msg/revoke.go
index bbdfb9bd0..0334869af 100644
--- a/internal/rpc/msg/revoke.go
+++ b/internal/rpc/msg/revoke.go
@@ -105,3 +105,24 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg.
}
return &msg.RevokeMsgResp{}, nil
}
+
+func (m *msgServer) ManageMsg(ctx context.Context, req *msg.ManageMsgReq) (*msg.ManageMsgResp, error) {
+ resp := &msg.ManageMsgResp{}
+ msgData := &sdkws.MsgData{
+ SendID: req.SendID,
+ RecvID: req.RecvID,
+ SessionType: req.SessionType,
+ GroupID: req.GroupID,
+ }
+ conversationID := utils.GetChatConversationIDByMsg(msgData)
+ revokeReq := &msg.RevokeMsgReq{
+ ConversationID: conversationID,
+ Seq: req.Seq,
+ UserID: req.SendID,
+ }
+ _, err := m.RevokeMsg(ctx, revokeReq)
+ if err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
diff --git a/internal/rpc/msg/send.go b/internal/rpc/msg/send.go
index b953c27f9..4af1c5291 100644
--- a/internal/rpc/msg/send.go
+++ b/internal/rpc/msg/send.go
@@ -2,6 +2,7 @@ package msg
import (
"context"
+
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
@@ -16,20 +17,24 @@ import (
func (m *msgServer) SendMsg(ctx context.Context, req *pbMsg.SendMsgReq) (resp *pbMsg.SendMsgResp, error error) {
resp = &pbMsg.SendMsgResp{}
- flag := isMessageHasReadEnabled(req.MsgData)
- if !flag {
- return nil, errs.ErrMessageHasReadDisable.Wrap()
- }
- m.encapsulateMsgData(req.MsgData)
- switch req.MsgData.SessionType {
- case constant.SingleChatType:
- return m.sendMsgSingleChat(ctx, req)
- case constant.NotificationChatType:
- return m.sendMsgNotification(ctx, req)
- case constant.SuperGroupChatType:
- return m.sendMsgSuperGroupChat(ctx, req)
- default:
- return nil, errs.ErrArgs.Wrap("unknown sessionType")
+ if req.MsgData != nil {
+ flag := isMessageHasReadEnabled(req.MsgData)
+ if !flag {
+ return nil, errs.ErrMessageHasReadDisable.Wrap()
+ }
+ m.encapsulateMsgData(req.MsgData)
+ switch req.MsgData.SessionType {
+ case constant.SingleChatType:
+ return m.sendMsgSingleChat(ctx, req)
+ case constant.NotificationChatType:
+ return m.sendMsgNotification(ctx, req)
+ case constant.SuperGroupChatType:
+ return m.sendMsgSuperGroupChat(ctx, req)
+ default:
+ return nil, errs.ErrArgs.Wrap("unknown sessionType")
+ }
+ } else {
+ return nil, errs.ErrArgs.Wrap("msgData is nil")
}
}
diff --git a/internal/rpc/msg/server.go b/internal/rpc/msg/server.go
index 57b7fda4b..64eea2eb0 100644
--- a/internal/rpc/msg/server.go
+++ b/internal/rpc/msg/server.go
@@ -8,7 +8,6 @@ import (
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/localcache"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/tx"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/unrelation"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome"
"github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry"
@@ -22,7 +21,6 @@ type MessageInterceptorChain []MessageInterceptorFunc
type msgServer struct {
RegisterCenter discoveryregistry.SvcDiscoveryRegistry
MsgDatabase controller.CommonMsgDatabase
- ExtendMsgDatabase controller.ExtendMsgDatabase
Group *rpcclient.GroupRpcClient
User *rpcclient.UserRpcClient
Conversation *rpcclient.ConversationRpcClient
@@ -65,9 +63,6 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e
cacheModel := cache.NewMsgCacheModel(rdb)
msgDocModel := unrelation.NewMsgMongoDriver(mongo.GetDatabase())
msgMysModel := relation.NewChatLogGorm(mysql)
- extendMsgModel := unrelation.NewExtendMsgSetMongoDriver(mongo.GetDatabase())
- extendMsgCacheModel := cache.NewExtendMsgSetCacheRedis(rdb, extendMsgModel, cache.GetDefaultOpt())
- extendMsgDatabase := controller.NewExtendMsgDatabase(extendMsgModel, extendMsgCacheModel, tx.NewMongo(mongo.GetClient()))
msgDatabase := controller.NewCommonMsgDatabase(msgDocModel, cacheModel, msgMysModel)
conversationClient := rpcclient.NewConversationRpcClient(client)
userRpcClient := rpcclient.NewUserRpcClient(client)
@@ -78,7 +73,6 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e
User: &userRpcClient,
Group: &groupRpcClient,
MsgDatabase: msgDatabase,
- ExtendMsgDatabase: extendMsgDatabase,
RegisterCenter: client,
GroupLocalCache: localcache.NewGroupLocalCache(&groupRpcClient),
ConversationLocalCache: localcache.NewConversationLocalCache(&conversationClient),
diff --git a/internal/rpc/msg/sync_msg.go b/internal/rpc/msg/sync_msg.go
index 496fab8e1..6745224c5 100644
--- a/internal/rpc/msg/sync_msg.go
+++ b/internal/rpc/msg/sync_msg.go
@@ -59,12 +59,49 @@ func (m *msgServer) PullMessageBySeqs(ctx context.Context, req *sdkws.PullMessag
}
func (m *msgServer) SearchMessage(ctx context.Context, req *msg.SearchMessageReq) (resp *msg.SearchMessageResp, err error) {
- var msgs []*sdkws.MsgData
+ var chatLogs []*sdkws.MsgData
resp = &msg.SearchMessageResp{}
- if msgs, err = m.MsgDatabase.SearchMessage(ctx, req); err != nil {
+ if chatLogs, err = m.MsgDatabase.SearchMessage(ctx, req); err != nil {
return nil, err
}
- resp.Msgs = msgs
+ var num int
+ for _, chatLog := range chatLogs {
+ pbChatLog := &msg.ChatLog{}
+ utils.CopyStructFields(pbChatLog, chatLog)
+ pbChatLog.SendTime = chatLog.SendTime
+ pbChatLog.CreateTime = chatLog.CreateTime
+ if chatLog.SenderNickname == "" {
+ sendUser, err := m.User.GetUserInfo(ctx, chatLog.SendID)
+ if err != nil {
+ return nil, err
+ }
+ pbChatLog.SenderNickname = sendUser.Nickname
+ }
+ switch chatLog.SessionType {
+ case constant.SingleChatType:
+ recvUser, err := m.User.GetUserInfo(ctx, chatLog.RecvID)
+ if err != nil {
+ return nil, err
+ }
+ pbChatLog.SenderNickname = recvUser.Nickname
+
+ case constant.GroupChatType, constant.SuperGroupChatType:
+ group, err := m.Group.GetGroupInfo(ctx, chatLog.GroupID)
+ if err != nil {
+ return nil, err
+ }
+ pbChatLog.SenderFaceURL = group.FaceURL
+ pbChatLog.GroupMemberCount = group.MemberCount
+ pbChatLog.RecvID = group.GroupID
+ pbChatLog.GroupName = group.GroupName
+ pbChatLog.GroupOwner = group.OwnerUserID
+ pbChatLog.GroupType = group.GroupType
+ }
+ resp.ChatLogs = append(resp.ChatLogs, pbChatLog)
+ num++
+ }
+
+ resp.ChatLogsNum = int32(num)
return resp, nil
}
diff --git a/internal/rpc/third/s3.go b/internal/rpc/third/s3.go
index 21471e00d..bf4e81b40 100644
--- a/internal/rpc/third/s3.go
+++ b/internal/rpc/third/s3.go
@@ -2,36 +2,144 @@ package third
import (
"context"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3/cont"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
"github.com/OpenIMSDK/Open-IM-Server/pkg/proto/third"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
"time"
)
-func (t *thirdServer) ApplyPut(ctx context.Context, req *third.ApplyPutReq) (*third.ApplyPutResp, error) {
- return t.s3dataBase.ApplyPut(ctx, req)
+func (t *thirdServer) PartLimit(ctx context.Context, req *third.PartLimitReq) (*third.PartLimitResp, error) {
+ limit := t.s3dataBase.PartLimit()
+ return &third.PartLimitResp{
+ MinPartSize: limit.MinPartSize,
+ MaxPartSize: limit.MaxPartSize,
+ MaxNumSize: int32(limit.MaxNumSize),
+ }, nil
}
-func (t *thirdServer) GetPut(ctx context.Context, req *third.GetPutReq) (*third.GetPutResp, error) {
- return t.s3dataBase.GetPut(ctx, req)
+func (t *thirdServer) PartSize(ctx context.Context, req *third.PartSizeReq) (*third.PartSizeResp, error) {
+ size, err := t.s3dataBase.PartSize(ctx, req.Size)
+ if err != nil {
+ return nil, err
+ }
+ return &third.PartSizeResp{Size: size}, nil
}
-func (t *thirdServer) ConfirmPut(ctx context.Context, req *third.ConfirmPutReq) (*third.ConfirmPutResp, error) {
- return t.s3dataBase.ConfirmPut(ctx, req)
+func (t *thirdServer) InitiateMultipartUpload(ctx context.Context, req *third.InitiateMultipartUploadReq) (*third.InitiateMultipartUploadResp, error) {
+ if err := checkUploadName(ctx, req.Name); err != nil {
+ return nil, err
+ }
+ result, err := t.s3dataBase.InitiateMultipartUpload(ctx, req.Hash, req.Size, time.Hour*24, int(req.MaxParts))
+ if err != nil {
+ if haErr, ok := errs.Unwrap(err).(*cont.HashAlreadyExistsError); ok {
+ obj := &relation.ObjectModel{
+ Name: req.Name,
+ UserID: mcontext.GetOpUserID(ctx),
+ Hash: req.Hash,
+ Key: haErr.Object.Key,
+ Size: haErr.Object.Size,
+ ContentType: req.ContentType,
+ Cause: req.Cause,
+ CreateTime: time.Now(),
+ }
+ if err := t.s3dataBase.SetObject(ctx, obj); err != nil {
+ return nil, err
+ }
+ return &third.InitiateMultipartUploadResp{
+ Url: t.apiAddress(obj.Key),
+ }, nil
+ }
+ return nil, err
+ }
+ var sign *third.AuthSignParts
+ if result.Sign != nil && len(result.Sign.Parts) > 0 {
+ sign = &third.AuthSignParts{
+ Url: result.Sign.URL,
+ Query: toPbMapArray(result.Sign.Query),
+ Header: toPbMapArray(result.Sign.Header),
+ Parts: make([]*third.SignPart, len(result.Sign.Parts)),
+ }
+ for i, part := range result.Sign.Parts {
+ sign.Parts[i] = &third.SignPart{
+ PartNumber: int32(part.PartNumber),
+ Url: part.URL,
+ Query: toPbMapArray(part.Query),
+ Header: toPbMapArray(part.Header),
+ }
+ }
+ }
+ return &third.InitiateMultipartUploadResp{
+ Upload: &third.UploadInfo{
+ UploadID: result.UploadID,
+ PartSize: result.PartSize,
+ Sign: sign,
+ },
+ }, nil
}
-func (t *thirdServer) GetUrl(ctx context.Context, req *third.GetUrlReq) (*third.GetUrlResp, error) {
- if req.Expires <= 0 {
- if err := tokenverify.CheckAdmin(ctx); err != nil {
- return nil, err
+func (t *thirdServer) AuthSign(ctx context.Context, req *third.AuthSignReq) (*third.AuthSignResp, error) {
+ partNumbers := utils.Slice(req.PartNumbers, func(partNumber int32) int { return int(partNumber) })
+ result, err := t.s3dataBase.AuthSign(ctx, req.UploadID, partNumbers)
+ if err != nil {
+ return nil, err
+ }
+ resp := &third.AuthSignResp{
+ Url: result.URL,
+ Query: toPbMapArray(result.Query),
+ Header: toPbMapArray(result.Header),
+ Parts: make([]*third.SignPart, len(result.Parts)),
+ }
+ for i, part := range result.Parts {
+ resp.Parts[i] = &third.SignPart{
+ PartNumber: int32(part.PartNumber),
+ Url: part.URL,
+ Query: toPbMapArray(part.Query),
+ Header: toPbMapArray(part.Header),
}
}
- return t.s3dataBase.GetUrl(ctx, req)
+ return resp, nil
+}
+
+func (t *thirdServer) CompleteMultipartUpload(ctx context.Context, req *third.CompleteMultipartUploadReq) (*third.CompleteMultipartUploadResp, error) {
+ if err := checkUploadName(ctx, req.Name); err != nil {
+ return nil, err
+ }
+ result, err := t.s3dataBase.CompleteMultipartUpload(ctx, req.UploadID, req.Parts)
+ if err != nil {
+ return nil, err
+ }
+ obj := &relation.ObjectModel{
+ Name: req.Name,
+ UserID: mcontext.GetOpUserID(ctx),
+ Hash: result.Hash,
+ Key: result.Key,
+ Size: result.Size,
+ ContentType: req.ContentType,
+ Cause: req.Cause,
+ CreateTime: time.Now(),
+ }
+ if err := t.s3dataBase.SetObject(ctx, obj); err != nil {
+ return nil, err
+ }
+ return &third.CompleteMultipartUploadResp{
+ Url: t.apiAddress(obj.Key),
+ }, nil
}
-func (t *thirdServer) GetHashInfo(ctx context.Context, req *third.GetHashInfoReq) (*third.GetHashInfoResp, error) {
- return t.s3dataBase.GetHashInfo(ctx, req)
+func (t *thirdServer) AccessURL(ctx context.Context, req *third.AccessURLReq) (*third.AccessURLResp, error) {
+ expireTime, rawURL, err := t.s3dataBase.AccessURL(ctx, req.Name, t.defaultExpire)
+ if err != nil {
+ return nil, err
+ }
+ return &third.AccessURLResp{
+ Url: rawURL,
+ ExpireTime: expireTime.UnixMilli(),
+ }, nil
}
-func (t *thirdServer) CleanObject(ctx context.Context, now time.Time) {
- t.s3dataBase.CleanExpirationObject(ctx, now)
+func (t *thirdServer) apiAddress(name string) string {
+ return t.apiURL + name
}
diff --git a/internal/rpc/third/third.go b/internal/rpc/third/third.go
index fbaa893e5..7c487b1d2 100644
--- a/internal/rpc/third/third.go
+++ b/internal/rpc/third/third.go
@@ -2,12 +2,17 @@ package third
import (
"context"
+ "fmt"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3/cos"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3/minio"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3/oss"
"net/url"
+ "time"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/obj"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/relation"
relationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
"github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry"
@@ -17,22 +22,17 @@ import (
)
func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error {
- u, err := url.Parse(config.Config.Object.ApiURL)
- if err != nil {
- return err
+ apiURL := config.Config.Object.ApiURL
+ if apiURL == "" {
+ return fmt.Errorf("api url is empty")
}
- rdb, err := cache.NewRedis()
- if err != nil {
+ if _, err := url.Parse(config.Config.Object.ApiURL); err != nil {
return err
}
- // 根据配置文件策略选择 oss 方式
- enable := config.Config.Object.Enable
- var o obj.Interface
- if enable == "minio" {
- o, err = obj.NewMinioInterface()
- } else if enable == "tencent" {
- o, err = obj.NewCosClient()
+ if apiURL[len(apiURL)-1] != '/' {
+ apiURL += "/"
}
+ rdb, err := cache.NewRedis()
if err != nil {
return err
}
@@ -40,21 +40,41 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e
if err != nil {
return err
}
- if err := db.AutoMigrate(&relationTb.ObjectHashModel{}, &relationTb.ObjectInfoModel{}, &relationTb.ObjectPutModel{}); err != nil {
+ if err := db.AutoMigrate(&relationTb.ObjectModel{}); err != nil {
+ return err
+ }
+ // 根据配置文件策略选择 oss 方式
+ enable := config.Config.Object.Enable
+ var o s3.Interface
+ switch config.Config.Object.Enable {
+ case "minio":
+ o, err = minio.NewMinio()
+ case "cos":
+ o, err = cos.NewCos()
+ case "oss":
+ o, err = oss.NewOSS()
+ default:
+ err = fmt.Errorf("invalid object enable: %s", enable)
+ }
+ if err != nil {
return err
}
third.RegisterThirdServer(server, &thirdServer{
+ apiURL: apiURL,
thirdDatabase: controller.NewThirdDatabase(cache.NewMsgCacheModel(rdb)),
userRpcClient: rpcclient.NewUserRpcClient(client),
- s3dataBase: controller.NewS3Database(o, relation.NewObjectHash(db), relation.NewObjectInfo(db), relation.NewObjectPut(db), u),
+ s3dataBase: controller.NewS3Database(o, relation.NewObjectInfo(db)),
+ defaultExpire: time.Hour * 24 * 7,
})
return nil
}
type thirdServer struct {
+ apiURL string
thirdDatabase controller.ThirdDatabase
s3dataBase controller.S3Database
userRpcClient rpcclient.UserRpcClient
+ defaultExpire time.Duration
}
func (t *thirdServer) FcmUpdateToken(ctx context.Context, req *third.FcmUpdateTokenReq) (resp *third.FcmUpdateTokenResp, err error) {
diff --git a/internal/rpc/third/tool.go b/internal/rpc/third/tool.go
new file mode 100644
index 000000000..84017ae1f
--- /dev/null
+++ b/internal/rpc/third/tool.go
@@ -0,0 +1,63 @@
+package third
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/third"
+ "strings"
+ "unicode/utf8"
+)
+
+func toPbMapArray(m map[string][]string) []*third.KeyValues {
+ res := make([]*third.KeyValues, 0, len(m))
+ for key := range m {
+ res = append(res, &third.KeyValues{
+ Key: key,
+ Values: m[key],
+ })
+ }
+ return res
+}
+
+func checkUploadName(ctx context.Context, name string) error {
+ if name == "" {
+ return errs.ErrArgs.Wrap("name is empty")
+ }
+ if name[0] == '/' {
+ return errs.ErrArgs.Wrap("name cannot start with `/`")
+ }
+ if err := checkValidObjectName(name); err != nil {
+ return errs.ErrArgs.Wrap(err.Error())
+ }
+ opUserID := mcontext.GetOpUserID(ctx)
+ if opUserID == "" {
+ return errs.ErrNoPermission.Wrap("opUserID is empty")
+ }
+ if !tokenverify.IsManagerUserID(opUserID) {
+ if !strings.HasPrefix(name, opUserID+"/") {
+ return errs.ErrNoPermission.Wrap(fmt.Sprintf("name must start with `%s/`", opUserID))
+ }
+ }
+ return nil
+}
+
+func checkValidObjectNamePrefix(objectName string) error {
+ if len(objectName) > 1024 {
+ return errors.New("object name cannot be longer than 1024 characters")
+ }
+ if !utf8.ValidString(objectName) {
+ return errors.New("object name with non UTF-8 strings are not supported")
+ }
+ return nil
+}
+
+func checkValidObjectName(objectName string) error {
+ if strings.TrimSpace(objectName) == "" {
+ return errors.New("object name cannot be empty")
+ }
+ return checkValidObjectNamePrefix(objectName)
+}
diff --git a/internal/tools/conversation.go b/internal/tools/conversation.go
new file mode 100644
index 000000000..3eb47d1ae
--- /dev/null
+++ b/internal/tools/conversation.go
@@ -0,0 +1,35 @@
+package tools
+
+import (
+ "time"
+
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
+)
+
+func (c *MsgTool) ConversationsDestructMsgs() {
+ ctx := mcontext.NewCtx(utils.GetSelfFuncName())
+ conversations, err := c.conversationDatabase.GetConversationIDsNeedDestruct(ctx)
+ if err != nil {
+ log.ZError(ctx, "get conversation id need destruct failed", err)
+ return
+ }
+ for _, conversation := range conversations {
+ log.ZDebug(ctx, "UserMsgsDestruct", "conversationID", conversation.ConversationID, "ownerUserID", conversation.OwnerUserID, "msgDestructTime", conversation.MsgDestructTime, "lastMsgDestructTime", conversation.LatestMsgDestructTime)
+ seqs, err := c.msgDatabase.UserMsgsDestruct(ctx, conversation.OwnerUserID, conversation.ConversationID, conversation.MsgDestructTime, conversation.LatestMsgDestructTime)
+ if err != nil {
+ log.ZError(ctx, "user msg destruct failed", err, "conversationID", conversation.ConversationID, "ownerUserID", conversation.OwnerUserID)
+ continue
+ }
+ if err := c.conversationDatabase.UpdateUsersConversationFiled(ctx, []string{conversation.OwnerUserID}, conversation.ConversationID, map[string]interface{}{"latest_msg_destruct_time": time.Now()}); err != nil {
+ log.ZError(ctx, "updateUsersConversationFiled failed", err, "conversationID", conversation.ConversationID, "ownerUserID", conversation.OwnerUserID)
+ continue
+ }
+ if len(seqs) > 0 {
+ if err := c.msgNotificationSender.UserDeleteMsgsNotification(ctx, conversation.OwnerUserID, conversation.ConversationID, seqs); err != nil {
+ log.ZError(ctx, "userDeleteMsgsNotification failed", err, "conversationID", conversation.ConversationID, "ownerUserID", conversation.OwnerUserID)
+ }
+ }
+ }
+}
diff --git a/internal/tools/cron_task.go b/internal/tools/cron_task.go
index debf61a6d..81588746d 100644
--- a/internal/tools/cron_task.go
+++ b/internal/tools/cron_task.go
@@ -22,8 +22,13 @@ func StartCronTask() error {
wg.Add(1)
_, err = c.AddFunc(config.Config.ChatRecordsClearTime, msgTool.AllConversationClearMsgAndFixSeq)
if err != nil {
- fmt.Println("start cron failed", err.Error(), config.Config.ChatRecordsClearTime)
- return err
+ fmt.Println("start allConversationClearMsgAndFixSeq cron failed", err.Error(), config.Config.ChatRecordsClearTime)
+ panic(err)
+ }
+ _, err = c.AddFunc(config.Config.MsgDestructTime, msgTool.ConversationsDestructMsgs)
+ if err != nil {
+ fmt.Println("start conversationsDestructMsgs cron failed", err.Error(), config.Config.ChatRecordsClearTime)
+ panic(err)
}
c.Start()
wg.Wait()
diff --git a/internal/tools/msg.go b/internal/tools/msg.go
index 8b4751eb9..d61db7a91 100644
--- a/internal/tools/msg.go
+++ b/internal/tools/msg.go
@@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"math"
+ "time"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache"
@@ -14,24 +15,33 @@ import (
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/unrelation"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mw"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry/zookeeper"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification"
"github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/credentials/insecure"
)
type MsgTool struct {
- msgDatabase controller.CommonMsgDatabase
- conversationDatabase controller.ConversationDatabase
- userDatabase controller.UserDatabase
- groupDatabase controller.GroupDatabase
+ msgDatabase controller.CommonMsgDatabase
+ conversationDatabase controller.ConversationDatabase
+ userDatabase controller.UserDatabase
+ groupDatabase controller.GroupDatabase
+ msgNotificationSender *notification.MsgNotificationSender
}
var errSeq = errors.New("cache max seq and mongo max seq is diff > 10")
-func NewMsgTool(msgDatabase controller.CommonMsgDatabase, userDatabase controller.UserDatabase, groupDatabase controller.GroupDatabase, conversationDatabase controller.ConversationDatabase) *MsgTool {
+func NewMsgTool(msgDatabase controller.CommonMsgDatabase, userDatabase controller.UserDatabase,
+ groupDatabase controller.GroupDatabase, conversationDatabase controller.ConversationDatabase, msgNotificationSender *notification.MsgNotificationSender) *MsgTool {
return &MsgTool{
- msgDatabase: msgDatabase,
- userDatabase: userDatabase,
- groupDatabase: groupDatabase,
- conversationDatabase: conversationDatabase,
+ msgDatabase: msgDatabase,
+ userDatabase: userDatabase,
+ groupDatabase: groupDatabase,
+ conversationDatabase: conversationDatabase,
+ msgNotificationSender: msgNotificationSender,
}
}
@@ -48,12 +58,21 @@ func InitMsgTool() (*MsgTool, error) {
if err != nil {
return nil, err
}
+ discov, err := zookeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema,
+ zookeeper.WithFreq(time.Hour), zookeeper.WithRoundRobin(), zookeeper.WithUserNameAndPassword(config.Config.Zookeeper.Username,
+ config.Config.Zookeeper.Password), zookeeper.WithTimeout(10), zookeeper.WithLogger(log.NewZkLogger()))
+ if err != nil {
+ return nil, err
+ }
+ discov.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials()))
userDB := relation.NewUserGorm(db)
msgDatabase := controller.InitCommonMsgDatabase(rdb, mongo.GetDatabase(), db)
userDatabase := controller.NewUserDatabase(userDB, cache.NewUserCacheRedis(rdb, relation.NewUserGorm(db), cache.GetDefaultOpt()), tx.NewGorm(db))
groupDatabase := controller.InitGroupDatabase(db, rdb, mongo.GetDatabase())
conversationDatabase := controller.NewConversationDatabase(relation.NewConversationGorm(db), cache.NewConversationRedis(rdb, cache.GetDefaultOpt(), relation.NewConversationGorm(db)), tx.NewGorm(db))
- msgTool := NewMsgTool(msgDatabase, userDatabase, groupDatabase, conversationDatabase)
+ msgRpcClient := rpcclient.NewMessageRpcClient(discov)
+ msgNotificationSender := notification.NewMsgNotificationSender(rpcclient.WithRpcClient(&msgRpcClient))
+ msgTool := NewMsgTool(msgDatabase, userDatabase, groupDatabase, conversationDatabase, msgNotificationSender)
return msgTool, nil
}
@@ -80,7 +99,6 @@ func (c *MsgTool) ClearConversationsMsg(ctx context.Context, conversationIDs []s
if err := c.checkMaxSeq(ctx, conversationID); err != nil {
log.ZError(ctx, "fixSeq failed", err, "conversationID", conversationID)
}
-
}
}
diff --git a/pkg/apistruct/msg.go b/pkg/apistruct/msg.go
index dea73cf74..274c31a61 100644
--- a/pkg/apistruct/msg.go
+++ b/pkg/apistruct/msg.go
@@ -1,10 +1,5 @@
package apistruct
-import (
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg"
- sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
-)
-
type DelMsgReq struct {
UserID string `json:"userID,omitempty" binding:"required"`
SeqList []uint32 `json:"seqList,omitempty" binding:"required"`
@@ -49,69 +44,6 @@ type SetMsgMinSeqReq struct {
type SetMsgMinSeqResp struct {
}
-type ModifyMessageReactionExtensionsReq struct {
- OperationID string `json:"operationID" binding:"required"`
- conversationID string `json:"conversationID" binding:"required"`
- SessionType int32 `json:"sessionType" binding:"required"`
- ReactionExtensionList map[string]*sdkws.KeyValue `json:"reactionExtensionList,omitempty" binding:"required"`
- ClientMsgID string `json:"clientMsgID" binding:"required"`
- Ex *string `json:"ex"`
- AttachedInfo *string `json:"attachedInfo"`
- IsReact bool `json:"isReact"`
- IsExternalExtensions bool `json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
-}
-
-type ModifyMessageReactionExtensionsResp struct {
- Data struct {
- ResultKeyValue []*msg.KeyValueResp `json:"result"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
- IsReact bool `json:"isReact"`
- } `json:"data"`
-}
-
-//type OperateMessageListReactionExtensionsReq struct {
-// OperationID string `json:"operationID" binding:"required"`
-// conversationID string `json:"conversationID" binding:"required"`
-// SessionType string `json:"sessionType" binding:"required"`
-// MessageReactionKeyList []*msg.GetMessageListReactionExtensionsReq_MessageReactionKey `json:"messageReactionKeyList" binding:"required"`
-//}
-
-type OperateMessageListReactionExtensionsResp struct {
- Data struct {
- SuccessList []*msg.ExtendMsgResp `json:"successList"`
- FailedList []*msg.ExtendMsgResp `json:"failedList"`
- } `json:"data"`
-}
-
-type SetMessageReactionExtensionsCallbackReq ModifyMessageReactionExtensionsReq
-
-type SetMessageReactionExtensionsCallbackResp ModifyMessageReactionExtensionsResp
-
-//type GetMessageListReactionExtensionsReq OperateMessageListReactionExtensionsReq
-
-type GetMessageListReactionExtensionsResp struct {
- Data []*msg.SingleMessageExtensionResult `json:"data"`
-}
-
-type AddMessageReactionExtensionsReq ModifyMessageReactionExtensionsReq
-
-type AddMessageReactionExtensionsResp ModifyMessageReactionExtensionsResp
-
-type DeleteMessageReactionExtensionsReq struct {
- OperationID string `json:"operationID" binding:"required"`
- conversationID string `json:"conversationID" binding:"required"`
- SessionType int32 `json:"sessionType" binding:"required"`
- ClientMsgID string `json:"clientMsgID" binding:"required"`
- IsExternalExtensions bool `json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime" binding:"required"`
- ReactionExtensionList []*sdkws.KeyValue `json:"reactionExtensionList" binding:"required"`
-}
-
-type DeleteMessageReactionExtensionsResp struct {
- Data []*msg.KeyValueResp
-}
-
type PictureBaseInfo struct {
UUID string `mapstructure:"uuid"`
Type string `mapstructure:"type" `
diff --git a/pkg/callbackstruct/message.go b/pkg/callbackstruct/message.go
index 965d91df2..68095889b 100644
--- a/pkg/callbackstruct/message.go
+++ b/pkg/callbackstruct/message.go
@@ -1,7 +1,6 @@
package callbackstruct
import (
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg"
sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
)
@@ -66,71 +65,3 @@ type CallbackMsgModifyCommandResp struct {
AttachedInfo *string `json:"attachedInfo"`
Ex *string `json:"ex"`
}
-type CallbackBeforeSetMessageReactionExtReq struct {
- OperationID string `json:"operationID"`
- CallbackCommand `json:"callbackCommand"`
- ConversationID string `json:"conversationID"`
- OpUserID string `json:"opUserID"`
- SessionType int32 `json:"sessionType"`
- ReactionExtensionList map[string]*sdkws.KeyValue `json:"reactionExtensionList"`
- ClientMsgID string `json:"clientMsgID"`
- IsReact bool `json:"isReact"`
- IsExternalExtensions bool `json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
-}
-type CallbackBeforeSetMessageReactionExtResp struct {
- CommonCallbackResp
- ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
-}
-type CallbackDeleteMessageReactionExtReq struct {
- CallbackCommand `json:"callbackCommand"`
- OperationID string `json:"operationID"`
- ConversationID string `json:"conversationID"`
- OpUserID string `json:"opUserID"`
- SessionType int32 `json:"sessionType"`
- ReactionExtensionList []*sdkws.KeyValue `json:"reactionExtensionList"`
- ClientMsgID string `json:"clientMsgID"`
- IsExternalExtensions bool `json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
-}
-type CallbackDeleteMessageReactionExtResp struct {
- CommonCallbackResp
- ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
-}
-
-type CallbackGetMessageListReactionExtReq struct {
- OperationID string `json:"operationID"`
- CallbackCommand `json:"callbackCommand"`
- ConversationID string `json:"conversationID"`
- OpUserID string `json:"opUserID"`
- SessionType int32 `json:"sessionType"`
- TypeKeyList []string `json:"typeKeyList"`
- //MessageKeyList []*msg.GetMessageListReactionExtensionsReq_MessageReactionKey `json:"messageKeyList"`
-}
-
-type CallbackGetMessageListReactionExtResp struct {
- CommonCallbackResp
- MessageResultList []*msg.SingleMessageExtensionResult `json:"messageResultList"`
-}
-
-type CallbackAddMessageReactionExtReq struct {
- OperationID string `json:"operationID"`
- CallbackCommand `json:"callbackCommand"`
- ConversationID string `json:"conversationID"`
- OpUserID string `json:"opUserID"`
- SessionType int32 `json:"sessionType"`
- ReactionExtensionList map[string]*sdkws.KeyValue `json:"reactionExtensionList"`
- ClientMsgID string `json:"clientMsgID"`
- IsReact bool `json:"isReact"`
- IsExternalExtensions bool `json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
-}
-
-type CallbackAddMessageReactionExtResp struct {
- CommonCallbackResp
- ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
- IsReact bool `json:"isReact"`
- MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
-}
diff --git a/pkg/common/cmd/cron_task.go b/pkg/common/cmd/cron_task.go
index 7795e5e3d..8958c78db 100644
--- a/pkg/common/cmd/cron_task.go
+++ b/pkg/common/cmd/cron_task.go
@@ -7,7 +7,7 @@ type CronTaskCmd struct {
}
func NewCronTaskCmd() *CronTaskCmd {
- return &CronTaskCmd{NewRootCmd("cronTask")}
+ return &CronTaskCmd{NewRootCmd("cronTask", WithCronTaskLogName())}
}
func (c *CronTaskCmd) addRunE(f func() error) {
diff --git a/pkg/common/cmd/root.go b/pkg/common/cmd/root.go
index be04ac79a..f85ae8efe 100644
--- a/pkg/common/cmd/root.go
+++ b/pkg/common/cmd/root.go
@@ -16,17 +16,40 @@ type RootCmd struct {
prometheusPort int
}
-func NewRootCmd(name string) (rootCmd *RootCmd) {
+type CmdOpts struct {
+ loggerPrefixName string
+}
+
+func WithCronTaskLogName() func(*CmdOpts) {
+ return func(opts *CmdOpts) {
+ opts.loggerPrefixName = "OpenIM.CronTask.log.all"
+ }
+}
+
+func WithLogName(logName string) func(*CmdOpts) {
+ return func(opts *CmdOpts) {
+ opts.loggerPrefixName = logName
+ }
+}
+
+func NewRootCmd(name string, opts ...func(*CmdOpts)) (rootCmd *RootCmd) {
rootCmd = &RootCmd{Name: name}
c := cobra.Command{
- Use: "start",
- Short: fmt.Sprintf(`Start %s server`, name),
- Long: fmt.Sprintf(`Start %s server`, name),
+ Use: "start openIM application",
+ Short: fmt.Sprintf(`Start %s `, name),
+ Long: fmt.Sprintf(`Start %s `, name),
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
if err := rootCmd.getConfFromCmdAndInit(cmd); err != nil {
panic(err)
}
- if err := log.InitFromConfig("OpenIM.log.all", name, config.Config.Log.RemainLogLevel, config.Config.Log.IsStdout, config.Config.Log.IsJson, config.Config.Log.StorageLocation, config.Config.Log.RemainRotationCount); err != nil {
+ cmdOpts := &CmdOpts{}
+ for _, opt := range opts {
+ opt(cmdOpts)
+ }
+ if cmdOpts.loggerPrefixName == "" {
+ cmdOpts.loggerPrefixName = "OpenIM.log.all"
+ }
+ if err := log.InitFromConfig(cmdOpts.loggerPrefixName, name, config.Config.Log.RemainLogLevel, config.Config.Log.IsStdout, config.Config.Log.IsJson, config.Config.Log.StorageLocation, config.Config.Log.RemainRotationCount); err != nil {
panic(err)
}
return nil
diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go
index d24073940..04d5566f5 100644
--- a/pkg/common/cmd/rpc.go
+++ b/pkg/common/cmd/rpc.go
@@ -26,7 +26,8 @@ func (a *RpcCmd) Exec() error {
return a.Execute()
}
-func (a *RpcCmd) StartSvr(name string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error {
+func (a *RpcCmd) StartSvr(name string, rpcFn func(discov discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error {
+ a.port = 10030
if a.GetPortFlag() == 0 {
return errors.New("port is required")
}
diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go
index a49dcec86..c9dd2860a 100644
--- a/pkg/common/config/config.go
+++ b/pkg/common/config/config.go
@@ -77,15 +77,11 @@ type config struct {
MsgToPush struct {
Topic string `yaml:"topic"`
} `yaml:"msgToPush"`
- MsgToModify struct {
- Topic string `yaml:"topic"`
- } `yaml:"msgToModify"`
ConsumerGroupID struct {
- MsgToRedis string `yaml:"msgToRedis"`
- MsgToMongo string `yaml:"msgToMongo"`
- MsgToMySql string `yaml:"msgToMySql"`
- MsgToPush string `yaml:"msgToPush"`
- MsgToModify string `yaml:"msgToModify"`
+ MsgToRedis string `yaml:"msgToRedis"`
+ MsgToMongo string `yaml:"msgToMongo"`
+ MsgToMySql string `yaml:"msgToMySql"`
+ MsgToPush string `yaml:"msgToPush"`
} `yaml:"consumerGroupID"`
} `yaml:"kafka"`
@@ -103,42 +99,26 @@ type config struct {
Enable string `yaml:"enable"`
ApiURL string `yaml:"apiURL"`
Minio struct {
- TempBucket string `yaml:"tempBucket"`
- DataBucket string `yaml:"dataBucket"`
- Location string `yaml:"location"`
- Endpoint string `yaml:"endpoint"`
- AccessKeyID string `yaml:"accessKeyID"`
- SecretAccessKey string `yaml:"secretAccessKey"`
- IsDistributedMod bool `yaml:"isDistributedMod"`
+ Bucket string `yaml:"bucket"`
+ Endpoint string `yaml:"endpoint"`
+ AccessKeyID string `yaml:"accessKeyID"`
+ SecretAccessKey string `yaml:"secretAccessKey"`
+ SessionToken string `yaml:"sessionToken"`
} `yaml:"minio"`
- Tencent struct {
- AppID string `yaml:"appID"`
- Region string `yaml:"region"`
- Bucket string `yaml:"bucket"`
- SecretID string `yaml:"secretID"`
- SecretKey string `yaml:"secretKey"`
+ Cos struct {
+ BucketURL string `yaml:"bucketURL"`
+ SecretID string `yaml:"secretID"`
+ SecretKey string `yaml:"secretKey"`
+ SessionToken string `yaml:"sessionToken"`
} `yaml:"tencent"`
- Ali struct {
- RegionID string `yaml:"regionID"`
- AccessKeyID string `yaml:"accessKeyID"`
- AccessKeySecret string `yaml:"accessKeySecret"`
- StsEndpoint string `yaml:"stsEndpoint"`
- OssEndpoint string `yaml:"ossEndpoint"`
- Bucket string `yaml:"bucket"`
- FinalHost string `yaml:"finalHost"`
- StsDurationSeconds int64 `yaml:"stsDurationSeconds"`
- OssRoleArn string `yaml:"OssRoleArn"`
- } `yaml:"ali"`
- Aws struct {
+ Oss struct {
+ Endpoint string `yaml:"endpoint"`
+ Bucket string `yaml:"bucket"`
+ BucketURL string `yaml:"bucketURL"`
AccessKeyID string `yaml:"accessKeyID"`
AccessKeySecret string `yaml:"accessKeySecret"`
- Region string `yaml:"region"`
- Bucket string `yaml:"bucket"`
- FinalHost string `yaml:"finalHost"`
- RoleArn string `yaml:"roleArn"`
- ExternalId string `yaml:"externalId"`
- RoleSessionName string `yaml:"roleSessionName"`
- } `yaml:"aws"`
+ SessionToken string `yaml:"sessionToken"`
+ } `yaml:"ali"`
} `yaml:"object"`
RpcPort struct {
@@ -215,6 +195,7 @@ type config struct {
SingleMessageHasReadReceiptEnable bool `yaml:"singleMessageHasReadReceiptEnable"`
RetainChatRecords int `yaml:"retainChatRecords"`
ChatRecordsClearTime string `yaml:"chatRecordsClearTime"`
+ MsgDestructTime string `yaml:"msgDestructTime"`
Secret string `yaml:"secret"`
TokenPolicy struct {
Expire int64 `yaml:"expire"`
diff --git a/pkg/common/convert/conversation.go b/pkg/common/convert/conversation.go
index 66d1d771c..752e6ec51 100644
--- a/pkg/common/convert/conversation.go
+++ b/pkg/common/convert/conversation.go
@@ -8,6 +8,7 @@ import (
func ConversationDB2Pb(conversationDB *relation.ConversationModel) *conversation.Conversation {
conversationPB := &conversation.Conversation{}
+ conversationPB.LatestMsgDestructTime = conversationDB.LatestMsgDestructTime.Unix()
if err := utils.CopyStructFields(conversationPB, conversationDB); err != nil {
return nil
}
@@ -20,6 +21,7 @@ func ConversationsDB2Pb(conversationsDB []*relation.ConversationModel) (conversa
if err := utils.CopyStructFields(conversationPB, conversationDB); err != nil {
continue
}
+ conversationPB.LatestMsgDestructTime = conversationDB.LatestMsgDestructTime.Unix()
conversationsPB = append(conversationsPB, conversationPB)
}
return conversationsPB
diff --git a/pkg/common/db/cache/extend_msg_set.go b/pkg/common/db/cache/extend_msg_set.go
deleted file mode 100644
index c405a7567..000000000
--- a/pkg/common/db/cache/extend_msg_set.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package cache
-
-import (
- "context"
- "time"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation"
- "github.com/dtm-labs/rockscache"
- "github.com/redis/go-redis/v9"
-)
-
-const (
- extendMsgSetCache = "EXTEND_MSG_SET_CACHE:"
- extendMsgCache = "EXTEND_MSG_CACHE:"
-)
-
-type ExtendMsgSetCache interface {
- metaCache
- NewCache() ExtendMsgSetCache
- GetExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, firstModifyTime int64) (extendMsg *unrelation.ExtendMsgModel, err error)
- DelExtendMsg(clientMsgID string) ExtendMsgSetCache
-}
-
-type ExtendMsgSetCacheRedis struct {
- metaCache
- expireTime time.Duration
- rcClient *rockscache.Client
- extendMsgSetDB unrelation.ExtendMsgSetModelInterface
-}
-
-func NewExtendMsgSetCacheRedis(rdb redis.UniversalClient, extendMsgSetDB unrelation.ExtendMsgSetModelInterface, options rockscache.Options) ExtendMsgSetCache {
- rcClient := rockscache.NewClient(rdb, options)
- return &ExtendMsgSetCacheRedis{
- metaCache: NewMetaCacheRedis(rcClient),
- expireTime: time.Second * 30 * 60,
- extendMsgSetDB: extendMsgSetDB,
- rcClient: rcClient,
- }
-}
-
-func (e *ExtendMsgSetCacheRedis) NewCache() ExtendMsgSetCache {
- return &ExtendMsgSetCacheRedis{
- metaCache: NewMetaCacheRedis(e.rcClient, e.metaCache.GetPreDelKeys()...),
- expireTime: e.expireTime,
- extendMsgSetDB: e.extendMsgSetDB,
- rcClient: e.rcClient,
- }
-}
-
-func (e *ExtendMsgSetCacheRedis) getKey(clientMsgID string) string {
- return extendMsgCache + clientMsgID
-}
-
-func (e *ExtendMsgSetCacheRedis) GetExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, firstModifyTime int64) (extendMsg *unrelation.ExtendMsgModel, err error) {
- return getCache(ctx, e.rcClient, e.getKey(clientMsgID), e.expireTime, func(ctx context.Context) (*unrelation.ExtendMsgModel, error) {
- return e.extendMsgSetDB.TakeExtendMsg(ctx, conversationID, sessionType, clientMsgID, firstModifyTime)
- })
-}
-
-func (e *ExtendMsgSetCacheRedis) DelExtendMsg(clientMsgID string) ExtendMsgSetCache {
- new := e.NewCache()
- new.AddKeys(e.getKey(clientMsgID))
- return new
-}
diff --git a/pkg/common/db/controller/conversation.go b/pkg/common/db/controller/conversation.go
index c34590da1..7908d163a 100644
--- a/pkg/common/db/controller/conversation.go
+++ b/pkg/common/db/controller/conversation.go
@@ -35,6 +35,7 @@ type ConversationDatabase interface {
GetAllConversationIDs(ctx context.Context) ([]string, error)
GetUserAllHasReadSeqs(ctx context.Context, ownerUserID string) (map[string]int64, error)
GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*relationTb.ConversationModel, error)
+ GetConversationIDsNeedDestruct(ctx context.Context) ([]*relationTb.ConversationModel, error)
}
func NewConversationDatabase(conversation relationTb.ConversationModelInterface, cache cache.ConversationCache, tx tx.Tx) ConversationDatabase {
@@ -275,3 +276,7 @@ func (c *conversationDatabase) GetUserAllHasReadSeqs(ctx context.Context, ownerU
func (c *conversationDatabase) GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*relationTb.ConversationModel, error) {
return c.conversationDB.GetConversationsByConversationID(ctx, conversationIDs)
}
+
+func (c *conversationDatabase) GetConversationIDsNeedDestruct(ctx context.Context) ([]*relationTb.ConversationModel, error) {
+ return c.conversationDB.GetConversationIDsNeedDestruct(ctx)
+}
diff --git a/pkg/common/db/controller/extend_msg.go b/pkg/common/db/controller/extend_msg.go
deleted file mode 100644
index 9717bd933..000000000
--- a/pkg/common/db/controller/extend_msg.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package controller
-
-import (
- "context"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache"
- unRelationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/tx"
-)
-
-// for mongoDB
-type ExtendMsgDatabase interface {
- CreateExtendMsgSet(ctx context.Context, set *unRelationTb.ExtendMsgSetModel) error
- GetAllExtendMsgSet(ctx context.Context, ID string, opts *unRelationTb.GetAllExtendMsgSetOpts) (sets []*unRelationTb.ExtendMsgSetModel, err error)
- GetExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, maxMsgUpdateTime int64) (*unRelationTb.ExtendMsgSetModel, error)
- InsertExtendMsg(ctx context.Context, conversationID string, sessionType int32, msg *unRelationTb.ExtendMsgModel) error
- InsertOrUpdateReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*unRelationTb.KeyValueModel) error
- DeleteReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*unRelationTb.KeyValueModel) error
- GetExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (extendMsg *unRelationTb.ExtendMsgModel, err error)
-}
-
-type extendMsgDatabase struct {
- database unRelationTb.ExtendMsgSetModelInterface
- cache cache.ExtendMsgSetCache
- ctxTx tx.CtxTx
-}
-
-func NewExtendMsgDatabase(extendMsgModel unRelationTb.ExtendMsgSetModelInterface, cache cache.ExtendMsgSetCache, ctxTx tx.CtxTx) ExtendMsgDatabase {
- return &extendMsgDatabase{database: extendMsgModel, cache: cache, ctxTx: ctxTx}
-}
-
-func (e *extendMsgDatabase) CreateExtendMsgSet(ctx context.Context, set *unRelationTb.ExtendMsgSetModel) error {
- return e.database.CreateExtendMsgSet(ctx, set)
-}
-
-func (e *extendMsgDatabase) GetAllExtendMsgSet(ctx context.Context, conversationID string, opts *unRelationTb.GetAllExtendMsgSetOpts) (sets []*unRelationTb.ExtendMsgSetModel, err error) {
- return e.database.GetAllExtendMsgSet(ctx, conversationID, opts)
-}
-
-func (e *extendMsgDatabase) GetExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, maxMsgUpdateTime int64) (*unRelationTb.ExtendMsgSetModel, error) {
- return e.database.GetExtendMsgSet(ctx, conversationID, sessionType, maxMsgUpdateTime)
-}
-
-func (e *extendMsgDatabase) InsertExtendMsg(ctx context.Context, conversationID string, sessionType int32, msg *unRelationTb.ExtendMsgModel) error {
- return e.database.InsertExtendMsg(ctx, conversationID, sessionType, msg)
-}
-
-func (e *extendMsgDatabase) InsertOrUpdateReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*unRelationTb.KeyValueModel) error {
- return e.database.InsertOrUpdateReactionExtendMsgSet(ctx, conversationID, sessionType, clientMsgID, msgFirstModifyTime, reactionExtensionList)
-}
-
-func (e *extendMsgDatabase) DeleteReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*unRelationTb.KeyValueModel) error {
- return e.database.DeleteReactionExtendMsgSet(ctx, conversationID, sessionType, clientMsgID, msgFirstModifyTime, reactionExtensionList)
-}
-
-func (e *extendMsgDatabase) GetExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (extendMsg *unRelationTb.ExtendMsgModel, err error) {
- return e.cache.GetExtendMsg(ctx, conversationID, sessionType, clientMsgID, maxMsgUpdateTime)
-}
diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go
index 5e30d8773..62619a54a 100644
--- a/pkg/common/db/controller/msg.go
+++ b/pkg/common/db/controller/msg.go
@@ -1,13 +1,13 @@
package controller
import (
- "fmt"
relation2 "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/relation"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
- "github.com/redis/go-redis/v9"
"gorm.io/gorm"
"time"
+ "github.com/redis/go-redis/v9"
+
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/convert"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache"
@@ -51,6 +51,9 @@ type CommonMsgDatabase interface {
GetMsgBySeqs(ctx context.Context, userID string, conversationID string, seqs []int64) (minSeq int64, maxSeq int64, seqMsg []*sdkws.MsgData, err error)
// 删除会话消息重置最小seq, remainTime为消息保留的时间单位秒,超时消息删除, 传0删除所有消息(此方法不删除redis cache)
DeleteConversationMsgsAndSetMinSeq(ctx context.Context, conversationID string, remainTime int64) error
+ // 用户标记删除过期消息返回标记删除的seq列表
+ UserMsgsDestruct(cte context.Context, userID string, conversationID string, destructTime int64, lastMsgDestructTime time.Time) (seqs []int64, err error)
+
// 用户根据seq删除消息
DeleteUserMsgsBySeqs(ctx context.Context, userID string, conversationID string, seqs []int64) error
// 物理删除消息置空
@@ -85,16 +88,6 @@ type CommonMsgDatabase interface {
MsgToPushMQ(ctx context.Context, key, conversarionID string, msg2mq *sdkws.MsgData) (int32, int64, error)
MsgToMongoMQ(ctx context.Context, key, conversarionID string, msgs []*sdkws.MsgData, lastSeq int64) error
- // modify
- JudgeMessageReactionExist(ctx context.Context, clientMsgID string, sessionType int32) (bool, error)
- SetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey, value string) error
- SetMessageReactionExpire(ctx context.Context, clientMsgID string, sessionType int32, expiration time.Duration) (bool, error)
- GetExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (*pbMsg.ExtendMsg, error)
- InsertOrUpdateReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*sdkws.KeyValue) error
- GetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey string) (string, error)
- GetOneMessageAllReactionList(ctx context.Context, clientMsgID string, sessionType int32) (map[string]string, error)
- DeleteOneMessageKey(ctx context.Context, clientMsgID string, sessionType int32, subKey string) error
- DeleteReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*sdkws.KeyValue) error
RangeUserSendCount(ctx context.Context, start time.Time, end time.Time, group bool, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, users []*unRelationTb.UserCount, dateCount map[string]int64, err error)
RangeGroupSendCount(ctx context.Context, start time.Time, end time.Time, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, groups []*unRelationTb.GroupCount, dateCount map[string]int64, err error)
SearchMessage(ctx context.Context, req *pbMsg.SearchMessageReq) (msgData []*sdkws.MsgData, err error)
@@ -103,13 +96,12 @@ type CommonMsgDatabase interface {
func NewCommonMsgDatabase(msgDocModel unRelationTb.MsgDocModelInterface, cacheModel cache.MsgModel, msgMyqModel relation.ChatLogModelInterface) CommonMsgDatabase {
return &commonMsgDatabase{
- msgDocDatabase: msgDocModel,
- cache: cacheModel,
- msgMyq: msgMyqModel,
- producer: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.LatestMsgToRedis.Topic),
- producerToMongo: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToMongo.Topic),
- producerToPush: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToPush.Topic),
- producerToModify: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToModify.Topic),
+ msgDocDatabase: msgDocModel,
+ msgMyq: msgMyqModel,
+ cache: cacheModel,
+ producer: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.LatestMsgToRedis.Topic),
+ producerToMongo: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToMongo.Topic),
+ producerToPush: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToPush.Topic),
}
}
@@ -122,16 +114,14 @@ func InitCommonMsgDatabase(rdb redis.UniversalClient, database *mongo.Database,
}
type commonMsgDatabase struct {
- msgDocDatabase unRelationTb.MsgDocModelInterface
- extendMsgDatabase unRelationTb.ExtendMsgSetModelInterface
- extendMsgSetModel unRelationTb.ExtendMsgSetModel
- msg unRelationTb.MsgDocModel
- msgMyq relation.ChatLogModelInterface
- cache cache.MsgModel
- producer *kafka.Producer
- producerToMongo *kafka.Producer
- producerToModify *kafka.Producer
- producerToPush *kafka.Producer
+ msgDocDatabase unRelationTb.MsgDocModelInterface
+ msg unRelationTb.MsgDocModel
+ msgMyq relation.ChatLogModelInterface
+ cache cache.MsgModel
+ producer *kafka.Producer
+ producerToMongo *kafka.Producer
+ producerToModify *kafka.Producer
+ producerToPush *kafka.Producer
}
func (db *commonMsgDatabase) GetChatLog(ctx context.Context, req *pbMsg.GetChatLogsReq, pageNumber int32, showNumber int32, int32s []int32) (int64, []relation.ChatLogModel, error) {
@@ -428,44 +418,6 @@ func (db *commonMsgDatabase) getMsgBySeqs(ctx context.Context, userID, conversat
return totalMsgs, nil
}
-// func (db *commonMsgDatabase) refetchDelSeqsMsgs(ctx context.Context, conversationID string, delNums, rangeBegin, begin int64) (seqMsgs []*unRelationTb.MsgDataModel, err error) {
-// var reFetchSeqs []int64
-// if delNums > 0 {
-// newBeginSeq := rangeBegin - delNums
-// if newBeginSeq >= begin {
-// newEndSeq := rangeBegin - 1
-// for i := newBeginSeq; i <= newEndSeq; i++ {
-// reFetchSeqs = append(reFetchSeqs, i)
-// }
-// }
-// }
-// if len(reFetchSeqs) == 0 {
-// return
-// }
-// if len(reFetchSeqs) > 0 {
-// m := db.msg.GetDocIDSeqsMap(conversationID, reFetchSeqs)
-// for docID, seqs := range m {
-// msgs, _, err := db.findMsgInfoBySeq(ctx, docID, seqs)
-// if err != nil {
-// return nil, err
-// }
-// for _, msg := range msgs {
-// if msg.Status != constant.MsgDeleted {
-// seqMsgs = append(seqMsgs, msg)
-// }
-// }
-// }
-// }
-// if len(seqMsgs) < int(delNums) {
-// seqMsgs2, err := db.refetchDelSeqsMsgs(ctx, conversationID, delNums-int64(len(seqMsgs)), rangeBegin-1, begin)
-// if err != nil {
-// return seqMsgs, err
-// }
-// seqMsgs = append(seqMsgs, seqMsgs2...)
-// }
-// return seqMsgs, nil
-// }
-
func (db *commonMsgDatabase) findMsgInfoBySeq(ctx context.Context, userID, docID string, seqs []int64) (totalMsgs []*unRelationTb.MsgInfoModel, err error) {
msgs, err := db.msgDocDatabase.GetMsgBySeqIndexIn1Doc(ctx, userID, docID, seqs)
for _, msg := range msgs {
@@ -673,6 +625,47 @@ func (db *commonMsgDatabase) DeleteConversationMsgsAndSetMinSeq(ctx context.Cont
return db.cache.SetMinSeq(ctx, conversationID, minSeq)
}
+func (db *commonMsgDatabase) UserMsgsDestruct(ctx context.Context, userID string, conversationID string, destructTime int64, lastMsgDestructTime time.Time) (seqs []int64, err error) {
+ var index int64
+ for {
+ // from oldest 2 newest
+ msgDocModel, err := db.msgDocDatabase.GetMsgDocModelByIndex(ctx, conversationID, index, 1)
+ if err != nil || msgDocModel.DocID == "" {
+ if err != nil {
+ if err == unrelation.ErrMsgListNotExist {
+ log.ZDebug(ctx, "deleteMsgRecursion finished", "conversationID", conversationID, "userID", userID, "index", index)
+ } else {
+ log.ZError(ctx, "deleteMsgRecursion GetUserMsgListByIndex failed", err, "conversationID", conversationID, "index", index)
+ }
+ }
+ // 获取报错,或者获取不到了,物理删除并且返回seq delMongoMsgsPhysical(delStruct.delDocIDList), 结束递归
+ break
+ }
+ //&& msgDocModel.Msg[0].Msg.SendTime > lastMsgDestructTime.UnixMilli()
+ if len(msgDocModel.Msg) > 0 {
+ for _, msg := range msgDocModel.Msg {
+ if msg.Msg.SendTime+destructTime*1000 <= time.Now().UnixMilli() {
+ if msg.Msg.SendTime > lastMsgDestructTime.UnixMilli() && !utils.Contain(userID, msg.DelList...) {
+ seqs = append(seqs, msg.Msg.Seq)
+ }
+ } else {
+ log.ZDebug(ctx, "deleteMsgRecursion finished", "conversationID", conversationID, "userID", userID, "index", index)
+ break
+ }
+
+ }
+ }
+ }
+ log.ZDebug(ctx, "UserMsgsDestruct", "conversationID", conversationID, "userID", userID, "seqs", seqs)
+ if len(seqs) > 0 {
+ latestSeq := seqs[len(seqs)-1]
+ if err := db.cache.SetConversationUserMinSeq(ctx, conversationID, userID, latestSeq); err != nil {
+ return nil, err
+ }
+ }
+ return seqs, nil
+}
+
// this is struct for recursion
type delMsgRecursionStruct struct {
minSeq int64
@@ -905,66 +898,6 @@ func (db *commonMsgDatabase) GetMinMaxSeqMongo(ctx context.Context, conversation
return
}
-func (db *commonMsgDatabase) JudgeMessageReactionExist(ctx context.Context, clientMsgID string, sessionType int32) (bool, error) {
- return db.cache.JudgeMessageReactionExist(ctx, clientMsgID, sessionType)
-}
-
-func (db *commonMsgDatabase) SetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey, value string) error {
- return db.cache.SetMessageTypeKeyValue(ctx, clientMsgID, sessionType, typeKey, value)
-}
-
-func (db *commonMsgDatabase) SetMessageReactionExpire(ctx context.Context, clientMsgID string, sessionType int32, expiration time.Duration) (bool, error) {
- return db.cache.SetMessageReactionExpire(ctx, clientMsgID, sessionType, expiration)
-}
-
-func (db *commonMsgDatabase) GetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey string) (string, error) {
- return db.cache.GetMessageTypeKeyValue(ctx, clientMsgID, sessionType, typeKey)
-}
-
-func (db *commonMsgDatabase) GetOneMessageAllReactionList(ctx context.Context, clientMsgID string, sessionType int32) (map[string]string, error) {
- return db.cache.GetOneMessageAllReactionList(ctx, clientMsgID, sessionType)
-}
-
-func (db *commonMsgDatabase) DeleteOneMessageKey(ctx context.Context, clientMsgID string, sessionType int32, subKey string) error {
- return db.cache.DeleteOneMessageKey(ctx, clientMsgID, sessionType, subKey)
-}
-
-func (db *commonMsgDatabase) InsertOrUpdateReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensions map[string]*sdkws.KeyValue) error {
- return db.extendMsgDatabase.InsertOrUpdateReactionExtendMsgSet(ctx, conversationID, sessionType, clientMsgID, msgFirstModifyTime, db.extendMsgSetModel.Pb2Model(reactionExtensions))
-}
-
-func (db *commonMsgDatabase) GetExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (*pbMsg.ExtendMsg, error) {
- extendMsgSet, err := db.extendMsgDatabase.GetExtendMsgSet(ctx, conversationID, sessionType, maxMsgUpdateTime)
- if err != nil {
- return nil, err
- }
- extendMsg, ok := extendMsgSet.ExtendMsgs[clientMsgID]
- if !ok {
- return nil, errs.ErrRecordNotFound.Wrap(fmt.Sprintf("cant find client msg id: %s", clientMsgID))
- }
- reactionExtensionList := make(map[string]*pbMsg.KeyValueResp)
- for key, model := range extendMsg.ReactionExtensionList {
- reactionExtensionList[key] = &pbMsg.KeyValueResp{
- KeyValue: &sdkws.KeyValue{
- TypeKey: model.TypeKey,
- Value: model.Value,
- LatestUpdateTime: model.LatestUpdateTime,
- },
- }
- }
- return &pbMsg.ExtendMsg{
- ReactionExtensions: reactionExtensionList,
- ClientMsgID: extendMsg.ClientMsgID,
- MsgFirstModifyTime: extendMsg.MsgFirstModifyTime,
- AttachedInfo: extendMsg.AttachedInfo,
- Ex: extendMsg.Ex,
- }, nil
-}
-
-func (db *commonMsgDatabase) DeleteReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensions map[string]*sdkws.KeyValue) error {
- return db.extendMsgDatabase.DeleteReactionExtendMsgSet(ctx, conversationID, sessionType, clientMsgID, msgFirstModifyTime, db.extendMsgSetModel.Pb2Model(reactionExtensions))
-}
-
func (db *commonMsgDatabase) RangeUserSendCount(ctx context.Context, start time.Time, end time.Time, group bool, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, users []*unRelationTb.UserCount, dateCount map[string]int64, err error) {
return db.msgDocDatabase.RangeUserSendCount(ctx, start, end, group, ase, pageNumber, showNumber)
}
diff --git a/pkg/common/db/controller/s3.go b/pkg/common/db/controller/s3.go
new file mode 100644
index 000000000..f192dadc5
--- /dev/null
+++ b/pkg/common/db/controller/s3.go
@@ -0,0 +1,76 @@
+package controller
+
+import "C"
+import (
+ "context"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3/cont"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
+ "path/filepath"
+ "time"
+)
+
+type S3Database interface {
+ PartLimit() *s3.PartLimit
+ PartSize(ctx context.Context, size int64) (int64, error)
+ AuthSign(ctx context.Context, uploadID string, partNumbers []int) (*s3.AuthSignResult, error)
+ InitiateMultipartUpload(ctx context.Context, hash string, size int64, expire time.Duration, maxParts int) (*cont.InitiateUploadResult, error)
+ CompleteMultipartUpload(ctx context.Context, uploadID string, parts []string) (*cont.UploadResult, error)
+ AccessURL(ctx context.Context, name string, expire time.Duration) (time.Time, string, error)
+ SetObject(ctx context.Context, info *relation.ObjectModel) error
+}
+
+func NewS3Database(s3 s3.Interface, obj relation.ObjectInfoModelInterface) S3Database {
+ return &s3Database{
+ s3: cont.New(s3),
+ obj: obj,
+ }
+}
+
+type s3Database struct {
+ s3 *cont.Controller
+ obj relation.ObjectInfoModelInterface
+}
+
+func (s *s3Database) PartSize(ctx context.Context, size int64) (int64, error) {
+ return s.s3.PartSize(ctx, size)
+}
+
+func (s *s3Database) PartLimit() *s3.PartLimit {
+ return s.s3.PartLimit()
+}
+
+func (s *s3Database) AuthSign(ctx context.Context, uploadID string, partNumbers []int) (*s3.AuthSignResult, error) {
+ return s.s3.AuthSign(ctx, uploadID, partNumbers)
+}
+
+func (s *s3Database) InitiateMultipartUpload(ctx context.Context, hash string, size int64, expire time.Duration, maxParts int) (*cont.InitiateUploadResult, error) {
+ return s.s3.InitiateUpload(ctx, hash, size, expire, maxParts)
+}
+
+func (s *s3Database) CompleteMultipartUpload(ctx context.Context, uploadID string, parts []string) (*cont.UploadResult, error) {
+ return s.s3.CompleteUpload(ctx, uploadID, parts)
+}
+
+func (s *s3Database) SetObject(ctx context.Context, info *relation.ObjectModel) error {
+ return s.obj.SetObject(ctx, info)
+}
+
+func (s *s3Database) AccessURL(ctx context.Context, name string, expire time.Duration) (time.Time, string, error) {
+ obj, err := s.obj.Take(ctx, name)
+ if err != nil {
+ return time.Time{}, "", err
+ }
+ opt := &s3.AccessURLOption{
+ ContentType: obj.ContentType,
+ }
+ if filename := filepath.Base(obj.Name); filename != "" {
+ opt.ContentDisposition = `attachment; filename=` + filename
+ }
+ expireTime := time.Now().Add(expire)
+ rawURL, err := s.s3.AccessURL(ctx, obj.Key, expire, opt)
+ if err != nil {
+ return time.Time{}, "", err
+ }
+ return expireTime, rawURL, nil
+}
diff --git a/pkg/common/db/controller/storage.go b/pkg/common/db/controller/storage.go
deleted file mode 100644
index 5182bb199..000000000
--- a/pkg/common/db/controller/storage.go
+++ /dev/null
@@ -1,538 +0,0 @@
-package controller
-
-import "C"
-import (
- "bytes"
- "context"
- "crypto/md5"
- "encoding/hex"
- "encoding/json"
- "errors"
- "fmt"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/obj"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/third"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "github.com/google/uuid"
- "io"
- "net/url"
- "path"
- "strconv"
- "time"
-)
-
-const (
- hashPrefix = "hash"
- tempPrefix = "temp"
- fragmentPrefix = "fragment_"
- urlsName = "urls.json"
-)
-
-type S3Database interface {
- ApplyPut(ctx context.Context, req *third.ApplyPutReq) (*third.ApplyPutResp, error)
- GetPut(ctx context.Context, req *third.GetPutReq) (*third.GetPutResp, error)
- ConfirmPut(ctx context.Context, req *third.ConfirmPutReq) (*third.ConfirmPutResp, error)
- GetUrl(ctx context.Context, req *third.GetUrlReq) (*third.GetUrlResp, error)
- GetHashInfo(ctx context.Context, req *third.GetHashInfoReq) (*third.GetHashInfoResp, error)
- CleanExpirationObject(ctx context.Context, t time.Time)
-}
-
-func NewS3Database(obj obj.Interface, hash relation.ObjectHashModelInterface, info relation.ObjectInfoModelInterface, put relation.ObjectPutModelInterface, url *url.URL) S3Database {
- return &s3Database{
- url: url,
- obj: obj,
- hash: hash,
- info: info,
- put: put,
- }
-}
-
-type s3Database struct {
- url *url.URL
- obj obj.Interface
- hash relation.ObjectHashModelInterface
- info relation.ObjectInfoModelInterface
- put relation.ObjectPutModelInterface
-}
-
-// today 今天的日期
-func (c *s3Database) today() string {
- return time.Now().Format("20060102")
-}
-
-// fragmentName 根据序号生成文件名
-func (c *s3Database) fragmentName(index int) string {
- return fragmentPrefix + strconv.Itoa(index+1)
-}
-
-// getFragmentNum 获取分片大小和分片数量
-func (c *s3Database) getFragmentNum(fragmentSize int64, objectSize int64) (int64, int) {
- if size := c.obj.MinFragmentSize(); fragmentSize < size {
- fragmentSize = size
- }
- if fragmentSize <= 0 || objectSize <= fragmentSize {
- return objectSize, 1
- } else {
- num := int(objectSize / fragmentSize)
- if objectSize%fragmentSize > 0 {
- num++
- }
- if n := c.obj.MaxFragmentNum(); num > n {
- num = n
- }
- return fragmentSize, num
- }
-}
-
-func (c *s3Database) CheckHash(hash string) error {
- val, err := hex.DecodeString(hash)
- if err != nil {
- return err
- }
- if len(val) != md5.Size {
- return errs.ErrArgs.Wrap("invalid hash")
- }
- return nil
-}
-
-func (c *s3Database) urlName(name string) string {
- u := url.URL{
- Scheme: c.url.Scheme,
- Opaque: c.url.Opaque,
- User: c.url.User,
- Host: c.url.Host,
- Path: c.url.Path,
- RawPath: c.url.RawPath,
- ForceQuery: c.url.ForceQuery,
- RawQuery: c.url.RawQuery,
- Fragment: c.url.Fragment,
- RawFragment: c.url.RawFragment,
- }
- v := make(url.Values, 1)
- v.Set("name", name)
- u.RawQuery = v.Encode()
- return u.String()
-}
-
-func (c *s3Database) UUID() string {
- return uuid.New().String()
-}
-
-func (c *s3Database) HashName(hash string) string {
- return path.Join(hashPrefix, hash+"_"+c.today()+"_"+c.UUID())
-}
-
-func (c *s3Database) isNotFound(err error) bool {
- return relation.IsNotFound(err)
-}
-
-func (c *s3Database) ApplyPut(ctx context.Context, req *third.ApplyPutReq) (*third.ApplyPutResp, error) {
- if err := c.CheckHash(req.Hash); err != nil {
- return nil, err
- }
- if err := c.obj.CheckName(req.Name); err != nil {
- return nil, err
- }
- if req.ValidTime != 0 && req.ValidTime <= time.Now().UnixMilli() {
- return nil, errors.New("invalid ValidTime")
- }
- var expirationTime *time.Time
- if req.ValidTime != 0 {
- expirationTime = utils.ToPtr(time.UnixMilli(req.ValidTime))
- }
- if hash, err := c.hash.Take(ctx, req.Hash, c.obj.Name()); err == nil {
- o := relation.ObjectInfoModel{
- Name: req.Name,
- Hash: hash.Hash,
- ValidTime: expirationTime,
- ContentType: req.ContentType,
- CreateTime: time.Now(),
- }
- if err := c.info.SetObject(ctx, &o); err != nil {
- return nil, err
- }
- return &third.ApplyPutResp{Url: c.urlName(o.Name)}, nil // 服务器已存在
- } else if !c.isNotFound(err) {
- return nil, err
- }
- // 新上传
- var fragmentNum int
- const effective = time.Hour * 24 * 2
- req.FragmentSize, fragmentNum = c.getFragmentNum(req.FragmentSize, req.Size)
- put := relation.ObjectPutModel{
- PutID: req.PutID,
- Hash: req.Hash,
- Name: req.Name,
- ObjectSize: req.Size,
- ContentType: req.ContentType,
- FragmentSize: req.FragmentSize,
- ValidTime: expirationTime,
- EffectiveTime: time.Now().Add(effective),
- }
- if put.PutID == "" {
- put.PutID = c.UUID()
- }
- if v, err := c.put.Take(ctx, put.PutID); err == nil {
- now := time.Now().UnixMilli()
- if v.EffectiveTime.UnixMilli() <= now {
- if err := c.put.DelPut(ctx, []string{v.PutID}); err != nil {
- return nil, err
- }
- } else {
- return nil, errs.ErrDuplicateKey.Wrap(fmt.Sprintf("duplicate put id %s", put.PutID))
- }
- } else if !c.isNotFound(err) {
- return nil, err
- }
- put.Path = path.Join(tempPrefix, c.today(), req.Hash, put.PutID)
- putURLs := make([]string, 0, fragmentNum)
- for i := 0; i < fragmentNum; i++ {
- url, err := c.obj.PresignedPutURL(ctx, &obj.ApplyPutArgs{
- Bucket: c.obj.TempBucket(),
- Name: path.Join(put.Path, c.fragmentName(i)),
- Effective: effective,
- MaxObjectSize: req.FragmentSize,
- })
- if err != nil {
- return nil, err
- }
- putURLs = append(putURLs, url)
- }
- urlsJsonData, err := json.Marshal(putURLs)
- if err != nil {
- return nil, err
- }
- t := md5.Sum(urlsJsonData)
- put.PutURLsHash = hex.EncodeToString(t[:])
- _, err = c.obj.PutObject(ctx, &obj.BucketObject{Bucket: c.obj.TempBucket(), Name: path.Join(put.Path, urlsName)}, bytes.NewReader(urlsJsonData), int64(len(urlsJsonData)))
- if err != nil {
- return nil, err
- }
- put.CreateTime = time.Now()
- if err := c.put.Create(ctx, []*relation.ObjectPutModel{&put}); err != nil {
- return nil, err
- }
- return &third.ApplyPutResp{
- PutID: put.PutID,
- FragmentSize: put.FragmentSize,
- PutURLs: putURLs,
- ValidTime: put.EffectiveTime.UnixMilli(),
- }, nil
-}
-
-func (c *s3Database) GetPut(ctx context.Context, req *third.GetPutReq) (*third.GetPutResp, error) {
- up, err := c.put.Take(ctx, req.PutID)
- if err != nil {
- return nil, err
- }
- reader, err := c.obj.GetObject(ctx, &obj.BucketObject{Bucket: c.obj.TempBucket(), Name: path.Join(up.Path, urlsName)})
- if err != nil {
- return nil, err
- }
- urlsData, err := io.ReadAll(reader)
- if err != nil {
- return nil, err
- }
- t := md5.Sum(urlsData)
- if h := hex.EncodeToString(t[:]); h != up.PutURLsHash {
- return nil, fmt.Errorf("invalid put urls hash %s %s", h, up.PutURLsHash)
- }
- var urls []string
- if err := json.Unmarshal(urlsData, &urls); err != nil {
- return nil, err
- }
- _, fragmentNum := c.getFragmentNum(up.FragmentSize, up.ObjectSize)
- if len(urls) != fragmentNum {
- return nil, fmt.Errorf("invalid urls length %d fragment %d", len(urls), fragmentNum)
- }
- fragments := make([]*third.GetPutFragment, fragmentNum)
- for i := 0; i < fragmentNum; i++ {
- name := path.Join(up.Path, c.fragmentName(i))
- o, err := c.obj.GetObjectInfo(ctx, &obj.BucketObject{
- Bucket: c.obj.TempBucket(),
- Name: name,
- })
- if err != nil {
- if c.obj.IsNotFound(err) {
- fragments[i] = &third.GetPutFragment{Url: urls[i]}
- continue
- }
- return nil, err
- }
- fragments[i] = &third.GetPutFragment{Size: o.Size, Hash: o.Hash, Url: urls[i]}
- }
- var validTime int64
- if up.ValidTime != nil {
- validTime = up.ValidTime.UnixMilli()
- }
- return &third.GetPutResp{
- FragmentSize: up.FragmentSize,
- Size: up.ObjectSize,
- Name: up.Name,
- Hash: up.Hash,
- Fragments: fragments,
- PutURLsHash: up.PutURLsHash,
- ContentType: up.ContentType,
- ValidTime: validTime,
- }, nil
-}
-
-func (c *s3Database) ConfirmPut(ctx context.Context, req *third.ConfirmPutReq) (_ *third.ConfirmPutResp, _err error) {
- put, err := c.put.Take(ctx, req.PutID)
- if err != nil {
- return nil, err
- }
- _, pack := c.getFragmentNum(put.FragmentSize, put.ObjectSize)
- defer func() {
- if _err == nil {
- // 清理上传的碎片
- err := c.obj.DeleteObject(ctx, &obj.BucketObject{Bucket: c.obj.TempBucket(), Name: put.Path})
- if err != nil {
- log.ZError(ctx, "deleteObject failed", err, "Bucket", c.obj.TempBucket(), "Path", put.Path)
- }
- }
- }()
- now := time.Now().UnixMilli()
- if put.EffectiveTime.UnixMilli() < now {
- return nil, errs.ErrFileUploadedExpired.Wrap("put expired")
- }
- if put.ValidTime != nil && put.ValidTime.UnixMilli() < now {
- return nil, errs.ErrFileUploadedExpired.Wrap("object expired")
- }
- if hash, err := c.hash.Take(ctx, put.Hash, c.obj.Name()); err == nil {
- o := relation.ObjectInfoModel{
- Name: put.Name,
- Hash: hash.Hash,
- ValidTime: put.ValidTime,
- ContentType: put.ContentType,
- CreateTime: time.Now(),
- }
- if err := c.info.SetObject(ctx, &o); err != nil {
- return nil, err
- }
- defer func() {
- err := c.obj.DeleteObject(ctx, &obj.BucketObject{
- Bucket: c.obj.TempBucket(),
- Name: put.Path,
- })
- if err != nil {
- log.ZError(ctx, "DeleteObject", err, "Bucket", c.obj.TempBucket(), "Path", put.Path)
- }
- }()
- // 服务端已存在
- return &third.ConfirmPutResp{
- Url: c.urlName(o.Name),
- }, nil
- } else if !c.isNotFound(err) {
- return nil, err
- }
- src := make([]obj.BucketObject, pack)
- for i := 0; i < pack; i++ {
- name := path.Join(put.Path, c.fragmentName(i))
- o, err := c.obj.GetObjectInfo(ctx, &obj.BucketObject{
- Bucket: c.obj.TempBucket(),
- Name: name,
- })
- if err != nil {
- return nil, err
- }
- if i+1 == pack { // 最后一个
- size := put.ObjectSize - put.FragmentSize*int64(i)
- if size != o.Size {
- return nil, fmt.Errorf("last fragment %d size %d not equal to %d hash %s", i, o.Size, size, o.Hash)
- }
- } else {
- if o.Size != put.FragmentSize {
- return nil, fmt.Errorf("fragment %d size %d not equal to %d hash %s", i, o.Size, put.FragmentSize, o.Hash)
- }
- }
- src[i] = obj.BucketObject{
- Bucket: c.obj.TempBucket(),
- Name: name,
- }
- }
- dst := &obj.BucketObject{
- Bucket: c.obj.DataBucket(),
- Name: c.HashName(put.Hash),
- }
- if len(src) == 1 { // 未分片直接触发copy
- // 检查数据完整性,避免脏数据
- o, err := c.obj.GetObjectInfo(ctx, &src[0])
- if err != nil {
- return nil, err
- }
- if put.ObjectSize != o.Size {
- return nil, fmt.Errorf("size mismatching should %d reality %d", put.ObjectSize, o.Size)
- }
- if put.Hash != o.Hash {
- return nil, fmt.Errorf("hash mismatching should %s reality %s", put.Hash, o.Hash)
- }
- if err := c.obj.CopyObject(ctx, &src[0], dst); err != nil {
- return nil, err
- }
- } else {
- tempBucket := &obj.BucketObject{
- Bucket: c.obj.TempBucket(),
- Name: path.Join(put.Path, "merge_"+c.UUID()),
- }
- defer func() { // 清理合成的文件
- if err := c.obj.DeleteObject(ctx, tempBucket); err != nil {
- log.ZError(ctx, "DeleteObject", err, "Bucket", tempBucket.Bucket, "Path", tempBucket.Name)
- }
- }()
- err := c.obj.ComposeObject(ctx, src, tempBucket)
- if err != nil {
- return nil, err
- }
- info, err := c.obj.GetObjectInfo(ctx, tempBucket)
- if err != nil {
- return nil, err
- }
- if put.ObjectSize != info.Size {
- return nil, fmt.Errorf("size mismatch should %d reality %d", put.ObjectSize, info.Size)
- }
- if put.Hash != info.Hash {
- return nil, fmt.Errorf("hash mismatch should %s reality %s", put.Hash, info.Hash)
- }
- if err := c.obj.CopyObject(ctx, tempBucket, dst); err != nil {
- return nil, err
- }
- }
- h := &relation.ObjectHashModel{
- Hash: put.Hash,
- Engine: c.obj.Name(),
- Size: put.ObjectSize,
- Bucket: c.obj.DataBucket(),
- Name: dst.Name,
- CreateTime: time.Now(),
- }
- if err := c.hash.Create(ctx, []*relation.ObjectHashModel{h}); err != nil {
- return nil, err
- }
- o := &relation.ObjectInfoModel{
- Name: put.Name,
- Hash: put.Hash,
- ContentType: put.ContentType,
- ValidTime: put.ValidTime,
- CreateTime: time.Now(),
- }
- if err := c.info.SetObject(ctx, o); err != nil {
- return nil, err
- }
- if err := c.put.DelPut(ctx, []string{put.PutID}); err != nil {
- log.ZError(ctx, "DelPut", err, "PutID", put.PutID)
- }
- return &third.ConfirmPutResp{
- Url: c.urlName(o.Name),
- }, nil
-}
-
-func (c *s3Database) GetUrl(ctx context.Context, req *third.GetUrlReq) (*third.GetUrlResp, error) {
- info, err := c.info.Take(ctx, req.Name)
- if err != nil {
- return nil, err
- }
- if info.ValidTime != nil && info.ValidTime.Before(time.Now()) {
- return nil, errs.ErrRecordNotFound.Wrap("object expired")
- }
- hash, err := c.hash.Take(ctx, info.Hash, c.obj.Name())
- if err != nil {
- return nil, err
- }
- opt := obj.HeaderOption{ContentType: info.ContentType}
- if req.Attachment {
- opt.Filename = info.Name
- }
- u, err := c.obj.PresignedGetURL(ctx, hash.Bucket, hash.Name, time.Duration(req.Expires)*time.Millisecond, &opt)
- if err != nil {
- return nil, err
- }
- return &third.GetUrlResp{
- Url: u,
- Size: hash.Size,
- Hash: hash.Hash,
- }, nil
-}
-
-func (c *s3Database) CleanExpirationObject(ctx context.Context, t time.Time) {
- // 清理上传产生的临时文件
- c.cleanPutTemp(ctx, t, 10)
- // 清理hash引用全过期的文件
- c.cleanExpirationObject(ctx, t)
- // 清理没有引用的hash对象
- c.clearNoCitation(ctx, c.obj.Name(), 10)
-}
-
-func (c *s3Database) cleanPutTemp(ctx context.Context, t time.Time, num int) {
- for {
- puts, err := c.put.FindExpirationPut(ctx, t, num)
- if err != nil {
- log.ZError(ctx, "FindExpirationPut", err, "Time", t, "Num", num)
- return
- }
- if len(puts) == 0 {
- return
- }
- for _, put := range puts {
- err := c.obj.DeleteObject(ctx, &obj.BucketObject{Bucket: c.obj.TempBucket(), Name: put.Path})
- if err != nil {
- log.ZError(ctx, "DeleteObject", err, "Bucket", c.obj.TempBucket(), "Path", put.Path)
- return
- }
- }
- ids := utils.Slice(puts, func(e *relation.ObjectPutModel) string { return e.PutID })
- err = c.put.DelPut(ctx, ids)
- if err != nil {
- log.ZError(ctx, "DelPut", err, "PutID", ids)
- return
- }
- }
-}
-
-func (c *s3Database) cleanExpirationObject(ctx context.Context, t time.Time) {
- err := c.info.DeleteExpiration(ctx, t)
- if err != nil {
- log.ZError(ctx, "DeleteExpiration", err, "Time", t)
- }
-}
-
-func (c *s3Database) clearNoCitation(ctx context.Context, engine string, limit int) {
- for {
- list, err := c.hash.DeleteNoCitation(ctx, engine, limit)
- if err != nil {
- log.ZError(ctx, "DeleteNoCitation", err, "Engine", engine, "Limit", limit)
- return
- }
- if len(list) == 0 {
- return
- }
- var hasErr bool
- for _, h := range list {
- err := c.obj.DeleteObject(ctx, &obj.BucketObject{Bucket: h.Bucket, Name: h.Name})
- if err != nil {
- hasErr = true
- log.ZError(ctx, "DeleteObject", err, "Bucket", h.Bucket, "Path", h.Name)
- continue
- }
- }
- if hasErr {
- return
- }
- }
-}
-
-func (c *s3Database) GetHashInfo(ctx context.Context, req *third.GetHashInfoReq) (*third.GetHashInfoResp, error) {
- if err := c.CheckHash(req.Hash); err != nil {
- return nil, err
- }
- o, err := c.hash.Take(ctx, req.Hash, c.obj.Name())
- if err != nil {
- return nil, err
- }
- return &third.GetHashInfoResp{
- Hash: o.Hash,
- Size: o.Size,
- }, nil
-}
diff --git a/pkg/common/db/obj/minio.go b/pkg/common/db/obj/minio.go
deleted file mode 100644
index 8e28896bd..000000000
--- a/pkg/common/db/obj/minio.go
+++ /dev/null
@@ -1,231 +0,0 @@
-package obj
-
-import (
- "context"
- "errors"
- "fmt"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "github.com/minio/minio-go/v7"
- "github.com/minio/minio-go/v7/pkg/credentials"
- "github.com/minio/minio-go/v7/pkg/s3utils"
- "io"
- "net/http"
- "net/url"
- "time"
-)
-
-func NewMinioInterface() (Interface, error) {
- conf := config.Config.Object.Minio
- u, err := url.Parse(conf.Endpoint)
- if err != nil {
- return nil, fmt.Errorf("minio endpoint parse %w", err)
- }
- if u.Scheme != "http" && u.Scheme != "https" {
- return nil, fmt.Errorf("invalid minio endpoint scheme %s", u.Scheme)
- }
- client, err := minio.New(u.Host, &minio.Options{
- Creds: credentials.NewStaticV4(conf.AccessKeyID, conf.SecretAccessKey, ""),
- Secure: u.Scheme == "https",
- })
- if err != nil {
- return nil, fmt.Errorf("minio new client %w", err)
- }
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
- defer cancel()
- initBucket := func(ctx context.Context) error {
- for _, bucket := range utils.Distinct([]string{conf.TempBucket, conf.DataBucket}) {
- exists, err := client.BucketExists(ctx, bucket)
- if err != nil {
- return fmt.Errorf("minio bucket %s exists %w", bucket, err)
- }
- if exists {
- continue
- }
- opt := minio.MakeBucketOptions{
- Region: conf.Location,
- ObjectLocking: conf.IsDistributedMod,
- }
- if err := client.MakeBucket(ctx, bucket, opt); err != nil {
- return fmt.Errorf("minio make bucket %s %w", bucket, err)
- }
- }
- return nil
- }
- if err := initBucket(ctx); err != nil {
- fmt.Println("minio init error:", err)
- }
- return &minioImpl{
- client: client,
- tempBucket: conf.TempBucket,
- dataBucket: conf.DataBucket,
- }, nil
-}
-
-type minioImpl struct {
- tempBucket string // 上传桶
- dataBucket string // 永久桶
- urlstr string // 访问地址
- client *minio.Client
-}
-
-func (m *minioImpl) Name() string {
- return "minio"
-}
-
-func (m *minioImpl) MinFragmentSize() int64 {
- return 1024 * 1024 * 5 // 每个分片最小大小 minio.absMinPartSize
-}
-
-func (m *minioImpl) MaxFragmentNum() int {
- return 1000 // 最大分片数量 minio.maxPartsCount
-}
-
-func (m *minioImpl) MinExpirationTime() time.Duration {
- return time.Hour * 24
-}
-
-func (m *minioImpl) TempBucket() string {
- return m.tempBucket
-}
-
-func (m *minioImpl) DataBucket() string {
- return m.dataBucket
-}
-
-func (m *minioImpl) PresignedGetURL(ctx context.Context, bucket string, name string, expires time.Duration, opt *HeaderOption) (string, error) {
- var reqParams url.Values
- if opt != nil {
- reqParams = make(url.Values)
- if opt.ContentType != "" {
- reqParams.Set("response-content-type", opt.ContentType)
- }
- if opt.Filename != "" {
- reqParams.Set("response-content-disposition", "attachment;filename="+opt.Filename)
- }
- }
- u, err := m.client.PresignedGetObject(ctx, bucket, name, expires, reqParams)
- if err != nil {
- return "", err
- }
- return u.String(), nil
-}
-
-func (m *minioImpl) PresignedPutURL(ctx context.Context, args *ApplyPutArgs) (string, error) {
- if args.Effective <= 0 {
- return "", errors.New("EffectiveTime <= 0")
- }
- _, err := m.GetObjectInfo(ctx, &BucketObject{
- Bucket: m.tempBucket,
- Name: args.Name,
- })
- if err == nil {
- return "", fmt.Errorf("minio bucket %s name %s already exists", args.Bucket, args.Name)
- } else if !m.IsNotFound(err) {
- return "", err
- }
- u, err := m.client.PresignedPutObject(ctx, m.tempBucket, args.Name, args.Effective)
- if err != nil {
- return "", fmt.Errorf("minio apply error: %w", err)
- }
- return u.String(), nil
-}
-
-func (m *minioImpl) GetObjectInfo(ctx context.Context, args *BucketObject) (*ObjectInfo, error) {
- info, err := m.client.StatObject(ctx, args.Bucket, args.Name, minio.StatObjectOptions{})
- if err != nil {
- return nil, err
- }
- return &ObjectInfo{
- Size: info.Size,
- Hash: info.ETag,
- }, nil
-}
-
-func (m *minioImpl) CopyObject(ctx context.Context, src *BucketObject, dst *BucketObject) error {
- _, err := m.client.CopyObject(ctx, minio.CopyDestOptions{
- Bucket: dst.Bucket,
- Object: dst.Name,
- }, minio.CopySrcOptions{
- Bucket: src.Bucket,
- Object: src.Name,
- })
- return err
-}
-
-func (m *minioImpl) DeleteObject(ctx context.Context, info *BucketObject) error {
- return m.client.RemoveObject(ctx, info.Bucket, info.Name, minio.RemoveObjectOptions{})
-}
-
-func (m *minioImpl) MoveObjectInfo(ctx context.Context, src *BucketObject, dst *BucketObject) error {
- if err := m.CopyObject(ctx, src, dst); err != nil {
- return err
- }
- return m.DeleteObject(ctx, src)
-}
-
-func (m *minioImpl) ComposeObject(ctx context.Context, src []BucketObject, dst *BucketObject) error {
- destOptions := minio.CopyDestOptions{
- Bucket: dst.Bucket,
- Object: dst.Name + ".temp",
- }
- sources := make([]minio.CopySrcOptions, len(src))
- for i, s := range src {
- sources[i] = minio.CopySrcOptions{
- Bucket: s.Bucket,
- Object: s.Name,
- }
- }
- _, err := m.client.ComposeObject(ctx, destOptions, sources...)
- if err != nil {
- return err
- }
- return m.MoveObjectInfo(ctx, &BucketObject{
- Bucket: destOptions.Bucket,
- Name: destOptions.Object,
- }, &BucketObject{
- Bucket: dst.Bucket,
- Name: dst.Name,
- })
-}
-
-func (m *minioImpl) IsNotFound(err error) bool {
- if err == nil {
- return false
- }
- switch e := err.(type) {
- case minio.ErrorResponse:
- return e.StatusCode == http.StatusNotFound || e.Code == "NoSuchKey"
- case *minio.ErrorResponse:
- return e.StatusCode == http.StatusNotFound || e.Code == "NoSuchKey"
- default:
- return false
- }
-}
-
-func (m *minioImpl) PutObject(ctx context.Context, info *BucketObject, reader io.Reader, size int64) (*ObjectInfo, error) {
- update, err := m.client.PutObject(ctx, info.Bucket, info.Name, reader, size, minio.PutObjectOptions{})
- if err != nil {
- return nil, err
- }
- return &ObjectInfo{
- Size: update.Size,
- Hash: update.ETag,
- }, nil
-}
-
-func (m *minioImpl) GetObject(ctx context.Context, info *BucketObject) (SizeReader, error) {
- object, err := m.client.GetObject(ctx, info.Bucket, info.Name, minio.GetObjectOptions{})
- if err != nil {
- return nil, err
- }
- stat, err := object.Stat()
- if err != nil {
- return nil, err
- }
- return NewSizeReader(object, stat.Size), nil
-}
-
-func (m *minioImpl) CheckName(name string) error {
- return s3utils.CheckValidObjectName(name)
-}
diff --git a/pkg/common/db/obj/obj.go b/pkg/common/db/obj/obj.go
deleted file mode 100644
index f10a42a1a..000000000
--- a/pkg/common/db/obj/obj.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package obj
-
-import (
- "context"
- "io"
- "net/http"
- "time"
-)
-
-type BucketObject struct {
- Bucket string `json:"bucket"`
- Name string `json:"name"`
-}
-
-type ApplyPutArgs struct {
- Bucket string
- Name string
- Effective time.Duration // 申请有效时间
- Header http.Header // header
- MaxObjectSize int64
-}
-
-type HeaderOption struct {
- ContentType string
- Filename string
-}
-
-type ObjectInfo struct {
- Size int64
- Hash string
-}
-
-type SizeReader interface {
- io.ReadCloser
- Size() int64
-}
-
-func NewSizeReader(r io.ReadCloser, size int64) SizeReader {
- if r == nil {
- return nil
- }
- return &sizeReader{
- size: size,
- ReadCloser: r,
- }
-}
-
-type sizeReader struct {
- size int64
- io.ReadCloser
-}
-
-func (r *sizeReader) Size() int64 {
- return r.size
-}
-
-type Interface interface {
- // Name 存储名字
- Name() string
- // MinFragmentSize 最小允许的分片大小
- MinFragmentSize() int64
- // MaxFragmentNum 最大允许的分片数量
- MaxFragmentNum() int
- // MinExpirationTime 最小过期时间
- MinExpirationTime() time.Duration
- // TempBucket 临时桶名,用于上传
- TempBucket() string
- // DataBucket 永久存储的桶名
- DataBucket() string
- // PresignedGetURL 预签名授权 通过桶名和对象名返回URL
- PresignedGetURL(ctx context.Context, bucket string, name string, expires time.Duration, opt *HeaderOption) (string, error)
- // PresignedPutURL 预签名授权 申请上传,返回PUT的上传地址
- PresignedPutURL(ctx context.Context, args *ApplyPutArgs) (string, error)
- // GetObjectInfo 获取对象信息
- GetObjectInfo(ctx context.Context, args *BucketObject) (*ObjectInfo, error)
- // CopyObject 复制对象
- CopyObject(ctx context.Context, src *BucketObject, dst *BucketObject) error
- // DeleteObject 删除对象(不存在返回nil)
- DeleteObject(ctx context.Context, info *BucketObject) error
- // ComposeObject 合并对象
- ComposeObject(ctx context.Context, src []BucketObject, dst *BucketObject) error
- // IsNotFound 判断是不是不存在导致的错误
- IsNotFound(err error) bool
- // CheckName 检查名字是否可用
- CheckName(name string) error
- // PutObject 上传文件
- PutObject(ctx context.Context, info *BucketObject, reader io.Reader, size int64) (*ObjectInfo, error)
- // GetObject 下载文件
- GetObject(ctx context.Context, info *BucketObject) (SizeReader, error)
-}
diff --git a/pkg/common/db/obj/tx_oss.go b/pkg/common/db/obj/tx_oss.go
deleted file mode 100644
index d80fea05e..000000000
--- a/pkg/common/db/obj/tx_oss.go
+++ /dev/null
@@ -1,212 +0,0 @@
-package obj
-
-import (
- "context"
- "errors"
- "fmt"
- "io"
- "net/http"
- "net/url"
- "strconv"
- "time"
-
- "github.com/minio/minio-go/v7/pkg/s3utils"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
- "github.com/tencentyun/cos-go-sdk-v5"
-)
-
-var conf = config.Config.Object.Tencent
-
-func create_url(bucket, region, source string) string {
- return fmt.Sprintf("https://%s.cos.%s.myqcloud.com/%s", bucket, region, source)
-}
-
-func NewCosClient() (Interface, error) {
- u, err := url.Parse(create_url(conf.Bucket, conf.Region, ""))
- if err != nil {
- return nil, fmt.Errorf("tencent cos url parse %w", err)
- }
- b := &cos.BaseURL{BucketURL: u}
- c := cos.NewClient(b, &http.Client{
- Transport: &cos.AuthorizationTransport{
- SecretID: conf.SecretID, // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://cloud.tencent.com/document/product/598/37140
- SecretKey: conf.SecretKey, // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://cloud.tencent.com/document/product/598/37140
- },
- })
- return &cosImpl{
- client: c,
- tempBucket: conf.Bucket,
- }, err
-}
-
-type cosImpl struct {
- tempBucket string // 上传桶
- //dataBucket string // 永久桶
- urlstr string // 访问地址
- client *cos.Client
-}
-
-func (c *cosImpl) Name() string {
- return "tx_oss cos"
-}
-
-func (c *cosImpl) MinFragmentSize() int64 {
- return 1024 * 1024 * 5 // 每个分片最小大小 tx_oss.absMinPartSize
-}
-
-func (c *cosImpl) MaxFragmentNum() int {
- return 1000 // 最大分片数量 tx_oss.maxPartsCount
-}
-
-func (c *cosImpl) MinExpirationTime() time.Duration {
- return time.Hour * 24
-}
-
-func (c *cosImpl) TempBucket() string {
- return c.tempBucket
-}
-
-func (c *cosImpl) DataBucket() string {
- //return c.dataBucket
- return ""
-}
-
-func (c *cosImpl) PresignedGetURL(ctx context.Context, bucket string, name string, expires time.Duration, opt *HeaderOption) (string, error) {
- // 参考文档:https://cloud.tencent.com/document/product/436/14116
- // 获取对象访问 URL,用于匿名下载和分发
- presignedGetURL, err := c.client.Object.GetPresignedURL(ctx, http.MethodGet, name, conf.SecretID, conf.SecretKey, time.Hour, nil)
- if err != nil {
- return "", err
- }
- return presignedGetURL.String(), nil
-}
-
-func (c *cosImpl) PresignedPutURL(ctx context.Context, args *ApplyPutArgs) (string, error) {
- // 参考文档:https://cloud.tencent.com/document/product/436/14114
-
- if args.Effective <= 0 {
- return "", errors.New("EffectiveTime <= 0")
- }
- _, err := c.GetObjectInfo(ctx, &BucketObject{
- Bucket: c.tempBucket,
- Name: args.Name,
- })
- if err == nil {
- return "", fmt.Errorf("minio bucket %s name %s already exists", args.Bucket, args.Name)
- } else if !c.IsNotFound(err) {
- return "", err
- }
- // 获取预签名 URL
- presignedPutURL, err := c.client.Object.GetPresignedURL(ctx, http.MethodPut, args.Name, conf.SecretID, conf.SecretKey, time.Hour, nil)
- if err != nil {
- return "", fmt.Errorf("minio apply error: %w", err)
- }
- return presignedPutURL.String(), nil
-}
-
-func (c *cosImpl) GetObjectInfo(ctx context.Context, args *BucketObject) (*ObjectInfo, error) {
- // https://cloud.tencent.com/document/product/436/7745
- // 新增参数 id 代表指定版本,如果不指定,默认查询对象最新版本
- head, err := c.client.Object.Head(ctx, args.Name, nil, "")
- if err != nil {
- return nil, err
- }
- size, _ := strconv.ParseInt(head.Header.Get("Content-Length"), 10, 64)
- return &ObjectInfo{
- Size: size,
- Hash: head.Header.Get("ETag"),
- }, nil
-}
-
-func (c *cosImpl) CopyObject(ctx context.Context, src *BucketObject, dst *BucketObject) error {
- srcURL := create_url(src.Bucket, conf.Region, src.Name)
- _, _, err := c.client.Object.Copy(ctx, dst.Name, srcURL, nil)
- if err == nil {
- _, err = c.client.Object.Delete(ctx, srcURL, nil)
- if err != nil {
- // Error
- }
- }
- return err
-}
-
-func (c *cosImpl) DeleteObject(ctx context.Context, info *BucketObject) error {
- _, err := c.client.Object.Delete(ctx, info.Name)
- return err
-}
-
-func (c *cosImpl) ComposeObject(ctx context.Context, src []BucketObject, dst *BucketObject) error {
- //TODO implement me
- panic("implement me")
-}
-
-func (c *cosImpl) IsNotFound(err error) bool {
- ok, err := c.client.Object.IsExist(context.Background(), c.tempBucket)
- if err == nil && ok {
- fmt.Printf("object exists\n")
- return true
- } else if err != nil {
- fmt.Printf("head object failed: %v\n", err)
- return false
- } else {
- fmt.Printf("object does not exist\n")
- return false
- }
-}
-
-func (c *cosImpl) CheckName(name string) error {
- return s3utils.CheckValidObjectName(name)
-}
-
-func (c *cosImpl) PutObject(ctx context.Context, info *BucketObject, reader io.Reader, size int64) (*ObjectInfo, error) {
- /*// 采用高级接口, 无需用户指定 size
- update, _, err := c.client.Object.Upload(
- ctx, info.Name, info.Bucket, nil,
- )
- if err != nil {
- return nil, err
- }
- return &ObjectInfo{
- Hash: update.ETag,
- }, nil*/
- // Case1 使用 Put 上传对象
- opt := &cos.ObjectPutOptions{
- ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{
- ContentType: "text/html",
- },
- ACLHeaderOptions: &cos.ACLHeaderOptions{
- // 如果不是必要操作,建议上传文件时不要给单个文件设置权限,避免达到限制。若不设置默认继承桶的权限。
- XCosACL: "private",
- },
- }
- resp, err := c.client.Object.Put(ctx, info.Name, reader, opt)
- if err != nil {
- return nil, err
- }
- return &ObjectInfo{
- Hash: resp.Header.Get("ETag"),
- }, nil
-}
-
-func (c *cosImpl) GetObject(ctx context.Context, info *BucketObject) (SizeReader, error) {
- opt := &cos.MultiDownloadOptions{
- ThreadPoolSize: 5,
- }
- update, err := c.client.Object.Download(
- ctx, info.Name, info.Bucket, opt,
- )
- if err != nil {
- return nil, err
- }
- size, _ := strconv.ParseInt(update.Header.Get("Content-Length"), 10, 64)
- body := update.Body
- if body == nil {
- return nil, errors.New("response body is nil")
- }
- readCloser, ok := body.(io.ReadCloser)
- if !ok {
- return nil, errors.New("failed to convert response to ReadCloser")
- }
- return NewSizeReader(readCloser, size), nil
-}
diff --git a/pkg/common/db/relation/conversation_model.go b/pkg/common/db/relation/conversation_model.go
index f8522506a..c197f8582 100644
--- a/pkg/common/db/relation/conversation_model.go
+++ b/pkg/common/db/relation/conversation_model.go
@@ -85,12 +85,13 @@ func (c *ConversationGorm) GetUserAllHasReadSeqs(ctx context.Context, ownerUserI
var conversations []*relation.ConversationModel
err = utils.Wrap(c.db(ctx).Where("owner_user_id = ?", ownerUserID).Select("conversation_id", "has_read_seq").Find(&conversations).Error, "")
hasReadSeqs = make(map[string]int64, len(conversations))
- // for _, conversation := range conversations {
- // hasReadSeqs[conversation.ConversationID] = conversation.HasReadSeq
- // }
return hasReadSeqs, err
}
func (c *ConversationGorm) GetConversationsByConversationID(ctx context.Context, conversationIDs []string) (conversations []*relation.ConversationModel, err error) {
return conversations, utils.Wrap(c.db(ctx).Where("conversation_id IN (?)", conversationIDs).Find(&conversations).Error, "")
}
+
+func (c *ConversationGorm) GetConversationIDsNeedDestruct(ctx context.Context) (conversations []*relation.ConversationModel, err error) {
+ return conversations, utils.Wrap(c.db(ctx).Where("is_msg_destruct = 1 && UNIX_TIMESTAMP(NOW()) > (msg_destruct_time + UNIX_TIMESTAMP(latest_msg_destruct_time)) && msg_destruct_time != 0").Error, "")
+}
diff --git a/pkg/common/db/relation/object_hash_model.go b/pkg/common/db/relation/object_hash_model.go
deleted file mode 100644
index e122d9cec..000000000
--- a/pkg/common/db/relation/object_hash_model.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package relation
-
-import (
- "context"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "gorm.io/gorm"
-)
-
-type ObjectHashGorm struct {
- *MetaDB
-}
-
-func NewObjectHash(db *gorm.DB) relation.ObjectHashModelInterface {
- return &ObjectHashGorm{
- NewMetaDB(db, &relation.ObjectHashModel{}),
- }
-}
-
-func (o *ObjectHashGorm) NewTx(tx any) relation.ObjectHashModelInterface {
- return &ObjectHashGorm{
- NewMetaDB(tx.(*gorm.DB), &relation.ObjectHashModel{}),
- }
-}
-
-func (o *ObjectHashGorm) Take(ctx context.Context, hash string, engine string) (oh *relation.ObjectHashModel, err error) {
- oh = &relation.ObjectHashModel{}
- return oh, utils.Wrap1(o.DB.Where("hash = ? and engine = ?", hash, engine).Take(oh).Error)
-}
-
-func (o *ObjectHashGorm) Create(ctx context.Context, h []*relation.ObjectHashModel) (err error) {
- return utils.Wrap1(o.DB.Create(h).Error)
-}
-
-func (o *ObjectHashGorm) DeleteNoCitation(ctx context.Context, engine string, num int) (list []*relation.ObjectHashModel, err error) {
- err = o.DB.Table(relation.ObjectHashModelTableName, "as h").Select("h.*").
- Joins("LEFT JOIN "+relation.ObjectInfoModelTableName+" as i ON h.hash = i.hash").
- Where("h.engine = ? AND i.hash IS NULL", engine).
- Limit(num).
- Find(&list).Error
- return list, utils.Wrap1(err)
-}
diff --git a/pkg/common/db/relation/object_info_model.go b/pkg/common/db/relation/object_info_model.go
deleted file mode 100644
index d2a751cff..000000000
--- a/pkg/common/db/relation/object_info_model.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package relation
-
-import (
- "context"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "gorm.io/gorm"
- "time"
-)
-
-type ObjectInfoGorm struct {
- *MetaDB
-}
-
-func NewObjectInfo(db *gorm.DB) relation.ObjectInfoModelInterface {
- return &ObjectInfoGorm{
- NewMetaDB(db, &relation.ObjectInfoModel{}),
- }
-}
-
-func (o *ObjectInfoGorm) NewTx(tx any) relation.ObjectInfoModelInterface {
- return &ObjectInfoGorm{
- NewMetaDB(tx.(*gorm.DB), &relation.ObjectInfoModel{}),
- }
-}
-
-func (o *ObjectInfoGorm) SetObject(ctx context.Context, obj *relation.ObjectInfoModel) (err error) {
- if err := o.DB.WithContext(ctx).Where("name = ?", obj.Name).Delete(&relation.ObjectInfoModel{}).Error; err != nil {
- return errs.Wrap(err)
- }
- return errs.Wrap(o.DB.WithContext(ctx).Create(obj).Error)
- //return errs.Wrap(o.DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
- // if err := tx.Where("name = ?", obj.Name).Delete(&relation.ObjectInfoModel{}).Error; err != nil {
- // return errs.Wrap(err)
- // }
- // return errs.Wrap(tx.Create(obj).Error)
- //}))
-}
-
-func (o *ObjectInfoGorm) Take(ctx context.Context, name string) (info *relation.ObjectInfoModel, err error) {
- info = &relation.ObjectInfoModel{}
- return info, utils.Wrap1(o.DB.WithContext(ctx).Where("name = ?", name).Take(info).Error)
-}
-
-func (o *ObjectInfoGorm) DeleteExpiration(ctx context.Context, expiration time.Time) (err error) {
- return utils.Wrap1(o.DB.WithContext(ctx).Where("expiration_time IS NOT NULL AND expiration_time <= ?", expiration).Delete(&relation.ObjectInfoModel{}).Error)
-}
diff --git a/pkg/common/db/relation/object_model.go b/pkg/common/db/relation/object_model.go
new file mode 100644
index 000000000..cfbd011b8
--- /dev/null
+++ b/pkg/common/db/relation/object_model.go
@@ -0,0 +1,36 @@
+package relation
+
+import (
+ "context"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
+ "gorm.io/gorm"
+)
+
+type ObjectInfoGorm struct {
+ *MetaDB
+}
+
+func NewObjectInfo(db *gorm.DB) relation.ObjectInfoModelInterface {
+ return &ObjectInfoGorm{
+ NewMetaDB(db, &relation.ObjectModel{}),
+ }
+}
+
+func (o *ObjectInfoGorm) NewTx(tx any) relation.ObjectInfoModelInterface {
+ return &ObjectInfoGorm{
+ NewMetaDB(tx.(*gorm.DB), &relation.ObjectModel{}),
+ }
+}
+
+func (o *ObjectInfoGorm) SetObject(ctx context.Context, obj *relation.ObjectModel) (err error) {
+ if err := o.DB.WithContext(ctx).Where("name = ?", obj.Name).FirstOrCreate(obj).Error; err != nil {
+ return errs.Wrap(err)
+ }
+ return nil
+}
+
+func (o *ObjectInfoGorm) Take(ctx context.Context, name string) (info *relation.ObjectModel, err error) {
+ info = &relation.ObjectModel{}
+ return info, errs.Wrap(o.DB.WithContext(ctx).Where("name = ?", name).Take(info).Error)
+}
diff --git a/pkg/common/db/relation/object_put_model.go b/pkg/common/db/relation/object_put_model.go
deleted file mode 100644
index 82f98624c..000000000
--- a/pkg/common/db/relation/object_put_model.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package relation
-
-import (
- "context"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "gorm.io/gorm"
- "time"
-)
-
-type ObjectPutGorm struct {
- *MetaDB
-}
-
-func NewObjectPut(db *gorm.DB) relation.ObjectPutModelInterface {
- return &ObjectPutGorm{
- NewMetaDB(db, &relation.ObjectPutModel{}),
- }
-}
-
-func (o *ObjectPutGorm) NewTx(tx any) relation.ObjectPutModelInterface {
- return &ObjectPutGorm{
- NewMetaDB(tx.(*gorm.DB), &relation.ObjectPutModel{}),
- }
-}
-
-func (o *ObjectPutGorm) Create(ctx context.Context, m []*relation.ObjectPutModel) (err error) {
- return utils.Wrap1(o.DB.Create(m).Error)
-}
-
-func (o *ObjectPutGorm) Take(ctx context.Context, putID string) (put *relation.ObjectPutModel, err error) {
- put = &relation.ObjectPutModel{}
- return put, utils.Wrap1(o.DB.Where("put_id = ?", putID).Take(put).Error)
-}
-
-func (o *ObjectPutGorm) SetCompleted(ctx context.Context, putID string) (err error) {
- return utils.Wrap1(o.DB.Model(&relation.ObjectPutModel{}).Where("put_id = ?", putID).Update("complete", true).Error)
-}
-
-func (o *ObjectPutGorm) FindExpirationPut(ctx context.Context, expirationTime time.Time, num int) (list []*relation.ObjectPutModel, err error) {
- err = o.DB.Where("effective_time <= ?", expirationTime).Limit(num).Find(&list).Error
- return list, utils.Wrap1(err)
-}
-
-func (o *ObjectPutGorm) DelPut(ctx context.Context, ids []string) (err error) {
- return utils.Wrap1(o.DB.Where("put_id IN ?", ids).Delete(&relation.ObjectPutModel{}).Error)
-}
diff --git a/pkg/common/db/s3/cont/consts.go b/pkg/common/db/s3/cont/consts.go
new file mode 100644
index 000000000..144370a2d
--- /dev/null
+++ b/pkg/common/db/s3/cont/consts.go
@@ -0,0 +1,9 @@
+package cont
+
+const (
+ hashPath = "openim/data/hash/"
+ tempPath = "openim/temp/"
+ UploadTypeMultipart = 1 // 分片上传
+ UploadTypePresigned = 2 // 预签名上传
+ partSeparator = ","
+)
diff --git a/pkg/common/db/s3/cont/controller.go b/pkg/common/db/s3/cont/controller.go
new file mode 100644
index 000000000..9ff0bfdfb
--- /dev/null
+++ b/pkg/common/db/s3/cont/controller.go
@@ -0,0 +1,243 @@
+package cont
+
+import (
+ "context"
+ "crypto/md5"
+ "encoding/hex"
+ "errors"
+ "fmt"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
+ "github.com/google/uuid"
+ "path"
+ "strings"
+ "time"
+)
+
+func New(impl s3.Interface) *Controller {
+ return &Controller{impl: impl}
+}
+
+type Controller struct {
+ impl s3.Interface
+}
+
+func (c *Controller) HashPath(md5 string) string {
+ return path.Join(hashPath, md5)
+}
+
+func (c *Controller) NowPath() string {
+ now := time.Now()
+ return path.Join(
+ fmt.Sprintf("%04d", now.Year()),
+ fmt.Sprintf("%02d", now.Month()),
+ fmt.Sprintf("%02d", now.Day()),
+ fmt.Sprintf("%02d", now.Hour()),
+ fmt.Sprintf("%02d", now.Minute()),
+ fmt.Sprintf("%02d", now.Second()),
+ )
+}
+
+func (c *Controller) UUID() string {
+ id := uuid.New()
+ return hex.EncodeToString(id[:])
+}
+
+func (c *Controller) PartSize(ctx context.Context, size int64) (int64, error) {
+ return c.impl.PartSize(ctx, size)
+}
+
+func (c *Controller) PartLimit() *s3.PartLimit {
+ return c.impl.PartLimit()
+}
+
+func (c *Controller) GetHashObject(ctx context.Context, hash string) (*s3.ObjectInfo, error) {
+ return c.impl.StatObject(ctx, c.HashPath(hash))
+}
+
+func (c *Controller) InitiateUpload(ctx context.Context, hash string, size int64, expire time.Duration, maxParts int) (*InitiateUploadResult, error) {
+ if size < 0 {
+ return nil, errors.New("invalid size")
+ }
+ if hashBytes, err := hex.DecodeString(hash); err != nil {
+ return nil, err
+ } else if len(hashBytes) != md5.Size {
+ return nil, errors.New("invalid md5")
+ }
+ partSize, err := c.impl.PartSize(ctx, size)
+ if err != nil {
+ return nil, err
+ }
+ partNumber := int(size / partSize)
+ if size%partSize > 0 {
+ partNumber++
+ }
+ if maxParts > 0 && partNumber > 0 && partNumber < maxParts {
+ return nil, errors.New(fmt.Sprintf("too many parts: %d", partNumber))
+ }
+ if info, err := c.impl.StatObject(ctx, c.HashPath(hash)); err == nil {
+ return nil, &HashAlreadyExistsError{Object: info}
+ } else if !c.impl.IsNotFound(err) {
+ return nil, err
+ }
+ if size <= partSize {
+ // 预签名上传
+ key := path.Join(tempPath, c.NowPath(), fmt.Sprintf("%s_%d_%s.presigned", hash, size, c.UUID()))
+ rawURL, err := c.impl.PresignedPutObject(ctx, key, expire)
+ if err != nil {
+ return nil, err
+ }
+ return &InitiateUploadResult{
+ UploadID: newMultipartUploadID(multipartUploadID{
+ Type: UploadTypePresigned,
+ ID: "",
+ Key: key,
+ Size: size,
+ Hash: hash,
+ }),
+ PartSize: partSize,
+ Sign: &s3.AuthSignResult{
+ Parts: []s3.SignPart{
+ {
+ PartNumber: 1,
+ URL: rawURL,
+ },
+ },
+ },
+ }, nil
+ } else {
+ // 分片上传
+ upload, err := c.impl.InitiateMultipartUpload(ctx, c.HashPath(hash))
+ if err != nil {
+ return nil, err
+ }
+ if maxParts < 0 {
+ maxParts = partNumber
+ }
+ var authSign *s3.AuthSignResult
+ if maxParts > 0 {
+ partNumbers := make([]int, partNumber)
+ for i := 0; i < maxParts; i++ {
+ partNumbers[i] = i + 1
+ }
+ authSign, err = c.impl.AuthSign(ctx, upload.UploadID, upload.Key, time.Hour*24, partNumbers)
+ if err != nil {
+ return nil, err
+ }
+ }
+ return &InitiateUploadResult{
+ UploadID: newMultipartUploadID(multipartUploadID{
+ Type: UploadTypeMultipart,
+ ID: upload.UploadID,
+ Key: upload.Key,
+ Size: size,
+ Hash: hash,
+ }),
+ PartSize: partSize,
+ Sign: authSign,
+ }, nil
+ }
+}
+
+func (c *Controller) CompleteUpload(ctx context.Context, uploadID string, partHashs []string) (*UploadResult, error) {
+ defer log.ZDebug(ctx, "return")
+ upload, err := parseMultipartUploadID(uploadID)
+ if err != nil {
+ return nil, err
+ }
+ if md5Sum := md5.Sum([]byte(strings.Join(partHashs, partSeparator))); hex.EncodeToString(md5Sum[:]) != upload.Hash {
+ fmt.Println("CompleteUpload sum:", hex.EncodeToString(md5Sum[:]), "upload hash:", upload.Hash)
+ return nil, errors.New("md5 mismatching")
+ }
+ if info, err := c.impl.StatObject(ctx, c.HashPath(upload.Hash)); err == nil {
+ return &UploadResult{
+ Key: info.Key,
+ Size: info.Size,
+ Hash: info.ETag,
+ }, nil
+ } else if !c.impl.IsNotFound(err) {
+ return nil, err
+ }
+ cleanObject := make(map[string]struct{})
+ defer func() {
+ for key := range cleanObject {
+ _ = c.impl.DeleteObject(ctx, key)
+ }
+ }()
+ var targetKey string
+ switch upload.Type {
+ case UploadTypeMultipart:
+ parts := make([]s3.Part, len(partHashs))
+ for i, part := range partHashs {
+ parts[i] = s3.Part{
+ PartNumber: i + 1,
+ ETag: part,
+ }
+ }
+ // todo: 验证大小
+ result, err := c.impl.CompleteMultipartUpload(ctx, upload.ID, upload.Key, parts)
+ if err != nil {
+ return nil, err
+ }
+ targetKey = result.Key
+ case UploadTypePresigned:
+ uploadInfo, err := c.impl.StatObject(ctx, upload.Key)
+ if err != nil {
+ return nil, err
+ }
+ cleanObject[uploadInfo.Key] = struct{}{}
+ if uploadInfo.Size != upload.Size {
+ return nil, errors.New("upload size mismatching")
+ }
+ md5Sum := md5.Sum([]byte(strings.Join([]string{uploadInfo.ETag}, partSeparator)))
+ if md5val := hex.EncodeToString(md5Sum[:]); md5val != upload.Hash {
+ return nil, errs.ErrArgs.Wrap(fmt.Sprintf("md5 mismatching %s != %s", md5val, upload.Hash))
+ }
+ // 防止在这个时候,并发操作,导致文件被覆盖
+ copyInfo, err := c.impl.CopyObject(ctx, uploadInfo.Key, upload.Key+"."+c.UUID())
+ if err != nil {
+ return nil, err
+ }
+ cleanObject[copyInfo.Key] = struct{}{}
+ if copyInfo.ETag != uploadInfo.ETag {
+ return nil, errors.New("[concurrency]copy md5 mismatching")
+ }
+ hashCopyInfo, err := c.impl.CopyObject(ctx, copyInfo.Key, c.HashPath(upload.Hash))
+ if err != nil {
+ return nil, err
+ }
+ log.ZInfo(ctx, "hashCopyInfo", "value", fmt.Sprintf("%+v", hashCopyInfo))
+ targetKey = hashCopyInfo.Key
+ default:
+ return nil, errors.New("invalid upload id type")
+ }
+ return &UploadResult{
+ Key: targetKey,
+ Size: upload.Size,
+ Hash: upload.Hash,
+ }, nil
+}
+
+func (c *Controller) AuthSign(ctx context.Context, uploadID string, partNumbers []int) (*s3.AuthSignResult, error) {
+ upload, err := parseMultipartUploadID(uploadID)
+ if err != nil {
+ return nil, err
+ }
+ switch upload.Type {
+ case UploadTypeMultipart:
+ return c.impl.AuthSign(ctx, upload.ID, upload.Key, time.Hour*24, partNumbers)
+ case UploadTypePresigned:
+ return nil, errors.New("presigned id not support auth sign")
+ default:
+ return nil, errors.New("invalid upload id type")
+ }
+}
+
+func (c *Controller) IsNotFound(err error) bool {
+ return c.impl.IsNotFound(err)
+}
+
+func (c *Controller) AccessURL(ctx context.Context, name string, expire time.Duration, opt *s3.AccessURLOption) (string, error) {
+ return c.impl.AccessURL(ctx, name, expire, opt)
+}
diff --git a/pkg/common/db/s3/cont/error.go b/pkg/common/db/s3/cont/error.go
new file mode 100644
index 000000000..afd1d0eba
--- /dev/null
+++ b/pkg/common/db/s3/cont/error.go
@@ -0,0 +1,14 @@
+package cont
+
+import (
+ "fmt"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+)
+
+type HashAlreadyExistsError struct {
+ Object *s3.ObjectInfo
+}
+
+func (e *HashAlreadyExistsError) Error() string {
+ return fmt.Sprintf("hash already exists: %s", e.Object.Key)
+}
diff --git a/pkg/common/db/s3/cont/id.go b/pkg/common/db/s3/cont/id.go
new file mode 100644
index 000000000..67acfae37
--- /dev/null
+++ b/pkg/common/db/s3/cont/id.go
@@ -0,0 +1,35 @@
+package cont
+
+import (
+ "encoding/base64"
+ "encoding/json"
+ "fmt"
+)
+
+type multipartUploadID struct {
+ Type int `json:"a,omitempty"`
+ ID string `json:"b,omitempty"`
+ Key string `json:"c,omitempty"`
+ Size int64 `json:"d,omitempty"`
+ Hash string `json:"e,omitempty"`
+}
+
+func newMultipartUploadID(id multipartUploadID) string {
+ data, err := json.Marshal(id)
+ if err != nil {
+ panic(err)
+ }
+ return base64.StdEncoding.EncodeToString(data)
+}
+
+func parseMultipartUploadID(id string) (*multipartUploadID, error) {
+ data, err := base64.StdEncoding.DecodeString(id)
+ if err != nil {
+ return nil, fmt.Errorf("invalid multipart upload id: %w", err)
+ }
+ var upload multipartUploadID
+ if err := json.Unmarshal(data, &upload); err != nil {
+ return nil, fmt.Errorf("invalid multipart upload id: %w", err)
+ }
+ return &upload, nil
+}
diff --git a/pkg/common/db/s3/cont/structs.go b/pkg/common/db/s3/cont/structs.go
new file mode 100644
index 000000000..160dfba70
--- /dev/null
+++ b/pkg/common/db/s3/cont/structs.go
@@ -0,0 +1,15 @@
+package cont
+
+import "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+
+type InitiateUploadResult struct {
+ UploadID string `json:"uploadID"` // 上传ID
+ PartSize int64 `json:"partSize"` // 分片大小
+ Sign *s3.AuthSignResult `json:"sign"` // 分片信息
+}
+
+type UploadResult struct {
+ Hash string `json:"hash"`
+ Size int64 `json:"size"`
+ Key string `json:"key"`
+}
diff --git a/pkg/common/db/s3/cos/cos.go b/pkg/common/db/s3/cos/cos.go
new file mode 100644
index 000000000..8536613be
--- /dev/null
+++ b/pkg/common/db/s3/cos/cos.go
@@ -0,0 +1,271 @@
+package cos
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+ "github.com/tencentyun/cos-go-sdk-v5"
+ "net/http"
+ "net/url"
+ "strconv"
+ "strings"
+ "time"
+)
+
+const (
+ minPartSize = 1024 * 1024 * 1 // 1MB
+ maxPartSize = 1024 * 1024 * 1024 * 5 // 5GB
+ maxNumSize = 1000
+)
+
+func NewCos() (s3.Interface, error) {
+ conf := config.Config.Object.Cos
+ u, err := url.Parse(conf.BucketURL)
+ if err != nil {
+ panic(err)
+ }
+ client := cos.NewClient(&cos.BaseURL{BucketURL: u}, &http.Client{
+ Transport: &cos.AuthorizationTransport{
+ SecretID: conf.SecretID,
+ SecretKey: conf.SecretKey,
+ SessionToken: conf.SessionToken,
+ },
+ })
+ return &Cos{
+ copyURL: u.Host + "/",
+ client: client,
+ credential: client.GetCredential(),
+ }, nil
+}
+
+type Cos struct {
+ copyURL string
+ client *cos.Client
+ credential *cos.Credential
+}
+
+func (c *Cos) Engine() string {
+ return "tencent-cos"
+}
+
+func (c *Cos) PartLimit() *s3.PartLimit {
+ return &s3.PartLimit{
+ MinPartSize: minPartSize,
+ MaxPartSize: maxPartSize,
+ MaxNumSize: maxNumSize,
+ }
+}
+
+func (c *Cos) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
+ result, _, err := c.client.Object.InitiateMultipartUpload(ctx, name, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &s3.InitiateMultipartUploadResult{
+ UploadID: result.UploadID,
+ Bucket: result.Bucket,
+ Key: result.Key,
+ }, nil
+}
+
+func (c *Cos) CompleteMultipartUpload(ctx context.Context, uploadID string, name string, parts []s3.Part) (*s3.CompleteMultipartUploadResult, error) {
+ opts := &cos.CompleteMultipartUploadOptions{
+ Parts: make([]cos.Object, len(parts)),
+ }
+ for i, part := range parts {
+ opts.Parts[i] = cos.Object{
+ PartNumber: part.PartNumber,
+ ETag: strings.ToLower(part.ETag),
+ }
+ }
+ result, _, err := c.client.Object.CompleteMultipartUpload(ctx, name, uploadID, opts)
+ if err != nil {
+ return nil, err
+ }
+ return &s3.CompleteMultipartUploadResult{
+ Location: result.Location,
+ Bucket: result.Bucket,
+ Key: result.Key,
+ ETag: result.ETag,
+ }, nil
+}
+
+func (c *Cos) PartSize(ctx context.Context, size int64) (int64, error) {
+ if size <= 0 {
+ return 0, errors.New("size must be greater than 0")
+ }
+ if size > maxPartSize*maxNumSize {
+ return 0, fmt.Errorf("size must be less than %db", maxPartSize*maxNumSize)
+ }
+ if size <= minPartSize*maxNumSize {
+ return minPartSize, nil
+ }
+ partSize := size / maxNumSize
+ if size%maxNumSize != 0 {
+ partSize++
+ }
+ return partSize, nil
+}
+
+func (c *Cos) ClientUploadPart(ctx context.Context, partSize int64, expire time.Duration, upload *s3.InitiateMultipartUploadResult) (*s3.MultipartUploadRequest, error) {
+ uri := c.client.BaseURL.BucketURL.String() + "/" + cos.EncodeURIComponent(upload.Key)
+ req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
+ if err != nil {
+ return nil, err
+ }
+ cos.AddAuthorizationHeader(c.credential.SecretID, c.credential.SecretKey, c.credential.SessionToken, req, cos.NewAuthTime(expire))
+ return &s3.MultipartUploadRequest{
+ UploadID: upload.UploadID,
+ Bucket: upload.Bucket,
+ Key: upload.Key,
+ Method: req.Method,
+ URL: uri,
+ Query: url.Values{"uploadId": {upload.UploadID}},
+ Header: req.Header,
+ PartKey: "partNumber",
+ PartSize: partSize,
+ FirstPart: 1,
+ }, nil
+}
+
+func (c *Cos) AuthSign(ctx context.Context, uploadID string, name string, expire time.Duration, partNumbers []int) (*s3.AuthSignResult, error) {
+ result := s3.AuthSignResult{
+ URL: c.client.BaseURL.BucketURL.String() + "/" + cos.EncodeURIComponent(name),
+ Query: url.Values{"uploadId": {uploadID}},
+ Header: make(http.Header),
+ Parts: make([]s3.SignPart, len(partNumbers)),
+ }
+ req, err := http.NewRequestWithContext(ctx, http.MethodPut, result.URL, nil)
+ if err != nil {
+ return nil, err
+ }
+ cos.AddAuthorizationHeader(c.credential.SecretID, c.credential.SecretKey, c.credential.SessionToken, req, cos.NewAuthTime(expire))
+ result.Header = req.Header
+ for i, partNumber := range partNumbers {
+ result.Parts[i] = s3.SignPart{
+ PartNumber: partNumber,
+ Query: url.Values{"partNumber": {strconv.Itoa(partNumber)}},
+ }
+ }
+ return &result, nil
+}
+
+func (c *Cos) PresignedPutObject(ctx context.Context, name string, expire time.Duration) (string, error) {
+ rawURL, err := c.client.Object.GetPresignedURL(ctx, http.MethodPut, name, c.credential.SecretID, c.credential.SecretKey, expire, nil)
+ if err != nil {
+ return "", err
+ }
+ return rawURL.String(), nil
+}
+
+func (c *Cos) DeleteObject(ctx context.Context, name string) error {
+ _, err := c.client.Object.Delete(ctx, name)
+ return err
+}
+
+func (c *Cos) StatObject(ctx context.Context, name string) (*s3.ObjectInfo, error) {
+ info, err := c.client.Object.Head(ctx, name, nil)
+ if err != nil {
+ return nil, err
+ }
+ res := &s3.ObjectInfo{Key: name}
+ if res.ETag = strings.ToLower(strings.ReplaceAll(info.Header.Get("ETag"), `"`, "")); res.ETag == "" {
+ return nil, errors.New("StatObject etag not found")
+ }
+ if contentLengthStr := info.Header.Get("Content-Length"); contentLengthStr == "" {
+ return nil, errors.New("StatObject content-length not found")
+ } else {
+ res.Size, err = strconv.ParseInt(contentLengthStr, 10, 64)
+ if err != nil {
+ return nil, fmt.Errorf("StatObject content-length parse error: %w", err)
+ }
+ if res.Size < 0 {
+ return nil, errors.New("StatObject content-length must be greater than 0")
+ }
+ }
+ if lastModified := info.Header.Get("Last-Modified"); lastModified == "" {
+ return nil, errors.New("StatObject last-modified not found")
+ } else {
+ res.LastModified, err = time.Parse(http.TimeFormat, lastModified)
+ if err != nil {
+ return nil, fmt.Errorf("StatObject last-modified parse error: %w", err)
+ }
+ }
+ return res, nil
+}
+
+func (c *Cos) CopyObject(ctx context.Context, src string, dst string) (*s3.CopyObjectInfo, error) {
+ result, _, err := c.client.Object.Copy(ctx, src, c.copyURL+dst, &cos.ObjectCopyOptions{})
+ if err != nil {
+ return nil, err
+ }
+ return &s3.CopyObjectInfo{
+ Key: dst,
+ ETag: result.ETag,
+ }, nil
+}
+
+func (c *Cos) IsNotFound(err error) bool {
+ switch e := err.(type) {
+ case *cos.ErrorResponse:
+ return e.Response.StatusCode == http.StatusNotFound || e.Code == "NoSuchKey"
+ default:
+ return false
+ }
+}
+
+func (c *Cos) AbortMultipartUpload(ctx context.Context, uploadID string, name string) error {
+ _, err := c.client.Object.AbortMultipartUpload(ctx, name, uploadID)
+ return err
+}
+
+func (c *Cos) ListUploadedParts(ctx context.Context, uploadID string, name string, partNumberMarker int, maxParts int) (*s3.ListUploadedPartsResult, error) {
+ result, _, err := c.client.Object.ListParts(ctx, name, uploadID, &cos.ObjectListPartsOptions{
+ MaxParts: strconv.Itoa(maxParts),
+ PartNumberMarker: strconv.Itoa(partNumberMarker),
+ })
+ if err != nil {
+ return nil, err
+ }
+ res := &s3.ListUploadedPartsResult{
+ Key: result.Key,
+ UploadID: result.UploadID,
+ UploadedParts: make([]s3.UploadedPart, len(result.Parts)),
+ }
+ res.MaxParts, _ = strconv.Atoi(result.MaxParts)
+ res.NextPartNumberMarker, _ = strconv.Atoi(result.NextPartNumberMarker)
+ for i, part := range result.Parts {
+ lastModified, _ := time.Parse(http.TimeFormat, part.LastModified)
+ res.UploadedParts[i] = s3.UploadedPart{
+ PartNumber: part.PartNumber,
+ LastModified: lastModified,
+ ETag: part.ETag,
+ Size: part.Size,
+ }
+ }
+ return res, nil
+}
+
+func (c *Cos) AccessURL(ctx context.Context, name string, expire time.Duration, opt *s3.AccessURLOption) (string, error) {
+ reqParams := make(url.Values)
+ if opt != nil {
+ if opt.ContentType != "" {
+ reqParams.Set("Content-Type", opt.ContentType)
+ }
+ if opt.ContentDisposition != "" {
+ reqParams.Set("Content-Disposition", opt.ContentDisposition)
+ }
+ }
+ if expire <= 0 {
+ expire = time.Hour * 24 * 365 * 99 // 99 years
+ } else if expire < time.Second {
+ expire = time.Second
+ }
+ rawURL, err := c.client.Object.GetPresignedURL(ctx, http.MethodGet, name, c.credential.SecretID, c.credential.SecretKey, expire, reqParams)
+ if err != nil {
+ return "", err
+ }
+ return rawURL.String(), nil
+}
diff --git a/pkg/common/db/s3/minio/minio.go b/pkg/common/db/s3/minio/minio.go
new file mode 100644
index 000000000..6949bcb4c
--- /dev/null
+++ b/pkg/common/db/s3/minio/minio.go
@@ -0,0 +1,250 @@
+package minio
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+ "github.com/minio/minio-go/v7"
+ "github.com/minio/minio-go/v7/pkg/credentials"
+ "github.com/minio/minio-go/v7/pkg/signer"
+ "net/http"
+ "net/url"
+ "strconv"
+ "strings"
+ "time"
+)
+
+const (
+ unsignedPayload = "UNSIGNED-PAYLOAD"
+)
+
+const (
+ minPartSize = 1024 * 1024 * 5 // 1MB
+ maxPartSize = 1024 * 1024 * 1024 * 5 // 5GB
+ maxNumSize = 10000
+)
+
+func NewMinio() (s3.Interface, error) {
+ conf := config.Config.Object.Minio
+ u, err := url.Parse(conf.Endpoint)
+ if err != nil {
+ return nil, err
+ }
+ opts := &minio.Options{
+ Creds: credentials.NewStaticV4(conf.AccessKeyID, conf.SecretAccessKey, conf.SessionToken),
+ Secure: u.Scheme == "https",
+ }
+ client, err := minio.New(u.Host, opts)
+ if err != nil {
+ return nil, err
+ }
+ return &Minio{
+ bucket: conf.Bucket,
+ bucketURL: conf.Endpoint + "/" + conf.Bucket + "/",
+ opts: opts,
+ core: &minio.Core{Client: client},
+ }, nil
+}
+
+type Minio struct {
+ bucket string
+ bucketURL string
+ opts *minio.Options
+ core *minio.Core
+}
+
+func (m *Minio) Engine() string {
+ return "minio"
+}
+
+func (m *Minio) PartLimit() *s3.PartLimit {
+ return &s3.PartLimit{
+ MinPartSize: minPartSize,
+ MaxPartSize: maxPartSize,
+ MaxNumSize: maxNumSize,
+ }
+}
+
+func (m *Minio) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
+ uploadID, err := m.core.NewMultipartUpload(ctx, m.bucket, name, minio.PutObjectOptions{})
+ if err != nil {
+ return nil, err
+ }
+ return &s3.InitiateMultipartUploadResult{
+ Bucket: m.bucket,
+ Key: name,
+ UploadID: uploadID,
+ }, nil
+}
+
+func (m *Minio) CompleteMultipartUpload(ctx context.Context, uploadID string, name string, parts []s3.Part) (*s3.CompleteMultipartUploadResult, error) {
+ minioParts := make([]minio.CompletePart, len(parts))
+ for i, part := range parts {
+ minioParts[i] = minio.CompletePart{
+ PartNumber: part.PartNumber,
+ ETag: strings.ToLower(part.ETag),
+ }
+ }
+ upload, err := m.core.CompleteMultipartUpload(ctx, m.bucket, name, uploadID, minioParts, minio.PutObjectOptions{})
+ if err != nil {
+ return nil, err
+ }
+ return &s3.CompleteMultipartUploadResult{
+ Location: upload.Location,
+ Bucket: upload.Bucket,
+ Key: upload.Key,
+ ETag: strings.ToLower(upload.ETag),
+ }, nil
+}
+
+func (m *Minio) PartSize(ctx context.Context, size int64) (int64, error) {
+ if size <= 0 {
+ return 0, errors.New("size must be greater than 0")
+ }
+ if size > maxPartSize*maxNumSize {
+ return 0, fmt.Errorf("size must be less than %db", maxPartSize*maxNumSize)
+ }
+ if size <= minPartSize*maxNumSize {
+ return minPartSize, nil
+ }
+ partSize := size / maxNumSize
+ if size%maxNumSize != 0 {
+ partSize++
+ }
+ return partSize, nil
+}
+
+func (m *Minio) AuthSign(ctx context.Context, uploadID string, name string, expire time.Duration, partNumbers []int) (*s3.AuthSignResult, error) {
+ creds, err := m.opts.Creds.Get()
+ if err != nil {
+ return nil, err
+ }
+ result := s3.AuthSignResult{
+ URL: m.bucketURL + name,
+ Query: url.Values{"uploadId": {uploadID}},
+ Parts: make([]s3.SignPart, len(partNumbers)),
+ }
+ for i, partNumber := range partNumbers {
+ rawURL := result.URL + "?partNumber=" + strconv.Itoa(partNumber) + "&uploadId=" + uploadID
+ request, err := http.NewRequestWithContext(ctx, http.MethodPut, rawURL, nil)
+ if err != nil {
+ return nil, err
+ }
+ request.Header.Set("X-Amz-Content-Sha256", unsignedPayload)
+ request = signer.SignV4Trailer(*request, creds.AccessKeyID, creds.SecretAccessKey, creds.SessionToken, "us-east-1", nil)
+ result.Parts[i] = s3.SignPart{
+ PartNumber: partNumber,
+ URL: request.URL.String(),
+ Query: url.Values{"partNumber": {strconv.Itoa(partNumber)}},
+ Header: request.Header,
+ }
+ }
+ return &result, nil
+}
+
+func (m *Minio) PresignedPutObject(ctx context.Context, name string, expire time.Duration) (string, error) {
+ rawURL, err := m.core.Client.PresignedPutObject(ctx, m.bucket, name, expire)
+ if err != nil {
+ return "", err
+ }
+ return rawURL.String(), nil
+}
+
+func (m *Minio) DeleteObject(ctx context.Context, name string) error {
+ return m.core.Client.RemoveObject(ctx, m.bucket, name, minio.RemoveObjectOptions{})
+}
+
+func (m *Minio) StatObject(ctx context.Context, name string) (*s3.ObjectInfo, error) {
+ info, err := m.core.Client.StatObject(ctx, m.bucket, name, minio.StatObjectOptions{})
+ if err != nil {
+ return nil, err
+ }
+ return &s3.ObjectInfo{
+ ETag: strings.ToLower(info.ETag),
+ Key: info.Key,
+ Size: info.Size,
+ LastModified: info.LastModified,
+ }, nil
+}
+
+func (m *Minio) CopyObject(ctx context.Context, src string, dst string) (*s3.CopyObjectInfo, error) {
+ result, err := m.core.Client.CopyObject(ctx, minio.CopyDestOptions{
+ Bucket: m.bucket,
+ Object: dst,
+ }, minio.CopySrcOptions{
+ Bucket: m.bucket,
+ Object: src,
+ })
+ if err != nil {
+ return nil, err
+ }
+ return &s3.CopyObjectInfo{
+ Key: dst,
+ ETag: strings.ToLower(result.ETag),
+ }, nil
+}
+
+func (m *Minio) IsNotFound(err error) bool {
+ if err == nil {
+ return false
+ }
+ switch e := err.(type) {
+ case minio.ErrorResponse:
+ return e.StatusCode == http.StatusNotFound || e.Code == "NoSuchKey"
+ case *minio.ErrorResponse:
+ return e.StatusCode == http.StatusNotFound || e.Code == "NoSuchKey"
+ default:
+ return false
+ }
+}
+
+func (m *Minio) AbortMultipartUpload(ctx context.Context, uploadID string, name string) error {
+ return m.core.AbortMultipartUpload(ctx, m.bucket, name, uploadID)
+}
+
+func (m *Minio) ListUploadedParts(ctx context.Context, uploadID string, name string, partNumberMarker int, maxParts int) (*s3.ListUploadedPartsResult, error) {
+ result, err := m.core.ListObjectParts(ctx, m.bucket, name, uploadID, partNumberMarker, maxParts)
+ if err != nil {
+ return nil, err
+ }
+ res := &s3.ListUploadedPartsResult{
+ Key: result.Key,
+ UploadID: result.UploadID,
+ MaxParts: result.MaxParts,
+ NextPartNumberMarker: result.NextPartNumberMarker,
+ UploadedParts: make([]s3.UploadedPart, len(result.ObjectParts)),
+ }
+ for i, part := range result.ObjectParts {
+ res.UploadedParts[i] = s3.UploadedPart{
+ PartNumber: part.PartNumber,
+ LastModified: part.LastModified,
+ ETag: part.ETag,
+ Size: part.Size,
+ }
+ }
+ return res, nil
+}
+
+func (m *Minio) AccessURL(ctx context.Context, name string, expire time.Duration, opt *s3.AccessURLOption) (string, error) {
+ reqParams := make(url.Values)
+ if opt != nil {
+ if opt.ContentType != "" {
+ reqParams.Set("Content-Type", opt.ContentType)
+ }
+ if opt.ContentDisposition != "" {
+ reqParams.Set("Content-Disposition", opt.ContentDisposition)
+ }
+ }
+ if expire <= 0 {
+ expire = time.Hour * 24 * 365 * 99 // 99 years
+ } else if expire < time.Second {
+ expire = time.Second
+ }
+ u, err := m.core.Client.PresignedGetObject(ctx, m.bucket, name, expire, reqParams)
+ if err != nil {
+ return "", err
+ }
+ return u.String(), nil
+}
diff --git a/pkg/common/db/s3/oss/oss.go b/pkg/common/db/s3/oss/oss.go
new file mode 100644
index 000000000..51abcb46c
--- /dev/null
+++ b/pkg/common/db/s3/oss/oss.go
@@ -0,0 +1,259 @@
+package oss
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
+ "github.com/aliyun/aliyun-oss-go-sdk/oss"
+ "net/http"
+ "net/url"
+ "strconv"
+ "strings"
+ "time"
+)
+
+const (
+ minPartSize = 1024 * 1024 * 1 // 1MB
+ maxPartSize = 1024 * 1024 * 1024 * 5 // 5GB
+ maxNumSize = 10000
+)
+
+func NewOSS() (s3.Interface, error) {
+ conf := config.Config.Object.Oss
+ if conf.BucketURL == "" {
+ return nil, errors.New("bucket url is empty")
+ }
+ client, err := oss.New(conf.Endpoint, conf.AccessKeyID, conf.AccessKeySecret)
+ if err != nil {
+ return nil, err
+ }
+ bucket, err := client.Bucket(conf.Bucket)
+ if err != nil {
+ return nil, err
+ }
+ if conf.BucketURL[len(conf.BucketURL)-1] != '/' {
+ conf.BucketURL += "/"
+ }
+ return &OSS{
+ bucketURL: conf.BucketURL,
+ bucket: bucket,
+ credentials: client.Config.GetCredentials(),
+ }, nil
+}
+
+type OSS struct {
+ bucketURL string
+ bucket *oss.Bucket
+ credentials oss.Credentials
+}
+
+func (o *OSS) Engine() string {
+ return "ali-oss"
+}
+
+func (o *OSS) PartLimit() *s3.PartLimit {
+ return &s3.PartLimit{
+ MinPartSize: minPartSize,
+ MaxPartSize: maxPartSize,
+ MaxNumSize: maxNumSize,
+ }
+}
+
+func (o *OSS) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
+ result, err := o.bucket.InitiateMultipartUpload(name)
+ if err != nil {
+ return nil, err
+ }
+ return &s3.InitiateMultipartUploadResult{
+ UploadID: result.UploadID,
+ Bucket: result.Bucket,
+ Key: result.Key,
+ }, nil
+}
+
+func (o *OSS) CompleteMultipartUpload(ctx context.Context, uploadID string, name string, parts []s3.Part) (*s3.CompleteMultipartUploadResult, error) {
+ ossParts := make([]oss.UploadPart, len(parts))
+ for i, part := range parts {
+ ossParts[i] = oss.UploadPart{
+ PartNumber: part.PartNumber,
+ ETag: strings.ToUpper(part.ETag),
+ }
+ }
+ result, err := o.bucket.CompleteMultipartUpload(oss.InitiateMultipartUploadResult{
+ UploadID: uploadID,
+ Bucket: o.bucket.BucketName,
+ Key: name,
+ }, ossParts)
+ if err != nil {
+ return nil, err
+ }
+ return &s3.CompleteMultipartUploadResult{
+ Location: result.Location,
+ Bucket: result.Bucket,
+ Key: result.Key,
+ ETag: strings.ToLower(strings.ReplaceAll(result.ETag, `"`, ``)),
+ }, nil
+}
+
+func (o *OSS) PartSize(ctx context.Context, size int64) (int64, error) {
+ if size <= 0 {
+ return 0, errors.New("size must be greater than 0")
+ }
+ if size > maxPartSize*maxNumSize {
+ return 0, fmt.Errorf("size must be less than %db", maxPartSize*maxNumSize)
+ }
+ if size <= minPartSize*maxNumSize {
+ return minPartSize, nil
+ }
+ partSize := size / maxNumSize
+ if size%maxNumSize != 0 {
+ partSize++
+ }
+ return partSize, nil
+}
+
+func (o *OSS) AuthSign(ctx context.Context, uploadID string, name string, expire time.Duration, partNumbers []int) (*s3.AuthSignResult, error) {
+ result := s3.AuthSignResult{
+ URL: o.bucketURL + name,
+ Query: url.Values{"uploadId": {uploadID}},
+ Header: make(http.Header),
+ Parts: make([]s3.SignPart, len(partNumbers)),
+ }
+ for i, partNumber := range partNumbers {
+ rawURL := fmt.Sprintf(`%s%s?partNumber=%d&uploadId=%s`, o.bucketURL, name, partNumber, uploadID)
+ request, err := http.NewRequestWithContext(ctx, http.MethodPut, rawURL, nil)
+ if err != nil {
+ return nil, err
+ }
+ if o.credentials.GetSecurityToken() != "" {
+ request.Header.Set(oss.HTTPHeaderOssSecurityToken, o.credentials.GetSecurityToken())
+ }
+ request.Header.Set(oss.HTTPHeaderHost, request.Host)
+ request.Header.Set(oss.HTTPHeaderDate, time.Now().UTC().Format(http.TimeFormat))
+ authorization := fmt.Sprintf(`OSS %s:%s`, o.credentials.GetAccessKeyID(), o.getSignedStr(request, fmt.Sprintf(`/%s/%s?partNumber=%d&uploadId=%s`, o.bucket.BucketName, name, partNumber, uploadID), o.credentials.GetAccessKeySecret()))
+ request.Header.Set(oss.HTTPHeaderAuthorization, authorization)
+ result.Parts[i] = s3.SignPart{
+ PartNumber: partNumber,
+ Query: url.Values{"partNumber": {strconv.Itoa(partNumber)}},
+ URL: request.URL.String(),
+ Header: request.Header,
+ }
+ }
+ return &result, nil
+}
+
+func (o *OSS) PresignedPutObject(ctx context.Context, name string, expire time.Duration) (string, error) {
+ return o.bucket.SignURL(name, http.MethodPut, int64(expire/time.Second))
+}
+
+func (o *OSS) StatObject(ctx context.Context, name string) (*s3.ObjectInfo, error) {
+ header, err := o.bucket.GetObjectMeta(name)
+ if err != nil {
+ return nil, err
+ }
+ res := &s3.ObjectInfo{Key: name}
+ if res.ETag = strings.ToLower(strings.ReplaceAll(header.Get("ETag"), `"`, ``)); res.ETag == "" {
+ return nil, errors.New("StatObject etag not found")
+ }
+ if contentLengthStr := header.Get("Content-Length"); contentLengthStr == "" {
+ return nil, errors.New("StatObject content-length not found")
+ } else {
+ res.Size, err = strconv.ParseInt(contentLengthStr, 10, 64)
+ if err != nil {
+ return nil, fmt.Errorf("StatObject content-length parse error: %w", err)
+ }
+ if res.Size < 0 {
+ return nil, errors.New("StatObject content-length must be greater than 0")
+ }
+ }
+ if lastModified := header.Get("Last-Modified"); lastModified == "" {
+ return nil, errors.New("StatObject last-modified not found")
+ } else {
+ res.LastModified, err = time.Parse(http.TimeFormat, lastModified)
+ if err != nil {
+ return nil, fmt.Errorf("StatObject last-modified parse error: %w", err)
+ }
+ }
+ return res, nil
+}
+
+func (o *OSS) DeleteObject(ctx context.Context, name string) error {
+ return o.bucket.DeleteObject(name)
+}
+
+func (o *OSS) CopyObject(ctx context.Context, src string, dst string) (*s3.CopyObjectInfo, error) {
+ result, err := o.bucket.CopyObject(src, dst)
+ if err != nil {
+ return nil, err
+ }
+ return &s3.CopyObjectInfo{
+ Key: dst,
+ ETag: strings.ToLower(strings.ReplaceAll(result.ETag, `"`, ``)),
+ }, nil
+}
+
+func (o *OSS) IsNotFound(err error) bool {
+ switch e := err.(type) {
+ case oss.ServiceError:
+ return e.StatusCode == http.StatusNotFound || e.Code == "NoSuchKey"
+ case *oss.ServiceError:
+ return e.StatusCode == http.StatusNotFound || e.Code == "NoSuchKey"
+ default:
+ return false
+ }
+}
+
+func (o *OSS) AbortMultipartUpload(ctx context.Context, uploadID string, name string) error {
+ return o.bucket.AbortMultipartUpload(oss.InitiateMultipartUploadResult{
+ UploadID: uploadID,
+ Key: name,
+ Bucket: o.bucket.BucketName,
+ })
+}
+
+func (o *OSS) ListUploadedParts(ctx context.Context, uploadID string, name string, partNumberMarker int, maxParts int) (*s3.ListUploadedPartsResult, error) {
+ result, err := o.bucket.ListUploadedParts(oss.InitiateMultipartUploadResult{
+ UploadID: uploadID,
+ Key: name,
+ Bucket: o.bucket.BucketName,
+ }, oss.MaxUploads(100), oss.MaxParts(maxParts), oss.PartNumberMarker(partNumberMarker))
+ if err != nil {
+ return nil, err
+ }
+ res := &s3.ListUploadedPartsResult{
+ Key: result.Key,
+ UploadID: result.UploadID,
+ MaxParts: result.MaxParts,
+ UploadedParts: make([]s3.UploadedPart, len(result.UploadedParts)),
+ }
+ res.NextPartNumberMarker, _ = strconv.Atoi(result.NextPartNumberMarker)
+ for i, part := range result.UploadedParts {
+ res.UploadedParts[i] = s3.UploadedPart{
+ PartNumber: part.PartNumber,
+ LastModified: part.LastModified,
+ ETag: part.ETag,
+ Size: int64(part.Size),
+ }
+ }
+ return res, nil
+}
+
+func (o *OSS) AccessURL(ctx context.Context, name string, expire time.Duration, opt *s3.AccessURLOption) (string, error) {
+ var opts []oss.Option
+ if opt != nil {
+ if opt.ContentType != "" {
+ opts = append(opts, oss.ContentType(opt.ContentType))
+ }
+ if opt.ContentDisposition != "" {
+ opts = append(opts, oss.ContentDisposition(opt.ContentDisposition))
+ }
+ }
+ if expire <= 0 {
+ expire = time.Hour * 24 * 365 * 99 // 99 years
+ } else if expire < time.Second {
+ expire = time.Second
+ }
+ return o.bucket.SignURL(name, http.MethodGet, int64(expire/time.Second), opts...)
+}
diff --git a/pkg/common/db/s3/oss/sign.go b/pkg/common/db/s3/oss/sign.go
new file mode 100644
index 000000000..82618d287
--- /dev/null
+++ b/pkg/common/db/s3/oss/sign.go
@@ -0,0 +1,81 @@
+package oss
+
+import (
+ "crypto/hmac"
+ "crypto/sha1"
+ "crypto/sha256"
+ "encoding/base64"
+ "github.com/aliyun/aliyun-oss-go-sdk/oss"
+ "hash"
+ "io"
+ "net/http"
+ "sort"
+ "strings"
+)
+
+func (o *OSS) getAdditionalHeaderKeys(req *http.Request) ([]string, map[string]string) {
+ var keysList []string
+ keysMap := make(map[string]string)
+ srcKeys := make(map[string]string)
+
+ for k := range req.Header {
+ srcKeys[strings.ToLower(k)] = ""
+ }
+
+ for _, v := range o.bucket.Client.Config.AdditionalHeaders {
+ if _, ok := srcKeys[strings.ToLower(v)]; ok {
+ keysMap[strings.ToLower(v)] = ""
+ }
+ }
+
+ for k := range keysMap {
+ keysList = append(keysList, k)
+ }
+ sort.Strings(keysList)
+ return keysList, keysMap
+}
+
+func (o *OSS) getSignedStr(req *http.Request, canonicalizedResource string, keySecret string) string {
+ // Find out the "x-oss-"'s address in header of the request
+ ossHeadersMap := make(map[string]string)
+ additionalList, additionalMap := o.getAdditionalHeaderKeys(req)
+ for k, v := range req.Header {
+ if strings.HasPrefix(strings.ToLower(k), "x-oss-") {
+ ossHeadersMap[strings.ToLower(k)] = v[0]
+ } else if o.bucket.Client.Config.AuthVersion == oss.AuthV2 {
+ if _, ok := additionalMap[strings.ToLower(k)]; ok {
+ ossHeadersMap[strings.ToLower(k)] = v[0]
+ }
+ }
+ }
+ hs := newHeaderSorter(ossHeadersMap)
+
+ // Sort the ossHeadersMap by the ascending order
+ hs.Sort()
+
+ // Get the canonicalizedOSSHeaders
+ canonicalizedOSSHeaders := ""
+ for i := range hs.Keys {
+ canonicalizedOSSHeaders += hs.Keys[i] + ":" + hs.Vals[i] + "\n"
+ }
+
+ // Give other parameters values
+ // when sign URL, date is expires
+ date := req.Header.Get(oss.HTTPHeaderDate)
+ contentType := req.Header.Get(oss.HTTPHeaderContentType)
+ contentMd5 := req.Header.Get(oss.HTTPHeaderContentMD5)
+
+ // default is v1 signature
+ signStr := req.Method + "\n" + contentMd5 + "\n" + contentType + "\n" + date + "\n" + canonicalizedOSSHeaders + canonicalizedResource
+ h := hmac.New(func() hash.Hash { return sha1.New() }, []byte(keySecret))
+
+ // v2 signature
+ if o.bucket.Client.Config.AuthVersion == oss.AuthV2 {
+ signStr = req.Method + "\n" + contentMd5 + "\n" + contentType + "\n" + date + "\n" + canonicalizedOSSHeaders + strings.Join(additionalList, ";") + "\n" + canonicalizedResource
+ h = hmac.New(func() hash.Hash { return sha256.New() }, []byte(keySecret))
+ }
+ _, _ = io.WriteString(h, signStr)
+ signedStr := base64.StdEncoding.EncodeToString(h.Sum(nil))
+
+ return signedStr
+}
diff --git a/pkg/common/db/s3/oss/sort.go b/pkg/common/db/s3/oss/sort.go
new file mode 100644
index 000000000..40c9a5af1
--- /dev/null
+++ b/pkg/common/db/s3/oss/sort.go
@@ -0,0 +1,47 @@
+package oss
+
+import (
+ "bytes"
+ "sort"
+)
+
+// headerSorter defines the key-value structure for storing the sorted data in signHeader.
+type headerSorter struct {
+ Keys []string
+ Vals []string
+}
+
+// newHeaderSorter is an additional function for function SignHeader.
+func newHeaderSorter(m map[string]string) *headerSorter {
+ hs := &headerSorter{
+ Keys: make([]string, 0, len(m)),
+ Vals: make([]string, 0, len(m)),
+ }
+
+ for k, v := range m {
+ hs.Keys = append(hs.Keys, k)
+ hs.Vals = append(hs.Vals, v)
+ }
+ return hs
+}
+
+// Sort is an additional function for function SignHeader.
+func (hs *headerSorter) Sort() {
+ sort.Sort(hs)
+}
+
+// Len is an additional function for function SignHeader.
+func (hs *headerSorter) Len() int {
+ return len(hs.Vals)
+}
+
+// Less is an additional function for function SignHeader.
+func (hs *headerSorter) Less(i, j int) bool {
+ return bytes.Compare([]byte(hs.Keys[i]), []byte(hs.Keys[j])) < 0
+}
+
+// Swap is an additional function for function SignHeader.
+func (hs *headerSorter) Swap(i, j int) {
+ hs.Vals[i], hs.Vals[j] = hs.Vals[j], hs.Vals[i]
+ hs.Keys[i], hs.Keys[j] = hs.Keys[j], hs.Keys[i]
+}
diff --git a/pkg/common/db/s3/s3.go b/pkg/common/db/s3/s3.go
new file mode 100644
index 000000000..4f1571b1e
--- /dev/null
+++ b/pkg/common/db/s3/s3.go
@@ -0,0 +1,134 @@
+package s3
+
+import (
+ "context"
+ "net/http"
+ "net/url"
+ "time"
+)
+
+type PartLimit struct {
+ MinPartSize int64 `json:"minPartSize"`
+ MaxPartSize int64 `json:"maxPartSize"`
+ MaxNumSize int `json:"maxNumSize"`
+}
+
+type InitiateMultipartUploadResult struct {
+ Bucket string `json:"bucket"`
+ Key string `json:"key"`
+ UploadID string `json:"uploadID"`
+}
+
+type MultipartUploadRequest struct {
+ UploadID string `json:"uploadId"`
+ Bucket string `json:"bucket"`
+ Key string `json:"key"`
+ Method string `json:"method"`
+ URL string `json:"url"`
+ Query url.Values `json:"query"`
+ Header http.Header `json:"header"`
+ PartKey string `json:"partKey"`
+ PartSize int64 `json:"partSize"`
+ FirstPart int `json:"firstPart"`
+}
+
+type Part struct {
+ PartNumber int `json:"partNumber"`
+ ETag string `json:"etag"`
+}
+
+type CompleteMultipartUploadResult struct {
+ Location string `json:"location"`
+ Bucket string `json:"bucket"`
+ Key string `json:"key"`
+ ETag string `json:"etag"`
+}
+
+type SignResult struct {
+ Parts []SignPart `json:"parts"`
+}
+
+type ObjectInfo struct {
+ ETag string `json:"etag"`
+ Key string `json:"name"`
+ Size int64 `json:"size"`
+ LastModified time.Time `json:"lastModified"`
+}
+
+type CopyObjectInfo struct {
+ Key string `json:"name"`
+ ETag string `json:"etag"`
+}
+
+type SignPart struct {
+ PartNumber int `json:"partNumber"`
+ URL string `json:"url"`
+ Query url.Values `json:"query"`
+ Header http.Header `json:"header"`
+}
+
+type AuthSignResult struct {
+ URL string `json:"url"`
+ Query url.Values `json:"query"`
+ Header http.Header `json:"header"`
+ Parts []SignPart `json:"parts"`
+}
+
+type InitiateUpload struct {
+ UploadID string `json:"uploadId"`
+ Bucket string `json:"bucket"`
+ Key string `json:"key"`
+ Method string `json:"method"`
+ URL string `json:"url"`
+ Query url.Values `json:"query"`
+ Header http.Header `json:"header"`
+ PartKey string `json:"partKey"`
+ PartSize int64 `json:"partSize"`
+ FirstPart int `json:"firstPart"`
+}
+
+type UploadedPart struct {
+ PartNumber int `json:"partNumber"`
+ LastModified time.Time `json:"lastModified"`
+ ETag string `json:"etag"`
+ Size int64 `json:"size"`
+}
+
+type ListUploadedPartsResult struct {
+ Key string `xml:"Key"`
+ UploadID string `xml:"UploadId"`
+ NextPartNumberMarker int `xml:"NextPartNumberMarker"`
+ MaxParts int `xml:"MaxParts"`
+ UploadedParts []UploadedPart `xml:"Part"`
+}
+
+type AccessURLOption struct {
+ ContentType string `json:"contentType"`
+ ContentDisposition string `json:"contentDisposition"`
+}
+
+type Interface interface {
+ Engine() string
+ PartLimit() *PartLimit
+
+ InitiateMultipartUpload(ctx context.Context, name string) (*InitiateMultipartUploadResult, error)
+ CompleteMultipartUpload(ctx context.Context, uploadID string, name string, parts []Part) (*CompleteMultipartUploadResult, error)
+
+ PartSize(ctx context.Context, size int64) (int64, error)
+ AuthSign(ctx context.Context, uploadID string, name string, expire time.Duration, partNumbers []int) (*AuthSignResult, error)
+
+ PresignedPutObject(ctx context.Context, name string, expire time.Duration) (string, error)
+
+ DeleteObject(ctx context.Context, name string) error
+
+ CopyObject(ctx context.Context, src string, dst string) (*CopyObjectInfo, error)
+
+ StatObject(ctx context.Context, name string) (*ObjectInfo, error)
+
+ IsNotFound(err error) bool
+
+ AbortMultipartUpload(ctx context.Context, uploadID string, name string) error
+ ListUploadedParts(ctx context.Context, uploadID string, name string, partNumberMarker int, maxParts int) (*ListUploadedPartsResult, error)
+
+ AccessURL(ctx context.Context, name string, expire time.Duration, opt *AccessURLOption) (string, error)
+}
diff --git a/pkg/common/db/table/relation/conversation.go b/pkg/common/db/table/relation/conversation.go
index e7fbbc1c5..6fd260583 100644
--- a/pkg/common/db/table/relation/conversation.go
+++ b/pkg/common/db/table/relation/conversation.go
@@ -10,21 +10,24 @@ const (
)
type ConversationModel struct {
- OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"`
- ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"`
- ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"`
- UserID string `gorm:"column:user_id;type:char(64)" json:"userID"`
- GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"`
- RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"`
- IsPinned bool `gorm:"column:is_pinned" json:"isPinned"`
- IsPrivateChat bool `gorm:"column:is_private_chat" json:"isPrivateChat"`
- BurnDuration int32 `gorm:"column:burn_duration;default:30" json:"burnDuration"`
- GroupAtType int32 `gorm:"column:group_at_type" json:"groupAtType"`
- AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"`
- Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"`
- MaxSeq int64 `gorm:"column:max_seq" json:"maxSeq"`
- MinSeq int64 `gorm:"column:min_seq" json:"minSeq"`
- CreateTime time.Time `gorm:"column:create_time;index:create_time;autoCreateTime"`
+ OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"`
+ ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"`
+ ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"`
+ UserID string `gorm:"column:user_id;type:char(64)" json:"userID"`
+ GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"`
+ RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"`
+ IsPinned bool `gorm:"column:is_pinned" json:"isPinned"`
+ IsPrivateChat bool `gorm:"column:is_private_chat" json:"isPrivateChat"`
+ BurnDuration int32 `gorm:"column:burn_duration;default:30" json:"burnDuration"`
+ GroupAtType int32 `gorm:"column:group_at_type" json:"groupAtType"`
+ AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"`
+ Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"`
+ MaxSeq int64 `gorm:"column:max_seq" json:"maxSeq"`
+ MinSeq int64 `gorm:"column:min_seq" json:"minSeq"`
+ CreateTime time.Time `gorm:"column:create_time;index:create_time;autoCreateTime"`
+ IsMsgDestruct bool `gorm:"column:is_msg_destruct;default:false"`
+ MsgDestructTime int64 `gorm:"column:msg_destruct_time;default:604800"`
+ LatestMsgDestructTime time.Time `gorm:"column:latest_msg_destruct_time;autoCreateTime"`
}
func (ConversationModel) TableName() string {
@@ -48,5 +51,6 @@ type ConversationModelInterface interface {
GetAllConversationIDs(ctx context.Context) ([]string, error)
GetUserAllHasReadSeqs(ctx context.Context, ownerUserID string) (hashReadSeqs map[string]int64, err error)
GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*ConversationModel, error)
+ GetConversationIDsNeedDestruct(ctx context.Context) ([]*ConversationModel, error)
NewTx(tx any) ConversationModelInterface
}
diff --git a/pkg/common/db/table/relation/object.go b/pkg/common/db/table/relation/object.go
new file mode 100644
index 000000000..eb58c308d
--- /dev/null
+++ b/pkg/common/db/table/relation/object.go
@@ -0,0 +1,31 @@
+package relation
+
+import (
+ "context"
+ "time"
+)
+
+const (
+ ObjectInfoModelTableName = "object"
+)
+
+type ObjectModel struct {
+ Name string `gorm:"column:name;primary_key"`
+ UserID string `gorm:"column:user_id"`
+ Hash string `gorm:"column:hash"`
+ Key string `gorm:"column:key"`
+ Size int64 `gorm:"column:size"`
+ ContentType string `gorm:"column:content_type"`
+ Cause string `gorm:"column:cause"`
+ CreateTime time.Time `gorm:"column:create_time"`
+}
+
+func (ObjectModel) TableName() string {
+ return ObjectInfoModelTableName
+}
+
+type ObjectInfoModelInterface interface {
+ NewTx(tx any) ObjectInfoModelInterface
+ SetObject(ctx context.Context, obj *ObjectModel) error
+ Take(ctx context.Context, name string) (*ObjectModel, error)
+}
diff --git a/pkg/common/db/table/relation/object_hash.go b/pkg/common/db/table/relation/object_hash.go
deleted file mode 100644
index 86d038fc4..000000000
--- a/pkg/common/db/table/relation/object_hash.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package relation
-
-import (
- "context"
- "time"
-)
-
-const (
- ObjectHashModelTableName = "object_hash"
-)
-
-type ObjectHashModel struct {
- Hash string `gorm:"column:hash;primary_key;size:32"`
- Engine string `gorm:"column:engine;primary_key;size:16"`
- Size int64 `gorm:"column:size"`
- Bucket string `gorm:"column:bucket"`
- Name string `gorm:"column:name"`
- CreateTime time.Time `gorm:"column:create_time"`
-}
-
-func (ObjectHashModel) TableName() string {
- return ObjectHashModelTableName
-}
-
-type ObjectHashModelInterface interface {
- NewTx(tx any) ObjectHashModelInterface
- Take(ctx context.Context, hash string, engine string) (*ObjectHashModel, error)
- Create(ctx context.Context, h []*ObjectHashModel) error
- DeleteNoCitation(ctx context.Context, engine string, num int) (list []*ObjectHashModel, err error)
-}
diff --git a/pkg/common/db/table/relation/object_info.go b/pkg/common/db/table/relation/object_info.go
deleted file mode 100644
index 60d8d3c63..000000000
--- a/pkg/common/db/table/relation/object_info.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package relation
-
-import (
- "context"
- "time"
-)
-
-const (
- ObjectInfoModelTableName = "object_info"
-)
-
-type ObjectInfoModel struct {
- Name string `gorm:"column:name;primary_key"`
- Hash string `gorm:"column:hash"`
- ContentType string `gorm:"column:content_type"`
- ValidTime *time.Time `gorm:"column:valid_time"`
- CreateTime time.Time `gorm:"column:create_time"`
-}
-
-func (ObjectInfoModel) TableName() string {
- return ObjectInfoModelTableName
-}
-
-type ObjectInfoModelInterface interface {
- NewTx(tx any) ObjectInfoModelInterface
- SetObject(ctx context.Context, obj *ObjectInfoModel) error
- Take(ctx context.Context, name string) (*ObjectInfoModel, error)
- DeleteExpiration(ctx context.Context, expiration time.Time) error
-}
diff --git a/pkg/common/db/table/relation/object_put.go b/pkg/common/db/table/relation/object_put.go
deleted file mode 100644
index 62ffe61e7..000000000
--- a/pkg/common/db/table/relation/object_put.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package relation
-
-import (
- "context"
- "time"
-)
-
-const (
- ObjectPutModelTableName = "object_put"
-)
-
-type ObjectPutModel struct {
- PutID string `gorm:"column:put_id;primary_key"`
- Hash string `gorm:"column:hash"`
- Path string `gorm:"column:path"`
- Name string `gorm:"column:name"`
- ContentType string `gorm:"column:content_type"`
- ObjectSize int64 `gorm:"column:object_size"`
- FragmentSize int64 `gorm:"column:fragment_size"`
- PutURLsHash string `gorm:"column:put_urls_hash"`
- ValidTime *time.Time `gorm:"column:valid_time"`
- EffectiveTime time.Time `gorm:"column:effective_time"`
- CreateTime time.Time `gorm:"column:create_time"`
-}
-
-func (ObjectPutModel) TableName() string {
- return ObjectPutModelTableName
-}
-
-type ObjectPutModelInterface interface {
- NewTx(tx any) ObjectPutModelInterface
- Create(ctx context.Context, m []*ObjectPutModel) error
- Take(ctx context.Context, putID string) (*ObjectPutModel, error)
- SetCompleted(ctx context.Context, putID string) error
- FindExpirationPut(ctx context.Context, expirationTime time.Time, num int) ([]*ObjectPutModel, error)
- DelPut(ctx context.Context, ids []string) error
-}
diff --git a/pkg/common/db/table/unrelation/extend_msg_set.go b/pkg/common/db/table/unrelation/extend_msg_set.go
deleted file mode 100644
index fcf33af9f..000000000
--- a/pkg/common/db/table/unrelation/extend_msg_set.go
+++ /dev/null
@@ -1,82 +0,0 @@
-package unrelation
-
-import (
- "context"
- "strconv"
- "strings"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
-)
-
-const (
- CExtendMsgSet = "extend_msgs"
-
- ExtendMsgMaxNum = 100
-)
-
-type ExtendMsgSetModel struct {
- ConversationID string `bson:"source_id" json:"conversationID"`
- SessionType int32 `bson:"session_type" json:"sessionType"`
- ExtendMsgs map[string]ExtendMsgModel `bson:"extend_msgs" json:"extendMsgs"`
- ExtendMsgNum int32 `bson:"extend_msg_num" json:"extendMsgNum"`
- CreateTime int64 `bson:"create_time" json:"createTime"` // this block's create time
- MaxMsgUpdateTime int64 `bson:"max_msg_update_time" json:"maxMsgUpdateTime"` // index find msg
-}
-
-type KeyValueModel struct {
- TypeKey string `bson:"type_key" json:"typeKey"`
- Value string `bson:"value" json:"value"`
- LatestUpdateTime int64 `bson:"latest_update_time" json:"latestUpdateTime"`
-}
-
-type ExtendMsgModel struct {
- ReactionExtensionList map[string]KeyValueModel `bson:"reaction_extension_list" json:"reactionExtensionList"`
- ClientMsgID string `bson:"client_msg_id" json:"clientMsgID"`
- MsgFirstModifyTime int64 `bson:"msg_first_modify_time" json:"msgFirstModifyTime"` // this extendMsg create time
- AttachedInfo string `bson:"attached_info" json:"attachedInfo"`
- Ex string `bson:"ex" json:"ex"`
-}
-
-type ExtendMsgSetModelInterface interface {
- CreateExtendMsgSet(ctx context.Context, set *ExtendMsgSetModel) error
- GetAllExtendMsgSet(ctx context.Context, conversationID string, opts *GetAllExtendMsgSetOpts) (sets []*ExtendMsgSetModel, err error)
- GetExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, maxMsgUpdateTime int64) (*ExtendMsgSetModel, error)
- InsertExtendMsg(ctx context.Context, conversationID string, sessionType int32, msg *ExtendMsgModel) error
- InsertOrUpdateReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*KeyValueModel) error
- DeleteReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*KeyValueModel) error
- TakeExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (extendMsg *ExtendMsgModel, err error)
-}
-
-func (ExtendMsgSetModel) TableName() string {
- return CExtendMsgSet
-}
-
-func (ExtendMsgSetModel) GetExtendMsgMaxNum() int32 {
- return ExtendMsgMaxNum
-}
-
-func (ExtendMsgSetModel) GetConversationID(ID string, index int32) string {
- return ID + ":" + strconv.Itoa(int(index))
-}
-
-func (e *ExtendMsgSetModel) SplitConversationIDAndGetIndex() int32 {
- l := strings.Split(e.ConversationID, ":")
- index, _ := strconv.Atoi(l[len(l)-1])
- return int32(index)
-}
-
-type GetAllExtendMsgSetOpts struct {
- ExcludeExtendMsgs bool
-}
-
-func (ExtendMsgSetModel) Pb2Model(reactionExtensionList map[string]*sdkws.KeyValue) map[string]*KeyValueModel {
- r := make(map[string]*KeyValueModel)
- for key, value := range reactionExtensionList {
- r[key] = &KeyValueModel{
- TypeKey: value.TypeKey,
- Value: value.Value,
- LatestUpdateTime: value.LatestUpdateTime,
- }
- }
- return r
-}
diff --git a/pkg/common/db/unrelation/extend_msg.go b/pkg/common/db/unrelation/extend_msg.go
deleted file mode 100644
index ab2b8b2b3..000000000
--- a/pkg/common/db/unrelation/extend_msg.go
+++ /dev/null
@@ -1,153 +0,0 @@
-package unrelation
-
-import (
- "context"
- "errors"
- "fmt"
-
- unRelationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/bson/primitive"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
-)
-
-type ExtendMsgSetMongoDriver struct {
- mgoDB *mongo.Database
- ExtendMsgSetCollection *mongo.Collection
-}
-
-func NewExtendMsgSetMongoDriver(mgoDB *mongo.Database) unRelationTb.ExtendMsgSetModelInterface {
- return &ExtendMsgSetMongoDriver{mgoDB: mgoDB, ExtendMsgSetCollection: mgoDB.Collection(unRelationTb.CExtendMsgSet)}
-}
-
-func (e *ExtendMsgSetMongoDriver) CreateExtendMsgSet(ctx context.Context, set *unRelationTb.ExtendMsgSetModel) error {
- _, err := e.ExtendMsgSetCollection.InsertOne(ctx, set)
- return err
-}
-
-func (e *ExtendMsgSetMongoDriver) GetAllExtendMsgSet(ctx context.Context, ID string, opts *unRelationTb.GetAllExtendMsgSetOpts) (sets []*unRelationTb.ExtendMsgSetModel, err error) {
- regex := fmt.Sprintf("^%s", ID)
- var findOpts *options.FindOptions
- if opts != nil {
- if opts.ExcludeExtendMsgs {
- findOpts = &options.FindOptions{}
- findOpts.SetProjection(bson.M{"extend_msgs": 0})
- }
- }
- cursor, err := e.ExtendMsgSetCollection.Find(ctx, bson.M{"doc_id": primitive.Regex{Pattern: regex}}, findOpts)
- if err != nil {
- return nil, utils.Wrap(err, "")
- }
- err = cursor.All(ctx, &sets)
- if err != nil {
- return nil, utils.Wrap(err, fmt.Sprintf("cursor is %s", cursor.Current.String()))
- }
- return sets, nil
-}
-
-func (e *ExtendMsgSetMongoDriver) GetExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, maxMsgUpdateTime int64) (*unRelationTb.ExtendMsgSetModel, error) {
- var err error
- findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{"extend_msgs": 0})
- // update newest
- find := bson.M{"source_id": primitive.Regex{Pattern: fmt.Sprintf("^%s", conversationID)}, "session_type": sessionType}
- if maxMsgUpdateTime > 0 {
- find["max_msg_update_time"] = maxMsgUpdateTime
- }
- result, err := e.ExtendMsgSetCollection.Find(ctx, find, findOpts)
- if err != nil {
- return nil, utils.Wrap(err, "")
- }
- var setList []unRelationTb.ExtendMsgSetModel
- if err := result.All(ctx, &setList); err != nil {
- return nil, utils.Wrap(err, "")
- }
- if len(setList) == 0 {
- return nil, nil
- }
- return &setList[0], nil
-}
-
-// first modify msg
-func (e *ExtendMsgSetMongoDriver) InsertExtendMsg(ctx context.Context, conversationID string, sessionType int32, msg *unRelationTb.ExtendMsgModel) error {
- set, err := e.GetExtendMsgSet(ctx, conversationID, sessionType, 0)
- if err != nil {
- return utils.Wrap(err, "")
- }
- if set == nil || set.ExtendMsgNum >= set.GetExtendMsgMaxNum() {
- var index int32
- if set != nil {
- index = set.SplitConversationIDAndGetIndex()
- }
- err = e.CreateExtendMsgSet(ctx, &unRelationTb.ExtendMsgSetModel{
- ConversationID: set.GetConversationID(conversationID, index),
- SessionType: sessionType,
- ExtendMsgs: map[string]unRelationTb.ExtendMsgModel{msg.ClientMsgID: *msg},
- ExtendMsgNum: 1,
- CreateTime: msg.MsgFirstModifyTime,
- MaxMsgUpdateTime: msg.MsgFirstModifyTime,
- })
- } else {
- _, err = e.ExtendMsgSetCollection.UpdateOne(ctx, bson.M{"conversation_id": set.ConversationID, "session_type": sessionType}, bson.M{"$set": bson.M{"max_msg_update_time": msg.MsgFirstModifyTime, "$inc": bson.M{"extend_msg_num": 1}, fmt.Sprintf("extend_msgs.%s", msg.ClientMsgID): msg}})
- }
- return utils.Wrap(err, "")
-}
-
-// insert or update
-func (e *ExtendMsgSetMongoDriver) InsertOrUpdateReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*unRelationTb.KeyValueModel) error {
- var updateBson = bson.M{}
- for _, v := range reactionExtensionList {
- updateBson[fmt.Sprintf("extend_msgs.%s.%s", clientMsgID, v.TypeKey)] = v
- }
- upsert := true
- opt := &options.UpdateOptions{
- Upsert: &upsert,
- }
- set, err := e.GetExtendMsgSet(ctx, conversationID, sessionType, msgFirstModifyTime)
- if err != nil {
- return utils.Wrap(err, "")
- }
- if set == nil {
- return errors.New(fmt.Sprintf("conversationID %s has no set", conversationID))
- }
- _, err = e.ExtendMsgSetCollection.UpdateOne(ctx, bson.M{"source_id": set.ConversationID, "session_type": sessionType}, bson.M{"$set": updateBson}, opt)
- return utils.Wrap(err, "")
-}
-
-// delete TypeKey
-func (e *ExtendMsgSetMongoDriver) DeleteReactionExtendMsgSet(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*unRelationTb.KeyValueModel) error {
- var updateBson = bson.M{}
- for _, v := range reactionExtensionList {
- updateBson[fmt.Sprintf("extend_msgs.%s.%s", clientMsgID, v.TypeKey)] = ""
- }
- set, err := e.GetExtendMsgSet(ctx, conversationID, sessionType, msgFirstModifyTime)
- if err != nil {
- return utils.Wrap(err, "")
- }
- if set == nil {
- return errors.New(fmt.Sprintf("conversationID %s has no set", conversationID))
- }
- _, err = e.ExtendMsgSetCollection.UpdateOne(ctx, bson.M{"source_id": set.ConversationID, "session_type": sessionType}, bson.M{"$unset": updateBson})
- return err
-}
-
-func (e *ExtendMsgSetMongoDriver) TakeExtendMsg(ctx context.Context, conversationID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (extendMsg *unRelationTb.ExtendMsgModel, err error) {
- findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{fmt.Sprintf("extend_msgs.%s", clientMsgID): 1})
- regex := fmt.Sprintf("^%s", conversationID)
- result, err := e.ExtendMsgSetCollection.Find(ctx, bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType, "max_msg_update_time": bson.M{"$lte": maxMsgUpdateTime}}, findOpts)
- if err != nil {
- return nil, utils.Wrap(err, "")
- }
- var setList []unRelationTb.ExtendMsgSetModel
- if err := result.All(ctx, &setList); err != nil {
- return nil, utils.Wrap(err, "")
- }
- if len(setList) == 0 {
- return nil, utils.Wrap(errors.New("GetExtendMsg failed, len(setList) == 0"), "")
- }
- if v, ok := setList[0].ExtendMsgs[clientMsgID]; ok {
- return &v, nil
- }
- return nil, errors.New(fmt.Sprintf("cant find client msg id: %s", clientMsgID))
-}
diff --git a/pkg/common/db/unrelation/mongo.go b/pkg/common/db/unrelation/mongo.go
index 6ca460ef8..cb12ff4f2 100644
--- a/pkg/common/db/unrelation/mongo.go
+++ b/pkg/common/db/unrelation/mongo.go
@@ -78,10 +78,6 @@ func (m *Mongo) CreateSuperGroupIndex() error {
return nil
}
-func (m *Mongo) CreateExtendMsgSetIndex() error {
- return m.createMongoIndex(unrelation.CExtendMsgSet, true, "-create_time", "work_moment_id")
-}
-
func (m *Mongo) createMongoIndex(collection string, isUnique bool, keys ...string) error {
db := m.db.Database(config.Config.Mongo.Database).Collection(collection)
opts := options.CreateIndexes().SetMaxTime(10 * time.Second)
diff --git a/pkg/common/db/unrelation/msg.go b/pkg/common/db/unrelation/msg.go
index 33cc63f23..5abcc4e9f 100644
--- a/pkg/common/db/unrelation/msg.go
+++ b/pkg/common/db/unrelation/msg.go
@@ -196,21 +196,63 @@ func (m *MsgMongoDriver) SearchMessage(ctx context.Context, req *msg.SearchMessa
}
func (m *MsgMongoDriver) searchMessage(ctx context.Context, req *msg.SearchMessageReq) ([]*table.MsgInfoModel, error) {
- pipe := mongo.Pipeline{
+ var pipe mongo.Pipeline
+ conditon := bson.A{}
+ if req.SendTime != "" {
+ conditon = append(conditon, bson.M{"$eq": bson.A{bson.M{"$dateToString": bson.M{"format": "%Y-%m-%d", "date": bson.M{"$toDate": "$$item.msg.send_time"}}}, req.SendTime}})
+ }
+ if req.MsgType != 0 {
+ conditon = append(conditon, bson.M{"$eq": bson.A{"$$item.msg.content_type", req.MsgType}})
+ }
+ if req.SessionType != 0 {
+ conditon = append(conditon, bson.M{"$eq": bson.A{"$$item.msg.session_type", req.SessionType}})
+ }
+ if req.RecvID != "" {
+ conditon = append(conditon, bson.M{"$regexFind": bson.M{"input": "$$item.msg.recv_id", "regex": req.RecvID}})
+ }
+ if req.SendID != "" {
+ conditon = append(conditon, bson.M{"$regexFind": bson.M{"input": "$$item.msg.send_id", "regex": req.SendID}})
+ }
+
+ or := bson.A{
+ bson.M{
+ "doc_id": bson.M{
+ "$regex": "^si_",
+ "$options": "i",
+ },
+ },
+ }
+ or = append(or,
+ bson.M{
+ "doc_id": bson.M{
+ "$regex": "^g_",
+ "$options": "i",
+ },
+ },
+ bson.M{
+ "doc_id": bson.M{
+ "$regex": "^sg_",
+ "$options": "i",
+ },
+ },
+ )
+
+ pipe = mongo.Pipeline{
+ {
+ {"$match", bson.D{
+ {
+ "$or", or,
+ },
+ }},
+ },
{
{"$project", bson.D{
{"msgs", bson.D{
{"$filter", bson.D{
{"input", "$msgs"},
- {"as", "m"},
+ {"as", "item"},
{"cond", bson.D{
- {"$and", bson.A{
- bson.D{{"$$m.msgType", bson.D{{"$eq", req.MsgType}}}},
- bson.D{{"$$m.creat_time", bson.D{{"$gt", req.StartTime}}}},
- bson.D{{"$$m.creat_time", bson.D{{"$lt", req.EndTime}}}},
- bson.D{{"$$m.send_id", bson.D{{"$regex", req.Keyword1}}}},
- bson.D{{"$$m.recv_id", bson.D{{"$regex", req.Keyword2}}}},
- }},
+ {"$and", conditon},
},
}},
}},
@@ -233,40 +275,42 @@ func (m *MsgMongoDriver) searchMessage(ctx context.Context, req *msg.SearchMessa
return nil, errs.Wrap(mongo.ErrNoDocuments)
}
msgs := make([]*table.MsgInfoModel, 0)
- for i := range msgsDocs[0].Msg {
- msg := msgsDocs[0].Msg[i]
- if msg == nil || msg.Msg == nil {
- continue
- }
- if msg.Revoke != nil {
- revokeContent := sdkws.MessageRevokedContent{
- RevokerID: msg.Revoke.UserID,
- RevokerRole: msg.Revoke.Role,
- ClientMsgID: msg.Msg.ClientMsgID,
- RevokerNickname: msg.Revoke.Nickname,
- RevokeTime: msg.Revoke.Time,
- SourceMessageSendTime: msg.Msg.SendTime,
- SourceMessageSendID: msg.Msg.SendID,
- SourceMessageSenderNickname: msg.Msg.SenderNickname,
- SessionType: msg.Msg.SessionType,
- Seq: msg.Msg.Seq,
- Ex: msg.Msg.Ex,
- }
- data, err := json.Marshal(&revokeContent)
- if err != nil {
- return nil, err
+ for index, _ := range msgsDocs {
+ for i := range msgsDocs[index].Msg {
+ msg := msgsDocs[index].Msg[i]
+ if msg == nil || msg.Msg == nil {
+ continue
}
- elem := sdkws.NotificationElem{
- Detail: string(data),
+ if msg.Revoke != nil {
+ revokeContent := sdkws.MessageRevokedContent{
+ RevokerID: msg.Revoke.UserID,
+ RevokerRole: msg.Revoke.Role,
+ ClientMsgID: msg.Msg.ClientMsgID,
+ RevokerNickname: msg.Revoke.Nickname,
+ RevokeTime: msg.Revoke.Time,
+ SourceMessageSendTime: msg.Msg.SendTime,
+ SourceMessageSendID: msg.Msg.SendID,
+ SourceMessageSenderNickname: msg.Msg.SenderNickname,
+ SessionType: msg.Msg.SessionType,
+ Seq: msg.Msg.Seq,
+ Ex: msg.Msg.Ex,
+ }
+ data, err := json.Marshal(&revokeContent)
+ if err != nil {
+ return nil, err
+ }
+ elem := sdkws.NotificationElem{
+ Detail: string(data),
+ }
+ content, err := json.Marshal(&elem)
+ if err != nil {
+ return nil, err
+ }
+ msg.Msg.ContentType = constant.MsgRevokeNotification
+ msg.Msg.Content = string(content)
}
- content, err := json.Marshal(&elem)
- if err != nil {
- return nil, err
- }
- msg.Msg.ContentType = constant.MsgRevokeNotification
- msg.Msg.Content = string(content)
+ msgs = append(msgs, msg)
}
- msgs = append(msgs, msg)
}
return msgs, nil
}
diff --git a/pkg/proto/conversation/conversation.pb.go b/pkg/proto/conversation/conversation.pb.go
index 90dd1a4bd..45c3f69b9 100644
--- a/pkg/proto/conversation/conversation.pb.go
+++ b/pkg/proto/conversation/conversation.pb.go
@@ -30,20 +30,23 @@ type Conversation struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID,proto3" json:"ownerUserID"`
- ConversationID string `protobuf:"bytes,2,opt,name=conversationID,proto3" json:"conversationID"`
- RecvMsgOpt int32 `protobuf:"varint,3,opt,name=recvMsgOpt,proto3" json:"recvMsgOpt"`
- ConversationType int32 `protobuf:"varint,4,opt,name=conversationType,proto3" json:"conversationType"`
- UserID string `protobuf:"bytes,5,opt,name=userID,proto3" json:"userID"`
- GroupID string `protobuf:"bytes,6,opt,name=groupID,proto3" json:"groupID"`
- IsPinned bool `protobuf:"varint,7,opt,name=isPinned,proto3" json:"isPinned"`
- AttachedInfo string `protobuf:"bytes,8,opt,name=attachedInfo,proto3" json:"attachedInfo"`
- IsPrivateChat bool `protobuf:"varint,9,opt,name=isPrivateChat,proto3" json:"isPrivateChat"`
- GroupAtType int32 `protobuf:"varint,10,opt,name=groupAtType,proto3" json:"groupAtType"`
- Ex string `protobuf:"bytes,11,opt,name=ex,proto3" json:"ex"`
- BurnDuration int32 `protobuf:"varint,12,opt,name=burnDuration,proto3" json:"burnDuration"`
- MinSeq int64 `protobuf:"varint,13,opt,name=minSeq,proto3" json:"minSeq"`
- MaxSeq int64 `protobuf:"varint,14,opt,name=maxSeq,proto3" json:"maxSeq"`
+ OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID,proto3" json:"ownerUserID"`
+ ConversationID string `protobuf:"bytes,2,opt,name=conversationID,proto3" json:"conversationID"`
+ RecvMsgOpt int32 `protobuf:"varint,3,opt,name=recvMsgOpt,proto3" json:"recvMsgOpt"`
+ ConversationType int32 `protobuf:"varint,4,opt,name=conversationType,proto3" json:"conversationType"`
+ UserID string `protobuf:"bytes,5,opt,name=userID,proto3" json:"userID"`
+ GroupID string `protobuf:"bytes,6,opt,name=groupID,proto3" json:"groupID"`
+ IsPinned bool `protobuf:"varint,7,opt,name=isPinned,proto3" json:"isPinned"`
+ AttachedInfo string `protobuf:"bytes,8,opt,name=attachedInfo,proto3" json:"attachedInfo"`
+ IsPrivateChat bool `protobuf:"varint,9,opt,name=isPrivateChat,proto3" json:"isPrivateChat"`
+ GroupAtType int32 `protobuf:"varint,10,opt,name=groupAtType,proto3" json:"groupAtType"`
+ Ex string `protobuf:"bytes,11,opt,name=ex,proto3" json:"ex"`
+ BurnDuration int32 `protobuf:"varint,12,opt,name=burnDuration,proto3" json:"burnDuration"`
+ MinSeq int64 `protobuf:"varint,13,opt,name=minSeq,proto3" json:"minSeq"`
+ MaxSeq int64 `protobuf:"varint,14,opt,name=maxSeq,proto3" json:"maxSeq"`
+ MsgDestructTime int64 `protobuf:"varint,15,opt,name=msgDestructTime,proto3" json:"msgDestructTime"`
+ LatestMsgDestructTime int64 `protobuf:"varint,16,opt,name=latestMsgDestructTime,proto3" json:"latestMsgDestructTime"`
+ IsMsgDestruct bool `protobuf:"varint,17,opt,name=isMsgDestruct,proto3" json:"isMsgDestruct"`
}
func (x *Conversation) Reset() {
@@ -176,6 +179,27 @@ func (x *Conversation) GetMaxSeq() int64 {
return 0
}
+func (x *Conversation) GetMsgDestructTime() int64 {
+ if x != nil {
+ return x.MsgDestructTime
+ }
+ return 0
+}
+
+func (x *Conversation) GetLatestMsgDestructTime() int64 {
+ if x != nil {
+ return x.LatestMsgDestructTime
+ }
+ return 0
+}
+
+func (x *Conversation) GetIsMsgDestruct() bool {
+ if x != nil {
+ return x.IsMsgDestruct
+ }
+ return false
+}
+
type ConversationReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -194,6 +218,8 @@ type ConversationReq struct {
MinSeq *wrapperspb.Int64Value `protobuf:"bytes,11,opt,name=minSeq,proto3" json:"minSeq"`
MaxSeq *wrapperspb.Int64Value `protobuf:"bytes,12,opt,name=maxSeq,proto3" json:"maxSeq"`
GroupAtType *wrapperspb.Int32Value `protobuf:"bytes,13,opt,name=groupAtType,proto3" json:"groupAtType"`
+ MsgDestructTime *wrapperspb.Int64Value `protobuf:"bytes,14,opt,name=msgDestructTime,proto3" json:"msgDestructTime"`
+ IsMsgDestruct *wrapperspb.BoolValue `protobuf:"bytes,15,opt,name=isMsgDestruct,proto3" json:"isMsgDestruct"`
}
func (x *ConversationReq) Reset() {
@@ -319,6 +345,20 @@ func (x *ConversationReq) GetGroupAtType() *wrapperspb.Int32Value {
return nil
}
+func (x *ConversationReq) GetMsgDestructTime() *wrapperspb.Int64Value {
+ if x != nil {
+ return x.MsgDestructTime
+ }
+ return nil
+}
+
+func (x *ConversationReq) GetIsMsgDestruct() *wrapperspb.BoolValue {
+ if x != nil {
+ return x.IsMsgDestruct
+ }
+ return nil
+}
+
type SetConversationReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1466,7 +1506,7 @@ var file_conversation_conversation_proto_rawDesc = []byte{
0x6f, 0x12, 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x1b, 0x77, 0x72,
0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x70, 0x62, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72,
- 0x73, 0x70, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x43, 0x6f,
+ 0x73, 0x70, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc8, 0x04, 0x0a, 0x0c, 0x43, 0x6f,
0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77,
0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e,
@@ -1494,272 +1534,290 @@ var file_conversation_conversation_proto_rawDesc = []byte{
0x52, 0x0c, 0x62, 0x75, 0x72, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
0x6d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71,
- 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x22, 0xde,
- 0x05, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f,
- 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18,
- 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12, 0x41, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x76,
- 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f,
- 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x0a, 0x72, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x69,
- 0x73, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e,
- 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x08, 0x69, 0x73, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x0c, 0x61, 0x74, 0x74,
- 0x61, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66,
- 0x6f, 0x12, 0x46, 0x0a, 0x0d, 0x69, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68,
- 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
- 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x69, 0x73, 0x50, 0x72,
- 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x12, 0x32, 0x0a, 0x02, 0x65, 0x78, 0x18,
- 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x28,
+ 0x0a, 0x0f, 0x6d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x69, 0x6d,
+ 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x6c, 0x61, 0x74, 0x65,
+ 0x73, 0x74, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x69, 0x6d,
+ 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d,
+ 0x73, 0x67, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24,
+ 0x0a, 0x0d, 0x69, 0x73, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18,
+ 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x22, 0xf3, 0x06, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
+ 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06,
+ 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73,
+ 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12, 0x41,
+ 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70,
+ 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x73, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x73, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12,
+ 0x46, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18,
+ 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74,
- 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02, 0x65, 0x78, 0x12, 0x45, 0x0a,
- 0x0c, 0x62, 0x75, 0x72, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33,
- 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x62, 0x75, 0x72, 0x6e, 0x44, 0x75, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x18, 0x0b,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74,
- 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x12,
- 0x39, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x0b, 0x67, 0x72,
- 0x6f, 0x75, 0x70, 0x41, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x52, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22,
- 0x61, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5e, 0x0a, 0x12, 0x47, 0x65, 0x74,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12,
- 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
- 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72,
- 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77,
- 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+ 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x46, 0x0a, 0x0d, 0x69, 0x73, 0x50, 0x72, 0x69,
+ 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
+ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x0d, 0x69, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x12,
+ 0x32, 0x0a, 0x02, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+ 0x02, 0x65, 0x78, 0x12, 0x45, 0x0a, 0x0c, 0x62, 0x75, 0x72, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+ 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x62, 0x75,
+ 0x72, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x06, 0x6d, 0x69,
+ 0x6e, 0x53, 0x65, 0x71, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+ 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x6d,
+ 0x69, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18,
+ 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e,
+ 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71,
+ 0x12, 0x43, 0x0a, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18,
+ 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e,
+ 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4b, 0x0a, 0x0f, 0x6d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
+ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x0f, 0x6d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x69,
+ 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0d, 0x69, 0x73, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x73, 0x74, 0x72,
+ 0x75, 0x63, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+ 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x69, 0x73, 0x4d,
+ 0x73, 0x67, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x53, 0x65,
+ 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x61, 0x0a,
- 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65,
- 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72,
- 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73,
- 0x22, 0x65, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c,
- 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65,
- 0x72, 0x49, 0x44, 0x22, 0x68, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d,
- 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d,
- 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x39, 0x0a,
- 0x1d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f,
- 0x74, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x18,
- 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x22, 0x3a, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52,
- 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65,
- 0x72, 0x49, 0x44, 0x73, 0x22, 0x52, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69,
- 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x76,
- 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44,
- 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x22, 0x23, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x0a,
- 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
- 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72,
- 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f,
- 0x75, 0x70, 0x49, 0x44, 0x22, 0x22, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72,
- 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7c, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x43,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65,
- 0x71, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
- 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b,
- 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x16,
- 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
- 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52,
- 0x65, 0x73, 0x70, 0x22, 0x2f, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06,
- 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x22, 0x42, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28,
- 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x22, 0x7f, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x43,
+ 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a,
+ 0x13, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x22, 0x5e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49,
+ 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73,
+ 0x65, 0x72, 0x49, 0x44, 0x22, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, 0x0c, 0x63,
+ 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x61, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43,
0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12,
- 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x12, 0x4e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x52, 0x0c, 0x63, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x22, 0x41, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61, 0x73, 0x68, 0x52,
- 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49,
- 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x22, 0x34, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61,
- 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x4f, 0x0a, 0x23, 0x47, 0x65,
- 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x65,
- 0x71, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x22, 0x75, 0x0a, 0x24, 0x47,
- 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42,
- 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52,
+ 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49,
+ 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x22, 0x65, 0x0a, 0x14, 0x47,
+ 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x65, 0x73, 0x70, 0x12, 0x4d, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65,
+ 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65,
0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x32, 0xdf, 0x0c, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x12, 0x70, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x6e, 0x73, 0x22, 0x3a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b,
+ 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x68,
+ 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d, 0x0a, 0x0d, 0x63, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x39, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x52,
+ 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55,
+ 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x49, 0x44, 0x22, 0x3a, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73,
+ 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x22,
+ 0x52, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43,
+ 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x73,
+ 0x65, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e,
+ 0x64, 0x49, 0x44, 0x22, 0x23, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6e,
+ 0x67, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x75,
+ 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73,
+ 0x65, 0x72, 0x49, 0x44, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x22,
+ 0x22, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68,
+ 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x22, 0x7c, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x12,
+ 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
+ 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72,
+ 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77,
+ 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78,
+ 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65,
+ 0x71, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2f,
+ 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
+ 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22,
+ 0x42, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x49, 0x44, 0x73, 0x22, 0x7f, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73,
+ 0x65, 0x72, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65,
+ 0x72, 0x49, 0x44, 0x73, 0x12, 0x4e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x0a, 0x1d,
+ 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a,
+ 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22,
+ 0x34, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73,
+ 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52,
+ 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x4f, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x65, 0x71, 0x12, 0x28, 0x0a, 0x0f,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x22, 0x75, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d,
+ 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xdf, 0x0c,
+ 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x70,
+ 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65,
+ 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x1a, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74,
+ 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+ 0x12, 0x7c, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x32, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73,
+ 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47,
+ 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47,
+ 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x12, 0x70, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7c, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x4f,
- 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a,
- 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41,
- 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x70, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x43,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x4f, 0x70,
+ 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x91, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63,
+ 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65,
+ 0x72, 0x49, 0x44, 0x73, 0x12, 0x38, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f,
+ 0x74, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x39,
+ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65,
+ 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x73,
+ 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x9a, 0x01, 0x0a, 0x1d, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x2e, 0x4f, 0x70,
0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x4f, 0x70, 0x65,
- 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x91, 0x01, 0x0a, 0x1a, 0x47,
- 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x69,
- 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x12, 0x38, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67,
- 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73,
- 0x52, 0x65, 0x71, 0x1a, 0x39, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x74,
- 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x9a,
- 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69,
+ 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x3c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
+ 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x6c,
+ 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x97, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43,
0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x12, 0x3b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
- 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x3c, 0x2e,
- 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x97, 0x01, 0x0a, 0x1c,
+ 0x52, 0x65, 0x71, 0x1a, 0x3b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x43,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x2e, 0x4f,
- 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47,
- 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x3b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
- 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70,
- 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x82, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12,
- 0x33, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63,
+ 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x12, 0x82, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x33, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x1a,
+ 0x34, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63,
0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43,
0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65,
- 0x71, 0x52, 0x65, 0x71, 0x1a, 0x34, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
+ 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x79, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12, 0x30, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x31, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x12, 0x73, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x79, 0x0a, 0x12, 0x47, 0x65,
- 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73,
- 0x12, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
- 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x52,
- 0x65, 0x71, 0x1a, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47,
- 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x91, 0x01, 0x0a, 0x1a, 0x47,
- 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x38, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61, 0x73, 0x68,
- 0x52, 0x65, 0x71, 0x1a, 0x39, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0xa3,
- 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x49, 0x44, 0x12, 0x3e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
- 0x52, 0x65, 0x71, 0x1a, 0x3f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
- 0x52, 0x65, 0x73, 0x70, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
- 0x6f, 0x6d, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65,
- 0x6e, 0x2d, 0x49, 0x4d, 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x91, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
+ 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73,
+ 0x48, 0x61, 0x73, 0x68, 0x12, 0x38, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x39,
+ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73,
+ 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
+ 0x73, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0xa3, 0x01, 0x0a, 0x20, 0x47, 0x65,
+ 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79,
+ 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x3e,
+ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x3f,
+ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x42,
+ 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x2d, 0x49, 0x4d, 0x2d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1817,41 +1875,43 @@ var file_conversation_conversation_proto_depIdxs = []int32{
29, // 6: OpenIMServer.conversation.ConversationReq.minSeq:type_name -> OpenIMServer.protobuf.Int64Value
29, // 7: OpenIMServer.conversation.ConversationReq.maxSeq:type_name -> OpenIMServer.protobuf.Int64Value
26, // 8: OpenIMServer.conversation.ConversationReq.groupAtType:type_name -> OpenIMServer.protobuf.Int32Value
- 0, // 9: OpenIMServer.conversation.SetConversationReq.conversation:type_name -> OpenIMServer.conversation.Conversation
- 0, // 10: OpenIMServer.conversation.GetConversationResp.conversation:type_name -> OpenIMServer.conversation.Conversation
- 0, // 11: OpenIMServer.conversation.GetConversationsResp.conversations:type_name -> OpenIMServer.conversation.Conversation
- 0, // 12: OpenIMServer.conversation.GetAllConversationsResp.conversations:type_name -> OpenIMServer.conversation.Conversation
- 1, // 13: OpenIMServer.conversation.SetConversationsReq.conversation:type_name -> OpenIMServer.conversation.ConversationReq
- 0, // 14: OpenIMServer.conversation.GetConversationsByConversationIDResp.conversations:type_name -> OpenIMServer.conversation.Conversation
- 4, // 15: OpenIMServer.conversation.conversation.GetConversation:input_type -> OpenIMServer.conversation.GetConversationReq
- 8, // 16: OpenIMServer.conversation.conversation.GetAllConversations:input_type -> OpenIMServer.conversation.GetAllConversationsReq
- 6, // 17: OpenIMServer.conversation.conversation.GetConversations:input_type -> OpenIMServer.conversation.GetConversationsReq
- 2, // 18: OpenIMServer.conversation.conversation.SetConversation:input_type -> OpenIMServer.conversation.SetConversationReq
- 10, // 19: OpenIMServer.conversation.conversation.GetRecvMsgNotNotifyUserIDs:input_type -> OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsReq
- 12, // 20: OpenIMServer.conversation.conversation.CreateSingleChatConversations:input_type -> OpenIMServer.conversation.CreateSingleChatConversationsReq
- 14, // 21: OpenIMServer.conversation.conversation.CreateGroupChatConversations:input_type -> OpenIMServer.conversation.CreateGroupChatConversationsReq
- 16, // 22: OpenIMServer.conversation.conversation.SetConversationMaxSeq:input_type -> OpenIMServer.conversation.SetConversationMaxSeqReq
- 18, // 23: OpenIMServer.conversation.conversation.GetConversationIDs:input_type -> OpenIMServer.conversation.GetConversationIDsReq
- 20, // 24: OpenIMServer.conversation.conversation.SetConversations:input_type -> OpenIMServer.conversation.SetConversationsReq
- 22, // 25: OpenIMServer.conversation.conversation.GetUserConversationIDsHash:input_type -> OpenIMServer.conversation.GetUserConversationIDsHashReq
- 24, // 26: OpenIMServer.conversation.conversation.GetConversationsByConversationID:input_type -> OpenIMServer.conversation.GetConversationsByConversationIDReq
- 5, // 27: OpenIMServer.conversation.conversation.GetConversation:output_type -> OpenIMServer.conversation.GetConversationResp
- 9, // 28: OpenIMServer.conversation.conversation.GetAllConversations:output_type -> OpenIMServer.conversation.GetAllConversationsResp
- 7, // 29: OpenIMServer.conversation.conversation.GetConversations:output_type -> OpenIMServer.conversation.GetConversationsResp
- 3, // 30: OpenIMServer.conversation.conversation.SetConversation:output_type -> OpenIMServer.conversation.SetConversationResp
- 11, // 31: OpenIMServer.conversation.conversation.GetRecvMsgNotNotifyUserIDs:output_type -> OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsResp
- 13, // 32: OpenIMServer.conversation.conversation.CreateSingleChatConversations:output_type -> OpenIMServer.conversation.CreateSingleChatConversationsResp
- 15, // 33: OpenIMServer.conversation.conversation.CreateGroupChatConversations:output_type -> OpenIMServer.conversation.CreateGroupChatConversationsResp
- 17, // 34: OpenIMServer.conversation.conversation.SetConversationMaxSeq:output_type -> OpenIMServer.conversation.SetConversationMaxSeqResp
- 19, // 35: OpenIMServer.conversation.conversation.GetConversationIDs:output_type -> OpenIMServer.conversation.GetConversationIDsResp
- 21, // 36: OpenIMServer.conversation.conversation.SetConversations:output_type -> OpenIMServer.conversation.SetConversationsResp
- 23, // 37: OpenIMServer.conversation.conversation.GetUserConversationIDsHash:output_type -> OpenIMServer.conversation.GetUserConversationIDsHashResp
- 25, // 38: OpenIMServer.conversation.conversation.GetConversationsByConversationID:output_type -> OpenIMServer.conversation.GetConversationsByConversationIDResp
- 27, // [27:39] is the sub-list for method output_type
- 15, // [15:27] is the sub-list for method input_type
- 15, // [15:15] is the sub-list for extension type_name
- 15, // [15:15] is the sub-list for extension extendee
- 0, // [0:15] is the sub-list for field type_name
+ 29, // 9: OpenIMServer.conversation.ConversationReq.msgDestructTime:type_name -> OpenIMServer.protobuf.Int64Value
+ 27, // 10: OpenIMServer.conversation.ConversationReq.isMsgDestruct:type_name -> OpenIMServer.protobuf.BoolValue
+ 0, // 11: OpenIMServer.conversation.SetConversationReq.conversation:type_name -> OpenIMServer.conversation.Conversation
+ 0, // 12: OpenIMServer.conversation.GetConversationResp.conversation:type_name -> OpenIMServer.conversation.Conversation
+ 0, // 13: OpenIMServer.conversation.GetConversationsResp.conversations:type_name -> OpenIMServer.conversation.Conversation
+ 0, // 14: OpenIMServer.conversation.GetAllConversationsResp.conversations:type_name -> OpenIMServer.conversation.Conversation
+ 1, // 15: OpenIMServer.conversation.SetConversationsReq.conversation:type_name -> OpenIMServer.conversation.ConversationReq
+ 0, // 16: OpenIMServer.conversation.GetConversationsByConversationIDResp.conversations:type_name -> OpenIMServer.conversation.Conversation
+ 4, // 17: OpenIMServer.conversation.conversation.GetConversation:input_type -> OpenIMServer.conversation.GetConversationReq
+ 8, // 18: OpenIMServer.conversation.conversation.GetAllConversations:input_type -> OpenIMServer.conversation.GetAllConversationsReq
+ 6, // 19: OpenIMServer.conversation.conversation.GetConversations:input_type -> OpenIMServer.conversation.GetConversationsReq
+ 2, // 20: OpenIMServer.conversation.conversation.SetConversation:input_type -> OpenIMServer.conversation.SetConversationReq
+ 10, // 21: OpenIMServer.conversation.conversation.GetRecvMsgNotNotifyUserIDs:input_type -> OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsReq
+ 12, // 22: OpenIMServer.conversation.conversation.CreateSingleChatConversations:input_type -> OpenIMServer.conversation.CreateSingleChatConversationsReq
+ 14, // 23: OpenIMServer.conversation.conversation.CreateGroupChatConversations:input_type -> OpenIMServer.conversation.CreateGroupChatConversationsReq
+ 16, // 24: OpenIMServer.conversation.conversation.SetConversationMaxSeq:input_type -> OpenIMServer.conversation.SetConversationMaxSeqReq
+ 18, // 25: OpenIMServer.conversation.conversation.GetConversationIDs:input_type -> OpenIMServer.conversation.GetConversationIDsReq
+ 20, // 26: OpenIMServer.conversation.conversation.SetConversations:input_type -> OpenIMServer.conversation.SetConversationsReq
+ 22, // 27: OpenIMServer.conversation.conversation.GetUserConversationIDsHash:input_type -> OpenIMServer.conversation.GetUserConversationIDsHashReq
+ 24, // 28: OpenIMServer.conversation.conversation.GetConversationsByConversationID:input_type -> OpenIMServer.conversation.GetConversationsByConversationIDReq
+ 5, // 29: OpenIMServer.conversation.conversation.GetConversation:output_type -> OpenIMServer.conversation.GetConversationResp
+ 9, // 30: OpenIMServer.conversation.conversation.GetAllConversations:output_type -> OpenIMServer.conversation.GetAllConversationsResp
+ 7, // 31: OpenIMServer.conversation.conversation.GetConversations:output_type -> OpenIMServer.conversation.GetConversationsResp
+ 3, // 32: OpenIMServer.conversation.conversation.SetConversation:output_type -> OpenIMServer.conversation.SetConversationResp
+ 11, // 33: OpenIMServer.conversation.conversation.GetRecvMsgNotNotifyUserIDs:output_type -> OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsResp
+ 13, // 34: OpenIMServer.conversation.conversation.CreateSingleChatConversations:output_type -> OpenIMServer.conversation.CreateSingleChatConversationsResp
+ 15, // 35: OpenIMServer.conversation.conversation.CreateGroupChatConversations:output_type -> OpenIMServer.conversation.CreateGroupChatConversationsResp
+ 17, // 36: OpenIMServer.conversation.conversation.SetConversationMaxSeq:output_type -> OpenIMServer.conversation.SetConversationMaxSeqResp
+ 19, // 37: OpenIMServer.conversation.conversation.GetConversationIDs:output_type -> OpenIMServer.conversation.GetConversationIDsResp
+ 21, // 38: OpenIMServer.conversation.conversation.SetConversations:output_type -> OpenIMServer.conversation.SetConversationsResp
+ 23, // 39: OpenIMServer.conversation.conversation.GetUserConversationIDsHash:output_type -> OpenIMServer.conversation.GetUserConversationIDsHashResp
+ 25, // 40: OpenIMServer.conversation.conversation.GetConversationsByConversationID:output_type -> OpenIMServer.conversation.GetConversationsByConversationIDResp
+ 29, // [29:41] is the sub-list for method output_type
+ 17, // [17:29] is the sub-list for method input_type
+ 17, // [17:17] is the sub-list for extension type_name
+ 17, // [17:17] is the sub-list for extension extendee
+ 0, // [0:17] is the sub-list for field type_name
}
func init() { file_conversation_conversation_proto_init() }
diff --git a/pkg/proto/conversation/conversation.proto b/pkg/proto/conversation/conversation.proto
index 82b7e6a22..ccab236cf 100644
--- a/pkg/proto/conversation/conversation.proto
+++ b/pkg/proto/conversation/conversation.proto
@@ -18,6 +18,9 @@ message Conversation{
int32 burnDuration = 12;
int64 minSeq = 13;
int64 maxSeq = 14;
+ int64 msgDestructTime = 15;
+ int64 latestMsgDestructTime = 16;
+ bool isMsgDestruct = 17;
}
message ConversationReq{
@@ -34,6 +37,8 @@ message ConversationReq{
OpenIMServer.protobuf.Int64Value minSeq = 11;
OpenIMServer.protobuf.Int64Value maxSeq = 12;
OpenIMServer.protobuf.Int32Value groupAtType = 13;
+ OpenIMServer.protobuf.Int64Value msgDestructTime = 14;
+ OpenIMServer.protobuf.BoolValue isMsgDestruct = 15;
}
message SetConversationReq{
diff --git a/pkg/proto/msg/msg.pb.go b/pkg/proto/msg/msg.pb.go
index 668fa85dc..c59f9f7bd 100644
--- a/pkg/proto/msg/msg.pb.go
+++ b/pkg/proto/msg/msg.pb.go
@@ -9,7 +9,6 @@ package msg
import (
context "context"
sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
- wrapperspb "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/wrapperspb"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
@@ -628,24 +627,17 @@ func (x *GetSendMsgStatusResp) GetStatus() int32 {
return 0
}
-type ModifyMessageReactionExtensionsReq struct {
+type MsgDataToModifyByMQ struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- SessionType int32 `protobuf:"varint,2,opt,name=sessionType,proto3" json:"sessionType"`
- ReactionExtensions map[string]*sdkws.KeyValue `protobuf:"bytes,3,rep,name=reactionExtensions,proto3" json:"reactionExtensions" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- Ex *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=ex,proto3" json:"ex"`
- AttachedInfo *wrapperspb.StringValue `protobuf:"bytes,6,opt,name=attachedInfo,proto3" json:"attachedInfo"`
- IsReact bool `protobuf:"varint,7,opt,name=isReact,proto3" json:"isReact"`
- IsExternalExtensions bool `protobuf:"varint,8,opt,name=isExternalExtensions,proto3" json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `protobuf:"varint,9,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
+ Messages []*sdkws.MsgData `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages"`
+ ConversationID string `protobuf:"bytes,2,opt,name=conversationID,proto3" json:"conversationID"`
}
-func (x *ModifyMessageReactionExtensionsReq) Reset() {
- *x = ModifyMessageReactionExtensionsReq{}
+func (x *MsgDataToModifyByMQ) Reset() {
+ *x = MsgDataToModifyByMQ{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -653,13 +645,13 @@ func (x *ModifyMessageReactionExtensionsReq) Reset() {
}
}
-func (x *ModifyMessageReactionExtensionsReq) String() string {
+func (x *MsgDataToModifyByMQ) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ModifyMessageReactionExtensionsReq) ProtoMessage() {}
+func (*MsgDataToModifyByMQ) ProtoMessage() {}
-func (x *ModifyMessageReactionExtensionsReq) ProtoReflect() protoreflect.Message {
+func (x *MsgDataToModifyByMQ) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -671,92 +663,33 @@ func (x *ModifyMessageReactionExtensionsReq) ProtoReflect() protoreflect.Message
return mi.MessageOf(x)
}
-// Deprecated: Use ModifyMessageReactionExtensionsReq.ProtoReflect.Descriptor instead.
-func (*ModifyMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use MsgDataToModifyByMQ.ProtoReflect.Descriptor instead.
+func (*MsgDataToModifyByMQ) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{12}
}
-func (x *ModifyMessageReactionExtensionsReq) GetConversationID() string {
- if x != nil {
- return x.ConversationID
- }
- return ""
-}
-
-func (x *ModifyMessageReactionExtensionsReq) GetSessionType() int32 {
- if x != nil {
- return x.SessionType
- }
- return 0
-}
-
-func (x *ModifyMessageReactionExtensionsReq) GetReactionExtensions() map[string]*sdkws.KeyValue {
+func (x *MsgDataToModifyByMQ) GetMessages() []*sdkws.MsgData {
if x != nil {
- return x.ReactionExtensions
+ return x.Messages
}
return nil
}
-func (x *ModifyMessageReactionExtensionsReq) GetClientMsgID() string {
+func (x *MsgDataToModifyByMQ) GetConversationID() string {
if x != nil {
- return x.ClientMsgID
+ return x.ConversationID
}
return ""
}
-func (x *ModifyMessageReactionExtensionsReq) GetEx() *wrapperspb.StringValue {
- if x != nil {
- return x.Ex
- }
- return nil
-}
-
-func (x *ModifyMessageReactionExtensionsReq) GetAttachedInfo() *wrapperspb.StringValue {
- if x != nil {
- return x.AttachedInfo
- }
- return nil
-}
-
-func (x *ModifyMessageReactionExtensionsReq) GetIsReact() bool {
- if x != nil {
- return x.IsReact
- }
- return false
-}
-
-func (x *ModifyMessageReactionExtensionsReq) GetIsExternalExtensions() bool {
- if x != nil {
- return x.IsExternalExtensions
- }
- return false
-}
-
-func (x *ModifyMessageReactionExtensionsReq) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-type SetMessageReactionExtensionsReq struct {
+type DelMsgsReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
-
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- SessionType int32 `protobuf:"varint,2,opt,name=sessionType,proto3" json:"sessionType"`
- ReactionExtensions map[string]*sdkws.KeyValue `protobuf:"bytes,3,rep,name=reactionExtensions,proto3" json:"reactionExtensions" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- Ex *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=ex,proto3" json:"ex"`
- AttachedInfo *wrapperspb.StringValue `protobuf:"bytes,6,opt,name=attachedInfo,proto3" json:"attachedInfo"`
- IsReact bool `protobuf:"varint,7,opt,name=isReact,proto3" json:"isReact"`
- IsExternalExtensions bool `protobuf:"varint,8,opt,name=isExternalExtensions,proto3" json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `protobuf:"varint,9,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
}
-func (x *SetMessageReactionExtensionsReq) Reset() {
- *x = SetMessageReactionExtensionsReq{}
+func (x *DelMsgsReq) Reset() {
+ *x = DelMsgsReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -764,13 +697,13 @@ func (x *SetMessageReactionExtensionsReq) Reset() {
}
}
-func (x *SetMessageReactionExtensionsReq) String() string {
+func (x *DelMsgsReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*SetMessageReactionExtensionsReq) ProtoMessage() {}
+func (*DelMsgsReq) ProtoMessage() {}
-func (x *SetMessageReactionExtensionsReq) ProtoReflect() protoreflect.Message {
+func (x *DelMsgsReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -782,87 +715,19 @@ func (x *SetMessageReactionExtensionsReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use SetMessageReactionExtensionsReq.ProtoReflect.Descriptor instead.
-func (*SetMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use DelMsgsReq.ProtoReflect.Descriptor instead.
+func (*DelMsgsReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{13}
}
-func (x *SetMessageReactionExtensionsReq) GetConversationID() string {
- if x != nil {
- return x.ConversationID
- }
- return ""
-}
-
-func (x *SetMessageReactionExtensionsReq) GetSessionType() int32 {
- if x != nil {
- return x.SessionType
- }
- return 0
-}
-
-func (x *SetMessageReactionExtensionsReq) GetReactionExtensions() map[string]*sdkws.KeyValue {
- if x != nil {
- return x.ReactionExtensions
- }
- return nil
-}
-
-func (x *SetMessageReactionExtensionsReq) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *SetMessageReactionExtensionsReq) GetEx() *wrapperspb.StringValue {
- if x != nil {
- return x.Ex
- }
- return nil
-}
-
-func (x *SetMessageReactionExtensionsReq) GetAttachedInfo() *wrapperspb.StringValue {
- if x != nil {
- return x.AttachedInfo
- }
- return nil
-}
-
-func (x *SetMessageReactionExtensionsReq) GetIsReact() bool {
- if x != nil {
- return x.IsReact
- }
- return false
-}
-
-func (x *SetMessageReactionExtensionsReq) GetIsExternalExtensions() bool {
- if x != nil {
- return x.IsExternalExtensions
- }
- return false
-}
-
-func (x *SetMessageReactionExtensionsReq) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-type SetMessageReactionExtensionsResp struct {
+type DelMsgsResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
-
- ClientMsgID string `protobuf:"bytes,1,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- MsgFirstModifyTime int64 `protobuf:"varint,2,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
- IsReact bool `protobuf:"varint,3,opt,name=isReact,proto3" json:"isReact"`
- Result []*KeyValueResp `protobuf:"bytes,4,rep,name=result,proto3" json:"result"`
}
-func (x *SetMessageReactionExtensionsResp) Reset() {
- *x = SetMessageReactionExtensionsResp{}
+func (x *DelMsgsResp) Reset() {
+ *x = DelMsgsResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -870,13 +735,13 @@ func (x *SetMessageReactionExtensionsResp) Reset() {
}
}
-func (x *SetMessageReactionExtensionsResp) String() string {
+func (x *DelMsgsResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*SetMessageReactionExtensionsResp) ProtoMessage() {}
+func (*DelMsgsResp) ProtoMessage() {}
-func (x *SetMessageReactionExtensionsResp) ProtoReflect() protoreflect.Message {
+func (x *DelMsgsResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -888,52 +753,23 @@ func (x *SetMessageReactionExtensionsResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use SetMessageReactionExtensionsResp.ProtoReflect.Descriptor instead.
-func (*SetMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use DelMsgsResp.ProtoReflect.Descriptor instead.
+func (*DelMsgsResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{14}
}
-func (x *SetMessageReactionExtensionsResp) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *SetMessageReactionExtensionsResp) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-func (x *SetMessageReactionExtensionsResp) GetIsReact() bool {
- if x != nil {
- return x.IsReact
- }
- return false
-}
-
-func (x *SetMessageReactionExtensionsResp) GetResult() []*KeyValueResp {
- if x != nil {
- return x.Result
- }
- return nil
-}
-
-type GetMessagesReactionExtensionsReq struct {
+type RevokeMsgReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- SessionType int32 `protobuf:"varint,2,opt,name=sessionType,proto3" json:"sessionType"`
- MessageReactionKeys []*GetMessagesReactionExtensionsReq_MessageReactionKey `protobuf:"bytes,3,rep,name=messageReactionKeys,proto3" json:"messageReactionKeys"`
- TypeKeys []string `protobuf:"bytes,4,rep,name=TypeKeys,proto3" json:"TypeKeys"`
+ ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
+ Seq int64 `protobuf:"varint,2,opt,name=seq,proto3" json:"seq"`
+ UserID string `protobuf:"bytes,3,opt,name=userID,proto3" json:"userID"`
}
-func (x *GetMessagesReactionExtensionsReq) Reset() {
- *x = GetMessagesReactionExtensionsReq{}
+func (x *RevokeMsgReq) Reset() {
+ *x = RevokeMsgReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -941,13 +777,13 @@ func (x *GetMessagesReactionExtensionsReq) Reset() {
}
}
-func (x *GetMessagesReactionExtensionsReq) String() string {
+func (x *RevokeMsgReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetMessagesReactionExtensionsReq) ProtoMessage() {}
+func (*RevokeMsgReq) ProtoMessage() {}
-func (x *GetMessagesReactionExtensionsReq) ProtoReflect() protoreflect.Message {
+func (x *RevokeMsgReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -959,49 +795,40 @@ func (x *GetMessagesReactionExtensionsReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetMessagesReactionExtensionsReq.ProtoReflect.Descriptor instead.
-func (*GetMessagesReactionExtensionsReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use RevokeMsgReq.ProtoReflect.Descriptor instead.
+func (*RevokeMsgReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{15}
}
-func (x *GetMessagesReactionExtensionsReq) GetConversationID() string {
+func (x *RevokeMsgReq) GetConversationID() string {
if x != nil {
return x.ConversationID
}
return ""
}
-func (x *GetMessagesReactionExtensionsReq) GetSessionType() int32 {
+func (x *RevokeMsgReq) GetSeq() int64 {
if x != nil {
- return x.SessionType
+ return x.Seq
}
return 0
}
-func (x *GetMessagesReactionExtensionsReq) GetMessageReactionKeys() []*GetMessagesReactionExtensionsReq_MessageReactionKey {
- if x != nil {
- return x.MessageReactionKeys
- }
- return nil
-}
-
-func (x *GetMessagesReactionExtensionsReq) GetTypeKeys() []string {
+func (x *RevokeMsgReq) GetUserID() string {
if x != nil {
- return x.TypeKeys
+ return x.UserID
}
- return nil
+ return ""
}
-type GetMessagesReactionExtensionsResp struct {
+type RevokeMsgResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
-
- SingleMessageResult []*SingleMessageExtensionResult `protobuf:"bytes,1,rep,name=singleMessageResult,proto3" json:"singleMessageResult"`
}
-func (x *GetMessagesReactionExtensionsResp) Reset() {
- *x = GetMessagesReactionExtensionsResp{}
+func (x *RevokeMsgResp) Reset() {
+ *x = RevokeMsgResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1009,13 +836,13 @@ func (x *GetMessagesReactionExtensionsResp) Reset() {
}
}
-func (x *GetMessagesReactionExtensionsResp) String() string {
+func (x *RevokeMsgResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetMessagesReactionExtensionsResp) ProtoMessage() {}
+func (*RevokeMsgResp) ProtoMessage() {}
-func (x *GetMessagesReactionExtensionsResp) ProtoReflect() protoreflect.Message {
+func (x *RevokeMsgResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1027,29 +854,23 @@ func (x *GetMessagesReactionExtensionsResp) ProtoReflect() protoreflect.Message
return mi.MessageOf(x)
}
-// Deprecated: Use GetMessagesReactionExtensionsResp.ProtoReflect.Descriptor instead.
-func (*GetMessagesReactionExtensionsResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use RevokeMsgResp.ProtoReflect.Descriptor instead.
+func (*RevokeMsgResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{16}
}
-func (x *GetMessagesReactionExtensionsResp) GetSingleMessageResult() []*SingleMessageExtensionResult {
- if x != nil {
- return x.SingleMessageResult
- }
- return nil
-}
-
-type SingleMessageExtensionResult struct {
+type MarkMsgsAsReadReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ReactionExtensions map[string]*sdkws.KeyValue `protobuf:"bytes,1,rep,name=reactionExtensions,proto3" json:"reactionExtensions" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID,proto3" json:"clientMsgID"`
+ ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
+ Seqs []int64 `protobuf:"varint,2,rep,packed,name=seqs,proto3" json:"seqs"`
+ UserID string `protobuf:"bytes,3,opt,name=userID,proto3" json:"userID"`
}
-func (x *SingleMessageExtensionResult) Reset() {
- *x = SingleMessageExtensionResult{}
+func (x *MarkMsgsAsReadReq) Reset() {
+ *x = MarkMsgsAsReadReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1057,13 +878,13 @@ func (x *SingleMessageExtensionResult) Reset() {
}
}
-func (x *SingleMessageExtensionResult) String() string {
+func (x *MarkMsgsAsReadReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*SingleMessageExtensionResult) ProtoMessage() {}
+func (*MarkMsgsAsReadReq) ProtoMessage() {}
-func (x *SingleMessageExtensionResult) ProtoReflect() protoreflect.Message {
+func (x *MarkMsgsAsReadReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1075,36 +896,40 @@ func (x *SingleMessageExtensionResult) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use SingleMessageExtensionResult.ProtoReflect.Descriptor instead.
-func (*SingleMessageExtensionResult) Descriptor() ([]byte, []int) {
+// Deprecated: Use MarkMsgsAsReadReq.ProtoReflect.Descriptor instead.
+func (*MarkMsgsAsReadReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{17}
}
-func (x *SingleMessageExtensionResult) GetReactionExtensions() map[string]*sdkws.KeyValue {
+func (x *MarkMsgsAsReadReq) GetConversationID() string {
+ if x != nil {
+ return x.ConversationID
+ }
+ return ""
+}
+
+func (x *MarkMsgsAsReadReq) GetSeqs() []int64 {
if x != nil {
- return x.ReactionExtensions
+ return x.Seqs
}
return nil
}
-func (x *SingleMessageExtensionResult) GetClientMsgID() string {
+func (x *MarkMsgsAsReadReq) GetUserID() string {
if x != nil {
- return x.ClientMsgID
+ return x.UserID
}
return ""
}
-type ModifyMessageReactionExtensionsResp struct {
+type MarkMsgsAsReadResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
-
- SuccessList []*ExtendMsgResp `protobuf:"bytes,1,rep,name=successList,proto3" json:"successList"`
- FailedList []*ExtendMsgResp `protobuf:"bytes,2,rep,name=failedList,proto3" json:"failedList"`
}
-func (x *ModifyMessageReactionExtensionsResp) Reset() {
- *x = ModifyMessageReactionExtensionsResp{}
+func (x *MarkMsgsAsReadResp) Reset() {
+ *x = MarkMsgsAsReadResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1112,13 +937,13 @@ func (x *ModifyMessageReactionExtensionsResp) Reset() {
}
}
-func (x *ModifyMessageReactionExtensionsResp) String() string {
+func (x *MarkMsgsAsReadResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ModifyMessageReactionExtensionsResp) ProtoMessage() {}
+func (*MarkMsgsAsReadResp) ProtoMessage() {}
-func (x *ModifyMessageReactionExtensionsResp) ProtoReflect() protoreflect.Message {
+func (x *MarkMsgsAsReadResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1130,42 +955,24 @@ func (x *ModifyMessageReactionExtensionsResp) ProtoReflect() protoreflect.Messag
return mi.MessageOf(x)
}
-// Deprecated: Use ModifyMessageReactionExtensionsResp.ProtoReflect.Descriptor instead.
-func (*ModifyMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use MarkMsgsAsReadResp.ProtoReflect.Descriptor instead.
+func (*MarkMsgsAsReadResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{18}
}
-func (x *ModifyMessageReactionExtensionsResp) GetSuccessList() []*ExtendMsgResp {
- if x != nil {
- return x.SuccessList
- }
- return nil
-}
-
-func (x *ModifyMessageReactionExtensionsResp) GetFailedList() []*ExtendMsgResp {
- if x != nil {
- return x.FailedList
- }
- return nil
-}
-
-type DeleteMessagesReactionExtensionsReq struct {
+type MarkConversationAsReadReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- OperationID string `protobuf:"bytes,1,opt,name=operationID,proto3" json:"operationID"`
- OpUserID string `protobuf:"bytes,2,opt,name=opUserID,proto3" json:"opUserID"`
- ConversationID string `protobuf:"bytes,3,opt,name=conversationID,proto3" json:"conversationID"`
- SessionType int32 `protobuf:"varint,4,opt,name=sessionType,proto3" json:"sessionType"`
- ClientMsgID string `protobuf:"bytes,5,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- IsExternalExtensions bool `protobuf:"varint,6,opt,name=isExternalExtensions,proto3" json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `protobuf:"varint,7,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
- ReactionExtensions []*sdkws.KeyValue `protobuf:"bytes,8,rep,name=reactionExtensions,proto3" json:"reactionExtensions"`
+ ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
+ UserID string `protobuf:"bytes,2,opt,name=userID,proto3" json:"userID"`
+ HasReadSeq int64 `protobuf:"varint,3,opt,name=hasReadSeq,proto3" json:"hasReadSeq"`
+ Seqs []int64 `protobuf:"varint,4,rep,packed,name=seqs,proto3" json:"seqs"`
}
-func (x *DeleteMessagesReactionExtensionsReq) Reset() {
- *x = DeleteMessagesReactionExtensionsReq{}
+func (x *MarkConversationAsReadReq) Reset() {
+ *x = MarkConversationAsReadReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1173,13 +980,13 @@ func (x *DeleteMessagesReactionExtensionsReq) Reset() {
}
}
-func (x *DeleteMessagesReactionExtensionsReq) String() string {
+func (x *MarkConversationAsReadReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMessagesReactionExtensionsReq) ProtoMessage() {}
+func (*MarkConversationAsReadReq) ProtoMessage() {}
-func (x *DeleteMessagesReactionExtensionsReq) ProtoReflect() protoreflect.Message {
+func (x *MarkConversationAsReadReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1191,77 +998,47 @@ func (x *DeleteMessagesReactionExtensionsReq) ProtoReflect() protoreflect.Messag
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMessagesReactionExtensionsReq.ProtoReflect.Descriptor instead.
-func (*DeleteMessagesReactionExtensionsReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use MarkConversationAsReadReq.ProtoReflect.Descriptor instead.
+func (*MarkConversationAsReadReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{19}
}
-func (x *DeleteMessagesReactionExtensionsReq) GetOperationID() string {
+func (x *MarkConversationAsReadReq) GetConversationID() string {
if x != nil {
- return x.OperationID
+ return x.ConversationID
}
return ""
}
-func (x *DeleteMessagesReactionExtensionsReq) GetOpUserID() string {
+func (x *MarkConversationAsReadReq) GetUserID() string {
if x != nil {
- return x.OpUserID
+ return x.UserID
}
return ""
}
-func (x *DeleteMessagesReactionExtensionsReq) GetConversationID() string {
+func (x *MarkConversationAsReadReq) GetHasReadSeq() int64 {
if x != nil {
- return x.ConversationID
+ return x.HasReadSeq
}
- return ""
+ return 0
}
-func (x *DeleteMessagesReactionExtensionsReq) GetSessionType() int32 {
+func (x *MarkConversationAsReadReq) GetSeqs() []int64 {
if x != nil {
- return x.SessionType
+ return x.Seqs
}
- return 0
+ return nil
}
-func (x *DeleteMessagesReactionExtensionsReq) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
+type MarkConversationAsReadResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (x *DeleteMessagesReactionExtensionsReq) GetIsExternalExtensions() bool {
- if x != nil {
- return x.IsExternalExtensions
- }
- return false
-}
-
-func (x *DeleteMessagesReactionExtensionsReq) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-func (x *DeleteMessagesReactionExtensionsReq) GetReactionExtensions() []*sdkws.KeyValue {
- if x != nil {
- return x.ReactionExtensions
- }
- return nil
-}
-
-type DeleteMessagesReactionExtensionsResp struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Result []*KeyValueResp `protobuf:"bytes,1,rep,name=result,proto3" json:"result"`
-}
-
-func (x *DeleteMessagesReactionExtensionsResp) Reset() {
- *x = DeleteMessagesReactionExtensionsResp{}
+func (x *MarkConversationAsReadResp) Reset() {
+ *x = MarkConversationAsReadResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1269,13 +1046,13 @@ func (x *DeleteMessagesReactionExtensionsResp) Reset() {
}
}
-func (x *DeleteMessagesReactionExtensionsResp) String() string {
+func (x *MarkConversationAsReadResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMessagesReactionExtensionsResp) ProtoMessage() {}
+func (*MarkConversationAsReadResp) ProtoMessage() {}
-func (x *DeleteMessagesReactionExtensionsResp) ProtoReflect() protoreflect.Message {
+func (x *MarkConversationAsReadResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1287,28 +1064,23 @@ func (x *DeleteMessagesReactionExtensionsResp) ProtoReflect() protoreflect.Messa
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMessagesReactionExtensionsResp.ProtoReflect.Descriptor instead.
-func (*DeleteMessagesReactionExtensionsResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use MarkConversationAsReadResp.ProtoReflect.Descriptor instead.
+func (*MarkConversationAsReadResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{20}
}
-func (x *DeleteMessagesReactionExtensionsResp) GetResult() []*KeyValueResp {
- if x != nil {
- return x.Result
- }
- return nil
-}
-
-type ExtendMsgResp struct {
+type SetConversationHasReadSeqReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ExtendMsg *ExtendMsg `protobuf:"bytes,1,opt,name=extendMsg,proto3" json:"extendMsg"`
+ ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
+ UserID string `protobuf:"bytes,2,opt,name=userID,proto3" json:"userID"`
+ HasReadSeq int64 `protobuf:"varint,3,opt,name=hasReadSeq,proto3" json:"hasReadSeq"`
}
-func (x *ExtendMsgResp) Reset() {
- *x = ExtendMsgResp{}
+func (x *SetConversationHasReadSeqReq) Reset() {
+ *x = SetConversationHasReadSeqReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1316,13 +1088,13 @@ func (x *ExtendMsgResp) Reset() {
}
}
-func (x *ExtendMsgResp) String() string {
+func (x *SetConversationHasReadSeqReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ExtendMsgResp) ProtoMessage() {}
+func (*SetConversationHasReadSeqReq) ProtoMessage() {}
-func (x *ExtendMsgResp) ProtoReflect() protoreflect.Message {
+func (x *SetConversationHasReadSeqReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1334,32 +1106,40 @@ func (x *ExtendMsgResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ExtendMsgResp.ProtoReflect.Descriptor instead.
-func (*ExtendMsgResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use SetConversationHasReadSeqReq.ProtoReflect.Descriptor instead.
+func (*SetConversationHasReadSeqReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{21}
}
-func (x *ExtendMsgResp) GetExtendMsg() *ExtendMsg {
+func (x *SetConversationHasReadSeqReq) GetConversationID() string {
if x != nil {
- return x.ExtendMsg
+ return x.ConversationID
}
- return nil
+ return ""
+}
+
+func (x *SetConversationHasReadSeqReq) GetUserID() string {
+ if x != nil {
+ return x.UserID
+ }
+ return ""
+}
+
+func (x *SetConversationHasReadSeqReq) GetHasReadSeq() int64 {
+ if x != nil {
+ return x.HasReadSeq
+ }
+ return 0
}
-type ExtendMsg struct {
+type SetConversationHasReadSeqResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
-
- ReactionExtensions map[string]*KeyValueResp `protobuf:"bytes,1,rep,name=reactionExtensions,proto3" json:"reactionExtensions" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- MsgFirstModifyTime int64 `protobuf:"varint,3,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
- AttachedInfo string `protobuf:"bytes,4,opt,name=attachedInfo,proto3" json:"attachedInfo"`
- Ex string `protobuf:"bytes,5,opt,name=ex,proto3" json:"ex"`
}
-func (x *ExtendMsg) Reset() {
- *x = ExtendMsg{}
+func (x *SetConversationHasReadSeqResp) Reset() {
+ *x = SetConversationHasReadSeqResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1367,13 +1147,13 @@ func (x *ExtendMsg) Reset() {
}
}
-func (x *ExtendMsg) String() string {
+func (x *SetConversationHasReadSeqResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ExtendMsg) ProtoMessage() {}
+func (*SetConversationHasReadSeqResp) ProtoMessage() {}
-func (x *ExtendMsg) ProtoReflect() protoreflect.Message {
+func (x *SetConversationHasReadSeqResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1385,58 +1165,22 @@ func (x *ExtendMsg) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ExtendMsg.ProtoReflect.Descriptor instead.
-func (*ExtendMsg) Descriptor() ([]byte, []int) {
+// Deprecated: Use SetConversationHasReadSeqResp.ProtoReflect.Descriptor instead.
+func (*SetConversationHasReadSeqResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{22}
}
-func (x *ExtendMsg) GetReactionExtensions() map[string]*KeyValueResp {
- if x != nil {
- return x.ReactionExtensions
- }
- return nil
-}
-
-func (x *ExtendMsg) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *ExtendMsg) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-func (x *ExtendMsg) GetAttachedInfo() string {
- if x != nil {
- return x.AttachedInfo
- }
- return ""
-}
-
-func (x *ExtendMsg) GetEx() string {
- if x != nil {
- return x.Ex
- }
- return ""
-}
-
-type KeyValueResp struct {
+type DeleteSyncOpt struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- KeyValue *sdkws.KeyValue `protobuf:"bytes,1,opt,name=keyValue,proto3" json:"keyValue"`
- ErrCode int32 `protobuf:"varint,2,opt,name=errCode,proto3" json:"errCode"`
- ErrMsg string `protobuf:"bytes,3,opt,name=errMsg,proto3" json:"errMsg"`
+ IsSyncSelf bool `protobuf:"varint,3,opt,name=IsSyncSelf,proto3" json:"IsSyncSelf"`
+ IsSyncOther bool `protobuf:"varint,4,opt,name=IsSyncOther,proto3" json:"IsSyncOther"`
}
-func (x *KeyValueResp) Reset() {
- *x = KeyValueResp{}
+func (x *DeleteSyncOpt) Reset() {
+ *x = DeleteSyncOpt{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1444,13 +1188,13 @@ func (x *KeyValueResp) Reset() {
}
}
-func (x *KeyValueResp) String() string {
+func (x *DeleteSyncOpt) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*KeyValueResp) ProtoMessage() {}
+func (*DeleteSyncOpt) ProtoMessage() {}
-func (x *KeyValueResp) ProtoReflect() protoreflect.Message {
+func (x *DeleteSyncOpt) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1462,43 +1206,37 @@ func (x *KeyValueResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use KeyValueResp.ProtoReflect.Descriptor instead.
-func (*KeyValueResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use DeleteSyncOpt.ProtoReflect.Descriptor instead.
+func (*DeleteSyncOpt) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{23}
}
-func (x *KeyValueResp) GetKeyValue() *sdkws.KeyValue {
- if x != nil {
- return x.KeyValue
- }
- return nil
-}
-
-func (x *KeyValueResp) GetErrCode() int32 {
+func (x *DeleteSyncOpt) GetIsSyncSelf() bool {
if x != nil {
- return x.ErrCode
+ return x.IsSyncSelf
}
- return 0
+ return false
}
-func (x *KeyValueResp) GetErrMsg() string {
+func (x *DeleteSyncOpt) GetIsSyncOther() bool {
if x != nil {
- return x.ErrMsg
+ return x.IsSyncOther
}
- return ""
+ return false
}
-type MsgDataToModifyByMQ struct {
+type ClearConversationsMsgReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Messages []*sdkws.MsgData `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages"`
- ConversationID string `protobuf:"bytes,2,opt,name=conversationID,proto3" json:"conversationID"`
+ ConversationIDs []string `protobuf:"bytes,1,rep,name=conversationIDs,proto3" json:"conversationIDs"`
+ UserID string `protobuf:"bytes,2,opt,name=userID,proto3" json:"userID"`
+ DeleteSyncOpt *DeleteSyncOpt `protobuf:"bytes,3,opt,name=deleteSyncOpt,proto3" json:"deleteSyncOpt"`
}
-func (x *MsgDataToModifyByMQ) Reset() {
- *x = MsgDataToModifyByMQ{}
+func (x *ClearConversationsMsgReq) Reset() {
+ *x = ClearConversationsMsgReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1506,13 +1244,13 @@ func (x *MsgDataToModifyByMQ) Reset() {
}
}
-func (x *MsgDataToModifyByMQ) String() string {
+func (x *ClearConversationsMsgReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*MsgDataToModifyByMQ) ProtoMessage() {}
+func (*ClearConversationsMsgReq) ProtoMessage() {}
-func (x *MsgDataToModifyByMQ) ProtoReflect() protoreflect.Message {
+func (x *ClearConversationsMsgReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1524,33 +1262,40 @@ func (x *MsgDataToModifyByMQ) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use MsgDataToModifyByMQ.ProtoReflect.Descriptor instead.
-func (*MsgDataToModifyByMQ) Descriptor() ([]byte, []int) {
+// Deprecated: Use ClearConversationsMsgReq.ProtoReflect.Descriptor instead.
+func (*ClearConversationsMsgReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{24}
}
-func (x *MsgDataToModifyByMQ) GetMessages() []*sdkws.MsgData {
+func (x *ClearConversationsMsgReq) GetConversationIDs() []string {
if x != nil {
- return x.Messages
+ return x.ConversationIDs
}
return nil
}
-func (x *MsgDataToModifyByMQ) GetConversationID() string {
+func (x *ClearConversationsMsgReq) GetUserID() string {
if x != nil {
- return x.ConversationID
+ return x.UserID
}
return ""
}
-type DelMsgsReq struct {
+func (x *ClearConversationsMsgReq) GetDeleteSyncOpt() *DeleteSyncOpt {
+ if x != nil {
+ return x.DeleteSyncOpt
+ }
+ return nil
+}
+
+type ClearConversationsMsgResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
-func (x *DelMsgsReq) Reset() {
- *x = DelMsgsReq{}
+func (x *ClearConversationsMsgResp) Reset() {
+ *x = ClearConversationsMsgResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1558,13 +1303,13 @@ func (x *DelMsgsReq) Reset() {
}
}
-func (x *DelMsgsReq) String() string {
+func (x *ClearConversationsMsgResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DelMsgsReq) ProtoMessage() {}
+func (*ClearConversationsMsgResp) ProtoMessage() {}
-func (x *DelMsgsReq) ProtoReflect() protoreflect.Message {
+func (x *ClearConversationsMsgResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1576,19 +1321,22 @@ func (x *DelMsgsReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DelMsgsReq.ProtoReflect.Descriptor instead.
-func (*DelMsgsReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use ClearConversationsMsgResp.ProtoReflect.Descriptor instead.
+func (*ClearConversationsMsgResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{25}
}
-type DelMsgsResp struct {
+type UserClearAllMsgReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID"`
+ DeleteSyncOpt *DeleteSyncOpt `protobuf:"bytes,3,opt,name=deleteSyncOpt,proto3" json:"deleteSyncOpt"`
}
-func (x *DelMsgsResp) Reset() {
- *x = DelMsgsResp{}
+func (x *UserClearAllMsgReq) Reset() {
+ *x = UserClearAllMsgReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1596,13 +1344,13 @@ func (x *DelMsgsResp) Reset() {
}
}
-func (x *DelMsgsResp) String() string {
+func (x *UserClearAllMsgReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DelMsgsResp) ProtoMessage() {}
+func (*UserClearAllMsgReq) ProtoMessage() {}
-func (x *DelMsgsResp) ProtoReflect() protoreflect.Message {
+func (x *UserClearAllMsgReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1614,23 +1362,33 @@ func (x *DelMsgsResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DelMsgsResp.ProtoReflect.Descriptor instead.
-func (*DelMsgsResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use UserClearAllMsgReq.ProtoReflect.Descriptor instead.
+func (*UserClearAllMsgReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{26}
}
-type RevokeMsgReq struct {
+func (x *UserClearAllMsgReq) GetUserID() string {
+ if x != nil {
+ return x.UserID
+ }
+ return ""
+}
+
+func (x *UserClearAllMsgReq) GetDeleteSyncOpt() *DeleteSyncOpt {
+ if x != nil {
+ return x.DeleteSyncOpt
+ }
+ return nil
+}
+
+type UserClearAllMsgResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
-
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- Seq int64 `protobuf:"varint,2,opt,name=seq,proto3" json:"seq"`
- UserID string `protobuf:"bytes,3,opt,name=userID,proto3" json:"userID"`
}
-func (x *RevokeMsgReq) Reset() {
- *x = RevokeMsgReq{}
+func (x *UserClearAllMsgResp) Reset() {
+ *x = UserClearAllMsgResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1638,13 +1396,13 @@ func (x *RevokeMsgReq) Reset() {
}
}
-func (x *RevokeMsgReq) String() string {
+func (x *UserClearAllMsgResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*RevokeMsgReq) ProtoMessage() {}
+func (*UserClearAllMsgResp) ProtoMessage() {}
-func (x *RevokeMsgReq) ProtoReflect() protoreflect.Message {
+func (x *UserClearAllMsgResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[27]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1656,55 +1414,105 @@ func (x *RevokeMsgReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use RevokeMsgReq.ProtoReflect.Descriptor instead.
-func (*RevokeMsgReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use UserClearAllMsgResp.ProtoReflect.Descriptor instead.
+func (*UserClearAllMsgResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{27}
}
-func (x *RevokeMsgReq) GetConversationID() string {
- if x != nil {
- return x.ConversationID
- }
- return ""
+type DeleteMsgsReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
+ Seqs []int64 `protobuf:"varint,2,rep,packed,name=seqs,proto3" json:"seqs"`
+ UserID string `protobuf:"bytes,3,opt,name=userID,proto3" json:"userID"`
+ DeleteSyncOpt *DeleteSyncOpt `protobuf:"bytes,4,opt,name=deleteSyncOpt,proto3" json:"deleteSyncOpt"`
}
-func (x *RevokeMsgReq) GetSeq() int64 {
- if x != nil {
- return x.Seq
+func (x *DeleteMsgsReq) Reset() {
+ *x = DeleteMsgsReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_msg_msg_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return 0
}
-func (x *RevokeMsgReq) GetUserID() string {
- if x != nil {
- return x.UserID
- }
- return ""
+func (x *DeleteMsgsReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
}
-type RevokeMsgResp struct {
+func (*DeleteMsgsReq) ProtoMessage() {}
+
+func (x *DeleteMsgsReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[28]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteMsgsReq.ProtoReflect.Descriptor instead.
+func (*DeleteMsgsReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *DeleteMsgsReq) GetConversationID() string {
+ if x != nil {
+ return x.ConversationID
+ }
+ return ""
+}
+
+func (x *DeleteMsgsReq) GetSeqs() []int64 {
+ if x != nil {
+ return x.Seqs
+ }
+ return nil
+}
+
+func (x *DeleteMsgsReq) GetUserID() string {
+ if x != nil {
+ return x.UserID
+ }
+ return ""
+}
+
+func (x *DeleteMsgsReq) GetDeleteSyncOpt() *DeleteSyncOpt {
+ if x != nil {
+ return x.DeleteSyncOpt
+ }
+ return nil
+}
+
+type DeleteMsgsResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
-func (x *RevokeMsgResp) Reset() {
- *x = RevokeMsgResp{}
+func (x *DeleteMsgsResp) Reset() {
+ *x = DeleteMsgsResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[28]
+ mi := &file_msg_msg_proto_msgTypes[29]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *RevokeMsgResp) String() string {
+func (x *DeleteMsgsResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*RevokeMsgResp) ProtoMessage() {}
+func (*DeleteMsgsResp) ProtoMessage() {}
-func (x *RevokeMsgResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[28]
+func (x *DeleteMsgsResp) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[29]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1715,38 +1523,37 @@ func (x *RevokeMsgResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use RevokeMsgResp.ProtoReflect.Descriptor instead.
-func (*RevokeMsgResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{28}
+// Deprecated: Use DeleteMsgsResp.ProtoReflect.Descriptor instead.
+func (*DeleteMsgsResp) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{29}
}
-type MarkMsgsAsReadReq struct {
+type DeleteMsgPhysicalReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- Seqs []int64 `protobuf:"varint,2,rep,packed,name=seqs,proto3" json:"seqs"`
- UserID string `protobuf:"bytes,3,opt,name=userID,proto3" json:"userID"`
+ ConversationIDs []string `protobuf:"bytes,1,rep,name=conversationIDs,proto3" json:"conversationIDs"`
+ Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp"`
}
-func (x *MarkMsgsAsReadReq) Reset() {
- *x = MarkMsgsAsReadReq{}
+func (x *DeleteMsgPhysicalReq) Reset() {
+ *x = DeleteMsgPhysicalReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[29]
+ mi := &file_msg_msg_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *MarkMsgsAsReadReq) String() string {
+func (x *DeleteMsgPhysicalReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*MarkMsgsAsReadReq) ProtoMessage() {}
+func (*DeleteMsgPhysicalReq) ProtoMessage() {}
-func (x *MarkMsgsAsReadReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[29]
+func (x *DeleteMsgPhysicalReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1757,55 +1564,48 @@ func (x *MarkMsgsAsReadReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use MarkMsgsAsReadReq.ProtoReflect.Descriptor instead.
-func (*MarkMsgsAsReadReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{29}
-}
-
-func (x *MarkMsgsAsReadReq) GetConversationID() string {
- if x != nil {
- return x.ConversationID
- }
- return ""
+// Deprecated: Use DeleteMsgPhysicalReq.ProtoReflect.Descriptor instead.
+func (*DeleteMsgPhysicalReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{30}
}
-func (x *MarkMsgsAsReadReq) GetSeqs() []int64 {
+func (x *DeleteMsgPhysicalReq) GetConversationIDs() []string {
if x != nil {
- return x.Seqs
+ return x.ConversationIDs
}
return nil
}
-func (x *MarkMsgsAsReadReq) GetUserID() string {
+func (x *DeleteMsgPhysicalReq) GetTimestamp() int64 {
if x != nil {
- return x.UserID
+ return x.Timestamp
}
- return ""
+ return 0
}
-type MarkMsgsAsReadResp struct {
+type DeleteMsgPhysicalResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
-func (x *MarkMsgsAsReadResp) Reset() {
- *x = MarkMsgsAsReadResp{}
+func (x *DeleteMsgPhysicalResp) Reset() {
+ *x = DeleteMsgPhysicalResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[30]
+ mi := &file_msg_msg_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *MarkMsgsAsReadResp) String() string {
+func (x *DeleteMsgPhysicalResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*MarkMsgsAsReadResp) ProtoMessage() {}
+func (*DeleteMsgPhysicalResp) ProtoMessage() {}
-func (x *MarkMsgsAsReadResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[30]
+func (x *DeleteMsgPhysicalResp) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1816,39 +1616,37 @@ func (x *MarkMsgsAsReadResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use MarkMsgsAsReadResp.ProtoReflect.Descriptor instead.
-func (*MarkMsgsAsReadResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{30}
+// Deprecated: Use DeleteMsgPhysicalResp.ProtoReflect.Descriptor instead.
+func (*DeleteMsgPhysicalResp) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{31}
}
-type MarkConversationAsReadReq struct {
+type DeleteMsgPhysicalBySeqReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- UserID string `protobuf:"bytes,2,opt,name=userID,proto3" json:"userID"`
- HasReadSeq int64 `protobuf:"varint,3,opt,name=hasReadSeq,proto3" json:"hasReadSeq"`
- Seqs []int64 `protobuf:"varint,4,rep,packed,name=seqs,proto3" json:"seqs"`
+ Seqs []int64 `protobuf:"varint,2,rep,packed,name=seqs,proto3" json:"seqs"`
}
-func (x *MarkConversationAsReadReq) Reset() {
- *x = MarkConversationAsReadReq{}
+func (x *DeleteMsgPhysicalBySeqReq) Reset() {
+ *x = DeleteMsgPhysicalBySeqReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[31]
+ mi := &file_msg_msg_proto_msgTypes[32]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *MarkConversationAsReadReq) String() string {
+func (x *DeleteMsgPhysicalBySeqReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*MarkConversationAsReadReq) ProtoMessage() {}
+func (*DeleteMsgPhysicalBySeqReq) ProtoMessage() {}
-func (x *MarkConversationAsReadReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[31]
+func (x *DeleteMsgPhysicalBySeqReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[32]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1859,62 +1657,48 @@ func (x *MarkConversationAsReadReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use MarkConversationAsReadReq.ProtoReflect.Descriptor instead.
-func (*MarkConversationAsReadReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{31}
+// Deprecated: Use DeleteMsgPhysicalBySeqReq.ProtoReflect.Descriptor instead.
+func (*DeleteMsgPhysicalBySeqReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{32}
}
-func (x *MarkConversationAsReadReq) GetConversationID() string {
+func (x *DeleteMsgPhysicalBySeqReq) GetConversationID() string {
if x != nil {
return x.ConversationID
}
return ""
}
-func (x *MarkConversationAsReadReq) GetUserID() string {
- if x != nil {
- return x.UserID
- }
- return ""
-}
-
-func (x *MarkConversationAsReadReq) GetHasReadSeq() int64 {
- if x != nil {
- return x.HasReadSeq
- }
- return 0
-}
-
-func (x *MarkConversationAsReadReq) GetSeqs() []int64 {
+func (x *DeleteMsgPhysicalBySeqReq) GetSeqs() []int64 {
if x != nil {
return x.Seqs
}
return nil
}
-type MarkConversationAsReadResp struct {
+type DeleteMsgPhysicalBySeqResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
-func (x *MarkConversationAsReadResp) Reset() {
- *x = MarkConversationAsReadResp{}
+func (x *DeleteMsgPhysicalBySeqResp) Reset() {
+ *x = DeleteMsgPhysicalBySeqResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[32]
+ mi := &file_msg_msg_proto_msgTypes[33]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *MarkConversationAsReadResp) String() string {
+func (x *DeleteMsgPhysicalBySeqResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*MarkConversationAsReadResp) ProtoMessage() {}
+func (*DeleteMsgPhysicalBySeqResp) ProtoMessage() {}
-func (x *MarkConversationAsReadResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[32]
+func (x *DeleteMsgPhysicalBySeqResp) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[33]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1925,38 +1709,36 @@ func (x *MarkConversationAsReadResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use MarkConversationAsReadResp.ProtoReflect.Descriptor instead.
-func (*MarkConversationAsReadResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{32}
+// Deprecated: Use DeleteMsgPhysicalBySeqResp.ProtoReflect.Descriptor instead.
+func (*DeleteMsgPhysicalBySeqResp) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{33}
}
-type SetConversationHasReadSeqReq struct {
+type GetConversationMaxSeqReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- UserID string `protobuf:"bytes,2,opt,name=userID,proto3" json:"userID"`
- HasReadSeq int64 `protobuf:"varint,3,opt,name=hasReadSeq,proto3" json:"hasReadSeq"`
}
-func (x *SetConversationHasReadSeqReq) Reset() {
- *x = SetConversationHasReadSeqReq{}
+func (x *GetConversationMaxSeqReq) Reset() {
+ *x = GetConversationMaxSeqReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[33]
+ mi := &file_msg_msg_proto_msgTypes[34]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *SetConversationHasReadSeqReq) String() string {
+func (x *GetConversationMaxSeqReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*SetConversationHasReadSeqReq) ProtoMessage() {}
+func (*GetConversationMaxSeqReq) ProtoMessage() {}
-func (x *SetConversationHasReadSeqReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[33]
+func (x *GetConversationMaxSeqReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[34]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1967,55 +1749,43 @@ func (x *SetConversationHasReadSeqReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use SetConversationHasReadSeqReq.ProtoReflect.Descriptor instead.
-func (*SetConversationHasReadSeqReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{33}
+// Deprecated: Use GetConversationMaxSeqReq.ProtoReflect.Descriptor instead.
+func (*GetConversationMaxSeqReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{34}
}
-func (x *SetConversationHasReadSeqReq) GetConversationID() string {
+func (x *GetConversationMaxSeqReq) GetConversationID() string {
if x != nil {
return x.ConversationID
}
return ""
}
-func (x *SetConversationHasReadSeqReq) GetUserID() string {
- if x != nil {
- return x.UserID
- }
- return ""
-}
-
-func (x *SetConversationHasReadSeqReq) GetHasReadSeq() int64 {
- if x != nil {
- return x.HasReadSeq
- }
- return 0
-}
-
-type SetConversationHasReadSeqResp struct {
+type GetConversationMaxSeqResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ MaxSeq int64 `protobuf:"varint,1,opt,name=maxSeq,proto3" json:"maxSeq"`
}
-func (x *SetConversationHasReadSeqResp) Reset() {
- *x = SetConversationHasReadSeqResp{}
+func (x *GetConversationMaxSeqResp) Reset() {
+ *x = GetConversationMaxSeqResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[34]
+ mi := &file_msg_msg_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *SetConversationHasReadSeqResp) String() string {
+func (x *GetConversationMaxSeqResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*SetConversationHasReadSeqResp) ProtoMessage() {}
+func (*GetConversationMaxSeqResp) ProtoMessage() {}
-func (x *SetConversationHasReadSeqResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[34]
+func (x *GetConversationMaxSeqResp) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[35]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2026,37 +1796,43 @@ func (x *SetConversationHasReadSeqResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use SetConversationHasReadSeqResp.ProtoReflect.Descriptor instead.
-func (*SetConversationHasReadSeqResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{34}
+// Deprecated: Use GetConversationMaxSeqResp.ProtoReflect.Descriptor instead.
+func (*GetConversationMaxSeqResp) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{35}
}
-type DeleteSyncOpt struct {
+func (x *GetConversationMaxSeqResp) GetMaxSeq() int64 {
+ if x != nil {
+ return x.MaxSeq
+ }
+ return 0
+}
+
+type GetConversationsHasReadAndMaxSeqReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- IsSyncSelf bool `protobuf:"varint,3,opt,name=IsSyncSelf,proto3" json:"IsSyncSelf"`
- IsSyncOther bool `protobuf:"varint,4,opt,name=IsSyncOther,proto3" json:"IsSyncOther"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID"`
}
-func (x *DeleteSyncOpt) Reset() {
- *x = DeleteSyncOpt{}
+func (x *GetConversationsHasReadAndMaxSeqReq) Reset() {
+ *x = GetConversationsHasReadAndMaxSeqReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[35]
+ mi := &file_msg_msg_proto_msgTypes[36]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *DeleteSyncOpt) String() string {
+func (x *GetConversationsHasReadAndMaxSeqReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteSyncOpt) ProtoMessage() {}
+func (*GetConversationsHasReadAndMaxSeqReq) ProtoMessage() {}
-func (x *DeleteSyncOpt) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[35]
+func (x *GetConversationsHasReadAndMaxSeqReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[36]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2067,52 +1843,44 @@ func (x *DeleteSyncOpt) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteSyncOpt.ProtoReflect.Descriptor instead.
-func (*DeleteSyncOpt) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{35}
-}
-
-func (x *DeleteSyncOpt) GetIsSyncSelf() bool {
- if x != nil {
- return x.IsSyncSelf
- }
- return false
+// Deprecated: Use GetConversationsHasReadAndMaxSeqReq.ProtoReflect.Descriptor instead.
+func (*GetConversationsHasReadAndMaxSeqReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{36}
}
-func (x *DeleteSyncOpt) GetIsSyncOther() bool {
+func (x *GetConversationsHasReadAndMaxSeqReq) GetUserID() string {
if x != nil {
- return x.IsSyncOther
+ return x.UserID
}
- return false
+ return ""
}
-type ClearConversationsMsgReq struct {
+type Seqs struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ConversationIDs []string `protobuf:"bytes,1,rep,name=conversationIDs,proto3" json:"conversationIDs"`
- UserID string `protobuf:"bytes,2,opt,name=userID,proto3" json:"userID"`
- DeleteSyncOpt *DeleteSyncOpt `protobuf:"bytes,3,opt,name=deleteSyncOpt,proto3" json:"deleteSyncOpt"`
+ MaxSeq int64 `protobuf:"varint,1,opt,name=maxSeq,proto3" json:"maxSeq"`
+ HasReadSeq int64 `protobuf:"varint,2,opt,name=hasReadSeq,proto3" json:"hasReadSeq"`
}
-func (x *ClearConversationsMsgReq) Reset() {
- *x = ClearConversationsMsgReq{}
+func (x *Seqs) Reset() {
+ *x = Seqs{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[36]
+ mi := &file_msg_msg_proto_msgTypes[37]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ClearConversationsMsgReq) String() string {
+func (x *Seqs) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ClearConversationsMsgReq) ProtoMessage() {}
+func (*Seqs) ProtoMessage() {}
-func (x *ClearConversationsMsgReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[36]
+func (x *Seqs) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[37]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2123,55 +1891,50 @@ func (x *ClearConversationsMsgReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ClearConversationsMsgReq.ProtoReflect.Descriptor instead.
-func (*ClearConversationsMsgReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{36}
-}
-
-func (x *ClearConversationsMsgReq) GetConversationIDs() []string {
- if x != nil {
- return x.ConversationIDs
- }
- return nil
+// Deprecated: Use Seqs.ProtoReflect.Descriptor instead.
+func (*Seqs) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{37}
}
-func (x *ClearConversationsMsgReq) GetUserID() string {
+func (x *Seqs) GetMaxSeq() int64 {
if x != nil {
- return x.UserID
+ return x.MaxSeq
}
- return ""
+ return 0
}
-func (x *ClearConversationsMsgReq) GetDeleteSyncOpt() *DeleteSyncOpt {
+func (x *Seqs) GetHasReadSeq() int64 {
if x != nil {
- return x.DeleteSyncOpt
+ return x.HasReadSeq
}
- return nil
+ return 0
}
-type ClearConversationsMsgResp struct {
+type GetConversationsHasReadAndMaxSeqResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ Seqs map[string]*Seqs `protobuf:"bytes,1,rep,name=seqs,proto3" json:"seqs" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
-func (x *ClearConversationsMsgResp) Reset() {
- *x = ClearConversationsMsgResp{}
+func (x *GetConversationsHasReadAndMaxSeqResp) Reset() {
+ *x = GetConversationsHasReadAndMaxSeqResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[37]
+ mi := &file_msg_msg_proto_msgTypes[38]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ClearConversationsMsgResp) String() string {
+func (x *GetConversationsHasReadAndMaxSeqResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ClearConversationsMsgResp) ProtoMessage() {}
+func (*GetConversationsHasReadAndMaxSeqResp) ProtoMessage() {}
-func (x *ClearConversationsMsgResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[37]
+func (x *GetConversationsHasReadAndMaxSeqResp) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[38]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2182,37 +1945,47 @@ func (x *ClearConversationsMsgResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ClearConversationsMsgResp.ProtoReflect.Descriptor instead.
-func (*ClearConversationsMsgResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{37}
+// Deprecated: Use GetConversationsHasReadAndMaxSeqResp.ProtoReflect.Descriptor instead.
+func (*GetConversationsHasReadAndMaxSeqResp) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{38}
}
-type UserClearAllMsgReq struct {
+func (x *GetConversationsHasReadAndMaxSeqResp) GetSeqs() map[string]*Seqs {
+ if x != nil {
+ return x.Seqs
+ }
+ return nil
+}
+
+type GetActiveUserReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID"`
- DeleteSyncOpt *DeleteSyncOpt `protobuf:"bytes,3,opt,name=deleteSyncOpt,proto3" json:"deleteSyncOpt"`
+ Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start"`
+ End int64 `protobuf:"varint,2,opt,name=end,proto3" json:"end"`
+ Ase bool `protobuf:"varint,3,opt,name=ase,proto3" json:"ase"`
+ Group bool `protobuf:"varint,4,opt,name=group,proto3" json:"group"`
+ Pagination *sdkws.RequestPagination `protobuf:"bytes,5,opt,name=pagination,proto3" json:"pagination"`
}
-func (x *UserClearAllMsgReq) Reset() {
- *x = UserClearAllMsgReq{}
+func (x *GetActiveUserReq) Reset() {
+ *x = GetActiveUserReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[38]
+ mi := &file_msg_msg_proto_msgTypes[39]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *UserClearAllMsgReq) String() string {
+func (x *GetActiveUserReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*UserClearAllMsgReq) ProtoMessage() {}
+func (*GetActiveUserReq) ProtoMessage() {}
-func (x *UserClearAllMsgReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[38]
+func (x *GetActiveUserReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[39]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2223,48 +1996,72 @@ func (x *UserClearAllMsgReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use UserClearAllMsgReq.ProtoReflect.Descriptor instead.
-func (*UserClearAllMsgReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{38}
+// Deprecated: Use GetActiveUserReq.ProtoReflect.Descriptor instead.
+func (*GetActiveUserReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{39}
}
-func (x *UserClearAllMsgReq) GetUserID() string {
+func (x *GetActiveUserReq) GetStart() int64 {
if x != nil {
- return x.UserID
+ return x.Start
}
- return ""
+ return 0
}
-func (x *UserClearAllMsgReq) GetDeleteSyncOpt() *DeleteSyncOpt {
+func (x *GetActiveUserReq) GetEnd() int64 {
if x != nil {
- return x.DeleteSyncOpt
+ return x.End
+ }
+ return 0
+}
+
+func (x *GetActiveUserReq) GetAse() bool {
+ if x != nil {
+ return x.Ase
+ }
+ return false
+}
+
+func (x *GetActiveUserReq) GetGroup() bool {
+ if x != nil {
+ return x.Group
+ }
+ return false
+}
+
+func (x *GetActiveUserReq) GetPagination() *sdkws.RequestPagination {
+ if x != nil {
+ return x.Pagination
}
return nil
}
-type UserClearAllMsgResp struct {
+type ActiveUser struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ User *sdkws.UserInfo `protobuf:"bytes,1,opt,name=user,proto3" json:"user"`
+ Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count"`
}
-func (x *UserClearAllMsgResp) Reset() {
- *x = UserClearAllMsgResp{}
+func (x *ActiveUser) Reset() {
+ *x = ActiveUser{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[39]
+ mi := &file_msg_msg_proto_msgTypes[40]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *UserClearAllMsgResp) String() string {
+func (x *ActiveUser) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*UserClearAllMsgResp) ProtoMessage() {}
+func (*ActiveUser) ProtoMessage() {}
-func (x *UserClearAllMsgResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[39]
+func (x *ActiveUser) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[40]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2275,39 +2072,53 @@ func (x *UserClearAllMsgResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use UserClearAllMsgResp.ProtoReflect.Descriptor instead.
-func (*UserClearAllMsgResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{39}
+// Deprecated: Use ActiveUser.ProtoReflect.Descriptor instead.
+func (*ActiveUser) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{40}
}
-type DeleteMsgsReq struct {
+func (x *ActiveUser) GetUser() *sdkws.UserInfo {
+ if x != nil {
+ return x.User
+ }
+ return nil
+}
+
+func (x *ActiveUser) GetCount() int64 {
+ if x != nil {
+ return x.Count
+ }
+ return 0
+}
+
+type GetActiveUserResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- Seqs []int64 `protobuf:"varint,2,rep,packed,name=seqs,proto3" json:"seqs"`
- UserID string `protobuf:"bytes,3,opt,name=userID,proto3" json:"userID"`
- DeleteSyncOpt *DeleteSyncOpt `protobuf:"bytes,4,opt,name=deleteSyncOpt,proto3" json:"deleteSyncOpt"`
+ MsgCount int64 `protobuf:"varint,1,opt,name=msgCount,proto3" json:"msgCount"`
+ UserCount int64 `protobuf:"varint,2,opt,name=userCount,proto3" json:"userCount"`
+ DateCount map[string]int64 `protobuf:"bytes,3,rep,name=dateCount,proto3" json:"dateCount" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+ Users []*ActiveUser `protobuf:"bytes,4,rep,name=users,proto3" json:"users"`
}
-func (x *DeleteMsgsReq) Reset() {
- *x = DeleteMsgsReq{}
+func (x *GetActiveUserResp) Reset() {
+ *x = GetActiveUserResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[40]
+ mi := &file_msg_msg_proto_msgTypes[41]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *DeleteMsgsReq) String() string {
+func (x *GetActiveUserResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMsgsReq) ProtoMessage() {}
+func (*GetActiveUserResp) ProtoMessage() {}
-func (x *DeleteMsgsReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[40]
+func (x *GetActiveUserResp) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[41]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2318,62 +2129,67 @@ func (x *DeleteMsgsReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMsgsReq.ProtoReflect.Descriptor instead.
-func (*DeleteMsgsReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{40}
+// Deprecated: Use GetActiveUserResp.ProtoReflect.Descriptor instead.
+func (*GetActiveUserResp) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{41}
}
-func (x *DeleteMsgsReq) GetConversationID() string {
+func (x *GetActiveUserResp) GetMsgCount() int64 {
if x != nil {
- return x.ConversationID
+ return x.MsgCount
}
- return ""
+ return 0
}
-func (x *DeleteMsgsReq) GetSeqs() []int64 {
+func (x *GetActiveUserResp) GetUserCount() int64 {
if x != nil {
- return x.Seqs
+ return x.UserCount
}
- return nil
+ return 0
}
-func (x *DeleteMsgsReq) GetUserID() string {
+func (x *GetActiveUserResp) GetDateCount() map[string]int64 {
if x != nil {
- return x.UserID
+ return x.DateCount
}
- return ""
+ return nil
}
-func (x *DeleteMsgsReq) GetDeleteSyncOpt() *DeleteSyncOpt {
+func (x *GetActiveUserResp) GetUsers() []*ActiveUser {
if x != nil {
- return x.DeleteSyncOpt
+ return x.Users
}
return nil
}
-type DeleteMsgsResp struct {
+type GetActiveGroupReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start"`
+ End int64 `protobuf:"varint,2,opt,name=end,proto3" json:"end"`
+ Ase bool `protobuf:"varint,3,opt,name=ase,proto3" json:"ase"`
+ Pagination *sdkws.RequestPagination `protobuf:"bytes,4,opt,name=pagination,proto3" json:"pagination"`
}
-func (x *DeleteMsgsResp) Reset() {
- *x = DeleteMsgsResp{}
+func (x *GetActiveGroupReq) Reset() {
+ *x = GetActiveGroupReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[41]
+ mi := &file_msg_msg_proto_msgTypes[42]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *DeleteMsgsResp) String() string {
+func (x *GetActiveGroupReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMsgsResp) ProtoMessage() {}
+func (*GetActiveGroupReq) ProtoMessage() {}
-func (x *DeleteMsgsResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[41]
+func (x *GetActiveGroupReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[42]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2384,74 +2200,50 @@ func (x *DeleteMsgsResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMsgsResp.ProtoReflect.Descriptor instead.
-func (*DeleteMsgsResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{41}
-}
-
-type DeleteMsgPhysicalReq struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ConversationIDs []string `protobuf:"bytes,1,rep,name=conversationIDs,proto3" json:"conversationIDs"`
- Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp"`
+// Deprecated: Use GetActiveGroupReq.ProtoReflect.Descriptor instead.
+func (*GetActiveGroupReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{42}
}
-func (x *DeleteMsgPhysicalReq) Reset() {
- *x = DeleteMsgPhysicalReq{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[42]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *GetActiveGroupReq) GetStart() int64 {
+ if x != nil {
+ return x.Start
}
+ return 0
}
-func (x *DeleteMsgPhysicalReq) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DeleteMsgPhysicalReq) ProtoMessage() {}
-
-func (x *DeleteMsgPhysicalReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[42]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *GetActiveGroupReq) GetEnd() int64 {
+ if x != nil {
+ return x.End
}
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use DeleteMsgPhysicalReq.ProtoReflect.Descriptor instead.
-func (*DeleteMsgPhysicalReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{42}
+ return 0
}
-func (x *DeleteMsgPhysicalReq) GetConversationIDs() []string {
+func (x *GetActiveGroupReq) GetAse() bool {
if x != nil {
- return x.ConversationIDs
+ return x.Ase
}
- return nil
+ return false
}
-func (x *DeleteMsgPhysicalReq) GetTimestamp() int64 {
+func (x *GetActiveGroupReq) GetPagination() *sdkws.RequestPagination {
if x != nil {
- return x.Timestamp
+ return x.Pagination
}
- return 0
+ return nil
}
-type DeleteMsgPhysicalResp struct {
+type ActiveGroup struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ Group *sdkws.GroupInfo `protobuf:"bytes,1,opt,name=group,proto3" json:"group"`
+ Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count"`
}
-func (x *DeleteMsgPhysicalResp) Reset() {
- *x = DeleteMsgPhysicalResp{}
+func (x *ActiveGroup) Reset() {
+ *x = ActiveGroup{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[43]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2459,13 +2251,13 @@ func (x *DeleteMsgPhysicalResp) Reset() {
}
}
-func (x *DeleteMsgPhysicalResp) String() string {
+func (x *ActiveGroup) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMsgPhysicalResp) ProtoMessage() {}
+func (*ActiveGroup) ProtoMessage() {}
-func (x *DeleteMsgPhysicalResp) ProtoReflect() protoreflect.Message {
+func (x *ActiveGroup) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[43]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2477,22 +2269,38 @@ func (x *DeleteMsgPhysicalResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMsgPhysicalResp.ProtoReflect.Descriptor instead.
-func (*DeleteMsgPhysicalResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use ActiveGroup.ProtoReflect.Descriptor instead.
+func (*ActiveGroup) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{43}
}
-type DeleteMsgPhysicalBySeqReq struct {
+func (x *ActiveGroup) GetGroup() *sdkws.GroupInfo {
+ if x != nil {
+ return x.Group
+ }
+ return nil
+}
+
+func (x *ActiveGroup) GetCount() int64 {
+ if x != nil {
+ return x.Count
+ }
+ return 0
+}
+
+type GetActiveGroupResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- Seqs []int64 `protobuf:"varint,2,rep,packed,name=seqs,proto3" json:"seqs"`
+ MsgCount int64 `protobuf:"varint,1,opt,name=msgCount,proto3" json:"msgCount"`
+ GroupCount int64 `protobuf:"varint,2,opt,name=groupCount,proto3" json:"groupCount"`
+ DateCount map[string]int64 `protobuf:"bytes,3,rep,name=dateCount,proto3" json:"dateCount" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+ Groups []*ActiveGroup `protobuf:"bytes,4,rep,name=groups,proto3" json:"groups"`
}
-func (x *DeleteMsgPhysicalBySeqReq) Reset() {
- *x = DeleteMsgPhysicalBySeqReq{}
+func (x *GetActiveGroupResp) Reset() {
+ *x = GetActiveGroupResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[44]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2500,13 +2308,13 @@ func (x *DeleteMsgPhysicalBySeqReq) Reset() {
}
}
-func (x *DeleteMsgPhysicalBySeqReq) String() string {
+func (x *GetActiveGroupResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMsgPhysicalBySeqReq) ProtoMessage() {}
+func (*GetActiveGroupResp) ProtoMessage() {}
-func (x *DeleteMsgPhysicalBySeqReq) ProtoReflect() protoreflect.Message {
+func (x *GetActiveGroupResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[44]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2518,33 +2326,54 @@ func (x *DeleteMsgPhysicalBySeqReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMsgPhysicalBySeqReq.ProtoReflect.Descriptor instead.
-func (*DeleteMsgPhysicalBySeqReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use GetActiveGroupResp.ProtoReflect.Descriptor instead.
+func (*GetActiveGroupResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{44}
}
-func (x *DeleteMsgPhysicalBySeqReq) GetConversationID() string {
+func (x *GetActiveGroupResp) GetMsgCount() int64 {
if x != nil {
- return x.ConversationID
+ return x.MsgCount
}
- return ""
+ return 0
}
-func (x *DeleteMsgPhysicalBySeqReq) GetSeqs() []int64 {
+func (x *GetActiveGroupResp) GetGroupCount() int64 {
if x != nil {
- return x.Seqs
+ return x.GroupCount
+ }
+ return 0
+}
+
+func (x *GetActiveGroupResp) GetDateCount() map[string]int64 {
+ if x != nil {
+ return x.DateCount
}
return nil
}
-type DeleteMsgPhysicalBySeqResp struct {
+func (x *GetActiveGroupResp) GetGroups() []*ActiveGroup {
+ if x != nil {
+ return x.Groups
+ }
+ return nil
+}
+
+type SearchMessageReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ SendID string `protobuf:"bytes,1,opt,name=sendID,proto3" json:"sendID"` //发送者ID
+ RecvID string `protobuf:"bytes,2,opt,name=recvID,proto3" json:"recvID"` //接收者ID
+ MsgType int32 `protobuf:"varint,3,opt,name=msgType,proto3" json:"msgType"`
+ SendTime string `protobuf:"bytes,4,opt,name=sendTime,proto3" json:"sendTime"`
+ SessionType int32 `protobuf:"varint,5,opt,name=sessionType,proto3" json:"sessionType"`
+ Pagination *sdkws.RequestPagination `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination"`
}
-func (x *DeleteMsgPhysicalBySeqResp) Reset() {
- *x = DeleteMsgPhysicalBySeqResp{}
+func (x *SearchMessageReq) Reset() {
+ *x = SearchMessageReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[45]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2552,13 +2381,13 @@ func (x *DeleteMsgPhysicalBySeqResp) Reset() {
}
}
-func (x *DeleteMsgPhysicalBySeqResp) String() string {
+func (x *SearchMessageReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMsgPhysicalBySeqResp) ProtoMessage() {}
+func (*SearchMessageReq) ProtoMessage() {}
-func (x *DeleteMsgPhysicalBySeqResp) ProtoReflect() protoreflect.Message {
+func (x *SearchMessageReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[45]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2570,21 +2399,64 @@ func (x *DeleteMsgPhysicalBySeqResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMsgPhysicalBySeqResp.ProtoReflect.Descriptor instead.
-func (*DeleteMsgPhysicalBySeqResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use SearchMessageReq.ProtoReflect.Descriptor instead.
+func (*SearchMessageReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{45}
}
-type GetConversationMaxSeqReq struct {
+func (x *SearchMessageReq) GetSendID() string {
+ if x != nil {
+ return x.SendID
+ }
+ return ""
+}
+
+func (x *SearchMessageReq) GetRecvID() string {
+ if x != nil {
+ return x.RecvID
+ }
+ return ""
+}
+
+func (x *SearchMessageReq) GetMsgType() int32 {
+ if x != nil {
+ return x.MsgType
+ }
+ return 0
+}
+
+func (x *SearchMessageReq) GetSendTime() string {
+ if x != nil {
+ return x.SendTime
+ }
+ return ""
+}
+
+func (x *SearchMessageReq) GetSessionType() int32 {
+ if x != nil {
+ return x.SessionType
+ }
+ return 0
+}
+
+func (x *SearchMessageReq) GetPagination() *sdkws.RequestPagination {
+ if x != nil {
+ return x.Pagination
+ }
+ return nil
+}
+
+type SearchMessageResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
+ ChatLogs []*ChatLog `protobuf:"bytes,1,rep,name=chatLogs,proto3" json:"chatLogs"`
+ ChatLogsNum int32 `protobuf:"varint,2,opt,name=chatLogsNum,proto3" json:"chatLogsNum"`
}
-func (x *GetConversationMaxSeqReq) Reset() {
- *x = GetConversationMaxSeqReq{}
+func (x *SearchMessageResp) Reset() {
+ *x = SearchMessageResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[46]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2592,13 +2464,13 @@ func (x *GetConversationMaxSeqReq) Reset() {
}
}
-func (x *GetConversationMaxSeqReq) String() string {
+func (x *SearchMessageResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetConversationMaxSeqReq) ProtoMessage() {}
+func (*SearchMessageResp) ProtoMessage() {}
-func (x *GetConversationMaxSeqReq) ProtoReflect() protoreflect.Message {
+func (x *SearchMessageResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[46]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2610,28 +2482,39 @@ func (x *GetConversationMaxSeqReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetConversationMaxSeqReq.ProtoReflect.Descriptor instead.
-func (*GetConversationMaxSeqReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use SearchMessageResp.ProtoReflect.Descriptor instead.
+func (*SearchMessageResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{46}
}
-func (x *GetConversationMaxSeqReq) GetConversationID() string {
+func (x *SearchMessageResp) GetChatLogs() []*ChatLog {
if x != nil {
- return x.ConversationID
+ return x.ChatLogs
}
- return ""
+ return nil
}
-type GetConversationMaxSeqResp struct {
+func (x *SearchMessageResp) GetChatLogsNum() int32 {
+ if x != nil {
+ return x.ChatLogsNum
+ }
+ return 0
+}
+
+type ManageMsgReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- MaxSeq int64 `protobuf:"varint,1,opt,name=maxSeq,proto3" json:"maxSeq"`
+ RecvID string `protobuf:"bytes,1,opt,name=recvID,proto3" json:"recvID"`
+ SendID string `protobuf:"bytes,2,opt,name=sendID,proto3" json:"sendID"`
+ GroupID string `protobuf:"bytes,3,opt,name=groupID,proto3" json:"groupID"`
+ Seq int64 `protobuf:"varint,4,opt,name=seq,proto3" json:"seq"`
+ SessionType int32 `protobuf:"varint,5,opt,name=sessionType,proto3" json:"sessionType"`
}
-func (x *GetConversationMaxSeqResp) Reset() {
- *x = GetConversationMaxSeqResp{}
+func (x *ManageMsgReq) Reset() {
+ *x = ManageMsgReq{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[47]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2639,13 +2522,13 @@ func (x *GetConversationMaxSeqResp) Reset() {
}
}
-func (x *GetConversationMaxSeqResp) String() string {
+func (x *ManageMsgReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetConversationMaxSeqResp) ProtoMessage() {}
+func (*ManageMsgReq) ProtoMessage() {}
-func (x *GetConversationMaxSeqResp) ProtoReflect() protoreflect.Message {
+func (x *ManageMsgReq) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[47]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2657,28 +2540,54 @@ func (x *GetConversationMaxSeqResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetConversationMaxSeqResp.ProtoReflect.Descriptor instead.
-func (*GetConversationMaxSeqResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use ManageMsgReq.ProtoReflect.Descriptor instead.
+func (*ManageMsgReq) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{47}
}
-func (x *GetConversationMaxSeqResp) GetMaxSeq() int64 {
+func (x *ManageMsgReq) GetRecvID() string {
if x != nil {
- return x.MaxSeq
+ return x.RecvID
+ }
+ return ""
+}
+
+func (x *ManageMsgReq) GetSendID() string {
+ if x != nil {
+ return x.SendID
+ }
+ return ""
+}
+
+func (x *ManageMsgReq) GetGroupID() string {
+ if x != nil {
+ return x.GroupID
+ }
+ return ""
+}
+
+func (x *ManageMsgReq) GetSeq() int64 {
+ if x != nil {
+ return x.Seq
}
return 0
}
-type GetConversationsHasReadAndMaxSeqReq struct {
+func (x *ManageMsgReq) GetSessionType() int32 {
+ if x != nil {
+ return x.SessionType
+ }
+ return 0
+}
+
+type ManageMsgResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID"`
}
-func (x *GetConversationsHasReadAndMaxSeqReq) Reset() {
- *x = GetConversationsHasReadAndMaxSeqReq{}
+func (x *ManageMsgResp) Reset() {
+ *x = ManageMsgResp{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[48]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2686,13 +2595,13 @@ func (x *GetConversationsHasReadAndMaxSeqReq) Reset() {
}
}
-func (x *GetConversationsHasReadAndMaxSeqReq) String() string {
+func (x *ManageMsgResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetConversationsHasReadAndMaxSeqReq) ProtoMessage() {}
+func (*ManageMsgResp) ProtoMessage() {}
-func (x *GetConversationsHasReadAndMaxSeqReq) ProtoReflect() protoreflect.Message {
+func (x *ManageMsgResp) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[48]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2704,29 +2613,43 @@ func (x *GetConversationsHasReadAndMaxSeqReq) ProtoReflect() protoreflect.Messag
return mi.MessageOf(x)
}
-// Deprecated: Use GetConversationsHasReadAndMaxSeqReq.ProtoReflect.Descriptor instead.
-func (*GetConversationsHasReadAndMaxSeqReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use ManageMsgResp.ProtoReflect.Descriptor instead.
+func (*ManageMsgResp) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{48}
}
-func (x *GetConversationsHasReadAndMaxSeqReq) GetUserID() string {
- if x != nil {
- return x.UserID
- }
- return ""
-}
-
-type Seqs struct {
+type ChatLog struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- MaxSeq int64 `protobuf:"varint,1,opt,name=maxSeq,proto3" json:"maxSeq"`
- HasReadSeq int64 `protobuf:"varint,2,opt,name=hasReadSeq,proto3" json:"hasReadSeq"`
+ ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID,proto3" json:"serverMsgID"`
+ ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID,proto3" json:"clientMsgID"`
+ SendID string `protobuf:"bytes,3,opt,name=sendID,proto3" json:"sendID"`
+ RecvID string `protobuf:"bytes,4,opt,name=recvID,proto3" json:"recvID"`
+ GroupID string `protobuf:"bytes,5,opt,name=groupID,proto3" json:"groupID"`
+ RecvNickname string `protobuf:"bytes,6,opt,name=recvNickname,proto3" json:"recvNickname"`
+ SenderPlatformID int32 `protobuf:"varint,7,opt,name=senderPlatformID,proto3" json:"senderPlatformID"`
+ SenderNickname string `protobuf:"bytes,8,opt,name=senderNickname,proto3" json:"senderNickname"`
+ SenderFaceURL string `protobuf:"bytes,9,opt,name=senderFaceURL,proto3" json:"senderFaceURL"`
+ GroupName string `protobuf:"bytes,10,opt,name=groupName,proto3" json:"groupName"`
+ SessionType int32 `protobuf:"varint,11,opt,name=sessionType,proto3" json:"sessionType"`
+ MsgFrom int32 `protobuf:"varint,12,opt,name=msgFrom,proto3" json:"msgFrom"`
+ ContentType int32 `protobuf:"varint,13,opt,name=contentType,proto3" json:"contentType"`
+ Content string `protobuf:"bytes,14,opt,name=content,proto3" json:"content"`
+ Status int32 `protobuf:"varint,15,opt,name=status,proto3" json:"status"`
+ SendTime int64 `protobuf:"varint,16,opt,name=sendTime,proto3" json:"sendTime"`
+ CreateTime int64 `protobuf:"varint,17,opt,name=createTime,proto3" json:"createTime"`
+ Ex string `protobuf:"bytes,18,opt,name=ex,proto3" json:"ex"`
+ GroupFaceURL string `protobuf:"bytes,19,opt,name=groupFaceURL,proto3" json:"groupFaceURL"`
+ GroupMemberCount uint32 `protobuf:"varint,20,opt,name=groupMemberCount,proto3" json:"groupMemberCount"`
+ Seq int64 `protobuf:"varint,21,opt,name=seq,proto3" json:"seq"`
+ GroupOwner string `protobuf:"bytes,22,opt,name=groupOwner,proto3" json:"groupOwner"`
+ GroupType int32 `protobuf:"varint,23,opt,name=groupType,proto3" json:"groupType"`
}
-func (x *Seqs) Reset() {
- *x = Seqs{}
+func (x *ChatLog) Reset() {
+ *x = ChatLog{}
if protoimpl.UnsafeEnabled {
mi := &file_msg_msg_proto_msgTypes[49]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2734,13 +2657,13 @@ func (x *Seqs) Reset() {
}
}
-func (x *Seqs) String() string {
+func (x *ChatLog) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*Seqs) ProtoMessage() {}
+func (*ChatLog) ProtoMessage() {}
-func (x *Seqs) ProtoReflect() protoreflect.Message {
+func (x *ChatLog) ProtoReflect() protoreflect.Message {
mi := &file_msg_msg_proto_msgTypes[49]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2752,305 +2675,202 @@ func (x *Seqs) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use Seqs.ProtoReflect.Descriptor instead.
-func (*Seqs) Descriptor() ([]byte, []int) {
+// Deprecated: Use ChatLog.ProtoReflect.Descriptor instead.
+func (*ChatLog) Descriptor() ([]byte, []int) {
return file_msg_msg_proto_rawDescGZIP(), []int{49}
}
-func (x *Seqs) GetMaxSeq() int64 {
+func (x *ChatLog) GetServerMsgID() string {
if x != nil {
- return x.MaxSeq
+ return x.ServerMsgID
}
- return 0
+ return ""
}
-func (x *Seqs) GetHasReadSeq() int64 {
+func (x *ChatLog) GetClientMsgID() string {
if x != nil {
- return x.HasReadSeq
+ return x.ClientMsgID
}
- return 0
+ return ""
}
-type GetConversationsHasReadAndMaxSeqResp struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Seqs map[string]*Seqs `protobuf:"bytes,1,rep,name=seqs,proto3" json:"seqs" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+func (x *ChatLog) GetSendID() string {
+ if x != nil {
+ return x.SendID
+ }
+ return ""
}
-func (x *GetConversationsHasReadAndMaxSeqResp) Reset() {
- *x = GetConversationsHasReadAndMaxSeqResp{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[50]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *ChatLog) GetRecvID() string {
+ if x != nil {
+ return x.RecvID
}
+ return ""
}
-func (x *GetConversationsHasReadAndMaxSeqResp) String() string {
- return protoimpl.X.MessageStringOf(x)
+func (x *ChatLog) GetGroupID() string {
+ if x != nil {
+ return x.GroupID
+ }
+ return ""
}
-func (*GetConversationsHasReadAndMaxSeqResp) ProtoMessage() {}
-
-func (x *GetConversationsHasReadAndMaxSeqResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[50]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *ChatLog) GetRecvNickname() string {
+ if x != nil {
+ return x.RecvNickname
}
- return mi.MessageOf(x)
+ return ""
}
-// Deprecated: Use GetConversationsHasReadAndMaxSeqResp.ProtoReflect.Descriptor instead.
-func (*GetConversationsHasReadAndMaxSeqResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{50}
+func (x *ChatLog) GetSenderPlatformID() int32 {
+ if x != nil {
+ return x.SenderPlatformID
+ }
+ return 0
}
-func (x *GetConversationsHasReadAndMaxSeqResp) GetSeqs() map[string]*Seqs {
+func (x *ChatLog) GetSenderNickname() string {
if x != nil {
- return x.Seqs
+ return x.SenderNickname
}
- return nil
+ return ""
}
-type GetActiveUserReq struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start"`
- End int64 `protobuf:"varint,2,opt,name=end,proto3" json:"end"`
- Ase bool `protobuf:"varint,3,opt,name=ase,proto3" json:"ase"`
- Group bool `protobuf:"varint,4,opt,name=group,proto3" json:"group"`
- Pagination *sdkws.RequestPagination `protobuf:"bytes,5,opt,name=pagination,proto3" json:"pagination"`
+func (x *ChatLog) GetSenderFaceURL() string {
+ if x != nil {
+ return x.SenderFaceURL
+ }
+ return ""
}
-func (x *GetActiveUserReq) Reset() {
- *x = GetActiveUserReq{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[51]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *ChatLog) GetGroupName() string {
+ if x != nil {
+ return x.GroupName
}
+ return ""
}
-func (x *GetActiveUserReq) String() string {
- return protoimpl.X.MessageStringOf(x)
+func (x *ChatLog) GetSessionType() int32 {
+ if x != nil {
+ return x.SessionType
+ }
+ return 0
}
-func (*GetActiveUserReq) ProtoMessage() {}
+func (x *ChatLog) GetMsgFrom() int32 {
+ if x != nil {
+ return x.MsgFrom
+ }
+ return 0
+}
-func (x *GetActiveUserReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[51]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *ChatLog) GetContentType() int32 {
+ if x != nil {
+ return x.ContentType
}
- return mi.MessageOf(x)
+ return 0
}
-// Deprecated: Use GetActiveUserReq.ProtoReflect.Descriptor instead.
-func (*GetActiveUserReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{51}
+func (x *ChatLog) GetContent() string {
+ if x != nil {
+ return x.Content
+ }
+ return ""
}
-func (x *GetActiveUserReq) GetStart() int64 {
+func (x *ChatLog) GetStatus() int32 {
if x != nil {
- return x.Start
+ return x.Status
}
return 0
}
-func (x *GetActiveUserReq) GetEnd() int64 {
+func (x *ChatLog) GetSendTime() int64 {
if x != nil {
- return x.End
+ return x.SendTime
}
return 0
}
-func (x *GetActiveUserReq) GetAse() bool {
+func (x *ChatLog) GetCreateTime() int64 {
if x != nil {
- return x.Ase
+ return x.CreateTime
}
- return false
+ return 0
}
-func (x *GetActiveUserReq) GetGroup() bool {
+func (x *ChatLog) GetEx() string {
if x != nil {
- return x.Group
+ return x.Ex
}
- return false
+ return ""
}
-func (x *GetActiveUserReq) GetPagination() *sdkws.RequestPagination {
+func (x *ChatLog) GetGroupFaceURL() string {
if x != nil {
- return x.Pagination
- }
- return nil
-}
-
-type ActiveUser struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- User *sdkws.UserInfo `protobuf:"bytes,1,opt,name=user,proto3" json:"user"`
- Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count"`
-}
-
-func (x *ActiveUser) Reset() {
- *x = ActiveUser{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[52]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ActiveUser) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ActiveUser) ProtoMessage() {}
-
-func (x *ActiveUser) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[52]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ActiveUser.ProtoReflect.Descriptor instead.
-func (*ActiveUser) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{52}
-}
-
-func (x *ActiveUser) GetUser() *sdkws.UserInfo {
- if x != nil {
- return x.User
- }
- return nil
-}
-
-func (x *ActiveUser) GetCount() int64 {
- if x != nil {
- return x.Count
- }
- return 0
-}
-
-type GetActiveUserResp struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- MsgCount int64 `protobuf:"varint,1,opt,name=msgCount,proto3" json:"msgCount"`
- UserCount int64 `protobuf:"varint,2,opt,name=userCount,proto3" json:"userCount"`
- DateCount map[string]int64 `protobuf:"bytes,3,rep,name=dateCount,proto3" json:"dateCount" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
- Users []*ActiveUser `protobuf:"bytes,4,rep,name=users,proto3" json:"users"`
-}
-
-func (x *GetActiveUserResp) Reset() {
- *x = GetActiveUserResp{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[53]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *GetActiveUserResp) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetActiveUserResp) ProtoMessage() {}
-
-func (x *GetActiveUserResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[53]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+ return x.GroupFaceURL
}
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetActiveUserResp.ProtoReflect.Descriptor instead.
-func (*GetActiveUserResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{53}
+ return ""
}
-func (x *GetActiveUserResp) GetMsgCount() int64 {
+func (x *ChatLog) GetGroupMemberCount() uint32 {
if x != nil {
- return x.MsgCount
+ return x.GroupMemberCount
}
return 0
}
-func (x *GetActiveUserResp) GetUserCount() int64 {
+func (x *ChatLog) GetSeq() int64 {
if x != nil {
- return x.UserCount
+ return x.Seq
}
return 0
}
-func (x *GetActiveUserResp) GetDateCount() map[string]int64 {
+func (x *ChatLog) GetGroupOwner() string {
if x != nil {
- return x.DateCount
+ return x.GroupOwner
}
- return nil
+ return ""
}
-func (x *GetActiveUserResp) GetUsers() []*ActiveUser {
+func (x *ChatLog) GetGroupType() int32 {
if x != nil {
- return x.Users
+ return x.GroupType
}
- return nil
+ return 0
}
-type GetActiveGroupReq struct {
+type GetChatLogsReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start"`
- End int64 `protobuf:"varint,2,opt,name=end,proto3" json:"end"`
- Ase bool `protobuf:"varint,3,opt,name=ase,proto3" json:"ase"`
- Pagination *sdkws.RequestPagination `protobuf:"bytes,4,opt,name=pagination,proto3" json:"pagination"`
+ SendID string `protobuf:"bytes,1,opt,name=SendID,proto3" json:"SendID"` //发送者ID
+ RecvID string `protobuf:"bytes,2,opt,name=RecvID,proto3" json:"RecvID"` //接收者ID
+ ContentType int32 `protobuf:"varint,3,opt,name=contentType,proto3" json:"contentType"`
+ SendTime string `protobuf:"bytes,4,opt,name=sendTime,proto3" json:"sendTime"`
+ Pagination *sdkws.RequestPagination `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination"`
+ SessionType int32 `protobuf:"varint,7,opt,name=sessionType,proto3" json:"sessionType"`
}
-func (x *GetActiveGroupReq) Reset() {
- *x = GetActiveGroupReq{}
+func (x *GetChatLogsReq) Reset() {
+ *x = GetChatLogsReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[54]
+ mi := &file_msg_msg_proto_msgTypes[50]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetActiveGroupReq) String() string {
+func (x *GetChatLogsReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetActiveGroupReq) ProtoMessage() {}
+func (*GetChatLogsReq) ProtoMessage() {}
-func (x *GetActiveGroupReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[54]
+func (x *GetChatLogsReq) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[50]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3061,122 +2881,79 @@ func (x *GetActiveGroupReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetActiveGroupReq.ProtoReflect.Descriptor instead.
-func (*GetActiveGroupReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{54}
+// Deprecated: Use GetChatLogsReq.ProtoReflect.Descriptor instead.
+func (*GetChatLogsReq) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{50}
}
-func (x *GetActiveGroupReq) GetStart() int64 {
+func (x *GetChatLogsReq) GetSendID() string {
if x != nil {
- return x.Start
+ return x.SendID
}
- return 0
+ return ""
}
-func (x *GetActiveGroupReq) GetEnd() int64 {
+func (x *GetChatLogsReq) GetRecvID() string {
if x != nil {
- return x.End
+ return x.RecvID
}
- return 0
+ return ""
}
-func (x *GetActiveGroupReq) GetAse() bool {
+func (x *GetChatLogsReq) GetContentType() int32 {
if x != nil {
- return x.Ase
+ return x.ContentType
}
- return false
+ return 0
}
-func (x *GetActiveGroupReq) GetPagination() *sdkws.RequestPagination {
+func (x *GetChatLogsReq) GetSendTime() string {
if x != nil {
- return x.Pagination
- }
- return nil
-}
-
-type ActiveGroup struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Group *sdkws.GroupInfo `protobuf:"bytes,1,opt,name=group,proto3" json:"group"`
- Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count"`
-}
-
-func (x *ActiveGroup) Reset() {
- *x = ActiveGroup{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[55]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ActiveGroup) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ActiveGroup) ProtoMessage() {}
-
-func (x *ActiveGroup) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[55]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+ return x.SendTime
}
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ActiveGroup.ProtoReflect.Descriptor instead.
-func (*ActiveGroup) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{55}
+ return ""
}
-func (x *ActiveGroup) GetGroup() *sdkws.GroupInfo {
+func (x *GetChatLogsReq) GetPagination() *sdkws.RequestPagination {
if x != nil {
- return x.Group
+ return x.Pagination
}
return nil
}
-func (x *ActiveGroup) GetCount() int64 {
+func (x *GetChatLogsReq) GetSessionType() int32 {
if x != nil {
- return x.Count
+ return x.SessionType
}
return 0
}
-type GetActiveGroupResp struct {
+type GetChatLogsResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- MsgCount int64 `protobuf:"varint,1,opt,name=msgCount,proto3" json:"msgCount"`
- GroupCount int64 `protobuf:"varint,2,opt,name=groupCount,proto3" json:"groupCount"`
- DateCount map[string]int64 `protobuf:"bytes,3,rep,name=dateCount,proto3" json:"dateCount" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
- Groups []*ActiveGroup `protobuf:"bytes,4,rep,name=groups,proto3" json:"groups"`
+ ChatLogs []*ChatLog `protobuf:"bytes,1,rep,name=chatLogs,proto3" json:"chatLogs"`
+ ChatLogsNum int32 `protobuf:"varint,3,opt,name=chatLogsNum,proto3" json:"chatLogsNum"`
}
-func (x *GetActiveGroupResp) Reset() {
- *x = GetActiveGroupResp{}
+func (x *GetChatLogsResp) Reset() {
+ *x = GetChatLogsResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[56]
+ mi := &file_msg_msg_proto_msgTypes[51]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetActiveGroupResp) String() string {
+func (x *GetChatLogsResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetActiveGroupResp) ProtoMessage() {}
+func (*GetChatLogsResp) ProtoMessage() {}
-func (x *GetActiveGroupResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[56]
+func (x *GetChatLogsResp) ProtoReflect() protoreflect.Message {
+ mi := &file_msg_msg_proto_msgTypes[51]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3187,1612 +2964,671 @@ func (x *GetActiveGroupResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetActiveGroupResp.ProtoReflect.Descriptor instead.
-func (*GetActiveGroupResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{56}
+// Deprecated: Use GetChatLogsResp.ProtoReflect.Descriptor instead.
+func (*GetChatLogsResp) Descriptor() ([]byte, []int) {
+ return file_msg_msg_proto_rawDescGZIP(), []int{51}
}
-func (x *GetActiveGroupResp) GetMsgCount() int64 {
+func (x *GetChatLogsResp) GetChatLogs() []*ChatLog {
if x != nil {
- return x.MsgCount
+ return x.ChatLogs
}
- return 0
+ return nil
}
-func (x *GetActiveGroupResp) GetGroupCount() int64 {
+func (x *GetChatLogsResp) GetChatLogsNum() int32 {
if x != nil {
- return x.GroupCount
+ return x.ChatLogsNum
}
return 0
}
-func (x *GetActiveGroupResp) GetDateCount() map[string]int64 {
- if x != nil {
- return x.DateCount
- }
- return nil
-}
-
-func (x *GetActiveGroupResp) GetGroups() []*ActiveGroup {
- if x != nil {
- return x.Groups
- }
- return nil
-}
-
-type SearchMessageReq struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Keyword1 string `protobuf:"bytes,1,opt,name=keyword1,proto3" json:"keyword1"` //发送者ID
- Keyword2 string `protobuf:"bytes,2,opt,name=keyword2,proto3" json:"keyword2"` //接收者ID
- MsgType int32 `protobuf:"varint,3,opt,name=msgType,proto3" json:"msgType"`
- StartTime int64 `protobuf:"varint,4,opt,name=startTime,proto3" json:"startTime"`
- EndTime int64 `protobuf:"varint,5,opt,name=endTime,proto3" json:"endTime"`
- Pagination *sdkws.RequestPagination `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination"`
-}
-
-func (x *SearchMessageReq) Reset() {
- *x = SearchMessageReq{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[57]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *SearchMessageReq) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SearchMessageReq) ProtoMessage() {}
-
-func (x *SearchMessageReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[57]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use SearchMessageReq.ProtoReflect.Descriptor instead.
-func (*SearchMessageReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{57}
-}
-
-func (x *SearchMessageReq) GetKeyword1() string {
- if x != nil {
- return x.Keyword1
- }
- return ""
-}
-
-func (x *SearchMessageReq) GetKeyword2() string {
- if x != nil {
- return x.Keyword2
- }
- return ""
-}
-
-func (x *SearchMessageReq) GetMsgType() int32 {
- if x != nil {
- return x.MsgType
- }
- return 0
-}
-
-func (x *SearchMessageReq) GetStartTime() int64 {
- if x != nil {
- return x.StartTime
- }
- return 0
-}
-
-func (x *SearchMessageReq) GetEndTime() int64 {
- if x != nil {
- return x.EndTime
- }
- return 0
-}
-
-func (x *SearchMessageReq) GetPagination() *sdkws.RequestPagination {
- if x != nil {
- return x.Pagination
- }
- return nil
-}
-
-type SearchMessageResp struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Msgs []*sdkws.MsgData `protobuf:"bytes,1,rep,name=msgs,proto3" json:"msgs"`
-}
-
-func (x *SearchMessageResp) Reset() {
- *x = SearchMessageResp{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[58]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *SearchMessageResp) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SearchMessageResp) ProtoMessage() {}
-
-func (x *SearchMessageResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[58]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use SearchMessageResp.ProtoReflect.Descriptor instead.
-func (*SearchMessageResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{58}
-}
-
-func (x *SearchMessageResp) GetMsgs() []*sdkws.MsgData {
- if x != nil {
- return x.Msgs
- }
- return nil
-}
-
-type ChatLog struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID,proto3" json:"serverMsgID"`
- ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- SendID string `protobuf:"bytes,3,opt,name=sendID,proto3" json:"sendID"`
- RecvID string `protobuf:"bytes,4,opt,name=recvID,proto3" json:"recvID"`
- GroupID string `protobuf:"bytes,5,opt,name=groupID,proto3" json:"groupID"`
- RecvNickname string `protobuf:"bytes,6,opt,name=recvNickname,proto3" json:"recvNickname"`
- SenderPlatformID int32 `protobuf:"varint,7,opt,name=senderPlatformID,proto3" json:"senderPlatformID"`
- SenderNickname string `protobuf:"bytes,8,opt,name=senderNickname,proto3" json:"senderNickname"`
- SenderFaceURL string `protobuf:"bytes,9,opt,name=senderFaceURL,proto3" json:"senderFaceURL"`
- GroupName string `protobuf:"bytes,10,opt,name=groupName,proto3" json:"groupName"`
- SessionType int32 `protobuf:"varint,11,opt,name=sessionType,proto3" json:"sessionType"`
- MsgFrom int32 `protobuf:"varint,12,opt,name=msgFrom,proto3" json:"msgFrom"`
- ContentType int32 `protobuf:"varint,13,opt,name=contentType,proto3" json:"contentType"`
- Content string `protobuf:"bytes,14,opt,name=content,proto3" json:"content"`
- Status int32 `protobuf:"varint,15,opt,name=status,proto3" json:"status"`
- SendTime int64 `protobuf:"varint,16,opt,name=sendTime,proto3" json:"sendTime"`
- CreateTime int64 `protobuf:"varint,17,opt,name=createTime,proto3" json:"createTime"`
- Ex string `protobuf:"bytes,18,opt,name=ex,proto3" json:"ex"`
-}
-
-func (x *ChatLog) Reset() {
- *x = ChatLog{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[59]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ChatLog) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ChatLog) ProtoMessage() {}
-
-func (x *ChatLog) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[59]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ChatLog.ProtoReflect.Descriptor instead.
-func (*ChatLog) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{59}
-}
-
-func (x *ChatLog) GetServerMsgID() string {
- if x != nil {
- return x.ServerMsgID
- }
- return ""
-}
-
-func (x *ChatLog) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *ChatLog) GetSendID() string {
- if x != nil {
- return x.SendID
- }
- return ""
-}
-
-func (x *ChatLog) GetRecvID() string {
- if x != nil {
- return x.RecvID
- }
- return ""
-}
-
-func (x *ChatLog) GetGroupID() string {
- if x != nil {
- return x.GroupID
- }
- return ""
-}
-
-func (x *ChatLog) GetRecvNickname() string {
- if x != nil {
- return x.RecvNickname
- }
- return ""
-}
-
-func (x *ChatLog) GetSenderPlatformID() int32 {
- if x != nil {
- return x.SenderPlatformID
- }
- return 0
-}
-
-func (x *ChatLog) GetSenderNickname() string {
- if x != nil {
- return x.SenderNickname
- }
- return ""
-}
-
-func (x *ChatLog) GetSenderFaceURL() string {
- if x != nil {
- return x.SenderFaceURL
- }
- return ""
-}
-
-func (x *ChatLog) GetGroupName() string {
- if x != nil {
- return x.GroupName
- }
- return ""
-}
-
-func (x *ChatLog) GetSessionType() int32 {
- if x != nil {
- return x.SessionType
- }
- return 0
-}
-
-func (x *ChatLog) GetMsgFrom() int32 {
- if x != nil {
- return x.MsgFrom
- }
- return 0
-}
-
-func (x *ChatLog) GetContentType() int32 {
- if x != nil {
- return x.ContentType
- }
- return 0
-}
-
-func (x *ChatLog) GetContent() string {
- if x != nil {
- return x.Content
- }
- return ""
-}
-
-func (x *ChatLog) GetStatus() int32 {
- if x != nil {
- return x.Status
- }
- return 0
-}
-
-func (x *ChatLog) GetSendTime() int64 {
- if x != nil {
- return x.SendTime
- }
- return 0
-}
-
-func (x *ChatLog) GetCreateTime() int64 {
- if x != nil {
- return x.CreateTime
- }
- return 0
-}
-
-func (x *ChatLog) GetEx() string {
- if x != nil {
- return x.Ex
- }
- return ""
-}
-
-type GetChatLogsReq struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- SendID string `protobuf:"bytes,1,opt,name=SendID,proto3" json:"SendID"` //发送者ID
- RecvID string `protobuf:"bytes,2,opt,name=RecvID,proto3" json:"RecvID"` //接收者ID
- ContentType int32 `protobuf:"varint,3,opt,name=contentType,proto3" json:"contentType"`
- SendTime string `protobuf:"bytes,4,opt,name=sendTime,proto3" json:"sendTime"`
- Pagination *sdkws.RequestPagination `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination"`
- SessionType int32 `protobuf:"varint,7,opt,name=sessionType,proto3" json:"sessionType"`
-}
-
-func (x *GetChatLogsReq) Reset() {
- *x = GetChatLogsReq{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[60]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *GetChatLogsReq) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetChatLogsReq) ProtoMessage() {}
-
-func (x *GetChatLogsReq) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[60]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetChatLogsReq.ProtoReflect.Descriptor instead.
-func (*GetChatLogsReq) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{60}
-}
-
-func (x *GetChatLogsReq) GetSendID() string {
- if x != nil {
- return x.SendID
- }
- return ""
-}
-
-func (x *GetChatLogsReq) GetRecvID() string {
- if x != nil {
- return x.RecvID
- }
- return ""
-}
-
-func (x *GetChatLogsReq) GetContentType() int32 {
- if x != nil {
- return x.ContentType
- }
- return 0
-}
-
-func (x *GetChatLogsReq) GetSendTime() string {
- if x != nil {
- return x.SendTime
- }
- return ""
-}
-
-func (x *GetChatLogsReq) GetPagination() *sdkws.RequestPagination {
- if x != nil {
- return x.Pagination
- }
- return nil
-}
-
-func (x *GetChatLogsReq) GetSessionType() int32 {
- if x != nil {
- return x.SessionType
- }
- return 0
-}
-
-type GetChatLogsResp struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ChatLogs []*ChatLog `protobuf:"bytes,1,rep,name=chatLogs,proto3" json:"chatLogs"`
- ChatLogsNum int32 `protobuf:"varint,3,opt,name=chatLogsNum,proto3" json:"chatLogsNum"`
-}
-
-func (x *GetChatLogsResp) Reset() {
- *x = GetChatLogsResp{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[61]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *GetChatLogsResp) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetChatLogsResp) ProtoMessage() {}
-
-func (x *GetChatLogsResp) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[61]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetChatLogsResp.ProtoReflect.Descriptor instead.
-func (*GetChatLogsResp) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{61}
-}
-
-func (x *GetChatLogsResp) GetChatLogs() []*ChatLog {
- if x != nil {
- return x.ChatLogs
- }
- return nil
-}
-
-func (x *GetChatLogsResp) GetChatLogsNum() int32 {
- if x != nil {
- return x.ChatLogsNum
- }
- return 0
-}
-
-type GetMessagesReactionExtensionsReq_MessageReactionKey struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ClientMsgID string `protobuf:"bytes,1,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- MsgFirstModifyTime int64 `protobuf:"varint,2,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
-}
-
-func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) Reset() {
- *x = GetMessagesReactionExtensionsReq_MessageReactionKey{}
- if protoimpl.UnsafeEnabled {
- mi := &file_msg_msg_proto_msgTypes[64]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetMessagesReactionExtensionsReq_MessageReactionKey) ProtoMessage() {}
-
-func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) ProtoReflect() protoreflect.Message {
- mi := &file_msg_msg_proto_msgTypes[64]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetMessagesReactionExtensionsReq_MessageReactionKey.ProtoReflect.Descriptor instead.
-func (*GetMessagesReactionExtensionsReq_MessageReactionKey) Descriptor() ([]byte, []int) {
- return file_msg_msg_proto_rawDescGZIP(), []int{15, 0}
-}
-
-func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-var File_msg_msg_proto protoreflect.FileDescriptor
+var File_msg_msg_proto protoreflect.FileDescriptor
var file_msg_msg_proto_rawDesc = []byte{
0x0a, 0x0d, 0x6d, 0x73, 0x67, 0x2f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x10, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73,
0x67, 0x1a, 0x11, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2f, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x70, 0x62,
- 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x70, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x22, 0x5a, 0x0a, 0x0b, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x54, 0x6f, 0x4d, 0x51,
- 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74,
- 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67,
- 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x44, 0x0a,
- 0x0b, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x54, 0x6f, 0x44, 0x42, 0x12, 0x35, 0x0a, 0x07,
- 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
- 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b,
- 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44,
- 0x61, 0x74, 0x61, 0x22, 0x70, 0x0a, 0x0f, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x44, 0x61,
- 0x74, 0x61, 0x54, 0x6f, 0x4d, 0x51, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74,
- 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67,
- 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a,
- 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x8d, 0x01, 0x0a, 0x12, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74,
- 0x61, 0x54, 0x6f, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x42, 0x79, 0x4d, 0x51, 0x12, 0x18, 0x0a, 0x07,
- 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c,
- 0x61, 0x73, 0x74, 0x53, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
- 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x35,
- 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73,
- 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73,
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x41,
- 0x6e, 0x64, 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65,
- 0x72, 0x49, 0x44, 0x22, 0x45, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x41, 0x6e, 0x64,
- 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61,
- 0x78, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x53,
- 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x22, 0x43, 0x0a, 0x0a, 0x53, 0x65,
- 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44,
- 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d,
- 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22,
- 0x6d, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x20,
- 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x49, 0x44,
- 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67,
- 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x2d,
- 0x0a, 0x13, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x16, 0x0a,
- 0x14, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64,
- 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x22, 0x2e, 0x0a, 0x14,
- 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xed, 0x04, 0x0a,
- 0x22, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
- 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e,
- 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x73,
- 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
- 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x7c, 0x0a,
- 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x6f, 0x64,
- 0x69, 0x66, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x2e,
- 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
- 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63,
- 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x32, 0x0a,
- 0x02, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02, 0x65,
- 0x78, 0x12, 0x46, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66,
- 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x74, 0x74,
- 0x61, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x52,
- 0x65, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x65,
- 0x61, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
- 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x14, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69,
- 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64,
- 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x63, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe7, 0x04, 0x0a,
- 0x1f, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
+ 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0b, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x54,
+ 0x6f, 0x4d, 0x51, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x73, 0x67,
+ 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e,
+ 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61,
+ 0x22, 0x44, 0x0a, 0x0b, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x54, 0x6f, 0x44, 0x42, 0x12,
+ 0x35, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+ 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d,
+ 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x70, 0x0a, 0x0f, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73,
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x54, 0x6f, 0x4d, 0x51, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x73, 0x67,
+ 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e,
+ 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61,
0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73,
- 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73,
- 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x79, 0x0a, 0x12, 0x72, 0x65,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
- 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73,
- 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65,
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x52, 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d,
- 0x73, 0x67, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65,
- 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x02, 0x65, 0x78, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69,
- 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02, 0x65, 0x78, 0x12, 0x46, 0x0a, 0x0c, 0x61,
- 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x49,
- 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x18, 0x07,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x12, 0x32, 0x0a,
- 0x14, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x45,
- 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64,
- 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d,
- 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d,
- 0x65, 0x1a, 0x63, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
- 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b,
- 0x77, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc6, 0x01, 0x0a, 0x20, 0x53, 0x65, 0x74, 0x4d, 0x65,
- 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x63,
- 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x2e, 0x0a,
- 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54,
- 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69,
- 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a,
- 0x07, 0x69, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
- 0x69, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
- 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
- 0xe9, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52,
- 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x8d, 0x01, 0x0a, 0x12, 0x4d, 0x73, 0x67,
+ 0x44, 0x61, 0x74, 0x61, 0x54, 0x6f, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x42, 0x79, 0x4d, 0x51, 0x12,
+ 0x18, 0x0a, 0x07, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x07, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
+ 0x44, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52,
+ 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d,
+ 0x61, 0x78, 0x41, 0x6e, 0x64, 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x12, 0x16,
+ 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x45, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x78,
+ 0x41, 0x6e, 0x64, 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a,
+ 0x06, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x4d,
+ 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x22, 0x43, 0x0a,
+ 0x0a, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x12, 0x35, 0x0a, 0x07, 0x6d,
+ 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f,
+ 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77,
+ 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61,
+ 0x74, 0x61, 0x22, 0x6d, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73,
+ 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x49, 0x44,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73,
+ 0x67, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67,
+ 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+ 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d,
+ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d,
+ 0x65, 0x22, 0x2d, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53,
+ 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x22,
+ 0x2e, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
+ 0x76, 0x0a, 0x13, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x54, 0x6f, 0x4d, 0x6f, 0x64, 0x69,
+ 0x66, 0x79, 0x42, 0x79, 0x4d, 0x51, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
+ 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73,
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12,
+ 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
+ 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x0c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x4d, 0x73,
+ 0x67, 0x73, 0x52, 0x65, 0x71, 0x22, 0x0d, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x4d, 0x73, 0x67, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x22, 0x60, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4d, 0x73,
+ 0x67, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
- 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b,
- 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x77,
- 0x0a, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47,
- 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x2e,
- 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4b,
- 0x65, 0x79, 0x52, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4b,
- 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4b,
- 0x65, 0x79, 0x73, 0x1a, 0x66, 0x0a, 0x12, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69,
- 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
- 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x12, 0x6d,
- 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73,
- 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x21,
- 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x12, 0x60, 0x0a, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e,
- 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73,
- 0x67, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x13,
- 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x22, 0x9d, 0x02, 0x0a, 0x1c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4d, 0x65,
- 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x12, 0x76, 0x0a, 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x46, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
- 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b,
- 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x1a, 0x63,
- 0x0a, 0x17, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65,
- 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e,
- 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
- 0x02, 0x38, 0x01, 0x22, 0xa9, 0x01, 0x0a, 0x23, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4d, 0x65,
- 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x0b, 0x73,
- 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03,
+ 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x16,
+ 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x0f, 0x0a, 0x0d, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65,
+ 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x0a, 0x11, 0x4d, 0x61, 0x72, 0x6b, 0x4d,
+ 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x03, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
+ 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44,
+ 0x22, 0x14, 0x0a, 0x12, 0x4d, 0x61, 0x72, 0x6b, 0x4d, 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65,
+ 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8f, 0x01, 0x0a, 0x19, 0x4d, 0x61, 0x72, 0x6b, 0x43,
+ 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61,
+ 0x64, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06,
+ 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73,
+ 0x65, 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53,
+ 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61,
+ 0x64, 0x53, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x04, 0x20, 0x03,
+ 0x28, 0x03, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x61, 0x72, 0x6b,
+ 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65,
+ 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7e, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64,
+ 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16,
+ 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61,
+ 0x64, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52,
+ 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64,
+ 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73, 0x53, 0x79,
+ 0x6e, 0x63, 0x53, 0x65, 0x6c, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x49, 0x73,
+ 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x53, 0x79,
+ 0x6e, 0x63, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49,
+ 0x73, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x22, 0xa3, 0x01, 0x0a, 0x18, 0x43,
+ 0x6c, 0x65, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
+ 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x45, 0x0a, 0x0d, 0x64, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
- 0x6d, 0x73, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73,
- 0x70, 0x52, 0x0b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f,
- 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52,
- 0x65, 0x73, 0x70, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22,
- 0x81, 0x03, 0x0a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70,
- 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x55,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x55,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a,
- 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12,
- 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49,
- 0x44, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x14, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73,
- 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66,
- 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x22, 0x5e, 0x0a, 0x24, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73,
- 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x06, 0x72,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4b,
- 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x52, 0x06, 0x72, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x22, 0x4a, 0x0a, 0x0d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67,
- 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73,
- 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e,
- 0x64, 0x4d, 0x73, 0x67, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x22,
- 0xdd, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x63, 0x0a,
- 0x12, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x45, 0x78, 0x74,
- 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12,
- 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
- 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49,
- 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d,
- 0x73, 0x67, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74,
- 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
- 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64,
- 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x61,
- 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x78, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x78, 0x1a, 0x65, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x65, 0x73, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
- 0x7a, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12,
- 0x38, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x72, 0x72,
- 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43,
- 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x22, 0x76, 0x0a, 0x13, 0x4d,
- 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x54, 0x6f, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x42, 0x79,
- 0x4d, 0x51, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74,
- 0x61, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x63,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x49, 0x44, 0x22, 0x0c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65,
- 0x71, 0x22, 0x0d, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x22, 0x60, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71,
- 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72,
- 0x49, 0x44, 0x22, 0x0f, 0x0a, 0x0d, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4d, 0x73, 0x67, 0x52,
- 0x65, 0x73, 0x70, 0x22, 0x67, 0x0a, 0x11, 0x4d, 0x61, 0x72, 0x6b, 0x4d, 0x73, 0x67, 0x73, 0x41,
- 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
- 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04,
- 0x73, 0x65, 0x71, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x14, 0x0a, 0x12,
- 0x4d, 0x61, 0x72, 0x6b, 0x4d, 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65,
- 0x73, 0x70, 0x22, 0x8f, 0x01, 0x0a, 0x19, 0x4d, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71,
- 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
- 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44,
- 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71,
- 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04,
- 0x73, 0x65, 0x71, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65,
- 0x73, 0x70, 0x22, 0x7e, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x52,
- 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72,
- 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53,
- 0x65, 0x71, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x52,
- 0x65, 0x73, 0x70, 0x22, 0x51, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e,
- 0x63, 0x4f, 0x70, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65,
- 0x6c, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x49, 0x73, 0x53, 0x79, 0x6e, 0x63,
- 0x53, 0x65, 0x6c, 0x66, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x74,
- 0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x53, 0x79, 0x6e,
- 0x63, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x22, 0xa3, 0x01, 0x0a, 0x18, 0x43, 0x6c, 0x65, 0x61, 0x72,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x73, 0x67,
- 0x52, 0x65, 0x71, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f,
- 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12, 0x16, 0x0a,
- 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x45, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
- 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x4f,
- 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x52, 0x0d, 0x64,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x22, 0x1b, 0x0a, 0x19,
- 0x43, 0x6c, 0x65, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x73, 0x0a, 0x12, 0x55, 0x73, 0x65,
- 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c, 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x12,
- 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x45, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
- 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73,
- 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x52,
- 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x22, 0x15,
- 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c, 0x6c, 0x4d, 0x73,
- 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0xaa, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12,
- 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x73,
- 0x65, 0x71, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20,
+ 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70,
+ 0x74, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74,
+ 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x73, 0x0a,
+ 0x12, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c, 0x6c, 0x4d, 0x73, 0x67,
+ 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x45, 0x0a, 0x0d, 0x64,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x18, 0x04, 0x20, 0x01,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63,
0x4f, 0x70, 0x74, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f,
- 0x70, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x22, 0x5e, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73,
- 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x28, 0x0a, 0x0f,
- 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
- 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
- 0x74, 0x61, 0x6d, 0x70, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73,
- 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x57, 0x0a,
- 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63,
- 0x61, 0x6c, 0x42, 0x79, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f,
- 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03,
- 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x53, 0x65, 0x71,
- 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71,
- 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x33, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43,
+ 0x70, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41,
+ 0x6c, 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0xaa, 0x01, 0x0a, 0x0d, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63,
+ 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+ 0x03, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
+ 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12,
+ 0x45, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
+ 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5e, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x71,
+ 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
+ 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x73,
+ 0x70, 0x22, 0x57, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68,
+ 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x12, 0x26,
+ 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42,
+ 0x79, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43,
0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65,
- 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x22, 0x3d, 0x0a,
- 0x23, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65,
- 0x71, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x3e, 0x0a, 0x04,
- 0x53, 0x65, 0x71, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a,
- 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x22, 0xcd, 0x01, 0x0a,
- 0x24, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65,
- 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x01, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e,
- 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x53, 0x65, 0x71, 0x73,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x1a, 0x4f, 0x0a, 0x09, 0x53,
- 0x65, 0x71, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x71,
- 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa9, 0x01, 0x0a,
- 0x10, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
- 0x71, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67,
- 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75,
- 0x70, 0x12, 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61,
- 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69,
- 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e,
- 0x66, 0x6f, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e,
- 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x91,
- 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72,
- 0x52, 0x65, 0x73, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74,
- 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x50,
- 0x0a, 0x09, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73,
- 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74,
- 0x12, 0x32, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
- 0x73, 0x67, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75,
- 0x73, 0x65, 0x72, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e,
+ 0x71, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x33, 0x0a, 0x19,
+ 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+ 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78,
+ 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65,
+ 0x71, 0x22, 0x3d, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d,
+ 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
+ 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44,
+ 0x22, 0x3e, 0x0a, 0x04, 0x53, 0x65, 0x71, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x53,
+ 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x71,
+ 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71,
+ 0x22, 0xcd, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d,
+ 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x04, 0x73, 0x65, 0x71,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x52, 0x65,
+ 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x2e,
+ 0x53, 0x65, 0x71, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x1a,
+ 0x4f, 0x0a, 0x09, 0x53, 0x65, 0x71, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c,
+ 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67,
+ 0x2e, 0x53, 0x65, 0x71, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x22, 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73,
+ 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65,
+ 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x0a,
+ 0x03, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x73, 0x65, 0x12,
+ 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x0a,
+ 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x75, 0x73,
+ 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
+ 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x55, 0x73,
+ 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x22, 0x91, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65,
+ 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18,
+ 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69,
+ 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x64, 0x61, 0x74, 0x65, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65,
+ 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x65,
+ 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x94, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63,
+ 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61,
+ 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x03, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x03, 0x61, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x58, 0x0a,
+ 0x0b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x33, 0x0a, 0x05,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73,
+ 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x98, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41,
+ 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x08, 0x6d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x09, 0x64, 0x61,
+ 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67,
+ 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x65, 0x73, 0x70, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x52, 0x09, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a,
+ 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67,
+ 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e,
0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
- 0x38, 0x01, 0x22, 0x94, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65,
- 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72,
- 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10,
- 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64,
- 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61,
- 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70,
- 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x58, 0x0a, 0x0b, 0x41, 0x63, 0x74,
- 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x33, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75,
- 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x47, 0x72, 0x6f,
- 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a,
- 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f,
- 0x75, 0x6e, 0x74, 0x22, 0x98, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76,
- 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73,
- 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x73,
- 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43,
- 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75,
- 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f,
- 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74,
- 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x2e,
- 0x44, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09,
- 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x67, 0x72, 0x6f,
- 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x41, 0x63, 0x74,
- 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73,
- 0x1a, 0x3c, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe3,
- 0x01, 0x0a, 0x10, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x31, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x31, 0x12,
- 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x6d,
- 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73,
- 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
- 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54,
- 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a,
- 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
- 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x44, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65,
- 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x73, 0x67,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4d, 0x73, 0x67,
- 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x22, 0xaf, 0x04, 0x0a, 0x07, 0x43,
- 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65,
- 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63,
- 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65,
- 0x6e, 0x64, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64,
- 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72,
- 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f,
- 0x75, 0x70, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x76, 0x4e, 0x69, 0x63, 0x6b,
- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x76,
- 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64,
- 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
- 0x72, 0x6d, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x69,
- 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65,
- 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d,
- 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x09, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x61, 0x63, 0x65, 0x55,
- 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18,
- 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65,
- 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18,
- 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79,
- 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x0c, 0x20,
- 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x20, 0x0a, 0x0b,
- 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28,
- 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18,
- 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
- 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02,
- 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x78, 0x22, 0xe7, 0x01, 0x0a,
- 0x0e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12,
- 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x06, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x76, 0x49,
- 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x63, 0x76, 0x49, 0x44, 0x12,
- 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
+ 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49,
+ 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x12,
+ 0x16, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79,
+ 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70,
0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a,
- 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
- 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54,
- 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x6a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61,
- 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x08, 0x63, 0x68, 0x61,
- 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x43,
- 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x08, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73,
- 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x4e, 0x75, 0x6d, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x4e,
- 0x75, 0x6d, 0x32, 0x8a, 0x14, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x50, 0x0a, 0x09, 0x47, 0x65,
- 0x74, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x47, 0x65, 0x74,
- 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x47,
- 0x65, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x70, 0x0a, 0x15,
- 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
- 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65,
- 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68,
- 0x0a, 0x11, 0x50, 0x75, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x53,
- 0x65, 0x71, 0x73, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x4d, 0x65, 0x73,
- 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x53, 0x65, 0x71, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e,
- 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b,
- 0x77, 0x73, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79,
- 0x53, 0x65, 0x71, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72,
- 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x61,
- 0x72, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a,
+ 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6c, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x08, 0x63,
+ 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e,
0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67,
- 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67,
- 0x73, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73,
+ 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x08, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f,
+ 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x4e, 0x75,
+ 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67,
+ 0x73, 0x4e, 0x75, 0x6d, 0x22, 0x8c, 0x01, 0x0a, 0x0c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x4d,
+ 0x73, 0x67, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x12, 0x16, 0x0a,
+ 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
+ 0x65, 0x6e, 0x64, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12,
+ 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65,
+ 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54,
+ 0x79, 0x70, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x4d, 0x73, 0x67,
+ 0x52, 0x65, 0x73, 0x70, 0x22, 0xcf, 0x05, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67,
+ 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67,
+ 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49,
+ 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d,
+ 0x73, 0x67, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06,
+ 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65,
+ 0x63, 0x76, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12, 0x22,
+ 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x76, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x76, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61,
+ 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74,
+ 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x73, 0x65,
+ 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x12, 0x26,
+ 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x69,
+ 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72,
+ 0x46, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73,
+ 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07,
+ 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d,
+ 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01,
+ 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65,
+ 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65,
+ 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x54, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x78, 0x18, 0x12, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x02, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x46,
+ 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x46, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x2a, 0x0a, 0x10, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14,
+ 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x15, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0xe7, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x68,
+ 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6e,
+ 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x49,
+ 0x44, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x76, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x52, 0x65, 0x63, 0x76, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73,
+ 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73,
+ 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73,
+ 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20,
+ 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65,
+ 0x22, 0x6a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67,
+ 0x52, 0x08, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68,
+ 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x0b, 0x63, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x4e, 0x75, 0x6d, 0x32, 0xa4, 0x10, 0x0a,
+ 0x03, 0x6d, 0x73, 0x67, 0x12, 0x50, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x65,
+ 0x71, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71,
0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f,
- 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x07, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73,
- 0x67, 0x12, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a,
- 0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
- 0x73, 0x67, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x70,
- 0x0a, 0x15, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x12, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72,
- 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x73, 0x67,
- 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70,
- 0x12, 0x5e, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c, 0x6c,
- 0x4d, 0x73, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72,
- 0x41, 0x6c, 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x55, 0x73, 0x65,
- 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c, 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70,
- 0x12, 0x4f, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x73, 0x12, 0x1f,
- 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73,
- 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a,
- 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
- 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x12, 0x73, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68,
- 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x53, 0x65, 0x71, 0x12, 0x2b, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c,
- 0x42, 0x79, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
- 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x53,
- 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x26, 0x2e, 0x4f, 0x70,
+ 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x53,
+ 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x70, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12,
+ 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
+ 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47,
+ 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61,
+ 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x11, 0x50, 0x75, 0x6c, 0x6c,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x53, 0x65, 0x71, 0x73, 0x12, 0x28, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b,
+ 0x77, 0x73, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79,
+ 0x53, 0x65, 0x71, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x50, 0x75, 0x6c,
+ 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x53, 0x65, 0x71, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x12, 0x58, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73,
+ 0x61, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63,
+ 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09,
+ 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65,
+ 0x74, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74,
+ 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47,
+ 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46,
+ 0x0a, 0x07, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x6e,
+ 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d,
+ 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x70, 0x0a, 0x15, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x43,
+ 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x12,
+ 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
+ 0x73, 0x67, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x43,
+ 0x6c, 0x65, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72,
+ 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x55,
+ 0x73, 0x65, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c, 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65,
+ 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x41, 0x6c,
+ 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4d, 0x73, 0x67, 0x73, 0x12, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x4d, 0x73, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x16, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79,
+ 0x53, 0x65, 0x71, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67,
+ 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71,
+ 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+ 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79,
+ 0x73, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64,
+ 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69,
+ 0x63, 0x61, 0x6c, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67,
+ 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70,
0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44,
0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c,
- 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x73, 0x67,
- 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10,
- 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
- 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65,
- 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12,
- 0x61, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61,
- 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73,
- 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65,
- 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65,
- 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4d, 0x73, 0x67, 0x12,
- 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
- 0x73, 0x67, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a,
- 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
- 0x73, 0x67, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70,
- 0x12, 0x5b, 0x0a, 0x0e, 0x4d, 0x61, 0x72, 0x6b, 0x4d, 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65,
- 0x61, 0x64, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x4d, 0x73, 0x67, 0x73, 0x41, 0x73,
- 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x4d,
- 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a,
- 0x16, 0x4d, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x43,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61,
- 0x64, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65,
- 0x73, 0x70, 0x12, 0x7c, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x12,
- 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
- 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x1a,
- 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
- 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70,
- 0x12, 0x85, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
- 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x12, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
- 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x65, 0x71, 0x1a, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x88, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74,
- 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x32, 0x2e, 0x4f, 0x70, 0x65,
- 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65,
- 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x33,
- 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73,
- 0x67, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x12, 0x8b, 0x01, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4d, 0x65,
- 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x35, 0x2e, 0x4f, 0x70, 0x65,
- 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x6f,
- 0x64, 0x69, 0x66, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x12, 0x90, 0x01, 0x0a, 0x1f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d,
- 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x36, 0x2e, 0x4f,
+ 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d,
+ 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
+ 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x53,
+ 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a,
+ 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
+ 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65,
+ 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x4f, 0x70,
+ 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47,
+ 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+ 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x52, 0x65,
+ 0x76, 0x6f, 0x6b, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b,
+ 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b,
+ 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x0e, 0x4d, 0x61, 0x72, 0x6b,
+ 0x4d, 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x4d, 0x61,
+ 0x72, 0x6b, 0x4d, 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a,
+ 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
+ 0x73, 0x67, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x4d, 0x73, 0x67, 0x73, 0x41, 0x73, 0x52, 0x65, 0x61,
+ 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x16, 0x4d, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12,
+ 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d,
+ 0x73, 0x67, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f,
0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x12, 0x91, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76,
- 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64,
- 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x35, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74,
+ 0x4d, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x41, 0x73, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7c, 0x0a, 0x19, 0x53, 0x65,
+ 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73,
+ 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x71, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61,
+ 0x64, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61,
+ 0x64, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x91, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74,
0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73,
- 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x71,
- 0x1a, 0x36, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
- 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d, 0x61,
- 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41,
- 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74,
- 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e,
+ 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x35, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67,
+ 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65,
+ 0x71, 0x52, 0x65, 0x71, 0x1a, 0x36, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x52, 0x65, 0x61, 0x64, 0x41,
+ 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x0d,
+ 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x22, 0x2e,
0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67,
0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
- 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47,
- 0x72, 0x6f, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76,
- 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74,
- 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x42,
- 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x2d, 0x49, 0x4d, 0x2d,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2f, 0x6d, 0x73, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_msg_msg_proto_rawDescOnce sync.Once
- file_msg_msg_proto_rawDescData = file_msg_msg_proto_rawDesc
-)
-
-func file_msg_msg_proto_rawDescGZIP() []byte {
- file_msg_msg_proto_rawDescOnce.Do(func() {
- file_msg_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_msg_msg_proto_rawDescData)
- })
- return file_msg_msg_proto_rawDescData
-}
-
-var file_msg_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 70)
-var file_msg_msg_proto_goTypes = []interface{}{
- (*MsgDataToMQ)(nil), // 0: OpenIMServer.msg.MsgDataToMQ
- (*MsgDataToDB)(nil), // 1: OpenIMServer.msg.MsgDataToDB
- (*PushMsgDataToMQ)(nil), // 2: OpenIMServer.msg.PushMsgDataToMQ
- (*MsgDataToMongoByMQ)(nil), // 3: OpenIMServer.msg.MsgDataToMongoByMQ
- (*GetMaxAndMinSeqReq)(nil), // 4: OpenIMServer.msg.GetMaxAndMinSeqReq
- (*GetMaxAndMinSeqResp)(nil), // 5: OpenIMServer.msg.GetMaxAndMinSeqResp
- (*SendMsgReq)(nil), // 6: OpenIMServer.msg.SendMsgReq
- (*SendMsgResp)(nil), // 7: OpenIMServer.msg.SendMsgResp
- (*SetSendMsgStatusReq)(nil), // 8: OpenIMServer.msg.SetSendMsgStatusReq
- (*SetSendMsgStatusResp)(nil), // 9: OpenIMServer.msg.SetSendMsgStatusResp
- (*GetSendMsgStatusReq)(nil), // 10: OpenIMServer.msg.GetSendMsgStatusReq
- (*GetSendMsgStatusResp)(nil), // 11: OpenIMServer.msg.GetSendMsgStatusResp
- (*ModifyMessageReactionExtensionsReq)(nil), // 12: OpenIMServer.msg.ModifyMessageReactionExtensionsReq
- (*SetMessageReactionExtensionsReq)(nil), // 13: OpenIMServer.msg.SetMessageReactionExtensionsReq
- (*SetMessageReactionExtensionsResp)(nil), // 14: OpenIMServer.msg.SetMessageReactionExtensionsResp
- (*GetMessagesReactionExtensionsReq)(nil), // 15: OpenIMServer.msg.GetMessagesReactionExtensionsReq
- (*GetMessagesReactionExtensionsResp)(nil), // 16: OpenIMServer.msg.GetMessagesReactionExtensionsResp
- (*SingleMessageExtensionResult)(nil), // 17: OpenIMServer.msg.SingleMessageExtensionResult
- (*ModifyMessageReactionExtensionsResp)(nil), // 18: OpenIMServer.msg.ModifyMessageReactionExtensionsResp
- (*DeleteMessagesReactionExtensionsReq)(nil), // 19: OpenIMServer.msg.DeleteMessagesReactionExtensionsReq
- (*DeleteMessagesReactionExtensionsResp)(nil), // 20: OpenIMServer.msg.DeleteMessagesReactionExtensionsResp
- (*ExtendMsgResp)(nil), // 21: OpenIMServer.msg.ExtendMsgResp
- (*ExtendMsg)(nil), // 22: OpenIMServer.msg.ExtendMsg
- (*KeyValueResp)(nil), // 23: OpenIMServer.msg.KeyValueResp
- (*MsgDataToModifyByMQ)(nil), // 24: OpenIMServer.msg.MsgDataToModifyByMQ
- (*DelMsgsReq)(nil), // 25: OpenIMServer.msg.DelMsgsReq
- (*DelMsgsResp)(nil), // 26: OpenIMServer.msg.DelMsgsResp
- (*RevokeMsgReq)(nil), // 27: OpenIMServer.msg.RevokeMsgReq
- (*RevokeMsgResp)(nil), // 28: OpenIMServer.msg.RevokeMsgResp
- (*MarkMsgsAsReadReq)(nil), // 29: OpenIMServer.msg.MarkMsgsAsReadReq
- (*MarkMsgsAsReadResp)(nil), // 30: OpenIMServer.msg.MarkMsgsAsReadResp
- (*MarkConversationAsReadReq)(nil), // 31: OpenIMServer.msg.MarkConversationAsReadReq
- (*MarkConversationAsReadResp)(nil), // 32: OpenIMServer.msg.MarkConversationAsReadResp
- (*SetConversationHasReadSeqReq)(nil), // 33: OpenIMServer.msg.SetConversationHasReadSeqReq
- (*SetConversationHasReadSeqResp)(nil), // 34: OpenIMServer.msg.SetConversationHasReadSeqResp
- (*DeleteSyncOpt)(nil), // 35: OpenIMServer.msg.DeleteSyncOpt
- (*ClearConversationsMsgReq)(nil), // 36: OpenIMServer.msg.ClearConversationsMsgReq
- (*ClearConversationsMsgResp)(nil), // 37: OpenIMServer.msg.ClearConversationsMsgResp
- (*UserClearAllMsgReq)(nil), // 38: OpenIMServer.msg.UserClearAllMsgReq
- (*UserClearAllMsgResp)(nil), // 39: OpenIMServer.msg.UserClearAllMsgResp
- (*DeleteMsgsReq)(nil), // 40: OpenIMServer.msg.DeleteMsgsReq
- (*DeleteMsgsResp)(nil), // 41: OpenIMServer.msg.DeleteMsgsResp
- (*DeleteMsgPhysicalReq)(nil), // 42: OpenIMServer.msg.DeleteMsgPhysicalReq
- (*DeleteMsgPhysicalResp)(nil), // 43: OpenIMServer.msg.DeleteMsgPhysicalResp
- (*DeleteMsgPhysicalBySeqReq)(nil), // 44: OpenIMServer.msg.DeleteMsgPhysicalBySeqReq
- (*DeleteMsgPhysicalBySeqResp)(nil), // 45: OpenIMServer.msg.DeleteMsgPhysicalBySeqResp
- (*GetConversationMaxSeqReq)(nil), // 46: OpenIMServer.msg.GetConversationMaxSeqReq
- (*GetConversationMaxSeqResp)(nil), // 47: OpenIMServer.msg.GetConversationMaxSeqResp
- (*GetConversationsHasReadAndMaxSeqReq)(nil), // 48: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqReq
- (*Seqs)(nil), // 49: OpenIMServer.msg.Seqs
- (*GetConversationsHasReadAndMaxSeqResp)(nil), // 50: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp
- (*GetActiveUserReq)(nil), // 51: OpenIMServer.msg.GetActiveUserReq
- (*ActiveUser)(nil), // 52: OpenIMServer.msg.ActiveUser
- (*GetActiveUserResp)(nil), // 53: OpenIMServer.msg.GetActiveUserResp
- (*GetActiveGroupReq)(nil), // 54: OpenIMServer.msg.GetActiveGroupReq
- (*ActiveGroup)(nil), // 55: OpenIMServer.msg.ActiveGroup
- (*GetActiveGroupResp)(nil), // 56: OpenIMServer.msg.GetActiveGroupResp
- (*SearchMessageReq)(nil), // 57: OpenIMServer.msg.SearchMessageReq
- (*SearchMessageResp)(nil), // 58: OpenIMServer.msg.SearchMessageResp
- (*ChatLog)(nil), // 59: OpenIMServer.msg.ChatLog
- (*GetChatLogsReq)(nil), // 60: OpenIMServer.msg.GetChatLogsReq
- (*GetChatLogsResp)(nil), // 61: OpenIMServer.msg.GetChatLogsResp
- nil, // 62: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ReactionExtensionsEntry
- nil, // 63: OpenIMServer.msg.SetMessageReactionExtensionsReq.ReactionExtensionsEntry
- (*GetMessagesReactionExtensionsReq_MessageReactionKey)(nil), // 64: OpenIMServer.msg.GetMessagesReactionExtensionsReq.MessageReactionKey
- nil, // 65: OpenIMServer.msg.SingleMessageExtensionResult.ReactionExtensionsEntry
- nil, // 66: OpenIMServer.msg.ExtendMsg.ReactionExtensionsEntry
- nil, // 67: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry
- nil, // 68: OpenIMServer.msg.GetActiveUserResp.DateCountEntry
- nil, // 69: OpenIMServer.msg.GetActiveGroupResp.DateCountEntry
- (*sdkws.MsgData)(nil), // 70: OpenIMServer.sdkws.MsgData
- (*wrapperspb.StringValue)(nil), // 71: OpenIMServer.protobuf.StringValue
- (*sdkws.KeyValue)(nil), // 72: OpenIMServer.sdkws.KeyValue
- (*sdkws.RequestPagination)(nil), // 73: OpenIMServer.sdkws.RequestPagination
- (*sdkws.UserInfo)(nil), // 74: OpenIMServer.sdkws.UserInfo
- (*sdkws.GroupInfo)(nil), // 75: OpenIMServer.sdkws.GroupInfo
- (*sdkws.GetMaxSeqReq)(nil), // 76: OpenIMServer.sdkws.GetMaxSeqReq
- (*sdkws.PullMessageBySeqsReq)(nil), // 77: OpenIMServer.sdkws.PullMessageBySeqsReq
- (*sdkws.GetMaxSeqResp)(nil), // 78: OpenIMServer.sdkws.GetMaxSeqResp
- (*sdkws.PullMessageBySeqsResp)(nil), // 79: OpenIMServer.sdkws.PullMessageBySeqsResp
-}
-var file_msg_msg_proto_depIdxs = []int32{
- 70, // 0: OpenIMServer.msg.MsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData
- 70, // 1: OpenIMServer.msg.MsgDataToDB.msgData:type_name -> OpenIMServer.sdkws.MsgData
- 70, // 2: OpenIMServer.msg.PushMsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData
- 70, // 3: OpenIMServer.msg.MsgDataToMongoByMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData
- 70, // 4: OpenIMServer.msg.SendMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData
- 62, // 5: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.reactionExtensions:type_name -> OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ReactionExtensionsEntry
- 71, // 6: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ex:type_name -> OpenIMServer.protobuf.StringValue
- 71, // 7: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.attachedInfo:type_name -> OpenIMServer.protobuf.StringValue
- 63, // 8: OpenIMServer.msg.SetMessageReactionExtensionsReq.reactionExtensions:type_name -> OpenIMServer.msg.SetMessageReactionExtensionsReq.ReactionExtensionsEntry
- 71, // 9: OpenIMServer.msg.SetMessageReactionExtensionsReq.ex:type_name -> OpenIMServer.protobuf.StringValue
- 71, // 10: OpenIMServer.msg.SetMessageReactionExtensionsReq.attachedInfo:type_name -> OpenIMServer.protobuf.StringValue
- 23, // 11: OpenIMServer.msg.SetMessageReactionExtensionsResp.result:type_name -> OpenIMServer.msg.KeyValueResp
- 64, // 12: OpenIMServer.msg.GetMessagesReactionExtensionsReq.messageReactionKeys:type_name -> OpenIMServer.msg.GetMessagesReactionExtensionsReq.MessageReactionKey
- 17, // 13: OpenIMServer.msg.GetMessagesReactionExtensionsResp.singleMessageResult:type_name -> OpenIMServer.msg.SingleMessageExtensionResult
- 65, // 14: OpenIMServer.msg.SingleMessageExtensionResult.reactionExtensions:type_name -> OpenIMServer.msg.SingleMessageExtensionResult.ReactionExtensionsEntry
- 21, // 15: OpenIMServer.msg.ModifyMessageReactionExtensionsResp.successList:type_name -> OpenIMServer.msg.ExtendMsgResp
- 21, // 16: OpenIMServer.msg.ModifyMessageReactionExtensionsResp.failedList:type_name -> OpenIMServer.msg.ExtendMsgResp
- 72, // 17: OpenIMServer.msg.DeleteMessagesReactionExtensionsReq.reactionExtensions:type_name -> OpenIMServer.sdkws.KeyValue
- 23, // 18: OpenIMServer.msg.DeleteMessagesReactionExtensionsResp.result:type_name -> OpenIMServer.msg.KeyValueResp
- 22, // 19: OpenIMServer.msg.ExtendMsgResp.extendMsg:type_name -> OpenIMServer.msg.ExtendMsg
- 66, // 20: OpenIMServer.msg.ExtendMsg.reactionExtensions:type_name -> OpenIMServer.msg.ExtendMsg.ReactionExtensionsEntry
- 72, // 21: OpenIMServer.msg.KeyValueResp.keyValue:type_name -> OpenIMServer.sdkws.KeyValue
- 70, // 22: OpenIMServer.msg.MsgDataToModifyByMQ.messages:type_name -> OpenIMServer.sdkws.MsgData
- 35, // 23: OpenIMServer.msg.ClearConversationsMsgReq.deleteSyncOpt:type_name -> OpenIMServer.msg.DeleteSyncOpt
- 35, // 24: OpenIMServer.msg.UserClearAllMsgReq.deleteSyncOpt:type_name -> OpenIMServer.msg.DeleteSyncOpt
- 35, // 25: OpenIMServer.msg.DeleteMsgsReq.deleteSyncOpt:type_name -> OpenIMServer.msg.DeleteSyncOpt
- 67, // 26: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.seqs:type_name -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry
- 73, // 27: OpenIMServer.msg.GetActiveUserReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
- 74, // 28: OpenIMServer.msg.ActiveUser.user:type_name -> OpenIMServer.sdkws.UserInfo
- 68, // 29: OpenIMServer.msg.GetActiveUserResp.dateCount:type_name -> OpenIMServer.msg.GetActiveUserResp.DateCountEntry
- 52, // 30: OpenIMServer.msg.GetActiveUserResp.users:type_name -> OpenIMServer.msg.ActiveUser
- 73, // 31: OpenIMServer.msg.GetActiveGroupReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
- 75, // 32: OpenIMServer.msg.ActiveGroup.group:type_name -> OpenIMServer.sdkws.GroupInfo
- 69, // 33: OpenIMServer.msg.GetActiveGroupResp.dateCount:type_name -> OpenIMServer.msg.GetActiveGroupResp.DateCountEntry
- 55, // 34: OpenIMServer.msg.GetActiveGroupResp.groups:type_name -> OpenIMServer.msg.ActiveGroup
- 73, // 35: OpenIMServer.msg.SearchMessageReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
- 70, // 36: OpenIMServer.msg.SearchMessageResp.msgs:type_name -> OpenIMServer.sdkws.MsgData
- 73, // 37: OpenIMServer.msg.GetChatLogsReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
- 59, // 38: OpenIMServer.msg.GetChatLogsResp.chatLogs:type_name -> OpenIMServer.msg.ChatLog
- 72, // 39: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue
- 72, // 40: OpenIMServer.msg.SetMessageReactionExtensionsReq.ReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue
- 72, // 41: OpenIMServer.msg.SingleMessageExtensionResult.ReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue
- 23, // 42: OpenIMServer.msg.ExtendMsg.ReactionExtensionsEntry.value:type_name -> OpenIMServer.msg.KeyValueResp
- 49, // 43: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry.value:type_name -> OpenIMServer.msg.Seqs
- 76, // 44: OpenIMServer.msg.msg.GetMaxSeq:input_type -> OpenIMServer.sdkws.GetMaxSeqReq
- 46, // 45: OpenIMServer.msg.msg.GetConversationMaxSeq:input_type -> OpenIMServer.msg.GetConversationMaxSeqReq
- 77, // 46: OpenIMServer.msg.msg.PullMessageBySeqs:input_type -> OpenIMServer.sdkws.PullMessageBySeqsReq
- 57, // 47: OpenIMServer.msg.msg.SearchMessage:input_type -> OpenIMServer.msg.SearchMessageReq
- 60, // 48: OpenIMServer.msg.msg.GetChatLogs:input_type -> OpenIMServer.msg.GetChatLogsReq
- 6, // 49: OpenIMServer.msg.msg.SendMsg:input_type -> OpenIMServer.msg.SendMsgReq
- 36, // 50: OpenIMServer.msg.msg.ClearConversationsMsg:input_type -> OpenIMServer.msg.ClearConversationsMsgReq
- 38, // 51: OpenIMServer.msg.msg.UserClearAllMsg:input_type -> OpenIMServer.msg.UserClearAllMsgReq
- 40, // 52: OpenIMServer.msg.msg.DeleteMsgs:input_type -> OpenIMServer.msg.DeleteMsgsReq
- 44, // 53: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:input_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqReq
- 42, // 54: OpenIMServer.msg.msg.DeleteMsgPhysical:input_type -> OpenIMServer.msg.DeleteMsgPhysicalReq
- 8, // 55: OpenIMServer.msg.msg.SetSendMsgStatus:input_type -> OpenIMServer.msg.SetSendMsgStatusReq
- 10, // 56: OpenIMServer.msg.msg.GetSendMsgStatus:input_type -> OpenIMServer.msg.GetSendMsgStatusReq
- 27, // 57: OpenIMServer.msg.msg.RevokeMsg:input_type -> OpenIMServer.msg.RevokeMsgReq
- 29, // 58: OpenIMServer.msg.msg.MarkMsgsAsRead:input_type -> OpenIMServer.msg.MarkMsgsAsReadReq
- 31, // 59: OpenIMServer.msg.msg.MarkConversationAsRead:input_type -> OpenIMServer.msg.MarkConversationAsReadReq
- 33, // 60: OpenIMServer.msg.msg.SetConversationHasReadSeq:input_type -> OpenIMServer.msg.SetConversationHasReadSeqReq
- 13, // 61: OpenIMServer.msg.msg.SetMessageReactionExtensions:input_type -> OpenIMServer.msg.SetMessageReactionExtensionsReq
- 15, // 62: OpenIMServer.msg.msg.GetMessagesReactionExtensions:input_type -> OpenIMServer.msg.GetMessagesReactionExtensionsReq
- 12, // 63: OpenIMServer.msg.msg.AddMessageReactionExtensions:input_type -> OpenIMServer.msg.ModifyMessageReactionExtensionsReq
- 19, // 64: OpenIMServer.msg.msg.DeleteMessageReactionExtensions:input_type -> OpenIMServer.msg.DeleteMessagesReactionExtensionsReq
- 48, // 65: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:input_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqReq
- 51, // 66: OpenIMServer.msg.msg.GetActiveUser:input_type -> OpenIMServer.msg.GetActiveUserReq
- 54, // 67: OpenIMServer.msg.msg.GetActiveGroup:input_type -> OpenIMServer.msg.GetActiveGroupReq
- 78, // 68: OpenIMServer.msg.msg.GetMaxSeq:output_type -> OpenIMServer.sdkws.GetMaxSeqResp
- 47, // 69: OpenIMServer.msg.msg.GetConversationMaxSeq:output_type -> OpenIMServer.msg.GetConversationMaxSeqResp
- 79, // 70: OpenIMServer.msg.msg.PullMessageBySeqs:output_type -> OpenIMServer.sdkws.PullMessageBySeqsResp
- 58, // 71: OpenIMServer.msg.msg.SearchMessage:output_type -> OpenIMServer.msg.SearchMessageResp
- 61, // 72: OpenIMServer.msg.msg.GetChatLogs:output_type -> OpenIMServer.msg.GetChatLogsResp
- 7, // 73: OpenIMServer.msg.msg.SendMsg:output_type -> OpenIMServer.msg.SendMsgResp
- 37, // 74: OpenIMServer.msg.msg.ClearConversationsMsg:output_type -> OpenIMServer.msg.ClearConversationsMsgResp
- 39, // 75: OpenIMServer.msg.msg.UserClearAllMsg:output_type -> OpenIMServer.msg.UserClearAllMsgResp
- 41, // 76: OpenIMServer.msg.msg.DeleteMsgs:output_type -> OpenIMServer.msg.DeleteMsgsResp
- 45, // 77: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:output_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqResp
- 43, // 78: OpenIMServer.msg.msg.DeleteMsgPhysical:output_type -> OpenIMServer.msg.DeleteMsgPhysicalResp
- 9, // 79: OpenIMServer.msg.msg.SetSendMsgStatus:output_type -> OpenIMServer.msg.SetSendMsgStatusResp
- 11, // 80: OpenIMServer.msg.msg.GetSendMsgStatus:output_type -> OpenIMServer.msg.GetSendMsgStatusResp
- 28, // 81: OpenIMServer.msg.msg.RevokeMsg:output_type -> OpenIMServer.msg.RevokeMsgResp
- 30, // 82: OpenIMServer.msg.msg.MarkMsgsAsRead:output_type -> OpenIMServer.msg.MarkMsgsAsReadResp
- 32, // 83: OpenIMServer.msg.msg.MarkConversationAsRead:output_type -> OpenIMServer.msg.MarkConversationAsReadResp
- 34, // 84: OpenIMServer.msg.msg.SetConversationHasReadSeq:output_type -> OpenIMServer.msg.SetConversationHasReadSeqResp
- 14, // 85: OpenIMServer.msg.msg.SetMessageReactionExtensions:output_type -> OpenIMServer.msg.SetMessageReactionExtensionsResp
- 16, // 86: OpenIMServer.msg.msg.GetMessagesReactionExtensions:output_type -> OpenIMServer.msg.GetMessagesReactionExtensionsResp
- 18, // 87: OpenIMServer.msg.msg.AddMessageReactionExtensions:output_type -> OpenIMServer.msg.ModifyMessageReactionExtensionsResp
- 20, // 88: OpenIMServer.msg.msg.DeleteMessageReactionExtensions:output_type -> OpenIMServer.msg.DeleteMessagesReactionExtensionsResp
- 50, // 89: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:output_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp
- 53, // 90: OpenIMServer.msg.msg.GetActiveUser:output_type -> OpenIMServer.msg.GetActiveUserResp
- 56, // 91: OpenIMServer.msg.msg.GetActiveGroup:output_type -> OpenIMServer.msg.GetActiveGroupResp
- 68, // [68:92] is the sub-list for method output_type
- 44, // [44:68] is the sub-list for method input_type
- 44, // [44:44] is the sub-list for extension type_name
- 44, // [44:44] is the sub-list for extension extendee
- 0, // [0:44] is the sub-list for field type_name
-}
-
-func init() { file_msg_msg_proto_init() }
-func file_msg_msg_proto_init() {
- if File_msg_msg_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_msg_msg_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MsgDataToMQ); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MsgDataToDB); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*PushMsgDataToMQ); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MsgDataToMongoByMQ); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetMaxAndMinSeqReq); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetMaxAndMinSeqResp); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SendMsgReq); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SendMsgResp); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SetSendMsgStatusReq); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SetSendMsgStatusResp); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetSendMsgStatusReq); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetSendMsgStatusResp); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_msg_msg_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ModifyMessageReactionExtensionsReq); i {
+ 0x71, 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73,
+ 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74,
+ 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
+ 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x41,
+ 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67,
+ 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x65, 0x73, 0x70, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65, 0x6e,
+ 0x2d, 0x49, 0x4d, 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6d, 0x73, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_msg_msg_proto_rawDescOnce sync.Once
+ file_msg_msg_proto_rawDescData = file_msg_msg_proto_rawDesc
+)
+
+func file_msg_msg_proto_rawDescGZIP() []byte {
+ file_msg_msg_proto_rawDescOnce.Do(func() {
+ file_msg_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_msg_msg_proto_rawDescData)
+ })
+ return file_msg_msg_proto_rawDescData
+}
+
+var file_msg_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 55)
+var file_msg_msg_proto_goTypes = []interface{}{
+ (*MsgDataToMQ)(nil), // 0: OpenIMServer.msg.MsgDataToMQ
+ (*MsgDataToDB)(nil), // 1: OpenIMServer.msg.MsgDataToDB
+ (*PushMsgDataToMQ)(nil), // 2: OpenIMServer.msg.PushMsgDataToMQ
+ (*MsgDataToMongoByMQ)(nil), // 3: OpenIMServer.msg.MsgDataToMongoByMQ
+ (*GetMaxAndMinSeqReq)(nil), // 4: OpenIMServer.msg.GetMaxAndMinSeqReq
+ (*GetMaxAndMinSeqResp)(nil), // 5: OpenIMServer.msg.GetMaxAndMinSeqResp
+ (*SendMsgReq)(nil), // 6: OpenIMServer.msg.SendMsgReq
+ (*SendMsgResp)(nil), // 7: OpenIMServer.msg.SendMsgResp
+ (*SetSendMsgStatusReq)(nil), // 8: OpenIMServer.msg.SetSendMsgStatusReq
+ (*SetSendMsgStatusResp)(nil), // 9: OpenIMServer.msg.SetSendMsgStatusResp
+ (*GetSendMsgStatusReq)(nil), // 10: OpenIMServer.msg.GetSendMsgStatusReq
+ (*GetSendMsgStatusResp)(nil), // 11: OpenIMServer.msg.GetSendMsgStatusResp
+ (*MsgDataToModifyByMQ)(nil), // 12: OpenIMServer.msg.MsgDataToModifyByMQ
+ (*DelMsgsReq)(nil), // 13: OpenIMServer.msg.DelMsgsReq
+ (*DelMsgsResp)(nil), // 14: OpenIMServer.msg.DelMsgsResp
+ (*RevokeMsgReq)(nil), // 15: OpenIMServer.msg.RevokeMsgReq
+ (*RevokeMsgResp)(nil), // 16: OpenIMServer.msg.RevokeMsgResp
+ (*MarkMsgsAsReadReq)(nil), // 17: OpenIMServer.msg.MarkMsgsAsReadReq
+ (*MarkMsgsAsReadResp)(nil), // 18: OpenIMServer.msg.MarkMsgsAsReadResp
+ (*MarkConversationAsReadReq)(nil), // 19: OpenIMServer.msg.MarkConversationAsReadReq
+ (*MarkConversationAsReadResp)(nil), // 20: OpenIMServer.msg.MarkConversationAsReadResp
+ (*SetConversationHasReadSeqReq)(nil), // 21: OpenIMServer.msg.SetConversationHasReadSeqReq
+ (*SetConversationHasReadSeqResp)(nil), // 22: OpenIMServer.msg.SetConversationHasReadSeqResp
+ (*DeleteSyncOpt)(nil), // 23: OpenIMServer.msg.DeleteSyncOpt
+ (*ClearConversationsMsgReq)(nil), // 24: OpenIMServer.msg.ClearConversationsMsgReq
+ (*ClearConversationsMsgResp)(nil), // 25: OpenIMServer.msg.ClearConversationsMsgResp
+ (*UserClearAllMsgReq)(nil), // 26: OpenIMServer.msg.UserClearAllMsgReq
+ (*UserClearAllMsgResp)(nil), // 27: OpenIMServer.msg.UserClearAllMsgResp
+ (*DeleteMsgsReq)(nil), // 28: OpenIMServer.msg.DeleteMsgsReq
+ (*DeleteMsgsResp)(nil), // 29: OpenIMServer.msg.DeleteMsgsResp
+ (*DeleteMsgPhysicalReq)(nil), // 30: OpenIMServer.msg.DeleteMsgPhysicalReq
+ (*DeleteMsgPhysicalResp)(nil), // 31: OpenIMServer.msg.DeleteMsgPhysicalResp
+ (*DeleteMsgPhysicalBySeqReq)(nil), // 32: OpenIMServer.msg.DeleteMsgPhysicalBySeqReq
+ (*DeleteMsgPhysicalBySeqResp)(nil), // 33: OpenIMServer.msg.DeleteMsgPhysicalBySeqResp
+ (*GetConversationMaxSeqReq)(nil), // 34: OpenIMServer.msg.GetConversationMaxSeqReq
+ (*GetConversationMaxSeqResp)(nil), // 35: OpenIMServer.msg.GetConversationMaxSeqResp
+ (*GetConversationsHasReadAndMaxSeqReq)(nil), // 36: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqReq
+ (*Seqs)(nil), // 37: OpenIMServer.msg.Seqs
+ (*GetConversationsHasReadAndMaxSeqResp)(nil), // 38: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp
+ (*GetActiveUserReq)(nil), // 39: OpenIMServer.msg.GetActiveUserReq
+ (*ActiveUser)(nil), // 40: OpenIMServer.msg.ActiveUser
+ (*GetActiveUserResp)(nil), // 41: OpenIMServer.msg.GetActiveUserResp
+ (*GetActiveGroupReq)(nil), // 42: OpenIMServer.msg.GetActiveGroupReq
+ (*ActiveGroup)(nil), // 43: OpenIMServer.msg.ActiveGroup
+ (*GetActiveGroupResp)(nil), // 44: OpenIMServer.msg.GetActiveGroupResp
+ (*SearchMessageReq)(nil), // 45: OpenIMServer.msg.SearchMessageReq
+ (*SearchMessageResp)(nil), // 46: OpenIMServer.msg.SearchMessageResp
+ (*ManageMsgReq)(nil), // 47: OpenIMServer.msg.manageMsgReq
+ (*ManageMsgResp)(nil), // 48: OpenIMServer.msg.manageMsgResp
+ (*ChatLog)(nil), // 49: OpenIMServer.msg.ChatLog
+ (*GetChatLogsReq)(nil), // 50: OpenIMServer.msg.GetChatLogsReq
+ (*GetChatLogsResp)(nil), // 51: OpenIMServer.msg.GetChatLogsResp
+ nil, // 52: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry
+ nil, // 53: OpenIMServer.msg.GetActiveUserResp.DateCountEntry
+ nil, // 54: OpenIMServer.msg.GetActiveGroupResp.DateCountEntry
+ (*sdkws.MsgData)(nil), // 55: OpenIMServer.sdkws.MsgData
+ (*sdkws.RequestPagination)(nil), // 56: OpenIMServer.sdkws.RequestPagination
+ (*sdkws.UserInfo)(nil), // 57: OpenIMServer.sdkws.UserInfo
+ (*sdkws.GroupInfo)(nil), // 58: OpenIMServer.sdkws.GroupInfo
+ (*sdkws.GetMaxSeqReq)(nil), // 59: OpenIMServer.sdkws.GetMaxSeqReq
+ (*sdkws.PullMessageBySeqsReq)(nil), // 60: OpenIMServer.sdkws.PullMessageBySeqsReq
+ (*sdkws.GetMaxSeqResp)(nil), // 61: OpenIMServer.sdkws.GetMaxSeqResp
+ (*sdkws.PullMessageBySeqsResp)(nil), // 62: OpenIMServer.sdkws.PullMessageBySeqsResp
+}
+var file_msg_msg_proto_depIdxs = []int32{
+ 55, // 0: OpenIMServer.msg.MsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData
+ 55, // 1: OpenIMServer.msg.MsgDataToDB.msgData:type_name -> OpenIMServer.sdkws.MsgData
+ 55, // 2: OpenIMServer.msg.PushMsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData
+ 55, // 3: OpenIMServer.msg.MsgDataToMongoByMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData
+ 55, // 4: OpenIMServer.msg.SendMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData
+ 55, // 5: OpenIMServer.msg.MsgDataToModifyByMQ.messages:type_name -> OpenIMServer.sdkws.MsgData
+ 23, // 6: OpenIMServer.msg.ClearConversationsMsgReq.deleteSyncOpt:type_name -> OpenIMServer.msg.DeleteSyncOpt
+ 23, // 7: OpenIMServer.msg.UserClearAllMsgReq.deleteSyncOpt:type_name -> OpenIMServer.msg.DeleteSyncOpt
+ 23, // 8: OpenIMServer.msg.DeleteMsgsReq.deleteSyncOpt:type_name -> OpenIMServer.msg.DeleteSyncOpt
+ 52, // 9: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.seqs:type_name -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry
+ 56, // 10: OpenIMServer.msg.GetActiveUserReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
+ 57, // 11: OpenIMServer.msg.ActiveUser.user:type_name -> OpenIMServer.sdkws.UserInfo
+ 53, // 12: OpenIMServer.msg.GetActiveUserResp.dateCount:type_name -> OpenIMServer.msg.GetActiveUserResp.DateCountEntry
+ 40, // 13: OpenIMServer.msg.GetActiveUserResp.users:type_name -> OpenIMServer.msg.ActiveUser
+ 56, // 14: OpenIMServer.msg.GetActiveGroupReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
+ 58, // 15: OpenIMServer.msg.ActiveGroup.group:type_name -> OpenIMServer.sdkws.GroupInfo
+ 54, // 16: OpenIMServer.msg.GetActiveGroupResp.dateCount:type_name -> OpenIMServer.msg.GetActiveGroupResp.DateCountEntry
+ 43, // 17: OpenIMServer.msg.GetActiveGroupResp.groups:type_name -> OpenIMServer.msg.ActiveGroup
+ 56, // 18: OpenIMServer.msg.SearchMessageReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
+ 49, // 19: OpenIMServer.msg.SearchMessageResp.chatLogs:type_name -> OpenIMServer.msg.ChatLog
+ 56, // 20: OpenIMServer.msg.GetChatLogsReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination
+ 49, // 21: OpenIMServer.msg.GetChatLogsResp.chatLogs:type_name -> OpenIMServer.msg.ChatLog
+ 37, // 22: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry.value:type_name -> OpenIMServer.msg.Seqs
+ 59, // 23: OpenIMServer.msg.msg.GetMaxSeq:input_type -> OpenIMServer.sdkws.GetMaxSeqReq
+ 34, // 24: OpenIMServer.msg.msg.GetConversationMaxSeq:input_type -> OpenIMServer.msg.GetConversationMaxSeqReq
+ 60, // 25: OpenIMServer.msg.msg.PullMessageBySeqs:input_type -> OpenIMServer.sdkws.PullMessageBySeqsReq
+ 45, // 26: OpenIMServer.msg.msg.SearchMessage:input_type -> OpenIMServer.msg.SearchMessageReq
+ 47, // 27: OpenIMServer.msg.msg.ManageMsg:input_type -> OpenIMServer.msg.manageMsgReq
+ 50, // 28: OpenIMServer.msg.msg.GetChatLogs:input_type -> OpenIMServer.msg.GetChatLogsReq
+ 6, // 29: OpenIMServer.msg.msg.SendMsg:input_type -> OpenIMServer.msg.SendMsgReq
+ 24, // 30: OpenIMServer.msg.msg.ClearConversationsMsg:input_type -> OpenIMServer.msg.ClearConversationsMsgReq
+ 26, // 31: OpenIMServer.msg.msg.UserClearAllMsg:input_type -> OpenIMServer.msg.UserClearAllMsgReq
+ 28, // 32: OpenIMServer.msg.msg.DeleteMsgs:input_type -> OpenIMServer.msg.DeleteMsgsReq
+ 32, // 33: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:input_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqReq
+ 30, // 34: OpenIMServer.msg.msg.DeleteMsgPhysical:input_type -> OpenIMServer.msg.DeleteMsgPhysicalReq
+ 8, // 35: OpenIMServer.msg.msg.SetSendMsgStatus:input_type -> OpenIMServer.msg.SetSendMsgStatusReq
+ 10, // 36: OpenIMServer.msg.msg.GetSendMsgStatus:input_type -> OpenIMServer.msg.GetSendMsgStatusReq
+ 15, // 37: OpenIMServer.msg.msg.RevokeMsg:input_type -> OpenIMServer.msg.RevokeMsgReq
+ 17, // 38: OpenIMServer.msg.msg.MarkMsgsAsRead:input_type -> OpenIMServer.msg.MarkMsgsAsReadReq
+ 19, // 39: OpenIMServer.msg.msg.MarkConversationAsRead:input_type -> OpenIMServer.msg.MarkConversationAsReadReq
+ 21, // 40: OpenIMServer.msg.msg.SetConversationHasReadSeq:input_type -> OpenIMServer.msg.SetConversationHasReadSeqReq
+ 36, // 41: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:input_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqReq
+ 39, // 42: OpenIMServer.msg.msg.GetActiveUser:input_type -> OpenIMServer.msg.GetActiveUserReq
+ 42, // 43: OpenIMServer.msg.msg.GetActiveGroup:input_type -> OpenIMServer.msg.GetActiveGroupReq
+ 61, // 44: OpenIMServer.msg.msg.GetMaxSeq:output_type -> OpenIMServer.sdkws.GetMaxSeqResp
+ 35, // 45: OpenIMServer.msg.msg.GetConversationMaxSeq:output_type -> OpenIMServer.msg.GetConversationMaxSeqResp
+ 62, // 46: OpenIMServer.msg.msg.PullMessageBySeqs:output_type -> OpenIMServer.sdkws.PullMessageBySeqsResp
+ 46, // 47: OpenIMServer.msg.msg.SearchMessage:output_type -> OpenIMServer.msg.SearchMessageResp
+ 48, // 48: OpenIMServer.msg.msg.ManageMsg:output_type -> OpenIMServer.msg.manageMsgResp
+ 51, // 49: OpenIMServer.msg.msg.GetChatLogs:output_type -> OpenIMServer.msg.GetChatLogsResp
+ 7, // 50: OpenIMServer.msg.msg.SendMsg:output_type -> OpenIMServer.msg.SendMsgResp
+ 25, // 51: OpenIMServer.msg.msg.ClearConversationsMsg:output_type -> OpenIMServer.msg.ClearConversationsMsgResp
+ 27, // 52: OpenIMServer.msg.msg.UserClearAllMsg:output_type -> OpenIMServer.msg.UserClearAllMsgResp
+ 29, // 53: OpenIMServer.msg.msg.DeleteMsgs:output_type -> OpenIMServer.msg.DeleteMsgsResp
+ 33, // 54: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:output_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqResp
+ 31, // 55: OpenIMServer.msg.msg.DeleteMsgPhysical:output_type -> OpenIMServer.msg.DeleteMsgPhysicalResp
+ 9, // 56: OpenIMServer.msg.msg.SetSendMsgStatus:output_type -> OpenIMServer.msg.SetSendMsgStatusResp
+ 11, // 57: OpenIMServer.msg.msg.GetSendMsgStatus:output_type -> OpenIMServer.msg.GetSendMsgStatusResp
+ 16, // 58: OpenIMServer.msg.msg.RevokeMsg:output_type -> OpenIMServer.msg.RevokeMsgResp
+ 18, // 59: OpenIMServer.msg.msg.MarkMsgsAsRead:output_type -> OpenIMServer.msg.MarkMsgsAsReadResp
+ 20, // 60: OpenIMServer.msg.msg.MarkConversationAsRead:output_type -> OpenIMServer.msg.MarkConversationAsReadResp
+ 22, // 61: OpenIMServer.msg.msg.SetConversationHasReadSeq:output_type -> OpenIMServer.msg.SetConversationHasReadSeqResp
+ 38, // 62: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:output_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp
+ 41, // 63: OpenIMServer.msg.msg.GetActiveUser:output_type -> OpenIMServer.msg.GetActiveUserResp
+ 44, // 64: OpenIMServer.msg.msg.GetActiveGroup:output_type -> OpenIMServer.msg.GetActiveGroupResp
+ 44, // [44:65] is the sub-list for method output_type
+ 23, // [23:44] is the sub-list for method input_type
+ 23, // [23:23] is the sub-list for extension type_name
+ 23, // [23:23] is the sub-list for extension extendee
+ 0, // [0:23] is the sub-list for field type_name
+}
+
+func init() { file_msg_msg_proto_init() }
+func file_msg_msg_proto_init() {
+ if File_msg_msg_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_msg_msg_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MsgDataToMQ); i {
case 0:
return &v.state
case 1:
@@ -4803,8 +3639,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SetMessageReactionExtensionsReq); i {
+ file_msg_msg_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MsgDataToDB); i {
case 0:
return &v.state
case 1:
@@ -4815,8 +3651,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SetMessageReactionExtensionsResp); i {
+ file_msg_msg_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PushMsgDataToMQ); i {
case 0:
return &v.state
case 1:
@@ -4827,8 +3663,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetMessagesReactionExtensionsReq); i {
+ file_msg_msg_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MsgDataToMongoByMQ); i {
case 0:
return &v.state
case 1:
@@ -4839,8 +3675,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetMessagesReactionExtensionsResp); i {
+ file_msg_msg_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetMaxAndMinSeqReq); i {
case 0:
return &v.state
case 1:
@@ -4851,8 +3687,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SingleMessageExtensionResult); i {
+ file_msg_msg_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetMaxAndMinSeqResp); i {
case 0:
return &v.state
case 1:
@@ -4863,8 +3699,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ModifyMessageReactionExtensionsResp); i {
+ file_msg_msg_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SendMsgReq); i {
case 0:
return &v.state
case 1:
@@ -4875,8 +3711,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteMessagesReactionExtensionsReq); i {
+ file_msg_msg_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SendMsgResp); i {
case 0:
return &v.state
case 1:
@@ -4887,8 +3723,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteMessagesReactionExtensionsResp); i {
+ file_msg_msg_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SetSendMsgStatusReq); i {
case 0:
return &v.state
case 1:
@@ -4899,8 +3735,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ExtendMsgResp); i {
+ file_msg_msg_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SetSendMsgStatusResp); i {
case 0:
return &v.state
case 1:
@@ -4911,8 +3747,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ExtendMsg); i {
+ file_msg_msg_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetSendMsgStatusReq); i {
case 0:
return &v.state
case 1:
@@ -4923,8 +3759,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*KeyValueResp); i {
+ file_msg_msg_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetSendMsgStatusResp); i {
case 0:
return &v.state
case 1:
@@ -4935,7 +3771,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MsgDataToModifyByMQ); i {
case 0:
return &v.state
@@ -4947,7 +3783,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DelMsgsReq); i {
case 0:
return &v.state
@@ -4959,7 +3795,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DelMsgsResp); i {
case 0:
return &v.state
@@ -4971,7 +3807,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RevokeMsgReq); i {
case 0:
return &v.state
@@ -4983,7 +3819,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RevokeMsgResp); i {
case 0:
return &v.state
@@ -4995,7 +3831,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MarkMsgsAsReadReq); i {
case 0:
return &v.state
@@ -5007,7 +3843,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MarkMsgsAsReadResp); i {
case 0:
return &v.state
@@ -5019,7 +3855,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MarkConversationAsReadReq); i {
case 0:
return &v.state
@@ -5031,7 +3867,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MarkConversationAsReadResp); i {
case 0:
return &v.state
@@ -5043,7 +3879,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SetConversationHasReadSeqReq); i {
case 0:
return &v.state
@@ -5055,7 +3891,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SetConversationHasReadSeqResp); i {
case 0:
return &v.state
@@ -5067,7 +3903,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteSyncOpt); i {
case 0:
return &v.state
@@ -5079,7 +3915,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ClearConversationsMsgReq); i {
case 0:
return &v.state
@@ -5091,7 +3927,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ClearConversationsMsgResp); i {
case 0:
return &v.state
@@ -5103,7 +3939,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserClearAllMsgReq); i {
case 0:
return &v.state
@@ -5115,7 +3951,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserClearAllMsgResp); i {
case 0:
return &v.state
@@ -5127,7 +3963,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteMsgsReq); i {
case 0:
return &v.state
@@ -5139,7 +3975,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteMsgsResp); i {
case 0:
return &v.state
@@ -5151,7 +3987,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteMsgPhysicalReq); i {
case 0:
return &v.state
@@ -5163,7 +3999,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteMsgPhysicalResp); i {
case 0:
return &v.state
@@ -5175,7 +4011,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteMsgPhysicalBySeqReq); i {
case 0:
return &v.state
@@ -5187,7 +4023,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteMsgPhysicalBySeqResp); i {
case 0:
return &v.state
@@ -5199,7 +4035,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetConversationMaxSeqReq); i {
case 0:
return &v.state
@@ -5211,7 +4047,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetConversationMaxSeqResp); i {
case 0:
return &v.state
@@ -5223,7 +4059,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetConversationsHasReadAndMaxSeqReq); i {
case 0:
return &v.state
@@ -5235,7 +4071,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Seqs); i {
case 0:
return &v.state
@@ -5247,7 +4083,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetConversationsHasReadAndMaxSeqResp); i {
case 0:
return &v.state
@@ -5259,7 +4095,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetActiveUserReq); i {
case 0:
return &v.state
@@ -5271,7 +4107,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ActiveUser); i {
case 0:
return &v.state
@@ -5283,7 +4119,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetActiveUserResp); i {
case 0:
return &v.state
@@ -5295,7 +4131,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetActiveGroupReq); i {
case 0:
return &v.state
@@ -5307,7 +4143,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ActiveGroup); i {
case 0:
return &v.state
@@ -5319,7 +4155,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetActiveGroupResp); i {
case 0:
return &v.state
@@ -5331,7 +4167,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchMessageReq); i {
case 0:
return &v.state
@@ -5343,7 +4179,7 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
+ file_msg_msg_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchMessageResp); i {
case 0:
return &v.state
@@ -5355,8 +4191,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ChatLog); i {
+ file_msg_msg_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ManageMsgReq); i {
case 0:
return &v.state
case 1:
@@ -5367,8 +4203,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetChatLogsReq); i {
+ file_msg_msg_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ManageMsgResp); i {
case 0:
return &v.state
case 1:
@@ -5379,8 +4215,20 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetChatLogsResp); i {
+ file_msg_msg_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ChatLog); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_msg_msg_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetChatLogsReq); i {
case 0:
return &v.state
case 1:
@@ -5391,8 +4239,8 @@ func file_msg_msg_proto_init() {
return nil
}
}
- file_msg_msg_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetMessagesReactionExtensionsReq_MessageReactionKey); i {
+ file_msg_msg_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetChatLogsResp); i {
case 0:
return &v.state
case 1:
@@ -5410,7 +4258,7 @@ func file_msg_msg_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_msg_msg_proto_rawDesc,
NumEnums: 0,
- NumMessages: 70,
+ NumMessages: 55,
NumExtensions: 0,
NumServices: 1,
},
@@ -5442,6 +4290,7 @@ type MsgClient interface {
// 拉取历史消息(包括用户的,以及指定群组的)
PullMessageBySeqs(ctx context.Context, in *sdkws.PullMessageBySeqsReq, opts ...grpc.CallOption) (*sdkws.PullMessageBySeqsResp, error)
SearchMessage(ctx context.Context, in *SearchMessageReq, opts ...grpc.CallOption) (*SearchMessageResp, error)
+ ManageMsg(ctx context.Context, in *ManageMsgReq, opts ...grpc.CallOption) (*ManageMsgResp, error)
GetChatLogs(ctx context.Context, in *GetChatLogsReq, opts ...grpc.CallOption) (*GetChatLogsResp, error)
// 发送消息
SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error)
@@ -5464,11 +4313,6 @@ type MsgClient interface {
MarkMsgsAsRead(ctx context.Context, in *MarkMsgsAsReadReq, opts ...grpc.CallOption) (*MarkMsgsAsReadResp, error)
MarkConversationAsRead(ctx context.Context, in *MarkConversationAsReadReq, opts ...grpc.CallOption) (*MarkConversationAsReadResp, error)
SetConversationHasReadSeq(ctx context.Context, in *SetConversationHasReadSeqReq, opts ...grpc.CallOption) (*SetConversationHasReadSeqResp, error)
- // 修改消息
- SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error)
- GetMessagesReactionExtensions(ctx context.Context, in *GetMessagesReactionExtensionsReq, opts ...grpc.CallOption) (*GetMessagesReactionExtensionsResp, error)
- AddMessageReactionExtensions(ctx context.Context, in *ModifyMessageReactionExtensionsReq, opts ...grpc.CallOption) (*ModifyMessageReactionExtensionsResp, error)
- DeleteMessageReactionExtensions(ctx context.Context, in *DeleteMessagesReactionExtensionsReq, opts ...grpc.CallOption) (*DeleteMessagesReactionExtensionsResp, error)
GetConversationsHasReadAndMaxSeq(ctx context.Context, in *GetConversationsHasReadAndMaxSeqReq, opts ...grpc.CallOption) (*GetConversationsHasReadAndMaxSeqResp, error)
GetActiveUser(ctx context.Context, in *GetActiveUserReq, opts ...grpc.CallOption) (*GetActiveUserResp, error)
GetActiveGroup(ctx context.Context, in *GetActiveGroupReq, opts ...grpc.CallOption) (*GetActiveGroupResp, error)
@@ -5518,6 +4362,15 @@ func (c *msgClient) SearchMessage(ctx context.Context, in *SearchMessageReq, opt
return out, nil
}
+func (c *msgClient) ManageMsg(ctx context.Context, in *ManageMsgReq, opts ...grpc.CallOption) (*ManageMsgResp, error) {
+ out := new(ManageMsgResp)
+ err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/ManageMsg", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *msgClient) GetChatLogs(ctx context.Context, in *GetChatLogsReq, opts ...grpc.CallOption) (*GetChatLogsResp, error) {
out := new(GetChatLogsResp)
err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/GetChatLogs", in, out, opts...)
@@ -5635,42 +4488,6 @@ func (c *msgClient) SetConversationHasReadSeq(ctx context.Context, in *SetConver
return out, nil
}
-func (c *msgClient) SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error) {
- out := new(SetMessageReactionExtensionsResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/SetMessageReactionExtensions", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *msgClient) GetMessagesReactionExtensions(ctx context.Context, in *GetMessagesReactionExtensionsReq, opts ...grpc.CallOption) (*GetMessagesReactionExtensionsResp, error) {
- out := new(GetMessagesReactionExtensionsResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/GetMessagesReactionExtensions", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *msgClient) AddMessageReactionExtensions(ctx context.Context, in *ModifyMessageReactionExtensionsReq, opts ...grpc.CallOption) (*ModifyMessageReactionExtensionsResp, error) {
- out := new(ModifyMessageReactionExtensionsResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/AddMessageReactionExtensions", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *msgClient) DeleteMessageReactionExtensions(ctx context.Context, in *DeleteMessagesReactionExtensionsReq, opts ...grpc.CallOption) (*DeleteMessagesReactionExtensionsResp, error) {
- out := new(DeleteMessagesReactionExtensionsResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/DeleteMessageReactionExtensions", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
func (c *msgClient) GetConversationsHasReadAndMaxSeq(ctx context.Context, in *GetConversationsHasReadAndMaxSeqReq, opts ...grpc.CallOption) (*GetConversationsHasReadAndMaxSeqResp, error) {
out := new(GetConversationsHasReadAndMaxSeqResp)
err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/GetConversationsHasReadAndMaxSeq", in, out, opts...)
@@ -5706,6 +4523,7 @@ type MsgServer interface {
// 拉取历史消息(包括用户的,以及指定群组的)
PullMessageBySeqs(context.Context, *sdkws.PullMessageBySeqsReq) (*sdkws.PullMessageBySeqsResp, error)
SearchMessage(context.Context, *SearchMessageReq) (*SearchMessageResp, error)
+ ManageMsg(context.Context, *ManageMsgReq) (*ManageMsgResp, error)
GetChatLogs(context.Context, *GetChatLogsReq) (*GetChatLogsResp, error)
// 发送消息
SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error)
@@ -5728,11 +4546,6 @@ type MsgServer interface {
MarkMsgsAsRead(context.Context, *MarkMsgsAsReadReq) (*MarkMsgsAsReadResp, error)
MarkConversationAsRead(context.Context, *MarkConversationAsReadReq) (*MarkConversationAsReadResp, error)
SetConversationHasReadSeq(context.Context, *SetConversationHasReadSeqReq) (*SetConversationHasReadSeqResp, error)
- // 修改消息
- SetMessageReactionExtensions(context.Context, *SetMessageReactionExtensionsReq) (*SetMessageReactionExtensionsResp, error)
- GetMessagesReactionExtensions(context.Context, *GetMessagesReactionExtensionsReq) (*GetMessagesReactionExtensionsResp, error)
- AddMessageReactionExtensions(context.Context, *ModifyMessageReactionExtensionsReq) (*ModifyMessageReactionExtensionsResp, error)
- DeleteMessageReactionExtensions(context.Context, *DeleteMessagesReactionExtensionsReq) (*DeleteMessagesReactionExtensionsResp, error)
GetConversationsHasReadAndMaxSeq(context.Context, *GetConversationsHasReadAndMaxSeqReq) (*GetConversationsHasReadAndMaxSeqResp, error)
GetActiveUser(context.Context, *GetActiveUserReq) (*GetActiveUserResp, error)
GetActiveGroup(context.Context, *GetActiveGroupReq) (*GetActiveGroupResp, error)
@@ -5754,6 +4567,9 @@ func (*UnimplementedMsgServer) PullMessageBySeqs(context.Context, *sdkws.PullMes
func (*UnimplementedMsgServer) SearchMessage(context.Context, *SearchMessageReq) (*SearchMessageResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method SearchMessage not implemented")
}
+func (*UnimplementedMsgServer) ManageMsg(context.Context, *ManageMsgReq) (*ManageMsgResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ManageMsg not implemented")
+}
func (*UnimplementedMsgServer) GetChatLogs(context.Context, *GetChatLogsReq) (*GetChatLogsResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetChatLogs not implemented")
}
@@ -5793,18 +4609,6 @@ func (*UnimplementedMsgServer) MarkConversationAsRead(context.Context, *MarkConv
func (*UnimplementedMsgServer) SetConversationHasReadSeq(context.Context, *SetConversationHasReadSeqReq) (*SetConversationHasReadSeqResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetConversationHasReadSeq not implemented")
}
-func (*UnimplementedMsgServer) SetMessageReactionExtensions(context.Context, *SetMessageReactionExtensionsReq) (*SetMessageReactionExtensionsResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method SetMessageReactionExtensions not implemented")
-}
-func (*UnimplementedMsgServer) GetMessagesReactionExtensions(context.Context, *GetMessagesReactionExtensionsReq) (*GetMessagesReactionExtensionsResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetMessagesReactionExtensions not implemented")
-}
-func (*UnimplementedMsgServer) AddMessageReactionExtensions(context.Context, *ModifyMessageReactionExtensionsReq) (*ModifyMessageReactionExtensionsResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method AddMessageReactionExtensions not implemented")
-}
-func (*UnimplementedMsgServer) DeleteMessageReactionExtensions(context.Context, *DeleteMessagesReactionExtensionsReq) (*DeleteMessagesReactionExtensionsResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method DeleteMessageReactionExtensions not implemented")
-}
func (*UnimplementedMsgServer) GetConversationsHasReadAndMaxSeq(context.Context, *GetConversationsHasReadAndMaxSeqReq) (*GetConversationsHasReadAndMaxSeqResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetConversationsHasReadAndMaxSeq not implemented")
}
@@ -5891,6 +4695,24 @@ func _Msg_SearchMessage_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler)
}
+func _Msg_ManageMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ManageMsgReq)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).ManageMsg(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/OpenIMServer.msg.msg/ManageMsg",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).ManageMsg(ctx, req.(*ManageMsgReq))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _Msg_GetChatLogs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetChatLogsReq)
if err := dec(in); err != nil {
@@ -6125,78 +4947,6 @@ func _Msg_SetConversationHasReadSeq_Handler(srv interface{}, ctx context.Context
return interceptor(ctx, in, info, handler)
}
-func _Msg_SetMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(SetMessageReactionExtensionsReq)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).SetMessageReactionExtensions(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/OpenIMServer.msg.msg/SetMessageReactionExtensions",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).SetMessageReactionExtensions(ctx, req.(*SetMessageReactionExtensionsReq))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Msg_GetMessagesReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(GetMessagesReactionExtensionsReq)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).GetMessagesReactionExtensions(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/OpenIMServer.msg.msg/GetMessagesReactionExtensions",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).GetMessagesReactionExtensions(ctx, req.(*GetMessagesReactionExtensionsReq))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Msg_AddMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(ModifyMessageReactionExtensionsReq)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).AddMessageReactionExtensions(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/OpenIMServer.msg.msg/AddMessageReactionExtensions",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).AddMessageReactionExtensions(ctx, req.(*ModifyMessageReactionExtensionsReq))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Msg_DeleteMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(DeleteMessagesReactionExtensionsReq)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).DeleteMessageReactionExtensions(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/OpenIMServer.msg.msg/DeleteMessageReactionExtensions",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).DeleteMessageReactionExtensions(ctx, req.(*DeleteMessagesReactionExtensionsReq))
- }
- return interceptor(ctx, in, info, handler)
-}
-
func _Msg_GetConversationsHasReadAndMaxSeq_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetConversationsHasReadAndMaxSeqReq)
if err := dec(in); err != nil {
@@ -6271,6 +5021,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
MethodName: "SearchMessage",
Handler: _Msg_SearchMessage_Handler,
},
+ {
+ MethodName: "ManageMsg",
+ Handler: _Msg_ManageMsg_Handler,
+ },
{
MethodName: "GetChatLogs",
Handler: _Msg_GetChatLogs_Handler,
@@ -6323,22 +5077,6 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
MethodName: "SetConversationHasReadSeq",
Handler: _Msg_SetConversationHasReadSeq_Handler,
},
- {
- MethodName: "SetMessageReactionExtensions",
- Handler: _Msg_SetMessageReactionExtensions_Handler,
- },
- {
- MethodName: "GetMessagesReactionExtensions",
- Handler: _Msg_GetMessagesReactionExtensions_Handler,
- },
- {
- MethodName: "AddMessageReactionExtensions",
- Handler: _Msg_AddMessageReactionExtensions_Handler,
- },
- {
- MethodName: "DeleteMessageReactionExtensions",
- Handler: _Msg_DeleteMessageReactionExtensions_Handler,
- },
{
MethodName: "GetConversationsHasReadAndMaxSeq",
Handler: _Msg_GetConversationsHasReadAndMaxSeq_Handler,
diff --git a/pkg/proto/msg/msg.proto b/pkg/proto/msg/msg.proto
index cab1a39b7..8683fe558 100644
--- a/pkg/proto/msg/msg.proto
+++ b/pkg/proto/msg/msg.proto
@@ -1,7 +1,7 @@
syntax = "proto3";
package OpenIMServer.msg;
import "sdkws/sdkws.proto";
-import "wrapperspb/wrapperspb.proto";
+// import "wrapperspb/wrapperspb.proto";
option go_package = "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg";
message MsgDataToMQ{
@@ -60,93 +60,6 @@ message GetSendMsgStatusResp{
}
-message ModifyMessageReactionExtensionsReq {
- string conversationID = 1;
- int32 sessionType = 2;
- map reactionExtensions = 3;
- string clientMsgID = 4;
- OpenIMServer.protobuf.StringValue ex = 5;
- OpenIMServer.protobuf.StringValue attachedInfo = 6;
- bool isReact = 7;
- bool isExternalExtensions = 8;
- int64 msgFirstModifyTime = 9;
-}
-message SetMessageReactionExtensionsReq {
- string conversationID = 1;
- int32 sessionType = 2;
- map reactionExtensions = 3;
- string clientMsgID = 4;
- OpenIMServer.protobuf.StringValue ex = 5;
- OpenIMServer.protobuf.StringValue attachedInfo = 6;
- bool isReact = 7;
- bool isExternalExtensions = 8;
- int64 msgFirstModifyTime = 9;
-}
-message SetMessageReactionExtensionsResp {
- string clientMsgID = 1;
- int64 msgFirstModifyTime = 2;
- bool isReact = 3;
- repeated KeyValueResp result = 4;
-}
-
-message GetMessagesReactionExtensionsReq {
- string conversationID = 1;
- int32 sessionType = 2;
- message MessageReactionKey {
- string clientMsgID = 1;
- int64 msgFirstModifyTime = 2;
- }
- repeated MessageReactionKey messageReactionKeys = 3;
- repeated string TypeKeys = 4;
-}
-message GetMessagesReactionExtensionsResp{
- repeated SingleMessageExtensionResult singleMessageResult = 1;
-
-}
-message SingleMessageExtensionResult {
- map reactionExtensions = 1;
- string clientMsgID = 2;
-}
-
-
-message ModifyMessageReactionExtensionsResp {
- repeated ExtendMsgResp successList = 1;
- repeated ExtendMsgResp failedList = 2;
-}
-
-message DeleteMessagesReactionExtensionsReq {
- string operationID = 1;
- string opUserID = 2;
- string conversationID = 3;
- int32 sessionType = 4;
- string clientMsgID = 5;
- bool isExternalExtensions = 6;
- int64 msgFirstModifyTime = 7;
- repeated sdkws.KeyValue reactionExtensions = 8;
-}
-
-message DeleteMessagesReactionExtensionsResp {
- repeated KeyValueResp result = 1;
-}
-
-message ExtendMsgResp {
- ExtendMsg extendMsg = 1;
-}
-
-message ExtendMsg {
- map reactionExtensions = 1;
- string clientMsgID = 2;
- int64 msgFirstModifyTime = 3;
- string attachedInfo = 4;
- string ex = 5;
-}
-
-message KeyValueResp {
- sdkws.KeyValue keyValue = 1;
- int32 errCode = 2;
- string errMsg = 3;
-}
-
message MsgDataToModifyByMQ{
repeated sdkws.MsgData messages = 1;
string conversationID = 2;
@@ -306,16 +219,28 @@ message GetActiveGroupResp {
}
message SearchMessageReq{
- string keyword1=1;//发送者ID
- string keyword2=2;//接收者ID
+ string sendID=1;//发送者ID
+ string recvID=2;//接收者ID
int32 msgType=3;
- int64 startTime=4;
- int64 endTime=5;
+ string sendTime=4;
+ int32 sessionType=5;
sdkws.RequestPagination pagination = 6;
}
message SearchMessageResp{
- repeated sdkws.MsgData msgs=1;
+ repeated ChatLog chatLogs=1;
+ int32 chatLogsNum = 2;
+}
+
+message manageMsgReq{
+ string recvID=1;
+ string sendID=2;
+ string groupID=3;
+ int64 seq=4;
+ int32 sessionType=5;
+}
+
+message manageMsgResp{
}
message ChatLog {
@@ -337,6 +262,11 @@ message ChatLog {
int64 sendTime = 16;
int64 createTime = 17;
string ex = 18;
+ string groupFaceURL=19;
+ uint32 groupMemberCount=20;
+ int64 seq=21;
+ string groupOwner=22;
+ int32 groupType=23;
}
@@ -354,6 +284,7 @@ message GetChatLogsResp{
int32 chatLogsNum = 3;
}
+
service msg {
//获取最小最大seq(包括用户的,以及指定群组的)
rpc GetMaxSeq(sdkws.GetMaxSeqReq) returns(sdkws.GetMaxSeqResp);
@@ -361,10 +292,10 @@ service msg {
//拉取历史消息(包括用户的,以及指定群组的)
rpc PullMessageBySeqs(sdkws.PullMessageBySeqsReq) returns(sdkws.PullMessageBySeqsResp);
rpc SearchMessage(SearchMessageReq) returns(SearchMessageResp);
+ rpc ManageMsg(manageMsgReq) returns (manageMsgResp);
rpc GetChatLogs(GetChatLogsReq)returns(GetChatLogsResp);
//发送消息
rpc SendMsg(SendMsgReq) returns(SendMsgResp);
-
// 全量清空指定会话消息 重置min seq 比最大seq大1
rpc ClearConversationsMsg(ClearConversationsMsgReq) returns(ClearConversationsMsgResp);
// 删除用户全部消息 重置min seq 比最大seq大1
@@ -385,12 +316,7 @@ service msg {
rpc MarkMsgsAsRead(MarkMsgsAsReadReq) returns(MarkMsgsAsReadResp);
rpc MarkConversationAsRead(MarkConversationAsReadReq) returns(MarkConversationAsReadResp);
rpc SetConversationHasReadSeq(SetConversationHasReadSeqReq) returns(SetConversationHasReadSeqResp);
- // 修改消息
- rpc SetMessageReactionExtensions(SetMessageReactionExtensionsReq) returns(SetMessageReactionExtensionsResp);
- rpc GetMessagesReactionExtensions(GetMessagesReactionExtensionsReq) returns(GetMessagesReactionExtensionsResp);
- rpc AddMessageReactionExtensions(ModifyMessageReactionExtensionsReq) returns(ModifyMessageReactionExtensionsResp);
- rpc DeleteMessageReactionExtensions(DeleteMessagesReactionExtensionsReq) returns(DeleteMessagesReactionExtensionsResp);
-
+
rpc GetConversationsHasReadAndMaxSeq(GetConversationsHasReadAndMaxSeqReq) returns(GetConversationsHasReadAndMaxSeqResp);
rpc GetActiveUser(GetActiveUserReq) returns(GetActiveUserResp);
diff --git a/pkg/proto/sdkws/sdkws.pb.go b/pkg/proto/sdkws/sdkws.pb.go
index c8ed2a728..aa800d1df 100644
--- a/pkg/proto/sdkws/sdkws.pb.go
+++ b/pkg/proto/sdkws/sdkws.pb.go
@@ -4577,425 +4577,6 @@ func (*SetAppBackgroundStatusResp) Descriptor() ([]byte, []int) {
return file_sdkws_sdkws_proto_rawDescGZIP(), []int{61}
}
-type ExtendMsgSet struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- SessionType int32 `protobuf:"varint,2,opt,name=sessionType,proto3" json:"sessionType"`
- ExtendMsgs map[string]*ExtendMsg `protobuf:"bytes,3,rep,name=extendMsgs,proto3" json:"extendMsgs" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- MaxMsgUpdateTime int64 `protobuf:"varint,4,opt,name=MaxMsgUpdateTime,proto3" json:"MaxMsgUpdateTime"`
- ExtendMsgNum int32 `protobuf:"varint,5,opt,name=extendMsgNum,proto3" json:"extendMsgNum"`
- CreateTime int64 `protobuf:"varint,6,opt,name=createTime,proto3" json:"createTime"`
-}
-
-func (x *ExtendMsgSet) Reset() {
- *x = ExtendMsgSet{}
- if protoimpl.UnsafeEnabled {
- mi := &file_sdkws_sdkws_proto_msgTypes[62]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ExtendMsgSet) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ExtendMsgSet) ProtoMessage() {}
-
-func (x *ExtendMsgSet) ProtoReflect() protoreflect.Message {
- mi := &file_sdkws_sdkws_proto_msgTypes[62]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ExtendMsgSet.ProtoReflect.Descriptor instead.
-func (*ExtendMsgSet) Descriptor() ([]byte, []int) {
- return file_sdkws_sdkws_proto_rawDescGZIP(), []int{62}
-}
-
-func (x *ExtendMsgSet) GetConversationID() string {
- if x != nil {
- return x.ConversationID
- }
- return ""
-}
-
-func (x *ExtendMsgSet) GetSessionType() int32 {
- if x != nil {
- return x.SessionType
- }
- return 0
-}
-
-func (x *ExtendMsgSet) GetExtendMsgs() map[string]*ExtendMsg {
- if x != nil {
- return x.ExtendMsgs
- }
- return nil
-}
-
-func (x *ExtendMsgSet) GetMaxMsgUpdateTime() int64 {
- if x != nil {
- return x.MaxMsgUpdateTime
- }
- return 0
-}
-
-func (x *ExtendMsgSet) GetExtendMsgNum() int32 {
- if x != nil {
- return x.ExtendMsgNum
- }
- return 0
-}
-
-func (x *ExtendMsgSet) GetCreateTime() int64 {
- if x != nil {
- return x.CreateTime
- }
- return 0
-}
-
-type ExtendMsg struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ReactionExtensionList map[string]*KeyValue `protobuf:"bytes,1,rep,name=reactionExtensionList,proto3" json:"reactionExtensionList" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- MsgFirstModifyTime int64 `protobuf:"varint,3,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
- AttachedInfo string `protobuf:"bytes,4,opt,name=attachedInfo,proto3" json:"attachedInfo"`
- Ex string `protobuf:"bytes,5,opt,name=ex,proto3" json:"ex"`
-}
-
-func (x *ExtendMsg) Reset() {
- *x = ExtendMsg{}
- if protoimpl.UnsafeEnabled {
- mi := &file_sdkws_sdkws_proto_msgTypes[63]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ExtendMsg) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ExtendMsg) ProtoMessage() {}
-
-func (x *ExtendMsg) ProtoReflect() protoreflect.Message {
- mi := &file_sdkws_sdkws_proto_msgTypes[63]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ExtendMsg.ProtoReflect.Descriptor instead.
-func (*ExtendMsg) Descriptor() ([]byte, []int) {
- return file_sdkws_sdkws_proto_rawDescGZIP(), []int{63}
-}
-
-func (x *ExtendMsg) GetReactionExtensionList() map[string]*KeyValue {
- if x != nil {
- return x.ReactionExtensionList
- }
- return nil
-}
-
-func (x *ExtendMsg) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *ExtendMsg) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-func (x *ExtendMsg) GetAttachedInfo() string {
- if x != nil {
- return x.AttachedInfo
- }
- return ""
-}
-
-func (x *ExtendMsg) GetEx() string {
- if x != nil {
- return x.Ex
- }
- return ""
-}
-
-type KeyValue struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- TypeKey string `protobuf:"bytes,1,opt,name=typeKey,proto3" json:"typeKey"`
- Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value"`
- LatestUpdateTime int64 `protobuf:"varint,3,opt,name=latestUpdateTime,proto3" json:"latestUpdateTime"`
-}
-
-func (x *KeyValue) Reset() {
- *x = KeyValue{}
- if protoimpl.UnsafeEnabled {
- mi := &file_sdkws_sdkws_proto_msgTypes[64]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *KeyValue) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*KeyValue) ProtoMessage() {}
-
-func (x *KeyValue) ProtoReflect() protoreflect.Message {
- mi := &file_sdkws_sdkws_proto_msgTypes[64]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use KeyValue.ProtoReflect.Descriptor instead.
-func (*KeyValue) Descriptor() ([]byte, []int) {
- return file_sdkws_sdkws_proto_rawDescGZIP(), []int{64}
-}
-
-func (x *KeyValue) GetTypeKey() string {
- if x != nil {
- return x.TypeKey
- }
- return ""
-}
-
-func (x *KeyValue) GetValue() string {
- if x != nil {
- return x.Value
- }
- return ""
-}
-
-func (x *KeyValue) GetLatestUpdateTime() int64 {
- if x != nil {
- return x.LatestUpdateTime
- }
- return 0
-}
-
-type ReactionMessageModifierNotification struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- OpUserID string `protobuf:"bytes,2,opt,name=opUserID,proto3" json:"opUserID"`
- SessionType int32 `protobuf:"varint,3,opt,name=sessionType,proto3" json:"sessionType"`
- SuccessReactionExtensions map[string]*KeyValue `protobuf:"bytes,4,rep,name=successReactionExtensions,proto3" json:"successReactionExtensions" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- ClientMsgID string `protobuf:"bytes,5,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- IsReact bool `protobuf:"varint,6,opt,name=isReact,proto3" json:"isReact"`
- IsExternalExtensions bool `protobuf:"varint,7,opt,name=isExternalExtensions,proto3" json:"isExternalExtensions"`
- MsgFirstModifyTime int64 `protobuf:"varint,8,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
-}
-
-func (x *ReactionMessageModifierNotification) Reset() {
- *x = ReactionMessageModifierNotification{}
- if protoimpl.UnsafeEnabled {
- mi := &file_sdkws_sdkws_proto_msgTypes[65]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ReactionMessageModifierNotification) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ReactionMessageModifierNotification) ProtoMessage() {}
-
-func (x *ReactionMessageModifierNotification) ProtoReflect() protoreflect.Message {
- mi := &file_sdkws_sdkws_proto_msgTypes[65]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ReactionMessageModifierNotification.ProtoReflect.Descriptor instead.
-func (*ReactionMessageModifierNotification) Descriptor() ([]byte, []int) {
- return file_sdkws_sdkws_proto_rawDescGZIP(), []int{65}
-}
-
-func (x *ReactionMessageModifierNotification) GetConversationID() string {
- if x != nil {
- return x.ConversationID
- }
- return ""
-}
-
-func (x *ReactionMessageModifierNotification) GetOpUserID() string {
- if x != nil {
- return x.OpUserID
- }
- return ""
-}
-
-func (x *ReactionMessageModifierNotification) GetSessionType() int32 {
- if x != nil {
- return x.SessionType
- }
- return 0
-}
-
-func (x *ReactionMessageModifierNotification) GetSuccessReactionExtensions() map[string]*KeyValue {
- if x != nil {
- return x.SuccessReactionExtensions
- }
- return nil
-}
-
-func (x *ReactionMessageModifierNotification) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *ReactionMessageModifierNotification) GetIsReact() bool {
- if x != nil {
- return x.IsReact
- }
- return false
-}
-
-func (x *ReactionMessageModifierNotification) GetIsExternalExtensions() bool {
- if x != nil {
- return x.IsExternalExtensions
- }
- return false
-}
-
-func (x *ReactionMessageModifierNotification) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
-type ReactionMessageDeleteNotification struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID"`
- OpUserID string `protobuf:"bytes,2,opt,name=opUserID,proto3" json:"opUserID"`
- SessionType int32 `protobuf:"varint,3,opt,name=sessionType,proto3" json:"sessionType"`
- SuccessReactionExtensions map[string]*KeyValue `protobuf:"bytes,4,rep,name=successReactionExtensions,proto3" json:"successReactionExtensions" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- ClientMsgID string `protobuf:"bytes,5,opt,name=clientMsgID,proto3" json:"clientMsgID"`
- MsgFirstModifyTime int64 `protobuf:"varint,6,opt,name=msgFirstModifyTime,proto3" json:"msgFirstModifyTime"`
-}
-
-func (x *ReactionMessageDeleteNotification) Reset() {
- *x = ReactionMessageDeleteNotification{}
- if protoimpl.UnsafeEnabled {
- mi := &file_sdkws_sdkws_proto_msgTypes[66]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ReactionMessageDeleteNotification) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ReactionMessageDeleteNotification) ProtoMessage() {}
-
-func (x *ReactionMessageDeleteNotification) ProtoReflect() protoreflect.Message {
- mi := &file_sdkws_sdkws_proto_msgTypes[66]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ReactionMessageDeleteNotification.ProtoReflect.Descriptor instead.
-func (*ReactionMessageDeleteNotification) Descriptor() ([]byte, []int) {
- return file_sdkws_sdkws_proto_rawDescGZIP(), []int{66}
-}
-
-func (x *ReactionMessageDeleteNotification) GetConversationID() string {
- if x != nil {
- return x.ConversationID
- }
- return ""
-}
-
-func (x *ReactionMessageDeleteNotification) GetOpUserID() string {
- if x != nil {
- return x.OpUserID
- }
- return ""
-}
-
-func (x *ReactionMessageDeleteNotification) GetSessionType() int32 {
- if x != nil {
- return x.SessionType
- }
- return 0
-}
-
-func (x *ReactionMessageDeleteNotification) GetSuccessReactionExtensions() map[string]*KeyValue {
- if x != nil {
- return x.SuccessReactionExtensions
- }
- return nil
-}
-
-func (x *ReactionMessageDeleteNotification) GetClientMsgID() string {
- if x != nil {
- return x.ClientMsgID
- }
- return ""
-}
-
-func (x *ReactionMessageDeleteNotification) GetMsgFirstModifyTime() int64 {
- if x != nil {
- return x.MsgFirstModifyTime
- }
- return 0
-}
-
type RequestPagination struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -5008,7 +4589,7 @@ type RequestPagination struct {
func (x *RequestPagination) Reset() {
*x = RequestPagination{}
if protoimpl.UnsafeEnabled {
- mi := &file_sdkws_sdkws_proto_msgTypes[67]
+ mi := &file_sdkws_sdkws_proto_msgTypes[62]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -5021,7 +4602,7 @@ func (x *RequestPagination) String() string {
func (*RequestPagination) ProtoMessage() {}
func (x *RequestPagination) ProtoReflect() protoreflect.Message {
- mi := &file_sdkws_sdkws_proto_msgTypes[67]
+ mi := &file_sdkws_sdkws_proto_msgTypes[62]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5034,7 +4615,7 @@ func (x *RequestPagination) ProtoReflect() protoreflect.Message {
// Deprecated: Use RequestPagination.ProtoReflect.Descriptor instead.
func (*RequestPagination) Descriptor() ([]byte, []int) {
- return file_sdkws_sdkws_proto_rawDescGZIP(), []int{67}
+ return file_sdkws_sdkws_proto_rawDescGZIP(), []int{62}
}
func (x *RequestPagination) GetPageNumber() int32 {
@@ -5833,137 +5414,19 @@ var file_sdkws_sdkws_proto_rawDesc = []byte{
0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
0x69, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x1c, 0x0a, 0x1a,
0x53, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xf8, 0x02, 0x0a, 0x0c, 0x45,
- 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63,
- 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79,
- 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
- 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d,
- 0x73, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x45,
- 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65,
- 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74,
- 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x4d, 0x61, 0x78, 0x4d, 0x73,
- 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x10, 0x4d, 0x61, 0x78, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54,
- 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67,
- 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x6e,
- 0x64, 0x4d, 0x73, 0x67, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x5c, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e,
- 0x64, 0x4d, 0x73, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73,
- 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe9, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64,
- 0x4d, 0x73, 0x67, 0x12, 0x6e, 0x0a, 0x15, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x4d, 0x73,
- 0x67, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x72, 0x65,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4c,
- 0x69, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67,
- 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
- 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73,
- 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66,
- 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65,
- 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x74, 0x74,
- 0x61, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x78, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x78, 0x1a, 0x66, 0x0a, 0x1a, 0x52, 0x65, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69,
- 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
- 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4b, 0x65,
- 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
- 0x01, 0x22, 0x66, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a,
- 0x07, 0x74, 0x79, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
- 0x74, 0x79, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a,
- 0x10, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d,
- 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xae, 0x04, 0x0a, 0x23, 0x52, 0x65,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x6f, 0x64,
- 0x69, 0x66, 0x69, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65,
- 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x55,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x55,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
- 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73,
- 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x19, 0x73, 0x75, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73,
- 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x52, 0x19, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20,
- 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44,
- 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x73,
- 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
- 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65,
- 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e,
- 0x0a, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
- 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46,
- 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x6a,
- 0x0a, 0x1e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
- 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x03, 0x0a, 0x21, 0x52,
- 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x55, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x55, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54,
- 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x92, 0x01, 0x0a, 0x19, 0x73, 0x75, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x4f, 0x70, 0x65,
- 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e,
- 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x52, 0x19, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63,
- 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x2e, 0x0a,
- 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54,
- 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x73, 0x67, 0x46, 0x69,
- 0x72, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x6a, 0x0a,
- 0x1e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
- 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
- 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
- 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x53, 0x0a, 0x11, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e,
- 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e,
- 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2a, 0x30,
- 0x0a, 0x09, 0x50, 0x75, 0x6c, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x0c, 0x50,
- 0x75, 0x6c, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x41, 0x73, 0x63, 0x10, 0x00, 0x12, 0x11, 0x0a,
- 0x0d, 0x50, 0x75, 0x6c, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x10, 0x01,
- 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f,
- 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x2d, 0x49, 0x4d,
- 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x2f, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x53, 0x0a, 0x11, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12,
+ 0x1e, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2a,
+ 0x30, 0x0a, 0x09, 0x50, 0x75, 0x6c, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x0c,
+ 0x50, 0x75, 0x6c, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x41, 0x73, 0x63, 0x10, 0x00, 0x12, 0x11,
+ 0x0a, 0x0d, 0x50, 0x75, 0x6c, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x10,
+ 0x01, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x2d, 0x49,
+ 0x4d, 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x2f, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -5979,94 +5442,85 @@ func file_sdkws_sdkws_proto_rawDescGZIP() []byte {
}
var file_sdkws_sdkws_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_sdkws_sdkws_proto_msgTypes = make([]protoimpl.MessageInfo, 79)
+var file_sdkws_sdkws_proto_msgTypes = make([]protoimpl.MessageInfo, 70)
var file_sdkws_sdkws_proto_goTypes = []interface{}{
- (PullOrder)(0), // 0: OpenIMServer.sdkws.PullOrder
- (*GroupInfo)(nil), // 1: OpenIMServer.sdkws.GroupInfo
- (*GroupInfoForSet)(nil), // 2: OpenIMServer.sdkws.GroupInfoForSet
- (*GroupMemberFullInfo)(nil), // 3: OpenIMServer.sdkws.GroupMemberFullInfo
- (*PublicUserInfo)(nil), // 4: OpenIMServer.sdkws.PublicUserInfo
- (*UserInfo)(nil), // 5: OpenIMServer.sdkws.UserInfo
- (*FriendInfo)(nil), // 6: OpenIMServer.sdkws.FriendInfo
- (*BlackInfo)(nil), // 7: OpenIMServer.sdkws.BlackInfo
- (*GroupRequest)(nil), // 8: OpenIMServer.sdkws.GroupRequest
- (*FriendRequest)(nil), // 9: OpenIMServer.sdkws.FriendRequest
- (*PullMessageBySeqsReq)(nil), // 10: OpenIMServer.sdkws.PullMessageBySeqsReq
- (*SeqRange)(nil), // 11: OpenIMServer.sdkws.SeqRange
- (*PullMsgs)(nil), // 12: OpenIMServer.sdkws.PullMsgs
- (*PullMessageBySeqsResp)(nil), // 13: OpenIMServer.sdkws.PullMessageBySeqsResp
- (*GetMaxSeqReq)(nil), // 14: OpenIMServer.sdkws.GetMaxSeqReq
- (*GetMaxSeqResp)(nil), // 15: OpenIMServer.sdkws.GetMaxSeqResp
- (*UserSendMsgResp)(nil), // 16: OpenIMServer.sdkws.UserSendMsgResp
- (*MsgData)(nil), // 17: OpenIMServer.sdkws.MsgData
- (*PushMessages)(nil), // 18: OpenIMServer.sdkws.PushMessages
- (*OfflinePushInfo)(nil), // 19: OpenIMServer.sdkws.OfflinePushInfo
- (*TipsComm)(nil), // 20: OpenIMServer.sdkws.TipsComm
- (*GroupCreatedTips)(nil), // 21: OpenIMServer.sdkws.GroupCreatedTips
- (*GroupInfoSetTips)(nil), // 22: OpenIMServer.sdkws.GroupInfoSetTips
- (*GroupInfoSetNameTips)(nil), // 23: OpenIMServer.sdkws.GroupInfoSetNameTips
- (*GroupInfoSetAnnouncementTips)(nil), // 24: OpenIMServer.sdkws.GroupInfoSetAnnouncementTips
- (*JoinGroupApplicationTips)(nil), // 25: OpenIMServer.sdkws.JoinGroupApplicationTips
- (*MemberQuitTips)(nil), // 26: OpenIMServer.sdkws.MemberQuitTips
- (*GroupApplicationAcceptedTips)(nil), // 27: OpenIMServer.sdkws.GroupApplicationAcceptedTips
- (*GroupApplicationRejectedTips)(nil), // 28: OpenIMServer.sdkws.GroupApplicationRejectedTips
- (*GroupOwnerTransferredTips)(nil), // 29: OpenIMServer.sdkws.GroupOwnerTransferredTips
- (*MemberKickedTips)(nil), // 30: OpenIMServer.sdkws.MemberKickedTips
- (*MemberInvitedTips)(nil), // 31: OpenIMServer.sdkws.MemberInvitedTips
- (*MemberEnterTips)(nil), // 32: OpenIMServer.sdkws.MemberEnterTips
- (*GroupDismissedTips)(nil), // 33: OpenIMServer.sdkws.GroupDismissedTips
- (*GroupMemberMutedTips)(nil), // 34: OpenIMServer.sdkws.GroupMemberMutedTips
- (*GroupMemberCancelMutedTips)(nil), // 35: OpenIMServer.sdkws.GroupMemberCancelMutedTips
- (*GroupMutedTips)(nil), // 36: OpenIMServer.sdkws.GroupMutedTips
- (*GroupCancelMutedTips)(nil), // 37: OpenIMServer.sdkws.GroupCancelMutedTips
- (*GroupMemberInfoSetTips)(nil), // 38: OpenIMServer.sdkws.GroupMemberInfoSetTips
- (*FriendApplication)(nil), // 39: OpenIMServer.sdkws.FriendApplication
- (*FromToUserID)(nil), // 40: OpenIMServer.sdkws.FromToUserID
- (*FriendApplicationTips)(nil), // 41: OpenIMServer.sdkws.FriendApplicationTips
- (*FriendApplicationApprovedTips)(nil), // 42: OpenIMServer.sdkws.FriendApplicationApprovedTips
- (*FriendApplicationRejectedTips)(nil), // 43: OpenIMServer.sdkws.FriendApplicationRejectedTips
- (*FriendAddedTips)(nil), // 44: OpenIMServer.sdkws.FriendAddedTips
- (*FriendDeletedTips)(nil), // 45: OpenIMServer.sdkws.FriendDeletedTips
- (*BlackAddedTips)(nil), // 46: OpenIMServer.sdkws.BlackAddedTips
- (*BlackDeletedTips)(nil), // 47: OpenIMServer.sdkws.BlackDeletedTips
- (*FriendInfoChangedTips)(nil), // 48: OpenIMServer.sdkws.FriendInfoChangedTips
- (*UserInfoUpdatedTips)(nil), // 49: OpenIMServer.sdkws.UserInfoUpdatedTips
- (*ConversationUpdateTips)(nil), // 50: OpenIMServer.sdkws.ConversationUpdateTips
- (*ConversationSetPrivateTips)(nil), // 51: OpenIMServer.sdkws.ConversationSetPrivateTips
- (*ConversationHasReadTips)(nil), // 52: OpenIMServer.sdkws.ConversationHasReadTips
- (*NotificationElem)(nil), // 53: OpenIMServer.sdkws.NotificationElem
- (*Seqs)(nil), // 54: OpenIMServer.sdkws.seqs
- (*DeleteMessageTips)(nil), // 55: OpenIMServer.sdkws.DeleteMessageTips
- (*RevokeMsgTips)(nil), // 56: OpenIMServer.sdkws.RevokeMsgTips
- (*MessageRevokedContent)(nil), // 57: OpenIMServer.sdkws.MessageRevokedContent
- (*ClearConversationTips)(nil), // 58: OpenIMServer.sdkws.ClearConversationTips
- (*DeleteMsgsTips)(nil), // 59: OpenIMServer.sdkws.DeleteMsgsTips
- (*MarkAsReadTips)(nil), // 60: OpenIMServer.sdkws.MarkAsReadTips
- (*SetAppBackgroundStatusReq)(nil), // 61: OpenIMServer.sdkws.SetAppBackgroundStatusReq
- (*SetAppBackgroundStatusResp)(nil), // 62: OpenIMServer.sdkws.SetAppBackgroundStatusResp
- (*ExtendMsgSet)(nil), // 63: OpenIMServer.sdkws.ExtendMsgSet
- (*ExtendMsg)(nil), // 64: OpenIMServer.sdkws.ExtendMsg
- (*KeyValue)(nil), // 65: OpenIMServer.sdkws.KeyValue
- (*ReactionMessageModifierNotification)(nil), // 66: OpenIMServer.sdkws.ReactionMessageModifierNotification
- (*ReactionMessageDeleteNotification)(nil), // 67: OpenIMServer.sdkws.ReactionMessageDeleteNotification
- (*RequestPagination)(nil), // 68: OpenIMServer.sdkws.RequestPagination
- nil, // 69: OpenIMServer.sdkws.PullMessageBySeqsResp.MsgsEntry
- nil, // 70: OpenIMServer.sdkws.PullMessageBySeqsResp.NotificationMsgsEntry
- nil, // 71: OpenIMServer.sdkws.GetMaxSeqResp.MaxSeqsEntry
- nil, // 72: OpenIMServer.sdkws.GetMaxSeqResp.MinSeqsEntry
- nil, // 73: OpenIMServer.sdkws.MsgData.OptionsEntry
- nil, // 74: OpenIMServer.sdkws.PushMessages.MsgsEntry
- nil, // 75: OpenIMServer.sdkws.PushMessages.NotificationMsgsEntry
- nil, // 76: OpenIMServer.sdkws.ExtendMsgSet.ExtendMsgsEntry
- nil, // 77: OpenIMServer.sdkws.ExtendMsg.ReactionExtensionListEntry
- nil, // 78: OpenIMServer.sdkws.ReactionMessageModifierNotification.SuccessReactionExtensionsEntry
- nil, // 79: OpenIMServer.sdkws.ReactionMessageDeleteNotification.SuccessReactionExtensionsEntry
- (*wrapperspb.Int32Value)(nil), // 80: OpenIMServer.protobuf.Int32Value
+ (PullOrder)(0), // 0: OpenIMServer.sdkws.PullOrder
+ (*GroupInfo)(nil), // 1: OpenIMServer.sdkws.GroupInfo
+ (*GroupInfoForSet)(nil), // 2: OpenIMServer.sdkws.GroupInfoForSet
+ (*GroupMemberFullInfo)(nil), // 3: OpenIMServer.sdkws.GroupMemberFullInfo
+ (*PublicUserInfo)(nil), // 4: OpenIMServer.sdkws.PublicUserInfo
+ (*UserInfo)(nil), // 5: OpenIMServer.sdkws.UserInfo
+ (*FriendInfo)(nil), // 6: OpenIMServer.sdkws.FriendInfo
+ (*BlackInfo)(nil), // 7: OpenIMServer.sdkws.BlackInfo
+ (*GroupRequest)(nil), // 8: OpenIMServer.sdkws.GroupRequest
+ (*FriendRequest)(nil), // 9: OpenIMServer.sdkws.FriendRequest
+ (*PullMessageBySeqsReq)(nil), // 10: OpenIMServer.sdkws.PullMessageBySeqsReq
+ (*SeqRange)(nil), // 11: OpenIMServer.sdkws.SeqRange
+ (*PullMsgs)(nil), // 12: OpenIMServer.sdkws.PullMsgs
+ (*PullMessageBySeqsResp)(nil), // 13: OpenIMServer.sdkws.PullMessageBySeqsResp
+ (*GetMaxSeqReq)(nil), // 14: OpenIMServer.sdkws.GetMaxSeqReq
+ (*GetMaxSeqResp)(nil), // 15: OpenIMServer.sdkws.GetMaxSeqResp
+ (*UserSendMsgResp)(nil), // 16: OpenIMServer.sdkws.UserSendMsgResp
+ (*MsgData)(nil), // 17: OpenIMServer.sdkws.MsgData
+ (*PushMessages)(nil), // 18: OpenIMServer.sdkws.PushMessages
+ (*OfflinePushInfo)(nil), // 19: OpenIMServer.sdkws.OfflinePushInfo
+ (*TipsComm)(nil), // 20: OpenIMServer.sdkws.TipsComm
+ (*GroupCreatedTips)(nil), // 21: OpenIMServer.sdkws.GroupCreatedTips
+ (*GroupInfoSetTips)(nil), // 22: OpenIMServer.sdkws.GroupInfoSetTips
+ (*GroupInfoSetNameTips)(nil), // 23: OpenIMServer.sdkws.GroupInfoSetNameTips
+ (*GroupInfoSetAnnouncementTips)(nil), // 24: OpenIMServer.sdkws.GroupInfoSetAnnouncementTips
+ (*JoinGroupApplicationTips)(nil), // 25: OpenIMServer.sdkws.JoinGroupApplicationTips
+ (*MemberQuitTips)(nil), // 26: OpenIMServer.sdkws.MemberQuitTips
+ (*GroupApplicationAcceptedTips)(nil), // 27: OpenIMServer.sdkws.GroupApplicationAcceptedTips
+ (*GroupApplicationRejectedTips)(nil), // 28: OpenIMServer.sdkws.GroupApplicationRejectedTips
+ (*GroupOwnerTransferredTips)(nil), // 29: OpenIMServer.sdkws.GroupOwnerTransferredTips
+ (*MemberKickedTips)(nil), // 30: OpenIMServer.sdkws.MemberKickedTips
+ (*MemberInvitedTips)(nil), // 31: OpenIMServer.sdkws.MemberInvitedTips
+ (*MemberEnterTips)(nil), // 32: OpenIMServer.sdkws.MemberEnterTips
+ (*GroupDismissedTips)(nil), // 33: OpenIMServer.sdkws.GroupDismissedTips
+ (*GroupMemberMutedTips)(nil), // 34: OpenIMServer.sdkws.GroupMemberMutedTips
+ (*GroupMemberCancelMutedTips)(nil), // 35: OpenIMServer.sdkws.GroupMemberCancelMutedTips
+ (*GroupMutedTips)(nil), // 36: OpenIMServer.sdkws.GroupMutedTips
+ (*GroupCancelMutedTips)(nil), // 37: OpenIMServer.sdkws.GroupCancelMutedTips
+ (*GroupMemberInfoSetTips)(nil), // 38: OpenIMServer.sdkws.GroupMemberInfoSetTips
+ (*FriendApplication)(nil), // 39: OpenIMServer.sdkws.FriendApplication
+ (*FromToUserID)(nil), // 40: OpenIMServer.sdkws.FromToUserID
+ (*FriendApplicationTips)(nil), // 41: OpenIMServer.sdkws.FriendApplicationTips
+ (*FriendApplicationApprovedTips)(nil), // 42: OpenIMServer.sdkws.FriendApplicationApprovedTips
+ (*FriendApplicationRejectedTips)(nil), // 43: OpenIMServer.sdkws.FriendApplicationRejectedTips
+ (*FriendAddedTips)(nil), // 44: OpenIMServer.sdkws.FriendAddedTips
+ (*FriendDeletedTips)(nil), // 45: OpenIMServer.sdkws.FriendDeletedTips
+ (*BlackAddedTips)(nil), // 46: OpenIMServer.sdkws.BlackAddedTips
+ (*BlackDeletedTips)(nil), // 47: OpenIMServer.sdkws.BlackDeletedTips
+ (*FriendInfoChangedTips)(nil), // 48: OpenIMServer.sdkws.FriendInfoChangedTips
+ (*UserInfoUpdatedTips)(nil), // 49: OpenIMServer.sdkws.UserInfoUpdatedTips
+ (*ConversationUpdateTips)(nil), // 50: OpenIMServer.sdkws.ConversationUpdateTips
+ (*ConversationSetPrivateTips)(nil), // 51: OpenIMServer.sdkws.ConversationSetPrivateTips
+ (*ConversationHasReadTips)(nil), // 52: OpenIMServer.sdkws.ConversationHasReadTips
+ (*NotificationElem)(nil), // 53: OpenIMServer.sdkws.NotificationElem
+ (*Seqs)(nil), // 54: OpenIMServer.sdkws.seqs
+ (*DeleteMessageTips)(nil), // 55: OpenIMServer.sdkws.DeleteMessageTips
+ (*RevokeMsgTips)(nil), // 56: OpenIMServer.sdkws.RevokeMsgTips
+ (*MessageRevokedContent)(nil), // 57: OpenIMServer.sdkws.MessageRevokedContent
+ (*ClearConversationTips)(nil), // 58: OpenIMServer.sdkws.ClearConversationTips
+ (*DeleteMsgsTips)(nil), // 59: OpenIMServer.sdkws.DeleteMsgsTips
+ (*MarkAsReadTips)(nil), // 60: OpenIMServer.sdkws.MarkAsReadTips
+ (*SetAppBackgroundStatusReq)(nil), // 61: OpenIMServer.sdkws.SetAppBackgroundStatusReq
+ (*SetAppBackgroundStatusResp)(nil), // 62: OpenIMServer.sdkws.SetAppBackgroundStatusResp
+ (*RequestPagination)(nil), // 63: OpenIMServer.sdkws.RequestPagination
+ nil, // 64: OpenIMServer.sdkws.PullMessageBySeqsResp.MsgsEntry
+ nil, // 65: OpenIMServer.sdkws.PullMessageBySeqsResp.NotificationMsgsEntry
+ nil, // 66: OpenIMServer.sdkws.GetMaxSeqResp.MaxSeqsEntry
+ nil, // 67: OpenIMServer.sdkws.GetMaxSeqResp.MinSeqsEntry
+ nil, // 68: OpenIMServer.sdkws.MsgData.OptionsEntry
+ nil, // 69: OpenIMServer.sdkws.PushMessages.MsgsEntry
+ nil, // 70: OpenIMServer.sdkws.PushMessages.NotificationMsgsEntry
+ (*wrapperspb.Int32Value)(nil), // 71: OpenIMServer.protobuf.Int32Value
}
var file_sdkws_sdkws_proto_depIdxs = []int32{
- 80, // 0: OpenIMServer.sdkws.GroupInfoForSet.needVerification:type_name -> OpenIMServer.protobuf.Int32Value
- 80, // 1: OpenIMServer.sdkws.GroupInfoForSet.lookMemberInfo:type_name -> OpenIMServer.protobuf.Int32Value
- 80, // 2: OpenIMServer.sdkws.GroupInfoForSet.applyMemberFriend:type_name -> OpenIMServer.protobuf.Int32Value
+ 71, // 0: OpenIMServer.sdkws.GroupInfoForSet.needVerification:type_name -> OpenIMServer.protobuf.Int32Value
+ 71, // 1: OpenIMServer.sdkws.GroupInfoForSet.lookMemberInfo:type_name -> OpenIMServer.protobuf.Int32Value
+ 71, // 2: OpenIMServer.sdkws.GroupInfoForSet.applyMemberFriend:type_name -> OpenIMServer.protobuf.Int32Value
5, // 3: OpenIMServer.sdkws.FriendInfo.friendUser:type_name -> OpenIMServer.sdkws.UserInfo
4, // 4: OpenIMServer.sdkws.BlackInfo.blackUserInfo:type_name -> OpenIMServer.sdkws.PublicUserInfo
4, // 5: OpenIMServer.sdkws.GroupRequest.userInfo:type_name -> OpenIMServer.sdkws.PublicUserInfo
@@ -6074,14 +5528,14 @@ var file_sdkws_sdkws_proto_depIdxs = []int32{
11, // 7: OpenIMServer.sdkws.PullMessageBySeqsReq.seqRanges:type_name -> OpenIMServer.sdkws.SeqRange
0, // 8: OpenIMServer.sdkws.PullMessageBySeqsReq.order:type_name -> OpenIMServer.sdkws.PullOrder
17, // 9: OpenIMServer.sdkws.PullMsgs.Msgs:type_name -> OpenIMServer.sdkws.MsgData
- 69, // 10: OpenIMServer.sdkws.PullMessageBySeqsResp.msgs:type_name -> OpenIMServer.sdkws.PullMessageBySeqsResp.MsgsEntry
- 70, // 11: OpenIMServer.sdkws.PullMessageBySeqsResp.notificationMsgs:type_name -> OpenIMServer.sdkws.PullMessageBySeqsResp.NotificationMsgsEntry
- 71, // 12: OpenIMServer.sdkws.GetMaxSeqResp.maxSeqs:type_name -> OpenIMServer.sdkws.GetMaxSeqResp.MaxSeqsEntry
- 72, // 13: OpenIMServer.sdkws.GetMaxSeqResp.minSeqs:type_name -> OpenIMServer.sdkws.GetMaxSeqResp.MinSeqsEntry
- 73, // 14: OpenIMServer.sdkws.MsgData.options:type_name -> OpenIMServer.sdkws.MsgData.OptionsEntry
+ 64, // 10: OpenIMServer.sdkws.PullMessageBySeqsResp.msgs:type_name -> OpenIMServer.sdkws.PullMessageBySeqsResp.MsgsEntry
+ 65, // 11: OpenIMServer.sdkws.PullMessageBySeqsResp.notificationMsgs:type_name -> OpenIMServer.sdkws.PullMessageBySeqsResp.NotificationMsgsEntry
+ 66, // 12: OpenIMServer.sdkws.GetMaxSeqResp.maxSeqs:type_name -> OpenIMServer.sdkws.GetMaxSeqResp.MaxSeqsEntry
+ 67, // 13: OpenIMServer.sdkws.GetMaxSeqResp.minSeqs:type_name -> OpenIMServer.sdkws.GetMaxSeqResp.MinSeqsEntry
+ 68, // 14: OpenIMServer.sdkws.MsgData.options:type_name -> OpenIMServer.sdkws.MsgData.OptionsEntry
19, // 15: OpenIMServer.sdkws.MsgData.offlinePushInfo:type_name -> OpenIMServer.sdkws.OfflinePushInfo
- 74, // 16: OpenIMServer.sdkws.PushMessages.msgs:type_name -> OpenIMServer.sdkws.PushMessages.MsgsEntry
- 75, // 17: OpenIMServer.sdkws.PushMessages.notificationMsgs:type_name -> OpenIMServer.sdkws.PushMessages.NotificationMsgsEntry
+ 69, // 16: OpenIMServer.sdkws.PushMessages.msgs:type_name -> OpenIMServer.sdkws.PushMessages.MsgsEntry
+ 70, // 17: OpenIMServer.sdkws.PushMessages.notificationMsgs:type_name -> OpenIMServer.sdkws.PushMessages.NotificationMsgsEntry
1, // 18: OpenIMServer.sdkws.GroupCreatedTips.group:type_name -> OpenIMServer.sdkws.GroupInfo
3, // 19: OpenIMServer.sdkws.GroupCreatedTips.opUser:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo
3, // 20: OpenIMServer.sdkws.GroupCreatedTips.memberList:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo
@@ -6135,23 +5589,15 @@ var file_sdkws_sdkws_proto_depIdxs = []int32{
40, // 68: OpenIMServer.sdkws.BlackAddedTips.fromToUserID:type_name -> OpenIMServer.sdkws.FromToUserID
40, // 69: OpenIMServer.sdkws.BlackDeletedTips.fromToUserID:type_name -> OpenIMServer.sdkws.FromToUserID
40, // 70: OpenIMServer.sdkws.FriendInfoChangedTips.fromToUserID:type_name -> OpenIMServer.sdkws.FromToUserID
- 76, // 71: OpenIMServer.sdkws.ExtendMsgSet.extendMsgs:type_name -> OpenIMServer.sdkws.ExtendMsgSet.ExtendMsgsEntry
- 77, // 72: OpenIMServer.sdkws.ExtendMsg.reactionExtensionList:type_name -> OpenIMServer.sdkws.ExtendMsg.ReactionExtensionListEntry
- 78, // 73: OpenIMServer.sdkws.ReactionMessageModifierNotification.successReactionExtensions:type_name -> OpenIMServer.sdkws.ReactionMessageModifierNotification.SuccessReactionExtensionsEntry
- 79, // 74: OpenIMServer.sdkws.ReactionMessageDeleteNotification.successReactionExtensions:type_name -> OpenIMServer.sdkws.ReactionMessageDeleteNotification.SuccessReactionExtensionsEntry
- 12, // 75: OpenIMServer.sdkws.PullMessageBySeqsResp.MsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
- 12, // 76: OpenIMServer.sdkws.PullMessageBySeqsResp.NotificationMsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
- 12, // 77: OpenIMServer.sdkws.PushMessages.MsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
- 12, // 78: OpenIMServer.sdkws.PushMessages.NotificationMsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
- 64, // 79: OpenIMServer.sdkws.ExtendMsgSet.ExtendMsgsEntry.value:type_name -> OpenIMServer.sdkws.ExtendMsg
- 65, // 80: OpenIMServer.sdkws.ExtendMsg.ReactionExtensionListEntry.value:type_name -> OpenIMServer.sdkws.KeyValue
- 65, // 81: OpenIMServer.sdkws.ReactionMessageModifierNotification.SuccessReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue
- 65, // 82: OpenIMServer.sdkws.ReactionMessageDeleteNotification.SuccessReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue
- 83, // [83:83] is the sub-list for method output_type
- 83, // [83:83] is the sub-list for method input_type
- 83, // [83:83] is the sub-list for extension type_name
- 83, // [83:83] is the sub-list for extension extendee
- 0, // [0:83] is the sub-list for field type_name
+ 12, // 71: OpenIMServer.sdkws.PullMessageBySeqsResp.MsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
+ 12, // 72: OpenIMServer.sdkws.PullMessageBySeqsResp.NotificationMsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
+ 12, // 73: OpenIMServer.sdkws.PushMessages.MsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
+ 12, // 74: OpenIMServer.sdkws.PushMessages.NotificationMsgsEntry.value:type_name -> OpenIMServer.sdkws.PullMsgs
+ 75, // [75:75] is the sub-list for method output_type
+ 75, // [75:75] is the sub-list for method input_type
+ 75, // [75:75] is the sub-list for extension type_name
+ 75, // [75:75] is the sub-list for extension extendee
+ 0, // [0:75] is the sub-list for field type_name
}
func init() { file_sdkws_sdkws_proto_init() }
@@ -6905,66 +6351,6 @@ func file_sdkws_sdkws_proto_init() {
}
}
file_sdkws_sdkws_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ExtendMsgSet); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_sdkws_sdkws_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ExtendMsg); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_sdkws_sdkws_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*KeyValue); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_sdkws_sdkws_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ReactionMessageModifierNotification); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_sdkws_sdkws_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ReactionMessageDeleteNotification); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_sdkws_sdkws_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RequestPagination); i {
case 0:
return &v.state
@@ -6983,7 +6369,7 @@ func file_sdkws_sdkws_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_sdkws_sdkws_proto_rawDesc,
NumEnums: 1,
- NumMessages: 79,
+ NumMessages: 70,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/pkg/proto/sdkws/sdkws.proto b/pkg/proto/sdkws/sdkws.proto
index 4db0b1648..dd02ba8d9 100644
--- a/pkg/proto/sdkws/sdkws.proto
+++ b/pkg/proto/sdkws/sdkws.proto
@@ -496,48 +496,6 @@ message SetAppBackgroundStatusReq {
message SetAppBackgroundStatusResp {
}
-message ExtendMsgSet {
- string conversationID = 1;
- int32 sessionType = 2;
- map extendMsgs = 3;
- int64 MaxMsgUpdateTime = 4;
- int32 extendMsgNum = 5;
- int64 createTime = 6;
-}
-
-message ExtendMsg {
- map reactionExtensionList = 1;
- string clientMsgID = 2;
- int64 msgFirstModifyTime = 3;
- string attachedInfo = 4;
- string ex = 5;
-}
-
-message KeyValue {
- string typeKey = 1;
- string value = 2;
- int64 latestUpdateTime = 3;
-}
-
-message ReactionMessageModifierNotification {
- string conversationID = 1;
- string opUserID = 2;
- int32 sessionType = 3;
- map successReactionExtensions = 4;
- string clientMsgID = 5;
- bool isReact = 6;
- bool isExternalExtensions = 7;
- int64 msgFirstModifyTime = 8;
-}
-
-message ReactionMessageDeleteNotification {
- string conversationID = 1;
- string opUserID = 2;
- int32 sessionType = 3;
- map successReactionExtensions = 4;
- string clientMsgID = 5;
- int64 msgFirstModifyTime = 6;
-}
message RequestPagination {
int32 pageNumber = 1;
diff --git a/pkg/proto/third/third.pb.go b/pkg/proto/third/third.pb.go
index 40268e683..978b68d91 100644
--- a/pkg/proto/third/third.pb.go
+++ b/pkg/proto/third/third.pb.go
@@ -24,22 +24,17 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
-type ApplyPutReq struct {
+type KeyValues struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- PutID string `protobuf:"bytes,1,opt,name=putID,proto3" json:"putID"`
- Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name"`
- Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size"`
- Hash string `protobuf:"bytes,4,opt,name=hash,proto3" json:"hash"`
- ContentType string `protobuf:"bytes,5,opt,name=contentType,proto3" json:"contentType"`
- FragmentSize int64 `protobuf:"varint,6,opt,name=fragmentSize,proto3" json:"fragmentSize"`
- ValidTime int64 `protobuf:"varint,7,opt,name=validTime,proto3" json:"validTime"` // 文件有效时间
+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key"`
+ Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values"`
}
-func (x *ApplyPutReq) Reset() {
- *x = ApplyPutReq{}
+func (x *KeyValues) Reset() {
+ *x = KeyValues{}
if protoimpl.UnsafeEnabled {
mi := &file_third_third_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -47,13 +42,13 @@ func (x *ApplyPutReq) Reset() {
}
}
-func (x *ApplyPutReq) String() string {
+func (x *KeyValues) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ApplyPutReq) ProtoMessage() {}
+func (*KeyValues) ProtoMessage() {}
-func (x *ApplyPutReq) ProtoReflect() protoreflect.Message {
+func (x *KeyValues) ProtoReflect() protoreflect.Message {
mi := &file_third_third_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -65,90 +60,124 @@ func (x *ApplyPutReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ApplyPutReq.ProtoReflect.Descriptor instead.
-func (*ApplyPutReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use KeyValues.ProtoReflect.Descriptor instead.
+func (*KeyValues) Descriptor() ([]byte, []int) {
return file_third_third_proto_rawDescGZIP(), []int{0}
}
-func (x *ApplyPutReq) GetPutID() string {
+func (x *KeyValues) GetKey() string {
if x != nil {
- return x.PutID
+ return x.Key
}
return ""
}
-func (x *ApplyPutReq) GetName() string {
+func (x *KeyValues) GetValues() []string {
if x != nil {
- return x.Name
+ return x.Values
}
- return ""
+ return nil
}
-func (x *ApplyPutReq) GetSize() int64 {
- if x != nil {
- return x.Size
+type SignPart struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ PartNumber int32 `protobuf:"varint,1,opt,name=partNumber,proto3" json:"partNumber"`
+ Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url"`
+ Query []*KeyValues `protobuf:"bytes,3,rep,name=query,proto3" json:"query"`
+ Header []*KeyValues `protobuf:"bytes,4,rep,name=header,proto3" json:"header"`
+}
+
+func (x *SignPart) Reset() {
+ *x = SignPart{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_third_third_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return 0
}
-func (x *ApplyPutReq) GetHash() string {
+func (x *SignPart) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SignPart) ProtoMessage() {}
+
+func (x *SignPart) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SignPart.ProtoReflect.Descriptor instead.
+func (*SignPart) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *SignPart) GetPartNumber() int32 {
if x != nil {
- return x.Hash
+ return x.PartNumber
}
- return ""
+ return 0
}
-func (x *ApplyPutReq) GetContentType() string {
+func (x *SignPart) GetUrl() string {
if x != nil {
- return x.ContentType
+ return x.Url
}
return ""
}
-func (x *ApplyPutReq) GetFragmentSize() int64 {
+func (x *SignPart) GetQuery() []*KeyValues {
if x != nil {
- return x.FragmentSize
+ return x.Query
}
- return 0
+ return nil
}
-func (x *ApplyPutReq) GetValidTime() int64 {
+func (x *SignPart) GetHeader() []*KeyValues {
if x != nil {
- return x.ValidTime
+ return x.Header
}
- return 0
+ return nil
}
-type ApplyPutResp struct {
+type AuthSignParts struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
- PutID string `protobuf:"bytes,2,opt,name=putID,proto3" json:"putID"`
- FragmentSize int64 `protobuf:"varint,3,opt,name=fragmentSize,proto3" json:"fragmentSize"`
- ValidTime int64 `protobuf:"varint,4,opt,name=validTime,proto3" json:"validTime"` // 上传地址的有效时间
- PutURLsHash string `protobuf:"bytes,5,opt,name=putURLsHash,proto3" json:"putURLsHash"`
- PutURLs []string `protobuf:"bytes,6,rep,name=putURLs,proto3" json:"putURLs"`
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
+ Query []*KeyValues `protobuf:"bytes,2,rep,name=query,proto3" json:"query"`
+ Header []*KeyValues `protobuf:"bytes,3,rep,name=header,proto3" json:"header"`
+ Parts []*SignPart `protobuf:"bytes,4,rep,name=parts,proto3" json:"parts"`
}
-func (x *ApplyPutResp) Reset() {
- *x = ApplyPutResp{}
+func (x *AuthSignParts) Reset() {
+ *x = AuthSignParts{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[1]
+ mi := &file_third_third_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ApplyPutResp) String() string {
+func (x *AuthSignParts) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ApplyPutResp) ProtoMessage() {}
+func (*AuthSignParts) ProtoMessage() {}
-func (x *ApplyPutResp) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[1]
+func (x *AuthSignParts) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -159,78 +188,165 @@ func (x *ApplyPutResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ApplyPutResp.ProtoReflect.Descriptor instead.
-func (*ApplyPutResp) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{1}
+// Deprecated: Use AuthSignParts.ProtoReflect.Descriptor instead.
+func (*AuthSignParts) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{2}
}
-func (x *ApplyPutResp) GetUrl() string {
+func (x *AuthSignParts) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
-func (x *ApplyPutResp) GetPutID() string {
+func (x *AuthSignParts) GetQuery() []*KeyValues {
if x != nil {
- return x.PutID
+ return x.Query
}
- return ""
+ return nil
}
-func (x *ApplyPutResp) GetFragmentSize() int64 {
+func (x *AuthSignParts) GetHeader() []*KeyValues {
if x != nil {
- return x.FragmentSize
+ return x.Header
}
- return 0
+ return nil
+}
+
+func (x *AuthSignParts) GetParts() []*SignPart {
+ if x != nil {
+ return x.Parts
+ }
+ return nil
+}
+
+type PartLimitReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *PartLimitReq) Reset() {
+ *x = PartLimitReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_third_third_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PartLimitReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PartLimitReq) ProtoMessage() {}
+
+func (x *PartLimitReq) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PartLimitReq.ProtoReflect.Descriptor instead.
+func (*PartLimitReq) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{3}
+}
+
+type PartLimitResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ MinPartSize int64 `protobuf:"varint,1,opt,name=minPartSize,proto3" json:"minPartSize"`
+ MaxPartSize int64 `protobuf:"varint,2,opt,name=maxPartSize,proto3" json:"maxPartSize"`
+ MaxNumSize int32 `protobuf:"varint,3,opt,name=maxNumSize,proto3" json:"maxNumSize"`
+}
+
+func (x *PartLimitResp) Reset() {
+ *x = PartLimitResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_third_third_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PartLimitResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PartLimitResp) ProtoMessage() {}
+
+func (x *PartLimitResp) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PartLimitResp.ProtoReflect.Descriptor instead.
+func (*PartLimitResp) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{4}
}
-func (x *ApplyPutResp) GetValidTime() int64 {
+func (x *PartLimitResp) GetMinPartSize() int64 {
if x != nil {
- return x.ValidTime
+ return x.MinPartSize
}
return 0
}
-func (x *ApplyPutResp) GetPutURLsHash() string {
+func (x *PartLimitResp) GetMaxPartSize() int64 {
if x != nil {
- return x.PutURLsHash
+ return x.MaxPartSize
}
- return ""
+ return 0
}
-func (x *ApplyPutResp) GetPutURLs() []string {
+func (x *PartLimitResp) GetMaxNumSize() int32 {
if x != nil {
- return x.PutURLs
+ return x.MaxNumSize
}
- return nil
+ return 0
}
-type ConfirmPutReq struct {
+type PartSizeReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- PutID string `protobuf:"bytes,1,opt,name=putID,proto3" json:"putID"`
+ Size int64 `protobuf:"varint,1,opt,name=size,proto3" json:"size"`
}
-func (x *ConfirmPutReq) Reset() {
- *x = ConfirmPutReq{}
+func (x *PartSizeReq) Reset() {
+ *x = PartSizeReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[2]
+ mi := &file_third_third_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ConfirmPutReq) String() string {
+func (x *PartSizeReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ConfirmPutReq) ProtoMessage() {}
+func (*PartSizeReq) ProtoMessage() {}
-func (x *ConfirmPutReq) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[2]
+func (x *PartSizeReq) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -241,43 +357,43 @@ func (x *ConfirmPutReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ConfirmPutReq.ProtoReflect.Descriptor instead.
-func (*ConfirmPutReq) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{2}
+// Deprecated: Use PartSizeReq.ProtoReflect.Descriptor instead.
+func (*PartSizeReq) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{5}
}
-func (x *ConfirmPutReq) GetPutID() string {
+func (x *PartSizeReq) GetSize() int64 {
if x != nil {
- return x.PutID
+ return x.Size
}
- return ""
+ return 0
}
-type ConfirmPutResp struct {
+type PartSizeResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
+ Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size"`
}
-func (x *ConfirmPutResp) Reset() {
- *x = ConfirmPutResp{}
+func (x *PartSizeResp) Reset() {
+ *x = PartSizeResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[3]
+ mi := &file_third_third_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ConfirmPutResp) String() string {
+func (x *PartSizeResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ConfirmPutResp) ProtoMessage() {}
+func (*PartSizeResp) ProtoMessage() {}
-func (x *ConfirmPutResp) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[3]
+func (x *PartSizeResp) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -288,45 +404,49 @@ func (x *ConfirmPutResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ConfirmPutResp.ProtoReflect.Descriptor instead.
-func (*ConfirmPutResp) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{3}
+// Deprecated: Use PartSizeResp.ProtoReflect.Descriptor instead.
+func (*PartSizeResp) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{6}
}
-func (x *ConfirmPutResp) GetUrl() string {
+func (x *PartSizeResp) GetSize() int64 {
if x != nil {
- return x.Url
+ return x.Size
}
- return ""
+ return 0
}
-type GetUrlReq struct {
+type InitiateMultipartUploadReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` // 文件名
- Expires int64 `protobuf:"varint,2,opt,name=expires,proto3" json:"expires"` // url有效时间
- Attachment bool `protobuf:"varint,3,opt,name=attachment,proto3" json:"attachment"` // 是否是附件
+ Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash"`
+ Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size"`
+ PartSize int64 `protobuf:"varint,3,opt,name=partSize,proto3" json:"partSize"`
+ MaxParts int32 `protobuf:"varint,4,opt,name=maxParts,proto3" json:"maxParts"`
+ Cause string `protobuf:"bytes,5,opt,name=cause,proto3" json:"cause"`
+ Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name"`
+ ContentType string `protobuf:"bytes,7,opt,name=contentType,proto3" json:"contentType"`
}
-func (x *GetUrlReq) Reset() {
- *x = GetUrlReq{}
+func (x *InitiateMultipartUploadReq) Reset() {
+ *x = InitiateMultipartUploadReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[4]
+ mi := &file_third_third_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetUrlReq) String() string {
+func (x *InitiateMultipartUploadReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetUrlReq) ProtoMessage() {}
+func (*InitiateMultipartUploadReq) ProtoMessage() {}
-func (x *GetUrlReq) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[4]
+func (x *InitiateMultipartUploadReq) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -337,59 +457,87 @@ func (x *GetUrlReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetUrlReq.ProtoReflect.Descriptor instead.
-func (*GetUrlReq) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{4}
+// Deprecated: Use InitiateMultipartUploadReq.ProtoReflect.Descriptor instead.
+func (*InitiateMultipartUploadReq) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{7}
}
-func (x *GetUrlReq) GetName() string {
+func (x *InitiateMultipartUploadReq) GetHash() string {
if x != nil {
- return x.Name
+ return x.Hash
}
return ""
}
-func (x *GetUrlReq) GetExpires() int64 {
+func (x *InitiateMultipartUploadReq) GetSize() int64 {
if x != nil {
- return x.Expires
+ return x.Size
}
return 0
}
-func (x *GetUrlReq) GetAttachment() bool {
+func (x *InitiateMultipartUploadReq) GetPartSize() int64 {
if x != nil {
- return x.Attachment
+ return x.PartSize
}
- return false
+ return 0
+}
+
+func (x *InitiateMultipartUploadReq) GetMaxParts() int32 {
+ if x != nil {
+ return x.MaxParts
+ }
+ return 0
}
-type GetUrlResp struct {
+func (x *InitiateMultipartUploadReq) GetCause() string {
+ if x != nil {
+ return x.Cause
+ }
+ return ""
+}
+
+func (x *InitiateMultipartUploadReq) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *InitiateMultipartUploadReq) GetContentType() string {
+ if x != nil {
+ return x.ContentType
+ }
+ return ""
+}
+
+type UploadInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
- Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size"`
- Hash string `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash"`
+ UploadID string `protobuf:"bytes,1,opt,name=uploadID,proto3" json:"uploadID"`
+ PartSize int64 `protobuf:"varint,2,opt,name=partSize,proto3" json:"partSize"`
+ Sign *AuthSignParts `protobuf:"bytes,3,opt,name=sign,proto3" json:"sign"`
}
-func (x *GetUrlResp) Reset() {
- *x = GetUrlResp{}
+func (x *UploadInfo) Reset() {
+ *x = UploadInfo{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[5]
+ mi := &file_third_third_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetUrlResp) String() string {
+func (x *UploadInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetUrlResp) ProtoMessage() {}
+func (*UploadInfo) ProtoMessage() {}
-func (x *GetUrlResp) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[5]
+func (x *UploadInfo) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -400,57 +548,58 @@ func (x *GetUrlResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetUrlResp.ProtoReflect.Descriptor instead.
-func (*GetUrlResp) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{5}
+// Deprecated: Use UploadInfo.ProtoReflect.Descriptor instead.
+func (*UploadInfo) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{8}
}
-func (x *GetUrlResp) GetUrl() string {
+func (x *UploadInfo) GetUploadID() string {
if x != nil {
- return x.Url
+ return x.UploadID
}
return ""
}
-func (x *GetUrlResp) GetSize() int64 {
+func (x *UploadInfo) GetPartSize() int64 {
if x != nil {
- return x.Size
+ return x.PartSize
}
return 0
}
-func (x *GetUrlResp) GetHash() string {
+func (x *UploadInfo) GetSign() *AuthSignParts {
if x != nil {
- return x.Hash
+ return x.Sign
}
- return ""
+ return nil
}
-type GetPutReq struct {
+type InitiateMultipartUploadResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- PutID string `protobuf:"bytes,1,opt,name=putID,proto3" json:"putID"`
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
+ Upload *UploadInfo `protobuf:"bytes,2,opt,name=upload,proto3" json:"upload"`
}
-func (x *GetPutReq) Reset() {
- *x = GetPutReq{}
+func (x *InitiateMultipartUploadResp) Reset() {
+ *x = InitiateMultipartUploadResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[6]
+ mi := &file_third_third_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetPutReq) String() string {
+func (x *InitiateMultipartUploadResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetPutReq) ProtoMessage() {}
+func (*InitiateMultipartUploadResp) ProtoMessage() {}
-func (x *GetPutReq) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[6]
+func (x *InitiateMultipartUploadResp) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -461,45 +610,51 @@ func (x *GetPutReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetPutReq.ProtoReflect.Descriptor instead.
-func (*GetPutReq) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{6}
+// Deprecated: Use InitiateMultipartUploadResp.ProtoReflect.Descriptor instead.
+func (*InitiateMultipartUploadResp) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{9}
}
-func (x *GetPutReq) GetPutID() string {
+func (x *InitiateMultipartUploadResp) GetUrl() string {
if x != nil {
- return x.PutID
+ return x.Url
}
return ""
}
-type GetPutFragment struct {
+func (x *InitiateMultipartUploadResp) GetUpload() *UploadInfo {
+ if x != nil {
+ return x.Upload
+ }
+ return nil
+}
+
+type AuthSignReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Size int64 `protobuf:"varint,1,opt,name=size,proto3" json:"size"`
- Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash"`
- Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url"`
+ UploadID string `protobuf:"bytes,1,opt,name=uploadID,proto3" json:"uploadID"`
+ PartNumbers []int32 `protobuf:"varint,2,rep,packed,name=partNumbers,proto3" json:"partNumbers"`
}
-func (x *GetPutFragment) Reset() {
- *x = GetPutFragment{}
+func (x *AuthSignReq) Reset() {
+ *x = AuthSignReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[7]
+ mi := &file_third_third_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetPutFragment) String() string {
+func (x *AuthSignReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetPutFragment) ProtoMessage() {}
+func (*AuthSignReq) ProtoMessage() {}
-func (x *GetPutFragment) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[7]
+func (x *AuthSignReq) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -510,69 +665,125 @@ func (x *GetPutFragment) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetPutFragment.ProtoReflect.Descriptor instead.
-func (*GetPutFragment) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{7}
+// Deprecated: Use AuthSignReq.ProtoReflect.Descriptor instead.
+func (*AuthSignReq) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{10}
}
-func (x *GetPutFragment) GetSize() int64 {
+func (x *AuthSignReq) GetUploadID() string {
if x != nil {
- return x.Size
+ return x.UploadID
}
- return 0
+ return ""
}
-func (x *GetPutFragment) GetHash() string {
+func (x *AuthSignReq) GetPartNumbers() []int32 {
if x != nil {
- return x.Hash
+ return x.PartNumbers
}
- return ""
+ return nil
}
-func (x *GetPutFragment) GetUrl() string {
+type AuthSignResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
+ Query []*KeyValues `protobuf:"bytes,2,rep,name=query,proto3" json:"query"`
+ Header []*KeyValues `protobuf:"bytes,3,rep,name=header,proto3" json:"header"`
+ Parts []*SignPart `protobuf:"bytes,4,rep,name=parts,proto3" json:"parts"`
+}
+
+func (x *AuthSignResp) Reset() {
+ *x = AuthSignResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_third_third_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AuthSignResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AuthSignResp) ProtoMessage() {}
+
+func (x *AuthSignResp) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[11]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AuthSignResp.ProtoReflect.Descriptor instead.
+func (*AuthSignResp) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *AuthSignResp) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
-type GetPutResp struct {
+func (x *AuthSignResp) GetQuery() []*KeyValues {
+ if x != nil {
+ return x.Query
+ }
+ return nil
+}
+
+func (x *AuthSignResp) GetHeader() []*KeyValues {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+
+func (x *AuthSignResp) GetParts() []*SignPart {
+ if x != nil {
+ return x.Parts
+ }
+ return nil
+}
+
+type CompleteMultipartUploadReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"`
- Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size"`
- Hash string `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash"`
- FragmentSize int64 `protobuf:"varint,4,opt,name=fragmentSize,proto3" json:"fragmentSize"`
- ContentType string `protobuf:"bytes,5,opt,name=contentType,proto3" json:"contentType"`
- ValidTime int64 `protobuf:"varint,6,opt,name=validTime,proto3" json:"validTime"` // 上传地址的有效时间
- // repeated GetPutFragment fragments = 7;
- // string putURLsHash = 8;
- // string putID = 2;
- // int64 fragmentSize = 3;
- // int64 validTime = 4;// 上传地址的有效时间
- PutURLsHash string `protobuf:"bytes,7,opt,name=putURLsHash,proto3" json:"putURLsHash"`
- Fragments []*GetPutFragment `protobuf:"bytes,8,rep,name=fragments,proto3" json:"fragments"`
-}
-
-func (x *GetPutResp) Reset() {
- *x = GetPutResp{}
+ UploadID string `protobuf:"bytes,1,opt,name=uploadID,proto3" json:"uploadID"`
+ Parts []string `protobuf:"bytes,2,rep,name=parts,proto3" json:"parts"`
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name"`
+ ContentType string `protobuf:"bytes,4,opt,name=contentType,proto3" json:"contentType"`
+ Cause string `protobuf:"bytes,5,opt,name=cause,proto3" json:"cause"`
+}
+
+func (x *CompleteMultipartUploadReq) Reset() {
+ *x = CompleteMultipartUploadReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[8]
+ mi := &file_third_third_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetPutResp) String() string {
+func (x *CompleteMultipartUploadReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetPutResp) ProtoMessage() {}
+func (*CompleteMultipartUploadReq) ProtoMessage() {}
-func (x *GetPutResp) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[8]
+func (x *CompleteMultipartUploadReq) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -583,92 +794,118 @@ func (x *GetPutResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetPutResp.ProtoReflect.Descriptor instead.
-func (*GetPutResp) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{8}
+// Deprecated: Use CompleteMultipartUploadReq.ProtoReflect.Descriptor instead.
+func (*CompleteMultipartUploadReq) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{12}
}
-func (x *GetPutResp) GetName() string {
+func (x *CompleteMultipartUploadReq) GetUploadID() string {
if x != nil {
- return x.Name
+ return x.UploadID
}
return ""
}
-func (x *GetPutResp) GetSize() int64 {
+func (x *CompleteMultipartUploadReq) GetParts() []string {
if x != nil {
- return x.Size
+ return x.Parts
}
- return 0
+ return nil
}
-func (x *GetPutResp) GetHash() string {
+func (x *CompleteMultipartUploadReq) GetName() string {
if x != nil {
- return x.Hash
+ return x.Name
}
return ""
}
-func (x *GetPutResp) GetFragmentSize() int64 {
+func (x *CompleteMultipartUploadReq) GetContentType() string {
if x != nil {
- return x.FragmentSize
+ return x.ContentType
}
- return 0
+ return ""
}
-func (x *GetPutResp) GetContentType() string {
+func (x *CompleteMultipartUploadReq) GetCause() string {
if x != nil {
- return x.ContentType
+ return x.Cause
}
return ""
}
-func (x *GetPutResp) GetValidTime() int64 {
- if x != nil {
- return x.ValidTime
+type CompleteMultipartUploadResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
+}
+
+func (x *CompleteMultipartUploadResp) Reset() {
+ *x = CompleteMultipartUploadResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_third_third_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return 0
}
-func (x *GetPutResp) GetPutURLsHash() string {
- if x != nil {
- return x.PutURLsHash
+func (x *CompleteMultipartUploadResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CompleteMultipartUploadResp) ProtoMessage() {}
+
+func (x *CompleteMultipartUploadResp) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[13]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CompleteMultipartUploadResp.ProtoReflect.Descriptor instead.
+func (*CompleteMultipartUploadResp) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{13}
}
-func (x *GetPutResp) GetFragments() []*GetPutFragment {
+func (x *CompleteMultipartUploadResp) GetUrl() string {
if x != nil {
- return x.Fragments
+ return x.Url
}
- return nil
+ return ""
}
-type GetHashInfoReq struct {
+type AccessURLReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash"`
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"`
}
-func (x *GetHashInfoReq) Reset() {
- *x = GetHashInfoReq{}
+func (x *AccessURLReq) Reset() {
+ *x = AccessURLReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[9]
+ mi := &file_third_third_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetHashInfoReq) String() string {
+func (x *AccessURLReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetHashInfoReq) ProtoMessage() {}
+func (*AccessURLReq) ProtoMessage() {}
-func (x *GetHashInfoReq) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[9]
+func (x *AccessURLReq) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -679,44 +916,44 @@ func (x *GetHashInfoReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetHashInfoReq.ProtoReflect.Descriptor instead.
-func (*GetHashInfoReq) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{9}
+// Deprecated: Use AccessURLReq.ProtoReflect.Descriptor instead.
+func (*AccessURLReq) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{14}
}
-func (x *GetHashInfoReq) GetHash() string {
+func (x *AccessURLReq) GetName() string {
if x != nil {
- return x.Hash
+ return x.Name
}
return ""
}
-type GetHashInfoResp struct {
+type AccessURLResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash"`
- Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size"`
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"`
+ ExpireTime int64 `protobuf:"varint,2,opt,name=expireTime,proto3" json:"expireTime"`
}
-func (x *GetHashInfoResp) Reset() {
- *x = GetHashInfoResp{}
+func (x *AccessURLResp) Reset() {
+ *x = AccessURLResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[10]
+ mi := &file_third_third_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *GetHashInfoResp) String() string {
+func (x *AccessURLResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*GetHashInfoResp) ProtoMessage() {}
+func (*AccessURLResp) ProtoMessage() {}
-func (x *GetHashInfoResp) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[10]
+func (x *AccessURLResp) ProtoReflect() protoreflect.Message {
+ mi := &file_third_third_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -727,21 +964,21 @@ func (x *GetHashInfoResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use GetHashInfoResp.ProtoReflect.Descriptor instead.
-func (*GetHashInfoResp) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{10}
+// Deprecated: Use AccessURLResp.ProtoReflect.Descriptor instead.
+func (*AccessURLResp) Descriptor() ([]byte, []int) {
+ return file_third_third_proto_rawDescGZIP(), []int{15}
}
-func (x *GetHashInfoResp) GetHash() string {
+func (x *AccessURLResp) GetUrl() string {
if x != nil {
- return x.Hash
+ return x.Url
}
return ""
}
-func (x *GetHashInfoResp) GetSize() int64 {
+func (x *AccessURLResp) GetExpireTime() int64 {
if x != nil {
- return x.Size
+ return x.ExpireTime
}
return 0
}
@@ -760,7 +997,7 @@ type FcmUpdateTokenReq struct {
func (x *FcmUpdateTokenReq) Reset() {
*x = FcmUpdateTokenReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[11]
+ mi := &file_third_third_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -773,7 +1010,7 @@ func (x *FcmUpdateTokenReq) String() string {
func (*FcmUpdateTokenReq) ProtoMessage() {}
func (x *FcmUpdateTokenReq) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[11]
+ mi := &file_third_third_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -786,7 +1023,7 @@ func (x *FcmUpdateTokenReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use FcmUpdateTokenReq.ProtoReflect.Descriptor instead.
func (*FcmUpdateTokenReq) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{11}
+ return file_third_third_proto_rawDescGZIP(), []int{16}
}
func (x *FcmUpdateTokenReq) GetPlatformID() int32 {
@@ -826,7 +1063,7 @@ type FcmUpdateTokenResp struct {
func (x *FcmUpdateTokenResp) Reset() {
*x = FcmUpdateTokenResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[12]
+ mi := &file_third_third_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -839,7 +1076,7 @@ func (x *FcmUpdateTokenResp) String() string {
func (*FcmUpdateTokenResp) ProtoMessage() {}
func (x *FcmUpdateTokenResp) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[12]
+ mi := &file_third_third_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -852,7 +1089,7 @@ func (x *FcmUpdateTokenResp) ProtoReflect() protoreflect.Message {
// Deprecated: Use FcmUpdateTokenResp.ProtoReflect.Descriptor instead.
func (*FcmUpdateTokenResp) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{12}
+ return file_third_third_proto_rawDescGZIP(), []int{17}
}
type SetAppBadgeReq struct {
@@ -867,7 +1104,7 @@ type SetAppBadgeReq struct {
func (x *SetAppBadgeReq) Reset() {
*x = SetAppBadgeReq{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[13]
+ mi := &file_third_third_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -880,7 +1117,7 @@ func (x *SetAppBadgeReq) String() string {
func (*SetAppBadgeReq) ProtoMessage() {}
func (x *SetAppBadgeReq) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[13]
+ mi := &file_third_third_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -893,7 +1130,7 @@ func (x *SetAppBadgeReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetAppBadgeReq.ProtoReflect.Descriptor instead.
func (*SetAppBadgeReq) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{13}
+ return file_third_third_proto_rawDescGZIP(), []int{18}
}
func (x *SetAppBadgeReq) GetUserID() string {
@@ -919,7 +1156,7 @@ type SetAppBadgeResp struct {
func (x *SetAppBadgeResp) Reset() {
*x = SetAppBadgeResp{}
if protoimpl.UnsafeEnabled {
- mi := &file_third_third_proto_msgTypes[14]
+ mi := &file_third_third_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -932,7 +1169,7 @@ func (x *SetAppBadgeResp) String() string {
func (*SetAppBadgeResp) ProtoMessage() {}
func (x *SetAppBadgeResp) ProtoReflect() protoreflect.Message {
- mi := &file_third_third_proto_msgTypes[14]
+ mi := &file_third_third_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -945,7 +1182,7 @@ func (x *SetAppBadgeResp) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetAppBadgeResp.ProtoReflect.Descriptor instead.
func (*SetAppBadgeResp) Descriptor() ([]byte, []int) {
- return file_third_third_proto_rawDescGZIP(), []int{14}
+ return file_third_third_proto_rawDescGZIP(), []int{19}
}
var File_third_third_proto protoreflect.FileDescriptor
@@ -953,133 +1190,178 @@ var File_third_third_proto protoreflect.FileDescriptor
var file_third_third_proto_rawDesc = []byte{
0x0a, 0x11, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2f, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x12, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x22, 0xc3, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c,
- 0x79, 0x50, 0x75, 0x74, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x75, 0x74, 0x49, 0x44,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x75, 0x74, 0x49, 0x44, 0x12, 0x12, 0x0a,
- 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
- 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
- 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x66,
- 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x0c, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12,
- 0x1c, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xb4, 0x01,
- 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10,
- 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c,
- 0x12, 0x14, 0x0a, 0x05, 0x70, 0x75, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x05, 0x70, 0x75, 0x74, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65,
- 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x72,
- 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61,
- 0x6c, 0x69, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x76,
- 0x61, 0x6c, 0x69, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x74, 0x55,
- 0x52, 0x4c, 0x73, 0x48, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70,
- 0x75, 0x74, 0x55, 0x52, 0x4c, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x75,
- 0x74, 0x55, 0x52, 0x4c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x75, 0x74,
- 0x55, 0x52, 0x4c, 0x73, 0x22, 0x25, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x50,
- 0x75, 0x74, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x75, 0x74, 0x49, 0x44, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x75, 0x74, 0x49, 0x44, 0x22, 0x22, 0x0a, 0x0e, 0x43,
- 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a,
- 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22,
- 0x59, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74,
- 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,
- 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x46, 0x0a, 0x0a, 0x47, 0x65,
- 0x74, 0x55, 0x72, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69,
- 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12,
- 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61,
- 0x73, 0x68, 0x22, 0x21, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x75, 0x74, 0x52, 0x65, 0x71, 0x12,
- 0x14, 0x0a, 0x05, 0x70, 0x75, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
- 0x70, 0x75, 0x74, 0x49, 0x44, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x74, 0x46,
- 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68,
- 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12,
- 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72,
- 0x6c, 0x22, 0x90, 0x02, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70,
- 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0c,
- 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x0c, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65,
- 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79,
- 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x69, 0x6d, 0x65,
- 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x74, 0x55, 0x52, 0x4c, 0x73, 0x48, 0x61, 0x73, 0x68, 0x18,
- 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x75, 0x74, 0x55, 0x52, 0x4c, 0x73, 0x48, 0x61,
- 0x73, 0x68, 0x12, 0x40, 0x0a, 0x09, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18,
- 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75,
- 0x74, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x66, 0x72, 0x61, 0x67, 0x6d,
- 0x65, 0x6e, 0x74, 0x73, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x48, 0x61, 0x73, 0x68, 0x49,
- 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x39, 0x0a, 0x0f, 0x47, 0x65,
- 0x74, 0x48, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a,
- 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73,
- 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x11, 0x46, 0x63, 0x6d, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x70,
- 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x66,
- 0x63, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66,
- 0x63, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75,
- 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
- 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d,
- 0x65, 0x22, 0x14, 0x0a, 0x12, 0x46, 0x63, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f,
- 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x41, 0x70,
- 0x70, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
- 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
- 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f,
- 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x55, 0x6e,
- 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x53, 0x65, 0x74,
- 0x41, 0x70, 0x70, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x32, 0xce, 0x04, 0x0a,
- 0x05, 0x74, 0x68, 0x69, 0x72, 0x64, 0x12, 0x4d, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50,
- 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x75, 0x74,
- 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x75,
- 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x47, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x50, 0x75, 0x74, 0x12,
+ 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x22, 0x35, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xa8,
+ 0x01, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70,
+ 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75,
+ 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x33, 0x0a,
+ 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f,
+ 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72,
+ 0x64, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x05, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xc1, 0x01, 0x0a, 0x0d, 0x41, 0x75,
+ 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75,
+ 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x33, 0x0a,
+ 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f,
+ 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72,
+ 0x64, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x05, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x05, 0x70, 0x61, 0x72,
+ 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
+ 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x53, 0x69,
+ 0x67, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x22, 0x0e, 0x0a,
+ 0x0c, 0x50, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x22, 0x73, 0x0a,
+ 0x0d, 0x50, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x20,
+ 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65,
+ 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69,
+ 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x69, 0x7a, 0x65,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x69,
+ 0x7a, 0x65, 0x22, 0x21, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65,
+ 0x71, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x1a, 0x49, 0x6e,
+ 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55,
+ 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04,
+ 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65,
+ 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
+ 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73,
+ 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, 0x12,
+ 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
+ 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x54, 0x79, 0x70, 0x65, 0x22, 0x7b, 0x0a, 0x0a, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e,
+ 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x12, 0x1a,
+ 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x08, 0x70, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x73, 0x69,
+ 0x67, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
+ 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x41, 0x75,
+ 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x73, 0x52, 0x04, 0x73, 0x69, 0x67,
+ 0x6e, 0x22, 0x67, 0x0a, 0x1b, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70,
+ 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
+ 0x72, 0x6c, 0x12, 0x36, 0x0a, 0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e,
+ 0x66, 0x6f, 0x52, 0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x4b, 0x0a, 0x0b, 0x41, 0x75,
+ 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74,
+ 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x68,
+ 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x33, 0x0a, 0x05, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x4b,
+ 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12,
+ 0x35, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x1d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74,
- 0x68, 0x69, 0x72, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1e,
+ 0x68, 0x69, 0x72, 0x64, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18,
+ 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x50,
+ 0x61, 0x72, 0x74, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x1a, 0x43,
+ 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74,
+ 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+ 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
+ 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
+ 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f,
+ 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x22, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x41, 0x0a, 0x0d,
+ 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a,
+ 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12,
+ 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22,
+ 0x89, 0x01, 0x0a, 0x11, 0x46, 0x63, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b,
+ 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
+ 0x6d, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66,
+ 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x63, 0x6d, 0x54, 0x6f, 0x6b, 0x65,
+ 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x63, 0x6d, 0x54, 0x6f, 0x6b, 0x65,
+ 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x65,
+ 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x46,
+ 0x63, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x22, 0x50, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x61, 0x64, 0x67, 0x65,
+ 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x61,
+ 0x70, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f,
+ 0x75, 0x6e, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x61, 0x64,
+ 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x32, 0xfa, 0x05, 0x0a, 0x05, 0x74, 0x68, 0x69, 0x72, 0x64,
+ 0x12, 0x50, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x20, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69,
+ 0x72, 0x64, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a,
+ 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74,
+ 0x68, 0x69, 0x72, 0x64, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65,
+ 0x73, 0x70, 0x12, 0x4d, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f,
0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68,
- 0x69, 0x72, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x53,
- 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x50, 0x75, 0x74, 0x12, 0x21, 0x2e, 0x4f,
+ 0x69, 0x72, 0x64, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x1a,
+ 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74,
+ 0x68, 0x69, 0x72, 0x64, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x12, 0x7a, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2e, 0x2e, 0x4f,
0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72,
- 0x64, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x50, 0x75, 0x74, 0x52, 0x65, 0x71, 0x1a,
- 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74,
- 0x68, 0x69, 0x72, 0x64, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x50, 0x75, 0x74, 0x52,
- 0x65, 0x73, 0x70, 0x12, 0x47, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x2e,
- 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69,
- 0x72, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x4f,
+ 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70,
+ 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f,
0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72,
- 0x64, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x56, 0x0a, 0x0b,
- 0x47, 0x65, 0x74, 0x48, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x2e, 0x4f, 0x70,
- 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64,
- 0x2e, 0x47, 0x65, 0x74, 0x48, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a,
- 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74,
- 0x68, 0x69, 0x72, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f,
- 0x52, 0x65, 0x73, 0x70, 0x12, 0x5f, 0x0a, 0x0e, 0x46, 0x63, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x46, 0x63, 0x6d, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e,
- 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69,
- 0x72, 0x64, 0x2e, 0x46, 0x63, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x56, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42,
- 0x61, 0x64, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x70, 0x70,
- 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
- 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x53, 0x65,
- 0x74, 0x41, 0x70, 0x70, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, 0x35, 0x5a,
- 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x70, 0x65, 0x6e,
- 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x2d, 0x49, 0x4d, 0x2d, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74,
- 0x68, 0x69, 0x72, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70,
+ 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d, 0x0a,
+ 0x08, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x41,
+ 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e,
+ 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7a, 0x0a, 0x17,
+ 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72,
+ 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x43, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70,
+ 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x43, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70,
+ 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x50, 0x0a, 0x09, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x55, 0x52, 0x4c, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5f, 0x0a, 0x0e, 0x46, 0x63,
+ 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x25, 0x2e, 0x4f,
+ 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72,
+ 0x64, 0x2e, 0x46, 0x63, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
+ 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e, 0x46, 0x63, 0x6d, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x56, 0x0a, 0x0b, 0x53,
+ 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x61, 0x64, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65,
+ 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2e,
+ 0x53, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x23,
+ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x74, 0x68,
+ 0x69, 0x72, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x4f, 0x70, 0x65, 0x6e,
+ 0x2d, 0x49, 0x4d, 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x68, 0x69, 0x72, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x33,
}
var (
@@ -1094,45 +1376,61 @@ func file_third_third_proto_rawDescGZIP() []byte {
return file_third_third_proto_rawDescData
}
-var file_third_third_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
+var file_third_third_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_third_third_proto_goTypes = []interface{}{
- (*ApplyPutReq)(nil), // 0: OpenIMServer.third.ApplyPutReq
- (*ApplyPutResp)(nil), // 1: OpenIMServer.third.ApplyPutResp
- (*ConfirmPutReq)(nil), // 2: OpenIMServer.third.ConfirmPutReq
- (*ConfirmPutResp)(nil), // 3: OpenIMServer.third.ConfirmPutResp
- (*GetUrlReq)(nil), // 4: OpenIMServer.third.GetUrlReq
- (*GetUrlResp)(nil), // 5: OpenIMServer.third.GetUrlResp
- (*GetPutReq)(nil), // 6: OpenIMServer.third.GetPutReq
- (*GetPutFragment)(nil), // 7: OpenIMServer.third.GetPutFragment
- (*GetPutResp)(nil), // 8: OpenIMServer.third.GetPutResp
- (*GetHashInfoReq)(nil), // 9: OpenIMServer.third.GetHashInfoReq
- (*GetHashInfoResp)(nil), // 10: OpenIMServer.third.GetHashInfoResp
- (*FcmUpdateTokenReq)(nil), // 11: OpenIMServer.third.FcmUpdateTokenReq
- (*FcmUpdateTokenResp)(nil), // 12: OpenIMServer.third.FcmUpdateTokenResp
- (*SetAppBadgeReq)(nil), // 13: OpenIMServer.third.SetAppBadgeReq
- (*SetAppBadgeResp)(nil), // 14: OpenIMServer.third.SetAppBadgeResp
+ (*KeyValues)(nil), // 0: OpenIMServer.third.KeyValues
+ (*SignPart)(nil), // 1: OpenIMServer.third.SignPart
+ (*AuthSignParts)(nil), // 2: OpenIMServer.third.AuthSignParts
+ (*PartLimitReq)(nil), // 3: OpenIMServer.third.PartLimitReq
+ (*PartLimitResp)(nil), // 4: OpenIMServer.third.PartLimitResp
+ (*PartSizeReq)(nil), // 5: OpenIMServer.third.PartSizeReq
+ (*PartSizeResp)(nil), // 6: OpenIMServer.third.PartSizeResp
+ (*InitiateMultipartUploadReq)(nil), // 7: OpenIMServer.third.InitiateMultipartUploadReq
+ (*UploadInfo)(nil), // 8: OpenIMServer.third.UploadInfo
+ (*InitiateMultipartUploadResp)(nil), // 9: OpenIMServer.third.InitiateMultipartUploadResp
+ (*AuthSignReq)(nil), // 10: OpenIMServer.third.AuthSignReq
+ (*AuthSignResp)(nil), // 11: OpenIMServer.third.AuthSignResp
+ (*CompleteMultipartUploadReq)(nil), // 12: OpenIMServer.third.CompleteMultipartUploadReq
+ (*CompleteMultipartUploadResp)(nil), // 13: OpenIMServer.third.CompleteMultipartUploadResp
+ (*AccessURLReq)(nil), // 14: OpenIMServer.third.AccessURLReq
+ (*AccessURLResp)(nil), // 15: OpenIMServer.third.AccessURLResp
+ (*FcmUpdateTokenReq)(nil), // 16: OpenIMServer.third.FcmUpdateTokenReq
+ (*FcmUpdateTokenResp)(nil), // 17: OpenIMServer.third.FcmUpdateTokenResp
+ (*SetAppBadgeReq)(nil), // 18: OpenIMServer.third.SetAppBadgeReq
+ (*SetAppBadgeResp)(nil), // 19: OpenIMServer.third.SetAppBadgeResp
}
var file_third_third_proto_depIdxs = []int32{
- 7, // 0: OpenIMServer.third.GetPutResp.fragments:type_name -> OpenIMServer.third.GetPutFragment
- 0, // 1: OpenIMServer.third.third.ApplyPut:input_type -> OpenIMServer.third.ApplyPutReq
- 6, // 2: OpenIMServer.third.third.GetPut:input_type -> OpenIMServer.third.GetPutReq
- 2, // 3: OpenIMServer.third.third.ConfirmPut:input_type -> OpenIMServer.third.ConfirmPutReq
- 4, // 4: OpenIMServer.third.third.GetUrl:input_type -> OpenIMServer.third.GetUrlReq
- 9, // 5: OpenIMServer.third.third.GetHashInfo:input_type -> OpenIMServer.third.GetHashInfoReq
- 11, // 6: OpenIMServer.third.third.FcmUpdateToken:input_type -> OpenIMServer.third.FcmUpdateTokenReq
- 13, // 7: OpenIMServer.third.third.SetAppBadge:input_type -> OpenIMServer.third.SetAppBadgeReq
- 1, // 8: OpenIMServer.third.third.ApplyPut:output_type -> OpenIMServer.third.ApplyPutResp
- 8, // 9: OpenIMServer.third.third.GetPut:output_type -> OpenIMServer.third.GetPutResp
- 3, // 10: OpenIMServer.third.third.ConfirmPut:output_type -> OpenIMServer.third.ConfirmPutResp
- 5, // 11: OpenIMServer.third.third.GetUrl:output_type -> OpenIMServer.third.GetUrlResp
- 10, // 12: OpenIMServer.third.third.GetHashInfo:output_type -> OpenIMServer.third.GetHashInfoResp
- 12, // 13: OpenIMServer.third.third.FcmUpdateToken:output_type -> OpenIMServer.third.FcmUpdateTokenResp
- 14, // 14: OpenIMServer.third.third.SetAppBadge:output_type -> OpenIMServer.third.SetAppBadgeResp
- 8, // [8:15] is the sub-list for method output_type
- 1, // [1:8] is the sub-list for method input_type
- 1, // [1:1] is the sub-list for extension type_name
- 1, // [1:1] is the sub-list for extension extendee
- 0, // [0:1] is the sub-list for field type_name
+ 0, // 0: OpenIMServer.third.SignPart.query:type_name -> OpenIMServer.third.KeyValues
+ 0, // 1: OpenIMServer.third.SignPart.header:type_name -> OpenIMServer.third.KeyValues
+ 0, // 2: OpenIMServer.third.AuthSignParts.query:type_name -> OpenIMServer.third.KeyValues
+ 0, // 3: OpenIMServer.third.AuthSignParts.header:type_name -> OpenIMServer.third.KeyValues
+ 1, // 4: OpenIMServer.third.AuthSignParts.parts:type_name -> OpenIMServer.third.SignPart
+ 2, // 5: OpenIMServer.third.UploadInfo.sign:type_name -> OpenIMServer.third.AuthSignParts
+ 8, // 6: OpenIMServer.third.InitiateMultipartUploadResp.upload:type_name -> OpenIMServer.third.UploadInfo
+ 0, // 7: OpenIMServer.third.AuthSignResp.query:type_name -> OpenIMServer.third.KeyValues
+ 0, // 8: OpenIMServer.third.AuthSignResp.header:type_name -> OpenIMServer.third.KeyValues
+ 1, // 9: OpenIMServer.third.AuthSignResp.parts:type_name -> OpenIMServer.third.SignPart
+ 3, // 10: OpenIMServer.third.third.PartLimit:input_type -> OpenIMServer.third.PartLimitReq
+ 5, // 11: OpenIMServer.third.third.PartSize:input_type -> OpenIMServer.third.PartSizeReq
+ 7, // 12: OpenIMServer.third.third.InitiateMultipartUpload:input_type -> OpenIMServer.third.InitiateMultipartUploadReq
+ 10, // 13: OpenIMServer.third.third.AuthSign:input_type -> OpenIMServer.third.AuthSignReq
+ 12, // 14: OpenIMServer.third.third.CompleteMultipartUpload:input_type -> OpenIMServer.third.CompleteMultipartUploadReq
+ 14, // 15: OpenIMServer.third.third.AccessURL:input_type -> OpenIMServer.third.AccessURLReq
+ 16, // 16: OpenIMServer.third.third.FcmUpdateToken:input_type -> OpenIMServer.third.FcmUpdateTokenReq
+ 18, // 17: OpenIMServer.third.third.SetAppBadge:input_type -> OpenIMServer.third.SetAppBadgeReq
+ 4, // 18: OpenIMServer.third.third.PartLimit:output_type -> OpenIMServer.third.PartLimitResp
+ 6, // 19: OpenIMServer.third.third.PartSize:output_type -> OpenIMServer.third.PartSizeResp
+ 9, // 20: OpenIMServer.third.third.InitiateMultipartUpload:output_type -> OpenIMServer.third.InitiateMultipartUploadResp
+ 11, // 21: OpenIMServer.third.third.AuthSign:output_type -> OpenIMServer.third.AuthSignResp
+ 13, // 22: OpenIMServer.third.third.CompleteMultipartUpload:output_type -> OpenIMServer.third.CompleteMultipartUploadResp
+ 15, // 23: OpenIMServer.third.third.AccessURL:output_type -> OpenIMServer.third.AccessURLResp
+ 17, // 24: OpenIMServer.third.third.FcmUpdateToken:output_type -> OpenIMServer.third.FcmUpdateTokenResp
+ 19, // 25: OpenIMServer.third.third.SetAppBadge:output_type -> OpenIMServer.third.SetAppBadgeResp
+ 18, // [18:26] is the sub-list for method output_type
+ 10, // [10:18] is the sub-list for method input_type
+ 10, // [10:10] is the sub-list for extension type_name
+ 10, // [10:10] is the sub-list for extension extendee
+ 0, // [0:10] is the sub-list for field type_name
}
func init() { file_third_third_proto_init() }
@@ -1142,7 +1440,7 @@ func file_third_third_proto_init() {
}
if !protoimpl.UnsafeEnabled {
file_third_third_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ApplyPutReq); i {
+ switch v := v.(*KeyValues); i {
case 0:
return &v.state
case 1:
@@ -1154,7 +1452,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ApplyPutResp); i {
+ switch v := v.(*SignPart); i {
case 0:
return &v.state
case 1:
@@ -1166,7 +1464,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ConfirmPutReq); i {
+ switch v := v.(*AuthSignParts); i {
case 0:
return &v.state
case 1:
@@ -1178,7 +1476,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ConfirmPutResp); i {
+ switch v := v.(*PartLimitReq); i {
case 0:
return &v.state
case 1:
@@ -1190,7 +1488,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetUrlReq); i {
+ switch v := v.(*PartLimitResp); i {
case 0:
return &v.state
case 1:
@@ -1202,7 +1500,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetUrlResp); i {
+ switch v := v.(*PartSizeReq); i {
case 0:
return &v.state
case 1:
@@ -1214,7 +1512,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetPutReq); i {
+ switch v := v.(*PartSizeResp); i {
case 0:
return &v.state
case 1:
@@ -1226,7 +1524,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetPutFragment); i {
+ switch v := v.(*InitiateMultipartUploadReq); i {
case 0:
return &v.state
case 1:
@@ -1238,7 +1536,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetPutResp); i {
+ switch v := v.(*UploadInfo); i {
case 0:
return &v.state
case 1:
@@ -1250,7 +1548,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetHashInfoReq); i {
+ switch v := v.(*InitiateMultipartUploadResp); i {
case 0:
return &v.state
case 1:
@@ -1262,7 +1560,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetHashInfoResp); i {
+ switch v := v.(*AuthSignReq); i {
case 0:
return &v.state
case 1:
@@ -1274,7 +1572,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*FcmUpdateTokenReq); i {
+ switch v := v.(*AuthSignResp); i {
case 0:
return &v.state
case 1:
@@ -1286,7 +1584,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*FcmUpdateTokenResp); i {
+ switch v := v.(*CompleteMultipartUploadReq); i {
case 0:
return &v.state
case 1:
@@ -1298,7 +1596,7 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SetAppBadgeReq); i {
+ switch v := v.(*CompleteMultipartUploadResp); i {
case 0:
return &v.state
case 1:
@@ -1310,6 +1608,66 @@ func file_third_third_proto_init() {
}
}
file_third_third_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AccessURLReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_third_third_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AccessURLResp); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_third_third_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FcmUpdateTokenReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_third_third_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FcmUpdateTokenResp); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_third_third_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SetAppBadgeReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_third_third_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SetAppBadgeResp); i {
case 0:
return &v.state
@@ -1328,7 +1686,7 @@ func file_third_third_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_third_third_proto_rawDesc,
NumEnums: 0,
- NumMessages: 15,
+ NumMessages: 20,
NumExtensions: 0,
NumServices: 1,
},
@@ -1354,11 +1712,12 @@ const _ = grpc.SupportPackageIsVersion6
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ThirdClient interface {
- ApplyPut(ctx context.Context, in *ApplyPutReq, opts ...grpc.CallOption) (*ApplyPutResp, error)
- GetPut(ctx context.Context, in *GetPutReq, opts ...grpc.CallOption) (*GetPutResp, error)
- ConfirmPut(ctx context.Context, in *ConfirmPutReq, opts ...grpc.CallOption) (*ConfirmPutResp, error)
- GetUrl(ctx context.Context, in *GetUrlReq, opts ...grpc.CallOption) (*GetUrlResp, error)
- GetHashInfo(ctx context.Context, in *GetHashInfoReq, opts ...grpc.CallOption) (*GetHashInfoResp, error)
+ PartLimit(ctx context.Context, in *PartLimitReq, opts ...grpc.CallOption) (*PartLimitResp, error)
+ PartSize(ctx context.Context, in *PartSizeReq, opts ...grpc.CallOption) (*PartSizeResp, error)
+ InitiateMultipartUpload(ctx context.Context, in *InitiateMultipartUploadReq, opts ...grpc.CallOption) (*InitiateMultipartUploadResp, error)
+ AuthSign(ctx context.Context, in *AuthSignReq, opts ...grpc.CallOption) (*AuthSignResp, error)
+ CompleteMultipartUpload(ctx context.Context, in *CompleteMultipartUploadReq, opts ...grpc.CallOption) (*CompleteMultipartUploadResp, error)
+ AccessURL(ctx context.Context, in *AccessURLReq, opts ...grpc.CallOption) (*AccessURLResp, error)
FcmUpdateToken(ctx context.Context, in *FcmUpdateTokenReq, opts ...grpc.CallOption) (*FcmUpdateTokenResp, error)
SetAppBadge(ctx context.Context, in *SetAppBadgeReq, opts ...grpc.CallOption) (*SetAppBadgeResp, error)
}
@@ -1371,45 +1730,54 @@ func NewThirdClient(cc grpc.ClientConnInterface) ThirdClient {
return &thirdClient{cc}
}
-func (c *thirdClient) ApplyPut(ctx context.Context, in *ApplyPutReq, opts ...grpc.CallOption) (*ApplyPutResp, error) {
- out := new(ApplyPutResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/ApplyPut", in, out, opts...)
+func (c *thirdClient) PartLimit(ctx context.Context, in *PartLimitReq, opts ...grpc.CallOption) (*PartLimitResp, error) {
+ out := new(PartLimitResp)
+ err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/PartLimit", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
-func (c *thirdClient) GetPut(ctx context.Context, in *GetPutReq, opts ...grpc.CallOption) (*GetPutResp, error) {
- out := new(GetPutResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/GetPut", in, out, opts...)
+func (c *thirdClient) PartSize(ctx context.Context, in *PartSizeReq, opts ...grpc.CallOption) (*PartSizeResp, error) {
+ out := new(PartSizeResp)
+ err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/PartSize", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
-func (c *thirdClient) ConfirmPut(ctx context.Context, in *ConfirmPutReq, opts ...grpc.CallOption) (*ConfirmPutResp, error) {
- out := new(ConfirmPutResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/ConfirmPut", in, out, opts...)
+func (c *thirdClient) InitiateMultipartUpload(ctx context.Context, in *InitiateMultipartUploadReq, opts ...grpc.CallOption) (*InitiateMultipartUploadResp, error) {
+ out := new(InitiateMultipartUploadResp)
+ err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/InitiateMultipartUpload", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
-func (c *thirdClient) GetUrl(ctx context.Context, in *GetUrlReq, opts ...grpc.CallOption) (*GetUrlResp, error) {
- out := new(GetUrlResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/GetUrl", in, out, opts...)
+func (c *thirdClient) AuthSign(ctx context.Context, in *AuthSignReq, opts ...grpc.CallOption) (*AuthSignResp, error) {
+ out := new(AuthSignResp)
+ err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/AuthSign", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
-func (c *thirdClient) GetHashInfo(ctx context.Context, in *GetHashInfoReq, opts ...grpc.CallOption) (*GetHashInfoResp, error) {
- out := new(GetHashInfoResp)
- err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/GetHashInfo", in, out, opts...)
+func (c *thirdClient) CompleteMultipartUpload(ctx context.Context, in *CompleteMultipartUploadReq, opts ...grpc.CallOption) (*CompleteMultipartUploadResp, error) {
+ out := new(CompleteMultipartUploadResp)
+ err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/CompleteMultipartUpload", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *thirdClient) AccessURL(ctx context.Context, in *AccessURLReq, opts ...grpc.CallOption) (*AccessURLResp, error) {
+ out := new(AccessURLResp)
+ err := c.cc.Invoke(ctx, "/OpenIMServer.third.third/AccessURL", in, out, opts...)
if err != nil {
return nil, err
}
@@ -1436,11 +1804,12 @@ func (c *thirdClient) SetAppBadge(ctx context.Context, in *SetAppBadgeReq, opts
// ThirdServer is the server API for Third service.
type ThirdServer interface {
- ApplyPut(context.Context, *ApplyPutReq) (*ApplyPutResp, error)
- GetPut(context.Context, *GetPutReq) (*GetPutResp, error)
- ConfirmPut(context.Context, *ConfirmPutReq) (*ConfirmPutResp, error)
- GetUrl(context.Context, *GetUrlReq) (*GetUrlResp, error)
- GetHashInfo(context.Context, *GetHashInfoReq) (*GetHashInfoResp, error)
+ PartLimit(context.Context, *PartLimitReq) (*PartLimitResp, error)
+ PartSize(context.Context, *PartSizeReq) (*PartSizeResp, error)
+ InitiateMultipartUpload(context.Context, *InitiateMultipartUploadReq) (*InitiateMultipartUploadResp, error)
+ AuthSign(context.Context, *AuthSignReq) (*AuthSignResp, error)
+ CompleteMultipartUpload(context.Context, *CompleteMultipartUploadReq) (*CompleteMultipartUploadResp, error)
+ AccessURL(context.Context, *AccessURLReq) (*AccessURLResp, error)
FcmUpdateToken(context.Context, *FcmUpdateTokenReq) (*FcmUpdateTokenResp, error)
SetAppBadge(context.Context, *SetAppBadgeReq) (*SetAppBadgeResp, error)
}
@@ -1449,20 +1818,23 @@ type ThirdServer interface {
type UnimplementedThirdServer struct {
}
-func (*UnimplementedThirdServer) ApplyPut(context.Context, *ApplyPutReq) (*ApplyPutResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method ApplyPut not implemented")
+func (*UnimplementedThirdServer) PartLimit(context.Context, *PartLimitReq) (*PartLimitResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method PartLimit not implemented")
}
-func (*UnimplementedThirdServer) GetPut(context.Context, *GetPutReq) (*GetPutResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetPut not implemented")
+func (*UnimplementedThirdServer) PartSize(context.Context, *PartSizeReq) (*PartSizeResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method PartSize not implemented")
}
-func (*UnimplementedThirdServer) ConfirmPut(context.Context, *ConfirmPutReq) (*ConfirmPutResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method ConfirmPut not implemented")
+func (*UnimplementedThirdServer) InitiateMultipartUpload(context.Context, *InitiateMultipartUploadReq) (*InitiateMultipartUploadResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method InitiateMultipartUpload not implemented")
}
-func (*UnimplementedThirdServer) GetUrl(context.Context, *GetUrlReq) (*GetUrlResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetUrl not implemented")
+func (*UnimplementedThirdServer) AuthSign(context.Context, *AuthSignReq) (*AuthSignResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method AuthSign not implemented")
}
-func (*UnimplementedThirdServer) GetHashInfo(context.Context, *GetHashInfoReq) (*GetHashInfoResp, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetHashInfo not implemented")
+func (*UnimplementedThirdServer) CompleteMultipartUpload(context.Context, *CompleteMultipartUploadReq) (*CompleteMultipartUploadResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method CompleteMultipartUpload not implemented")
+}
+func (*UnimplementedThirdServer) AccessURL(context.Context, *AccessURLReq) (*AccessURLResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method AccessURL not implemented")
}
func (*UnimplementedThirdServer) FcmUpdateToken(context.Context, *FcmUpdateTokenReq) (*FcmUpdateTokenResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method FcmUpdateToken not implemented")
@@ -1475,92 +1847,110 @@ func RegisterThirdServer(s *grpc.Server, srv ThirdServer) {
s.RegisterService(&_Third_serviceDesc, srv)
}
-func _Third_ApplyPut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(ApplyPutReq)
+func _Third_PartLimit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(PartLimitReq)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ThirdServer).PartLimit(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/OpenIMServer.third.third/PartLimit",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ThirdServer).PartLimit(ctx, req.(*PartLimitReq))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Third_PartSize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(PartSizeReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
- return srv.(ThirdServer).ApplyPut(ctx, in)
+ return srv.(ThirdServer).PartSize(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
- FullMethod: "/OpenIMServer.third.third/ApplyPut",
+ FullMethod: "/OpenIMServer.third.third/PartSize",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ThirdServer).ApplyPut(ctx, req.(*ApplyPutReq))
+ return srv.(ThirdServer).PartSize(ctx, req.(*PartSizeReq))
}
return interceptor(ctx, in, info, handler)
}
-func _Third_GetPut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(GetPutReq)
+func _Third_InitiateMultipartUpload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(InitiateMultipartUploadReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
- return srv.(ThirdServer).GetPut(ctx, in)
+ return srv.(ThirdServer).InitiateMultipartUpload(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
- FullMethod: "/OpenIMServer.third.third/GetPut",
+ FullMethod: "/OpenIMServer.third.third/InitiateMultipartUpload",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ThirdServer).GetPut(ctx, req.(*GetPutReq))
+ return srv.(ThirdServer).InitiateMultipartUpload(ctx, req.(*InitiateMultipartUploadReq))
}
return interceptor(ctx, in, info, handler)
}
-func _Third_ConfirmPut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(ConfirmPutReq)
+func _Third_AuthSign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(AuthSignReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
- return srv.(ThirdServer).ConfirmPut(ctx, in)
+ return srv.(ThirdServer).AuthSign(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
- FullMethod: "/OpenIMServer.third.third/ConfirmPut",
+ FullMethod: "/OpenIMServer.third.third/AuthSign",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ThirdServer).ConfirmPut(ctx, req.(*ConfirmPutReq))
+ return srv.(ThirdServer).AuthSign(ctx, req.(*AuthSignReq))
}
return interceptor(ctx, in, info, handler)
}
-func _Third_GetUrl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(GetUrlReq)
+func _Third_CompleteMultipartUpload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(CompleteMultipartUploadReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
- return srv.(ThirdServer).GetUrl(ctx, in)
+ return srv.(ThirdServer).CompleteMultipartUpload(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
- FullMethod: "/OpenIMServer.third.third/GetUrl",
+ FullMethod: "/OpenIMServer.third.third/CompleteMultipartUpload",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ThirdServer).GetUrl(ctx, req.(*GetUrlReq))
+ return srv.(ThirdServer).CompleteMultipartUpload(ctx, req.(*CompleteMultipartUploadReq))
}
return interceptor(ctx, in, info, handler)
}
-func _Third_GetHashInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(GetHashInfoReq)
+func _Third_AccessURL_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(AccessURLReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
- return srv.(ThirdServer).GetHashInfo(ctx, in)
+ return srv.(ThirdServer).AccessURL(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
- FullMethod: "/OpenIMServer.third.third/GetHashInfo",
+ FullMethod: "/OpenIMServer.third.third/AccessURL",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ThirdServer).GetHashInfo(ctx, req.(*GetHashInfoReq))
+ return srv.(ThirdServer).AccessURL(ctx, req.(*AccessURLReq))
}
return interceptor(ctx, in, info, handler)
}
@@ -1606,24 +1996,28 @@ var _Third_serviceDesc = grpc.ServiceDesc{
HandlerType: (*ThirdServer)(nil),
Methods: []grpc.MethodDesc{
{
- MethodName: "ApplyPut",
- Handler: _Third_ApplyPut_Handler,
+ MethodName: "PartLimit",
+ Handler: _Third_PartLimit_Handler,
+ },
+ {
+ MethodName: "PartSize",
+ Handler: _Third_PartSize_Handler,
},
{
- MethodName: "GetPut",
- Handler: _Third_GetPut_Handler,
+ MethodName: "InitiateMultipartUpload",
+ Handler: _Third_InitiateMultipartUpload_Handler,
},
{
- MethodName: "ConfirmPut",
- Handler: _Third_ConfirmPut_Handler,
+ MethodName: "AuthSign",
+ Handler: _Third_AuthSign_Handler,
},
{
- MethodName: "GetUrl",
- Handler: _Third_GetUrl_Handler,
+ MethodName: "CompleteMultipartUpload",
+ Handler: _Third_CompleteMultipartUpload_Handler,
},
{
- MethodName: "GetHashInfo",
- Handler: _Third_GetHashInfo_Handler,
+ MethodName: "AccessURL",
+ Handler: _Third_AccessURL_Handler,
},
{
MethodName: "FcmUpdateToken",
diff --git a/pkg/proto/third/third.proto b/pkg/proto/third/third.proto
index 7021dfaef..4cb2a3a4a 100644
--- a/pkg/proto/third/third.proto
+++ b/pkg/proto/third/third.proto
@@ -2,80 +2,94 @@ syntax = "proto3";
package OpenIMServer.third;
option go_package = "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/third";
-message ApplyPutReq {
- string putID = 1;
- string name = 2;
- int64 size = 3;
- string hash = 4;
- string contentType = 5;
- int64 fragmentSize = 6;
- int64 validTime = 7; // 文件有效时间
+message KeyValues {
+ string key = 1;
+ repeated string values = 2;
}
-message ApplyPutResp {
+message SignPart {
+ int32 partNumber = 1;
+ string url = 2;
+ repeated KeyValues query = 3;
+ repeated KeyValues header = 4;
+}
+
+message AuthSignParts {
string url = 1;
- string putID = 2;
- int64 fragmentSize = 3;
- int64 validTime = 4;// 上传地址的有效时间
- string putURLsHash = 5;
- repeated string putURLs = 6;
+ repeated KeyValues query = 2;
+ repeated KeyValues header = 3;
+ repeated SignPart parts = 4;
+}
+
+message PartLimitReq {
}
-message ConfirmPutReq {
- string putID = 1;
+message PartLimitResp {
+ int64 minPartSize = 1;
+ int64 maxPartSize = 2;
+ int32 maxNumSize = 3;
+}
+
+message PartSizeReq {
+ int64 size = 1;
}
-message ConfirmPutResp {
+message PartSizeResp {
+ int64 size = 2;
+}
+
+message InitiateMultipartUploadReq {
+ string hash = 1;
+ int64 size = 2;
+ int64 partSize = 3;
+ int32 maxParts = 4;
+ string cause = 5;
+ string name = 6;
+ string contentType = 7;
+}
+
+message UploadInfo {
+ string uploadID = 1;
+ int64 partSize = 2;
+ AuthSignParts sign = 3;
+}
+
+message InitiateMultipartUploadResp {
string url = 1;
+ UploadInfo upload = 2;
}
-message GetUrlReq {
- string name = 1; // 文件名
- int64 expires = 2; // url有效时间
- bool attachment = 3;// 是否是附件
+message AuthSignReq {
+ string uploadID = 1;
+ repeated int32 partNumbers = 2;
}
-message GetUrlResp {
+message AuthSignResp {
string url = 1;
- int64 size = 2;
- string hash = 3;
+ repeated KeyValues query = 2;
+ repeated KeyValues header = 3;
+ repeated SignPart parts = 4;
}
-message GetPutReq {
- string putID = 1;
+message CompleteMultipartUploadReq {
+ string uploadID = 1;
+ repeated string parts = 2;
+ string name = 3;
+ string contentType = 4;
+ string cause = 5;
}
-message GetPutFragment{
- int64 size = 1;
- string hash = 2;
- string url = 3;
+message CompleteMultipartUploadResp {
+ string url = 1;
}
-message GetPutResp {
+message AccessURLReq {
string name = 1;
- int64 size = 2;
- string hash = 3;
- int64 fragmentSize = 4;
- string contentType = 5;
- int64 validTime = 6; // 上传地址的有效时间
- // repeated GetPutFragment fragments = 7;
- // string putURLsHash = 8;
- // string putID = 2;
- // int64 fragmentSize = 3;
- // int64 validTime = 4;// 上传地址的有效时间
- string putURLsHash = 7;
- repeated GetPutFragment fragments = 8;
- // repeated string putURLs = 6;
- // repeated GetPutFragment fragments = 7;
-}
-
-message GetHashInfoReq {
- string hash = 1;
}
-message GetHashInfoResp {
- string hash = 1;
- int64 size = 2;
+message AccessURLResp {
+ string url = 1;
+ int64 expireTime = 2;
}
message FcmUpdateTokenReq {
@@ -97,11 +111,13 @@ message SetAppBadgeResp {
}
service third {
- rpc ApplyPut(ApplyPutReq) returns(ApplyPutResp);
- rpc GetPut(GetPutReq) returns(GetPutResp);
- rpc ConfirmPut(ConfirmPutReq) returns(ConfirmPutResp);
- rpc GetUrl(GetUrlReq) returns(GetUrlResp);
- rpc GetHashInfo(GetHashInfoReq) returns(GetHashInfoResp);
+ rpc PartLimit(PartLimitReq) returns(PartLimitResp);
+ rpc PartSize(PartSizeReq) returns(PartSizeResp);
+ rpc InitiateMultipartUpload(InitiateMultipartUploadReq) returns(InitiateMultipartUploadResp);
+ rpc AuthSign(AuthSignReq) returns(AuthSignResp);
+ rpc CompleteMultipartUpload(CompleteMultipartUploadReq) returns(CompleteMultipartUploadResp);
+ rpc AccessURL(AccessURLReq) returns(AccessURLResp);
+
rpc FcmUpdateToken(FcmUpdateTokenReq) returns(FcmUpdateTokenResp);
rpc SetAppBadge(SetAppBadgeReq) returns(SetAppBadgeResp);
}
diff --git a/pkg/rpcclient/msg.go b/pkg/rpcclient/msg.go
index a10221189..367dafda5 100644
--- a/pkg/rpcclient/msg.go
+++ b/pkg/rpcclient/msg.go
@@ -168,27 +168,27 @@ type NotificationSender struct {
getUserInfo func(ctx context.Context, userID string) (*sdkws.UserInfo, error)
}
-type NewNotificationSenderOptions func(*NotificationSender)
+type NotificationSenderOptions func(*NotificationSender)
-func WithLocalSendMsg(sendMsg func(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error)) NewNotificationSenderOptions {
+func WithLocalSendMsg(sendMsg func(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error)) NotificationSenderOptions {
return func(s *NotificationSender) {
s.sendMsg = sendMsg
}
}
-func WithRpcClient(msgRpcClient *MessageRpcClient) NewNotificationSenderOptions {
+func WithRpcClient(msgRpcClient *MessageRpcClient) NotificationSenderOptions {
return func(s *NotificationSender) {
s.sendMsg = msgRpcClient.SendMsg
}
}
-func WithUserRpcClient(userRpcClient *UserRpcClient) NewNotificationSenderOptions {
+func WithUserRpcClient(userRpcClient *UserRpcClient) NotificationSenderOptions {
return func(s *NotificationSender) {
s.getUserInfo = userRpcClient.GetUserInfo
}
}
-func NewNotificationSender(opts ...NewNotificationSenderOptions) *NotificationSender {
+func NewNotificationSender(opts ...NotificationSenderOptions) *NotificationSender {
notificationSender := &NotificationSender{contentTypeConf: newContentTypeConf(), sessionTypeConf: newSessionTypeConf()}
for _, opt := range opts {
opt(notificationSender)
diff --git a/pkg/rpcclient/notification/extend_msg.go b/pkg/rpcclient/notification/extend_msg.go
deleted file mode 100644
index e71ada3e1..000000000
--- a/pkg/rpcclient/notification/extend_msg.go
+++ /dev/null
@@ -1,103 +0,0 @@
-package notification
-
-import (
- "context"
- "encoding/json"
-
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient"
- "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
- "google.golang.org/protobuf/proto"
-)
-
-type ExtendMsgNotificationSender struct {
- *rpcclient.MessageRpcClient
-}
-
-func NewExtendMsgNotificationSender(client discoveryregistry.SvcDiscoveryRegistry) *ExtendMsgNotificationSender {
- return &ExtendMsgNotificationSender{}
-}
-
-func (e *ExtendMsgNotificationSender) ExtendMessageUpdatedNotification(ctx context.Context, sendID string, conversationID string, sessionType int32,
- req *msg.SetMessageReactionExtensionsReq, resp *msg.SetMessageReactionExtensionsResp, isHistory bool, isReactionFromCache bool) {
- var content sdkws.ReactionMessageModifierNotification
- content.ConversationID = req.ConversationID
- content.OpUserID = mcontext.GetOpUserID(ctx)
- content.SessionType = req.SessionType
- keyMap := make(map[string]*sdkws.KeyValue)
- for _, valueResp := range resp.Result {
- if valueResp.ErrCode == 0 {
- keyMap[valueResp.KeyValue.TypeKey] = valueResp.KeyValue
- }
- }
- if len(keyMap) == 0 {
- return
- }
- content.SuccessReactionExtensions = keyMap
- content.ClientMsgID = req.ClientMsgID
- content.IsReact = resp.IsReact
- content.IsExternalExtensions = req.IsExternalExtensions
- content.MsgFirstModifyTime = resp.MsgFirstModifyTime
- e.messageReactionSender(ctx, sendID, conversationID, sessionType, constant.ReactionMessageModifier, &content, isHistory, isReactionFromCache)
-}
-func (e *ExtendMsgNotificationSender) ExtendMessageDeleteNotification(ctx context.Context, sendID string, conversationID string, sessionType int32,
- req *msg.DeleteMessagesReactionExtensionsReq, resp *msg.DeleteMessagesReactionExtensionsResp, isHistory bool, isReactionFromCache bool) {
- var content sdkws.ReactionMessageDeleteNotification
- content.ConversationID = req.ConversationID
- content.OpUserID = req.OpUserID
- content.SessionType = req.SessionType
- keyMap := make(map[string]*sdkws.KeyValue)
- for _, valueResp := range resp.Result {
- if valueResp.ErrCode == 0 {
- keyMap[valueResp.KeyValue.TypeKey] = valueResp.KeyValue
- }
- }
- if len(keyMap) == 0 {
- return
- }
- content.SuccessReactionExtensions = keyMap
- content.ClientMsgID = req.ClientMsgID
- content.MsgFirstModifyTime = req.MsgFirstModifyTime
- e.messageReactionSender(ctx, sendID, conversationID, sessionType, constant.ReactionMessageDeleter, &content, isHistory, isReactionFromCache)
-}
-func (e *ExtendMsgNotificationSender) messageReactionSender(ctx context.Context, sendID string, conversationID string, sessionType, contentType int32, m proto.Message, isHistory bool, isReactionFromCache bool) error {
- options := make(map[string]bool, 5)
- utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
- utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, false)
- utils.SetSwitchFromOptions(options, constant.IsSenderConversationUpdate, false)
- utils.SetSwitchFromOptions(options, constant.IsUnreadCount, false)
- utils.SetSwitchFromOptions(options, constant.IsReactionFromCache, isReactionFromCache)
- if !isHistory {
- utils.SetSwitchFromOptions(options, constant.IsHistory, false)
- utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
- }
- bytes, err := json.Marshal(m)
- if err != nil {
- return errs.ErrData.Wrap(err.Error())
- }
- pbData := msg.SendMsgReq{
- MsgData: &sdkws.MsgData{
- SendID: sendID,
- ClientMsgID: utils.GetMsgID(sendID),
- SessionType: sessionType,
- MsgFrom: constant.SysMsgType,
- ContentType: contentType,
- Content: bytes,
- CreateTime: utils.GetCurrentTimestampByMill(),
- Options: options,
- },
- }
- switch sessionType {
- case constant.SingleChatType, constant.NotificationChatType:
- pbData.MsgData.RecvID = conversationID
- case constant.GroupChatType, constant.SuperGroupChatType:
- pbData.MsgData.GroupID = conversationID
- }
- _, err = e.SendMsg(ctx, &pbData)
- return err
-}
diff --git a/pkg/rpcclient/notification/msg.go b/pkg/rpcclient/notification/msg.go
new file mode 100644
index 000000000..97724f727
--- /dev/null
+++ b/pkg/rpcclient/notification/msg.go
@@ -0,0 +1,36 @@
+package notification
+
+import (
+ "context"
+
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
+ "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient"
+)
+
+type MsgNotificationSender struct {
+ *rpcclient.NotificationSender
+}
+
+func NewMsgNotificationSender(opts ...rpcclient.NotificationSenderOptions) *MsgNotificationSender {
+ return &MsgNotificationSender{rpcclient.NewNotificationSender(opts...)}
+}
+
+func (m *MsgNotificationSender) UserDeleteMsgsNotification(ctx context.Context, userID, conversationID string, seqs []int64) error {
+ tips := sdkws.DeleteMsgsTips{
+ UserID: userID,
+ ConversationID: conversationID,
+ Seqs: seqs,
+ }
+ return m.Notification(ctx, userID, userID, constant.MsgDeleteNotification, &tips)
+}
+
+func (m *MsgNotificationSender) MarkAsReadNotification(ctx context.Context, conversationID string, sesstionType int32, sendID, recvID string, seqs []int64, hasReadSeq int64) error {
+ tips := &sdkws.MarkAsReadTips{
+ MarkAsReadUserID: sendID,
+ ConversationID: conversationID,
+ Seqs: seqs,
+ HasReadSeq: hasReadSeq,
+ }
+ return m.NotificationWithSesstionType(ctx, sendID, recvID, constant.HasReadReceipt, sesstionType, tips)
+}
diff --git a/pkg/rpcclient/user.go b/pkg/rpcclient/user.go
index ea7740ce2..64424bed7 100644
--- a/pkg/rpcclient/user.go
+++ b/pkg/rpcclient/user.go
@@ -3,7 +3,6 @@ package rpcclient
import (
"context"
"strings"
- "time"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify"
@@ -22,8 +21,7 @@ type User struct {
}
func NewUser(discov discoveryregistry.SvcDiscoveryRegistry) *User {
- ctx, _ := context.WithTimeout(context.Background(), time.Second*3)
- conn, err := discov.GetConn(ctx, config.Config.RpcRegisterName.OpenImUserName)
+ conn, err := discov.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImUserName)
if err != nil {
panic(err)
}