From dd7e2be74a07d836ef6c8c5e3b192b873db2777b Mon Sep 17 00:00:00 2001 From: Xinwei Xiong <86140903+cubxxw@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:28:18 +0800 Subject: [PATCH 01/13] feat: add logic to deploy images (#497) * feat: add logic to deploy images Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add logic to deploy images Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: add ubuntu Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: sync quest Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add copyright information Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add more cicd design Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: fix sync Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: test file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: test file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: build multiarch Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: build multiarch Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add start scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> --------- Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> --- .github/workflows/golangci-link.yml | 4 +- .github/workflows/openim-ci.yml | 148 ++++++++++++++---- .github/workflows/scripts-test.yml | 50 ++++++ .github/workflows/sync.yml | 4 - README.md | 14 +- assets/README.md | 32 ++++ assets/intive-slack.png | Bin 0 -> 21044 bytes assets/logo-gif/LICENSE | 1 + assets/logo-gif/openim-logo.gif | Bin 0 -> 430462 bytes assets/logo/LICENSE | 1 + assets/logo/openim-logo-blue.png | Bin 0 -> 32557 bytes assets/logo/openim-logo-cyan.png | Bin 0 -> 35907 bytes assets/logo/openim-logo-gradient.png | Bin 0 -> 38678 bytes assets/logo/openim-logo-green.png | Bin 0 -> 32597 bytes assets/logo/openim-logo-orange.png | Bin 0 -> 37334 bytes assets/logo/openim-logo-purple.png | Bin 0 -> 32931 bytes assets/logo/openim-logo-red.png | Bin 0 -> 31948 bytes assets/logo/openim-logo-yellow.png | Bin 0 -> 36659 bytes assets/logo/openim-logo.png | Bin 0 -> 38208 bytes go.mod | 1 - go.sum | 2 - install_im_server.sh | 38 +++-- .../msgtransfer/persistent_msg_handler.go | 14 ++ pkg/common/db/relation/mysql_init.go | 4 +- pkg/common/kafka/consumer_group.go | 14 ++ pkg/utils/strings.go | 14 ++ pkg/utils/time_format.go | 14 ++ scripts/build_all_service.sh | 8 +- scripts/path_info.sh | 14 ++ scripts/style_info.sh | 14 ++ 30 files changed, 324 insertions(+), 67 deletions(-) create mode 100644 .github/workflows/scripts-test.yml create mode 100644 assets/README.md create mode 100644 assets/intive-slack.png create mode 100644 assets/logo-gif/LICENSE create mode 100644 assets/logo-gif/openim-logo.gif create mode 100644 assets/logo/LICENSE create mode 100644 assets/logo/openim-logo-blue.png create mode 100644 assets/logo/openim-logo-cyan.png create mode 100644 assets/logo/openim-logo-gradient.png create mode 100644 assets/logo/openim-logo-green.png create mode 100644 assets/logo/openim-logo-orange.png create mode 100644 assets/logo/openim-logo-purple.png create mode 100644 assets/logo/openim-logo-red.png create mode 100644 assets/logo/openim-logo-yellow.png create mode 100644 assets/logo/openim-logo.png diff --git a/.github/workflows/golangci-link.yml b/.github/workflows/golangci-link.yml index 057dcff74..c5fdd7b1b 100644 --- a/.github/workflows/golangci-link.yml +++ b/.github/workflows/golangci-link.yml @@ -17,8 +17,8 @@ name: OpenKF golangci-lint on: push: branches: [main] - pull_request: - branches: [main] +# pull_request: +# branches: [main] jobs: golangci: name: lint diff --git a/.github/workflows/openim-ci.yml b/.github/workflows/openim-ci.yml index c8b95eb8e..5794b2ef3 100644 --- a/.github/workflows/openim-ci.yml +++ b/.github/workflows/openim-ci.yml @@ -1,26 +1,52 @@ +# Copyright © 2023 OpenIM open source community. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + name: OpenIM CI -on: -# main branch +on: push: branches: - - main + - main + paths-ignore: + - "docs/**" + - "README.md" + - "README_zh-CN.md" + - "CONTRIBUTING.md" pull_request: branches: - - main + - main + paths-ignore: + - "README.md" + - "README_zh-CN.md" + - "CONTRIBUTING.md" + - "docs/**" + +env: + GO_VERSION: "1.19" + GOLANGCI_VERSION: "v1.50.1" jobs: - - openimci: + openim: name: Test with go ${{ matrix.go_version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} environment: - name: openimci + name: openim strategy: matrix: - go_version: ['1.18', '1.19', '1.20'] - os: [ubuntu-latest, macOS-latest] + go_version: ["1.18","1.19","1.20"] + os: [ubuntu-latest] steps: - name: Set up Go ${{ matrix.go_version }} @@ -32,41 +58,95 @@ jobs: - name: Check out code into the Go module directory uses: actions/checkout@v2 - - name: Run go modules Tidy + - name: Run go modules tidy run: | make tidy - - name: Generate all necessary files, such as error code files + - name: Run go format run: | - make gen + make format + echo "Run go format successfully" - - name: Check syntax and styling of go sources - run: | - make lint + # - name: Generate all necessary files, such as error code files + # run: | + # make generate - - name: Run unit test and get test coverage - run: | - make cover + # - name: Check syntax and styling of go sources + # run: | + # set -e + # make lint + + # - name: Run unit test and get test coverage + # run: | + # make cover - name: Build source code for host platform run: | - make build + make multiarch + echo "Build source code for host platform successfully" - - name: Collect Test Coverage File - uses: actions/upload-artifact@v1.0.0 - with: - name: main-output - path: _output/coverage.out + # - name: Collect Test Coverage File + # uses: actions/upload-artifact@v1.0.0 + # with: + # name: main-output + # path: _output/tmp/coverage.out - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v1 - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ env.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} +# lint: +# runs-on: ubuntu-20.04 +# steps: +# - name: Checkout +# uses: actions/checkout@v3 +# with: +# fetch-depth: 0 + +# - name: Set up Go +# uses: actions/setup-go@v3 +# with: +# go-version: ${{ env.GO_VERSION }} + +# - name: golangci-lint +# uses: golangci/golangci-lint-action@v3 +# with: +# version: ${{ env.GOLANGCI_VERSION }} - - name: Build docker images for host arch and push images to registry - run: | - make push \ No newline at end of file +# docker-image-tests: +# runs-on: ubuntu-20.04 +# steps: +# - name: Checkout +# uses: actions/checkout@v3 +# with: +# fetch-depth: 0 + +# - name: Set up Go +# uses: actions/setup-go@v3 +# with: +# go-version: ${{ env.GO_VERSION }} + +# - name: Run tests +# run: make build + +# - name: Test docker image +# run: | +# docker build -t openim:ci-build . + +# goreleaser-test: +# runs-on: ubuntu-20.04 +# steps: +# - name: Checkout +# uses: actions/checkout@v3 +# with: +# fetch-depth: 0 + +# - name: Set up Go +# uses: actions/setup-go@v3 +# with: +# go-version: ${{ env.GO_VERSION }} + +# - name: Run GoReleaser +# uses: goreleaser/goreleaser-action@v4 +# with: +# version: latest +# args: release --clean --skip-publish --snapshot \ No newline at end of file diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml new file mode 100644 index 000000000..5bcb2277c --- /dev/null +++ b/.github/workflows/scripts-test.yml @@ -0,0 +1,50 @@ +name: Execute Scripts + +on: + push: + branches: + - main + paths-ignore: + - "docs/**" + - "README.md" + - "README_zh-CN.md" + - "CONTRIBUTING.md" + pull_request: + branches: + - main + paths-ignore: + - "README.md" + - "README_zh-CN.md" + - "CONTRIBUTING.md" + - "docs/**" + +jobs: + execute-scripts: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Start Docker Compose + run: docker-compose up -d + + - name: Stop all services + run: | + chmod +x ./scripts/stop_all.sh + ./scripts/stop_all.sh + + - name: Build all services + run: | + chmod +x ./scripts/build_all_service.sh + ./scripts/build_all_service.sh + + - name: Start all services + run: | + chmod +x ./scripts/start_all.sh + ./scripts/start_all.sh + + - name: Check all services + run: | + chmod +x ./scripts/check_all.sh + ./scripts/check_all.sh diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 871e400d5..d6e15bf23 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -8,9 +8,6 @@ on: push: branches: - main - pull_request: - branches: - - main workflow_dispatch: jobs: @@ -25,7 +22,6 @@ jobs: with: GH_INSTALLATION_TOKEN: "${{ secrets.BOT_GITHUB_TOKEN }}" CONFIG_PATH: .github/sync.yml - GH_PAT: "${{ secrets.BOT_GITHUB_TOKEN }}" ORIGINAL_MESSAGE: true SKIP_PR: true COMMIT_EACH_FILE: false diff --git a/README.md b/README.md index e8da2ab5e..b180f4438 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ -

- - Open IM Server
-
- ⭐️ Open source Instant Messaging Server ⭐️
-

+

+ + + +

+

+ ⭐️ Open source Instant Messaging Server ⭐️
+

diff --git a/assets/README.md b/assets/README.md new file mode 100644 index 000000000..d3e735dc0 --- /dev/null +++ b/assets/README.md @@ -0,0 +1,32 @@ +# `/assets` + +The `/assets` directory in the OpenIM repository contains various assets such as images, logos, and animated GIFs. These assets serve different purposes and contribute to the functionality and aesthetics of the OpenIM project. + +## Directory Structure: + +```bash +assets/ +├── README.md # Documentation for the assets directory +├── images # Directory holding images related to OpenIM +│ ├── architecture.png # Image depicting the architecture of OpenIM +│ └── mvc.png # Image illustrating the Model-View-Controller (MVC) pattern +├── intive-slack.png # Image displaying the Intive Slack logo +├── logo # Directory containing various logo variations for OpenIM +│ ├── openim-logo-black.png # OpenIM logo with a black background +│ ├── openim-logo-blue.png # OpenIM logo with a blue background +│ ├── openim-logo-green.png # OpenIM logo with a green background +│ ├── openim-logo-purple.png # OpenIM logo with a purple background +│ ├── openim-logo-white.png # OpenIM logo with a white background +│ ├── openim-logo-yellow.png # OpenIM logo with a yellow background +│ └── openim-logo.png # OpenIM logo with a transparent background +└── logo-gif # Directory containing animated GIF versions of the OpenIM logo + └── openim-log.gif # Animated OpenIM logo with a transparent background +``` + +## Copyright Notice: + +The OpenIM logo, including its variations and animated versions, displayed in this repository [OpenIM](https://github.com/OpenIMSDK/openim) under the `/assets/logo` and `/assets/logo-gif` directories, are protected by copyright laws. + +The logo design is credited to @Xx(席欣). + +Please respect the intellectual property rights and refrain from unauthorized use and distribution of these assets. \ No newline at end of file diff --git a/assets/intive-slack.png b/assets/intive-slack.png new file mode 100644 index 0000000000000000000000000000000000000000..3f27e0c6959298ec79a093ac36a00a58755767e9 GIT binary patch literal 21044 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 DC_6OD literal 0 HcmV?d00001 diff --git a/assets/logo-gif/LICENSE b/assets/logo-gif/LICENSE new file mode 100644 index 000000000..fe61855c2 --- /dev/null +++ b/assets/logo-gif/LICENSE @@ -0,0 +1 @@ +# The OpenIM logo files are licensed under a choice of either Apache-2.0 or CC-BY-4.0 (Creative Commons Attribution 4.0 International). \ No newline at end of file diff --git a/assets/logo-gif/openim-logo.gif b/assets/logo-gif/openim-logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..7797896413b8fa290d3c51ad7ac145f34a44f2ed GIT binary patch literal 430462 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 z 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 z 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 *(L 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∾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%0A=;x!k&uD( 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 z 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

ToBM4ua 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 z

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 qz|dTCOh+2f4<<Xz3qyyI_%!Q0h@R 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ⅇZWuv<_4cT<)%~d2dUpy@o12Jrb-M%5?4tdj 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 literal 0 HcmV?d00001 diff --git a/assets/logo/openim-logo-yellow.png b/assets/logo/openim-logo-yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..7440e3c632af1130de6c7f40d82a541f58b84eaf GIT binary patch literal 36659 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%0AWqLXt%@lh6rQ5 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 literal 0 HcmV?d00001 diff --git a/assets/logo/openim-logo.png b/assets/logo/openim-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cc87f0ac36b2977c7843a3758b98366e8175c049 GIT binary patch literal 38208 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 /dev/null then - docker-compose up -d ; + docker-compose up -d else - docker compose up -d ; + docker compose up -d fi +# Change directory to scripts folder again +cd scripts -cd scripts ; -./docker_check_service.sh +# Check docker services +./docker_check_service.sh \ No newline at end of file diff --git a/internal/msgtransfer/persistent_msg_handler.go b/internal/msgtransfer/persistent_msg_handler.go index eaf47dee9..9ee0f5393 100644 --- a/internal/msgtransfer/persistent_msg_handler.go +++ b/internal/msgtransfer/persistent_msg_handler.go @@ -1,3 +1,17 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package msgtransfer import ( diff --git a/pkg/common/db/relation/mysql_init.go b/pkg/common/db/relation/mysql_init.go index fe467b675..d480ae6e8 100644 --- a/pkg/common/db/relation/mysql_init.go +++ b/pkg/common/db/relation/mysql_init.go @@ -34,7 +34,7 @@ const ( maxRetry = 100 ) -//newMysqlGormDB Initialize the database connection +// newMysqlGormDB Initialize the database connection func newMysqlGormDB() (*gorm.DB, error) { dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local", config.Config.Mysql.Username, config.Config.Mysql.Password, config.Config.Mysql.Address[0], "mysql") @@ -84,7 +84,7 @@ func newMysqlGormDB() (*gorm.DB, error) { return db, nil } -//connectToDatabase Connection retry for mysql +// connectToDatabase Connection retry for mysql func connectToDatabase(dsn string, maxRetry int) (*gorm.DB, error) { var db *gorm.DB var err error diff --git a/pkg/common/kafka/consumer_group.go b/pkg/common/kafka/consumer_group.go index 2e0155f67..0f801e8b2 100644 --- a/pkg/common/kafka/consumer_group.go +++ b/pkg/common/kafka/consumer_group.go @@ -1,3 +1,17 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package kafka import ( diff --git a/pkg/utils/strings.go b/pkg/utils/strings.go index 106c6a112..641c43e9f 100644 --- a/pkg/utils/strings.go +++ b/pkg/utils/strings.go @@ -1,3 +1,17 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package utils import ( diff --git a/pkg/utils/time_format.go b/pkg/utils/time_format.go index af1be7f04..9278a58ef 100644 --- a/pkg/utils/time_format.go +++ b/pkg/utils/time_format.go @@ -1,3 +1,17 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package utils import ( diff --git a/scripts/build_all_service.sh b/scripts/build_all_service.sh index ebbc02dfa..5d8592eca 100755 --- a/scripts/build_all_service.sh +++ b/scripts/build_all_service.sh @@ -53,10 +53,12 @@ fi #Include shell font styles and some basic information OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +echo "PWD=================>$PWD" + #Include shell font styles and some basic information -source $OPENIM_ROOT/scripts/style_info.sh -source $OPENIM_ROOT/scripts/path_info.sh -source $OPENIM_ROOT/scripts/function.sh +source ./style_info.sh +source ./path_info.sh +source ./function.sh cd $OPENIM_ROOT diff --git a/scripts/path_info.sh b/scripts/path_info.sh index 595137566..bff87ed83 100755 --- a/scripts/path_info.sh +++ b/scripts/path_info.sh @@ -1,4 +1,18 @@ #!/usr/bin/env bash +# Copyright © 2023 OpenIM. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Determine the architecture and version architecture=$(uname -m) version=$(uname -s | tr '[:upper:]' '[:lower:]') diff --git a/scripts/style_info.sh b/scripts/style_info.sh index 631f8a5f1..3c747dd0c 100755 --- a/scripts/style_info.sh +++ b/scripts/style_info.sh @@ -1,4 +1,18 @@ #!/usr/bin/env bash +# Copyright © 2023 OpenIM. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + COLOR_SUFFIX="\033[0m" # End all colors and special effects From 5755a43f1c65bb8ccc2a1aaf5eefea72e0c5a17d Mon Sep 17 00:00:00 2001 From: kubbot <3293172751ysy@gmail.com> Date: Wed, 12 Jul 2023 12:45:23 +0800 Subject: [PATCH 02/13] fix: scripts start Signed-off-by: kubbot <3293172751ysy@gmail.com> --- .github/workflows/scripts-test.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index 5bcb2277c..63ffa7d79 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -27,7 +27,9 @@ jobs: uses: actions/checkout@v2 - name: Start Docker Compose - run: docker-compose up -d + run: | + docker-compose stop + docker-compose up -d - name: Stop all services run: | @@ -48,3 +50,8 @@ jobs: run: | chmod +x ./scripts/check_all.sh ./scripts/check_all.sh + - name: Print openIM.log + run: | + cat -n logs/openIM.log + cat logs/openIM.log >> "$GITHUB_OUTPUT" + From 3ae5375d1a908e4230451d05e7507036e7742380 Mon Sep 17 00:00:00 2001 From: kubbot <3293172751ysy@gmail.com> Date: Wed, 12 Jul 2023 12:58:24 +0800 Subject: [PATCH 03/13] fix: scripts start Signed-off-by: kubbot <3293172751ysy@gmail.com> --- .github/workflows/scripts-test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index 63ffa7d79..4ddd80c56 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -30,26 +30,31 @@ jobs: run: | docker-compose stop docker-compose up -d + cat logs/openIM.log >> "$GITHUB_OUTPUT" - name: Stop all services run: | chmod +x ./scripts/stop_all.sh ./scripts/stop_all.sh + cat logs/openIM.log >> "$GITHUB_OUTPUT" - name: Build all services run: | chmod +x ./scripts/build_all_service.sh ./scripts/build_all_service.sh + cat logs/openIM.log >> "$GITHUB_OUTPUT" - name: Start all services run: | chmod +x ./scripts/start_all.sh ./scripts/start_all.sh + cat logs/openIM.log >> "$GITHUB_OUTPUT" - name: Check all services run: | chmod +x ./scripts/check_all.sh ./scripts/check_all.sh + cat logs/openIM.log >> "$GITHUB_OUTPUT" - name: Print openIM.log run: | cat -n logs/openIM.log From e6499436495095c402ea6cda405a3697c8df5bf1 Mon Sep 17 00:00:00 2001 From: kubbot <3293172751ysy@gmail.com> Date: Wed, 12 Jul 2023 13:01:20 +0800 Subject: [PATCH 04/13] fix: scripts start Signed-off-by: kubbot <3293172751ysy@gmail.com> --- .github/workflows/scripts-test.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index 4ddd80c56..ff6afb9ed 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -30,13 +30,11 @@ jobs: run: | docker-compose stop docker-compose up -d - cat logs/openIM.log >> "$GITHUB_OUTPUT" - name: Stop all services run: | chmod +x ./scripts/stop_all.sh ./scripts/stop_all.sh - cat logs/openIM.log >> "$GITHUB_OUTPUT" - name: Build all services run: | From 3ff4103711d573d48929a68397fe9ee2577cd95f Mon Sep 17 00:00:00 2001 From: kubbot <3293172751ysy@gmail.com> Date: Wed, 12 Jul 2023 13:11:31 +0800 Subject: [PATCH 05/13] fix: scripts start Signed-off-by: kubbot <3293172751ysy@gmail.com> --- .github/workflows/scripts-test.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index ff6afb9ed..1358bcb37 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -40,19 +40,22 @@ jobs: run: | chmod +x ./scripts/build_all_service.sh ./scripts/build_all_service.sh - cat logs/openIM.log >> "$GITHUB_OUTPUT" + cat logs/openIM.log - name: Start all services run: | chmod +x ./scripts/start_all.sh ./scripts/start_all.sh - cat logs/openIM.log >> "$GITHUB_OUTPUT" + cat logs/openIM.log + continue-on-error: true - name: Check all services run: | chmod +x ./scripts/check_all.sh ./scripts/check_all.sh - cat logs/openIM.log >> "$GITHUB_OUTPUT" + cat logs/openIM.log + continue-on-error: true + - name: Print openIM.log run: | cat -n logs/openIM.log From e000236ecafdd60d20e642a2107557819de294a3 Mon Sep 17 00:00:00 2001 From: guangwu Date: Wed, 12 Jul 2023 13:19:44 +0800 Subject: [PATCH 06/13] chore: use fmt.Errorf Sprint (#469) --- pkg/common/db/unrelation/extend_msg.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/common/db/unrelation/extend_msg.go b/pkg/common/db/unrelation/extend_msg.go index 17e0b2e19..6f09247bc 100644 --- a/pkg/common/db/unrelation/extend_msg.go +++ b/pkg/common/db/unrelation/extend_msg.go @@ -152,7 +152,7 @@ func (e *ExtendMsgSetMongoDriver) InsertOrUpdateReactionExtendMsgSet( return utils.Wrap(err, "") } if set == nil { - return errors.New(fmt.Sprintf("conversationID %s has no set", conversationID)) + return fmt.Errorf("conversationID %s has no set", conversationID) } _, err = e.ExtendMsgSetCollection.UpdateOne( ctx, @@ -181,7 +181,7 @@ func (e *ExtendMsgSetMongoDriver) DeleteReactionExtendMsgSet( return utils.Wrap(err, "") } if set == nil { - return errors.New(fmt.Sprintf("conversationID %s has no set", conversationID)) + return fmt.Errorf("conversationID %s has no set", conversationID) } _, err = e.ExtendMsgSetCollection.UpdateOne( ctx, @@ -226,5 +226,5 @@ func (e *ExtendMsgSetMongoDriver) TakeExtendMsg( if v, ok := setList[0].ExtendMsgs[clientMsgID]; ok { return &v, nil } - return nil, errors.New(fmt.Sprintf("cant find client msg id: %s", clientMsgID)) + return nil, fmt.Errorf("cant find client msg id: %s", clientMsgID) } From 5467887e1ccceb90af8035dd5dc7739f4966e4f7 Mon Sep 17 00:00:00 2001 From: pluto <83957921+plutoyty@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:23:25 +0800 Subject: [PATCH 07/13] For "add database retry" add test (#500) * Add database retry * For "add database retry" add test * For "add database retry" add test * For 'add database retry' add test Signed-off-by: plutoyty <2631223275@qq.com> * Remove .idea directory and add it to .gitignore --------- Signed-off-by: plutoyty <2631223275@qq.com> --- pkg/common/db/relation/mysql_init.go | 2 +- pkg/common/db/relation/mysql_init_test.go | 38 +++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 pkg/common/db/relation/mysql_init_test.go diff --git a/pkg/common/db/relation/mysql_init.go b/pkg/common/db/relation/mysql_init.go index d480ae6e8..4a6758cba 100644 --- a/pkg/common/db/relation/mysql_init.go +++ b/pkg/common/db/relation/mysql_init.go @@ -31,7 +31,7 @@ import ( ) const ( - maxRetry = 100 + maxRetry = 100 //number of retries ) // newMysqlGormDB Initialize the database connection diff --git a/pkg/common/db/relation/mysql_init_test.go b/pkg/common/db/relation/mysql_init_test.go new file mode 100644 index 000000000..a4f38f7bc --- /dev/null +++ b/pkg/common/db/relation/mysql_init_test.go @@ -0,0 +1,38 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package relation + +import ( + "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" + "testing" +) + +//TestNewGormDB Test the retry of sporadic errors and the direct exit of wrong password. +func TestNewGormDB(t *testing.T) { + err := config.InitConfig("config_folder_path") + if err != nil { + fmt.Println("config load error") + return + } + db, err := newMysqlGormDB() + if err != nil { + fmt.Println("password error") + return + } + if db != nil { + fmt.Println("success connect") + } +} From 454bf97e3fa2eccd46e373508b837455715c421e Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:31:24 +0800 Subject: [PATCH 08/13] merge v3dev into main (#504) * statistics user register * refactor: router change * minio init * UserRegisterCount * push use local conn * refactor: user pb update * remove online push close grpc conn * refactor: user pb update * refactor:pb file * msgs statistics * msgs statistics * revoke userID * refactor: errcode update * active user * active user * active user * refactor: errcode update * feat: conn update token * active user * active user * feat: conn update token * active user * feat: conn update token * feat: conn update token * feat: conn update token * add tx_oss cos * active user * active user * group create * group create * feat: group notification show to conversation * feat: group notification show to conversation * group active * user active * sendNotificationWithName * withname * privateChat * a2r call option * grpc with detail return error * change log error * chain unary interceptor * api nil slice map * fix sync has read * fix: text update * fix: update add model * set conversations update * set privateChat * fix: content update * remove unuse rpc * msgDestruct * cron use rpc mw * set IsMsgDestruct * msg destruct * msgDestruct * s3 minio, cos, oss support * feat: add implement of GetUsersOnlineStatus, #472 (#477) * s3 minio, cos, oss support * s3 route * remove extendMsg code * s3 route * remove unuse code * s3 pb * s3 pb * s3 pb * s3 presigned put * s3 presigned test * s3 presigned test * s3 presigned test * s3 presigned test * s3 presigned test * s3 presigned test * s3 presigned test * s3 presigned test * Update .gitignore (#482) * s3 debug log * s3 debug log * cron add log and fix cron * add log * cron * s3 config * fix kick user bug * s3 cos * add kick log * s3 cos test * s3 cos test * s3 cos test * kick user log * kickuserlog * s3 cos copy * s3 cos copy * s3 url * s3 url * s3 AccessURL * log * s3 InitiateMultipartUpload add ExpireTime --------- Co-authored-by: withchao <993506633@qq.com> Co-authored-by: wangchuxiao Co-authored-by: BanTanger <88583317+BanTanger@users.noreply.github.com> Co-authored-by: withchao <48119764+withchao@users.noreply.github.com> Co-authored-by: Alan <68671759+hanzhixiao@users.noreply.github.com> --- .gitignore | 2 + .idea/Open-IM-Server.iml | 9 + .idea/dataSources.xml | 14 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + cmd/openim-api/main.go | 2 +- cmd/openim-msgtransfer/main.go | 27 - config/config.yaml | 59 +- go.mod | 25 +- go.sum | 58 +- internal/api/conversation.go | 12 - internal/api/group.go | 4 + internal/api/msg.go | 34 +- internal/api/route.go | 27 +- internal/api/third.go | 92 +- internal/api/user.go | 115 +- internal/msggateway/client.go | 24 +- internal/msggateway/hub_server.go | 4 + internal/msggateway/n_ws_server.go | 2 +- internal/msgtransfer/init.go | 62 +- internal/msgtransfer/modify_msg_handler.go | 145 - internal/push/push_to_client.go | 118 +- internal/rpc/auth/auth.go | 8 +- internal/rpc/conversation/conversaion.go | 202 +- internal/rpc/group/db_map.go | 8 +- internal/rpc/group/group.go | 237 +- internal/rpc/group/statistics.go | 28 + internal/rpc/msg/extend_msg.go | 414 --- internal/rpc/msg/extend_msg_callback.go | 105 - internal/rpc/msg/revoke.go | 1 - internal/rpc/msg/send.go | 34 +- internal/rpc/msg/server.go | 30 +- internal/rpc/msg/statistics.go | 84 + internal/rpc/third/s3.go | 167 +- internal/rpc/third/third.go | 78 +- internal/rpc/third/tool.go | 63 + internal/rpc/user/statistics.go | 11 +- internal/rpc/user/user.go | 76 +- internal/tools/conversation.go | 38 + internal/tools/cron_task.go | 12 +- internal/tools/msg.go | 93 +- pkg/apiresp/format.go | 5 + pkg/apiresp/resp.go | 3 + pkg/apistruct/msg.go | 147 +- pkg/callbackstruct/message.go | 69 - pkg/common/cmd/cron_task.go | 2 +- pkg/common/cmd/root.go | 33 +- pkg/common/cmd/rpc.go | 24 +- pkg/common/config/config.go | 63 +- pkg/common/convert/conversation.go | 2 + pkg/common/db/cache/extend_msg_set.go | 101 - pkg/common/db/controller/conversation.go | 137 +- pkg/common/db/controller/extend_msg.go | 158 - pkg/common/db/controller/group.go | 14 + pkg/common/db/controller/msg.go | 620 +--- pkg/common/db/controller/s3.go | 76 + pkg/common/db/controller/storage.go | 567 ---- pkg/common/db/controller/user.go | 6 +- pkg/common/db/obj/minio.go | 258 -- pkg/common/db/obj/obj.go | 110 - pkg/common/db/relation/conversation_model.go | 180 +- pkg/common/db/relation/group_model.go | 66 +- pkg/common/db/relation/object_hash_model.go | 66 - pkg/common/db/relation/object_info_model.go | 69 - pkg/common/db/relation/object_model.go | 36 + pkg/common/db/relation/object_put_model.go | 67 - pkg/common/db/relation/user_model.go | 14 +- pkg/common/db/s3/cont/consts.go | 9 + pkg/common/db/s3/cont/controller.go | 244 ++ pkg/common/db/s3/cont/error.go | 14 + pkg/common/db/s3/cont/id.go | 35 + pkg/common/db/s3/cont/structs.go | 15 + pkg/common/db/s3/cos/cos.go | 254 ++ pkg/common/db/s3/minio/minio.go | 250 ++ pkg/common/db/s3/oss/oss.go | 259 ++ pkg/common/db/s3/oss/sign.go | 81 + pkg/common/db/s3/oss/sort.go | 47 + pkg/common/db/s3/s3.go | 134 + pkg/common/db/table/relation/conversation.go | 71 +- pkg/common/db/table/relation/group.go | 4 + pkg/common/db/table/relation/object.go | 31 + pkg/common/db/table/relation/object_hash.go | 44 - pkg/common/db/table/relation/object_info.go | 43 - pkg/common/db/table/relation/object_put.go | 51 - pkg/common/db/table/relation/user.go | 4 +- .../db/table/unrelation/extend_msg_set.go | 125 - pkg/common/db/table/unrelation/msg.go | 14 +- pkg/common/db/unrelation/extend_msg.go | 230 -- pkg/common/db/unrelation/mongo.go | 4 - pkg/common/db/unrelation/msg.go | 683 +++- pkg/common/log/sql_logger.go | 60 +- pkg/common/mw/rpc_client_interceptor.go | 2 +- pkg/common/mw/rpc_server_interceptor.go | 6 +- pkg/common/tokenverify/jwt_token.go | 4 +- pkg/discoveryregistry/discovery_register.go | 3 +- pkg/discoveryregistry/zookeeper/discover.go | 74 +- pkg/discoveryregistry/zookeeper/register.go | 3 +- pkg/discoveryregistry/zookeeper/zk.go | 9 +- pkg/errs/code.go | 66 +- pkg/errs/predefine.go | 51 +- pkg/errs/relation.go | 1 - pkg/proto/conversation/conversation.pb.go | 1459 +++----- pkg/proto/conversation/conversation.proto | 33 +- pkg/proto/group/group.pb.go | 789 +++-- pkg/proto/group/group.proto | 13 + pkg/proto/msg/msg.pb.go | 3020 ++++++----------- pkg/proto/msg/msg.proto | 140 +- pkg/proto/msggateway/msggateway.pb.go | 470 ++- pkg/proto/msggateway/msggateway.proto | 12 + pkg/proto/sdkws/sdkws.pb.go | 832 +---- pkg/proto/sdkws/sdkws.proto | 42 - pkg/proto/third/third.pb.go | 1506 +++++--- pkg/proto/third/third.proto | 145 +- pkg/proto/user/user.pb.go | 152 +- pkg/proto/user/user.proto | 5 +- pkg/rpcclient/conversation.go | 105 +- pkg/rpcclient/msg.go | 102 +- pkg/rpcclient/notification/extend_msg.go | 162 - pkg/rpcclient/notification/group.go | 260 +- pkg/rpcclient/notification/msg.go | 36 + pkg/rpcclient/user.go | 8 +- pkg/utils/utils_v2.go | 12 + 123 files changed, 7377 insertions(+), 10288 deletions(-) create mode 100644 .idea/Open-IM-Server.iml create mode 100644 .idea/dataSources.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml delete mode 100644 cmd/openim-msgtransfer/main.go delete mode 100644 internal/msgtransfer/modify_msg_handler.go create mode 100644 internal/rpc/group/statistics.go delete mode 100644 internal/rpc/msg/extend_msg.go delete mode 100644 internal/rpc/msg/extend_msg_callback.go create mode 100644 internal/rpc/msg/statistics.go create mode 100644 internal/rpc/third/tool.go create mode 100644 internal/tools/conversation.go create mode 100644 pkg/apiresp/format.go delete mode 100644 pkg/common/db/cache/extend_msg_set.go delete mode 100644 pkg/common/db/controller/extend_msg.go create mode 100644 pkg/common/db/controller/s3.go delete mode 100644 pkg/common/db/controller/storage.go delete mode 100644 pkg/common/db/obj/minio.go delete mode 100644 pkg/common/db/obj/obj.go delete mode 100644 pkg/common/db/relation/object_hash_model.go delete mode 100644 pkg/common/db/relation/object_info_model.go create mode 100644 pkg/common/db/relation/object_model.go delete mode 100644 pkg/common/db/relation/object_put_model.go create mode 100644 pkg/common/db/s3/cont/consts.go create mode 100644 pkg/common/db/s3/cont/controller.go create mode 100644 pkg/common/db/s3/cont/error.go create mode 100644 pkg/common/db/s3/cont/id.go create mode 100644 pkg/common/db/s3/cont/structs.go create mode 100644 pkg/common/db/s3/cos/cos.go create mode 100644 pkg/common/db/s3/minio/minio.go create mode 100644 pkg/common/db/s3/oss/oss.go create mode 100644 pkg/common/db/s3/oss/sign.go create mode 100644 pkg/common/db/s3/oss/sort.go create mode 100644 pkg/common/db/s3/s3.go create mode 100644 pkg/common/db/table/relation/object.go delete mode 100644 pkg/common/db/table/relation/object_hash.go delete mode 100644 pkg/common/db/table/relation/object_info.go delete mode 100644 pkg/common/db/table/relation/object_put.go delete mode 100644 pkg/common/db/table/unrelation/extend_msg_set.go delete mode 100644 pkg/common/db/unrelation/extend_msg.go delete mode 100644 pkg/rpcclient/notification/extend_msg.go create mode 100644 pkg/rpcclient/notification/msg.go diff --git a/.gitignore b/.gitignore index 6e29bad2c..bac199fc2 100644 --- a/.gitignore +++ b/.gitignore @@ -162,6 +162,8 @@ go.work # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff +.idea/ +.idea .idea/**/workspace.xml .idea/**/tasks.xml .idea/**/usage.statistics.xml diff --git a/.idea/Open-IM-Server.iml b/.idea/Open-IM-Server.iml new file mode 100644 index 000000000..5e764c4f0 --- /dev/null +++ b/.idea/Open-IM-Server.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 000000000..589964a46 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,14 @@ + + + + + sqlite.xerial + true + org.sqlite.JDBC + jdbc:sqlite:C:\Users\Administrator\Desktop\Open-IM-Server\docker-compose_cfg\grafana.db + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..28a804d89 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..d9805dbb6 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/cmd/openim-api/main.go b/cmd/openim-api/main.go index aac83a805..b80460990 100644 --- a/cmd/openim-api/main.go +++ b/cmd/openim-api/main.go @@ -73,7 +73,7 @@ func run(port int) error { if err != nil { return err } - if client.CreateRpcRootNodes(config.GetServiceNames()); err != nil { + if err := client.CreateRpcRootNodes(config.GetServiceNames()); err != nil { return err } fmt.Println("api init discov client success") diff --git a/cmd/openim-msgtransfer/main.go b/cmd/openim-msgtransfer/main.go deleted file mode 100644 index aef347793..000000000 --- a/cmd/openim-msgtransfer/main.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/cmd" -) - -func main() { - msgTransferCmd := cmd.NewMsgTransferCmd() - msgTransferCmd.AddPrometheusPortFlag() - if err := msgTransferCmd.Exec(); err != nil { - panic(err.Error()) - } -} diff --git a/config/config.yaml b/config/config.yaml index ea6f8772d..07d46957e 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -56,14 +56,11 @@ kafka: topic: "offlineMsgToMongoMysql" #不建议修改 msgToPush: topic: "msgToPush" #不建议修改 - msgToModify: - topic: "msgToModify" #不建议修改 consumerGroupID: #消费者组,不建议修改 msgToRedis: redis # msgToMongo: mongo # msgToMySql: mysql # msgToPush: push # - msgToModify: modify # rpc: @@ -76,41 +73,26 @@ api: listenIP: #默认为0.0.0.0 object: - enable: minio #使用minio - apiURL: http://127.0.0.1:10002/third/object + enable: "minio" #使用minio + apiURL: "http://127.0.0.1:10002/object/" minio: - tempBucket: "openim" #不建议修改 - dataBucket: "openim" #不建议修改 - location: us-east-1 #不建议修改 - endpoint: http://127.0.0.1:10005 #minio对外服务的ip和端口,app要能访问此ip和端口 - accessKeyID: root #ID - secretAccessKey: openIM123 #秘钥 - isDistributedMod: false #是否分布式多硬盘部署,如果是多硬盘部署,需要修改为true - tencent: #tencent cos - appID: - region: - bucket: - secretID: - secretKey: - ali: #ali oss - regionID: - accessKeyID: - accessKeySecret: - stsEndpoint: - ossEndpoint: - bucket: - finalHost: - stsDurationSeconds: - OssRoleArn: - aws: - accessKeyID: - accessKeySecret: - region: - bucket: - finalHost: - roleArn: - externalId: - roleSessionName: + bucket: "openim" #不建议修改 + endpoint: "http://127.0.0.1:10005" #minio对外服务的ip和端口,app要能访问此ip和端口 + accessKeyID: "root" #ID + secretAccessKey: "openIM123" #秘钥 + 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 ] @@ -182,7 +164,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时校验 diff --git a/go.mod b/go.mod index 0a8c1fd52..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/mitchellh/mapstructure v1.4.2 + 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,10 +39,12 @@ 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 github.com/redis/go-redis/v9 v9.0.5 + github.com/tencentyun/cos-go-sdk-v5 v0.7.41 ) require ( @@ -57,9 +59,10 @@ require ( github.com/bytedance/sonic v1.9.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + 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 @@ -70,6 +73,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.3 // indirect github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.7.1 // indirect github.com/hashicorp/go-uuid v1.0.2 // indirect @@ -82,17 +86,16 @@ 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 github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.18.1 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect @@ -102,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 @@ -136,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 443d6cb9d..e95d2e81e 100644 --- a/go.sum +++ b/go.sum @@ -51,6 +51,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OpenIMSDK/open_utils v1.0.8 h1:IopxWgJwEF5ZAPsRuiZZOfcxNOQOCt/p8VDENcHN9r4= github.com/OpenIMSDK/open_utils v1.0.8/go.mod h1:FLoaQblWUVKQgqt2LrNzfSZLT6D3DICBn1kcOMDLUOI= +github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM= github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= github.com/Shopify/sarama v1.29.0/go.mod h1:2QpgD79wpdAESqNQMxNc0KYMkycd4slxGdV3TWSVqrU= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= @@ -60,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= @@ -83,6 +86,8 @@ github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583j github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -94,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= @@ -202,6 +207,9 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -216,6 +224,7 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -274,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= @@ -306,16 +314,15 @@ 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/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +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= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -324,6 +331,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= +github.com/mozillazg/go-httpheader v0.4.0 h1:aBn6aRXtFzyDLZ4VIRLsZbbJloagQfMnCiYgOq6hK4w= +github.com/mozillazg/go-httpheader v0.4.0/go.mod h1:PuT8h0pw6efvp8ZeUec1Rs7dwjK08bt6gKSReGMqtdA= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= @@ -384,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= @@ -412,6 +422,10 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.194/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod h1:yrBKWhChnDqNz1xuXdSbWXG56XawEq0G5j1lg4VwBD4= +github.com/tencentyun/cos-go-sdk-v5 v0.7.41 h1:iU0Li/Np78H4SBna0ECQoF3mpgi6ImLXU+doGzPFXGc= +github.com/tencentyun/cos-go-sdk-v5 v0.7.41/go.mod h1:4dCEtLHGh8QPxHEkgq+nFaky7yZxQuYwgSJM87icDaw= github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca h1:G/aIr3WiUesWHL2YGYgEqjM5tCAJ43Ml+0C18wDkWWs= github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca/go.mod h1:b18KQa4IxHbxeseW1GcZox53d7J0z39VNONTxvvlkXw= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= @@ -782,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/conversation.go b/internal/api/conversation.go index 7f1732fec..6058049a1 100644 --- a/internal/api/conversation.go +++ b/internal/api/conversation.go @@ -41,18 +41,6 @@ func (o *ConversationApi) GetConversations(c *gin.Context) { a2r.Call(conversation.ConversationClient.GetConversations, o.Client, c) } -func (o *ConversationApi) BatchSetConversations(c *gin.Context) { - a2r.Call(conversation.ConversationClient.BatchSetConversations, o.Client, c) -} - -func (o *ConversationApi) SetRecvMsgOpt(c *gin.Context) { - a2r.Call(conversation.ConversationClient.SetRecvMsgOpt, o.Client, c) -} - -func (o *ConversationApi) ModifyConversationField(c *gin.Context) { - a2r.Call(conversation.ConversationClient.ModifyConversationField, o.Client, c) -} - func (o *ConversationApi) SetConversations(c *gin.Context) { a2r.Call(conversation.ConversationClient.SetConversations, o.Client, c) } diff --git a/internal/api/group.go b/internal/api/group.go index 432645caa..2e293f72a 100644 --- a/internal/api/group.go +++ b/internal/api/group.go @@ -128,3 +128,7 @@ func (o *GroupApi) GetJoinedSuperGroupList(c *gin.Context) { func (o *GroupApi) GetSuperGroupsInfo(c *gin.Context) { a2r.Call(group.GroupClient.GetSuperGroupsInfo, o.Client, c) } + +func (o *GroupApi) GroupCreateCount(c *gin.Context) { + a2r.Call(group.GroupClient.GroupCreateCount, o.Client, c) +} diff --git a/internal/api/msg.go b/internal/api/msg.go index a4da4ea7e..7e9101681 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -25,6 +25,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/apistruct" "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/msg" @@ -162,33 +163,16 @@ 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 { apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) return } - // todo - //if !tokenverify.IsAppManagerUid(c) { - // apiresp.GinError(c, errs.ErrNoPermission.Wrap("only app manager can send message")) - // return - //} + if !tokenverify.IsAppManagerUid(c) { + apiresp.GinError(c, errs.ErrNoPermission.Wrap("only app manager can send message")) + return + } var data interface{} switch params.ContentType { @@ -253,3 +237,11 @@ func (m *MessageApi) CheckMsgIsSendSuccess(c *gin.Context) { func (m *MessageApi) GetUsersOnlineStatus(c *gin.Context) { a2r.Call(msg.MsgClient.GetSendMsgStatus, m.Client, c) } + +func (m *MessageApi) GetActiveUser(c *gin.Context) { + a2r.Call(msg.MsgClient.GetActiveUser, m.Client, c) +} + +func (m *MessageApi) GetActiveGroup(c *gin.Context) { + a2r.Call(msg.MsgClient.GetActiveGroup, m.Client, c) +} diff --git a/internal/api/route.go b/internal/api/route.go index b014f66ab..b37e5a3f7 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -41,6 +41,7 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive log.ZInfo(context.Background(), "load config", "config", config.Config) r.Use(gin.Recovery(), mw.CorsHandler(), mw.GinParseOperationID()) u := NewUserApi(discov) + m := NewMessageApi(discov) if config.Config.Prometheus.Enable { prome.NewApiRequestCounter() prome.NewApiRequestFailedCounter() @@ -59,6 +60,7 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive userRouterGroup.POST("/account_check", ParseToken, u.AccountCheck) userRouterGroup.POST("/get_users", ParseToken, u.GetUsers) userRouterGroup.POST("/get_users_online_status", ParseToken, u.GetUsersOnlineStatus) + userRouterGroup.POST("/get_users_online_token_detail", ParseToken, u.GetUsersOnlineTokenDetail) } //friend routing group friendRouterGroup := r.Group("/friend", ParseToken) @@ -111,7 +113,6 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive authRouterGroup := r.Group("/auth") { a := NewAuthApi(discov) - authRouterGroup.POST("/user_register", u.UserRegister) authRouterGroup.POST("/user_token", a.UserToken) authRouterGroup.POST("/parse_token", a.ParseToken) authRouterGroup.POST("/force_logout", ParseToken, a.ForceLogout) @@ -123,17 +124,19 @@ 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) } //Message msgGroup := r.Group("/msg", ParseToken) { - m := NewMessageApi(discov) msgGroup.POST("/newest_seq", m.GetSeq) msgGroup.POST("/send_msg", m.SendMessage) msgGroup.POST("/pull_msg_by_seq", m.PullMsgBySeqs) @@ -159,15 +162,15 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive conversationGroup.POST("/get_all_conversations", c.GetAllConversations) conversationGroup.POST("/get_conversation", c.GetConversation) conversationGroup.POST("/get_conversations", c.GetConversations) - conversationGroup.POST("/batch_set_conversation", c.BatchSetConversations) - conversationGroup.POST("/set_recv_msg_opt", c.SetRecvMsgOpt) - conversationGroup.POST("/modify_conversation_field", c.ModifyConversationField) conversationGroup.POST("/set_conversations", c.SetConversations) } statisticsGroup := r.Group("/statistics", ParseToken) { - statisticsGroup.POST("/user_register", u.UserRegisterCount) + statisticsGroup.POST("/user/register", u.UserRegisterCount) + statisticsGroup.POST("/user/active", m.GetActiveUser) + statisticsGroup.POST("/group/create", g.GroupCreateCount) + statisticsGroup.POST("/group/active", m.GetActiveGroup) } return r } diff --git a/internal/api/third.go b/internal/api/third.go index 79be58a46..ad9475511 100644 --- a/internal/api/third.go +++ b/internal/api/third.go @@ -1,33 +1,16 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package api import ( - "math/rand" - "net/http" - "strconv" - - "github.com/gin-gonic/gin" - "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/gin-gonic/gin" + "math/rand" + "net/http" + "strconv" ) type ThirdApi rpcclient.Third @@ -36,22 +19,6 @@ 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) GetPut(c *gin.Context) { - a2r.Call(third.ThirdClient.GetPut, o.Client, c) -} - -func (o *ThirdApi) ConfirmPut(c *gin.Context) { - a2r.Call(third.ThirdClient.ConfirmPut, o.Client, c) -} - -func (o *ThirdApi) GetHash(c *gin.Context) { - a2r.Call(third.ThirdClient.GetHashInfo, o.Client, c) -} - func (o *ThirdApi) FcmUpdateToken(c *gin.Context) { a2r.Call(third.ThirdClient.FcmUpdateToken, o.Client, c) } @@ -60,30 +27,47 @@ func (o *ThirdApi) SetAppBadge(c *gin.Context) { a2r.Call(third.ThirdClient.SetAppBadge, 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") +// #################### s3 #################### + +func (o *ThirdApi) PartLimit(c *gin.Context) { + a2r.Call(third.ThirdClient.PartLimit, o.Client, c) +} + +func (o *ThirdApi) PartSize(c *gin.Context) { + a2r.Call(third.ThirdClient.PartSize, o.Client, c) +} + +func (o *ThirdApi) InitiateMultipartUpload(c *gin.Context) { + a2r.Call(third.ThirdClient.InitiateMultipartUpload, o.Client, c) +} + +func (o *ThirdApi) AuthSign(c *gin.Context) { + a2r.Call(third.ThirdClient.AuthSign, o.Client, c) +} + +func (o *ThirdApi) CompleteMultipartUpload(c *gin.Context) { + a2r.Call(third.ThirdClient.CompleteMultipartUpload, o.Client, c) +} + +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()) + operationID = strconv.Itoa(rand.Int()) } - expires, _ := strconv.ParseInt(c.Query("expires"), 10, 64) - if expires <= 0 { - expires = 3600 * 1000 - } - 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()) diff --git a/internal/api/user.go b/internal/api/user.go index e99e17b00..4e3fb7f7f 100644 --- a/internal/api/user.go +++ b/internal/api/user.go @@ -19,10 +19,12 @@ 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/tokenverify" + "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/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msggateway" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/user" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" ) @@ -62,17 +64,118 @@ 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) { a2r.Call(user.UserClient.UserRegisterCount, u.Client, c) } + +func (u *UserApi) GetUsersOnlineTokenDetail(c *gin.Context) { + var wsResult []*msggateway.GetUsersOnlineStatusResp_SuccessResult + var respResult []*msggateway.SingleDetail + flag := false + var req msggateway.GetUsersOnlineStatusReq + if err := c.BindJSON(&req); err != nil { + apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) + return + } + conns, err := u.Discov.GetConns(c, config.Config.RpcRegisterName.OpenImMessageGatewayName) + if err != nil { + apiresp.GinError(c, err) + return + } + //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...) + } + } + + for _, v1 := range req.UserIDs { + m := make(map[string][]string, 10) + flag = false + temp := new(msggateway.SingleDetail) + for _, v2 := range wsResult { + if v2.UserID == v1 { + flag = true + temp.UserID = v1 + temp.Status = constant.OnlineStatus + for _, status := range v2.DetailPlatformStatus { + if v, ok := m[status.Platform]; ok { + m[status.Platform] = append(v, status.Token) + } else { + m[status.Platform] = []string{status.Token} + } + } + } + + } + for p, tokens := range m { + t := new(msggateway.SinglePlatformToken) + t.Platform = p + t.Token = tokens + t.Total = int32(len(tokens)) + temp.SinglePlatformToken = append(temp.SinglePlatformToken, t) + } + + if flag { + respResult = append(respResult, temp) + } + } + + apiresp.GinSuccess(c, respResult) + +} diff --git a/internal/msggateway/client.go b/internal/msggateway/client.go index 439a98fee..ec3e08d7c 100644 --- a/internal/msggateway/client.go +++ b/internal/msggateway/client.go @@ -21,14 +21,13 @@ import ( "runtime/debug" "sync" - "google.golang.org/protobuf/proto" - "github.com/OpenIMSDK/Open-IM-Server/pkg/apiresp" "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" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" + "google.golang.org/protobuf/proto" ) var ErrConnClosed = errors.New("conn has closed") @@ -68,6 +67,7 @@ type Client struct { longConnServer LongConnServer closed bool closedErr error + token string } func newClient(ctx *UserConnContext, conn LongConn, isCompress bool) *Client { @@ -80,13 +80,7 @@ func newClient(ctx *UserConnContext, conn LongConn, isCompress bool) *Client { ctx: ctx, } } - -func (c *Client) ResetClient( - ctx *UserConnContext, - conn LongConn, - isBackground, isCompress bool, - longConnServer LongConnServer, -) { +func (c *Client) ResetClient(ctx *UserConnContext, conn LongConn, isBackground, isCompress bool, longConnServer LongConnServer, token string) { c.w = new(sync.Mutex) c.conn = conn c.PlatformID = utils.StringToInt(ctx.GetPlatformID()) @@ -98,6 +92,7 @@ func (c *Client) ResetClient( c.IsBackground = false c.closed = false c.closedErr = nil + c.token = token } func (c *Client) pongHandler(_ string) error { c.conn.SetReadDeadline(pongWait) @@ -166,9 +161,7 @@ func (c *Client) handleMessage(message []byte) error { if binaryReq.SendID != c.UserID { return utils.Wrap(errors.New("exception conn userID not same to req userID"), binaryReq.String()) } - ctx := mcontext.WithMustInfoCtx( - []string{binaryReq.OperationID, binaryReq.SendID, constant.PlatformIDToName(c.PlatformID), c.ctx.GetConnID()}, - ) + ctx := mcontext.WithMustInfoCtx([]string{binaryReq.OperationID, binaryReq.SendID, constant.PlatformIDToName(c.PlatformID), c.ctx.GetConnID()}) log.ZDebug(ctx, "gateway req message", "req", binaryReq.String()) var messageErr error var resp []byte @@ -186,12 +179,7 @@ func (c *Client) handleMessage(message []byte) error { case WsSetBackgroundStatus: resp, messageErr = c.setAppBackgroundStatus(ctx, binaryReq) default: - return fmt.Errorf( - "ReqIdentifier failed,sendID:%s,msgIncr:%s,reqIdentifier:%d", - binaryReq.SendID, - binaryReq.MsgIncr, - binaryReq.ReqIdentifier, - ) + return fmt.Errorf("ReqIdentifier failed,sendID:%s,msgIncr:%s,reqIdentifier:%d", binaryReq.SendID, binaryReq.MsgIncr, binaryReq.ReqIdentifier) } c.replyMessage(ctx, &binaryReq, messageErr, resp) return nil diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index a7d571e20..ea7b9fd8d 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -101,6 +101,7 @@ func (s *Server) GetUsersOnlineStatus( ps.Platform = constant.PlatformIDToName(client.PlatformID) ps.Status = constant.OnlineStatus ps.ConnID = client.ctx.GetConnID() + ps.Token = client.token ps.IsBackground = client.IsBackground temp.Status = constant.OnlineStatus temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, ps) @@ -179,11 +180,14 @@ func (s *Server) KickUserOffline( for _, v := range req.KickUserIDList { if clients, _, ok := s.LongConnServer.GetUserPlatformCons(v, int(req.PlatformID)); ok { for _, client := range clients { + log.ZDebug(ctx, "kick user offline", "userID", v, "platformID", req.PlatformID, "client", client) err := client.KickOnlineMessage() if err != nil { return nil, err } } + } else { + log.ZWarn(ctx, "conn not exist", nil, "userID", v, "platformID", req.PlatformID) } } return &msggateway.KickUserOfflineResp{}, nil diff --git a/internal/msggateway/n_ws_server.go b/internal/msggateway/n_ws_server.go index 53469fca8..c204dc115 100644 --- a/internal/msggateway/n_ws_server.go +++ b/internal/msggateway/n_ws_server.go @@ -381,7 +381,7 @@ func (ws *WsServer) wsHandler(w http.ResponseWriter, r *http.Request) { } } client := ws.clientPool.Get().(*Client) - client.ResetClient(connContext, wsLongConn, connContext.GetBackground(), compression, ws) + client.ResetClient(connContext, wsLongConn, connContext.GetBackground(), compression, ws, token) ws.registerChan <- client go client.readMessage() } diff --git a/internal/msgtransfer/init.go b/internal/msgtransfer/init.go index 946048f0c..1f166d743 100644 --- a/internal/msgtransfer/init.go +++ b/internal/msgtransfer/init.go @@ -1,17 +1,3 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package msgtransfer import ( @@ -19,28 +5,26 @@ import ( "sync" "time" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" - "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/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" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" openKeeper "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry/zookeeper" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" ) 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 { @@ -62,18 +46,9 @@ func StartTransfer(prometheusPort int) error { if err := mongo.CreateMsgIndex(); err != nil { return err } - client, err := openKeeper.NewClient( - config.Config.Zookeeper.ZkAddr, - config.Config.Zookeeper.Schema, - openKeeper.WithFreq( - time.Hour, - ), - openKeeper.WithRoundRobin(), - openKeeper.WithUserNameAndPassword(config.Config.Zookeeper.Username, - config.Config.Zookeeper.Password), - openKeeper.WithTimeout(10), - openKeeper.WithLogger(log.NewZkLogger()), - ) + client, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, + openKeeper.WithFreq(time.Hour), openKeeper.WithRoundRobin(), openKeeper.WithUserNameAndPassword(config.Config.Zookeeper.Username, + config.Config.Zookeeper.Password), openKeeper.WithTimeout(10), openKeeper.WithLogger(log.NewZkLogger())) if err != nil { return err } @@ -83,35 +58,20 @@ func StartTransfer(prometheusPort int) error { client.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials())) msgModel := cache.NewMsgCacheModel(rdb) msgDocModel := unrelation.NewMsgMongoDriver(mongo.GetDatabase()) - extendMsgModel := unrelation.NewExtendMsgSetMongoDriver(mongo.GetDatabase()) - extendMsgCache := cache.NewExtendMsgSetCacheRedis(rdb, extendMsgModel, cache.GetDefaultOpt()) chatLogDatabase := controller.NewChatLogDatabase(relation.NewChatLogGorm(db)) - extendMsgDatabase := controller.NewExtendMsgDatabase(extendMsgModel, extendMsgCache, tx.NewMongo(mongo.GetClient())) msgDatabase := controller.NewCommonMsgDatabase(msgDocModel, msgModel) 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), - } + return &MsgTransfer{persistentCH: NewPersistentConsumerHandler(chatLogDatabase), historyCH: NewOnlineHistoryRedisConsumerHandler(msgDatabase, conversationRpcClient, groupRpcClient), + historyMongoCH: NewOnlineHistoryMongoConsumerHandler(msgDatabase)} } func (m *MsgTransfer) initPrometheus() { @@ -136,7 +96,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 38a2f5fce..000000000 --- a/internal/msgtransfer/modify_msg_handler.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package msgtransfer - -import ( - "context" - "encoding/json" - - "github.com/Shopify/sarama" - - "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" - - "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/push/push_to_client.go b/internal/push/push_to_client.go index 7cc5b1ea4..607d862e1 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -1,17 +1,3 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package push import ( @@ -52,16 +38,9 @@ type Pusher struct { var errNoOfflinePusher = errors.New("no offlinePusher is configured") -func NewPusher( - discov discoveryregistry.SvcDiscoveryRegistry, - offlinePusher offlinepush.OfflinePusher, - database controller.PushDatabase, - groupLocalCache *localcache.GroupLocalCache, - conversationLocalCache *localcache.ConversationLocalCache, - conversationRpcClient *rpcclient.ConversationRpcClient, - groupRpcClient *rpcclient.GroupRpcClient, - msgRpcClient *rpcclient.MessageRpcClient, -) *Pusher { +func NewPusher(discov discoveryregistry.SvcDiscoveryRegistry, offlinePusher offlinepush.OfflinePusher, database controller.PushDatabase, + groupLocalCache *localcache.GroupLocalCache, conversationLocalCache *localcache.ConversationLocalCache, + conversationRpcClient *rpcclient.ConversationRpcClient, groupRpcClient *rpcclient.GroupRpcClient, msgRpcClient *rpcclient.MessageRpcClient) *Pusher { return &Pusher{ discov: discov, database: database, @@ -108,18 +87,7 @@ func (p *Pusher) Push2User(ctx context.Context, userIDs []string, msg *sdkws.Msg return err } isOfflinePush := utils.GetSwitchFromOptions(msg.Options, constant.IsOfflinePush) - log.ZDebug( - ctx, - "push_result", - "ws push result", - wsResults, - "sendData", - msg, - "isOfflinePush", - isOfflinePush, - "push_to_userID", - userIDs, - ) + log.ZDebug(ctx, "push_result", "ws push result", wsResults, "sendData", msg, "isOfflinePush", isOfflinePush, "push_to_userID", userIDs) p.successCount++ for _, userID := range userIDs { if isOfflinePush && userID != msg.SendID { @@ -170,15 +138,7 @@ func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws } defer func(groupID string, userIDs []string) { if err := p.DeleteMemberAndSetConversationSeq(ctx, groupID, userIDs); err != nil { - log.ZError( - ctx, - "MemberQuitNotification DeleteMemberAndSetConversationSeq", - err, - "groupID", - groupID, - "userIDs", - userIDs, - ) + log.ZError(ctx, "MemberQuitNotification DeleteMemberAndSetConversationSeq", err, "groupID", groupID, "userIDs", userIDs) } }(groupID, []string{tips.QuitUser.UserID}) pushToUserIDs = append(pushToUserIDs, tips.QuitUser.UserID) @@ -187,21 +147,10 @@ func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws if p.UnmarshalNotificationElem(msg.Content, &tips) != nil { return err } - kickedUsers := utils.Slice( - tips.KickedUserList, - func(e *sdkws.GroupMemberFullInfo) string { return e.UserID }, - ) + kickedUsers := utils.Slice(tips.KickedUserList, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID }) defer func(groupID string, userIDs []string) { if err := p.DeleteMemberAndSetConversationSeq(ctx, groupID, userIDs); err != nil { - log.ZError( - ctx, - "MemberKickedNotification DeleteMemberAndSetConversationSeq", - err, - "groupID", - groupID, - "userIDs", - userIDs, - ) + log.ZError(ctx, "MemberKickedNotification DeleteMemberAndSetConversationSeq", err, "groupID", groupID, "userIDs", userIDs) } }(groupID, kickedUsers) pushToUserIDs = append(pushToUserIDs, kickedUsers...) @@ -211,16 +160,7 @@ func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws if p.UnmarshalNotificationElem(msg.Content, &tips) != nil { return err } - log.ZInfo( - ctx, - "GroupDismissedNotificationInfo****", - "groupID", - groupID, - "num", - len(pushToUserIDs), - "list", - pushToUserIDs, - ) + log.ZInfo(ctx, "GroupDismissedNotificationInfo****", "groupID", groupID, "num", len(pushToUserIDs), "list", pushToUserIDs) if len(config.Config.Manager.UserID) > 0 { ctx = mcontext.WithOpUserIDContext(ctx, config.Config.Manager.UserID[0]) } @@ -284,23 +224,9 @@ func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws log.ZError(ctx, "offlinePushMsg failed", err, "groupID", groupID, "msg", msg) return err } - _, err := p.GetConnsAndOnlinePush( - ctx, - msg, - utils.IntersectString(needOfflinePushUserIDs, WebAndPcBackgroundUserIDs), - ) + _, err := p.GetConnsAndOnlinePush(ctx, msg, utils.IntersectString(needOfflinePushUserIDs, WebAndPcBackgroundUserIDs)) if err != nil { - log.ZError( - ctx, - "offlinePushMsg failed", - err, - "groupID", - groupID, - "msg", - msg, - "userIDs", - utils.IntersectString(needOfflinePushUserIDs, WebAndPcBackgroundUserIDs), - ) + log.ZError(ctx, "offlinePushMsg failed", err, "groupID", groupID, "msg", msg, "userIDs", utils.IntersectString(needOfflinePushUserIDs, WebAndPcBackgroundUserIDs)) return err } } @@ -308,11 +234,7 @@ func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws return nil } -func (p *Pusher) GetConnsAndOnlinePush( - ctx context.Context, - msg *sdkws.MsgData, - pushToUserIDs []string, -) (wsResults []*msggateway.SingleMsgToUserResults, err error) { +func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData, pushToUserIDs []string) (wsResults []*msggateway.SingleMsgToUserResults, err error) { conns, err := p.discov.GetConns(ctx, config.Config.RpcRegisterName.OpenImMessageGatewayName) log.ZDebug(ctx, "get gateway conn", "conn length", len(conns)) if err != nil { @@ -321,11 +243,7 @@ func (p *Pusher) GetConnsAndOnlinePush( //Online push message for _, v := range conns { msgClient := msggateway.NewMsgGatewayClient(v) - reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg( - ctx, - &msggateway.OnlineBatchPushOneMsgReq{MsgData: msg, PushToUserIDs: pushToUserIDs}, - ) - p.discov.CloseConn(v) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(ctx, &msggateway.OnlineBatchPushOneMsgReq{MsgData: msg, PushToUserIDs: pushToUserIDs}) if err != nil { continue } @@ -338,12 +256,7 @@ func (p *Pusher) GetConnsAndOnlinePush( return wsResults, nil } -func (p *Pusher) offlinePushMsg( - ctx context.Context, - conversationID string, - msg *sdkws.MsgData, - offlinePushUserIDs []string, -) error { +func (p *Pusher) offlinePushMsg(ctx context.Context, conversationID string, msg *sdkws.MsgData, offlinePushUserIDs []string) error { title, content, opts, err := p.getOfflinePushInfos(conversationID, msg) if err != nil { return err @@ -377,10 +290,7 @@ func (p *Pusher) GetOfflinePushOpts(msg *sdkws.MsgData) (opts *offlinepush.Opts, return opts, nil } -func (p *Pusher) getOfflinePushInfos( - conversationID string, - msg *sdkws.MsgData, -) (title, content string, opts *offlinepush.Opts, err error) { +func (p *Pusher) getOfflinePushInfos(conversationID string, msg *sdkws.MsgData) (title, content string, opts *offlinepush.Opts, err error) { if p.offlinePusher == nil { err = errNoOfflinePusher return diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 9376a5ccc..48e21fbce 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -60,7 +60,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e func (s *authServer) UserToken(ctx context.Context, req *pbAuth.UserTokenReq) (*pbAuth.UserTokenResp, error) { resp := pbAuth.UserTokenResp{} if req.Secret != config.Config.Secret { - return nil, errs.ErrIdentity.Wrap("secret invalid") + return nil, errs.ErrNoPermission.Wrap("secret invalid") } if _, err := s.userRpcClient.GetUserInfo(ctx, req.UserID); err != nil { return nil, err @@ -115,14 +115,13 @@ func (s *authServer) ParseToken( } func (s *authServer) ForceLogout(ctx context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) { - resp := pbAuth.ForceLogoutResp{} if err := tokenverify.CheckAdmin(ctx); err != nil { return nil, err } if err := s.forceKickOff(ctx, req.UserID, req.PlatformID, mcontext.GetOperationID(ctx)); err != nil { return nil, err } - return &resp, nil + return &pbAuth.ForceLogoutResp{}, nil } func (s *authServer) forceKickOff(ctx context.Context, userID string, platformID int32, operationID string) error { @@ -134,8 +133,7 @@ func (s *authServer) forceKickOff(ctx context.Context, userID string, platformID client := msggateway.NewMsgGatewayClient(v) kickReq := &msggateway.KickUserOfflineReq{KickUserIDList: []string{userID}, PlatformID: platformID} _, err := client.KickUserOffline(ctx, kickReq) - s.RegisterCenter.CloseConn(v) return utils.Wrap(err, "") } - return errs.ErrInternalServer.Wrap() + return nil } diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index 640c09991..1f45d0224 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -1,24 +1,8 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package conversation import ( "context" - "google.golang.org/grpc" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/convert" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" @@ -33,6 +17,7 @@ import ( "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" ) type conversationServer struct { @@ -59,19 +44,12 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e pbConversation.RegisterConversationServer(server, &conversationServer{ conversationNotificationSender: notification.NewConversationNotificationSender(&msgRpcClient), groupRpcClient: &groupRpcClient, - conversationDatabase: controller.NewConversationDatabase( - conversationDB, - cache.NewConversationRedis(rdb, cache.GetDefaultOpt(), conversationDB), - tx.NewGorm(db), - ), + conversationDatabase: controller.NewConversationDatabase(conversationDB, cache.NewConversationRedis(rdb, cache.GetDefaultOpt(), conversationDB), tx.NewGorm(db)), }) return nil } -func (c *conversationServer) GetConversation( - ctx context.Context, - req *pbConversation.GetConversationReq, -) (*pbConversation.GetConversationResp, error) { +func (c *conversationServer) GetConversation(ctx context.Context, req *pbConversation.GetConversationReq) (*pbConversation.GetConversationResp, error) { conversations, err := c.conversationDatabase.FindConversations(ctx, req.OwnerUserID, []string{req.ConversationID}) if err != nil { return nil, err @@ -84,10 +62,7 @@ func (c *conversationServer) GetConversation( return resp, nil } -func (c *conversationServer) GetAllConversations( - ctx context.Context, - req *pbConversation.GetAllConversationsReq, -) (*pbConversation.GetAllConversationsResp, error) { +func (c *conversationServer) GetAllConversations(ctx context.Context, req *pbConversation.GetAllConversationsReq) (*pbConversation.GetAllConversationsResp, error) { conversations, err := c.conversationDatabase.GetUserAllConversation(ctx, req.OwnerUserID) if err != nil { return nil, err @@ -97,10 +72,7 @@ func (c *conversationServer) GetAllConversations( return resp, nil } -func (c *conversationServer) GetConversations( - ctx context.Context, - req *pbConversation.GetConversationsReq, -) (*pbConversation.GetConversationsResp, error) { +func (c *conversationServer) GetConversations(ctx context.Context, req *pbConversation.GetConversationsReq) (*pbConversation.GetConversationsResp, error) { conversations, err := c.conversationDatabase.FindConversations(ctx, req.OwnerUserID, req.ConversationIDs) if err != nil { return nil, err @@ -110,32 +82,12 @@ func (c *conversationServer) GetConversations( return resp, nil } -func (c *conversationServer) BatchSetConversations( - ctx context.Context, - req *pbConversation.BatchSetConversationsReq, -) (*pbConversation.BatchSetConversationsResp, error) { - conversations := convert.ConversationsPb2DB(req.Conversations) - err := c.conversationDatabase.SetUserConversations(ctx, req.OwnerUserID, conversations) - if err != nil { - return nil, err - } - _ = c.conversationNotificationSender.ConversationChangeNotification(ctx, req.OwnerUserID) - return &pbConversation.BatchSetConversationsResp{}, nil -} - -func (c *conversationServer) SetConversation( - ctx context.Context, - req *pbConversation.SetConversationReq, -) (*pbConversation.SetConversationResp, error) { +func (c *conversationServer) SetConversation(ctx context.Context, req *pbConversation.SetConversationReq) (*pbConversation.SetConversationResp, error) { var conversation tableRelation.ConversationModel if err := utils.CopyStructFields(&conversation, req.Conversation); err != nil { return nil, err } - err := c.conversationDatabase.SetUserConversations( - ctx, - req.Conversation.OwnerUserID, - []*tableRelation.ConversationModel{&conversation}, - ) + err := c.conversationDatabase.SetUserConversations(ctx, req.Conversation.OwnerUserID, []*tableRelation.ConversationModel{&conversation}) if err != nil { return nil, err } @@ -144,79 +96,7 @@ func (c *conversationServer) SetConversation( return resp, nil } -func (c *conversationServer) SetRecvMsgOpt( - ctx context.Context, - req *pbConversation.SetRecvMsgOptReq, -) (*pbConversation.SetRecvMsgOptResp, error) { - if err := c.conversationDatabase.SetUsersConversationFiledTx(ctx, []string{req.OwnerUserID}, &tableRelation.ConversationModel{OwnerUserID: req.OwnerUserID, ConversationID: req.ConversationID, RecvMsgOpt: req.RecvMsgOpt}, map[string]interface{}{"recv_msg_opt": req.RecvMsgOpt}); err != nil { - return nil, err - } - _ = c.conversationNotificationSender.ConversationChangeNotification(ctx, req.OwnerUserID) - return &pbConversation.SetRecvMsgOptResp{}, nil -} - -// deprecated -func (c *conversationServer) ModifyConversationField( - ctx context.Context, - req *pbConversation.ModifyConversationFieldReq, -) (*pbConversation.ModifyConversationFieldResp, error) { - resp := &pbConversation.ModifyConversationFieldResp{} - var err error - if req.Conversation.ConversationType == constant.GroupChatType { - groupInfo, err := c.groupRpcClient.GetGroupInfo(ctx, req.Conversation.GroupID) - if err != nil { - return nil, err - } - if groupInfo.Status == constant.GroupStatusDismissed && req.FieldType != constant.FieldUnread { - return nil, err - } - } - conversation := convert.ConversationPb2DB(req.Conversation) - if req.FieldType == constant.FieldIsPrivateChat { - err := c.conversationDatabase.SyncPeerUserPrivateConversationTx( - ctx, - []*tableRelation.ConversationModel{conversation}, - ) - if err != nil { - return nil, err - } - c.conversationNotificationSender.ConversationSetPrivateNotification( - ctx, - req.Conversation.OwnerUserID, - req.Conversation.UserID, - req.Conversation.IsPrivateChat, - ) - return resp, nil - } - filedMap := make(map[string]interface{}) - switch req.FieldType { - case constant.FieldRecvMsgOpt: - filedMap["recv_msg_opt"] = req.Conversation.RecvMsgOpt - case constant.FieldGroupAtType: - filedMap["group_at_type"] = req.Conversation.GroupAtType - case constant.FieldIsPinned: - filedMap["is_pinned"] = req.Conversation.IsPinned - case constant.FieldEx: - filedMap["ex"] = req.Conversation.Ex - case constant.FieldAttachedInfo: - filedMap["attached_info"] = req.Conversation.AttachedInfo - case constant.FieldBurnDuration: - filedMap["burn_duration"] = req.Conversation.BurnDuration - } - err = c.conversationDatabase.SetUsersConversationFiledTx(ctx, req.UserIDList, conversation, filedMap) - if err != nil { - return nil, err - } - for _, v := range req.UserIDList { - c.conversationNotificationSender.ConversationChangeNotification(ctx, v) - } - return resp, nil -} - -func (c *conversationServer) SetConversations( - ctx context.Context, - req *pbConversation.SetConversationsReq, -) (*pbConversation.SetConversationsResp, error) { +func (c *conversationServer) SetConversations(ctx context.Context, req *pbConversation.SetConversationsReq) (*pbConversation.SetConversationsResp, error) { if req.Conversation == nil { return nil, errs.ErrArgs.Wrap("conversation must not be nil") } @@ -228,6 +108,12 @@ func (c *conversationServer) SetConversations( 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 + // } + // } } var conversation tableRelation.ConversationModel conversation.ConversationID = req.Conversation.ConversationID @@ -250,24 +136,25 @@ func (c *conversationServer) SetConversations( if req.Conversation.GroupAtType != nil { m["group_at_type"] = req.Conversation.GroupAtType.Value } - if req.Conversation.IsPrivateChat != nil { + 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 { conversation2 := conversation - conversation.OwnerUserID = ownerUserID - conversation.IsPrivateChat = req.Conversation.IsPrivateChat.Value + conversation2.OwnerUserID = ownerUserID + conversation2.IsPrivateChat = req.Conversation.IsPrivateChat.Value conversations = append(conversations, &conversation2) } if err := c.conversationDatabase.SyncPeerUserPrivateConversationTx(ctx, conversations); err != nil { return nil, err } - for _, ownerUserID := range req.UserIDs { - c.conversationNotificationSender.ConversationSetPrivateNotification( - ctx, - ownerUserID, - req.Conversation.UserID, - req.Conversation.IsPrivateChat.Value, - ) + for _, userID := range req.UserIDs { + c.conversationNotificationSender.ConversationSetPrivateNotification(ctx, userID, req.Conversation.UserID, req.Conversation.IsPrivateChat.Value) } } if req.Conversation.BurnDuration != nil { @@ -284,10 +171,7 @@ func (c *conversationServer) SetConversations( } // 获取超级大群开启免打扰的用户ID -func (c *conversationServer) GetRecvMsgNotNotifyUserIDs( - ctx context.Context, - req *pbConversation.GetRecvMsgNotNotifyUserIDsReq, -) (*pbConversation.GetRecvMsgNotNotifyUserIDsResp, error) { +func (c *conversationServer) GetRecvMsgNotNotifyUserIDs(ctx context.Context, req *pbConversation.GetRecvMsgNotNotifyUserIDsReq) (*pbConversation.GetRecvMsgNotNotifyUserIDsResp, error) { userIDs, err := c.conversationDatabase.FindRecvMsgNotNotifyUserIDs(ctx, req.GroupID) if err != nil { return nil, err @@ -296,10 +180,7 @@ func (c *conversationServer) GetRecvMsgNotNotifyUserIDs( } // create conversation without notification for msg redis transfer -func (c *conversationServer) CreateSingleChatConversations( - ctx context.Context, - req *pbConversation.CreateSingleChatConversationsReq, -) (*pbConversation.CreateSingleChatConversationsResp, error) { +func (c *conversationServer) CreateSingleChatConversations(ctx context.Context, req *pbConversation.CreateSingleChatConversationsReq) (*pbConversation.CreateSingleChatConversationsResp, error) { var conversation tableRelation.ConversationModel conversation.ConversationID = utils.GetConversationIDBySessionType(constant.SingleChatType, req.RecvID, req.SendID) conversation.ConversationType = constant.SingleChatType @@ -320,10 +201,7 @@ func (c *conversationServer) CreateSingleChatConversations( return &pbConversation.CreateSingleChatConversationsResp{}, nil } -func (c *conversationServer) CreateGroupChatConversations( - ctx context.Context, - req *pbConversation.CreateGroupChatConversationsReq, -) (*pbConversation.CreateGroupChatConversationsResp, error) { +func (c *conversationServer) CreateGroupChatConversations(ctx context.Context, req *pbConversation.CreateGroupChatConversationsReq) (*pbConversation.CreateGroupChatConversationsResp, error) { err := c.conversationDatabase.CreateGroupChatConversation(ctx, req.GroupID, req.UserIDs) if err != nil { return nil, err @@ -331,10 +209,7 @@ func (c *conversationServer) CreateGroupChatConversations( return &pbConversation.CreateGroupChatConversationsResp{}, nil } -func (c *conversationServer) SetConversationMaxSeq( - ctx context.Context, - req *pbConversation.SetConversationMaxSeqReq, -) (*pbConversation.SetConversationMaxSeqResp, error) { +func (c *conversationServer) SetConversationMaxSeq(ctx context.Context, req *pbConversation.SetConversationMaxSeqReq) (*pbConversation.SetConversationMaxSeqResp, error) { if err := c.conversationDatabase.UpdateUsersConversationFiled(ctx, req.OwnerUserID, req.ConversationID, map[string]interface{}{"max_seq": req.MaxSeq}); err != nil { return nil, err @@ -342,10 +217,7 @@ func (c *conversationServer) SetConversationMaxSeq( return &pbConversation.SetConversationMaxSeqResp{}, nil } -func (c *conversationServer) GetConversationIDs( - ctx context.Context, - req *pbConversation.GetConversationIDsReq, -) (*pbConversation.GetConversationIDsResp, error) { +func (c *conversationServer) GetConversationIDs(ctx context.Context, req *pbConversation.GetConversationIDsReq) (*pbConversation.GetConversationIDsResp, error) { conversationIDs, err := c.conversationDatabase.GetConversationIDs(ctx, req.UserID) if err != nil { return nil, err @@ -353,10 +225,7 @@ func (c *conversationServer) GetConversationIDs( return &pbConversation.GetConversationIDsResp{ConversationIDs: conversationIDs}, nil } -func (c *conversationServer) GetUserConversationIDsHash( - ctx context.Context, - req *pbConversation.GetUserConversationIDsHashReq, -) (*pbConversation.GetUserConversationIDsHashResp, error) { +func (c *conversationServer) GetUserConversationIDsHash(ctx context.Context, req *pbConversation.GetUserConversationIDsHashReq) (*pbConversation.GetUserConversationIDsHashResp, error) { hash, err := c.conversationDatabase.GetUserConversationIDsHash(ctx, req.OwnerUserID) if err != nil { return nil, err @@ -364,15 +233,10 @@ func (c *conversationServer) GetUserConversationIDsHash( return &pbConversation.GetUserConversationIDsHashResp{Hash: hash}, nil } -func (c *conversationServer) GetConversationsByConversationID( - ctx context.Context, - req *pbConversation.GetConversationsByConversationIDReq, -) (*pbConversation.GetConversationsByConversationIDResp, error) { +func (c *conversationServer) GetConversationsByConversationID(ctx context.Context, req *pbConversation.GetConversationsByConversationIDReq) (*pbConversation.GetConversationsByConversationIDResp, error) { conversations, err := c.conversationDatabase.GetConversationsByConversationID(ctx, req.ConversationIDs) if err != nil { return nil, err } - return &pbConversation.GetConversationsByConversationIDResp{ - Conversations: convert.ConversationsDB2Pb(conversations), - }, nil + return &pbConversation.GetConversationsByConversationIDResp{Conversations: convert.ConversationsDB2Pb(conversations)}, nil } diff --git a/internal/rpc/group/db_map.go b/internal/rpc/group/db_map.go index 2ab1a75ea..84c0e74a4 100644 --- a/internal/rpc/group/db_map.go +++ b/internal/rpc/group/db_map.go @@ -15,19 +15,23 @@ package group import ( + "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "time" pbGroup "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/group" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" ) -func UpdateGroupInfoMap(group *sdkws.GroupInfoForSet) map[string]any { +func UpdateGroupInfoMap(ctx context.Context, group *sdkws.GroupInfoForSet) map[string]any { m := make(map[string]any) if group.GroupName != "" { m["name"] = group.GroupName } if group.Notification != "" { - m["Notification"] = group.Notification + m["notification"] = group.Notification + m["notification_update_time"] = time.Now() + m["notification_user_id"] = mcontext.GetOpUserID(ctx) } if group.Introduction != "" { m["introduction"] = group.Introduction diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 8daf45454..ec5d0bdb5 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1,22 +1,10 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package group import ( "context" "fmt" + pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/wrapperspb" "math/big" "math/rand" "strconv" @@ -29,8 +17,6 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mw/specialerror" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" - "google.golang.org/grpc" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" @@ -45,6 +31,7 @@ import ( pbGroup "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/group" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" + "google.golang.org/grpc" ) func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { @@ -70,17 +57,13 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e pbGroup.RegisterGroupServer(server, &groupServer{ GroupDatabase: database, User: userRpcClient, - Notification: notification.NewGroupNotificationSender( - database, - &msgRpcClient, - func(ctx context.Context, userIDs []string) ([]notification.CommonUser, error) { - users, err := userRpcClient.GetUsersInfo(ctx, userIDs) - if err != nil { - return nil, err - } - return utils.Slice(users, func(e *sdkws.UserInfo) notification.CommonUser { return e }), nil - }, - ), + Notification: notification.NewGroupNotificationSender(database, &msgRpcClient, &userRpcClient, func(ctx context.Context, userIDs []string) ([]notification.CommonUser, error) { + users, err := userRpcClient.GetUsersInfo(ctx, userIDs) + if err != nil { + return nil, err + } + return utils.Slice(users, func(e *sdkws.UserInfo) notification.CommonUser { return e }), nil + }), conversationRpcClient: conversationRpcClient, msgRpcClient: msgRpcClient, }) @@ -137,16 +120,7 @@ func (s *groupServer) GenGroupID(ctx context.Context, groupID *string) error { } } for i := 0; i < 10; i++ { - id := utils.Md5( - strings.Join( - []string{ - mcontext.GetOperationID(ctx), - strconv.FormatInt(time.Now().UnixNano(), 10), - strconv.Itoa(rand.Int()), - }, - ",;,", - ), - ) + id := utils.Md5(strings.Join([]string{mcontext.GetOperationID(ctx), strconv.FormatInt(time.Now().UnixNano(), 10), strconv.Itoa(rand.Int())}, ",;,")) bi := big.NewInt(0) bi.SetString(id[0:8], 16) id = bi.String() @@ -260,10 +234,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR return resp, nil } -func (s *groupServer) GetJoinedGroupList( - ctx context.Context, - req *pbGroup.GetJoinedGroupListReq, -) (*pbGroup.GetJoinedGroupListResp, error) { +func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJoinedGroupListReq) (*pbGroup.GetJoinedGroupListResp, error) { resp := &pbGroup.GetJoinedGroupListResp{} if err := tokenverify.CheckAccessV3(ctx, req.FromUserID); err != nil { return nil, err @@ -273,8 +244,7 @@ func (s *groupServer) GetJoinedGroupList( pageNumber = req.Pagination.PageNumber showNumber = req.Pagination.ShowNumber } - // total, members, err := s.GroupDatabase.PageGroupMember(ctx, nil, []string{req.FromUserID}, nil, pageNumber, - // showNumber) + //total, members, err := s.GroupDatabase.PageGroupMember(ctx, nil, []string{req.FromUserID}, nil, pageNumber, showNumber) total, members, err := s.GroupDatabase.PageGetJoinGroup(ctx, req.FromUserID, pageNumber, showNumber) if err != nil { return nil, err @@ -313,10 +283,7 @@ func (s *groupServer) GetJoinedGroupList( return resp, nil } -func (s *groupServer) InviteUserToGroup( - ctx context.Context, - req *pbGroup.InviteUserToGroupReq, -) (*pbGroup.InviteUserToGroupResp, error) { +func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (*pbGroup.InviteUserToGroupResp, error) { resp := &pbGroup.InviteUserToGroupResp{} if len(req.InvitedUserIDs) == 0 { return nil, errs.ErrArgs.Wrap("user empty") @@ -417,10 +384,7 @@ func (s *groupServer) InviteUserToGroup( return resp, nil } -func (s *groupServer) GetGroupAllMember( - ctx context.Context, - req *pbGroup.GetGroupAllMemberReq, -) (*pbGroup.GetGroupAllMemberResp, error) { +func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) { resp := &pbGroup.GetGroupAllMemberResp{} group, err := s.GroupDatabase.TakeGroup(ctx, req.GroupID) if err != nil { @@ -448,10 +412,7 @@ func (s *groupServer) GetGroupAllMember( return resp, nil } -func (s *groupServer) GetGroupMemberList( - ctx context.Context, - req *pbGroup.GetGroupMemberListReq, -) (*pbGroup.GetGroupMemberListResp, error) { +func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGroupMemberListReq) (*pbGroup.GetGroupMemberListResp, error) { resp := &pbGroup.GetGroupMemberListResp{} total, members, err := s.PageGetGroupMember(ctx, req.GroupID, req.Pagination.PageNumber, req.Pagination.ShowNumber) log.ZDebug(ctx, "GetGroupMemberList", "total", total, "members", members, "length", len(members)) @@ -464,10 +425,7 @@ func (s *groupServer) GetGroupMemberList( return resp, nil } -func (s *groupServer) KickGroupMember( - ctx context.Context, - req *pbGroup.KickGroupMemberReq, -) (*pbGroup.KickGroupMemberResp, error) { +func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) { resp := &pbGroup.KickGroupMemberResp{} group, err := s.GroupDatabase.TakeGroup(ctx, req.GroupID) if err != nil { @@ -575,10 +533,7 @@ func (s *groupServer) KickGroupMember( return resp, nil } -func (s *groupServer) GetGroupMembersInfo( - ctx context.Context, - req *pbGroup.GetGroupMembersInfoReq, -) (*pbGroup.GetGroupMembersInfoResp, error) { +func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetGroupMembersInfoReq) (*pbGroup.GetGroupMembersInfoResp, error) { resp := &pbGroup.GetGroupMembersInfoResp{} if len(req.UserIDs) == 0 { return nil, errs.ErrArgs.Wrap("userIDs empty") @@ -605,10 +560,7 @@ func (s *groupServer) GetGroupMembersInfo( return resp, nil } -func (s *groupServer) GetGroupApplicationList( - ctx context.Context, - req *pbGroup.GetGroupApplicationListReq, -) (*pbGroup.GetGroupApplicationListResp, error) { +func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.GetGroupApplicationListReq) (*pbGroup.GetGroupApplicationListResp, error) { pageNumber, showNumber := utils.GetPage(req.Pagination) groupIDs, err := s.GroupDatabase.FindUserManagedGroupID(ctx, req.FromUserID) @@ -659,19 +611,12 @@ func (s *groupServer) GetGroupApplicationList( return e.GroupID }) resp.GroupRequests = utils.Slice(groupRequests, func(e *relationTb.GroupRequestModel) *sdkws.GroupRequest { - return convert.Db2PbGroupRequest( - e, - userMap[e.UserID], - convert.Db2PbGroupInfo(groupMap[e.GroupID], ownerMap[e.GroupID].UserID, groupMemberNumMap[e.GroupID]), - ) + return convert.Db2PbGroupRequest(e, userMap[e.UserID], convert.Db2PbGroupInfo(groupMap[e.GroupID], ownerMap[e.GroupID].UserID, groupMemberNumMap[e.GroupID])) }) return resp, nil } -func (s *groupServer) GetGroupsInfo( - ctx context.Context, - req *pbGroup.GetGroupsInfoReq, -) (*pbGroup.GetGroupsInfoResp, error) { +func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbGroup.GetGroupsInfoReq) (*pbGroup.GetGroupsInfoResp, error) { resp := &pbGroup.GetGroupsInfoResp{} if len(req.GroupIDs) == 0 { return nil, errs.ErrArgs.Wrap("groupID is empty") @@ -701,10 +646,7 @@ func (s *groupServer) GetGroupsInfo( return resp, nil } -func (s *groupServer) GroupApplicationResponse( - ctx context.Context, - req *pbGroup.GroupApplicationResponseReq, -) (*pbGroup.GroupApplicationResponseResp, error) { +func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (*pbGroup.GroupApplicationResponseResp, error) { defer log.ZInfo(ctx, utils.GetFuncName()+" Return") if !utils.Contain(req.HandleResult, constant.GroupResponseAgree, constant.GroupResponseRefuse) { return nil, errs.ErrArgs.Wrap("HandleResult unknown") @@ -776,10 +718,7 @@ func (s *groupServer) GroupApplicationResponse( return &pbGroup.GroupApplicationResponseResp{}, nil } -func (s *groupServer) JoinGroup( - ctx context.Context, - req *pbGroup.JoinGroupReq, -) (resp *pbGroup.JoinGroupResp, err error) { +func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (resp *pbGroup.JoinGroupResp, err error) { defer log.ZInfo(ctx, "JoinGroup.Return") user, err := s.User.GetUserInfo(ctx, req.InviterUserID) if err != nil { @@ -879,10 +818,7 @@ func (s *groupServer) deleteMemberAndSetConversationSeq(ctx context.Context, gro return s.conversationRpcClient.SetConversationMaxSeq(ctx, userIDs, conevrsationID, maxSeq) } -func (s *groupServer) SetGroupInfo( - ctx context.Context, - req *pbGroup.SetGroupInfoReq, -) (*pbGroup.SetGroupInfoResp, error) { +func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInfoReq) (*pbGroup.SetGroupInfoResp, error) { var opMember *relationTb.GroupMemberModel if !tokenverify.IsAppManagerUid(ctx) { var err error @@ -910,7 +846,7 @@ func (s *groupServer) SetGroupInfo( if err != nil { return nil, err } - data := UpdateGroupInfoMap(req.GroupInfoForSet) + data := UpdateGroupInfoMap(ctx, req.GroupInfoForSet) if len(data) == 0 { return resp, nil } @@ -931,11 +867,25 @@ func (s *groupServer) SetGroupInfo( } var num int if req.GroupInfoForSet.Notification != "" { + go func() { + nctx := mcontext.NewCtx("@@@" + mcontext.GetOperationID(ctx)) + conversation := &pbConversation.ConversationReq{ + ConversationID: utils.GetConversationIDBySessionType(constant.SuperGroupChatType, req.GroupInfoForSet.GroupID), + ConversationType: constant.SuperGroupChatType, + GroupID: req.GroupInfoForSet.GroupID, + } + resp, err := s.GetGroupMemberUserIDs(nctx, &pbGroup.GetGroupMemberUserIDsReq{GroupID: req.GroupInfoForSet.GroupID}) + if err != nil { + log.ZWarn(ctx, "GetGroupMemberIDs", err) + return + } + conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.GroupNotification} + if err := s.conversationRpcClient.SetConversations(nctx, resp.UserIDs, conversation); err != nil { + log.ZWarn(ctx, "SetConversations", err, resp.UserIDs, conversation) + } + }() num++ - s.Notification.GroupInfoSetAnnouncementNotification( - ctx, - &sdkws.GroupInfoSetAnnouncementTips{Group: tips.Group, OpUser: tips.OpUser}, - ) + s.Notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{Group: tips.Group, OpUser: tips.OpUser}) } switch len(data) - num { @@ -952,10 +902,7 @@ func (s *groupServer) SetGroupInfo( return resp, nil } -func (s *groupServer) TransferGroupOwner( - ctx context.Context, - req *pbGroup.TransferGroupOwnerReq, -) (*pbGroup.TransferGroupOwnerResp, error) { +func (s *groupServer) TransferGroupOwner(ctx context.Context, req *pbGroup.TransferGroupOwnerReq) (*pbGroup.TransferGroupOwnerResp, error) { resp := &pbGroup.TransferGroupOwnerResp{} group, err := s.GroupDatabase.TakeGroup(ctx, req.GroupID) if err != nil { @@ -1034,20 +981,9 @@ func (s *groupServer) GetGroups(ctx context.Context, req *pbGroup.GetGroupsReq) return resp, nil } -func (s *groupServer) GetGroupMembersCMS( - ctx context.Context, - req *pbGroup.GetGroupMembersCMSReq, -) (*pbGroup.GetGroupMembersCMSResp, error) { +func (s *groupServer) GetGroupMembersCMS(ctx context.Context, req *pbGroup.GetGroupMembersCMSReq) (*pbGroup.GetGroupMembersCMSResp, error) { resp := &pbGroup.GetGroupMembersCMSResp{} - total, members, err := s.GroupDatabase.SearchGroupMember( - ctx, - req.UserName, - []string{req.GroupID}, - nil, - nil, - req.Pagination.PageNumber, - req.Pagination.ShowNumber, - ) + total, members, err := s.GroupDatabase.SearchGroupMember(ctx, req.UserName, []string{req.GroupID}, nil, nil, req.Pagination.PageNumber, req.Pagination.ShowNumber) if err != nil { return nil, err } @@ -1067,10 +1003,7 @@ func (s *groupServer) GetGroupMembersCMS( return resp, nil } -func (s *groupServer) GetUserReqApplicationList( - ctx context.Context, - req *pbGroup.GetUserReqApplicationListReq, -) (*pbGroup.GetUserReqApplicationListResp, error) { +func (s *groupServer) GetUserReqApplicationList(ctx context.Context, req *pbGroup.GetUserReqApplicationListReq) (*pbGroup.GetUserReqApplicationListResp, error) { resp := &pbGroup.GetUserReqApplicationListResp{} user, err := s.User.GetPublicUserInfo(ctx, req.UserID) if err != nil { @@ -1117,19 +1050,12 @@ func (s *groupServer) GetUserReqApplicationList( return nil, err } resp.GroupRequests = utils.Slice(requests, func(e *relationTb.GroupRequestModel) *sdkws.GroupRequest { - return convert.Db2PbGroupRequest( - e, - user, - convert.Db2PbGroupInfo(groupMap[e.GroupID], ownerMap[e.GroupID].UserID, uint32(groupMemberNum[e.GroupID])), - ) + return convert.Db2PbGroupRequest(e, user, convert.Db2PbGroupInfo(groupMap[e.GroupID], ownerMap[e.GroupID].UserID, uint32(groupMemberNum[e.GroupID]))) }) return resp, nil } -func (s *groupServer) DismissGroup( - ctx context.Context, - req *pbGroup.DismissGroupReq, -) (*pbGroup.DismissGroupResp, error) { +func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGroupReq) (*pbGroup.DismissGroupResp, error) { defer log.ZInfo(ctx, "DismissGroup.return") resp := &pbGroup.DismissGroupResp{} owner, err := s.TakeGroupOwner(ctx, req.GroupID) @@ -1178,10 +1104,7 @@ func (s *groupServer) DismissGroup( return resp, nil } -func (s *groupServer) MuteGroupMember( - ctx context.Context, - req *pbGroup.MuteGroupMemberReq, -) (*pbGroup.MuteGroupMemberResp, error) { +func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) { resp := &pbGroup.MuteGroupMemberResp{} //if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { // return nil, err @@ -1216,10 +1139,7 @@ func (s *groupServer) MuteGroupMember( return resp, nil } -func (s *groupServer) CancelMuteGroupMember( - ctx context.Context, - req *pbGroup.CancelMuteGroupMemberReq, -) (*pbGroup.CancelMuteGroupMemberResp, error) { +func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.CancelMuteGroupMemberReq) (*pbGroup.CancelMuteGroupMemberResp, error) { resp := &pbGroup.CancelMuteGroupMemberResp{} //member, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) //if err != nil { @@ -1231,8 +1151,7 @@ func (s *groupServer) CancelMuteGroupMember( // return nil, err // } // if opMember.RoleLevel <= member.RoleLevel { - // return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, - // member.RoleLevel)) + // return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, member.RoleLevel)) // } //} //if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { @@ -1280,10 +1199,7 @@ func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) return resp, nil } -func (s *groupServer) CancelMuteGroup( - ctx context.Context, - req *pbGroup.CancelMuteGroupReq, -) (*pbGroup.CancelMuteGroupResp, error) { +func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMuteGroupReq) (*pbGroup.CancelMuteGroupResp, error) { resp := &pbGroup.CancelMuteGroupResp{} if err := s.CheckGroupAdmin(ctx, req.GroupID); err != nil { return nil, err @@ -1295,10 +1211,7 @@ func (s *groupServer) CancelMuteGroup( return resp, nil } -func (s *groupServer) SetGroupMemberInfo( - ctx context.Context, - req *pbGroup.SetGroupMemberInfoReq, -) (*pbGroup.SetGroupMemberInfoResp, error) { +func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfoReq) (*pbGroup.SetGroupMemberInfoResp, error) { resp := &pbGroup.SetGroupMemberInfoResp{} if len(req.Members) == 0 { return nil, errs.ErrArgs.Wrap("members empty") @@ -1325,11 +1238,9 @@ func (s *groupServer) SetGroupMemberInfo( delete(duplicateMap, [...]string{member.GroupID, member.UserID}) } if len(duplicateMap) > 0 { - return nil, errs.ErrArgs.Wrap( - "user not found" + strings.Join(utils.Slice(utils.Keys(duplicateMap), func(e [2]string) string { - return fmt.Sprintf("[group: %s user: %s]", e[0], e[1]) - }), ","), - ) + return nil, errs.ErrArgs.Wrap("user not found" + strings.Join(utils.Slice(utils.Keys(duplicateMap), func(e [2]string) string { + return fmt.Sprintf("[group: %s user: %s]", e[0], e[1]) + }), ",")) } memberMap := utils.SliceToMap(members, func(e *relationTb.GroupMemberModel) [2]string { return [...]string{e.GroupID, e.UserID} @@ -1359,9 +1270,7 @@ func (s *groupServer) SetGroupMemberInfo( } dbMember, ok := memberMap[[...]string{member.GroupID, member.UserID}] if !ok { - return nil, errs.ErrRecordNotFound.Wrap( - fmt.Sprintf("user %s not in group %s", member.UserID, member.GroupID), - ) + return nil, errs.ErrRecordNotFound.Wrap(fmt.Sprintf("user %s not in group %s", member.UserID, member.GroupID)) } //if opMember.RoleLevel == constant.GroupOwner { // continue @@ -1423,25 +1332,14 @@ func (s *groupServer) SetGroupMemberInfo( if member.Nickname != nil || member.FaceURL != nil || member.Ex != nil { log.ZDebug(ctx, "setGroupMemberInfo notification", "member", member.UserID) if err := s.Notification.GroupMemberInfoSetNotification(ctx, member.GroupID, member.UserID); err != nil { - log.ZError( - ctx, - "setGroupMemberInfo notification failed", - err, - "member", - member.UserID, - "groupID", - member.GroupID, - ) + log.ZError(ctx, "setGroupMemberInfo notification failed", err, "member", member.UserID, "groupID", member.GroupID) } } } return resp, nil } -func (s *groupServer) GetGroupAbstractInfo( - ctx context.Context, - req *pbGroup.GetGroupAbstractInfoReq, -) (*pbGroup.GetGroupAbstractInfoResp, error) { +func (s *groupServer) GetGroupAbstractInfo(ctx context.Context, req *pbGroup.GetGroupAbstractInfoReq) (*pbGroup.GetGroupAbstractInfoResp, error) { resp := &pbGroup.GetGroupAbstractInfoResp{} if len(req.GroupIDs) == 0 { return nil, errs.ErrArgs.Wrap("groupIDs empty") @@ -1472,10 +1370,7 @@ func (s *groupServer) GetGroupAbstractInfo( return resp, nil } -func (s *groupServer) GetUserInGroupMembers( - ctx context.Context, - req *pbGroup.GetUserInGroupMembersReq, -) (*pbGroup.GetUserInGroupMembersResp, error) { +func (s *groupServer) GetUserInGroupMembers(ctx context.Context, req *pbGroup.GetUserInGroupMembersReq) (*pbGroup.GetUserInGroupMembersResp, error) { resp := &pbGroup.GetUserInGroupMembersResp{} if len(req.GroupIDs) == 0 { return nil, errs.ErrArgs.Wrap("groupIDs empty") @@ -1499,10 +1394,7 @@ func (s *groupServer) GetUserInGroupMembers( return resp, nil } -func (s *groupServer) GetGroupMemberUserIDs( - ctx context.Context, - req *pbGroup.GetGroupMemberUserIDsReq, -) (resp *pbGroup.GetGroupMemberUserIDsResp, err error) { +func (s *groupServer) GetGroupMemberUserIDs(ctx context.Context, req *pbGroup.GetGroupMemberUserIDsReq) (resp *pbGroup.GetGroupMemberUserIDsResp, err error) { resp = &pbGroup.GetGroupMemberUserIDsResp{} resp.UserIDs, err = s.GroupDatabase.FindGroupMemberUserID(ctx, req.GroupID) if err != nil { @@ -1511,10 +1403,7 @@ func (s *groupServer) GetGroupMemberUserIDs( return resp, nil } -func (s *groupServer) GetGroupMemberRoleLevel( - ctx context.Context, - req *pbGroup.GetGroupMemberRoleLevelReq, -) (*pbGroup.GetGroupMemberRoleLevelResp, error) { +func (s *groupServer) GetGroupMemberRoleLevel(ctx context.Context, req *pbGroup.GetGroupMemberRoleLevelReq) (*pbGroup.GetGroupMemberRoleLevelResp, error) { resp := &pbGroup.GetGroupMemberRoleLevelResp{} if len(req.RoleLevels) == 0 { return nil, errs.ErrArgs.Wrap("RoleLevels empty") diff --git a/internal/rpc/group/statistics.go b/internal/rpc/group/statistics.go new file mode 100644 index 000000000..c6664b4df --- /dev/null +++ b/internal/rpc/group/statistics.go @@ -0,0 +1,28 @@ +package group + +import ( + "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/group" + "time" +) + +func (s *groupServer) GroupCreateCount(ctx context.Context, req *group.GroupCreateCountReq) (*group.GroupCreateCountResp, error) { + if req.Start > req.End { + return nil, errs.ErrArgs.Wrap("start > end") + } + total, err := s.GroupDatabase.CountTotal(ctx, nil) + if err != nil { + return nil, err + } + start := time.UnixMilli(req.Start) + before, err := s.GroupDatabase.CountTotal(ctx, &start) + if err != nil { + return nil, err + } + count, err := s.GroupDatabase.CountRangeEverydayTotal(ctx, start, time.UnixMilli(req.End)) + if err != nil { + return nil, err + } + return &group.GroupCreateCountResp{Total: total, Before: before, Count: count}, nil +} diff --git a/internal/rpc/msg/extend_msg.go b/internal/rpc/msg/extend_msg.go deleted file mode 100644 index 6f82d980f..000000000 --- a/internal/rpc/msg/extend_msg.go +++ /dev/null @@ -1,414 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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 d510afd0c..000000000 --- a/internal/rpc/msg/extend_msg_callback.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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 c4b64aa46..b7664e2c6 100644 --- a/internal/rpc/msg/revoke.go +++ b/internal/rpc/msg/revoke.go @@ -99,7 +99,6 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. } now := time.Now().UnixMilli() err = m.MsgDatabase.RevokeMsg(ctx, req.ConversationID, req.Seq, &unRelationTb.RevokeModel{ - ID: uuid.New().String(), Role: role, UserID: req.UserID, Nickname: user.Nickname, diff --git a/internal/rpc/msg/send.go b/internal/rpc/msg/send.go index 2c27b869d..671450eee 100644 --- a/internal/rpc/msg/send.go +++ b/internal/rpc/msg/send.go @@ -31,20 +31,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") } } @@ -160,7 +164,7 @@ func (m *msgServer) sendMsgSingleChat(ctx context.Context, req *pbMsg.SendMsgReq } if !isSend { promePkg.Inc(promePkg.SingleChatMsgProcessFailedCounter) - return nil, errs.ErrUserNotRecvMsg + return nil, nil } else { if err = callbackBeforeSendSingleMsg(ctx, req); err != nil { return nil, err diff --git a/internal/rpc/msg/server.go b/internal/rpc/msg/server.go index 4702eb5f9..909707703 100644 --- a/internal/rpc/msg/server.go +++ b/internal/rpc/msg/server.go @@ -1,42 +1,25 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package msg import ( "context" - "google.golang.org/grpc" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "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" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" + "google.golang.org/grpc" ) type MessageInterceptorChain []MessageInterceptorFunc type msgServer struct { RegisterCenter discoveryregistry.SvcDiscoveryRegistry MsgDatabase controller.CommonMsgDatabase - ExtendMsgDatabase controller.ExtendMsgDatabase Group *rpcclient.GroupRpcClient User *rpcclient.UserRpcClient Conversation *rpcclient.ConversationRpcClient @@ -77,13 +60,6 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e } cacheModel := cache.NewMsgCacheModel(rdb) msgDocModel := unrelation.NewMsgMongoDriver(mongo.GetDatabase()) - 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) conversationClient := rpcclient.NewConversationRpcClient(client) userRpcClient := rpcclient.NewUserRpcClient(client) @@ -94,7 +70,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), @@ -125,8 +100,7 @@ func (m *msgServer) initPrometheus() { } func (m *msgServer) conversationAndGetRecvID(conversation *conversation.Conversation, userID string) (recvID string) { - if conversation.ConversationType == constant.SingleChatType || - conversation.ConversationType == constant.NotificationChatType { + if conversation.ConversationType == constant.SingleChatType || conversation.ConversationType == constant.NotificationChatType { if userID == conversation.OwnerUserID { recvID = conversation.UserID } else { diff --git a/internal/rpc/msg/statistics.go b/internal/rpc/msg/statistics.go new file mode 100644 index 000000000..872ec8f18 --- /dev/null +++ b/internal/rpc/msg/statistics.go @@ -0,0 +1,84 @@ +package msg + +import ( + "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation" + "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" + "time" +) + +func (m *msgServer) GetActiveUser(ctx context.Context, req *msg.GetActiveUserReq) (*msg.GetActiveUserResp, error) { + msgCount, userCount, users, dateCount, err := m.MsgDatabase.RangeUserSendCount(ctx, time.UnixMilli(req.Start), time.UnixMilli(req.End), req.Group, req.Ase, req.Pagination.PageNumber, req.Pagination.ShowNumber) + if err != nil { + return nil, err + } + var pbUsers []*msg.ActiveUser + if len(users) > 0 { + userIDs := utils.Slice(users, func(e *unrelation.UserCount) string { return e.UserID }) + userMap, err := m.User.GetUsersInfoMap(ctx, userIDs) + if err != nil { + return nil, err + } + pbUsers = make([]*msg.ActiveUser, 0, len(users)) + for _, user := range users { + pbUser := userMap[user.UserID] + if pbUser == nil { + pbUser = &sdkws.UserInfo{ + UserID: user.UserID, + Nickname: user.UserID, + } + } + pbUsers = append(pbUsers, &msg.ActiveUser{ + User: pbUser, + Count: user.Count, + }) + } + } + return &msg.GetActiveUserResp{ + MsgCount: msgCount, + UserCount: userCount, + DateCount: dateCount, + Users: pbUsers, + }, nil +} + +func (m *msgServer) GetActiveGroup(ctx context.Context, req *msg.GetActiveGroupReq) (*msg.GetActiveGroupResp, error) { + msgCount, groupCount, groups, dateCount, err := m.MsgDatabase.RangeGroupSendCount(ctx, time.UnixMilli(req.Start), time.UnixMilli(req.End), req.Ase, req.Pagination.PageNumber, req.Pagination.ShowNumber) + if err != nil { + return nil, err + } + var pbGroups []*msg.ActiveGroup + if len(groups) > 0 { + groupIDs := utils.Slice(groups, func(e *unrelation.GroupCount) string { return e.GroupID }) + resp, err := m.Group.GetGroupInfos(ctx, groupIDs, false) + if err != nil { + return nil, err + } + groupMap := make(map[string]*sdkws.GroupInfo, len(groups)) + for i, group := range groups { + groupMap[group.GroupID] = resp[i] + } + pbGroups = make([]*msg.ActiveGroup, 0, len(groups)) + for _, group := range groups { + pbGroup := groupMap[group.GroupID] + if pbGroup == nil { + pbGroup = &sdkws.GroupInfo{ + GroupID: group.GroupID, + GroupName: group.GroupID, + } + } + pbGroups = append(pbGroups, &msg.ActiveGroup{ + Group: pbGroup, + Count: group.Count, + }) + } + } + return &msg.GetActiveGroupResp{ + MsgCount: msgCount, + GroupCount: groupCount, + DateCount: dateCount, + Groups: pbGroups, + }, nil +} diff --git a/internal/rpc/third/s3.go b/internal/rpc/third/s3.go index 4ff9a3ce8..4cbbd3d7d 100644 --- a/internal/rpc/third/s3.go +++ b/internal/rpc/third/s3.go @@ -1,52 +1,151 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package third import ( "context" - "time" - - "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/log" + "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) 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) InitiateMultipartUpload(ctx context.Context, req *third.InitiateMultipartUploadReq) (*third.InitiateMultipartUploadResp, error) { + defer log.ZDebug(ctx, "return") + if err := checkUploadName(ctx, req.Name); err != nil { + return nil, err + } + expireTime := time.Now().Add(t.defaultExpire) + result, err := t.s3dataBase.InitiateMultipartUpload(ctx, req.Hash, req.Size, t.defaultExpire, 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.Name), + }, 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 t.s3dataBase.GetUrl(ctx, req) + return &third.InitiateMultipartUploadResp{ + Upload: &third.UploadInfo{ + UploadID: result.UploadID, + PartSize: result.PartSize, + Sign: sign, + ExpireTime: expireTime.UnixMilli(), + }, + }, nil } -func (t *thirdServer) GetHashInfo(ctx context.Context, req *third.GetHashInfoReq) (*third.GetHashInfoResp, error) { - return t.s3dataBase.GetHashInfo(ctx, req) +func (t *thirdServer) AuthSign(ctx context.Context, req *third.AuthSignReq) (*third.AuthSignResp, error) { + defer log.ZDebug(ctx, "return") + 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 resp, nil } -func (t *thirdServer) CleanObject(ctx context.Context, now time.Time) { - t.s3dataBase.CleanExpirationObject(ctx, now) +func (t *thirdServer) CompleteMultipartUpload(ctx context.Context, req *third.CompleteMultipartUploadReq) (*third.CompleteMultipartUploadResp, error) { + defer log.ZDebug(ctx, "return") + 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.Name), + }, nil +} + +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) apiAddress(name string) string { + return t.apiURL + name } diff --git a/internal/rpc/third/third.go b/internal/rpc/third/third.go index ebf2c60d1..7c487b1d2 100644 --- a/internal/rpc/third/third.go +++ b/internal/rpc/third/third.go @@ -1,80 +1,83 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - 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" - - "google.golang.org/grpc" + "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" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/third" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" + "google.golang.org/grpc" ) func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { - u, err := url.Parse(config.Config.Object.ApiURL) - if err != nil { + apiURL := config.Config.Object.ApiURL + if apiURL == "" { + return fmt.Errorf("api url is empty") + } + if _, err := url.Parse(config.Config.Object.ApiURL); err != nil { return err } + if apiURL[len(apiURL)-1] != '/' { + apiURL += "/" + } rdb, err := cache.NewRedis() if err != nil { return err } - o, err := obj.NewMinioInterface() - if err != nil { - return err - } db, err := relation.NewGormDB() 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) { +func (t *thirdServer) FcmUpdateToken(ctx context.Context, req *third.FcmUpdateTokenReq) (resp *third.FcmUpdateTokenResp, err error) { err = t.thirdDatabase.FcmUpdateToken(ctx, req.Account, int(req.PlatformID), req.FcmToken, req.ExpireTime) if err != nil { return nil, err @@ -82,10 +85,7 @@ func (t *thirdServer) FcmUpdateToken( return &third.FcmUpdateTokenResp{}, nil } -func (t *thirdServer) SetAppBadge( - ctx context.Context, - req *third.SetAppBadgeReq, -) (resp *third.SetAppBadgeResp, err error) { +func (t *thirdServer) SetAppBadge(ctx context.Context, req *third.SetAppBadgeReq) (resp *third.SetAppBadgeResp, err error) { err = t.thirdDatabase.SetAppBadge(ctx, req.UserID, int(req.AppUnreadCount)) if err != nil { return nil, err 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/rpc/user/statistics.go b/internal/rpc/user/statistics.go index 7da40bb1e..dc11b8a90 100644 --- a/internal/rpc/user/statistics.go +++ b/internal/rpc/user/statistics.go @@ -29,13 +29,18 @@ func (s *userServer) UserRegisterCount( if req.Start > req.End { return nil, errs.ErrArgs.Wrap("start > end") } - total, err := s.CountTotal(ctx) + total, err := s.CountTotal(ctx, nil) if err != nil { return nil, err } - count, err := s.CountRangeEverydayTotal(ctx, time.UnixMilli(req.Start), time.UnixMilli(req.End)) + start := time.UnixMilli(req.Start) + before, err := s.CountTotal(ctx, &start) if err != nil { return nil, err } - return &pbuser.UserRegisterCountResp{Total: total, Count: count}, nil + count, err := s.CountRangeEverydayTotal(ctx, start, time.UnixMilli(req.End)) + if err != nil { + return nil, err + } + return &pbuser.UserRegisterCountResp{Total: total, Before: before, Count: count}, nil } diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index d2368ceb3..4619db4ce 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -1,26 +1,12 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package user import ( "context" + "errors" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "strings" "time" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "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/convert" @@ -37,9 +23,8 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification" - "google.golang.org/grpc" - "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" + "google.golang.org/grpc" ) type userServer struct { @@ -63,7 +48,7 @@ func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error { } users := make([]*tablerelation.UserModel, 0) if len(config.Config.Manager.UserID) != len(config.Config.Manager.Nickname) { - return errs.ErrConfig.Wrap("len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname)") + return errors.New("len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname)") } for k, v := range config.Config.Manager.UserID { users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k]}) @@ -74,22 +59,16 @@ func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error { friendRpcClient := rpcclient.NewFriendRpcClient(client) msgRpcClient := rpcclient.NewMessageRpcClient(client) u := &userServer{ - UserDatabase: database, - RegisterCenter: client, - friendRpcClient: &friendRpcClient, - notificationSender: notification.NewFriendNotificationSender( - &msgRpcClient, - notification.WithDBFunc(database.FindWithError), - ), + UserDatabase: database, + RegisterCenter: client, + friendRpcClient: &friendRpcClient, + notificationSender: notification.NewFriendNotificationSender(&msgRpcClient, notification.WithDBFunc(database.FindWithError)), } pbuser.RegisterUserServer(server, u) return u.UserDatabase.InitOnce(context.Background(), users) } -func (s *userServer) GetDesignateUsers( - ctx context.Context, - req *pbuser.GetDesignateUsersReq, -) (resp *pbuser.GetDesignateUsersResp, err error) { +func (s *userServer) GetDesignateUsers(ctx context.Context, req *pbuser.GetDesignateUsersReq) (resp *pbuser.GetDesignateUsersResp, err error) { resp = &pbuser.GetDesignateUsersResp{} users, err := s.FindWithError(ctx, req.UserIDs) if err != nil { @@ -102,10 +81,7 @@ func (s *userServer) GetDesignateUsers( return resp, nil } -func (s *userServer) UpdateUserInfo( - ctx context.Context, - req *pbuser.UpdateUserInfoReq, -) (resp *pbuser.UpdateUserInfoResp, err error) { +func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbuser.UpdateUserInfoReq) (resp *pbuser.UpdateUserInfoResp, err error) { resp = &pbuser.UpdateUserInfoResp{} err = tokenverify.CheckAccessV3(ctx, req.UserInfo.UserID) if err != nil { @@ -130,10 +106,7 @@ func (s *userServer) UpdateUserInfo( return resp, nil } -func (s *userServer) SetGlobalRecvMessageOpt( - ctx context.Context, - req *pbuser.SetGlobalRecvMessageOptReq, -) (resp *pbuser.SetGlobalRecvMessageOptResp, err error) { +func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbuser.SetGlobalRecvMessageOptReq) (resp *pbuser.SetGlobalRecvMessageOptResp, err error) { resp = &pbuser.SetGlobalRecvMessageOptResp{} if _, err := s.FindWithError(ctx, []string{req.UserID}); err != nil { return nil, err @@ -147,10 +120,7 @@ func (s *userServer) SetGlobalRecvMessageOpt( return resp, nil } -func (s *userServer) AccountCheck( - ctx context.Context, - req *pbuser.AccountCheckReq, -) (resp *pbuser.AccountCheckResp, err error) { +func (s *userServer) AccountCheck(ctx context.Context, req *pbuser.AccountCheckReq) (resp *pbuser.AccountCheckResp, err error) { resp = &pbuser.AccountCheckResp{} if utils.Duplicate(req.CheckUserIDs) { return nil, errs.ErrArgs.Wrap("userID repeated") @@ -179,10 +149,7 @@ func (s *userServer) AccountCheck( return resp, nil } -func (s *userServer) GetPaginationUsers( - ctx context.Context, - req *pbuser.GetPaginationUsersReq, -) (resp *pbuser.GetPaginationUsersResp, err error) { +func (s *userServer) GetPaginationUsers(ctx context.Context, req *pbuser.GetPaginationUsersReq) (resp *pbuser.GetPaginationUsersResp, err error) { var pageNumber, showNumber int32 if req.Pagination != nil { pageNumber = req.Pagination.PageNumber @@ -195,17 +162,14 @@ func (s *userServer) GetPaginationUsers( return &pbuser.GetPaginationUsersResp{Total: int32(total), Users: convert.UsersDB2Pb(users)}, err } -func (s *userServer) UserRegister( - ctx context.Context, - req *pbuser.UserRegisterReq, -) (resp *pbuser.UserRegisterResp, err error) { +func (s *userServer) UserRegister(ctx context.Context, req *pbuser.UserRegisterReq) (resp *pbuser.UserRegisterResp, err error) { resp = &pbuser.UserRegisterResp{} if len(req.Users) == 0 { return nil, errs.ErrArgs.Wrap("users is empty") } if req.Secret != config.Config.Secret { log.ZDebug(ctx, "UserRegister", config.Config.Secret, req.Secret) - return nil, errs.ErrIdentity.Wrap("secret invalid") + return nil, errs.ErrNoPermission.Wrap("secret invalid") } if utils.DuplicateAny(req.Users, func(e *sdkws.UserInfo) string { return e.UserID }) { return nil, errs.ErrArgs.Wrap("userID repeated") @@ -246,10 +210,7 @@ func (s *userServer) UserRegister( return resp, nil } -func (s *userServer) GetGlobalRecvMessageOpt( - ctx context.Context, - req *pbuser.GetGlobalRecvMessageOptReq, -) (resp *pbuser.GetGlobalRecvMessageOptResp, err error) { +func (s *userServer) GetGlobalRecvMessageOpt(ctx context.Context, req *pbuser.GetGlobalRecvMessageOptReq) (resp *pbuser.GetGlobalRecvMessageOptResp, err error) { user, err := s.FindWithError(ctx, []string{req.UserID}) if err != nil { return nil, err @@ -257,10 +218,7 @@ func (s *userServer) GetGlobalRecvMessageOpt( return &pbuser.GetGlobalRecvMessageOptResp{GlobalRecvMsgOpt: user[0].GlobalRecvMsgOpt}, nil } -func (s *userServer) GetAllUserID( - ctx context.Context, - req *pbuser.GetAllUserIDReq, -) (resp *pbuser.GetAllUserIDResp, err error) { +func (s *userServer) GetAllUserID(ctx context.Context, req *pbuser.GetAllUserIDReq) (resp *pbuser.GetAllUserIDResp, err error) { userIDs, err := s.UserDatabase.GetAllUserID(ctx) if err != nil { return nil, err diff --git a/internal/tools/conversation.go b/internal/tools/conversation.go new file mode 100644 index 000000000..1cad58248 --- /dev/null +++ b/internal/tools/conversation.go @@ -0,0 +1,38 @@ +package tools + +import ( + "context" + "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() { + log.ZInfo(context.Background(), "start msg destruct cron task") + 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 + } + log.ZDebug(context.Background(), "nums conversations need destruct", "nums", len(conversations)) + 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 365c6cbf4..5e4183615 100644 --- a/internal/tools/cron_task.go +++ b/internal/tools/cron_task.go @@ -26,7 +26,6 @@ import ( ) func StartCronTask() error { - log.ZInfo(context.Background(), "start cron task", "cron config", config.Config.ChatRecordsClearTime) fmt.Println("cron task start, config", config.Config.ChatRecordsClearTime) msgTool, err := InitMsgTool() if err != nil { @@ -35,10 +34,17 @@ func StartCronTask() error { c := cron.New() var wg sync.WaitGroup wg.Add(1) + log.ZInfo(context.Background(), "start chatRecordsClearTime cron task", "cron config", config.Config.ChatRecordsClearTime) _, 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) + } + log.ZInfo(context.Background(), "start msgDestruct cron task", "cron config", config.Config.MsgDestructTime) + _, 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 8389352a8..7247d32eb 100644 --- a/internal/tools/msg.go +++ b/internal/tools/msg.go @@ -1,24 +1,10 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package tools import ( "context" - "errors" "fmt" "math" + "time" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" @@ -28,29 +14,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/errs" + "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" + "github.com/redis/go-redis/v9" + "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, } } @@ -67,20 +57,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()) - userDatabase := controller.NewUserDatabase( - userDB, - cache.NewUserCacheRedis(rdb, relation.NewUserGorm(db), cache.GetDefaultOpt()), - tx.NewGorm(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) + conversationDatabase := controller.NewConversationDatabase(relation.NewConversationGorm(db), cache.NewConversationRedis(rdb, cache.GetDefaultOpt(), relation.NewConversationGorm(db)), tx.NewGorm(db)) + msgRpcClient := rpcclient.NewMessageRpcClient(discov) + msgNotificationSender := notification.NewMsgNotificationSender(rpcclient.WithRpcClient(&msgRpcClient)) + msgTool := NewMsgTool(msgDatabase, userDatabase, groupDatabase, conversationDatabase, msgNotificationSender) return msgTool, nil } @@ -102,30 +93,21 @@ func (c *MsgTool) AllConversationClearMsgAndFixSeq() { func (c *MsgTool) ClearConversationsMsg(ctx context.Context, conversationIDs []string) { for _, conversationID := range conversationIDs { if err := c.msgDatabase.DeleteConversationMsgsAndSetMinSeq(ctx, conversationID, int64(config.Config.RetainChatRecords*24*60*60)); err != nil { - log.ZError( - ctx, - "DeleteUserSuperGroupMsgsAndSetMinSeq failed", - err, - "conversationID", - conversationID, - "DBRetainChatRecords", - config.Config.RetainChatRecords, - ) + log.ZError(ctx, "DeleteUserSuperGroupMsgsAndSetMinSeq failed", err, "conversationID", conversationID, "DBRetainChatRecords", config.Config.RetainChatRecords) } if err := c.checkMaxSeq(ctx, conversationID); err != nil { log.ZError(ctx, "fixSeq failed", err, "conversationID", conversationID) } - } } func (c *MsgTool) checkMaxSeqWithMongo(ctx context.Context, conversationID string, maxSeqCache int64) error { - maxSeqMongo, _, err := c.msgDatabase.GetMongoMaxAndMinSeq(ctx, conversationID) + minSeqMongo, maxSeqMongo, err := c.msgDatabase.GetMongoMaxAndMinSeq(ctx, conversationID) if err != nil { return err } if math.Abs(float64(maxSeqMongo-maxSeqCache)) > 10 { - return errSeq + log.ZError(ctx, "cache max seq and mongo max seq is diff > 10", nil, "maxSeqMongo", maxSeqMongo, "minSeqMongo", minSeqMongo, "maxSeqCache", maxSeqCache, "conversationID", conversationID) } return nil } @@ -133,6 +115,9 @@ func (c *MsgTool) checkMaxSeqWithMongo(ctx context.Context, conversationID strin func (c *MsgTool) checkMaxSeq(ctx context.Context, conversationID string) error { maxSeq, err := c.msgDatabase.GetMaxSeq(ctx, conversationID) if err != nil { + if errs.Unwrap(err) == redis.Nil { + return nil + } return err } if err := c.checkMaxSeqWithMongo(ctx, conversationID, maxSeq); err != nil { diff --git a/pkg/apiresp/format.go b/pkg/apiresp/format.go new file mode 100644 index 000000000..34fb85464 --- /dev/null +++ b/pkg/apiresp/format.go @@ -0,0 +1,5 @@ +package apiresp + +type ApiFormat interface { + ApiFormat() +} diff --git a/pkg/apiresp/resp.go b/pkg/apiresp/resp.go index a7bd271a3..638c70dbe 100644 --- a/pkg/apiresp/resp.go +++ b/pkg/apiresp/resp.go @@ -49,6 +49,9 @@ func isAllFieldsPrivate(v any) bool { } func ApiSuccess(data any) *ApiResponse { + if format, ok := data.(ApiFormat); ok { + format.ApiFormat() + } if isAllFieldsPrivate(data) { return &ApiResponse{} } diff --git a/pkg/apistruct/msg.go b/pkg/apistruct/msg.go index 4b776cb48..274c31a61 100644 --- a/pkg/apistruct/msg.go +++ b/pkg/apistruct/msg.go @@ -1,27 +1,8 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - 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"` + UserID string `json:"userID,omitempty" binding:"required"` + SeqList []uint32 `json:"seqList,omitempty" binding:"required"` OperationID string `json:"operationID,omitempty" binding:"required"` } @@ -29,19 +10,19 @@ type DelMsgResp struct { } type CleanUpMsgReq struct { - UserID string `json:"userID" binding:"required"` - OperationID string `json:"operationID" binding:"required"` + UserID string `json:"userID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } type CleanUpMsgResp struct { } type DelSuperGroupMsgReq struct { - UserID string `json:"userID" binding:"required"` - GroupID string `json:"groupID" binding:"required"` + UserID string `json:"userID" binding:"required"` + GroupID string `json:"groupID" binding:"required"` SeqList []uint32 `json:"seqList,omitempty"` IsAllDelete bool `json:"isAllDelete"` - OperationID string `json:"operationID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } type DelSuperGroupMsgResp struct { @@ -54,92 +35,28 @@ type MsgDeleteNotificationElem struct { } type SetMsgMinSeqReq struct { - UserID string `json:"userID" binding:"required"` + UserID string `json:"userID" binding:"required"` GroupID string `json:"groupID"` - MinSeq uint32 `json:"minSeq" binding:"required"` - OperationID string `json:"operationID" binding:"required"` + MinSeq uint32 `json:"minSeq" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } 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"` - Size int64 `mapstructure:"size"` - Width int32 `mapstructure:"width"` + Type string `mapstructure:"type" ` + Size int64 `mapstructure:"size" ` + Width int32 `mapstructure:"width" ` Height int32 `mapstructure:"height"` - Url string `mapstructure:"url"` + Url string `mapstructure:"url" ` } type PictureElem struct { SourcePath string `mapstructure:"sourcePath"` SourcePicture PictureBaseInfo `mapstructure:"sourcePicture"` - BigPicture PictureBaseInfo `mapstructure:"bigPicture"` + BigPicture PictureBaseInfo `mapstructure:"bigPicture" ` SnapshotPicture PictureBaseInfo `mapstructure:"snapshotPicture"` } type SoundElem struct { @@ -181,35 +98,35 @@ type LocationElem struct { Latitude float64 `mapstructure:"latitude"` } type CustomElem struct { - Data string `mapstructure:"data" validate:"required"` + Data string `mapstructure:"data" validate:"required"` Description string `mapstructure:"description"` Extension string `mapstructure:"extension"` } type TextElem struct { - Text string `mapstructure:"text" validate:"required"` + Content string `mapstructure:"content" validate:"required"` } type RevokeElem struct { RevokeMsgClientID string `mapstructure:"revokeMsgClientID" validate:"required"` } type OANotificationElem struct { - NotificationName string `mapstructure:"notificationName" json:"notificationName" validate:"required"` + NotificationName string `mapstructure:"notificationName" json:"notificationName" validate:"required"` NotificationFaceURL string `mapstructure:"notificationFaceURL" json:"notificationFaceURL"` - NotificationType int32 `mapstructure:"notificationType" json:"notificationType" validate:"required"` - Text string `mapstructure:"text" json:"text" validate:"required"` - Url string `mapstructure:"url" json:"url"` - MixType int32 `mapstructure:"mixType" json:"mixType"` - PictureElem PictureElem `mapstructure:"pictureElem" json:"pictureElem"` - SoundElem SoundElem `mapstructure:"soundElem" json:"soundElem"` - VideoElem VideoElem `mapstructure:"videoElem" json:"videoElem"` - FileElem FileElem `mapstructure:"fileElem" json:"fileElem"` - Ex string `mapstructure:"ex" json:"ex"` + NotificationType int32 `mapstructure:"notificationType" json:"notificationType" validate:"required"` + Text string `mapstructure:"text" json:"text" validate:"required"` + Url string `mapstructure:"url" json:"url"` + MixType int32 `mapstructure:"mixType" json:"mixType"` + PictureElem PictureElem `mapstructure:"pictureElem" json:"pictureElem"` + SoundElem SoundElem `mapstructure:"soundElem" json:"soundElem"` + VideoElem VideoElem `mapstructure:"videoElem" json:"videoElem"` + FileElem FileElem `mapstructure:"fileElem" json:"fileElem"` + Ex string `mapstructure:"ex" json:"ex"` } type MessageRevoked struct { - RevokerID string `mapstructure:"revokerID" json:"revokerID" validate:"required"` - RevokerRole int32 `mapstructure:"revokerRole" json:"revokerRole" validate:"required"` - ClientMsgID string `mapstructure:"clientMsgID" json:"clientMsgID" validate:"required"` + RevokerID string `mapstructure:"revokerID" json:"revokerID" validate:"required"` + RevokerRole int32 `mapstructure:"revokerRole" json:"revokerRole" validate:"required"` + ClientMsgID string `mapstructure:"clientMsgID" json:"clientMsgID" validate:"required"` RevokerNickname string `mapstructure:"revokerNickname" json:"revokerNickname"` - SessionType int32 `mapstructure:"sessionType" json:"sessionType" validate:"required"` - Seq uint32 `mapstructure:"seq" json:"seq" validate:"required"` + SessionType int32 `mapstructure:"sessionType" json:"sessionType" validate:"required"` + Seq uint32 `mapstructure:"seq" json:"seq" validate:"required"` } diff --git a/pkg/callbackstruct/message.go b/pkg/callbackstruct/message.go index 677e70f27..dabdc1d55 100644 --- a/pkg/callbackstruct/message.go +++ b/pkg/callbackstruct/message.go @@ -15,7 +15,6 @@ package callbackstruct import ( - "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" ) @@ -80,71 +79,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 c26cf2e4f..25dc9aae4 100644 --- a/pkg/common/cmd/cron_task.go +++ b/pkg/common/cmd/cron_task.go @@ -21,7 +21,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 b15d984a0..c5fce2c95 100644 --- a/pkg/common/cmd/root.go +++ b/pkg/common/cmd/root.go @@ -31,17 +31,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 bfaef5305..8ff4195d2 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -1,27 +1,12 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package cmd import ( "errors" - "github.com/spf13/cobra" - "google.golang.org/grpc" - "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/startrpc" + "github.com/spf13/cobra" + "google.golang.org/grpc" ) type RpcCmd struct { @@ -41,10 +26,7 @@ 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 { 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 eef803e12..ae5599891 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -91,15 +91,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"` @@ -117,42 +113,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"` - } `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 { + Cos struct { + BucketURL string `yaml:"bucketURL"` + SecretID string `yaml:"secretID"` + SecretKey string `yaml:"secretKey"` + SessionToken string `yaml:"sessionToken"` + } `yaml:"cos"` + 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:"oss"` } `yaml:"object"` RpcPort struct { @@ -229,6 +209,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 f00cae58f..4bb051a7c 100644 --- a/pkg/common/convert/conversation.go +++ b/pkg/common/convert/conversation.go @@ -22,6 +22,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 } @@ -34,6 +35,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 d7750e66b..000000000 --- a/pkg/common/db/cache/extend_msg_set.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package cache - -import ( - "context" - "time" - - "github.com/dtm-labs/rockscache" - "github.com/redis/go-redis/v9" - - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation" -) - -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 8e7b7a350..7908d163a 100644 --- a/pkg/common/db/controller/conversation.go +++ b/pkg/common/db/controller/conversation.go @@ -1,21 +1,8 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package controller import ( "context" + "time" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" @@ -27,22 +14,13 @@ import ( type ConversationDatabase interface { //UpdateUserConversationFiled 更新用户该会话的属性信息 - UpdateUsersConversationFiled( - ctx context.Context, - userIDs []string, - conversationID string, - args map[string]interface{}, - ) error + UpdateUsersConversationFiled(ctx context.Context, userIDs []string, conversationID string, args map[string]interface{}) error //CreateConversation 创建一批新的会话 CreateConversation(ctx context.Context, conversations []*relationTb.ConversationModel) error //SyncPeerUserPrivateConversation 同步对端私聊会话内部保证事务操作 SyncPeerUserPrivateConversationTx(ctx context.Context, conversation []*relationTb.ConversationModel) error //FindConversations 根据会话ID获取某个用户的多个会话 - FindConversations( - ctx context.Context, - ownerUserID string, - conversationIDs []string, - ) ([]*relationTb.ConversationModel, error) + FindConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ([]*relationTb.ConversationModel, error) //FindRecvMsgNotNotifyUserIDs 获取超级大群开启免打扰的用户ID FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, error) //GetUserAllConversation 获取一个用户在服务器上所有的会话 @@ -50,28 +28,17 @@ type ConversationDatabase interface { //SetUserConversations 设置用户多个会话属性,如果会话不存在则创建,否则更新,内部保证原子性 SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error //SetUsersConversationFiledTx 设置多个用户会话关于某个字段的更新操作,如果会话不存在则创建,否则更新,内部保证事务操作 - SetUsersConversationFiledTx( - ctx context.Context, - userIDs []string, - conversation *relationTb.ConversationModel, - filedMap map[string]interface{}, - ) error + SetUsersConversationFiledTx(ctx context.Context, userIDs []string, conversation *relationTb.ConversationModel, filedMap map[string]interface{}) error CreateGroupChatConversation(ctx context.Context, groupID string, userIDs []string) error GetConversationIDs(ctx context.Context, userID string) ([]string, error) GetUserConversationIDsHash(ctx context.Context, ownerUserID string) (hash uint64, err error) 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) + 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 { +func NewConversationDatabase(conversation relationTb.ConversationModelInterface, cache cache.ConversationCache, tx tx.Tx) ConversationDatabase { return &conversationDatabase{ conversationDB: conversation, cache: cache, @@ -85,12 +52,7 @@ type conversationDatabase struct { tx tx.Tx } -func (c *conversationDatabase) SetUsersConversationFiledTx( - ctx context.Context, - userIDs []string, - conversation *relationTb.ConversationModel, - filedMap map[string]interface{}, -) (err error) { +func (c *conversationDatabase) SetUsersConversationFiledTx(ctx context.Context, userIDs []string, conversation *relationTb.ConversationModel, filedMap map[string]interface{}) (err error) { cache := c.cache.NewCache() if err := c.tx.Transaction(func(tx any) error { conversationTx := c.conversationDB.NewTx(tx) @@ -113,12 +75,14 @@ func (c *conversationDatabase) SetUsersConversationFiledTx( NotUserIDs := utils.DifferenceString(haveUserIDs, userIDs) log.ZDebug(ctx, "SetUsersConversationFiledTx", "NotUserIDs", NotUserIDs, "haveUserIDs", haveUserIDs, "userIDs", userIDs) var conversations []*relationTb.ConversationModel + now := time.Now() for _, v := range NotUserIDs { temp := new(relationTb.ConversationModel) if err := utils.CopyStructFields(temp, conversation); err != nil { return err } temp.OwnerUserID = v + temp.CreateTime = now conversations = append(conversations, temp) } @@ -136,12 +100,7 @@ func (c *conversationDatabase) SetUsersConversationFiledTx( return cache.ExecDel(ctx) } -func (c *conversationDatabase) UpdateUsersConversationFiled( - ctx context.Context, - userIDs []string, - conversationID string, - args map[string]interface{}, -) error { +func (c *conversationDatabase) UpdateUsersConversationFiled(ctx context.Context, userIDs []string, conversationID string, args map[string]interface{}) error { _, err := c.conversationDB.UpdateByMap(ctx, userIDs, conversationID, args) if err != nil { return err @@ -149,10 +108,7 @@ func (c *conversationDatabase) UpdateUsersConversationFiled( return c.cache.DelUsersConversation(conversationID, userIDs...).ExecDel(ctx) } -func (c *conversationDatabase) CreateConversation( - ctx context.Context, - conversations []*relationTb.ConversationModel, -) error { +func (c *conversationDatabase) CreateConversation(ctx context.Context, conversations []*relationTb.ConversationModel) error { if err := c.conversationDB.Create(ctx, conversations); err != nil { return err } @@ -165,35 +121,34 @@ func (c *conversationDatabase) CreateConversation( return cache.DelConversationIDs(userIDs...).DelUserConversationIDsHash(userIDs...).ExecDel(ctx) } -func (c *conversationDatabase) SyncPeerUserPrivateConversationTx( - ctx context.Context, - conversations []*relationTb.ConversationModel, -) error { +func (c *conversationDatabase) SyncPeerUserPrivateConversationTx(ctx context.Context, conversations []*relationTb.ConversationModel) error { cache := c.cache.NewCache() if err := c.tx.Transaction(func(tx any) error { conversationTx := c.conversationDB.NewTx(tx) for _, conversation := range conversations { for _, v := range [][2]string{{conversation.OwnerUserID, conversation.UserID}, {conversation.UserID, conversation.OwnerUserID}} { - haveUserIDs, err := conversationTx.FindUserID(ctx, []string{v[0]}, []string{conversation.ConversationID}) + ownerUserID := v[0] + userID := v[1] + haveUserIDs, err := conversationTx.FindUserID(ctx, []string{ownerUserID}, []string{conversation.ConversationID}) if err != nil { return err } if len(haveUserIDs) > 0 { - _, err := conversationTx.UpdateByMap(ctx, []string{v[0]}, conversation.ConversationID, map[string]interface{}{"is_private_chat": conversation.IsPrivateChat}) + _, err := conversationTx.UpdateByMap(ctx, []string{ownerUserID}, conversation.ConversationID, map[string]interface{}{"is_private_chat": conversation.IsPrivateChat}) if err != nil { return err } - cache = cache.DelUsersConversation(conversation.ConversationID, v[0]) + cache = cache.DelUsersConversation(conversation.ConversationID, ownerUserID) } else { newConversation := *conversation - newConversation.OwnerUserID = v[0] - newConversation.UserID = v[1] + newConversation.OwnerUserID = ownerUserID + newConversation.UserID = userID newConversation.ConversationID = conversation.ConversationID newConversation.IsPrivateChat = conversation.IsPrivateChat if err := conversationTx.Create(ctx, []*relationTb.ConversationModel{&newConversation}); err != nil { return err } - cache = cache.DelConversationIDs(v[0]).DelUserConversationIDsHash(v[0]) + cache = cache.DelConversationIDs(ownerUserID).DelUserConversationIDsHash(ownerUserID) } } } @@ -201,37 +156,22 @@ func (c *conversationDatabase) SyncPeerUserPrivateConversationTx( }); err != nil { return err } - return c.cache.ExecDel(ctx) + return cache.ExecDel(ctx) } -func (c *conversationDatabase) FindConversations( - ctx context.Context, - ownerUserID string, - conversationIDs []string, -) ([]*relationTb.ConversationModel, error) { +func (c *conversationDatabase) FindConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ([]*relationTb.ConversationModel, error) { return c.cache.GetConversations(ctx, ownerUserID, conversationIDs) } -func (c *conversationDatabase) GetConversation( - ctx context.Context, - ownerUserID string, - conversationID string, -) (*relationTb.ConversationModel, error) { +func (c *conversationDatabase) GetConversation(ctx context.Context, ownerUserID string, conversationID string) (*relationTb.ConversationModel, error) { return c.cache.GetConversation(ctx, ownerUserID, conversationID) } -func (c *conversationDatabase) GetUserAllConversation( - ctx context.Context, - ownerUserID string, -) ([]*relationTb.ConversationModel, error) { +func (c *conversationDatabase) GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error) { return c.cache.GetUserAllConversations(ctx, ownerUserID) } -func (c *conversationDatabase) SetUserConversations( - ctx context.Context, - ownerUserID string, - conversations []*relationTb.ConversationModel, -) error { +func (c *conversationDatabase) SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error { cache := c.cache.NewCache() if err := c.tx.Transaction(func(tx any) error { var conversationIDs []string @@ -281,11 +221,7 @@ func (c *conversationDatabase) FindRecvMsgNotNotifyUserIDs(ctx context.Context, return c.cache.GetSuperGroupRecvMsgNotNotifyUserIDs(ctx, groupID) } -func (c *conversationDatabase) CreateGroupChatConversation( - ctx context.Context, - groupID string, - userIDs []string, -) error { +func (c *conversationDatabase) CreateGroupChatConversation(ctx context.Context, groupID string, userIDs []string) error { cache := c.cache.NewCache() conversationID := utils.GetConversationIDBySessionType(constant.SuperGroupChatType, groupID) if err := c.tx.Transaction(func(tx any) error { @@ -325,10 +261,7 @@ func (c *conversationDatabase) GetConversationIDs(ctx context.Context, userID st return c.cache.GetUserConversationIDs(ctx, userID) } -func (c *conversationDatabase) GetUserConversationIDsHash( - ctx context.Context, - ownerUserID string, -) (hash uint64, err error) { +func (c *conversationDatabase) GetUserConversationIDsHash(ctx context.Context, ownerUserID string) (hash uint64, err error) { return c.cache.GetUserConversationIDsHash(ctx, ownerUserID) } @@ -336,16 +269,14 @@ func (c *conversationDatabase) GetAllConversationIDs(ctx context.Context) ([]str return c.conversationDB.GetAllConversationIDs(ctx) } -func (c *conversationDatabase) GetUserAllHasReadSeqs( - ctx context.Context, - ownerUserID string, -) (map[string]int64, error) { +func (c *conversationDatabase) GetUserAllHasReadSeqs(ctx context.Context, ownerUserID string) (map[string]int64, error) { return c.cache.GetUserAllHasReadSeqs(ctx, ownerUserID) } -func (c *conversationDatabase) GetConversationsByConversationID( - ctx context.Context, - conversationIDs []string, -) ([]*relationTb.ConversationModel, error) { +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 73b6d9330..000000000 --- a/pkg/common/db/controller/extend_msg.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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/group.go b/pkg/common/db/controller/group.go index 18b10aca5..9010e3350 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -17,6 +17,7 @@ package controller import ( "context" "fmt" + "time" "github.com/dtm-labs/rockscache" "github.com/redis/go-redis/v9" @@ -121,6 +122,11 @@ type GroupDatabase interface { DeleteSuperGroup(ctx context.Context, groupID string) error DeleteSuperGroupMember(ctx context.Context, groupID string, userIDs []string) error CreateSuperGroupMember(ctx context.Context, groupID string, userIDs []string) error + + // 获取群总数 + CountTotal(ctx context.Context, before *time.Time) (count int64, err error) + // 获取范围内群增量 + CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) } func NewGroupDatabase( @@ -562,3 +568,11 @@ func (g *groupDatabase) CreateSuperGroupMember(ctx context.Context, groupID stri } return g.cache.DelSuperGroupMemberIDs(groupID).DelJoinedSuperGroupIDs(userIDs...).ExecDel(ctx) } + +func (g *groupDatabase) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { + return g.groupDB.CountTotal(ctx, before) +} + +func (g *groupDatabase) CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) { + return g.groupDB.CountRangeEverydayTotal(ctx, start, end) +} diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index 435e3e70b..f23e7580c 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -1,21 +1,6 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package controller import ( - "fmt" "time" "github.com/redis/go-redis/v9" @@ -33,11 +18,10 @@ import ( "context" "errors" - "go.mongodb.org/mongo-driver/mongo" - 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" + "go.mongodb.org/mongo-driver/mongo" ) const ( @@ -56,28 +40,17 @@ type CommonMsgDatabase interface { DeleteMessagesFromCache(ctx context.Context, conversationID string, seqs []int64) error DelUserDeleteMsgsList(ctx context.Context, conversationID string, seqs []int64) // incrSeq然后批量插入缓存 - BatchInsertChat2Cache( - ctx context.Context, - conversationID string, - msgs []*sdkws.MsgData, - ) (seq int64, isNewConversation bool, err error) + BatchInsertChat2Cache(ctx context.Context, conversationID string, msgs []*sdkws.MsgData) (seq int64, isNewConversation bool, err error) // 通过seqList获取mongo中写扩散消息 - GetMsgBySeqsRange( - ctx context.Context, - userID string, - conversationID string, - begin, end, num, userMaxSeq int64, - ) (minSeq int64, maxSeq int64, seqMsg []*sdkws.MsgData, err error) + GetMsgBySeqsRange(ctx context.Context, userID string, conversationID string, begin, end, num, userMaxSeq int64) (minSeq int64, maxSeq int64, seqMsg []*sdkws.MsgData, err error) // 通过seqList获取大群在 mongo里面的消息 - GetMsgBySeqs( - ctx context.Context, - userID string, - conversationID string, - seqs []int64, - ) (minSeq int64, maxSeq int64, seqMsg []*sdkws.MsgData, err error) + 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 // 物理删除消息置空 @@ -101,11 +74,8 @@ type CommonMsgDatabase interface { GetHasReadSeq(ctx context.Context, userID string, conversationID string) (int64, error) UserSetHasReadSeqs(ctx context.Context, userID string, hasReadSeqs map[string]int64) error - GetMongoMaxAndMinSeq(ctx context.Context, conversationID string) (maxSeq, minSeq int64, err error) - GetConversationMinMaxSeqInMongoAndCache( - ctx context.Context, - conversationID string, - ) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) + GetMongoMaxAndMinSeq(ctx context.Context, conversationID string) (minSeqMongo, maxSeqMongo int64, err error) + GetConversationMinMaxSeqInMongoAndCache(ctx context.Context, conversationID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) SetSendMsgStatus(ctx context.Context, id string, status int32) error GetSendMsgStatus(ctx context.Context, id string) (int32, error) @@ -115,51 +85,17 @@ 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) } func NewCommonMsgDatabase(msgDocModel unRelationTb.MsgDocModelInterface, cacheModel cache.MsgModel) CommonMsgDatabase { return &commonMsgDatabase{ - msgDocDatabase: msgDocModel, - 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), - producerToModify: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToModify.Topic), + msgDocDatabase: msgDocModel, + 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), } } @@ -171,15 +107,13 @@ func InitCommonMsgDatabase(rdb redis.UniversalClient, database *mongo.Database) } type commonMsgDatabase struct { - msgDocDatabase unRelationTb.MsgDocModelInterface - extendMsgDatabase unRelationTb.ExtendMsgSetModelInterface - extendMsgSetModel unRelationTb.ExtendMsgSetModel - msg unRelationTb.MsgDocModel - cache cache.MsgModel - producer *kafka.Producer - producerToMongo *kafka.Producer - producerToModify *kafka.Producer - producerToPush *kafka.Producer + msgDocDatabase unRelationTb.MsgDocModelInterface + msg unRelationTb.MsgDocModel + cache cache.MsgModel + producer *kafka.Producer + producerToMongo *kafka.Producer + producerToModify *kafka.Producer + producerToPush *kafka.Producer } func (db *commonMsgDatabase) MsgToMQ(ctx context.Context, key string, msg2mq *sdkws.MsgData) error { @@ -187,32 +121,16 @@ func (db *commonMsgDatabase) MsgToMQ(ctx context.Context, key string, msg2mq *sd return err } -func (db *commonMsgDatabase) MsgToModifyMQ( - ctx context.Context, - key, conversationID string, - messages []*sdkws.MsgData, -) error { +func (db *commonMsgDatabase) MsgToModifyMQ(ctx context.Context, key, conversationID string, messages []*sdkws.MsgData) error { if len(messages) > 0 { - _, _, err := db.producerToModify.SendMessage( - ctx, - key, - &pbMsg.MsgDataToModifyByMQ{ConversationID: conversationID, Messages: messages}, - ) + _, _, err := db.producerToModify.SendMessage(ctx, key, &pbMsg.MsgDataToModifyByMQ{ConversationID: conversationID, Messages: messages}) return err } return nil } -func (db *commonMsgDatabase) MsgToPushMQ( - ctx context.Context, - key, conversationID string, - msg2mq *sdkws.MsgData, -) (int32, int64, error) { - partition, offset, err := db.producerToPush.SendMessage( - ctx, - key, - &pbMsg.PushMsgDataToMQ{MsgData: msg2mq, ConversationID: conversationID}, - ) +func (db *commonMsgDatabase) MsgToPushMQ(ctx context.Context, key, conversationID string, msg2mq *sdkws.MsgData) (int32, int64, error) { + partition, offset, err := db.producerToPush.SendMessage(ctx, key, &pbMsg.PushMsgDataToMQ{MsgData: msg2mq, ConversationID: conversationID}) if err != nil { log.ZError(ctx, "MsgToPushMQ", err, "key", key, "msg2mq", msg2mq) return 0, 0, err @@ -220,30 +138,15 @@ func (db *commonMsgDatabase) MsgToPushMQ( return partition, offset, nil } -func (db *commonMsgDatabase) MsgToMongoMQ( - ctx context.Context, - key, conversationID string, - messages []*sdkws.MsgData, - lastSeq int64, -) error { +func (db *commonMsgDatabase) MsgToMongoMQ(ctx context.Context, key, conversationID string, messages []*sdkws.MsgData, lastSeq int64) error { if len(messages) > 0 { - _, _, err := db.producerToMongo.SendMessage( - ctx, - key, - &pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, ConversationID: conversationID, MsgData: messages}, - ) + _, _, err := db.producerToMongo.SendMessage(ctx, key, &pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, ConversationID: conversationID, MsgData: messages}) return err } return nil } -func (db *commonMsgDatabase) BatchInsertBlock( - ctx context.Context, - conversationID string, - fields []any, - key int8, - firstSeq int64, -) error { +func (db *commonMsgDatabase) BatchInsertBlock(ctx context.Context, conversationID string, fields []any, key int8, firstSeq int64) error { if len(fields) == 0 { return nil } @@ -344,12 +247,7 @@ func (db *commonMsgDatabase) BatchInsertBlock( return nil } -func (db *commonMsgDatabase) BatchInsertChat2DB( - ctx context.Context, - conversationID string, - msgList []*sdkws.MsgData, - currentMaxSeq int64, -) error { +func (db *commonMsgDatabase) BatchInsertChat2DB(ctx context.Context, conversationID string, msgList []*sdkws.MsgData, currentMaxSeq int64) error { if len(msgList) == 0 { return errs.ErrArgs.Wrap("msgList is empty") } @@ -395,21 +293,11 @@ func (db *commonMsgDatabase) BatchInsertChat2DB( return db.BatchInsertBlock(ctx, conversationID, msgs, updateKeyMsg, msgList[0].Seq) } -func (db *commonMsgDatabase) RevokeMsg( - ctx context.Context, - conversationID string, - seq int64, - revoke *unRelationTb.RevokeModel, -) error { +func (db *commonMsgDatabase) RevokeMsg(ctx context.Context, conversationID string, seq int64, revoke *unRelationTb.RevokeModel) error { return db.BatchInsertBlock(ctx, conversationID, []any{revoke}, updateKeyRevoke, seq) } -func (db *commonMsgDatabase) MarkSingleChatMsgsAsRead( - ctx context.Context, - userID string, - conversationID string, - totalSeqs []int64, -) error { +func (db *commonMsgDatabase) MarkSingleChatMsgsAsRead(ctx context.Context, userID string, conversationID string, totalSeqs []int64) error { for docID, seqs := range db.msg.GetDocIDSeqsMap(conversationID, totalSeqs) { var indexes []int64 for _, seq := range seqs { @@ -432,11 +320,7 @@ func (db *commonMsgDatabase) DelUserDeleteMsgsList(ctx context.Context, conversa db.cache.DelUserDeleteMsgsList(ctx, conversationID, seqs) } -func (db *commonMsgDatabase) BatchInsertChat2Cache( - ctx context.Context, - conversationID string, - msgs []*sdkws.MsgData, -) (seq int64, isNew bool, err error) { +func (db *commonMsgDatabase) BatchInsertChat2Cache(ctx context.Context, conversationID string, msgs []*sdkws.MsgData) (seq int64, isNew bool, err error) { currentMaxSeq, err := db.cache.GetMaxSeq(ctx, conversationID) if err != nil && errs.Unwrap(err) != redis.Nil { prome.Inc(prome.SeqGetFailedCounter) @@ -483,11 +367,7 @@ func (db *commonMsgDatabase) BatchInsertChat2Cache( return lastMaxSeq, isNew, utils.Wrap(err, "") } -func (db *commonMsgDatabase) getMsgBySeqs( - ctx context.Context, - userID, conversationID string, - seqs []int64, -) (totalMsgs []*sdkws.MsgData, err error) { +func (db *commonMsgDatabase) getMsgBySeqs(ctx context.Context, userID, conversationID string, seqs []int64) (totalMsgs []*sdkws.MsgData, err error) { for docID, seqs := range db.msg.GetDocIDSeqsMap(conversationID, seqs) { //log.ZDebug(ctx, "getMsgBySeqs", "docID", docID, "seqs", seqs) msgs, err := db.findMsgInfoBySeq(ctx, userID, docID, seqs) @@ -501,50 +381,7 @@ func (db *commonMsgDatabase) getMsgBySeqs( 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) { +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 { if msg.IsRead { @@ -554,25 +391,8 @@ func (db *commonMsgDatabase) findMsgInfoBySeq( return msgs, err } -func (db *commonMsgDatabase) getMsgBySeqsRange( - ctx context.Context, - userID string, - conversationID string, - allSeqs []int64, - begin, end int64, -) (seqMsgs []*sdkws.MsgData, err error) { - log.ZDebug( - ctx, - "getMsgBySeqsRange", - "conversationID", - conversationID, - "allSeqs", - allSeqs, - "begin", - begin, - "end", - end, - ) +func (db *commonMsgDatabase) getMsgBySeqsRange(ctx context.Context, userID string, conversationID string, allSeqs []int64, begin, end int64) (seqMsgs []*sdkws.MsgData, err error) { + log.ZDebug(ctx, "getMsgBySeqsRange", "conversationID", conversationID, "allSeqs", allSeqs, "begin", begin, "end", end) for docID, seqs := range db.msg.GetDocIDSeqsMap(conversationID, allSeqs) { log.ZDebug(ctx, "getMsgBySeqsRange", "docID", docID, "seqs", seqs) msgs, err := db.findMsgInfoBySeq(ctx, userID, docID, seqs) @@ -589,12 +409,7 @@ func (db *commonMsgDatabase) getMsgBySeqsRange( return seqMsgs, nil } -func (db *commonMsgDatabase) GetMsgBySeqsRange( - ctx context.Context, - userID string, - conversationID string, - begin, end, num, userMaxSeq int64, -) (int64, int64, []*sdkws.MsgData, error) { +func (db *commonMsgDatabase) GetMsgBySeqsRange(ctx context.Context, userID string, conversationID string, begin, end, num, userMaxSeq int64) (int64, int64, []*sdkws.MsgData, error) { userMinSeq, err := db.cache.GetConversationUserMinSeq(ctx, conversationID, userID) if err != nil && errs.Unwrap(err) != redis.Nil { return 0, 0, nil, err @@ -614,18 +429,7 @@ func (db *commonMsgDatabase) GetMsgBySeqsRange( if err != nil && errs.Unwrap(err) != redis.Nil { return 0, 0, nil, err } - log.ZDebug( - ctx, - "GetMsgBySeqsRange", - "userMinSeq", - userMinSeq, - "conMinSeq", - minSeq, - "conMaxSeq", - maxSeq, - "userMaxSeq", - userMaxSeq, - ) + log.ZDebug(ctx, "GetMsgBySeqsRange", "userMinSeq", userMinSeq, "conMinSeq", minSeq, "conMaxSeq", maxSeq, "userMaxSeq", userMaxSeq) if userMaxSeq != 0 { if userMaxSeq < maxSeq { maxSeq = userMaxSeq @@ -675,18 +479,7 @@ func (db *commonMsgDatabase) GetMsgBySeqsRange( cacheDelNum += 1 } } - log.ZDebug( - ctx, - "get delSeqs from redis", - "delSeqs", - delSeqs, - "userID", - userID, - "conversationID", - conversationID, - "cacheDelNum", - cacheDelNum, - ) + log.ZDebug(ctx, "get delSeqs from redis", "delSeqs", delSeqs, "userID", userID, "conversationID", conversationID, "cacheDelNum", cacheDelNum) var reGetSeqsCache []int64 for i := 1; i <= cacheDelNum; { newSeq := newBegin - int64(i) @@ -706,15 +499,7 @@ func (db *commonMsgDatabase) GetMsgBySeqsRange( if err != nil { if err != redis.Nil { prome.Add(prome.MsgPullFromRedisFailedCounter, len(failedSeqs2)) - log.ZError( - ctx, - "get message from redis exception", - err, - "conversationID", - conversationID, - "seqs", - reGetSeqsCache, - ) + log.ZError(ctx, "get message from redis exception", err, "conversationID", conversationID, "seqs", reGetSeqsCache) } } failedSeqs = append(failedSeqs, failedSeqs2...) @@ -740,12 +525,7 @@ func (db *commonMsgDatabase) GetMsgBySeqsRange( return minSeq, maxSeq, successMsgs, nil } -func (db *commonMsgDatabase) GetMsgBySeqs( - ctx context.Context, - userID string, - conversationID string, - seqs []int64, -) (int64, int64, []*sdkws.MsgData, error) { +func (db *commonMsgDatabase) GetMsgBySeqs(ctx context.Context, userID string, conversationID string, seqs []int64) (int64, int64, []*sdkws.MsgData, error) { userMinSeq, err := db.cache.GetConversationUserMinSeq(ctx, conversationID, userID) if err != nil && errs.Unwrap(err) != redis.Nil { return 0, 0, nil, err @@ -771,33 +551,10 @@ func (db *commonMsgDatabase) GetMsgBySeqs( if err != nil { if err != redis.Nil { prome.Add(prome.MsgPullFromRedisFailedCounter, len(failedSeqs)) - log.ZError( - ctx, - "get message from redis exception", - err, - "failedSeqs", - failedSeqs, - "conversationID", - conversationID, - ) + log.ZError(ctx, "get message from redis exception", err, "failedSeqs", failedSeqs, "conversationID", conversationID) } } - log.ZInfo( - ctx, - "db.cache.GetMessagesBySeq", - "userID", - userID, - "conversationID", - conversationID, - "seqs", - seqs, - "successMsgs", - len(successMsgs), - "failedSeqs", - failedSeqs, - "conversationID", - conversationID, - ) + log.ZInfo(ctx, "db.cache.GetMessagesBySeq", "userID", userID, "conversationID", conversationID, "seqs", seqs, "successMsgs", len(successMsgs), "failedSeqs", failedSeqs, "conversationID", conversationID) prome.Add(prome.MsgPullFromRedisSuccessCounter, len(successMsgs)) if len(failedSeqs) > 0 { mongoMsgs, err := db.getMsgBySeqs(ctx, userID, conversationID, failedSeqs) @@ -811,11 +568,7 @@ func (db *commonMsgDatabase) GetMsgBySeqs( return minSeq, maxSeq, successMsgs, nil } -func (db *commonMsgDatabase) DeleteConversationMsgsAndSetMinSeq( - ctx context.Context, - conversationID string, - remainTime int64, -) error { +func (db *commonMsgDatabase) DeleteConversationMsgsAndSetMinSeq(ctx context.Context, conversationID string, remainTime int64) error { var delStruct delMsgRecursionStruct var skip int64 minSeq, err := db.deleteMsgRecursion(ctx, conversationID, skip, &delStruct, remainTime) @@ -835,6 +588,49 @@ func (db *commonMsgDatabase) DeleteConversationMsgsAndSetMinSeq( 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 + } + index++ + //&& msgDocModel.Msg[0].Msg.SendTime > lastMsgDestructTime.UnixMilli() + if len(msgDocModel.Msg) > 0 { + for _, msg := range msgDocModel.Msg { + if msg != nil && msg.Msg != nil && 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 @@ -849,26 +645,13 @@ func (d *delMsgRecursionStruct) getSetMinSeq() int64 { // seq 70 // set minSeq 21 // recursion 删除list并且返回设置的最小seq -func (db *commonMsgDatabase) deleteMsgRecursion( - ctx context.Context, - conversationID string, - index int64, - delStruct *delMsgRecursionStruct, - remainTime int64, -) (int64, error) { +func (db *commonMsgDatabase) deleteMsgRecursion(ctx context.Context, conversationID string, index int64, delStruct *delMsgRecursionStruct, remainTime int64) (int64, error) { // find from oldest list 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 ErrMsgListNotExist", - "conversationID", - conversationID, - "index:", - index, - ) + log.ZDebug(ctx, "deleteMsgRecursion ErrMsgListNotExist", "conversationID", conversationID, "index:", index) } else { log.ZError(ctx, "deleteMsgRecursion GetUserMsgListByIndex failed", err, "conversationID", conversationID, "index", index) } @@ -880,23 +663,11 @@ func (db *commonMsgDatabase) deleteMsgRecursion( } return delStruct.getSetMinSeq() + 1, nil } - log.ZDebug( - ctx, - "doc info", - "conversationID", - conversationID, - "index", - index, - "docID", - msgDocModel.DocID, - "len", - len(msgDocModel.Msg), - ) + log.ZDebug(ctx, "doc info", "conversationID", conversationID, "index", index, "docID", msgDocModel.DocID, "len", len(msgDocModel.Msg)) if int64(len(msgDocModel.Msg)) > db.msg.GetSingleGocMsgNum() { log.ZWarn(ctx, "msgs too large", nil, "lenth", len(msgDocModel.Msg), "docID:", msgDocModel.DocID) } - if msgDocModel.IsFull() && - msgDocModel.Msg[len(msgDocModel.Msg)-1].Msg.SendTime+(remainTime*1000) < utils.GetCurrentTimestampByMill() { + if msgDocModel.IsFull() && msgDocModel.Msg[len(msgDocModel.Msg)-1].Msg.SendTime+(remainTime*1000) < utils.GetCurrentTimestampByMill() { log.ZDebug(ctx, "doc is full and all msg is expired", "docID", msgDocModel.DocID) delStruct.delDocIDs = append(delStruct.delDocIDs, msgDocModel.DocID) delStruct.minSeq = msgDocModel.Msg[len(msgDocModel.Msg)-1].Msg.Seq @@ -933,11 +704,7 @@ func (db *commonMsgDatabase) deleteMsgRecursion( return seq, err } -func (db *commonMsgDatabase) DeleteMsgsPhysicalBySeqs( - ctx context.Context, - conversationID string, - allSeqs []int64, -) error { +func (db *commonMsgDatabase) DeleteMsgsPhysicalBySeqs(ctx context.Context, conversationID string, allSeqs []int64) error { if err := db.cache.DeleteMessages(ctx, conversationID, allSeqs); err != nil { return err } @@ -953,12 +720,7 @@ func (db *commonMsgDatabase) DeleteMsgsPhysicalBySeqs( return nil } -func (db *commonMsgDatabase) DeleteUserMsgsBySeqs( - ctx context.Context, - userID string, - conversationID string, - seqs []int64, -) error { +func (db *commonMsgDatabase) DeleteUserMsgsBySeqs(ctx context.Context, userID string, conversationID string, seqs []int64) error { cachedMsgs, _, err := db.cache.GetMessagesBySeq(ctx, conversationID, seqs) if err != nil && errs.Unwrap(err) != redis.Nil { log.ZWarn(ctx, "DeleteUserMsgsBySeqs", err, "conversationID", conversationID, "seqs", seqs) @@ -1027,70 +789,31 @@ func (db *commonMsgDatabase) GetMinSeqs(ctx context.Context, conversationIDs []s func (db *commonMsgDatabase) GetMinSeq(ctx context.Context, conversationID string) (int64, error) { return db.cache.GetMinSeq(ctx, conversationID) } - -func (db *commonMsgDatabase) GetConversationUserMinSeq( - ctx context.Context, - conversationID string, - userID string, -) (int64, error) { +func (db *commonMsgDatabase) GetConversationUserMinSeq(ctx context.Context, conversationID string, userID string) (int64, error) { return db.cache.GetConversationUserMinSeq(ctx, conversationID, userID) } - -func (db *commonMsgDatabase) GetConversationUserMinSeqs( - ctx context.Context, - conversationID string, - userIDs []string, -) (map[string]int64, error) { +func (db *commonMsgDatabase) GetConversationUserMinSeqs(ctx context.Context, conversationID string, userIDs []string) (map[string]int64, error) { return db.cache.GetConversationUserMinSeqs(ctx, conversationID, userIDs) } - -func (db *commonMsgDatabase) SetConversationUserMinSeq( - ctx context.Context, - conversationID string, - userID string, - minSeq int64, -) error { +func (db *commonMsgDatabase) SetConversationUserMinSeq(ctx context.Context, conversationID string, userID string, minSeq int64) error { return db.cache.SetConversationUserMinSeq(ctx, conversationID, userID, minSeq) } - -func (db *commonMsgDatabase) SetConversationUserMinSeqs( - ctx context.Context, - conversationID string, - seqs map[string]int64, -) (err error) { +func (db *commonMsgDatabase) SetConversationUserMinSeqs(ctx context.Context, conversationID string, seqs map[string]int64) (err error) { return db.cache.SetConversationUserMinSeqs(ctx, conversationID, seqs) } -func (db *commonMsgDatabase) SetUserConversationsMinSeqs( - ctx context.Context, - userID string, - seqs map[string]int64, -) error { +func (db *commonMsgDatabase) SetUserConversationsMinSeqs(ctx context.Context, userID string, seqs map[string]int64) error { return db.cache.SetUserConversationsMinSeqs(ctx, userID, seqs) } -func (db *commonMsgDatabase) UserSetHasReadSeqs( - ctx context.Context, - userID string, - hasReadSeqs map[string]int64, -) error { +func (db *commonMsgDatabase) UserSetHasReadSeqs(ctx context.Context, userID string, hasReadSeqs map[string]int64) error { return db.cache.UserSetHasReadSeqs(ctx, userID, hasReadSeqs) } -func (db *commonMsgDatabase) SetHasReadSeq( - ctx context.Context, - userID string, - conversationID string, - hasReadSeq int64, -) error { +func (db *commonMsgDatabase) SetHasReadSeq(ctx context.Context, userID string, conversationID string, hasReadSeq int64) error { return db.cache.SetHasReadSeq(ctx, userID, conversationID, hasReadSeq) } - -func (db *commonMsgDatabase) GetHasReadSeqs( - ctx context.Context, - userID string, - conversationIDs []string, -) (map[string]int64, error) { +func (db *commonMsgDatabase) GetHasReadSeqs(ctx context.Context, userID string, conversationIDs []string) (map[string]int64, error) { return db.cache.GetHasReadSeqs(ctx, userID, conversationIDs) } @@ -1106,10 +829,7 @@ func (db *commonMsgDatabase) GetSendMsgStatus(ctx context.Context, id string) (i return db.cache.GetSendMsgStatus(ctx, id) } -func (db *commonMsgDatabase) GetConversationMinMaxSeqInMongoAndCache( - ctx context.Context, - conversationID string, -) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) { +func (db *commonMsgDatabase) GetConversationMinMaxSeqInMongoAndCache(ctx context.Context, conversationID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) { minSeqMongo, maxSeqMongo, err = db.GetMinMaxSeqMongo(ctx, conversationID) if err != nil { return @@ -1125,17 +845,11 @@ func (db *commonMsgDatabase) GetConversationMinMaxSeqInMongoAndCache( return } -func (db *commonMsgDatabase) GetMongoMaxAndMinSeq( - ctx context.Context, - conversationID string, -) (maxSeq, minSeq int64, err error) { +func (db *commonMsgDatabase) GetMongoMaxAndMinSeq(ctx context.Context, conversationID string) (minSeqMongo, maxSeqMongo int64, err error) { return db.GetMinMaxSeqMongo(ctx, conversationID) } -func (db *commonMsgDatabase) GetMinMaxSeqMongo( - ctx context.Context, - conversationID string, -) (minSeqMongo, maxSeqMongo int64, err error) { +func (db *commonMsgDatabase) GetMinMaxSeqMongo(ctx context.Context, conversationID string) (minSeqMongo, maxSeqMongo int64, err error) { oldestMsgMongo, err := db.msgDocDatabase.GetOldestMsg(ctx, conversationID) if err != nil { return @@ -1149,124 +863,10 @@ func (db *commonMsgDatabase) GetMinMaxSeqMongo( return } -func (db *commonMsgDatabase) JudgeMessageReactionExist( - ctx context.Context, - clientMsgID string, - sessionType int32, -) (bool, error) { - return db.cache.JudgeMessageReactionExist(ctx, clientMsgID, sessionType) +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) } -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) 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) { + return db.msgDocDatabase.RangeGroupSendCount(ctx, start, end, 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 c383eb8ec..000000000 --- a/pkg/common/db/controller/storage.go +++ /dev/null @@ -1,567 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package controller - -import ( - "bytes" - "context" - "crypto/md5" - "encoding/hex" - "encoding/json" - "errors" - "fmt" - "io" - "net/url" - "path" - "strconv" - "time" - - "github.com/google/uuid" - - "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" -) - -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/controller/user.go b/pkg/common/db/controller/user.go index 03224b61e..db725ae60 100644 --- a/pkg/common/db/controller/user.go +++ b/pkg/common/db/controller/user.go @@ -45,7 +45,7 @@ type UserDatabase interface { //函数内部先查询db中是否存在,存在则什么都不做;不存在则插入 InitOnce(ctx context.Context, users []*relation.UserModel) (err error) // 获取用户总数 - CountTotal(ctx context.Context) (int64, error) + CountTotal(ctx context.Context, before *time.Time) (int64, error) // 获取范围内用户增量 CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) } @@ -151,8 +151,8 @@ func (u *userDatabase) GetAllUserID(ctx context.Context) (userIDs []string, err return u.userDB.GetAllUserID(ctx) } -func (u *userDatabase) CountTotal(ctx context.Context) (count int64, err error) { - return u.userDB.CountTotal(ctx) +func (u *userDatabase) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { + return u.userDB.CountTotal(ctx, before) } func (u *userDatabase) CountRangeEverydayTotal( diff --git a/pkg/common/db/obj/minio.go b/pkg/common/db/obj/minio.go deleted file mode 100644 index ffd8684c9..000000000 --- a/pkg/common/db/obj/minio.go +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package obj - -import ( - "context" - "errors" - "fmt" - "io" - "net/http" - "net/url" - "time" - - "github.com/minio/minio-go/v7" - "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/minio/minio-go/v7/pkg/s3utils" - - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" - "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" -) - -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 d8f5d9390..000000000 --- a/pkg/common/db/obj/obj.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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/relation/conversation_model.go b/pkg/common/db/relation/conversation_model.go index 47be971c0..04300f704 100644 --- a/pkg/common/db/relation/conversation_model.go +++ b/pkg/common/db/relation/conversation_model.go @@ -1,27 +1,12 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package relation import ( "context" - "gorm.io/gorm" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" + "gorm.io/gorm" ) type ConversationGorm struct { @@ -44,173 +29,66 @@ func (c *ConversationGorm) Delete(ctx context.Context, groupIDs []string) (err e return utils.Wrap(c.db(ctx).Where("group_id in (?)", groupIDs).Delete(&relation.ConversationModel{}).Error, "") } -func (c *ConversationGorm) UpdateByMap( - ctx context.Context, - userIDList []string, - conversationID string, - args map[string]interface{}, -) (rows int64, err error) { +func (c *ConversationGorm) UpdateByMap(ctx context.Context, userIDList []string, conversationID string, args map[string]interface{}) (rows int64, err error) { result := c.db(ctx).Where("owner_user_id IN (?) and conversation_id=?", userIDList, conversationID).Updates(args) return result.RowsAffected, utils.Wrap(result.Error, "") } func (c *ConversationGorm) Update(ctx context.Context, conversation *relation.ConversationModel) (err error) { - return utils.Wrap( - c.db(ctx). - Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). - Updates(conversation). - Error, - "", - ) + return utils.Wrap(c.db(ctx).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID).Updates(conversation).Error, "") } -func (c *ConversationGorm) Find( - ctx context.Context, - ownerUserID string, - conversationIDs []string, -) (conversations []*relation.ConversationModel, err error) { - err = utils.Wrap( - c.db(ctx). - Where("owner_user_id=? and conversation_id IN (?)", ownerUserID, conversationIDs). - Find(&conversations). - Error, - "", - ) +func (c *ConversationGorm) Find(ctx context.Context, ownerUserID string, conversationIDs []string) (conversations []*relation.ConversationModel, err error) { + err = utils.Wrap(c.db(ctx).Where("owner_user_id=? and conversation_id IN (?)", ownerUserID, conversationIDs).Find(&conversations).Error, "") return conversations, err } -func (c *ConversationGorm) Take( - ctx context.Context, - userID, conversationID string, -) (conversation *relation.ConversationModel, err error) { +func (c *ConversationGorm) Take(ctx context.Context, userID, conversationID string) (conversation *relation.ConversationModel, err error) { cc := &relation.ConversationModel{} - return cc, utils.Wrap( - c.db(ctx).Where("conversation_id = ? And owner_user_id = ?", conversationID, userID).Take(cc).Error, - "", - ) + return cc, utils.Wrap(c.db(ctx).Where("conversation_id = ? And owner_user_id = ?", conversationID, userID).Take(cc).Error, "") } -func (c *ConversationGorm) FindUserID( - ctx context.Context, - userIDs []string, - conversationIDs []string, -) (existUserID []string, err error) { - return existUserID, utils.Wrap( - c.db(ctx). - Where(" owner_user_id IN (?) and conversation_id in (?)", userIDs, conversationIDs). - Pluck("owner_user_id", &existUserID). - Error, - "", - ) +func (c *ConversationGorm) FindUserID(ctx context.Context, userIDs []string, conversationIDs []string) (existUserID []string, err error) { + return existUserID, utils.Wrap(c.db(ctx).Where(" owner_user_id IN (?) and conversation_id in (?)", userIDs, conversationIDs).Pluck("owner_user_id", &existUserID).Error, "") } -func (c *ConversationGorm) FindConversationID( - ctx context.Context, - userID string, - conversationIDList []string, -) (existConversationID []string, err error) { - return existConversationID, utils.Wrap( - c.db(ctx). - Where(" conversation_id IN (?) and owner_user_id=?", conversationIDList, userID). - Pluck("conversation_id", &existConversationID). - Error, - "", - ) +func (c *ConversationGorm) FindConversationID(ctx context.Context, userID string, conversationIDList []string) (existConversationID []string, err error) { + return existConversationID, utils.Wrap(c.db(ctx).Where(" conversation_id IN (?) and owner_user_id=?", conversationIDList, userID).Pluck("conversation_id", &existConversationID).Error, "") } -func (c *ConversationGorm) FindUserIDAllConversationID( - ctx context.Context, - userID string, -) (conversationIDList []string, err error) { - return conversationIDList, utils.Wrap( - c.db(ctx).Where("owner_user_id=?", userID).Pluck("conversation_id", &conversationIDList).Error, - "", - ) +func (c *ConversationGorm) FindUserIDAllConversationID(ctx context.Context, userID string) (conversationIDList []string, err error) { + return conversationIDList, utils.Wrap(c.db(ctx).Where("owner_user_id=?", userID).Pluck("conversation_id", &conversationIDList).Error, "") } -func (c *ConversationGorm) FindUserIDAllConversations( - ctx context.Context, - userID string, -) (conversations []*relation.ConversationModel, err error) { +func (c *ConversationGorm) FindUserIDAllConversations(ctx context.Context, userID string) (conversations []*relation.ConversationModel, err error) { return conversations, utils.Wrap(c.db(ctx).Where("owner_user_id=?", userID).Find(&conversations).Error, "") } -func (c *ConversationGorm) FindRecvMsgNotNotifyUserIDs( - ctx context.Context, - groupID string, -) (userIDs []string, err error) { - return userIDs, utils.Wrap( - c.db(ctx). - Where("group_id = ? and recv_msg_opt = ?", groupID, constant.ReceiveNotNotifyMessage). - Pluck("user_id", &userIDs). - Error, - "", - ) +func (c *ConversationGorm) FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) (userIDs []string, err error) { + return userIDs, utils.Wrap(c.db(ctx).Where("group_id = ? and recv_msg_opt = ?", groupID, constant.ReceiveNotNotifyMessage).Pluck("user_id", &userIDs).Error, "") } -func (c *ConversationGorm) FindSuperGroupRecvMsgNotNotifyUserIDs( - ctx context.Context, - groupID string, -) (userIDs []string, err error) { - return userIDs, utils.Wrap( - c.db(ctx). - Where("group_id = ? and recv_msg_opt = ? and conversation_type = ?", groupID, constant.ReceiveNotNotifyMessage, constant.SuperGroupChatType). - Pluck("user_id", &userIDs). - Error, - "", - ) +func (c *ConversationGorm) FindSuperGroupRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) (userIDs []string, err error) { + return userIDs, utils.Wrap(c.db(ctx).Where("group_id = ? and recv_msg_opt = ? and conversation_type = ?", groupID, constant.ReceiveNotNotifyMessage, constant.SuperGroupChatType).Pluck("user_id", &userIDs).Error, "") } -func (c *ConversationGorm) GetUserRecvMsgOpt( - ctx context.Context, - ownerUserID, conversationID string, -) (opt int, err error) { +func (c *ConversationGorm) GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string) (opt int, err error) { var conversation relation.ConversationModel - return int( - conversation.RecvMsgOpt, - ), utils.Wrap( - c.db(ctx). - Where("conversation_id = ? And owner_user_id = ?", conversationID, ownerUserID). - Select("recv_msg_opt"). - Find(&conversation). - Error, - "", - ) + return int(conversation.RecvMsgOpt), utils.Wrap(c.db(ctx).Where("conversation_id = ? And owner_user_id = ?", conversationID, ownerUserID).Select("recv_msg_opt").Find(&conversation).Error, "") } func (c *ConversationGorm) GetAllConversationIDs(ctx context.Context) (conversationIDs []string, err error) { - return conversationIDs, utils.Wrap( - c.db(ctx).Distinct("conversation_id").Pluck("conversation_id", &conversationIDs).Error, - "", - ) + return conversationIDs, utils.Wrap(c.db(ctx).Distinct("conversation_id").Pluck("conversation_id", &conversationIDs).Error, "") } -func (c *ConversationGorm) GetUserAllHasReadSeqs( - ctx context.Context, - ownerUserID string, -) (hasReadSeqs map[string]int64, err error) { - 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) GetUserAllHasReadSeqs(ctx context.Context, ownerUserID string) (hasReadSeqs map[string]int64, err error) { + return nil, nil } -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) 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").Find(&conversations).Error, "") } diff --git a/pkg/common/db/relation/group_model.go b/pkg/common/db/relation/group_model.go index 8e3431c83..f3e1aec2f 100644 --- a/pkg/common/db/relation/group_model.go +++ b/pkg/common/db/relation/group_model.go @@ -1,27 +1,13 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package relation import ( "context" - - "gorm.io/gorm" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/ormutil" "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" ) var _ relation.GroupModelInterface = (*GroupGorm)(nil) @@ -47,13 +33,7 @@ func (g *GroupGorm) UpdateMap(ctx context.Context, groupID string, args map[stri } func (g *GroupGorm) UpdateStatus(ctx context.Context, groupID string, status int32) (err error) { - return utils.Wrap( - g.DB.Where("group_id = ?", groupID). - Model(&relation.GroupModel{}). - Updates(map[string]any{"status": status}). - Error, - "", - ) + return utils.Wrap(g.DB.Where("group_id = ?", groupID).Model(&relation.GroupModel{}).Updates(map[string]any{"status": status}).Error, "") } func (g *GroupGorm) Find(ctx context.Context, groupIDs []string) (groups []*relation.GroupModel, err error) { @@ -65,17 +45,37 @@ func (g *GroupGorm) Take(ctx context.Context, groupID string) (group *relation.G return group, utils.Wrap(g.DB.Where("group_id = ?", groupID).Take(group).Error, "") } -func (g *GroupGorm) Search( - ctx context.Context, - keyword string, - pageNumber, showNumber int32, -) (total uint32, groups []*relation.GroupModel, err error) { +func (g *GroupGorm) Search(ctx context.Context, keyword string, pageNumber, showNumber int32) (total uint32, groups []*relation.GroupModel, err error) { return ormutil.GormSearch[relation.GroupModel](g.DB, []string{"name"}, keyword, pageNumber, showNumber) } func (g *GroupGorm) GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) { - return groupIDs, utils.Wrap( - g.DB.Model(&relation.GroupModel{}).Where("group_type = ? ", groupType).Pluck("group_id", &groupIDs).Error, - "", - ) + return groupIDs, utils.Wrap(g.DB.Model(&relation.GroupModel{}).Where("group_type = ? ", groupType).Pluck("group_id", &groupIDs).Error, "") +} + +func (g *GroupGorm) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { + db := g.db(ctx).Model(&relation.GroupModel{}) + if before != nil { + db = db.Where("create_time < ?", before) + } + if err := db.Count(&count).Error; err != nil { + return 0, err + } + return count, nil +} + +func (g *GroupGorm) CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) { + var res []struct { + Date time.Time `gorm:"column:date"` + Count int64 `gorm:"column:count"` + } + err := g.db(ctx).Model(&relation.GroupModel{}).Select("DATE(create_time) AS date, count(1) AS count").Where("create_time >= ? and create_time < ?", start, end).Group("date").Find(&res).Error + if err != nil { + return nil, errs.Wrap(err) + } + v := make(map[string]int64) + for _, r := range res { + v[r.Date.Format("2006-01-02")] = r.Count + } + return v, nil } 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 5ff8cd47a..000000000 --- a/pkg/common/db/relation/object_hash_model.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package relation - -import ( - "context" - - "gorm.io/gorm" - - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" - "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" -) - -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 642ae8ef2..000000000 --- a/pkg/common/db/relation/object_info_model.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package relation - -import ( - "context" - "time" - - "gorm.io/gorm" - - "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" -) - -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 d2df2636d..000000000 --- a/pkg/common/db/relation/object_put_model.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package relation - -import ( - "context" - "time" - - "gorm.io/gorm" - - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" - "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" -) - -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/relation/user_model.go b/pkg/common/db/relation/user_model.go index 89a1773d4..d03216d9b 100644 --- a/pkg/common/db/relation/user_model.go +++ b/pkg/common/db/relation/user_model.go @@ -41,7 +41,7 @@ func (u *UserGorm) Create(ctx context.Context, users []*relation.UserModel) (err // 更新用户信息 零值 func (u *UserGorm) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) { - return utils.Wrap(u.db(ctx).Where("user_id = ?", userID).Updates(args).Error, "") + return utils.Wrap(u.db(ctx).Model(&relation.UserModel{}).Where("user_id = ?", userID).Updates(args).Error, "") } // 更新多个用户信息 非零值 @@ -94,9 +94,15 @@ func (u *UserGorm) GetUserGlobalRecvMsgOpt(ctx context.Context, userID string) ( return opt, err } -func (u *UserGorm) CountTotal(ctx context.Context) (count int64, err error) { - err = u.db(ctx).Model(&relation.UserModel{}).Count(&count).Error - return count, errs.Wrap(err) +func (u *UserGorm) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { + db := u.db(ctx).Model(&relation.UserModel{}) + if before != nil { + db = db.Where("create_time < ?", before) + } + if err := db.Count(&count).Error; err != nil { + return 0, err + } + return count, nil } func (u *UserGorm) CountRangeEverydayTotal( 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..ba834a739 --- /dev/null +++ b/pkg/common/db/s3/cont/controller.go @@ -0,0 +1,244 @@ +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) { + defer log.ZDebug(ctx, "return") + 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..4b1b4aa4d --- /dev/null +++ b/pkg/common/db/s3/cos/cos.go @@ -0,0 +1,254 @@ +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.ReplaceAll(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) 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) { + if name != "" && name[0] == '/' { + name = name[1:] + } + 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) { + sourceURL := c.copyURL + src + result, _, err := c.client.Object.Copy(ctx, dst, sourceURL, nil) + if err != nil { + return nil, err + } + return &s3.CopyObjectInfo{ + Key: dst, + ETag: strings.ReplaceAll(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, nil) + 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..367cbe8a8 --- /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, nil) + 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..f2b50da50 --- /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)) +} 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 5d6d061b1..6fd260583 100644 --- a/pkg/common/db/table/relation/conversation.go +++ b/pkg/common/db/table/relation/conversation.go @@ -1,40 +1,33 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package relation -import "context" +import ( + "context" + "time" +) const ( conversationModelTableName = "conversations" ) 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"` + 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 { @@ -44,26 +37,13 @@ func (ConversationModel) TableName() string { type ConversationModelInterface interface { Create(ctx context.Context, conversations []*ConversationModel) (err error) Delete(ctx context.Context, groupIDs []string) (err error) - UpdateByMap( - ctx context.Context, - userIDs []string, - conversationID string, - args map[string]interface{}, - ) (rows int64, err error) + UpdateByMap(ctx context.Context, userIDs []string, conversationID string, args map[string]interface{}) (rows int64, err error) Update(ctx context.Context, conversation *ConversationModel) (err error) - Find( - ctx context.Context, - ownerUserID string, - conversationIDs []string, - ) (conversations []*ConversationModel, err error) + Find(ctx context.Context, ownerUserID string, conversationIDs []string) (conversations []*ConversationModel, err error) FindUserID(ctx context.Context, userIDs []string, conversationIDs []string) ([]string, error) FindUserIDAllConversationID(ctx context.Context, userID string) ([]string, error) Take(ctx context.Context, userID, conversationID string) (conversation *ConversationModel, err error) - FindConversationID( - ctx context.Context, - userID string, - conversationIDs []string, - ) (existConversationID []string, err error) + FindConversationID(ctx context.Context, userID string, conversationIDs []string) (existConversationID []string, err error) FindUserIDAllConversations(ctx context.Context, userID string) (conversations []*ConversationModel, err error) FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, error) GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string) (opt int, err error) @@ -71,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/group.go b/pkg/common/db/table/relation/group.go index be0afbcc3..2bafb53ec 100644 --- a/pkg/common/db/table/relation/group.go +++ b/pkg/common/db/table/relation/group.go @@ -58,4 +58,8 @@ type GroupModelInterface interface { pageNumber, showNumber int32, ) (total uint32, groups []*GroupModel, err error) GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) + // 获取群总数 + CountTotal(ctx context.Context, before *time.Time) (count int64, err error) + // 获取范围内群增量 + CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) } 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 231f21a81..000000000 --- a/pkg/common/db/table/relation/object_hash.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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 e7b7fb57c..000000000 --- a/pkg/common/db/table/relation/object_info.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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 49b37826c..000000000 --- a/pkg/common/db/table/relation/object_put.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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/relation/user.go b/pkg/common/db/table/relation/user.go index 7d2bf0cf5..f44a610ad 100644 --- a/pkg/common/db/table/relation/user.go +++ b/pkg/common/db/table/relation/user.go @@ -28,7 +28,7 @@ type UserModel struct { Nickname string `gorm:"column:name;size:255"` FaceURL string `gorm:"column:face_url;size:255"` Ex string `gorm:"column:ex;size:1024"` - CreateTime time.Time `gorm:"column:create_time;index:create_time; autoCreateTime"` + CreateTime time.Time `gorm:"column:create_time;index:create_time;autoCreateTime"` AppMangerLevel int32 `gorm:"column:app_manger_level;default:18"` GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"` } @@ -66,7 +66,7 @@ type UserModelInterface interface { GetAllUserID(ctx context.Context) (userIDs []string, err error) GetUserGlobalRecvMsgOpt(ctx context.Context, userID string) (opt int, err error) // 获取用户总数 - CountTotal(ctx context.Context) (count int64, err error) + CountTotal(ctx context.Context, before *time.Time) (count int64, err error) // 获取范围内用户增量 CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, 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 472daf5fa..000000000 --- a/pkg/common/db/table/unrelation/extend_msg_set.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -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/table/unrelation/msg.go b/pkg/common/db/table/unrelation/msg.go index 57f9b4cca..e34bd374b 100644 --- a/pkg/common/db/table/unrelation/msg.go +++ b/pkg/common/db/table/unrelation/msg.go @@ -17,6 +17,7 @@ package unrelation import ( "context" "strconv" + "time" "go.mongodb.org/mongo-driver/mongo" @@ -36,7 +37,6 @@ type MsgDocModel struct { } type RevokeModel struct { - ID string `bson:"id"` Role int32 `bson:"role"` UserID string `bson:"user_id"` Nickname string `bson:"nickname"` @@ -83,6 +83,16 @@ type MsgInfoModel struct { IsRead bool `bson:"is_read"` } +type UserCount struct { + UserID string `bson:"user_id"` + Count int64 `bson:"count"` +} + +type GroupCount struct { + GroupID string `bson:"group_id"` + Count int64 `bson:"count"` +} + type MsgDocModelInterface interface { PushMsgsToDoc(ctx context.Context, docID string, msgsToMongo []MsgInfoModel) error Create(ctx context.Context, model *MsgDocModel) error @@ -98,6 +108,8 @@ type MsgDocModelInterface interface { GetMsgDocModelByIndex(ctx context.Context, conversationID string, index, sort int64) (*MsgDocModel, error) DeleteMsgsInOneDocByIndex(ctx context.Context, docID string, indexes []int) error MarkSingleChatMsgsAsRead(ctx context.Context, userID string, docID string, indexes []int64) error + RangeUserSendCount(ctx context.Context, start time.Time, end time.Time, group bool, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, users []*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 []*GroupCount, dateCount map[string]int64, err error) } func (MsgDocModel) TableName() string { diff --git a/pkg/common/db/unrelation/extend_msg.go b/pkg/common/db/unrelation/extend_msg.go deleted file mode 100644 index 6f09247bc..000000000 --- a/pkg/common/db/unrelation/extend_msg.go +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package unrelation - -import ( - "context" - "errors" - "fmt" - - "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" - - unRelationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation" - "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" -) - -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 fmt.Errorf("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 fmt.Errorf("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, fmt.Errorf("cant find client msg id: %s", clientMsgID) -} diff --git a/pkg/common/db/unrelation/mongo.go b/pkg/common/db/unrelation/mongo.go index 51b9e4b7e..fd13bb2aa 100644 --- a/pkg/common/db/unrelation/mongo.go +++ b/pkg/common/db/unrelation/mongo.go @@ -94,10 +94,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 cecbf2301..6c6d76216 100644 --- a/pkg/common/db/unrelation/msg.go +++ b/pkg/common/db/unrelation/msg.go @@ -19,6 +19,7 @@ import ( "encoding/json" "errors" "fmt" + "time" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" @@ -302,7 +303,7 @@ func (m *MsgMongoDriver) GetMsgBySeqIndexIn1Doc( } if msg.Revoke != nil { revokeContent := sdkws.MessageRevokedContent{ - RevokerID: msg.Revoke.ID, + RevokerID: msg.Revoke.UserID, RevokerRole: msg.Revoke.Role, ClientMsgID: msg.Msg.ClientMsgID, RevokerNickname: msg.Revoke.Nickname, @@ -368,3 +369,683 @@ func (m *MsgMongoDriver) MarkSingleChatMsgsAsRead( _, err := m.MsgCollection.BulkWrite(ctx, updates) return err } + +// RangeUserSendCount +// db.msg.aggregate([ +// +// { +// $match: { +// "msgs.msg.send_time": { +// "$gte": 0, +// "$lt": 1788122092317 +// } +// } +// }, +// { +// "$addFields": { +// "msgs": { +// "$filter": { +// "input": "$msgs", +// "as": "item", +// "cond": { +// "$and": [ +// { +// $gte: ["$$item.msg.send_time", 0] +// }, +// { +// $lt: ["$$item.msg.send_time", 1788122092317] +// } +// ] +// } +// } +// } +// } +// }, +// { +// "$project": { +// "_id": 0, +// +// }, +// +// }, +// { +// "$project": { +// "result": { +// "$map": { +// "input": "$msgs", +// "as": "item", +// "in": { +// user_id: "$$item.msg.send_id", +// send_date: { +// $dateToString: { +// format: "%Y-%m-%d", +// date: { +// $toDate: "$$item.msg.send_time" +// } +// } +// } +// } +// } +// } +// }, +// +// }, +// { +// "$unwind": "$result" +// }, +// { +// "$group": { +// _id: "$result.send_date", +// count: { +// $sum: 1 +// }, +// original: { +// $push: "$$ROOT" +// } +// } +// }, +// { +// "$addFields": { +// "dates": "$$ROOT" +// } +// }, +// { +// "$project": { +// "_id": 0, +// "count": 0, +// "dates.original": 0, +// +// }, +// +// }, +// { +// "$group": { +// _id: null, +// count: { +// $sum: 1 +// }, +// dates: { +// $push: "$dates" +// }, +// original: { +// $push: "$original" +// }, +// +// } +// }, +// { +// "$unwind": "$original" +// }, +// { +// "$unwind": "$original" +// }, +// { +// "$group": { +// _id: "$original.result.user_id", +// count: { +// $sum: 1 +// }, +// original: { +// $push: "$dates" +// }, +// +// } +// }, +// { +// "$addFields": { +// "dates": { +// $arrayElemAt: ["$original", 0] +// } +// } +// }, +// { +// "$project": { +// original: 0 +// } +// }, +// { +// $sort: { +// count: - 1 +// } +// }, +// { +// "$group": { +// _id: null, +// user_count: { +// $sum: 1 +// }, +// users: { +// $push: "$$ROOT" +// }, +// +// } +// }, +// { +// "$addFields": { +// "dates": { +// $arrayElemAt: ["$users", 0] +// } +// } +// }, +// { +// "$addFields": { +// "dates": "$dates.dates" +// } +// }, +// { +// "$project": { +// _id: 0, +// "users.dates": 0, +// +// } +// }, +// { +// "$addFields": { +// "msg_count": { +// $sum: "$users.count" +// } +// } +// }, +// { +// "$addFields": { +// users: { +// $slice: ["$users", 0, 10] +// } +// } +// } +// +// ]) +func (m *MsgMongoDriver) RangeUserSendCount(ctx context.Context, start time.Time, end time.Time, group bool, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, users []*table.UserCount, dateCount map[string]int64, err error) { + var sort int + if ase { + sort = 1 + } else { + sort = -1 + } + type Result struct { + MsgCount int64 `bson:"msg_count"` + UserCount int64 `bson:"user_count"` + Users []struct { + UserID string `bson:"_id"` + Count int64 `bson:"count"` + } `bson:"users"` + Dates []struct { + Date string `bson:"_id"` + Count int64 `bson:"count"` + } `bson:"dates"` + } + or := bson.A{ + bson.M{ + "doc_id": bson.M{ + "$regex": "^si_", + "$options": "i", + }, + }, + } + if group { + or = append(or, + bson.M{ + "doc_id": bson.M{ + "$regex": "^g_", + "$options": "i", + }, + }, + bson.M{ + "doc_id": bson.M{ + "$regex": "^sg_", + "$options": "i", + }, + }, + ) + } + pipeline := bson.A{ + bson.M{ + "$match": bson.M{ + "$and": bson.A{ + bson.M{ + "msgs.msg.send_time": bson.M{ + "$gte": start.UnixMilli(), + "$lt": end.UnixMilli(), + }, + }, + bson.M{ + "$or": or, + }, + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "msgs": bson.M{ + "$filter": bson.M{ + "input": "$msgs", + "as": "item", + "cond": bson.M{ + "$and": bson.A{ + bson.M{ + "$gte": bson.A{ + "$$item.msg.send_time", start.UnixMilli(), + }, + }, + bson.M{ + "$lt": bson.A{ + "$$item.msg.send_time", end.UnixMilli(), + }, + }, + }, + }, + }, + }, + }, + }, + bson.M{ + "$project": bson.M{ + "_id": 0, + }, + }, + bson.M{ + "$project": bson.M{ + "result": bson.M{ + "$map": bson.M{ + "input": "$msgs", + "as": "item", + "in": bson.M{ + "user_id": "$$item.msg.send_id", + "send_date": bson.M{ + "$dateToString": bson.M{ + "format": "%Y-%m-%d", + "date": bson.M{ + "$toDate": "$$item.msg.send_time", // 毫秒时间戳 + }, + }, + }, + }, + }, + }, + }, + }, + bson.M{ + "$unwind": "$result", + }, + bson.M{ + "$group": bson.M{ + "_id": "$result.send_date", + "count": bson.M{ + "$sum": 1, + }, + "original": bson.M{ + "$push": "$$ROOT", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": "$$ROOT", + }, + }, + bson.M{ + "$project": bson.M{ + "_id": 0, + "count": 0, + "dates.original": 0, + }, + }, + bson.M{ + "$group": bson.M{ + "_id": nil, + "count": bson.M{ + "$sum": 1, + }, + "dates": bson.M{ + "$push": "$dates", + }, + "original": bson.M{ + "$push": "$original", + }, + }, + }, + bson.M{ + "$unwind": "$original", + }, + bson.M{ + "$unwind": "$original", + }, + bson.M{ + "$group": bson.M{ + "_id": "$original.result.user_id", + "count": bson.M{ + "$sum": 1, + }, + "original": bson.M{ + "$push": "$dates", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": bson.M{ + "$arrayElemAt": bson.A{"$original", 0}, + }, + }, + }, + bson.M{ + "$project": bson.M{ + "original": 0, + }, + }, + bson.M{ + "$sort": bson.M{ + "count": sort, + }, + }, + bson.M{ + "$group": bson.M{ + "_id": nil, + "user_count": bson.M{ + "$sum": 1, + }, + "users": bson.M{ + "$push": "$$ROOT", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": bson.M{ + "$arrayElemAt": bson.A{"$users", 0}, + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": "$dates.dates", + }, + }, + bson.M{ + "$project": bson.M{ + "_id": 0, + "users.dates": 0, + }, + }, + bson.M{ + "$addFields": bson.M{ + "msg_count": bson.M{ + "$sum": "$users.count", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "users": bson.M{ + "$slice": bson.A{"$users", pageNumber - 1, showNumber}, + }, + }, + }, + } + cur, err := m.MsgCollection.Aggregate(ctx, pipeline, options.Aggregate().SetAllowDiskUse(true)) + if err != nil { + return 0, 0, nil, nil, errs.Wrap(err) + } + defer cur.Close(ctx) + var result []Result + if err := cur.All(ctx, &result); err != nil { + return 0, 0, nil, nil, errs.Wrap(err) + } + if len(result) == 0 { + return 0, 0, nil, nil, errs.Wrap(err) + } + users = make([]*table.UserCount, len(result[0].Users)) + for i, r := range result[0].Users { + users[i] = &table.UserCount{ + UserID: r.UserID, + Count: r.Count, + } + } + dateCount = make(map[string]int64) + for _, r := range result[0].Dates { + dateCount[r.Date] = r.Count + } + return result[0].MsgCount, result[0].UserCount, users, dateCount, nil +} + +func (m *MsgMongoDriver) RangeGroupSendCount(ctx context.Context, start time.Time, end time.Time, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, groups []*table.GroupCount, dateCount map[string]int64, err error) { + var sort int + if ase { + sort = 1 + } else { + sort = -1 + } + type Result struct { + MsgCount int64 `bson:"msg_count"` + UserCount int64 `bson:"user_count"` + Groups []struct { + GroupID string `bson:"_id"` + Count int64 `bson:"count"` + } `bson:"groups"` + Dates []struct { + Date string `bson:"_id"` + Count int64 `bson:"count"` + } `bson:"dates"` + } + pipeline := bson.A{ + bson.M{ + "$match": bson.M{ + "$and": bson.A{ + bson.M{ + "msgs.msg.send_time": bson.M{ + "$gte": start.UnixMilli(), + "$lt": end.UnixMilli(), + }, + }, + bson.M{ + "$or": bson.A{ + bson.M{ + "doc_id": bson.M{ + "$regex": "^g_", + "$options": "i", + }, + }, + bson.M{ + "doc_id": bson.M{ + "$regex": "^sg_", + "$options": "i", + }, + }, + }, + }, + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "msgs": bson.M{ + "$filter": bson.M{ + "input": "$msgs", + "as": "item", + "cond": bson.M{ + "$and": bson.A{ + bson.M{ + "$gte": bson.A{ + "$$item.msg.send_time", start.UnixMilli(), + }, + }, + bson.M{ + "$lt": bson.A{ + "$$item.msg.send_time", end.UnixMilli(), + }, + }, + }, + }, + }, + }, + }, + }, + bson.M{ + "$project": bson.M{ + "_id": 0, + }, + }, + bson.M{ + "$project": bson.M{ + "result": bson.M{ + "$map": bson.M{ + "input": "$msgs", + "as": "item", + "in": bson.M{ + "group_id": "$$item.msg.group_id", + "send_date": bson.M{ + "$dateToString": bson.M{ + "format": "%Y-%m-%d", + "date": bson.M{ + "$toDate": "$$item.msg.send_time", // 毫秒时间戳 + }, + }, + }, + }, + }, + }, + }, + }, + bson.M{ + "$unwind": "$result", + }, + bson.M{ + "$group": bson.M{ + "_id": "$result.send_date", + "count": bson.M{ + "$sum": 1, + }, + "original": bson.M{ + "$push": "$$ROOT", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": "$$ROOT", + }, + }, + bson.M{ + "$project": bson.M{ + "_id": 0, + "count": 0, + "dates.original": 0, + }, + }, + bson.M{ + "$group": bson.M{ + "_id": nil, + "count": bson.M{ + "$sum": 1, + }, + "dates": bson.M{ + "$push": "$dates", + }, + "original": bson.M{ + "$push": "$original", + }, + }, + }, + bson.M{ + "$unwind": "$original", + }, + bson.M{ + "$unwind": "$original", + }, + bson.M{ + "$group": bson.M{ + "_id": "$original.result.group_id", + "count": bson.M{ + "$sum": 1, + }, + "original": bson.M{ + "$push": "$dates", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": bson.M{ + "$arrayElemAt": bson.A{"$original", 0}, + }, + }, + }, + bson.M{ + "$project": bson.M{ + "original": 0, + }, + }, + bson.M{ + "$sort": bson.M{ + "count": sort, + }, + }, + bson.M{ + "$group": bson.M{ + "_id": nil, + "user_count": bson.M{ + "$sum": 1, + }, + "groups": bson.M{ + "$push": "$$ROOT", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": bson.M{ + "$arrayElemAt": bson.A{"$groups", 0}, + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "dates": "$dates.dates", + }, + }, + bson.M{ + "$project": bson.M{ + "_id": 0, + "groups.dates": 0, + }, + }, + bson.M{ + "$addFields": bson.M{ + "msg_count": bson.M{ + "$sum": "$groups.count", + }, + }, + }, + bson.M{ + "$addFields": bson.M{ + "groups": bson.M{ + "$slice": bson.A{"$groups", pageNumber - 1, showNumber}, + }, + }, + }, + } + cur, err := m.MsgCollection.Aggregate(ctx, pipeline, options.Aggregate().SetAllowDiskUse(true)) + if err != nil { + return 0, 0, nil, nil, errs.Wrap(err) + } + defer cur.Close(ctx) + var result []Result + if err := cur.All(ctx, &result); err != nil { + return 0, 0, nil, nil, errs.Wrap(err) + } + if len(result) == 0 { + return 0, 0, nil, nil, errs.Wrap(err) + } + groups = make([]*table.GroupCount, len(result[0].Groups)) + for i, r := range result[0].Groups { + groups[i] = &table.GroupCount{ + GroupID: r.GroupID, + Count: r.Count, + } + } + dateCount = make(map[string]int64) + for _, r := range result[0].Dates { + dateCount[r.Date] = r.Count + } + return result[0].MsgCount, result[0].UserCount, groups, dateCount, nil +} diff --git a/pkg/common/log/sql_logger.go b/pkg/common/log/sql_logger.go index 40b483474..9e9bb1be6 100644 --- a/pkg/common/log/sql_logger.go +++ b/pkg/common/log/sql_logger.go @@ -1,17 +1,3 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package log import ( @@ -31,11 +17,7 @@ type SqlLogger struct { SlowThreshold time.Duration } -func NewSqlLogger( - logLevel gormLogger.LogLevel, - ignoreRecordNotFoundError bool, - slowThreshold time.Duration, -) *SqlLogger { +func NewSqlLogger(logLevel gormLogger.LogLevel, ignoreRecordNotFoundError bool, slowThreshold time.Duration) *SqlLogger { return &SqlLogger{ LogLevel: logLevel, IgnoreRecordNotFoundError: ignoreRecordNotFoundError, @@ -70,17 +52,7 @@ func (l *SqlLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql s case err != nil && l.LogLevel >= gormLogger.Error && (!errors.Is(err, gorm.ErrRecordNotFound) || !l.IgnoreRecordNotFoundError): sql, rows := fc() if rows == -1 { - ZError( - ctx, - "sql exec detail", - err, - "gorm", - gormUtils.FileWithLineNum(), - "elapsed time", - fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), - "sql", - sql, - ) + ZError(ctx, "sql exec detail", err, "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "sql", sql) } else { ZError(ctx, "sql exec detail", err, "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "rows", rows, "sql", sql) } @@ -88,36 +60,14 @@ func (l *SqlLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql s sql, rows := fc() slowLog := fmt.Sprintf("SLOW SQL >= %v", l.SlowThreshold) if rows == -1 { - ZWarn( - ctx, - "sql exec detail", - nil, - "gorm", - gormUtils.FileWithLineNum(), - nil, - "slow sql", - slowLog, - "elapsed time", - fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), - "sql", - sql, - ) + ZWarn(ctx, "sql exec detail", nil, "gorm", gormUtils.FileWithLineNum(), "slow sql", slowLog, "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "sql", sql) } else { - ZWarn(ctx, "sql exec detail", nil, "gorm", gormUtils.FileWithLineNum(), nil, "slow sql", slowLog, "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "rows", rows, "sql", sql) + ZWarn(ctx, "sql exec detail", nil, "gorm", gormUtils.FileWithLineNum(), "slow sql", slowLog, "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "rows", rows, "sql", sql) } case l.LogLevel == gormLogger.Info: sql, rows := fc() if rows == -1 { - ZDebug( - ctx, - "sql exec detail", - "gorm", - gormUtils.FileWithLineNum(), - "elapsed time", - fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), - "sql", - sql, - ) + ZDebug(ctx, "sql exec detail", "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "sql", sql) } else { ZDebug(ctx, "sql exec detail", "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "rows", rows, "sql", sql) } diff --git a/pkg/common/mw/rpc_client_interceptor.go b/pkg/common/mw/rpc_client_interceptor.go index 40933810c..ebfcda99d 100644 --- a/pkg/common/mw/rpc_client_interceptor.go +++ b/pkg/common/mw/rpc_client_interceptor.go @@ -31,7 +31,7 @@ import ( ) func GrpcClient() grpc.DialOption { - return grpc.WithUnaryInterceptor(RpcClientInterceptor) + return grpc.WithChainUnaryInterceptor(RpcClientInterceptor) } func RpcClientInterceptor( diff --git a/pkg/common/mw/rpc_server_interceptor.go b/pkg/common/mw/rpc_server_interceptor.go index 01eb77b89..da99275fd 100644 --- a/pkg/common/mw/rpc_server_interceptor.go +++ b/pkg/common/mw/rpc_server_interceptor.go @@ -52,7 +52,6 @@ func RpcServerInterceptor( handler grpc.UnaryHandler, ) (resp interface{}, err error) { log.ZDebug(ctx, "rpc server req", "req", rpcString(req)) - //defer func() { // if r := recover(); r != nil { // log.ZError(ctx, "rpc panic", nil, "FullMethod", info.FullMethod, "type:", fmt.Sprintf("%T", r), "panic:", r) @@ -177,12 +176,13 @@ func RpcServerInterceptor( } details, err := grpcStatus.WithDetails(errInfo) if err != nil { - panic(err) + log.ZWarn(ctx, "rpc server resp WithDetails error", err, "funcName", funcName) + return nil, errs.Wrap(err) } log.ZWarn(ctx, "rpc server resp", err, "funcName", funcName) return nil, details.Err() } func GrpcServer() grpc.ServerOption { - return grpc.UnaryInterceptor(RpcServerInterceptor) + return grpc.ChainUnaryInterceptor(RpcServerInterceptor) } diff --git a/pkg/common/tokenverify/jwt_token.go b/pkg/common/tokenverify/jwt_token.go index 30e9ac9d1..68fee2602 100644 --- a/pkg/common/tokenverify/jwt_token.go +++ b/pkg/common/tokenverify/jwt_token.go @@ -84,7 +84,7 @@ func CheckAccessV3(ctx context.Context, ownerUserID string) (err error) { if opUserID == ownerUserID { return nil } - return errs.ErrIdentity.Wrap(utils.GetSelfFuncName()) + return errs.ErrNoPermission.Wrap(utils.GetSelfFuncName()) } func IsAppManagerUid(ctx context.Context) bool { @@ -95,7 +95,7 @@ func CheckAdmin(ctx context.Context) error { if utils.IsContain(mcontext.GetOpUserID(ctx), config.Config.Manager.UserID) { return nil } - return errs.ErrIdentity.Wrap(fmt.Sprintf("user %s is not admin userID", mcontext.GetOpUserID(ctx))) + return errs.ErrNoPermission.Wrap(fmt.Sprintf("user %s is not admin userID", mcontext.GetOpUserID(ctx))) } func ParseRedisInterfaceToken(redisToken interface{}) (*Claims, error) { diff --git a/pkg/discoveryregistry/discovery_register.go b/pkg/discoveryregistry/discovery_register.go index 50e720f97..4ebabe7a8 100644 --- a/pkg/discoveryregistry/discovery_register.go +++ b/pkg/discoveryregistry/discovery_register.go @@ -18,7 +18,6 @@ import ( "context" "google.golang.org/grpc" - "google.golang.org/grpc/resolver" ) type Conn interface { @@ -27,7 +26,7 @@ type Conn interface { AddOption(opts ...grpc.DialOption) CloseConn(conn grpc.ClientConnInterface) // do not use this method for call rpc - GetClientLocalConns() map[string][]resolver.Address + GetClientLocalConns() map[string][]grpc.ClientConnInterface } type SvcDiscoveryRegistry interface { diff --git a/pkg/discoveryregistry/zookeeper/discover.go b/pkg/discoveryregistry/zookeeper/discover.go index 3966d315c..a9848ee32 100644 --- a/pkg/discoveryregistry/zookeeper/discover.go +++ b/pkg/discoveryregistry/zookeeper/discover.go @@ -1,17 +1,3 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package zookeeper import ( @@ -20,9 +6,9 @@ import ( "io" "strings" - "github.com/pkg/errors" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" + "github.com/pkg/errors" "github.com/go-zookeeper/zk" "google.golang.org/grpc" @@ -76,64 +62,44 @@ func (s *ZkClient) GetConnsRemote(serviceName string) (conns []resolver.Address, } return nil, errors.Wrap(err, "get children error") } - log.ZDebug(context.Background(), "get conns from remote", "conn", string(data)) + log.ZDebug(context.Background(), "get addrs from remote", "conn", string(data)) conns = append(conns, resolver.Address{Addr: string(data), ServerName: serviceName}) } } return conns, nil } -func (s *ZkClient) GetConns( - ctx context.Context, - serviceName string, - opts ...grpc.DialOption, -) ([]grpc.ClientConnInterface, error) { +func (s *ZkClient) GetConns(ctx context.Context, serviceName string, opts ...grpc.DialOption) ([]grpc.ClientConnInterface, error) { s.logger.Printf("get conns from client, serviceName: %s", serviceName) - s.lock.Lock() opts = append(s.options, opts...) + s.lock.Lock() + defer s.lock.Unlock() conns := s.localConns[serviceName] if len(conns) == 0 { var err error s.logger.Printf("get conns from zk remote, serviceName: %s", serviceName) - conns, err = s.GetConnsRemote(serviceName) + addrs, err := s.GetConnsRemote(serviceName) if err != nil { - s.lock.Unlock() return nil, err } - if len(conns) == 0 { - return nil, fmt.Errorf( - "no conn for service %s, grpc server may not exist, local conn is %v, please check zookeeper server %v, path: %s", - serviceName, - s.localConns, - s.zkServers, - s.zkRoot, - ) + if len(addrs) == 0 { + return nil, fmt.Errorf("no conn for service %s, grpc server may not exist, local conn is %v, please check zookeeper server %v, path: %s", serviceName, s.localConns, s.zkServers, s.zkRoot) + } + for _, addr := range addrs { + cc, err := grpc.DialContext(ctx, addr.Addr, append(s.options, opts...)...) + if err != nil { + log.ZError(context.Background(), "dialContext failed", err, "addr", addr.Addr, "opts", append(s.options, opts...)) + return nil, errs.Wrap(err) + } + conns = append(conns, cc) } s.localConns[serviceName] = conns } - s.lock.Unlock() - var ret []grpc.ClientConnInterface - s.logger.Printf("get conns from zk success, serviceName: %s", serviceName) - for _, conn := range conns { - cc, err := grpc.DialContext(ctx, conn.Addr, append(s.options, opts...)...) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("conns dialContext error, conn: %s", conn.Addr)) - } - ret = append(ret, cc) - } - s.logger.Printf("dial ctx success, serviceName: %s", serviceName) - return ret, nil + return conns, nil } -func (s *ZkClient) GetConn( - ctx context.Context, - serviceName string, - opts ...grpc.DialOption, -) (grpc.ClientConnInterface, error) { - newOpts := append( - s.options, - grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, s.balancerName)), - ) +func (s *ZkClient) GetConn(ctx context.Context, serviceName string, opts ...grpc.DialOption) (grpc.ClientConnInterface, error) { + newOpts := append(s.options, grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, s.balancerName))) s.logger.Printf("get conn from client, serviceName: %s", serviceName) return grpc.DialContext(ctx, fmt.Sprintf("%s:///%s", s.scheme, serviceName), append(newOpts, opts...)...) } diff --git a/pkg/discoveryregistry/zookeeper/register.go b/pkg/discoveryregistry/zookeeper/register.go index 1531980bb..fec72538d 100644 --- a/pkg/discoveryregistry/zookeeper/register.go +++ b/pkg/discoveryregistry/zookeeper/register.go @@ -19,7 +19,6 @@ import ( "github.com/go-zookeeper/zk" "google.golang.org/grpc" - "google.golang.org/grpc/resolver" ) func (s *ZkClient) CreateRpcRootNodes(serviceNames []string) error { @@ -61,7 +60,7 @@ func (s *ZkClient) UnRegister() error { } time.Sleep(time.Second) s.node = "" - s.localConns = make(map[string][]resolver.Address) + s.localConns = make(map[string][]grpc.ClientConnInterface) s.resolvers = make(map[string]*Resolver) return nil } diff --git a/pkg/discoveryregistry/zookeeper/zk.go b/pkg/discoveryregistry/zookeeper/zk.go index b9b68c528..a3b02b12e 100644 --- a/pkg/discoveryregistry/zookeeper/zk.go +++ b/pkg/discoveryregistry/zookeeper/zk.go @@ -51,8 +51,9 @@ type ZkClient struct { lock sync.Locker options []grpc.DialOption - resolvers map[string]*Resolver - localConns map[string][]resolver.Address + resolvers map[string]*Resolver + localConns map[string][]grpc.ClientConnInterface + balancerName string logger Logger @@ -103,7 +104,7 @@ func NewClient(zkServers []string, zkRoot string, options ...ZkOption) (*ZkClien zkRoot: "/", scheme: zkRoot, timeout: timeout, - localConns: make(map[string][]resolver.Address), + localConns: make(map[string][]grpc.ClientConnInterface), resolvers: make(map[string]*Resolver), lock: &sync.Mutex{}, } @@ -216,6 +217,6 @@ func (s *ZkClient) AddOption(opts ...grpc.DialOption) { s.options = append(s.options, opts...) } -func (s *ZkClient) GetClientLocalConns() map[string][]resolver.Address { +func (s *ZkClient) GetClientLocalConns() map[string][]grpc.ClientConnInterface { return s.localConns } diff --git a/pkg/errs/code.go b/pkg/errs/code.go index b153e4e40..3cd66611d 100644 --- a/pkg/errs/code.go +++ b/pkg/errs/code.go @@ -36,17 +36,12 @@ const ( // 通用错误码 const ( - NoError = 0 //无错误 - DatabaseError = 90002 //redis/mysql等db错误 - NetworkError = 90004 //网络错误 - IdentityError = 90008 // 身份错误 非管理员token,且token中userID与请求userID不一致 - GRPCConnIsNil = 90006 //grpc连接空 - DefaultOtherError = 90006 //其他错误 - DataError = 90007 //数据错误 - ConfigError = 90009 - CallbackError = 80000 - RelationshipAlreadyError = 92001 //已经是好友关系(或者黑名单) - NotRelationshipYetError = 92002 //不是好友关系(或者黑名单) + NoError = 0 //无错误 + DatabaseError = 90002 //redis/mysql等db错误 + NetworkError = 90004 //网络错误 + DataError = 90007 //数据错误 + + CallbackError = 80000 //通用错误码 ServerInternalError = 500 //服务器内部错误 @@ -57,50 +52,41 @@ const ( // 账号错误码 UserIDNotFoundError = 1101 //UserID不存在 或未注册 - UserIDExisted = 1102 //UserID已存在 - RegisteredAlreadyError = 1103 //用户已经注册过了 + RegisteredAlreadyError = 1102 //用户已经注册过了 // 群组错误码 - GroupIDNotFoundError = 1201 //GroupID不存在 - GroupIDExisted = 1202 //GroupID已存在 - OnlyOneOwnerError = 1203 //只能有一个群主 - InGroupAlreadyError = 1204 //已在群组中 - NotInGroupYetError = 1205 //不在群组中 - DismissedAlreadyError = 1206 //群组已经解散 - OwnerNotAllowedQuitError = 1207 //群主不能退群 - GroupTypeNotSupport = 1208 - GroupNoOwner = 1209 - GroupRequestHandled = 1210 + GroupIDNotFoundError = 1201 //GroupID不存在 + GroupIDExisted = 1202 //GroupID已存在 + NotInGroupYetError = 1203 //不在群组中 + DismissedAlreadyError = 1204 //群组已经解散 + GroupTypeNotSupport = 1205 + GroupRequestHandled = 1206 // 关系链错误码 - CanNotAddYourselfError = 1301 //不能添加自己为好友 - BlockedByPeer = 1302 //被对方拉黑 - NotPeersFriend = 1303 //不是对方的好友 + CanNotAddYourselfError = 1301 //不能添加自己为好友 + BlockedByPeer = 1302 //被对方拉黑 + NotPeersFriend = 1303 //不是对方的好友 + RelationshipAlreadyError = 1304 //已经是好友关系 // 消息错误码 MessageHasReadDisable = 1401 MutedInGroup = 1402 //群成员被禁言 MutedGroup = 1403 //群被禁言 - UserNotRecvMsg = 1404 //用户设置了不接收消息 - MsgAlreadyRevoke = 1405 //消息已撤回 + MsgAlreadyRevoke = 1404 //消息已撤回 // token错误码 - TokenExpiredError = 1501 - TokenInvalidError = 1502 - TokenMalformedError = 1503 - TokenNotValidYetError = 1504 - TokenUnknownError = 1505 - TokenKickedError = 1506 - TokenDifferentPlatformIDError = 1507 - TokenDifferentUserIDError = 1508 - TokenNotExistError = 1509 + TokenExpiredError = 1501 + TokenInvalidError = 1502 + TokenMalformedError = 1503 + TokenNotValidYetError = 1504 + TokenUnknownError = 1505 + TokenKickedError = 1506 + TokenNotExistError = 1507 // 长连接网关错误码 ConnOverMaxNumLimit = 1601 ConnArgsErr = 1602 - ConnUpdateErr = 1603 // S3错误码 - FileUploadedCompleteError = 1701 // 文件已上传 - FileUploadedExpiredError = 1702 // 上传过期 + FileUploadedExpiredError = 1701 // 上传过期 ) diff --git a/pkg/errs/predefine.go b/pkg/errs/predefine.go index 4890a0996..16525420c 100644 --- a/pkg/errs/predefine.go +++ b/pkg/errs/predefine.go @@ -16,66 +16,49 @@ package errs var ( ErrArgs = NewCodeError(ArgsError, "ArgsError") + ErrNoPermission = NewCodeError(NoPermissionError, "NoPermissionError") ErrDatabase = NewCodeError(DatabaseError, "DatabaseError") ErrInternalServer = NewCodeError(ServerInternalError, "ServerInternalError") ErrNetwork = NewCodeError(NetworkError, "NetworkError") - ErrNoPermission = NewCodeError(NoPermissionError, "NoPermissionError") - ErrIdentity = NewCodeError(IdentityError, "IdentityError") ErrCallback = NewCodeError(CallbackError, "CallbackError") ErrCallbackContinue = NewCodeError(CallbackError, "ErrCallbackContinue") ErrUserIDNotFound = NewCodeError(UserIDNotFoundError, "UserIDNotFoundError") ErrGroupIDNotFound = NewCodeError(GroupIDNotFoundError, "GroupIDNotFoundError") ErrGroupIDExisted = NewCodeError(GroupIDExisted, "GroupIDExisted") - ErrUserIDExisted = NewCodeError(UserIDExisted, "UserIDExisted") ErrRecordNotFound = NewCodeError(RecordNotFoundError, "RecordNotFoundError") - ErrRelationshipAlready = NewCodeError(RelationshipAlreadyError, "RelationshipAlreadyError") - ErrNotRelationshipYet = NewCodeError(NotRelationshipYetError, "NotRelationshipYetError") - ErrCanNotAddYourself = NewCodeError(CanNotAddYourselfError, "CanNotAddYourselfError") - - ErrOnlyOneOwner = NewCodeError(OnlyOneOwnerError, "OnlyOneOwnerError") - ErrInGroupAlready = NewCodeError(InGroupAlreadyError, "InGroupAlreadyError") ErrNotInGroupYet = NewCodeError(NotInGroupYetError, "NotInGroupYetError") ErrDismissedAlready = NewCodeError(DismissedAlreadyError, "DismissedAlreadyError") - ErrOwnerNotAllowedQuit = NewCodeError(OwnerNotAllowedQuitError, "OwnerNotAllowedQuitError") ErrRegisteredAlready = NewCodeError(RegisteredAlreadyError, "RegisteredAlreadyError") ErrGroupTypeNotSupport = NewCodeError(GroupTypeNotSupport, "") - ErrGroupNoOwner = NewCodeError(GroupNoOwner, "ErrGroupNoOwner") + ErrGroupRequestHandled = NewCodeError(GroupRequestHandled, "GroupRequestHandled") - ErrDefaultOther = NewCodeError(DefaultOtherError, "DefaultOtherError") - ErrData = NewCodeError(DataError, "DataError") - ErrTokenExpired = NewCodeError(TokenExpiredError, "TokenExpiredError") - ErrTokenInvalid = NewCodeError(TokenInvalidError, "TokenInvalidError") // - ErrTokenMalformed = NewCodeError(TokenMalformedError, "TokenMalformedError") //格式错误 - ErrTokenNotValidYet = NewCodeError(TokenNotValidYetError, "TokenNotValidYetError") //还未生效 - ErrTokenUnknown = NewCodeError(TokenUnknownError, "TokenUnknownError") //未知错误 - ErrTokenKicked = NewCodeError(TokenKickedError, "TokenKickedError") - ErrTokenNotExist = NewCodeError(TokenNotExistError, "TokenNotExistError") //在redis中不存在 - ErrTokenDifferentPlatformID = NewCodeError(TokenDifferentPlatformIDError, "TokenDifferentPlatformIDError") - ErrTokenDifferentUserID = NewCodeError(TokenDifferentUserIDError, "TokenDifferentUserIDError") - ErrDuplicateKey = NewCodeError(DuplicateKeyError, "DuplicateKeyError") + ErrData = NewCodeError(DataError, "DataError") + ErrTokenExpired = NewCodeError(TokenExpiredError, "TokenExpiredError") + ErrTokenInvalid = NewCodeError(TokenInvalidError, "TokenInvalidError") // + ErrTokenMalformed = NewCodeError(TokenMalformedError, "TokenMalformedError") //格式错误 + ErrTokenNotValidYet = NewCodeError(TokenNotValidYetError, "TokenNotValidYetError") //还未生效 + ErrTokenUnknown = NewCodeError(TokenUnknownError, "TokenUnknownError") //未知错误 + ErrTokenKicked = NewCodeError(TokenKickedError, "TokenKickedError") + ErrTokenNotExist = NewCodeError(TokenNotExistError, "TokenNotExistError") //在redis中不存在 + ErrDuplicateKey = NewCodeError(DuplicateKeyError, "DuplicateKeyError") ErrMessageHasReadDisable = NewCodeError(MessageHasReadDisable, "MessageHasReadDisable") - ErrBlockedByPeer = NewCodeError(BlockedByPeer, "BlockedByPeer") - //不是对方的好友 - ErrNotPeersFriend = NewCodeError(NotPeersFriend, "NotPeersFriend") + ErrCanNotAddYourself = NewCodeError(CanNotAddYourselfError, "CanNotAddYourselfError") + ErrBlockedByPeer = NewCodeError(BlockedByPeer, "BlockedByPeer") + ErrNotPeersFriend = NewCodeError(NotPeersFriend, "NotPeersFriend") + ErrRelationshipAlready = NewCodeError(RelationshipAlreadyError, "RelationshipAlreadyError") ErrMutedInGroup = NewCodeError(MutedInGroup, "MutedInGroup") ErrMutedGroup = NewCodeError(MutedGroup, "MutedGroup") - ErrUserNotRecvMsg = NewCodeError(UserNotRecvMsg, "UserNotRecvMsg") ErrMsgAlreadyRevoke = NewCodeError(MsgAlreadyRevoke, "MsgAlreadyRevoke") ErrConnOverMaxNumLimit = NewCodeError(ConnOverMaxNumLimit, "ConnOverMaxNumLimit") - ErrConnArgsErr = NewCodeError(ConnArgsErr, "args err, need token, sendID, platformID") - ErrConnUpdateErr = NewCodeError(ConnArgsErr, "upgrade http conn err") + ErrConnArgsErr = NewCodeError(ConnArgsErr, "args err, need token, sendID, platformID") - ErrConfig = NewCodeError(ConfigError, "ConfigError") - - ErrFileUploadedComplete = NewCodeError(FileUploadedCompleteError, "FileUploadedComplete") - ErrFileUploadedExpired = NewCodeError(FileUploadedExpiredError, "FileUploadedExpiredError") - ErrGroupRequestHandled = NewCodeError(GroupRequestHandled, "GroupRequestHandled") + ErrFileUploadedExpired = NewCodeError(FileUploadedExpiredError, "FileUploadedExpiredError") ) diff --git a/pkg/errs/relation.go b/pkg/errs/relation.go index 76578f4bb..0a7ad4997 100644 --- a/pkg/errs/relation.go +++ b/pkg/errs/relation.go @@ -19,7 +19,6 @@ var Relation = &relation{m: make(map[int]map[int]struct{})} func init() { Relation.Add(RecordNotFoundError, UserIDNotFoundError) Relation.Add(RecordNotFoundError, GroupIDNotFoundError) - Relation.Add(DuplicateKeyError, UserIDExisted) Relation.Add(DuplicateKeyError, GroupIDExisted) } diff --git a/pkg/proto/conversation/conversation.pb.go b/pkg/proto/conversation/conversation.pb.go index debced9b9..7ec352420 100644 --- a/pkg/proto/conversation/conversation.pb.go +++ b/pkg/proto/conversation/conversation.pb.go @@ -32,20 +32,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() { @@ -178,6 +181,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 @@ -196,6 +220,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() { @@ -321,107 +347,20 @@ func (x *ConversationReq) GetGroupAtType() *wrapperspb.Int32Value { return nil } -type ModifyConversationFieldReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserIDList []string `protobuf:"bytes,1,rep,name=userIDList,proto3" json:"userIDList"` - FieldType int32 `protobuf:"varint,2,opt,name=FieldType,proto3" json:"FieldType"` - Conversation *Conversation `protobuf:"bytes,3,opt,name=conversation,proto3" json:"conversation"` -} - -func (x *ModifyConversationFieldReq) Reset() { - *x = ModifyConversationFieldReq{} - if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyConversationFieldReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyConversationFieldReq) ProtoMessage() {} - -func (x *ModifyConversationFieldReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[2] - 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 ModifyConversationFieldReq.ProtoReflect.Descriptor instead. -func (*ModifyConversationFieldReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{2} -} - -func (x *ModifyConversationFieldReq) GetUserIDList() []string { +func (x *ConversationReq) GetMsgDestructTime() *wrapperspb.Int64Value { if x != nil { - return x.UserIDList + return x.MsgDestructTime } return nil } -func (x *ModifyConversationFieldReq) GetFieldType() int32 { +func (x *ConversationReq) GetIsMsgDestruct() *wrapperspb.BoolValue { if x != nil { - return x.FieldType - } - return 0 -} - -func (x *ModifyConversationFieldReq) GetConversation() *Conversation { - if x != nil { - return x.Conversation + return x.IsMsgDestruct } return nil } -type ModifyConversationFieldResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ModifyConversationFieldResp) Reset() { - *x = ModifyConversationFieldResp{} - if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyConversationFieldResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyConversationFieldResp) ProtoMessage() {} - -func (x *ModifyConversationFieldResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_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 ModifyConversationFieldResp.ProtoReflect.Descriptor instead. -func (*ModifyConversationFieldResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{3} -} - type SetConversationReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -433,7 +372,7 @@ type SetConversationReq struct { func (x *SetConversationReq) Reset() { *x = SetConversationReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[4] + mi := &file_conversation_conversation_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -446,7 +385,7 @@ func (x *SetConversationReq) String() string { func (*SetConversationReq) ProtoMessage() {} func (x *SetConversationReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[4] + mi := &file_conversation_conversation_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -459,7 +398,7 @@ func (x *SetConversationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationReq.ProtoReflect.Descriptor instead. func (*SetConversationReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{4} + return file_conversation_conversation_proto_rawDescGZIP(), []int{2} } func (x *SetConversationReq) GetConversation() *Conversation { @@ -478,7 +417,7 @@ type SetConversationResp struct { func (x *SetConversationResp) Reset() { *x = SetConversationResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[5] + mi := &file_conversation_conversation_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -491,7 +430,7 @@ func (x *SetConversationResp) String() string { func (*SetConversationResp) ProtoMessage() {} func (x *SetConversationResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[5] + mi := &file_conversation_conversation_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -504,108 +443,7 @@ func (x *SetConversationResp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationResp.ProtoReflect.Descriptor instead. func (*SetConversationResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{5} -} - -type SetRecvMsgOptReq struct { - state protoimpl.MessageState - 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"` -} - -func (x *SetRecvMsgOptReq) Reset() { - *x = SetRecvMsgOptReq{} - if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetRecvMsgOptReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetRecvMsgOptReq) ProtoMessage() {} - -func (x *SetRecvMsgOptReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[6] - 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 SetRecvMsgOptReq.ProtoReflect.Descriptor instead. -func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{6} -} - -func (x *SetRecvMsgOptReq) GetOwnerUserID() string { - if x != nil { - return x.OwnerUserID - } - return "" -} - -func (x *SetRecvMsgOptReq) GetConversationID() string { - if x != nil { - return x.ConversationID - } - return "" -} - -func (x *SetRecvMsgOptReq) GetRecvMsgOpt() int32 { - if x != nil { - return x.RecvMsgOpt - } - return 0 -} - -type SetRecvMsgOptResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SetRecvMsgOptResp) Reset() { - *x = SetRecvMsgOptResp{} - if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetRecvMsgOptResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetRecvMsgOptResp) ProtoMessage() {} - -func (x *SetRecvMsgOptResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[7] - 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 SetRecvMsgOptResp.ProtoReflect.Descriptor instead. -func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{7} + return file_conversation_conversation_proto_rawDescGZIP(), []int{3} } type GetConversationReq struct { @@ -620,7 +458,7 @@ type GetConversationReq struct { func (x *GetConversationReq) Reset() { *x = GetConversationReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[8] + mi := &file_conversation_conversation_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -633,7 +471,7 @@ func (x *GetConversationReq) String() string { func (*GetConversationReq) ProtoMessage() {} func (x *GetConversationReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[8] + mi := &file_conversation_conversation_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -646,7 +484,7 @@ func (x *GetConversationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationReq.ProtoReflect.Descriptor instead. func (*GetConversationReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{8} + return file_conversation_conversation_proto_rawDescGZIP(), []int{4} } func (x *GetConversationReq) GetConversationID() string { @@ -674,7 +512,7 @@ type GetConversationResp struct { func (x *GetConversationResp) Reset() { *x = GetConversationResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[9] + mi := &file_conversation_conversation_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -687,7 +525,7 @@ func (x *GetConversationResp) String() string { func (*GetConversationResp) ProtoMessage() {} func (x *GetConversationResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[9] + mi := &file_conversation_conversation_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -700,7 +538,7 @@ func (x *GetConversationResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationResp.ProtoReflect.Descriptor instead. func (*GetConversationResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{9} + return file_conversation_conversation_proto_rawDescGZIP(), []int{5} } func (x *GetConversationResp) GetConversation() *Conversation { @@ -722,7 +560,7 @@ type GetConversationsReq struct { func (x *GetConversationsReq) Reset() { *x = GetConversationsReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[10] + mi := &file_conversation_conversation_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -735,7 +573,7 @@ func (x *GetConversationsReq) String() string { func (*GetConversationsReq) ProtoMessage() {} func (x *GetConversationsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[10] + mi := &file_conversation_conversation_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -748,7 +586,7 @@ func (x *GetConversationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationsReq.ProtoReflect.Descriptor instead. func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{10} + return file_conversation_conversation_proto_rawDescGZIP(), []int{6} } func (x *GetConversationsReq) GetOwnerUserID() string { @@ -776,7 +614,7 @@ type GetConversationsResp struct { func (x *GetConversationsResp) Reset() { *x = GetConversationsResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[11] + mi := &file_conversation_conversation_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -789,7 +627,7 @@ func (x *GetConversationsResp) String() string { func (*GetConversationsResp) ProtoMessage() {} func (x *GetConversationsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[11] + mi := &file_conversation_conversation_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -802,7 +640,7 @@ func (x *GetConversationsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationsResp.ProtoReflect.Descriptor instead. func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{11} + return file_conversation_conversation_proto_rawDescGZIP(), []int{7} } func (x *GetConversationsResp) GetConversations() []*Conversation { @@ -823,7 +661,7 @@ type GetAllConversationsReq struct { func (x *GetAllConversationsReq) Reset() { *x = GetAllConversationsReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[12] + mi := &file_conversation_conversation_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -836,7 +674,7 @@ func (x *GetAllConversationsReq) String() string { func (*GetAllConversationsReq) ProtoMessage() {} func (x *GetAllConversationsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[12] + mi := &file_conversation_conversation_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -849,7 +687,7 @@ func (x *GetAllConversationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAllConversationsReq.ProtoReflect.Descriptor instead. func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{12} + return file_conversation_conversation_proto_rawDescGZIP(), []int{8} } func (x *GetAllConversationsReq) GetOwnerUserID() string { @@ -870,7 +708,7 @@ type GetAllConversationsResp struct { func (x *GetAllConversationsResp) Reset() { *x = GetAllConversationsResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[13] + mi := &file_conversation_conversation_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -883,7 +721,7 @@ func (x *GetAllConversationsResp) String() string { func (*GetAllConversationsResp) ProtoMessage() {} func (x *GetAllConversationsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[13] + mi := &file_conversation_conversation_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -896,7 +734,7 @@ func (x *GetAllConversationsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAllConversationsResp.ProtoReflect.Descriptor instead. func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{13} + return file_conversation_conversation_proto_rawDescGZIP(), []int{9} } func (x *GetAllConversationsResp) GetConversations() []*Conversation { @@ -906,99 +744,6 @@ func (x *GetAllConversationsResp) GetConversations() []*Conversation { return nil } -type BatchSetConversationsReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Conversations []*Conversation `protobuf:"bytes,1,rep,name=conversations,proto3" json:"conversations"` - OwnerUserID string `protobuf:"bytes,2,opt,name=ownerUserID,proto3" json:"ownerUserID"` -} - -func (x *BatchSetConversationsReq) Reset() { - *x = BatchSetConversationsReq{} - if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BatchSetConversationsReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchSetConversationsReq) ProtoMessage() {} - -func (x *BatchSetConversationsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[14] - 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 BatchSetConversationsReq.ProtoReflect.Descriptor instead. -func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{14} -} - -func (x *BatchSetConversationsReq) GetConversations() []*Conversation { - if x != nil { - return x.Conversations - } - return nil -} - -func (x *BatchSetConversationsReq) GetOwnerUserID() string { - if x != nil { - return x.OwnerUserID - } - return "" -} - -type BatchSetConversationsResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *BatchSetConversationsResp) Reset() { - *x = BatchSetConversationsResp{} - if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BatchSetConversationsResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchSetConversationsResp) ProtoMessage() {} - -func (x *BatchSetConversationsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[15] - 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 BatchSetConversationsResp.ProtoReflect.Descriptor instead. -func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{15} -} - type GetRecvMsgNotNotifyUserIDsReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1010,7 +755,7 @@ type GetRecvMsgNotNotifyUserIDsReq struct { func (x *GetRecvMsgNotNotifyUserIDsReq) Reset() { *x = GetRecvMsgNotNotifyUserIDsReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[16] + mi := &file_conversation_conversation_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1023,7 +768,7 @@ func (x *GetRecvMsgNotNotifyUserIDsReq) String() string { func (*GetRecvMsgNotNotifyUserIDsReq) ProtoMessage() {} func (x *GetRecvMsgNotNotifyUserIDsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[16] + mi := &file_conversation_conversation_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1036,7 +781,7 @@ func (x *GetRecvMsgNotNotifyUserIDsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRecvMsgNotNotifyUserIDsReq.ProtoReflect.Descriptor instead. func (*GetRecvMsgNotNotifyUserIDsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{16} + return file_conversation_conversation_proto_rawDescGZIP(), []int{10} } func (x *GetRecvMsgNotNotifyUserIDsReq) GetGroupID() string { @@ -1057,7 +802,7 @@ type GetRecvMsgNotNotifyUserIDsResp struct { func (x *GetRecvMsgNotNotifyUserIDsResp) Reset() { *x = GetRecvMsgNotNotifyUserIDsResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[17] + mi := &file_conversation_conversation_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1070,7 +815,7 @@ func (x *GetRecvMsgNotNotifyUserIDsResp) String() string { func (*GetRecvMsgNotNotifyUserIDsResp) ProtoMessage() {} func (x *GetRecvMsgNotNotifyUserIDsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[17] + mi := &file_conversation_conversation_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1083,7 +828,7 @@ func (x *GetRecvMsgNotNotifyUserIDsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRecvMsgNotNotifyUserIDsResp.ProtoReflect.Descriptor instead. func (*GetRecvMsgNotNotifyUserIDsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{17} + return file_conversation_conversation_proto_rawDescGZIP(), []int{11} } func (x *GetRecvMsgNotNotifyUserIDsResp) GetUserIDs() []string { @@ -1105,7 +850,7 @@ type CreateSingleChatConversationsReq struct { func (x *CreateSingleChatConversationsReq) Reset() { *x = CreateSingleChatConversationsReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[18] + mi := &file_conversation_conversation_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1118,7 +863,7 @@ func (x *CreateSingleChatConversationsReq) String() string { func (*CreateSingleChatConversationsReq) ProtoMessage() {} func (x *CreateSingleChatConversationsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[18] + mi := &file_conversation_conversation_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1131,7 +876,7 @@ func (x *CreateSingleChatConversationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateSingleChatConversationsReq.ProtoReflect.Descriptor instead. func (*CreateSingleChatConversationsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{18} + return file_conversation_conversation_proto_rawDescGZIP(), []int{12} } func (x *CreateSingleChatConversationsReq) GetRecvID() string { @@ -1157,7 +902,7 @@ type CreateSingleChatConversationsResp struct { func (x *CreateSingleChatConversationsResp) Reset() { *x = CreateSingleChatConversationsResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[19] + mi := &file_conversation_conversation_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1170,7 +915,7 @@ func (x *CreateSingleChatConversationsResp) String() string { func (*CreateSingleChatConversationsResp) ProtoMessage() {} func (x *CreateSingleChatConversationsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[19] + mi := &file_conversation_conversation_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1183,7 +928,7 @@ func (x *CreateSingleChatConversationsResp) ProtoReflect() protoreflect.Message // Deprecated: Use CreateSingleChatConversationsResp.ProtoReflect.Descriptor instead. func (*CreateSingleChatConversationsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{19} + return file_conversation_conversation_proto_rawDescGZIP(), []int{13} } type CreateGroupChatConversationsReq struct { @@ -1198,7 +943,7 @@ type CreateGroupChatConversationsReq struct { func (x *CreateGroupChatConversationsReq) Reset() { *x = CreateGroupChatConversationsReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[20] + mi := &file_conversation_conversation_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1211,7 +956,7 @@ func (x *CreateGroupChatConversationsReq) String() string { func (*CreateGroupChatConversationsReq) ProtoMessage() {} func (x *CreateGroupChatConversationsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[20] + mi := &file_conversation_conversation_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1224,7 +969,7 @@ func (x *CreateGroupChatConversationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGroupChatConversationsReq.ProtoReflect.Descriptor instead. func (*CreateGroupChatConversationsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{20} + return file_conversation_conversation_proto_rawDescGZIP(), []int{14} } func (x *CreateGroupChatConversationsReq) GetUserIDs() []string { @@ -1250,7 +995,7 @@ type CreateGroupChatConversationsResp struct { func (x *CreateGroupChatConversationsResp) Reset() { *x = CreateGroupChatConversationsResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[21] + mi := &file_conversation_conversation_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1263,7 +1008,7 @@ func (x *CreateGroupChatConversationsResp) String() string { func (*CreateGroupChatConversationsResp) ProtoMessage() {} func (x *CreateGroupChatConversationsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[21] + mi := &file_conversation_conversation_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1276,7 +1021,7 @@ func (x *CreateGroupChatConversationsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGroupChatConversationsResp.ProtoReflect.Descriptor instead. func (*CreateGroupChatConversationsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{21} + return file_conversation_conversation_proto_rawDescGZIP(), []int{15} } type SetConversationMaxSeqReq struct { @@ -1292,7 +1037,7 @@ type SetConversationMaxSeqReq struct { func (x *SetConversationMaxSeqReq) Reset() { *x = SetConversationMaxSeqReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[22] + mi := &file_conversation_conversation_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1305,7 +1050,7 @@ func (x *SetConversationMaxSeqReq) String() string { func (*SetConversationMaxSeqReq) ProtoMessage() {} func (x *SetConversationMaxSeqReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[22] + mi := &file_conversation_conversation_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1318,7 +1063,7 @@ func (x *SetConversationMaxSeqReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationMaxSeqReq.ProtoReflect.Descriptor instead. func (*SetConversationMaxSeqReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{22} + return file_conversation_conversation_proto_rawDescGZIP(), []int{16} } func (x *SetConversationMaxSeqReq) GetConversationID() string { @@ -1351,7 +1096,7 @@ type SetConversationMaxSeqResp struct { func (x *SetConversationMaxSeqResp) Reset() { *x = SetConversationMaxSeqResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[23] + mi := &file_conversation_conversation_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1364,7 +1109,7 @@ func (x *SetConversationMaxSeqResp) String() string { func (*SetConversationMaxSeqResp) ProtoMessage() {} func (x *SetConversationMaxSeqResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[23] + mi := &file_conversation_conversation_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1377,7 +1122,7 @@ func (x *SetConversationMaxSeqResp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationMaxSeqResp.ProtoReflect.Descriptor instead. func (*SetConversationMaxSeqResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{23} + return file_conversation_conversation_proto_rawDescGZIP(), []int{17} } type GetConversationIDsReq struct { @@ -1391,7 +1136,7 @@ type GetConversationIDsReq struct { func (x *GetConversationIDsReq) Reset() { *x = GetConversationIDsReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[24] + mi := &file_conversation_conversation_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1404,7 +1149,7 @@ func (x *GetConversationIDsReq) String() string { func (*GetConversationIDsReq) ProtoMessage() {} func (x *GetConversationIDsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[24] + mi := &file_conversation_conversation_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1417,7 +1162,7 @@ func (x *GetConversationIDsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationIDsReq.ProtoReflect.Descriptor instead. func (*GetConversationIDsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{24} + return file_conversation_conversation_proto_rawDescGZIP(), []int{18} } func (x *GetConversationIDsReq) GetUserID() string { @@ -1438,7 +1183,7 @@ type GetConversationIDsResp struct { func (x *GetConversationIDsResp) Reset() { *x = GetConversationIDsResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[25] + mi := &file_conversation_conversation_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1451,7 +1196,7 @@ func (x *GetConversationIDsResp) String() string { func (*GetConversationIDsResp) ProtoMessage() {} func (x *GetConversationIDsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[25] + mi := &file_conversation_conversation_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1464,7 +1209,7 @@ func (x *GetConversationIDsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationIDsResp.ProtoReflect.Descriptor instead. func (*GetConversationIDsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{25} + return file_conversation_conversation_proto_rawDescGZIP(), []int{19} } func (x *GetConversationIDsResp) GetConversationIDs() []string { @@ -1486,7 +1231,7 @@ type SetConversationsReq struct { func (x *SetConversationsReq) Reset() { *x = SetConversationsReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[26] + mi := &file_conversation_conversation_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1499,7 +1244,7 @@ func (x *SetConversationsReq) String() string { func (*SetConversationsReq) ProtoMessage() {} func (x *SetConversationsReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[26] + mi := &file_conversation_conversation_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1512,7 +1257,7 @@ func (x *SetConversationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationsReq.ProtoReflect.Descriptor instead. func (*SetConversationsReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{26} + return file_conversation_conversation_proto_rawDescGZIP(), []int{20} } func (x *SetConversationsReq) GetUserIDs() []string { @@ -1538,7 +1283,7 @@ type SetConversationsResp struct { func (x *SetConversationsResp) Reset() { *x = SetConversationsResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[27] + mi := &file_conversation_conversation_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1551,7 +1296,7 @@ func (x *SetConversationsResp) String() string { func (*SetConversationsResp) ProtoMessage() {} func (x *SetConversationsResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[27] + mi := &file_conversation_conversation_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1564,7 +1309,7 @@ func (x *SetConversationsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationsResp.ProtoReflect.Descriptor instead. func (*SetConversationsResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{27} + return file_conversation_conversation_proto_rawDescGZIP(), []int{21} } type GetUserConversationIDsHashReq struct { @@ -1578,7 +1323,7 @@ type GetUserConversationIDsHashReq struct { func (x *GetUserConversationIDsHashReq) Reset() { *x = GetUserConversationIDsHashReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[28] + mi := &file_conversation_conversation_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1591,7 +1336,7 @@ func (x *GetUserConversationIDsHashReq) String() string { func (*GetUserConversationIDsHashReq) ProtoMessage() {} func (x *GetUserConversationIDsHashReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[28] + mi := &file_conversation_conversation_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1604,7 +1349,7 @@ func (x *GetUserConversationIDsHashReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserConversationIDsHashReq.ProtoReflect.Descriptor instead. func (*GetUserConversationIDsHashReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{28} + return file_conversation_conversation_proto_rawDescGZIP(), []int{22} } func (x *GetUserConversationIDsHashReq) GetOwnerUserID() string { @@ -1625,7 +1370,7 @@ type GetUserConversationIDsHashResp struct { func (x *GetUserConversationIDsHashResp) Reset() { *x = GetUserConversationIDsHashResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[29] + mi := &file_conversation_conversation_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1638,7 +1383,7 @@ func (x *GetUserConversationIDsHashResp) String() string { func (*GetUserConversationIDsHashResp) ProtoMessage() {} func (x *GetUserConversationIDsHashResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[29] + mi := &file_conversation_conversation_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1651,7 +1396,7 @@ func (x *GetUserConversationIDsHashResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserConversationIDsHashResp.ProtoReflect.Descriptor instead. func (*GetUserConversationIDsHashResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{29} + return file_conversation_conversation_proto_rawDescGZIP(), []int{23} } func (x *GetUserConversationIDsHashResp) GetHash() uint64 { @@ -1672,7 +1417,7 @@ type GetConversationsByConversationIDReq struct { func (x *GetConversationsByConversationIDReq) Reset() { *x = GetConversationsByConversationIDReq{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[30] + mi := &file_conversation_conversation_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1685,7 +1430,7 @@ func (x *GetConversationsByConversationIDReq) String() string { func (*GetConversationsByConversationIDReq) ProtoMessage() {} func (x *GetConversationsByConversationIDReq) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[30] + mi := &file_conversation_conversation_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1698,7 +1443,7 @@ func (x *GetConversationsByConversationIDReq) ProtoReflect() protoreflect.Messag // Deprecated: Use GetConversationsByConversationIDReq.ProtoReflect.Descriptor instead. func (*GetConversationsByConversationIDReq) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{30} + return file_conversation_conversation_proto_rawDescGZIP(), []int{24} } func (x *GetConversationsByConversationIDReq) GetConversationIDs() []string { @@ -1719,7 +1464,7 @@ type GetConversationsByConversationIDResp struct { func (x *GetConversationsByConversationIDResp) Reset() { *x = GetConversationsByConversationIDResp{} if protoimpl.UnsafeEnabled { - mi := &file_conversation_conversation_proto_msgTypes[31] + mi := &file_conversation_conversation_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1732,7 +1477,7 @@ func (x *GetConversationsByConversationIDResp) String() string { func (*GetConversationsByConversationIDResp) ProtoMessage() {} func (x *GetConversationsByConversationIDResp) ProtoReflect() protoreflect.Message { - mi := &file_conversation_conversation_proto_msgTypes[31] + mi := &file_conversation_conversation_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1745,7 +1490,7 @@ func (x *GetConversationsByConversationIDResp) ProtoReflect() protoreflect.Messa // Deprecated: Use GetConversationsByConversationIDResp.ProtoReflect.Descriptor instead. func (*GetConversationsByConversationIDResp) Descriptor() ([]byte, []int) { - return file_conversation_conversation_proto_rawDescGZIP(), []int{31} + return file_conversation_conversation_proto_rawDescGZIP(), []int{25} } func (x *GetConversationsByConversationIDResp) GetConversations() []*Conversation { @@ -1763,7 +1508,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, @@ -1791,328 +1536,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, - 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, - 0xa7, 0x01, 0x0a, 0x1a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x12, 0x1e, - 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4b, 0x0a, 0x0c, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 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, 0x1d, 0x0a, 0x1b, 0x4d, 0x6f, 0x64, - 0x69, 0x66, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 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, 0x7c, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, - 0x4f, 0x70, 0x74, 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, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 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, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, - 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, - 0x74, 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, 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, 0x8b, 0x01, 0x0a, 0x18, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 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, 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, 0x1b, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 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, + 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, 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, 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, - 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, + 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, 0x0d, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xdb, 0x0f, 0x0a, 0x0c, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x88, 0x01, 0x0a, 0x17, 0x4d, - 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x35, 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, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x36, 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, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x52, 0x65, 0x73, 0x70, 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, 0x82, 0x01, 0x0a, 0x15, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 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, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 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, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 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, 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, 0x6a, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, - 0x70, 0x74, 0x12, 0x2b, 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, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x2c, 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, 0x52, - 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 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, - 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, + 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, 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, 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, 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, + 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, 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, + 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, 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, + 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, 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, 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, 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, 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, } var ( @@ -2127,95 +1834,83 @@ func file_conversation_conversation_proto_rawDescGZIP() []byte { return file_conversation_conversation_proto_rawDescData } -var file_conversation_conversation_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_conversation_conversation_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_conversation_conversation_proto_goTypes = []interface{}{ (*Conversation)(nil), // 0: OpenIMServer.conversation.Conversation (*ConversationReq)(nil), // 1: OpenIMServer.conversation.ConversationReq - (*ModifyConversationFieldReq)(nil), // 2: OpenIMServer.conversation.ModifyConversationFieldReq - (*ModifyConversationFieldResp)(nil), // 3: OpenIMServer.conversation.ModifyConversationFieldResp - (*SetConversationReq)(nil), // 4: OpenIMServer.conversation.SetConversationReq - (*SetConversationResp)(nil), // 5: OpenIMServer.conversation.SetConversationResp - (*SetRecvMsgOptReq)(nil), // 6: OpenIMServer.conversation.SetRecvMsgOptReq - (*SetRecvMsgOptResp)(nil), // 7: OpenIMServer.conversation.SetRecvMsgOptResp - (*GetConversationReq)(nil), // 8: OpenIMServer.conversation.GetConversationReq - (*GetConversationResp)(nil), // 9: OpenIMServer.conversation.GetConversationResp - (*GetConversationsReq)(nil), // 10: OpenIMServer.conversation.GetConversationsReq - (*GetConversationsResp)(nil), // 11: OpenIMServer.conversation.GetConversationsResp - (*GetAllConversationsReq)(nil), // 12: OpenIMServer.conversation.GetAllConversationsReq - (*GetAllConversationsResp)(nil), // 13: OpenIMServer.conversation.GetAllConversationsResp - (*BatchSetConversationsReq)(nil), // 14: OpenIMServer.conversation.BatchSetConversationsReq - (*BatchSetConversationsResp)(nil), // 15: OpenIMServer.conversation.BatchSetConversationsResp - (*GetRecvMsgNotNotifyUserIDsReq)(nil), // 16: OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsReq - (*GetRecvMsgNotNotifyUserIDsResp)(nil), // 17: OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsResp - (*CreateSingleChatConversationsReq)(nil), // 18: OpenIMServer.conversation.CreateSingleChatConversationsReq - (*CreateSingleChatConversationsResp)(nil), // 19: OpenIMServer.conversation.CreateSingleChatConversationsResp - (*CreateGroupChatConversationsReq)(nil), // 20: OpenIMServer.conversation.CreateGroupChatConversationsReq - (*CreateGroupChatConversationsResp)(nil), // 21: OpenIMServer.conversation.CreateGroupChatConversationsResp - (*SetConversationMaxSeqReq)(nil), // 22: OpenIMServer.conversation.SetConversationMaxSeqReq - (*SetConversationMaxSeqResp)(nil), // 23: OpenIMServer.conversation.SetConversationMaxSeqResp - (*GetConversationIDsReq)(nil), // 24: OpenIMServer.conversation.GetConversationIDsReq - (*GetConversationIDsResp)(nil), // 25: OpenIMServer.conversation.GetConversationIDsResp - (*SetConversationsReq)(nil), // 26: OpenIMServer.conversation.SetConversationsReq - (*SetConversationsResp)(nil), // 27: OpenIMServer.conversation.SetConversationsResp - (*GetUserConversationIDsHashReq)(nil), // 28: OpenIMServer.conversation.GetUserConversationIDsHashReq - (*GetUserConversationIDsHashResp)(nil), // 29: OpenIMServer.conversation.GetUserConversationIDsHashResp - (*GetConversationsByConversationIDReq)(nil), // 30: OpenIMServer.conversation.GetConversationsByConversationIDReq - (*GetConversationsByConversationIDResp)(nil), // 31: OpenIMServer.conversation.GetConversationsByConversationIDResp - (*wrapperspb.Int32Value)(nil), // 32: OpenIMServer.protobuf.Int32Value - (*wrapperspb.BoolValue)(nil), // 33: OpenIMServer.protobuf.BoolValue - (*wrapperspb.StringValue)(nil), // 34: OpenIMServer.protobuf.StringValue - (*wrapperspb.Int64Value)(nil), // 35: OpenIMServer.protobuf.Int64Value + (*SetConversationReq)(nil), // 2: OpenIMServer.conversation.SetConversationReq + (*SetConversationResp)(nil), // 3: OpenIMServer.conversation.SetConversationResp + (*GetConversationReq)(nil), // 4: OpenIMServer.conversation.GetConversationReq + (*GetConversationResp)(nil), // 5: OpenIMServer.conversation.GetConversationResp + (*GetConversationsReq)(nil), // 6: OpenIMServer.conversation.GetConversationsReq + (*GetConversationsResp)(nil), // 7: OpenIMServer.conversation.GetConversationsResp + (*GetAllConversationsReq)(nil), // 8: OpenIMServer.conversation.GetAllConversationsReq + (*GetAllConversationsResp)(nil), // 9: OpenIMServer.conversation.GetAllConversationsResp + (*GetRecvMsgNotNotifyUserIDsReq)(nil), // 10: OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsReq + (*GetRecvMsgNotNotifyUserIDsResp)(nil), // 11: OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsResp + (*CreateSingleChatConversationsReq)(nil), // 12: OpenIMServer.conversation.CreateSingleChatConversationsReq + (*CreateSingleChatConversationsResp)(nil), // 13: OpenIMServer.conversation.CreateSingleChatConversationsResp + (*CreateGroupChatConversationsReq)(nil), // 14: OpenIMServer.conversation.CreateGroupChatConversationsReq + (*CreateGroupChatConversationsResp)(nil), // 15: OpenIMServer.conversation.CreateGroupChatConversationsResp + (*SetConversationMaxSeqReq)(nil), // 16: OpenIMServer.conversation.SetConversationMaxSeqReq + (*SetConversationMaxSeqResp)(nil), // 17: OpenIMServer.conversation.SetConversationMaxSeqResp + (*GetConversationIDsReq)(nil), // 18: OpenIMServer.conversation.GetConversationIDsReq + (*GetConversationIDsResp)(nil), // 19: OpenIMServer.conversation.GetConversationIDsResp + (*SetConversationsReq)(nil), // 20: OpenIMServer.conversation.SetConversationsReq + (*SetConversationsResp)(nil), // 21: OpenIMServer.conversation.SetConversationsResp + (*GetUserConversationIDsHashReq)(nil), // 22: OpenIMServer.conversation.GetUserConversationIDsHashReq + (*GetUserConversationIDsHashResp)(nil), // 23: OpenIMServer.conversation.GetUserConversationIDsHashResp + (*GetConversationsByConversationIDReq)(nil), // 24: OpenIMServer.conversation.GetConversationsByConversationIDReq + (*GetConversationsByConversationIDResp)(nil), // 25: OpenIMServer.conversation.GetConversationsByConversationIDResp + (*wrapperspb.Int32Value)(nil), // 26: OpenIMServer.protobuf.Int32Value + (*wrapperspb.BoolValue)(nil), // 27: OpenIMServer.protobuf.BoolValue + (*wrapperspb.StringValue)(nil), // 28: OpenIMServer.protobuf.StringValue + (*wrapperspb.Int64Value)(nil), // 29: OpenIMServer.protobuf.Int64Value } var file_conversation_conversation_proto_depIdxs = []int32{ - 32, // 0: OpenIMServer.conversation.ConversationReq.recvMsgOpt:type_name -> OpenIMServer.protobuf.Int32Value - 33, // 1: OpenIMServer.conversation.ConversationReq.isPinned:type_name -> OpenIMServer.protobuf.BoolValue - 34, // 2: OpenIMServer.conversation.ConversationReq.attachedInfo:type_name -> OpenIMServer.protobuf.StringValue - 33, // 3: OpenIMServer.conversation.ConversationReq.isPrivateChat:type_name -> OpenIMServer.protobuf.BoolValue - 34, // 4: OpenIMServer.conversation.ConversationReq.ex:type_name -> OpenIMServer.protobuf.StringValue - 32, // 5: OpenIMServer.conversation.ConversationReq.burnDuration:type_name -> OpenIMServer.protobuf.Int32Value - 35, // 6: OpenIMServer.conversation.ConversationReq.minSeq:type_name -> OpenIMServer.protobuf.Int64Value - 35, // 7: OpenIMServer.conversation.ConversationReq.maxSeq:type_name -> OpenIMServer.protobuf.Int64Value - 32, // 8: OpenIMServer.conversation.ConversationReq.groupAtType:type_name -> OpenIMServer.protobuf.Int32Value - 0, // 9: OpenIMServer.conversation.ModifyConversationFieldReq.conversation:type_name -> OpenIMServer.conversation.Conversation - 0, // 10: OpenIMServer.conversation.SetConversationReq.conversation:type_name -> OpenIMServer.conversation.Conversation - 0, // 11: OpenIMServer.conversation.GetConversationResp.conversation:type_name -> OpenIMServer.conversation.Conversation - 0, // 12: OpenIMServer.conversation.GetConversationsResp.conversations:type_name -> OpenIMServer.conversation.Conversation - 0, // 13: OpenIMServer.conversation.GetAllConversationsResp.conversations:type_name -> OpenIMServer.conversation.Conversation - 0, // 14: OpenIMServer.conversation.BatchSetConversationsReq.conversations:type_name -> OpenIMServer.conversation.Conversation + 26, // 0: OpenIMServer.conversation.ConversationReq.recvMsgOpt:type_name -> OpenIMServer.protobuf.Int32Value + 27, // 1: OpenIMServer.conversation.ConversationReq.isPinned:type_name -> OpenIMServer.protobuf.BoolValue + 28, // 2: OpenIMServer.conversation.ConversationReq.attachedInfo:type_name -> OpenIMServer.protobuf.StringValue + 27, // 3: OpenIMServer.conversation.ConversationReq.isPrivateChat:type_name -> OpenIMServer.protobuf.BoolValue + 28, // 4: OpenIMServer.conversation.ConversationReq.ex:type_name -> OpenIMServer.protobuf.StringValue + 26, // 5: OpenIMServer.conversation.ConversationReq.burnDuration:type_name -> OpenIMServer.protobuf.Int32Value + 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 + 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 - 2, // 17: OpenIMServer.conversation.conversation.ModifyConversationField:input_type -> OpenIMServer.conversation.ModifyConversationFieldReq - 8, // 18: OpenIMServer.conversation.conversation.GetConversation:input_type -> OpenIMServer.conversation.GetConversationReq - 12, // 19: OpenIMServer.conversation.conversation.GetAllConversations:input_type -> OpenIMServer.conversation.GetAllConversationsReq - 10, // 20: OpenIMServer.conversation.conversation.GetConversations:input_type -> OpenIMServer.conversation.GetConversationsReq - 14, // 21: OpenIMServer.conversation.conversation.BatchSetConversations:input_type -> OpenIMServer.conversation.BatchSetConversationsReq - 4, // 22: OpenIMServer.conversation.conversation.SetConversation:input_type -> OpenIMServer.conversation.SetConversationReq - 6, // 23: OpenIMServer.conversation.conversation.SetRecvMsgOpt:input_type -> OpenIMServer.conversation.SetRecvMsgOptReq - 16, // 24: OpenIMServer.conversation.conversation.GetRecvMsgNotNotifyUserIDs:input_type -> OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsReq - 18, // 25: OpenIMServer.conversation.conversation.CreateSingleChatConversations:input_type -> OpenIMServer.conversation.CreateSingleChatConversationsReq - 20, // 26: OpenIMServer.conversation.conversation.CreateGroupChatConversations:input_type -> OpenIMServer.conversation.CreateGroupChatConversationsReq - 22, // 27: OpenIMServer.conversation.conversation.SetConversationMaxSeq:input_type -> OpenIMServer.conversation.SetConversationMaxSeqReq - 24, // 28: OpenIMServer.conversation.conversation.GetConversationIDs:input_type -> OpenIMServer.conversation.GetConversationIDsReq - 26, // 29: OpenIMServer.conversation.conversation.SetConversations:input_type -> OpenIMServer.conversation.SetConversationsReq - 28, // 30: OpenIMServer.conversation.conversation.GetUserConversationIDsHash:input_type -> OpenIMServer.conversation.GetUserConversationIDsHashReq - 30, // 31: OpenIMServer.conversation.conversation.GetConversationsByConversationID:input_type -> OpenIMServer.conversation.GetConversationsByConversationIDReq - 3, // 32: OpenIMServer.conversation.conversation.ModifyConversationField:output_type -> OpenIMServer.conversation.ModifyConversationFieldResp - 9, // 33: OpenIMServer.conversation.conversation.GetConversation:output_type -> OpenIMServer.conversation.GetConversationResp - 13, // 34: OpenIMServer.conversation.conversation.GetAllConversations:output_type -> OpenIMServer.conversation.GetAllConversationsResp - 11, // 35: OpenIMServer.conversation.conversation.GetConversations:output_type -> OpenIMServer.conversation.GetConversationsResp - 15, // 36: OpenIMServer.conversation.conversation.BatchSetConversations:output_type -> OpenIMServer.conversation.BatchSetConversationsResp - 5, // 37: OpenIMServer.conversation.conversation.SetConversation:output_type -> OpenIMServer.conversation.SetConversationResp - 7, // 38: OpenIMServer.conversation.conversation.SetRecvMsgOpt:output_type -> OpenIMServer.conversation.SetRecvMsgOptResp - 17, // 39: OpenIMServer.conversation.conversation.GetRecvMsgNotNotifyUserIDs:output_type -> OpenIMServer.conversation.GetRecvMsgNotNotifyUserIDsResp - 19, // 40: OpenIMServer.conversation.conversation.CreateSingleChatConversations:output_type -> OpenIMServer.conversation.CreateSingleChatConversationsResp - 21, // 41: OpenIMServer.conversation.conversation.CreateGroupChatConversations:output_type -> OpenIMServer.conversation.CreateGroupChatConversationsResp - 23, // 42: OpenIMServer.conversation.conversation.SetConversationMaxSeq:output_type -> OpenIMServer.conversation.SetConversationMaxSeqResp - 25, // 43: OpenIMServer.conversation.conversation.GetConversationIDs:output_type -> OpenIMServer.conversation.GetConversationIDsResp - 27, // 44: OpenIMServer.conversation.conversation.SetConversations:output_type -> OpenIMServer.conversation.SetConversationsResp - 29, // 45: OpenIMServer.conversation.conversation.GetUserConversationIDsHash:output_type -> OpenIMServer.conversation.GetUserConversationIDsHashResp - 31, // 46: OpenIMServer.conversation.conversation.GetConversationsByConversationID:output_type -> OpenIMServer.conversation.GetConversationsByConversationIDResp - 32, // [32:47] is the sub-list for method output_type - 17, // [17:32] is the sub-list for method input_type + 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 @@ -2252,30 +1947,6 @@ func file_conversation_conversation_proto_init() { } } file_conversation_conversation_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyConversationFieldReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_conversation_conversation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyConversationFieldResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_conversation_conversation_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetConversationReq); i { case 0: return &v.state @@ -2287,7 +1958,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetConversationResp); i { case 0: return &v.state @@ -2299,31 +1970,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetRecvMsgOptReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_conversation_conversation_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetRecvMsgOptResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_conversation_conversation_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationReq); i { case 0: return &v.state @@ -2335,7 +1982,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationResp); i { case 0: return &v.state @@ -2347,7 +1994,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationsReq); i { case 0: return &v.state @@ -2359,7 +2006,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationsResp); i { case 0: return &v.state @@ -2371,7 +2018,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAllConversationsReq); i { case 0: return &v.state @@ -2383,7 +2030,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAllConversationsResp); i { case 0: return &v.state @@ -2395,31 +2042,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchSetConversationsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_conversation_conversation_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchSetConversationsResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_conversation_conversation_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRecvMsgNotNotifyUserIDsReq); i { case 0: return &v.state @@ -2431,7 +2054,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRecvMsgNotNotifyUserIDsResp); i { case 0: return &v.state @@ -2443,7 +2066,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateSingleChatConversationsReq); i { case 0: return &v.state @@ -2455,7 +2078,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateSingleChatConversationsResp); i { case 0: return &v.state @@ -2467,7 +2090,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateGroupChatConversationsReq); i { case 0: return &v.state @@ -2479,7 +2102,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateGroupChatConversationsResp); i { case 0: return &v.state @@ -2491,7 +2114,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetConversationMaxSeqReq); i { case 0: return &v.state @@ -2503,7 +2126,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetConversationMaxSeqResp); i { case 0: return &v.state @@ -2515,7 +2138,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationIDsReq); i { case 0: return &v.state @@ -2527,7 +2150,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationIDsResp); i { case 0: return &v.state @@ -2539,7 +2162,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetConversationsReq); i { case 0: return &v.state @@ -2551,7 +2174,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetConversationsResp); i { case 0: return &v.state @@ -2563,7 +2186,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetUserConversationIDsHashReq); i { case 0: return &v.state @@ -2575,7 +2198,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetUserConversationIDsHashResp); i { case 0: return &v.state @@ -2587,7 +2210,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationsByConversationIDReq); i { case 0: return &v.state @@ -2599,7 +2222,7 @@ func file_conversation_conversation_proto_init() { return nil } } - file_conversation_conversation_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_conversation_conversation_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConversationsByConversationIDResp); i { case 0: return &v.state @@ -2618,7 +2241,7 @@ func file_conversation_conversation_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_conversation_conversation_proto_rawDesc, NumEnums: 0, - NumMessages: 32, + NumMessages: 26, NumExtensions: 0, NumServices: 1, }, @@ -2644,13 +2267,10 @@ 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 ConversationClient interface { - ModifyConversationField(ctx context.Context, in *ModifyConversationFieldReq, opts ...grpc.CallOption) (*ModifyConversationFieldResp, error) GetConversation(ctx context.Context, in *GetConversationReq, opts ...grpc.CallOption) (*GetConversationResp, error) GetAllConversations(ctx context.Context, in *GetAllConversationsReq, opts ...grpc.CallOption) (*GetAllConversationsResp, error) GetConversations(ctx context.Context, in *GetConversationsReq, opts ...grpc.CallOption) (*GetConversationsResp, error) - BatchSetConversations(ctx context.Context, in *BatchSetConversationsReq, opts ...grpc.CallOption) (*BatchSetConversationsResp, error) SetConversation(ctx context.Context, in *SetConversationReq, opts ...grpc.CallOption) (*SetConversationResp, error) - SetRecvMsgOpt(ctx context.Context, in *SetRecvMsgOptReq, opts ...grpc.CallOption) (*SetRecvMsgOptResp, error) GetRecvMsgNotNotifyUserIDs(ctx context.Context, in *GetRecvMsgNotNotifyUserIDsReq, opts ...grpc.CallOption) (*GetRecvMsgNotNotifyUserIDsResp, error) CreateSingleChatConversations(ctx context.Context, in *CreateSingleChatConversationsReq, opts ...grpc.CallOption) (*CreateSingleChatConversationsResp, error) CreateGroupChatConversations(ctx context.Context, in *CreateGroupChatConversationsReq, opts ...grpc.CallOption) (*CreateGroupChatConversationsResp, error) @@ -2669,15 +2289,6 @@ func NewConversationClient(cc grpc.ClientConnInterface) ConversationClient { return &conversationClient{cc} } -func (c *conversationClient) ModifyConversationField(ctx context.Context, in *ModifyConversationFieldReq, opts ...grpc.CallOption) (*ModifyConversationFieldResp, error) { - out := new(ModifyConversationFieldResp) - err := c.cc.Invoke(ctx, "/OpenIMServer.conversation.conversation/ModifyConversationField", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *conversationClient) GetConversation(ctx context.Context, in *GetConversationReq, opts ...grpc.CallOption) (*GetConversationResp, error) { out := new(GetConversationResp) err := c.cc.Invoke(ctx, "/OpenIMServer.conversation.conversation/GetConversation", in, out, opts...) @@ -2705,15 +2316,6 @@ func (c *conversationClient) GetConversations(ctx context.Context, in *GetConver return out, nil } -func (c *conversationClient) BatchSetConversations(ctx context.Context, in *BatchSetConversationsReq, opts ...grpc.CallOption) (*BatchSetConversationsResp, error) { - out := new(BatchSetConversationsResp) - err := c.cc.Invoke(ctx, "/OpenIMServer.conversation.conversation/BatchSetConversations", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *conversationClient) SetConversation(ctx context.Context, in *SetConversationReq, opts ...grpc.CallOption) (*SetConversationResp, error) { out := new(SetConversationResp) err := c.cc.Invoke(ctx, "/OpenIMServer.conversation.conversation/SetConversation", in, out, opts...) @@ -2723,15 +2325,6 @@ func (c *conversationClient) SetConversation(ctx context.Context, in *SetConvers return out, nil } -func (c *conversationClient) SetRecvMsgOpt(ctx context.Context, in *SetRecvMsgOptReq, opts ...grpc.CallOption) (*SetRecvMsgOptResp, error) { - out := new(SetRecvMsgOptResp) - err := c.cc.Invoke(ctx, "/OpenIMServer.conversation.conversation/SetRecvMsgOpt", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *conversationClient) GetRecvMsgNotNotifyUserIDs(ctx context.Context, in *GetRecvMsgNotNotifyUserIDsReq, opts ...grpc.CallOption) (*GetRecvMsgNotNotifyUserIDsResp, error) { out := new(GetRecvMsgNotNotifyUserIDsResp) err := c.cc.Invoke(ctx, "/OpenIMServer.conversation.conversation/GetRecvMsgNotNotifyUserIDs", in, out, opts...) @@ -2806,13 +2399,10 @@ func (c *conversationClient) GetConversationsByConversationID(ctx context.Contex // ConversationServer is the server API for Conversation service. type ConversationServer interface { - ModifyConversationField(context.Context, *ModifyConversationFieldReq) (*ModifyConversationFieldResp, error) GetConversation(context.Context, *GetConversationReq) (*GetConversationResp, error) GetAllConversations(context.Context, *GetAllConversationsReq) (*GetAllConversationsResp, error) GetConversations(context.Context, *GetConversationsReq) (*GetConversationsResp, error) - BatchSetConversations(context.Context, *BatchSetConversationsReq) (*BatchSetConversationsResp, error) SetConversation(context.Context, *SetConversationReq) (*SetConversationResp, error) - SetRecvMsgOpt(context.Context, *SetRecvMsgOptReq) (*SetRecvMsgOptResp, error) GetRecvMsgNotNotifyUserIDs(context.Context, *GetRecvMsgNotNotifyUserIDsReq) (*GetRecvMsgNotNotifyUserIDsResp, error) CreateSingleChatConversations(context.Context, *CreateSingleChatConversationsReq) (*CreateSingleChatConversationsResp, error) CreateGroupChatConversations(context.Context, *CreateGroupChatConversationsReq) (*CreateGroupChatConversationsResp, error) @@ -2827,9 +2417,6 @@ type ConversationServer interface { type UnimplementedConversationServer struct { } -func (*UnimplementedConversationServer) ModifyConversationField(context.Context, *ModifyConversationFieldReq) (*ModifyConversationFieldResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method ModifyConversationField not implemented") -} func (*UnimplementedConversationServer) GetConversation(context.Context, *GetConversationReq) (*GetConversationResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetConversation not implemented") } @@ -2839,15 +2426,9 @@ func (*UnimplementedConversationServer) GetAllConversations(context.Context, *Ge func (*UnimplementedConversationServer) GetConversations(context.Context, *GetConversationsReq) (*GetConversationsResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetConversations not implemented") } -func (*UnimplementedConversationServer) BatchSetConversations(context.Context, *BatchSetConversationsReq) (*BatchSetConversationsResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchSetConversations not implemented") -} func (*UnimplementedConversationServer) SetConversation(context.Context, *SetConversationReq) (*SetConversationResp, error) { return nil, status.Errorf(codes.Unimplemented, "method SetConversation not implemented") } -func (*UnimplementedConversationServer) SetRecvMsgOpt(context.Context, *SetRecvMsgOptReq) (*SetRecvMsgOptResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetRecvMsgOpt not implemented") -} func (*UnimplementedConversationServer) GetRecvMsgNotNotifyUserIDs(context.Context, *GetRecvMsgNotNotifyUserIDsReq) (*GetRecvMsgNotNotifyUserIDsResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetRecvMsgNotNotifyUserIDs not implemented") } @@ -2877,24 +2458,6 @@ func RegisterConversationServer(s *grpc.Server, srv ConversationServer) { s.RegisterService(&_Conversation_serviceDesc, srv) } -func _Conversation_ModifyConversationField_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModifyConversationFieldReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ConversationServer).ModifyConversationField(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/OpenIMServer.conversation.conversation/ModifyConversationField", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ConversationServer).ModifyConversationField(ctx, req.(*ModifyConversationFieldReq)) - } - return interceptor(ctx, in, info, handler) -} - func _Conversation_GetConversation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetConversationReq) if err := dec(in); err != nil { @@ -2949,24 +2512,6 @@ func _Conversation_GetConversations_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _Conversation_BatchSetConversations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BatchSetConversationsReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ConversationServer).BatchSetConversations(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/OpenIMServer.conversation.conversation/BatchSetConversations", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ConversationServer).BatchSetConversations(ctx, req.(*BatchSetConversationsReq)) - } - return interceptor(ctx, in, info, handler) -} - func _Conversation_SetConversation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetConversationReq) if err := dec(in); err != nil { @@ -2985,24 +2530,6 @@ func _Conversation_SetConversation_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _Conversation_SetRecvMsgOpt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetRecvMsgOptReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ConversationServer).SetRecvMsgOpt(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/OpenIMServer.conversation.conversation/SetRecvMsgOpt", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ConversationServer).SetRecvMsgOpt(ctx, req.(*SetRecvMsgOptReq)) - } - return interceptor(ctx, in, info, handler) -} - func _Conversation_GetRecvMsgNotNotifyUserIDs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetRecvMsgNotNotifyUserIDsReq) if err := dec(in); err != nil { @@ -3151,10 +2678,6 @@ var _Conversation_serviceDesc = grpc.ServiceDesc{ ServiceName: "OpenIMServer.conversation.conversation", HandlerType: (*ConversationServer)(nil), Methods: []grpc.MethodDesc{ - { - MethodName: "ModifyConversationField", - Handler: _Conversation_ModifyConversationField_Handler, - }, { MethodName: "GetConversation", Handler: _Conversation_GetConversation_Handler, @@ -3167,18 +2690,10 @@ var _Conversation_serviceDesc = grpc.ServiceDesc{ MethodName: "GetConversations", Handler: _Conversation_GetConversations_Handler, }, - { - MethodName: "BatchSetConversations", - Handler: _Conversation_BatchSetConversations_Handler, - }, { MethodName: "SetConversation", Handler: _Conversation_SetConversation_Handler, }, - { - MethodName: "SetRecvMsgOpt", - Handler: _Conversation_SetRecvMsgOpt_Handler, - }, { MethodName: "GetRecvMsgNotNotifyUserIDs", Handler: _Conversation_GetRecvMsgNotNotifyUserIDs_Handler, diff --git a/pkg/proto/conversation/conversation.proto b/pkg/proto/conversation/conversation.proto index b08366af7..0a271d525 100644 --- a/pkg/proto/conversation/conversation.proto +++ b/pkg/proto/conversation/conversation.proto @@ -32,6 +32,9 @@ message Conversation{ int32 burnDuration = 12; int64 minSeq = 13; int64 maxSeq = 14; + int64 msgDestructTime = 15; + int64 latestMsgDestructTime = 16; + bool isMsgDestruct = 17; } message ConversationReq{ @@ -48,15 +51,8 @@ message ConversationReq{ OpenIMServer.protobuf.Int64Value minSeq = 11; OpenIMServer.protobuf.Int64Value maxSeq = 12; OpenIMServer.protobuf.Int32Value groupAtType = 13; -} - -message ModifyConversationFieldReq{ - repeated string userIDList = 1; - int32 FieldType = 2; - Conversation conversation = 3; -} - -message ModifyConversationFieldResp{ + OpenIMServer.protobuf.Int64Value msgDestructTime = 14; + OpenIMServer.protobuf.BoolValue isMsgDestruct = 15; } message SetConversationReq{ @@ -66,15 +62,6 @@ message SetConversationReq{ message SetConversationResp{ } -message SetRecvMsgOptReq { - string ownerUserID = 1; - string conversationID = 2; - int32 recvMsgOpt = 3; -} - -message SetRecvMsgOptResp { -} - message GetConversationReq{ string conversationID = 1; string ownerUserID = 2; @@ -101,13 +88,6 @@ message GetAllConversationsResp{ repeated Conversation conversations = 2; } -message BatchSetConversationsReq{ - repeated Conversation conversations = 1; - string ownerUserID = 2; -} - -message BatchSetConversationsResp{ -} message GetRecvMsgNotNotifyUserIDsReq { string groupID = 1; @@ -177,13 +157,10 @@ message GetConversationsByConversationIDResp { } service conversation { - rpc ModifyConversationField(ModifyConversationFieldReq)returns(ModifyConversationFieldResp); rpc GetConversation(GetConversationReq)returns(GetConversationResp); rpc GetAllConversations(GetAllConversationsReq)returns(GetAllConversationsResp); rpc GetConversations(GetConversationsReq)returns(GetConversationsResp); - rpc BatchSetConversations(BatchSetConversationsReq)returns(BatchSetConversationsResp); rpc SetConversation(SetConversationReq)returns(SetConversationResp); - rpc SetRecvMsgOpt(SetRecvMsgOptReq)returns(SetRecvMsgOptResp); rpc GetRecvMsgNotNotifyUserIDs(GetRecvMsgNotNotifyUserIDsReq) returns (GetRecvMsgNotNotifyUserIDsResp); rpc CreateSingleChatConversations(CreateSingleChatConversationsReq) returns (CreateSingleChatConversationsResp); rpc CreateGroupChatConversations(CreateGroupChatConversationsReq) returns (CreateGroupChatConversationsResp); diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index f54e54a9e..9541496e2 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -3397,6 +3397,124 @@ func (x *GetGroupMemberCacheResp) GetMember() *sdkws.GroupMemberFullInfo { return nil } +type GroupCreateCountReq 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"` +} + +func (x *GroupCreateCountReq) Reset() { + *x = GroupCreateCountReq{} + if protoimpl.UnsafeEnabled { + mi := &file_group_group_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupCreateCountReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupCreateCountReq) ProtoMessage() {} + +func (x *GroupCreateCountReq) ProtoReflect() protoreflect.Message { + mi := &file_group_group_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 GroupCreateCountReq.ProtoReflect.Descriptor instead. +func (*GroupCreateCountReq) Descriptor() ([]byte, []int) { + return file_group_group_proto_rawDescGZIP(), []int{66} +} + +func (x *GroupCreateCountReq) GetStart() int64 { + if x != nil { + return x.Start + } + return 0 +} + +func (x *GroupCreateCountReq) GetEnd() int64 { + if x != nil { + return x.End + } + return 0 +} + +type GroupCreateCountResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total"` + Before int64 `protobuf:"varint,2,opt,name=before,proto3" json:"before"` + Count map[string]int64 `protobuf:"bytes,3,rep,name=count,proto3" json:"count" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *GroupCreateCountResp) Reset() { + *x = GroupCreateCountResp{} + if protoimpl.UnsafeEnabled { + mi := &file_group_group_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupCreateCountResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupCreateCountResp) ProtoMessage() {} + +func (x *GroupCreateCountResp) ProtoReflect() protoreflect.Message { + mi := &file_group_group_proto_msgTypes[67] + 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 GroupCreateCountResp.ProtoReflect.Descriptor instead. +func (*GroupCreateCountResp) Descriptor() ([]byte, []int) { + return file_group_group_proto_rawDescGZIP(), []int{67} +} + +func (x *GroupCreateCountResp) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *GroupCreateCountResp) GetBefore() int64 { + if x != nil { + return x.Before + } + return 0 +} + +func (x *GroupCreateCountResp) GetCount() map[string]int64 { + if x != nil { + return x.Count + } + return nil +} + var File_group_group_proto protoreflect.FileDescriptor var file_group_group_proto_rawDesc = []byte{ @@ -3765,210 +3883,233 @@ var file_group_group_proto_rawDesc = []byte{ 0x27, 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, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x46, 0x75, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x32, 0xf4, 0x18, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, - 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x50, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x50, 0x0a, 0x09, 0x71, 0x75, 0x69, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x51, 0x75, 0x69, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x51, 0x75, 0x69, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5c, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, - 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x59, 0x0a, 0x0c, 0x73, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, + 0x22, 0x3d, 0x0a, 0x13, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 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, 0x22, + 0xc9, 0x01, 0x0a, 0x14, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x16, + 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x49, 0x0a, 0x05, 0x63, 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, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x2e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x1a, 0x38, 0x0a, 0x0a, 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, 0x32, 0xdb, 0x19, 0x0a, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, + 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x50, 0x0a, + 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, + 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x50, 0x0a, 0x09, 0x71, 0x75, 0x69, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x51, 0x75, 0x69, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x21, + 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x51, 0x75, 0x69, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x5c, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, + 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x59, 0x0a, 0x0c, 0x73, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x53, - 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x7a, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x80, 0x01, 0x0a, 0x19, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x31, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, - 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, - 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, + 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7a, 0x0a, 0x17, 0x67, 0x65, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x80, 0x01, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, + 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7d, 0x0a, 0x18, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x67, 0x65, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, + 0x75, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7d, 0x0a, 0x18, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6e, 0x0a, 0x13, 0x67, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x62, 0x0a, 0x0f, 0x6b, 0x69, 0x63, 0x6b, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x4b, 0x69, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x67, - 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x6e, 0x0a, 0x13, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x62, 0x0a, 0x0f, 0x6b, 0x69, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x4a, 0x6f, 0x69, + 0x6e, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x11, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x28, 0x2e, - 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x50, 0x0a, 0x09, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, - 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, 0x4d, 0x53, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, + 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x11, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, + 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x50, 0x0a, + 0x09, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, - 0x4d, 0x53, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x6b, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x43, 0x4d, 0x53, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, 0x4d, 0x53, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x59, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, 0x4d, 0x53, 0x52, 0x65, 0x71, + 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, 0x4d, 0x53, 0x52, 0x65, 0x73, 0x70, 0x12, 0x59, 0x0a, 0x0c, + 0x64, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x44, 0x69, 0x73, 0x6d, - 0x69, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x62, 0x0a, 0x0f, - 0x6d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x75, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x74, 0x0a, 0x15, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x62, 0x0a, 0x0f, 0x6d, 0x75, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, + 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x74, 0x0a, 0x15, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x50, 0x0a, 0x09, 0x6d, 0x75, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x62, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x26, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, - 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7a, 0x0a, 0x17, - 0x67, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, - 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, - 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x53, - 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x1a, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x75, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x50, 0x0a, 0x09, 0x6d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x62, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x75, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x27, + 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x75, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7a, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x4a, 0x6f, + 0x69, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x65, + 0x64, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x65, + 0x64, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x12, 0x73, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, + 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x6b, 0x0a, 0x12, 0x73, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x71, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x62, - 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x71, 0x0a, + 0x14, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x74, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x74, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2d, 0x2e, 0x4f, - 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x74, 0x0a, 0x15, 0x67, - 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x73, 0x12, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x7a, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x4f, - 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, - 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, - 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x2a, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x61, - 0x63, 0x68, 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, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x74, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x12, + 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2d, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7a, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, + 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x28, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x6e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x65, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 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, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3983,7 +4124,7 @@ func file_group_group_proto_rawDescGZIP() []byte { return file_group_group_proto_rawDescData } -var file_group_group_proto_msgTypes = make([]protoimpl.MessageInfo, 66) +var file_group_group_proto_msgTypes = make([]protoimpl.MessageInfo, 69) var file_group_group_proto_goTypes = []interface{}{ (*CreateGroupReq)(nil), // 0: OpenIMServer.group.CreateGroupReq (*CreateGroupResp)(nil), // 1: OpenIMServer.group.CreateGroupResp @@ -4051,112 +4192,118 @@ var file_group_group_proto_goTypes = []interface{}{ (*GetGroupInfoCacheResp)(nil), // 63: OpenIMServer.group.GetGroupInfoCacheResp (*GetGroupMemberCacheReq)(nil), // 64: OpenIMServer.group.GetGroupMemberCacheReq (*GetGroupMemberCacheResp)(nil), // 65: OpenIMServer.group.GetGroupMemberCacheResp - (*sdkws.GroupInfo)(nil), // 66: OpenIMServer.sdkws.GroupInfo - (*sdkws.GroupInfoForSet)(nil), // 67: OpenIMServer.sdkws.GroupInfoForSet - (*sdkws.RequestPagination)(nil), // 68: OpenIMServer.sdkws.RequestPagination - (*sdkws.GroupRequest)(nil), // 69: OpenIMServer.sdkws.GroupRequest - (*sdkws.GroupMemberFullInfo)(nil), // 70: OpenIMServer.sdkws.GroupMemberFullInfo - (*wrapperspb.StringValue)(nil), // 71: OpenIMServer.protobuf.StringValue - (*wrapperspb.Int32Value)(nil), // 72: OpenIMServer.protobuf.Int32Value + (*GroupCreateCountReq)(nil), // 66: OpenIMServer.group.GroupCreateCountReq + (*GroupCreateCountResp)(nil), // 67: OpenIMServer.group.GroupCreateCountResp + nil, // 68: OpenIMServer.group.GroupCreateCountResp.CountEntry + (*sdkws.GroupInfo)(nil), // 69: OpenIMServer.sdkws.GroupInfo + (*sdkws.GroupInfoForSet)(nil), // 70: OpenIMServer.sdkws.GroupInfoForSet + (*sdkws.RequestPagination)(nil), // 71: OpenIMServer.sdkws.RequestPagination + (*sdkws.GroupRequest)(nil), // 72: OpenIMServer.sdkws.GroupRequest + (*sdkws.GroupMemberFullInfo)(nil), // 73: OpenIMServer.sdkws.GroupMemberFullInfo + (*wrapperspb.StringValue)(nil), // 74: OpenIMServer.protobuf.StringValue + (*wrapperspb.Int32Value)(nil), // 75: OpenIMServer.protobuf.Int32Value } var file_group_group_proto_depIdxs = []int32{ - 66, // 0: OpenIMServer.group.CreateGroupReq.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo - 66, // 1: OpenIMServer.group.CreateGroupResp.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo - 66, // 2: OpenIMServer.group.GetGroupsInfoResp.groupInfos:type_name -> OpenIMServer.sdkws.GroupInfo - 67, // 3: OpenIMServer.group.SetGroupInfoReq.groupInfoForSet:type_name -> OpenIMServer.sdkws.GroupInfoForSet - 68, // 4: OpenIMServer.group.GetGroupApplicationListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 69, // 5: OpenIMServer.group.GetGroupApplicationListResp.groupRequests:type_name -> OpenIMServer.sdkws.GroupRequest - 68, // 6: OpenIMServer.group.GetUserReqApplicationListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 69, // 7: OpenIMServer.group.GetUserReqApplicationListResp.groupRequests:type_name -> OpenIMServer.sdkws.GroupRequest - 68, // 8: OpenIMServer.group.GetGroupMemberListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 70, // 9: OpenIMServer.group.GetGroupMemberListResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo - 70, // 10: OpenIMServer.group.GetGroupMembersInfoResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo - 68, // 11: OpenIMServer.group.GetJoinedGroupListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 66, // 12: OpenIMServer.group.GetJoinedGroupListResp.groups:type_name -> OpenIMServer.sdkws.GroupInfo - 68, // 13: OpenIMServer.group.GetGroupAllMemberReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 70, // 14: OpenIMServer.group.GetGroupAllMemberResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo - 66, // 15: OpenIMServer.group.CMSGroup.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo - 68, // 16: OpenIMServer.group.GetGroupsReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 69, // 0: OpenIMServer.group.CreateGroupReq.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo + 69, // 1: OpenIMServer.group.CreateGroupResp.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo + 69, // 2: OpenIMServer.group.GetGroupsInfoResp.groupInfos:type_name -> OpenIMServer.sdkws.GroupInfo + 70, // 3: OpenIMServer.group.SetGroupInfoReq.groupInfoForSet:type_name -> OpenIMServer.sdkws.GroupInfoForSet + 71, // 4: OpenIMServer.group.GetGroupApplicationListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 72, // 5: OpenIMServer.group.GetGroupApplicationListResp.groupRequests:type_name -> OpenIMServer.sdkws.GroupRequest + 71, // 6: OpenIMServer.group.GetUserReqApplicationListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 72, // 7: OpenIMServer.group.GetUserReqApplicationListResp.groupRequests:type_name -> OpenIMServer.sdkws.GroupRequest + 71, // 8: OpenIMServer.group.GetGroupMemberListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 73, // 9: OpenIMServer.group.GetGroupMemberListResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo + 73, // 10: OpenIMServer.group.GetGroupMembersInfoResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo + 71, // 11: OpenIMServer.group.GetJoinedGroupListReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 69, // 12: OpenIMServer.group.GetJoinedGroupListResp.groups:type_name -> OpenIMServer.sdkws.GroupInfo + 71, // 13: OpenIMServer.group.GetGroupAllMemberReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 73, // 14: OpenIMServer.group.GetGroupAllMemberResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo + 69, // 15: OpenIMServer.group.CMSGroup.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo + 71, // 16: OpenIMServer.group.GetGroupsReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination 30, // 17: OpenIMServer.group.GetGroupsResp.groups:type_name -> OpenIMServer.group.CMSGroup - 68, // 18: OpenIMServer.group.GetGroupMembersCMSReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 70, // 19: OpenIMServer.group.GetGroupMembersCMSResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo - 66, // 20: OpenIMServer.group.GetJoinedSuperGroupListResp.groups:type_name -> OpenIMServer.sdkws.GroupInfo - 66, // 21: OpenIMServer.group.GetSuperGroupsInfoResp.groupInfos:type_name -> OpenIMServer.sdkws.GroupInfo - 71, // 22: OpenIMServer.group.SetGroupMemberInfo.nickname:type_name -> OpenIMServer.protobuf.StringValue - 71, // 23: OpenIMServer.group.SetGroupMemberInfo.faceURL:type_name -> OpenIMServer.protobuf.StringValue - 72, // 24: OpenIMServer.group.SetGroupMemberInfo.roleLevel:type_name -> OpenIMServer.protobuf.Int32Value - 71, // 25: OpenIMServer.group.SetGroupMemberInfo.ex:type_name -> OpenIMServer.protobuf.StringValue + 71, // 18: OpenIMServer.group.GetGroupMembersCMSReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 73, // 19: OpenIMServer.group.GetGroupMembersCMSResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo + 69, // 20: OpenIMServer.group.GetJoinedSuperGroupListResp.groups:type_name -> OpenIMServer.sdkws.GroupInfo + 69, // 21: OpenIMServer.group.GetSuperGroupsInfoResp.groupInfos:type_name -> OpenIMServer.sdkws.GroupInfo + 74, // 22: OpenIMServer.group.SetGroupMemberInfo.nickname:type_name -> OpenIMServer.protobuf.StringValue + 74, // 23: OpenIMServer.group.SetGroupMemberInfo.faceURL:type_name -> OpenIMServer.protobuf.StringValue + 75, // 24: OpenIMServer.group.SetGroupMemberInfo.roleLevel:type_name -> OpenIMServer.protobuf.Int32Value + 74, // 25: OpenIMServer.group.SetGroupMemberInfo.ex:type_name -> OpenIMServer.protobuf.StringValue 50, // 26: OpenIMServer.group.SetGroupMemberInfoReq.members:type_name -> OpenIMServer.group.SetGroupMemberInfo 54, // 27: OpenIMServer.group.GetGroupAbstractInfoResp.groupAbstractInfos:type_name -> OpenIMServer.group.GroupAbstractInfo - 70, // 28: OpenIMServer.group.GetUserInGroupMembersResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo - 70, // 29: OpenIMServer.group.GetGroupMemberRoleLevelResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo - 66, // 30: OpenIMServer.group.GetGroupInfoCacheResp.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo - 70, // 31: OpenIMServer.group.GetGroupMemberCacheResp.member:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo - 0, // 32: OpenIMServer.group.group.createGroup:input_type -> OpenIMServer.group.CreateGroupReq - 12, // 33: OpenIMServer.group.group.joinGroup:input_type -> OpenIMServer.group.JoinGroupReq - 16, // 34: OpenIMServer.group.group.quitGroup:input_type -> OpenIMServer.group.QuitGroupReq - 2, // 35: OpenIMServer.group.group.getGroupsInfo:input_type -> OpenIMServer.group.GetGroupsInfoReq - 4, // 36: OpenIMServer.group.group.setGroupInfo:input_type -> OpenIMServer.group.SetGroupInfoReq - 6, // 37: OpenIMServer.group.group.getGroupApplicationList:input_type -> OpenIMServer.group.GetGroupApplicationListReq - 8, // 38: OpenIMServer.group.group.getUserReqApplicationList:input_type -> OpenIMServer.group.GetUserReqApplicationListReq - 10, // 39: OpenIMServer.group.group.transferGroupOwner:input_type -> OpenIMServer.group.TransferGroupOwnerReq - 14, // 40: OpenIMServer.group.group.groupApplicationResponse:input_type -> OpenIMServer.group.GroupApplicationResponseReq - 18, // 41: OpenIMServer.group.group.getGroupMemberList:input_type -> OpenIMServer.group.GetGroupMemberListReq - 20, // 42: OpenIMServer.group.group.getGroupMembersInfo:input_type -> OpenIMServer.group.GetGroupMembersInfoReq - 22, // 43: OpenIMServer.group.group.kickGroupMember:input_type -> OpenIMServer.group.KickGroupMemberReq - 24, // 44: OpenIMServer.group.group.getJoinedGroupList:input_type -> OpenIMServer.group.GetJoinedGroupListReq - 26, // 45: OpenIMServer.group.group.inviteUserToGroup:input_type -> OpenIMServer.group.InviteUserToGroupReq - 31, // 46: OpenIMServer.group.group.getGroups:input_type -> OpenIMServer.group.GetGroupsReq - 34, // 47: OpenIMServer.group.group.getGroupMembersCMS:input_type -> OpenIMServer.group.GetGroupMembersCMSReq - 36, // 48: OpenIMServer.group.group.dismissGroup:input_type -> OpenIMServer.group.DismissGroupReq - 38, // 49: OpenIMServer.group.group.muteGroupMember:input_type -> OpenIMServer.group.MuteGroupMemberReq - 40, // 50: OpenIMServer.group.group.cancelMuteGroupMember:input_type -> OpenIMServer.group.CancelMuteGroupMemberReq - 42, // 51: OpenIMServer.group.group.muteGroup:input_type -> OpenIMServer.group.MuteGroupReq - 44, // 52: OpenIMServer.group.group.cancelMuteGroup:input_type -> OpenIMServer.group.CancelMuteGroupReq - 46, // 53: OpenIMServer.group.group.getJoinedSuperGroupList:input_type -> OpenIMServer.group.GetJoinedSuperGroupListReq - 48, // 54: OpenIMServer.group.group.getSuperGroupsInfo:input_type -> OpenIMServer.group.GetSuperGroupsInfoReq - 51, // 55: OpenIMServer.group.group.setGroupMemberInfo:input_type -> OpenIMServer.group.SetGroupMemberInfoReq - 53, // 56: OpenIMServer.group.group.getGroupAbstractInfo:input_type -> OpenIMServer.group.GetGroupAbstractInfoReq - 56, // 57: OpenIMServer.group.group.getUserInGroupMembers:input_type -> OpenIMServer.group.GetUserInGroupMembersReq - 58, // 58: OpenIMServer.group.group.getGroupMemberUserIDs:input_type -> OpenIMServer.group.GetGroupMemberUserIDsReq - 60, // 59: OpenIMServer.group.group.GetGroupMemberRoleLevel:input_type -> OpenIMServer.group.GetGroupMemberRoleLevelReq - 62, // 60: OpenIMServer.group.group.GetGroupInfoCache:input_type -> OpenIMServer.group.GetGroupInfoCacheReq - 64, // 61: OpenIMServer.group.group.GetGroupMemberCache:input_type -> OpenIMServer.group.GetGroupMemberCacheReq - 1, // 62: OpenIMServer.group.group.createGroup:output_type -> OpenIMServer.group.CreateGroupResp - 13, // 63: OpenIMServer.group.group.joinGroup:output_type -> OpenIMServer.group.JoinGroupResp - 17, // 64: OpenIMServer.group.group.quitGroup:output_type -> OpenIMServer.group.QuitGroupResp - 3, // 65: OpenIMServer.group.group.getGroupsInfo:output_type -> OpenIMServer.group.GetGroupsInfoResp - 5, // 66: OpenIMServer.group.group.setGroupInfo:output_type -> OpenIMServer.group.SetGroupInfoResp - 7, // 67: OpenIMServer.group.group.getGroupApplicationList:output_type -> OpenIMServer.group.GetGroupApplicationListResp - 9, // 68: OpenIMServer.group.group.getUserReqApplicationList:output_type -> OpenIMServer.group.GetUserReqApplicationListResp - 11, // 69: OpenIMServer.group.group.transferGroupOwner:output_type -> OpenIMServer.group.TransferGroupOwnerResp - 15, // 70: OpenIMServer.group.group.groupApplicationResponse:output_type -> OpenIMServer.group.GroupApplicationResponseResp - 19, // 71: OpenIMServer.group.group.getGroupMemberList:output_type -> OpenIMServer.group.GetGroupMemberListResp - 21, // 72: OpenIMServer.group.group.getGroupMembersInfo:output_type -> OpenIMServer.group.GetGroupMembersInfoResp - 23, // 73: OpenIMServer.group.group.kickGroupMember:output_type -> OpenIMServer.group.KickGroupMemberResp - 25, // 74: OpenIMServer.group.group.getJoinedGroupList:output_type -> OpenIMServer.group.GetJoinedGroupListResp - 27, // 75: OpenIMServer.group.group.inviteUserToGroup:output_type -> OpenIMServer.group.InviteUserToGroupResp - 32, // 76: OpenIMServer.group.group.getGroups:output_type -> OpenIMServer.group.GetGroupsResp - 35, // 77: OpenIMServer.group.group.getGroupMembersCMS:output_type -> OpenIMServer.group.GetGroupMembersCMSResp - 37, // 78: OpenIMServer.group.group.dismissGroup:output_type -> OpenIMServer.group.DismissGroupResp - 39, // 79: OpenIMServer.group.group.muteGroupMember:output_type -> OpenIMServer.group.MuteGroupMemberResp - 41, // 80: OpenIMServer.group.group.cancelMuteGroupMember:output_type -> OpenIMServer.group.CancelMuteGroupMemberResp - 43, // 81: OpenIMServer.group.group.muteGroup:output_type -> OpenIMServer.group.MuteGroupResp - 45, // 82: OpenIMServer.group.group.cancelMuteGroup:output_type -> OpenIMServer.group.CancelMuteGroupResp - 47, // 83: OpenIMServer.group.group.getJoinedSuperGroupList:output_type -> OpenIMServer.group.GetJoinedSuperGroupListResp - 49, // 84: OpenIMServer.group.group.getSuperGroupsInfo:output_type -> OpenIMServer.group.GetSuperGroupsInfoResp - 52, // 85: OpenIMServer.group.group.setGroupMemberInfo:output_type -> OpenIMServer.group.SetGroupMemberInfoResp - 55, // 86: OpenIMServer.group.group.getGroupAbstractInfo:output_type -> OpenIMServer.group.GetGroupAbstractInfoResp - 57, // 87: OpenIMServer.group.group.getUserInGroupMembers:output_type -> OpenIMServer.group.GetUserInGroupMembersResp - 59, // 88: OpenIMServer.group.group.getGroupMemberUserIDs:output_type -> OpenIMServer.group.GetGroupMemberUserIDsResp - 61, // 89: OpenIMServer.group.group.GetGroupMemberRoleLevel:output_type -> OpenIMServer.group.GetGroupMemberRoleLevelResp - 63, // 90: OpenIMServer.group.group.GetGroupInfoCache:output_type -> OpenIMServer.group.GetGroupInfoCacheResp - 65, // 91: OpenIMServer.group.group.GetGroupMemberCache:output_type -> OpenIMServer.group.GetGroupMemberCacheResp - 62, // [62:92] is the sub-list for method output_type - 32, // [32:62] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 73, // 28: OpenIMServer.group.GetUserInGroupMembersResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo + 73, // 29: OpenIMServer.group.GetGroupMemberRoleLevelResp.members:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo + 69, // 30: OpenIMServer.group.GetGroupInfoCacheResp.groupInfo:type_name -> OpenIMServer.sdkws.GroupInfo + 73, // 31: OpenIMServer.group.GetGroupMemberCacheResp.member:type_name -> OpenIMServer.sdkws.GroupMemberFullInfo + 68, // 32: OpenIMServer.group.GroupCreateCountResp.count:type_name -> OpenIMServer.group.GroupCreateCountResp.CountEntry + 0, // 33: OpenIMServer.group.group.createGroup:input_type -> OpenIMServer.group.CreateGroupReq + 12, // 34: OpenIMServer.group.group.joinGroup:input_type -> OpenIMServer.group.JoinGroupReq + 16, // 35: OpenIMServer.group.group.quitGroup:input_type -> OpenIMServer.group.QuitGroupReq + 2, // 36: OpenIMServer.group.group.getGroupsInfo:input_type -> OpenIMServer.group.GetGroupsInfoReq + 4, // 37: OpenIMServer.group.group.setGroupInfo:input_type -> OpenIMServer.group.SetGroupInfoReq + 6, // 38: OpenIMServer.group.group.getGroupApplicationList:input_type -> OpenIMServer.group.GetGroupApplicationListReq + 8, // 39: OpenIMServer.group.group.getUserReqApplicationList:input_type -> OpenIMServer.group.GetUserReqApplicationListReq + 10, // 40: OpenIMServer.group.group.transferGroupOwner:input_type -> OpenIMServer.group.TransferGroupOwnerReq + 14, // 41: OpenIMServer.group.group.groupApplicationResponse:input_type -> OpenIMServer.group.GroupApplicationResponseReq + 18, // 42: OpenIMServer.group.group.getGroupMemberList:input_type -> OpenIMServer.group.GetGroupMemberListReq + 20, // 43: OpenIMServer.group.group.getGroupMembersInfo:input_type -> OpenIMServer.group.GetGroupMembersInfoReq + 22, // 44: OpenIMServer.group.group.kickGroupMember:input_type -> OpenIMServer.group.KickGroupMemberReq + 24, // 45: OpenIMServer.group.group.getJoinedGroupList:input_type -> OpenIMServer.group.GetJoinedGroupListReq + 26, // 46: OpenIMServer.group.group.inviteUserToGroup:input_type -> OpenIMServer.group.InviteUserToGroupReq + 31, // 47: OpenIMServer.group.group.getGroups:input_type -> OpenIMServer.group.GetGroupsReq + 34, // 48: OpenIMServer.group.group.getGroupMembersCMS:input_type -> OpenIMServer.group.GetGroupMembersCMSReq + 36, // 49: OpenIMServer.group.group.dismissGroup:input_type -> OpenIMServer.group.DismissGroupReq + 38, // 50: OpenIMServer.group.group.muteGroupMember:input_type -> OpenIMServer.group.MuteGroupMemberReq + 40, // 51: OpenIMServer.group.group.cancelMuteGroupMember:input_type -> OpenIMServer.group.CancelMuteGroupMemberReq + 42, // 52: OpenIMServer.group.group.muteGroup:input_type -> OpenIMServer.group.MuteGroupReq + 44, // 53: OpenIMServer.group.group.cancelMuteGroup:input_type -> OpenIMServer.group.CancelMuteGroupReq + 46, // 54: OpenIMServer.group.group.getJoinedSuperGroupList:input_type -> OpenIMServer.group.GetJoinedSuperGroupListReq + 48, // 55: OpenIMServer.group.group.getSuperGroupsInfo:input_type -> OpenIMServer.group.GetSuperGroupsInfoReq + 51, // 56: OpenIMServer.group.group.setGroupMemberInfo:input_type -> OpenIMServer.group.SetGroupMemberInfoReq + 53, // 57: OpenIMServer.group.group.getGroupAbstractInfo:input_type -> OpenIMServer.group.GetGroupAbstractInfoReq + 56, // 58: OpenIMServer.group.group.getUserInGroupMembers:input_type -> OpenIMServer.group.GetUserInGroupMembersReq + 58, // 59: OpenIMServer.group.group.getGroupMemberUserIDs:input_type -> OpenIMServer.group.GetGroupMemberUserIDsReq + 60, // 60: OpenIMServer.group.group.GetGroupMemberRoleLevel:input_type -> OpenIMServer.group.GetGroupMemberRoleLevelReq + 62, // 61: OpenIMServer.group.group.GetGroupInfoCache:input_type -> OpenIMServer.group.GetGroupInfoCacheReq + 64, // 62: OpenIMServer.group.group.GetGroupMemberCache:input_type -> OpenIMServer.group.GetGroupMemberCacheReq + 66, // 63: OpenIMServer.group.group.GroupCreateCount:input_type -> OpenIMServer.group.GroupCreateCountReq + 1, // 64: OpenIMServer.group.group.createGroup:output_type -> OpenIMServer.group.CreateGroupResp + 13, // 65: OpenIMServer.group.group.joinGroup:output_type -> OpenIMServer.group.JoinGroupResp + 17, // 66: OpenIMServer.group.group.quitGroup:output_type -> OpenIMServer.group.QuitGroupResp + 3, // 67: OpenIMServer.group.group.getGroupsInfo:output_type -> OpenIMServer.group.GetGroupsInfoResp + 5, // 68: OpenIMServer.group.group.setGroupInfo:output_type -> OpenIMServer.group.SetGroupInfoResp + 7, // 69: OpenIMServer.group.group.getGroupApplicationList:output_type -> OpenIMServer.group.GetGroupApplicationListResp + 9, // 70: OpenIMServer.group.group.getUserReqApplicationList:output_type -> OpenIMServer.group.GetUserReqApplicationListResp + 11, // 71: OpenIMServer.group.group.transferGroupOwner:output_type -> OpenIMServer.group.TransferGroupOwnerResp + 15, // 72: OpenIMServer.group.group.groupApplicationResponse:output_type -> OpenIMServer.group.GroupApplicationResponseResp + 19, // 73: OpenIMServer.group.group.getGroupMemberList:output_type -> OpenIMServer.group.GetGroupMemberListResp + 21, // 74: OpenIMServer.group.group.getGroupMembersInfo:output_type -> OpenIMServer.group.GetGroupMembersInfoResp + 23, // 75: OpenIMServer.group.group.kickGroupMember:output_type -> OpenIMServer.group.KickGroupMemberResp + 25, // 76: OpenIMServer.group.group.getJoinedGroupList:output_type -> OpenIMServer.group.GetJoinedGroupListResp + 27, // 77: OpenIMServer.group.group.inviteUserToGroup:output_type -> OpenIMServer.group.InviteUserToGroupResp + 32, // 78: OpenIMServer.group.group.getGroups:output_type -> OpenIMServer.group.GetGroupsResp + 35, // 79: OpenIMServer.group.group.getGroupMembersCMS:output_type -> OpenIMServer.group.GetGroupMembersCMSResp + 37, // 80: OpenIMServer.group.group.dismissGroup:output_type -> OpenIMServer.group.DismissGroupResp + 39, // 81: OpenIMServer.group.group.muteGroupMember:output_type -> OpenIMServer.group.MuteGroupMemberResp + 41, // 82: OpenIMServer.group.group.cancelMuteGroupMember:output_type -> OpenIMServer.group.CancelMuteGroupMemberResp + 43, // 83: OpenIMServer.group.group.muteGroup:output_type -> OpenIMServer.group.MuteGroupResp + 45, // 84: OpenIMServer.group.group.cancelMuteGroup:output_type -> OpenIMServer.group.CancelMuteGroupResp + 47, // 85: OpenIMServer.group.group.getJoinedSuperGroupList:output_type -> OpenIMServer.group.GetJoinedSuperGroupListResp + 49, // 86: OpenIMServer.group.group.getSuperGroupsInfo:output_type -> OpenIMServer.group.GetSuperGroupsInfoResp + 52, // 87: OpenIMServer.group.group.setGroupMemberInfo:output_type -> OpenIMServer.group.SetGroupMemberInfoResp + 55, // 88: OpenIMServer.group.group.getGroupAbstractInfo:output_type -> OpenIMServer.group.GetGroupAbstractInfoResp + 57, // 89: OpenIMServer.group.group.getUserInGroupMembers:output_type -> OpenIMServer.group.GetUserInGroupMembersResp + 59, // 90: OpenIMServer.group.group.getGroupMemberUserIDs:output_type -> OpenIMServer.group.GetGroupMemberUserIDsResp + 61, // 91: OpenIMServer.group.group.GetGroupMemberRoleLevel:output_type -> OpenIMServer.group.GetGroupMemberRoleLevelResp + 63, // 92: OpenIMServer.group.group.GetGroupInfoCache:output_type -> OpenIMServer.group.GetGroupInfoCacheResp + 65, // 93: OpenIMServer.group.group.GetGroupMemberCache:output_type -> OpenIMServer.group.GetGroupMemberCacheResp + 67, // 94: OpenIMServer.group.group.GroupCreateCount:output_type -> OpenIMServer.group.GroupCreateCountResp + 64, // [64:95] is the sub-list for method output_type + 33, // [33:64] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_group_group_proto_init() } @@ -4957,6 +5104,30 @@ func file_group_group_proto_init() { return nil } } + file_group_group_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupCreateCountReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_group_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupCreateCountResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -4964,7 +5135,7 @@ func file_group_group_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_group_group_proto_rawDesc, NumEnums: 0, - NumMessages: 66, + NumMessages: 69, NumExtensions: 0, NumServices: 1, }, @@ -5047,6 +5218,7 @@ type GroupClient interface { GetGroupMemberRoleLevel(ctx context.Context, in *GetGroupMemberRoleLevelReq, opts ...grpc.CallOption) (*GetGroupMemberRoleLevelResp, error) GetGroupInfoCache(ctx context.Context, in *GetGroupInfoCacheReq, opts ...grpc.CallOption) (*GetGroupInfoCacheResp, error) GetGroupMemberCache(ctx context.Context, in *GetGroupMemberCacheReq, opts ...grpc.CallOption) (*GetGroupMemberCacheResp, error) + GroupCreateCount(ctx context.Context, in *GroupCreateCountReq, opts ...grpc.CallOption) (*GroupCreateCountResp, error) } type groupClient struct { @@ -5327,6 +5499,15 @@ func (c *groupClient) GetGroupMemberCache(ctx context.Context, in *GetGroupMembe return out, nil } +func (c *groupClient) GroupCreateCount(ctx context.Context, in *GroupCreateCountReq, opts ...grpc.CallOption) (*GroupCreateCountResp, error) { + out := new(GroupCreateCountResp) + err := c.cc.Invoke(ctx, "/OpenIMServer.group.group/GroupCreateCount", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // GroupServer is the server API for Group service. type GroupServer interface { // 创建群 @@ -5386,6 +5567,7 @@ type GroupServer interface { GetGroupMemberRoleLevel(context.Context, *GetGroupMemberRoleLevelReq) (*GetGroupMemberRoleLevelResp, error) GetGroupInfoCache(context.Context, *GetGroupInfoCacheReq) (*GetGroupInfoCacheResp, error) GetGroupMemberCache(context.Context, *GetGroupMemberCacheReq) (*GetGroupMemberCacheResp, error) + GroupCreateCount(context.Context, *GroupCreateCountReq) (*GroupCreateCountResp, error) } // UnimplementedGroupServer can be embedded to have forward compatible implementations. @@ -5482,6 +5664,9 @@ func (*UnimplementedGroupServer) GetGroupInfoCache(context.Context, *GetGroupInf func (*UnimplementedGroupServer) GetGroupMemberCache(context.Context, *GetGroupMemberCacheReq) (*GetGroupMemberCacheResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetGroupMemberCache not implemented") } +func (*UnimplementedGroupServer) GroupCreateCount(context.Context, *GroupCreateCountReq) (*GroupCreateCountResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GroupCreateCount not implemented") +} func RegisterGroupServer(s *grpc.Server, srv GroupServer) { s.RegisterService(&_Group_serviceDesc, srv) @@ -6027,6 +6212,24 @@ func _Group_GetGroupMemberCache_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Group_GroupCreateCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GroupCreateCountReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServer).GroupCreateCount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/OpenIMServer.group.group/GroupCreateCount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServer).GroupCreateCount(ctx, req.(*GroupCreateCountReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Group_serviceDesc = grpc.ServiceDesc{ ServiceName: "OpenIMServer.group.group", HandlerType: (*GroupServer)(nil), @@ -6151,6 +6354,10 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "GetGroupMemberCache", Handler: _Group_GetGroupMemberCache_Handler, }, + { + MethodName: "GroupCreateCount", + Handler: _Group_GroupCreateCount_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "group/group.proto", diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index 9d02f58f7..9379ebe86 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -332,6 +332,17 @@ message GetGroupMemberCacheResp { sdkws.GroupMemberFullInfo member = 1; } +message GroupCreateCountReq { + int64 start = 1; + int64 end = 2; +} + +message GroupCreateCountResp { + int64 total = 1; + int64 before = 2; + map count = 3; +} + service group{ //创建群 rpc createGroup(CreateGroupReq) returns(CreateGroupResp); @@ -394,6 +405,8 @@ service group{ rpc GetGroupInfoCache(GetGroupInfoCacheReq) returns (GetGroupInfoCacheResp); rpc GetGroupMemberCache(GetGroupMemberCacheReq) returns (GetGroupMemberCacheResp); + + rpc GroupCreateCount(GroupCreateCountReq) returns (GroupCreateCountResp); } diff --git a/pkg/proto/msg/msg.pb.go b/pkg/proto/msg/msg.pb.go index f52af2b63..2686704cc 100644 --- a/pkg/proto/msg/msg.pb.go +++ b/pkg/proto/msg/msg.pb.go @@ -8,17 +8,14 @@ package msg import ( context "context" - reflect "reflect" - sync "sync" - + sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" - wrapperspb "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/wrapperspb" + reflect "reflect" + sync "sync" ) const ( @@ -630,866 +627,6 @@ func (x *GetSendMsgStatusResp) GetStatus() int32 { return 0 } -type ModifyMessageReactionExtensionsReq 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 *ModifyMessageReactionExtensionsReq) Reset() { - *x = ModifyMessageReactionExtensionsReq{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyMessageReactionExtensionsReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyMessageReactionExtensionsReq) ProtoMessage() {} - -func (x *ModifyMessageReactionExtensionsReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[12] - 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 ModifyMessageReactionExtensionsReq.ProtoReflect.Descriptor instead. -func (*ModifyMessageReactionExtensionsReq) 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 { - if x != nil { - return x.ReactionExtensions - } - return nil -} - -func (x *ModifyMessageReactionExtensionsReq) GetClientMsgID() string { - if x != nil { - return x.ClientMsgID - } - 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 { - 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{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetMessageReactionExtensionsReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetMessageReactionExtensionsReq) ProtoMessage() {} - -func (x *SetMessageReactionExtensionsReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_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 mi.MessageOf(x) -} - -// Deprecated: Use SetMessageReactionExtensionsReq.ProtoReflect.Descriptor instead. -func (*SetMessageReactionExtensionsReq) 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 { - 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{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetMessageReactionExtensionsResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetMessageReactionExtensionsResp) ProtoMessage() {} - -func (x *SetMessageReactionExtensionsResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[14] - 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 SetMessageReactionExtensionsResp.ProtoReflect.Descriptor instead. -func (*SetMessageReactionExtensionsResp) 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 { - 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"` -} - -func (x *GetMessagesReactionExtensionsReq) Reset() { - *x = GetMessagesReactionExtensionsReq{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetMessagesReactionExtensionsReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetMessagesReactionExtensionsReq) ProtoMessage() {} - -func (x *GetMessagesReactionExtensionsReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[15] - 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.ProtoReflect.Descriptor instead. -func (*GetMessagesReactionExtensionsReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{15} -} - -func (x *GetMessagesReactionExtensionsReq) GetConversationID() string { - if x != nil { - return x.ConversationID - } - return "" -} - -func (x *GetMessagesReactionExtensionsReq) GetSessionType() int32 { - if x != nil { - return x.SessionType - } - return 0 -} - -func (x *GetMessagesReactionExtensionsReq) GetMessageReactionKeys() []*GetMessagesReactionExtensionsReq_MessageReactionKey { - if x != nil { - return x.MessageReactionKeys - } - return nil -} - -func (x *GetMessagesReactionExtensionsReq) GetTypeKeys() []string { - if x != nil { - return x.TypeKeys - } - return nil -} - -type GetMessagesReactionExtensionsResp 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{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetMessagesReactionExtensionsResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetMessagesReactionExtensionsResp) ProtoMessage() {} - -func (x *GetMessagesReactionExtensionsResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[16] - 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 GetMessagesReactionExtensionsResp.ProtoReflect.Descriptor instead. -func (*GetMessagesReactionExtensionsResp) 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 { - 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"` -} - -func (x *SingleMessageExtensionResult) Reset() { - *x = SingleMessageExtensionResult{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SingleMessageExtensionResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SingleMessageExtensionResult) ProtoMessage() {} - -func (x *SingleMessageExtensionResult) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[17] - 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 SingleMessageExtensionResult.ProtoReflect.Descriptor instead. -func (*SingleMessageExtensionResult) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{17} -} - -func (x *SingleMessageExtensionResult) GetReactionExtensions() map[string]*sdkws.KeyValue { - if x != nil { - return x.ReactionExtensions - } - return nil -} - -func (x *SingleMessageExtensionResult) GetClientMsgID() string { - if x != nil { - return x.ClientMsgID - } - return "" -} - -type ModifyMessageReactionExtensionsResp 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{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyMessageReactionExtensionsResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyMessageReactionExtensionsResp) ProtoMessage() {} - -func (x *ModifyMessageReactionExtensionsResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[18] - 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 ModifyMessageReactionExtensionsResp.ProtoReflect.Descriptor instead. -func (*ModifyMessageReactionExtensionsResp) 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 { - 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"` -} - -func (x *DeleteMessagesReactionExtensionsReq) Reset() { - *x = DeleteMessagesReactionExtensionsReq{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteMessagesReactionExtensionsReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteMessagesReactionExtensionsReq) ProtoMessage() {} - -func (x *DeleteMessagesReactionExtensionsReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[19] - 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 DeleteMessagesReactionExtensionsReq.ProtoReflect.Descriptor instead. -func (*DeleteMessagesReactionExtensionsReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{19} -} - -func (x *DeleteMessagesReactionExtensionsReq) GetOperationID() string { - if x != nil { - return x.OperationID - } - return "" -} - -func (x *DeleteMessagesReactionExtensionsReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -func (x *DeleteMessagesReactionExtensionsReq) GetConversationID() string { - if x != nil { - return x.ConversationID - } - return "" -} - -func (x *DeleteMessagesReactionExtensionsReq) GetSessionType() int32 { - if x != nil { - return x.SessionType - } - return 0 -} - -func (x *DeleteMessagesReactionExtensionsReq) GetClientMsgID() string { - if x != nil { - return x.ClientMsgID - } - return "" -} - -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{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteMessagesReactionExtensionsResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteMessagesReactionExtensionsResp) ProtoMessage() {} - -func (x *DeleteMessagesReactionExtensionsResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[20] - 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 DeleteMessagesReactionExtensionsResp.ProtoReflect.Descriptor instead. -func (*DeleteMessagesReactionExtensionsResp) 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 { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ExtendMsg *ExtendMsg `protobuf:"bytes,1,opt,name=extendMsg,proto3" json:"extendMsg"` -} - -func (x *ExtendMsgResp) Reset() { - *x = ExtendMsgResp{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExtendMsgResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExtendMsgResp) ProtoMessage() {} - -func (x *ExtendMsgResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[21] - 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 ExtendMsgResp.ProtoReflect.Descriptor instead. -func (*ExtendMsgResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{21} -} - -func (x *ExtendMsgResp) GetExtendMsg() *ExtendMsg { - if x != nil { - return x.ExtendMsg - } - return nil -} - -type ExtendMsg 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{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[22] - 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_msg_msg_proto_msgTypes[22] - 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_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 { - 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"` -} - -func (x *KeyValueResp) Reset() { - *x = KeyValueResp{} - if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeyValueResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeyValueResp) ProtoMessage() {} - -func (x *KeyValueResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[23] - 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 KeyValueResp.ProtoReflect.Descriptor instead. -func (*KeyValueResp) 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 { - if x != nil { - return x.ErrCode - } - return 0 -} - -func (x *KeyValueResp) GetErrMsg() string { - if x != nil { - return x.ErrMsg - } - return "" -} - type MsgDataToModifyByMQ struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1502,7 +639,7 @@ type MsgDataToModifyByMQ struct { func (x *MsgDataToModifyByMQ) Reset() { *x = MsgDataToModifyByMQ{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[24] + mi := &file_msg_msg_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1515,7 +652,7 @@ func (x *MsgDataToModifyByMQ) String() string { func (*MsgDataToModifyByMQ) ProtoMessage() {} func (x *MsgDataToModifyByMQ) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[24] + mi := &file_msg_msg_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1528,7 +665,7 @@ func (x *MsgDataToModifyByMQ) ProtoReflect() protoreflect.Message { // Deprecated: Use MsgDataToModifyByMQ.ProtoReflect.Descriptor instead. func (*MsgDataToModifyByMQ) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{24} + return file_msg_msg_proto_rawDescGZIP(), []int{12} } func (x *MsgDataToModifyByMQ) GetMessages() []*sdkws.MsgData { @@ -1554,7 +691,7 @@ type DelMsgsReq struct { func (x *DelMsgsReq) Reset() { *x = DelMsgsReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[25] + mi := &file_msg_msg_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1567,7 +704,7 @@ func (x *DelMsgsReq) String() string { func (*DelMsgsReq) ProtoMessage() {} func (x *DelMsgsReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[25] + mi := &file_msg_msg_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1580,7 +717,7 @@ func (x *DelMsgsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DelMsgsReq.ProtoReflect.Descriptor instead. func (*DelMsgsReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{25} + return file_msg_msg_proto_rawDescGZIP(), []int{13} } type DelMsgsResp struct { @@ -1592,7 +729,7 @@ type DelMsgsResp struct { func (x *DelMsgsResp) Reset() { *x = DelMsgsResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[26] + mi := &file_msg_msg_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1605,7 +742,7 @@ func (x *DelMsgsResp) String() string { func (*DelMsgsResp) ProtoMessage() {} func (x *DelMsgsResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[26] + mi := &file_msg_msg_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1618,7 +755,7 @@ func (x *DelMsgsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use DelMsgsResp.ProtoReflect.Descriptor instead. func (*DelMsgsResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{26} + return file_msg_msg_proto_rawDescGZIP(), []int{14} } type RevokeMsgReq struct { @@ -1634,7 +771,7 @@ type RevokeMsgReq struct { func (x *RevokeMsgReq) Reset() { *x = RevokeMsgReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[27] + mi := &file_msg_msg_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1647,7 +784,7 @@ func (x *RevokeMsgReq) String() string { func (*RevokeMsgReq) ProtoMessage() {} func (x *RevokeMsgReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[27] + mi := &file_msg_msg_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1660,7 +797,7 @@ func (x *RevokeMsgReq) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeMsgReq.ProtoReflect.Descriptor instead. func (*RevokeMsgReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{27} + return file_msg_msg_proto_rawDescGZIP(), []int{15} } func (x *RevokeMsgReq) GetConversationID() string { @@ -1693,7 +830,7 @@ type RevokeMsgResp struct { func (x *RevokeMsgResp) Reset() { *x = RevokeMsgResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[28] + mi := &file_msg_msg_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1706,7 +843,7 @@ func (x *RevokeMsgResp) String() string { func (*RevokeMsgResp) ProtoMessage() {} func (x *RevokeMsgResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[28] + mi := &file_msg_msg_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1719,7 +856,7 @@ func (x *RevokeMsgResp) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeMsgResp.ProtoReflect.Descriptor instead. func (*RevokeMsgResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{28} + return file_msg_msg_proto_rawDescGZIP(), []int{16} } type MarkMsgsAsReadReq struct { @@ -1735,7 +872,7 @@ type MarkMsgsAsReadReq struct { func (x *MarkMsgsAsReadReq) Reset() { *x = MarkMsgsAsReadReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[29] + mi := &file_msg_msg_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1748,7 +885,7 @@ func (x *MarkMsgsAsReadReq) String() string { func (*MarkMsgsAsReadReq) ProtoMessage() {} func (x *MarkMsgsAsReadReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[29] + mi := &file_msg_msg_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1761,7 +898,7 @@ func (x *MarkMsgsAsReadReq) ProtoReflect() protoreflect.Message { // Deprecated: Use MarkMsgsAsReadReq.ProtoReflect.Descriptor instead. func (*MarkMsgsAsReadReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{29} + return file_msg_msg_proto_rawDescGZIP(), []int{17} } func (x *MarkMsgsAsReadReq) GetConversationID() string { @@ -1794,7 +931,7 @@ type MarkMsgsAsReadResp struct { func (x *MarkMsgsAsReadResp) Reset() { *x = MarkMsgsAsReadResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[30] + mi := &file_msg_msg_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1807,7 +944,7 @@ func (x *MarkMsgsAsReadResp) String() string { func (*MarkMsgsAsReadResp) ProtoMessage() {} func (x *MarkMsgsAsReadResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[30] + mi := &file_msg_msg_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1820,7 +957,7 @@ func (x *MarkMsgsAsReadResp) ProtoReflect() protoreflect.Message { // Deprecated: Use MarkMsgsAsReadResp.ProtoReflect.Descriptor instead. func (*MarkMsgsAsReadResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{30} + return file_msg_msg_proto_rawDescGZIP(), []int{18} } type MarkConversationAsReadReq struct { @@ -1837,7 +974,7 @@ type MarkConversationAsReadReq struct { func (x *MarkConversationAsReadReq) Reset() { *x = MarkConversationAsReadReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[31] + mi := &file_msg_msg_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1850,7 +987,7 @@ func (x *MarkConversationAsReadReq) String() string { func (*MarkConversationAsReadReq) ProtoMessage() {} func (x *MarkConversationAsReadReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[31] + mi := &file_msg_msg_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1863,7 +1000,7 @@ func (x *MarkConversationAsReadReq) ProtoReflect() protoreflect.Message { // Deprecated: Use MarkConversationAsReadReq.ProtoReflect.Descriptor instead. func (*MarkConversationAsReadReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{31} + return file_msg_msg_proto_rawDescGZIP(), []int{19} } func (x *MarkConversationAsReadReq) GetConversationID() string { @@ -1903,7 +1040,7 @@ type MarkConversationAsReadResp struct { func (x *MarkConversationAsReadResp) Reset() { *x = MarkConversationAsReadResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[32] + mi := &file_msg_msg_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1916,7 +1053,7 @@ func (x *MarkConversationAsReadResp) String() string { func (*MarkConversationAsReadResp) ProtoMessage() {} func (x *MarkConversationAsReadResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[32] + mi := &file_msg_msg_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1929,7 +1066,7 @@ func (x *MarkConversationAsReadResp) ProtoReflect() protoreflect.Message { // Deprecated: Use MarkConversationAsReadResp.ProtoReflect.Descriptor instead. func (*MarkConversationAsReadResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{32} + return file_msg_msg_proto_rawDescGZIP(), []int{20} } type SetConversationHasReadSeqReq struct { @@ -1945,7 +1082,7 @@ type SetConversationHasReadSeqReq struct { func (x *SetConversationHasReadSeqReq) Reset() { *x = SetConversationHasReadSeqReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[33] + mi := &file_msg_msg_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1958,7 +1095,7 @@ func (x *SetConversationHasReadSeqReq) String() string { func (*SetConversationHasReadSeqReq) ProtoMessage() {} func (x *SetConversationHasReadSeqReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[33] + mi := &file_msg_msg_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1971,7 +1108,7 @@ func (x *SetConversationHasReadSeqReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationHasReadSeqReq.ProtoReflect.Descriptor instead. func (*SetConversationHasReadSeqReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{33} + return file_msg_msg_proto_rawDescGZIP(), []int{21} } func (x *SetConversationHasReadSeqReq) GetConversationID() string { @@ -2004,7 +1141,7 @@ type SetConversationHasReadSeqResp struct { func (x *SetConversationHasReadSeqResp) Reset() { *x = SetConversationHasReadSeqResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[34] + mi := &file_msg_msg_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2017,7 +1154,7 @@ func (x *SetConversationHasReadSeqResp) String() string { func (*SetConversationHasReadSeqResp) ProtoMessage() {} func (x *SetConversationHasReadSeqResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[34] + mi := &file_msg_msg_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2030,7 +1167,7 @@ func (x *SetConversationHasReadSeqResp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConversationHasReadSeqResp.ProtoReflect.Descriptor instead. func (*SetConversationHasReadSeqResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{34} + return file_msg_msg_proto_rawDescGZIP(), []int{22} } type DeleteSyncOpt struct { @@ -2045,7 +1182,7 @@ type DeleteSyncOpt struct { func (x *DeleteSyncOpt) Reset() { *x = DeleteSyncOpt{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[35] + mi := &file_msg_msg_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2058,7 +1195,7 @@ func (x *DeleteSyncOpt) String() string { func (*DeleteSyncOpt) ProtoMessage() {} func (x *DeleteSyncOpt) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[35] + mi := &file_msg_msg_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2071,7 +1208,7 @@ func (x *DeleteSyncOpt) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteSyncOpt.ProtoReflect.Descriptor instead. func (*DeleteSyncOpt) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{35} + return file_msg_msg_proto_rawDescGZIP(), []int{23} } func (x *DeleteSyncOpt) GetIsSyncSelf() bool { @@ -2101,7 +1238,7 @@ type ClearConversationsMsgReq struct { func (x *ClearConversationsMsgReq) Reset() { *x = ClearConversationsMsgReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[36] + mi := &file_msg_msg_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2114,7 +1251,7 @@ func (x *ClearConversationsMsgReq) String() string { func (*ClearConversationsMsgReq) ProtoMessage() {} func (x *ClearConversationsMsgReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[36] + mi := &file_msg_msg_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2127,7 +1264,7 @@ func (x *ClearConversationsMsgReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ClearConversationsMsgReq.ProtoReflect.Descriptor instead. func (*ClearConversationsMsgReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{36} + return file_msg_msg_proto_rawDescGZIP(), []int{24} } func (x *ClearConversationsMsgReq) GetConversationIDs() []string { @@ -2160,7 +1297,7 @@ type ClearConversationsMsgResp struct { func (x *ClearConversationsMsgResp) Reset() { *x = ClearConversationsMsgResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[37] + mi := &file_msg_msg_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2173,7 +1310,7 @@ func (x *ClearConversationsMsgResp) String() string { func (*ClearConversationsMsgResp) ProtoMessage() {} func (x *ClearConversationsMsgResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[37] + mi := &file_msg_msg_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2186,7 +1323,7 @@ func (x *ClearConversationsMsgResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ClearConversationsMsgResp.ProtoReflect.Descriptor instead. func (*ClearConversationsMsgResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{37} + return file_msg_msg_proto_rawDescGZIP(), []int{25} } type UserClearAllMsgReq struct { @@ -2201,7 +1338,7 @@ type UserClearAllMsgReq struct { func (x *UserClearAllMsgReq) Reset() { *x = UserClearAllMsgReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[38] + mi := &file_msg_msg_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2214,7 +1351,7 @@ func (x *UserClearAllMsgReq) String() string { func (*UserClearAllMsgReq) ProtoMessage() {} func (x *UserClearAllMsgReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[38] + mi := &file_msg_msg_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2227,7 +1364,7 @@ func (x *UserClearAllMsgReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UserClearAllMsgReq.ProtoReflect.Descriptor instead. func (*UserClearAllMsgReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{38} + return file_msg_msg_proto_rawDescGZIP(), []int{26} } func (x *UserClearAllMsgReq) GetUserID() string { @@ -2253,7 +1390,7 @@ type UserClearAllMsgResp struct { func (x *UserClearAllMsgResp) Reset() { *x = UserClearAllMsgResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[39] + mi := &file_msg_msg_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2266,7 +1403,7 @@ func (x *UserClearAllMsgResp) String() string { func (*UserClearAllMsgResp) ProtoMessage() {} func (x *UserClearAllMsgResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[39] + mi := &file_msg_msg_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2279,7 +1416,7 @@ func (x *UserClearAllMsgResp) ProtoReflect() protoreflect.Message { // Deprecated: Use UserClearAllMsgResp.ProtoReflect.Descriptor instead. func (*UserClearAllMsgResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{39} + return file_msg_msg_proto_rawDescGZIP(), []int{27} } type DeleteMsgsReq struct { @@ -2296,7 +1433,7 @@ type DeleteMsgsReq struct { func (x *DeleteMsgsReq) Reset() { *x = DeleteMsgsReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[40] + mi := &file_msg_msg_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2309,7 +1446,7 @@ func (x *DeleteMsgsReq) String() string { func (*DeleteMsgsReq) ProtoMessage() {} func (x *DeleteMsgsReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[40] + mi := &file_msg_msg_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2322,7 +1459,7 @@ func (x *DeleteMsgsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMsgsReq.ProtoReflect.Descriptor instead. func (*DeleteMsgsReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{40} + return file_msg_msg_proto_rawDescGZIP(), []int{28} } func (x *DeleteMsgsReq) GetConversationID() string { @@ -2362,7 +1499,7 @@ type DeleteMsgsResp struct { func (x *DeleteMsgsResp) Reset() { *x = DeleteMsgsResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[41] + mi := &file_msg_msg_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2375,7 +1512,7 @@ func (x *DeleteMsgsResp) String() string { func (*DeleteMsgsResp) ProtoMessage() {} func (x *DeleteMsgsResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[41] + mi := &file_msg_msg_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2388,7 +1525,7 @@ func (x *DeleteMsgsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMsgsResp.ProtoReflect.Descriptor instead. func (*DeleteMsgsResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{41} + return file_msg_msg_proto_rawDescGZIP(), []int{29} } type DeleteMsgPhysicalReq struct { @@ -2403,7 +1540,7 @@ type DeleteMsgPhysicalReq struct { func (x *DeleteMsgPhysicalReq) Reset() { *x = DeleteMsgPhysicalReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[42] + mi := &file_msg_msg_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2416,7 +1553,7 @@ func (x *DeleteMsgPhysicalReq) String() string { func (*DeleteMsgPhysicalReq) ProtoMessage() {} func (x *DeleteMsgPhysicalReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[42] + mi := &file_msg_msg_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2429,7 +1566,7 @@ func (x *DeleteMsgPhysicalReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMsgPhysicalReq.ProtoReflect.Descriptor instead. func (*DeleteMsgPhysicalReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{42} + return file_msg_msg_proto_rawDescGZIP(), []int{30} } func (x *DeleteMsgPhysicalReq) GetConversationIDs() []string { @@ -2455,7 +1592,7 @@ type DeleteMsgPhysicalResp struct { func (x *DeleteMsgPhysicalResp) Reset() { *x = DeleteMsgPhysicalResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[43] + mi := &file_msg_msg_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2468,7 +1605,7 @@ func (x *DeleteMsgPhysicalResp) String() string { func (*DeleteMsgPhysicalResp) ProtoMessage() {} func (x *DeleteMsgPhysicalResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[43] + mi := &file_msg_msg_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2481,7 +1618,7 @@ func (x *DeleteMsgPhysicalResp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMsgPhysicalResp.ProtoReflect.Descriptor instead. func (*DeleteMsgPhysicalResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{43} + return file_msg_msg_proto_rawDescGZIP(), []int{31} } type DeleteMsgPhysicalBySeqReq struct { @@ -2496,7 +1633,7 @@ type DeleteMsgPhysicalBySeqReq struct { func (x *DeleteMsgPhysicalBySeqReq) Reset() { *x = DeleteMsgPhysicalBySeqReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[44] + mi := &file_msg_msg_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2509,7 +1646,7 @@ func (x *DeleteMsgPhysicalBySeqReq) String() string { func (*DeleteMsgPhysicalBySeqReq) ProtoMessage() {} func (x *DeleteMsgPhysicalBySeqReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[44] + mi := &file_msg_msg_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2522,7 +1659,7 @@ func (x *DeleteMsgPhysicalBySeqReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMsgPhysicalBySeqReq.ProtoReflect.Descriptor instead. func (*DeleteMsgPhysicalBySeqReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{44} + return file_msg_msg_proto_rawDescGZIP(), []int{32} } func (x *DeleteMsgPhysicalBySeqReq) GetConversationID() string { @@ -2548,7 +1685,7 @@ type DeleteMsgPhysicalBySeqResp struct { func (x *DeleteMsgPhysicalBySeqResp) Reset() { *x = DeleteMsgPhysicalBySeqResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[45] + mi := &file_msg_msg_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2561,7 +1698,7 @@ func (x *DeleteMsgPhysicalBySeqResp) String() string { func (*DeleteMsgPhysicalBySeqResp) ProtoMessage() {} func (x *DeleteMsgPhysicalBySeqResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[45] + mi := &file_msg_msg_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2574,7 +1711,7 @@ func (x *DeleteMsgPhysicalBySeqResp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMsgPhysicalBySeqResp.ProtoReflect.Descriptor instead. func (*DeleteMsgPhysicalBySeqResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{45} + return file_msg_msg_proto_rawDescGZIP(), []int{33} } type GetConversationMaxSeqReq struct { @@ -2588,7 +1725,7 @@ type GetConversationMaxSeqReq struct { func (x *GetConversationMaxSeqReq) Reset() { *x = GetConversationMaxSeqReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[46] + mi := &file_msg_msg_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2601,7 +1738,7 @@ func (x *GetConversationMaxSeqReq) String() string { func (*GetConversationMaxSeqReq) ProtoMessage() {} func (x *GetConversationMaxSeqReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[46] + mi := &file_msg_msg_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2614,7 +1751,7 @@ func (x *GetConversationMaxSeqReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationMaxSeqReq.ProtoReflect.Descriptor instead. func (*GetConversationMaxSeqReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{46} + return file_msg_msg_proto_rawDescGZIP(), []int{34} } func (x *GetConversationMaxSeqReq) GetConversationID() string { @@ -2635,7 +1772,7 @@ type GetConversationMaxSeqResp struct { func (x *GetConversationMaxSeqResp) Reset() { *x = GetConversationMaxSeqResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[47] + mi := &file_msg_msg_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2648,7 +1785,7 @@ func (x *GetConversationMaxSeqResp) String() string { func (*GetConversationMaxSeqResp) ProtoMessage() {} func (x *GetConversationMaxSeqResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[47] + mi := &file_msg_msg_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2661,7 +1798,7 @@ func (x *GetConversationMaxSeqResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationMaxSeqResp.ProtoReflect.Descriptor instead. func (*GetConversationMaxSeqResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{47} + return file_msg_msg_proto_rawDescGZIP(), []int{35} } func (x *GetConversationMaxSeqResp) GetMaxSeq() int64 { @@ -2682,7 +1819,7 @@ type GetConversationsHasReadAndMaxSeqReq struct { func (x *GetConversationsHasReadAndMaxSeqReq) Reset() { *x = GetConversationsHasReadAndMaxSeqReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[48] + mi := &file_msg_msg_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2695,7 +1832,7 @@ func (x *GetConversationsHasReadAndMaxSeqReq) String() string { func (*GetConversationsHasReadAndMaxSeqReq) ProtoMessage() {} func (x *GetConversationsHasReadAndMaxSeqReq) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[48] + mi := &file_msg_msg_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2708,7 +1845,7 @@ func (x *GetConversationsHasReadAndMaxSeqReq) ProtoReflect() protoreflect.Messag // Deprecated: Use GetConversationsHasReadAndMaxSeqReq.ProtoReflect.Descriptor instead. func (*GetConversationsHasReadAndMaxSeqReq) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{48} + return file_msg_msg_proto_rawDescGZIP(), []int{36} } func (x *GetConversationsHasReadAndMaxSeqReq) GetUserID() string { @@ -2730,7 +1867,7 @@ type Seqs struct { func (x *Seqs) Reset() { *x = Seqs{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[49] + mi := &file_msg_msg_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2743,7 +1880,7 @@ func (x *Seqs) String() string { func (*Seqs) ProtoMessage() {} func (x *Seqs) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[49] + mi := &file_msg_msg_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2756,7 +1893,7 @@ func (x *Seqs) ProtoReflect() protoreflect.Message { // Deprecated: Use Seqs.ProtoReflect.Descriptor instead. func (*Seqs) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{49} + return file_msg_msg_proto_rawDescGZIP(), []int{37} } func (x *Seqs) GetMaxSeq() int64 { @@ -2784,7 +1921,7 @@ type GetConversationsHasReadAndMaxSeqResp struct { func (x *GetConversationsHasReadAndMaxSeqResp) Reset() { *x = GetConversationsHasReadAndMaxSeqResp{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[50] + mi := &file_msg_msg_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2797,7 +1934,7 @@ func (x *GetConversationsHasReadAndMaxSeqResp) String() string { func (*GetConversationsHasReadAndMaxSeqResp) ProtoMessage() {} func (x *GetConversationsHasReadAndMaxSeqResp) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[50] + mi := &file_msg_msg_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2810,7 +1947,7 @@ func (x *GetConversationsHasReadAndMaxSeqResp) ProtoReflect() protoreflect.Messa // Deprecated: Use GetConversationsHasReadAndMaxSeqResp.ProtoReflect.Descriptor instead. func (*GetConversationsHasReadAndMaxSeqResp) Descriptor() ([]byte, []int) { - return file_msg_msg_proto_rawDescGZIP(), []int{50} + return file_msg_msg_proto_rawDescGZIP(), []int{38} } func (x *GetConversationsHasReadAndMaxSeqResp) GetSeqs() map[string]*Seqs { @@ -2820,32 +1957,35 @@ func (x *GetConversationsHasReadAndMaxSeqResp) GetSeqs() map[string]*Seqs { return nil } -type GetMessagesReactionExtensionsReq_MessageReactionKey struct { +type GetActiveUserReq 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"` + 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 *GetMessagesReactionExtensionsReq_MessageReactionKey) Reset() { - *x = GetMessagesReactionExtensionsReq_MessageReactionKey{} +func (x *GetActiveUserReq) Reset() { + *x = GetActiveUserReq{} if protoimpl.UnsafeEnabled { - mi := &file_msg_msg_proto_msgTypes[53] + mi := &file_msg_msg_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) String() string { +func (x *GetActiveUserReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetMessagesReactionExtensionsReq_MessageReactionKey) ProtoMessage() {} +func (*GetActiveUserReq) ProtoMessage() {} -func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) ProtoReflect() protoreflect.Message { - mi := &file_msg_msg_proto_msgTypes[53] +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 { @@ -2856,572 +1996,741 @@ func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) ProtoReflect() pro 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} +// Deprecated: Use GetActiveUserReq.ProtoReflect.Descriptor instead. +func (*GetActiveUserReq) Descriptor() ([]byte, []int) { + return file_msg_msg_proto_rawDescGZIP(), []int{39} } -func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) GetClientMsgID() string { +func (x *GetActiveUserReq) GetStart() int64 { if x != nil { - return x.ClientMsgID - } - return "" -} - -func (x *GetMessagesReactionExtensionsReq_MessageReactionKey) GetMsgFirstModifyTime() int64 { - if x != nil { - return x.MsgFirstModifyTime + return x.Start } return 0 } +func (x *GetActiveUserReq) GetEnd() int64 { + if x != nil { + 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 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[40] + 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[40] + 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{40} +} + +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[41] + 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[41] + 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 GetActiveUserResp.ProtoReflect.Descriptor instead. +func (*GetActiveUserResp) Descriptor() ([]byte, []int) { + return file_msg_msg_proto_rawDescGZIP(), []int{41} +} + +func (x *GetActiveUserResp) GetMsgCount() int64 { + if x != nil { + return x.MsgCount + } + return 0 +} + +func (x *GetActiveUserResp) GetUserCount() int64 { + if x != nil { + return x.UserCount + } + return 0 +} + +func (x *GetActiveUserResp) GetDateCount() map[string]int64 { + if x != nil { + return x.DateCount + } + return nil +} + +func (x *GetActiveUserResp) GetUsers() []*ActiveUser { + if x != nil { + return x.Users + } + return nil +} + +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 *GetActiveGroupReq) Reset() { + *x = GetActiveGroupReq{} + if protoimpl.UnsafeEnabled { + mi := &file_msg_msg_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetActiveGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetActiveGroupReq) ProtoMessage() {} + +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 { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetActiveGroupReq.ProtoReflect.Descriptor instead. +func (*GetActiveGroupReq) Descriptor() ([]byte, []int) { + return file_msg_msg_proto_rawDescGZIP(), []int{42} +} + +func (x *GetActiveGroupReq) GetStart() int64 { + if x != nil { + return x.Start + } + return 0 +} + +func (x *GetActiveGroupReq) GetEnd() int64 { + if x != nil { + return x.End + } + return 0 +} + +func (x *GetActiveGroupReq) GetAse() bool { + if x != nil { + return x.Ase + } + return false +} + +func (x *GetActiveGroupReq) GetPagination() *sdkws.RequestPagination { + 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[43] + 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[43] + 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 ActiveGroup.ProtoReflect.Descriptor instead. +func (*ActiveGroup) Descriptor() ([]byte, []int) { + return file_msg_msg_proto_rawDescGZIP(), []int{43} +} + +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 + + 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 *GetActiveGroupResp) Reset() { + *x = GetActiveGroupResp{} + if protoimpl.UnsafeEnabled { + mi := &file_msg_msg_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetActiveGroupResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetActiveGroupResp) ProtoMessage() {} + +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)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetActiveGroupResp.ProtoReflect.Descriptor instead. +func (*GetActiveGroupResp) Descriptor() ([]byte, []int) { + return file_msg_msg_proto_rawDescGZIP(), []int{44} +} + +func (x *GetActiveGroupResp) GetMsgCount() int64 { + if x != nil { + return x.MsgCount + } + return 0 +} + +func (x *GetActiveGroupResp) GetGroupCount() int64 { + if x != nil { + return x.GroupCount + } + 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 +} + 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, - 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, - 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, + 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, - 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, + 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, + 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, 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, 0x32, 0xa5, 0x11, 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, + 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, 0x32, 0xa8, 0x0e, 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, 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, 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, + 0x53, 0x65, 0x71, 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, 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, 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, + 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, 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, 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, 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, + 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, 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, 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, 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, + 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, 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, 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, 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 ( @@ -3436,7 +2745,7 @@ func file_msg_msg_proto_rawDescGZIP() []byte { return file_msg_msg_proto_rawDescData } -var file_msg_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 57) +var file_msg_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 48) var file_msg_msg_proto_goTypes = []interface{}{ (*MsgDataToMQ)(nil), // 0: OpenIMServer.msg.MsgDataToMQ (*MsgDataToDB)(nil), // 1: OpenIMServer.msg.MsgDataToDB @@ -3450,137 +2759,112 @@ var file_msg_msg_proto_goTypes = []interface{}{ (*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 - nil, // 51: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ReactionExtensionsEntry - nil, // 52: OpenIMServer.msg.SetMessageReactionExtensionsReq.ReactionExtensionsEntry - (*GetMessagesReactionExtensionsReq_MessageReactionKey)(nil), // 53: OpenIMServer.msg.GetMessagesReactionExtensionsReq.MessageReactionKey - nil, // 54: OpenIMServer.msg.SingleMessageExtensionResult.ReactionExtensionsEntry - nil, // 55: OpenIMServer.msg.ExtendMsg.ReactionExtensionsEntry - nil, // 56: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry - (*sdkws.MsgData)(nil), // 57: OpenIMServer.sdkws.MsgData - (*wrapperspb.StringValue)(nil), // 58: OpenIMServer.protobuf.StringValue - (*sdkws.KeyValue)(nil), // 59: OpenIMServer.sdkws.KeyValue - (*sdkws.GetMaxSeqReq)(nil), // 60: OpenIMServer.sdkws.GetMaxSeqReq - (*sdkws.PullMessageBySeqsReq)(nil), // 61: OpenIMServer.sdkws.PullMessageBySeqsReq - (*sdkws.GetMaxSeqResp)(nil), // 62: OpenIMServer.sdkws.GetMaxSeqResp - (*sdkws.PullMessageBySeqsResp)(nil), // 63: OpenIMServer.sdkws.PullMessageBySeqsResp + (*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 + nil, // 45: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry + nil, // 46: OpenIMServer.msg.GetActiveUserResp.DateCountEntry + nil, // 47: OpenIMServer.msg.GetActiveGroupResp.DateCountEntry + (*sdkws.MsgData)(nil), // 48: OpenIMServer.sdkws.MsgData + (*sdkws.RequestPagination)(nil), // 49: OpenIMServer.sdkws.RequestPagination + (*sdkws.UserInfo)(nil), // 50: OpenIMServer.sdkws.UserInfo + (*sdkws.GroupInfo)(nil), // 51: OpenIMServer.sdkws.GroupInfo + (*sdkws.GetMaxSeqReq)(nil), // 52: OpenIMServer.sdkws.GetMaxSeqReq + (*sdkws.PullMessageBySeqsReq)(nil), // 53: OpenIMServer.sdkws.PullMessageBySeqsReq + (*sdkws.GetMaxSeqResp)(nil), // 54: OpenIMServer.sdkws.GetMaxSeqResp + (*sdkws.PullMessageBySeqsResp)(nil), // 55: OpenIMServer.sdkws.PullMessageBySeqsResp } var file_msg_msg_proto_depIdxs = []int32{ - 57, // 0: OpenIMServer.msg.MsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData - 57, // 1: OpenIMServer.msg.MsgDataToDB.msgData:type_name -> OpenIMServer.sdkws.MsgData - 57, // 2: OpenIMServer.msg.PushMsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData - 57, // 3: OpenIMServer.msg.MsgDataToMongoByMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData - 57, // 4: OpenIMServer.msg.SendMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData - 51, // 5: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.reactionExtensions:type_name -> OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ReactionExtensionsEntry - 58, // 6: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ex:type_name -> OpenIMServer.protobuf.StringValue - 58, // 7: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.attachedInfo:type_name -> OpenIMServer.protobuf.StringValue - 52, // 8: OpenIMServer.msg.SetMessageReactionExtensionsReq.reactionExtensions:type_name -> OpenIMServer.msg.SetMessageReactionExtensionsReq.ReactionExtensionsEntry - 58, // 9: OpenIMServer.msg.SetMessageReactionExtensionsReq.ex:type_name -> OpenIMServer.protobuf.StringValue - 58, // 10: OpenIMServer.msg.SetMessageReactionExtensionsReq.attachedInfo:type_name -> OpenIMServer.protobuf.StringValue - 23, // 11: OpenIMServer.msg.SetMessageReactionExtensionsResp.result:type_name -> OpenIMServer.msg.KeyValueResp - 53, // 12: OpenIMServer.msg.GetMessagesReactionExtensionsReq.messageReactionKeys:type_name -> OpenIMServer.msg.GetMessagesReactionExtensionsReq.MessageReactionKey - 17, // 13: OpenIMServer.msg.GetMessagesReactionExtensionsResp.singleMessageResult:type_name -> OpenIMServer.msg.SingleMessageExtensionResult - 54, // 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 - 59, // 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 - 55, // 20: OpenIMServer.msg.ExtendMsg.reactionExtensions:type_name -> OpenIMServer.msg.ExtendMsg.ReactionExtensionsEntry - 59, // 21: OpenIMServer.msg.KeyValueResp.keyValue:type_name -> OpenIMServer.sdkws.KeyValue - 57, // 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 - 56, // 26: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.seqs:type_name -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry - 59, // 27: OpenIMServer.msg.ModifyMessageReactionExtensionsReq.ReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue - 59, // 28: OpenIMServer.msg.SetMessageReactionExtensionsReq.ReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue - 59, // 29: OpenIMServer.msg.SingleMessageExtensionResult.ReactionExtensionsEntry.value:type_name -> OpenIMServer.sdkws.KeyValue - 23, // 30: OpenIMServer.msg.ExtendMsg.ReactionExtensionsEntry.value:type_name -> OpenIMServer.msg.KeyValueResp - 49, // 31: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry.value:type_name -> OpenIMServer.msg.Seqs - 60, // 32: OpenIMServer.msg.msg.GetMaxSeq:input_type -> OpenIMServer.sdkws.GetMaxSeqReq - 46, // 33: OpenIMServer.msg.msg.GetConversationMaxSeq:input_type -> OpenIMServer.msg.GetConversationMaxSeqReq - 61, // 34: OpenIMServer.msg.msg.PullMessageBySeqs:input_type -> OpenIMServer.sdkws.PullMessageBySeqsReq - 6, // 35: OpenIMServer.msg.msg.SendMsg:input_type -> OpenIMServer.msg.SendMsgReq - 36, // 36: OpenIMServer.msg.msg.ClearConversationsMsg:input_type -> OpenIMServer.msg.ClearConversationsMsgReq - 38, // 37: OpenIMServer.msg.msg.UserClearAllMsg:input_type -> OpenIMServer.msg.UserClearAllMsgReq - 40, // 38: OpenIMServer.msg.msg.DeleteMsgs:input_type -> OpenIMServer.msg.DeleteMsgsReq - 44, // 39: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:input_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqReq - 42, // 40: OpenIMServer.msg.msg.DeleteMsgPhysical:input_type -> OpenIMServer.msg.DeleteMsgPhysicalReq - 8, // 41: OpenIMServer.msg.msg.SetSendMsgStatus:input_type -> OpenIMServer.msg.SetSendMsgStatusReq - 10, // 42: OpenIMServer.msg.msg.GetSendMsgStatus:input_type -> OpenIMServer.msg.GetSendMsgStatusReq - 27, // 43: OpenIMServer.msg.msg.RevokeMsg:input_type -> OpenIMServer.msg.RevokeMsgReq - 29, // 44: OpenIMServer.msg.msg.MarkMsgsAsRead:input_type -> OpenIMServer.msg.MarkMsgsAsReadReq - 31, // 45: OpenIMServer.msg.msg.MarkConversationAsRead:input_type -> OpenIMServer.msg.MarkConversationAsReadReq - 33, // 46: OpenIMServer.msg.msg.SetConversationHasReadSeq:input_type -> OpenIMServer.msg.SetConversationHasReadSeqReq - 13, // 47: OpenIMServer.msg.msg.SetMessageReactionExtensions:input_type -> OpenIMServer.msg.SetMessageReactionExtensionsReq - 15, // 48: OpenIMServer.msg.msg.GetMessagesReactionExtensions:input_type -> OpenIMServer.msg.GetMessagesReactionExtensionsReq - 12, // 49: OpenIMServer.msg.msg.AddMessageReactionExtensions:input_type -> OpenIMServer.msg.ModifyMessageReactionExtensionsReq - 19, // 50: OpenIMServer.msg.msg.DeleteMessageReactionExtensions:input_type -> OpenIMServer.msg.DeleteMessagesReactionExtensionsReq - 48, // 51: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:input_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqReq - 62, // 52: OpenIMServer.msg.msg.GetMaxSeq:output_type -> OpenIMServer.sdkws.GetMaxSeqResp - 47, // 53: OpenIMServer.msg.msg.GetConversationMaxSeq:output_type -> OpenIMServer.msg.GetConversationMaxSeqResp - 63, // 54: OpenIMServer.msg.msg.PullMessageBySeqs:output_type -> OpenIMServer.sdkws.PullMessageBySeqsResp - 7, // 55: OpenIMServer.msg.msg.SendMsg:output_type -> OpenIMServer.msg.SendMsgResp - 37, // 56: OpenIMServer.msg.msg.ClearConversationsMsg:output_type -> OpenIMServer.msg.ClearConversationsMsgResp - 39, // 57: OpenIMServer.msg.msg.UserClearAllMsg:output_type -> OpenIMServer.msg.UserClearAllMsgResp - 41, // 58: OpenIMServer.msg.msg.DeleteMsgs:output_type -> OpenIMServer.msg.DeleteMsgsResp - 45, // 59: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:output_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqResp - 43, // 60: OpenIMServer.msg.msg.DeleteMsgPhysical:output_type -> OpenIMServer.msg.DeleteMsgPhysicalResp - 9, // 61: OpenIMServer.msg.msg.SetSendMsgStatus:output_type -> OpenIMServer.msg.SetSendMsgStatusResp - 11, // 62: OpenIMServer.msg.msg.GetSendMsgStatus:output_type -> OpenIMServer.msg.GetSendMsgStatusResp - 28, // 63: OpenIMServer.msg.msg.RevokeMsg:output_type -> OpenIMServer.msg.RevokeMsgResp - 30, // 64: OpenIMServer.msg.msg.MarkMsgsAsRead:output_type -> OpenIMServer.msg.MarkMsgsAsReadResp - 32, // 65: OpenIMServer.msg.msg.MarkConversationAsRead:output_type -> OpenIMServer.msg.MarkConversationAsReadResp - 34, // 66: OpenIMServer.msg.msg.SetConversationHasReadSeq:output_type -> OpenIMServer.msg.SetConversationHasReadSeqResp - 14, // 67: OpenIMServer.msg.msg.SetMessageReactionExtensions:output_type -> OpenIMServer.msg.SetMessageReactionExtensionsResp - 16, // 68: OpenIMServer.msg.msg.GetMessagesReactionExtensions:output_type -> OpenIMServer.msg.GetMessagesReactionExtensionsResp - 18, // 69: OpenIMServer.msg.msg.AddMessageReactionExtensions:output_type -> OpenIMServer.msg.ModifyMessageReactionExtensionsResp - 20, // 70: OpenIMServer.msg.msg.DeleteMessageReactionExtensions:output_type -> OpenIMServer.msg.DeleteMessagesReactionExtensionsResp - 50, // 71: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:output_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp - 52, // [52:72] is the sub-list for method output_type - 32, // [32:52] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 48, // 0: OpenIMServer.msg.MsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData + 48, // 1: OpenIMServer.msg.MsgDataToDB.msgData:type_name -> OpenIMServer.sdkws.MsgData + 48, // 2: OpenIMServer.msg.PushMsgDataToMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData + 48, // 3: OpenIMServer.msg.MsgDataToMongoByMQ.msgData:type_name -> OpenIMServer.sdkws.MsgData + 48, // 4: OpenIMServer.msg.SendMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData + 48, // 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 + 45, // 9: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.seqs:type_name -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry + 49, // 10: OpenIMServer.msg.GetActiveUserReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 50, // 11: OpenIMServer.msg.ActiveUser.user:type_name -> OpenIMServer.sdkws.UserInfo + 46, // 12: OpenIMServer.msg.GetActiveUserResp.dateCount:type_name -> OpenIMServer.msg.GetActiveUserResp.DateCountEntry + 40, // 13: OpenIMServer.msg.GetActiveUserResp.users:type_name -> OpenIMServer.msg.ActiveUser + 49, // 14: OpenIMServer.msg.GetActiveGroupReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 51, // 15: OpenIMServer.msg.ActiveGroup.group:type_name -> OpenIMServer.sdkws.GroupInfo + 47, // 16: OpenIMServer.msg.GetActiveGroupResp.dateCount:type_name -> OpenIMServer.msg.GetActiveGroupResp.DateCountEntry + 43, // 17: OpenIMServer.msg.GetActiveGroupResp.groups:type_name -> OpenIMServer.msg.ActiveGroup + 37, // 18: OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp.SeqsEntry.value:type_name -> OpenIMServer.msg.Seqs + 52, // 19: OpenIMServer.msg.msg.GetMaxSeq:input_type -> OpenIMServer.sdkws.GetMaxSeqReq + 34, // 20: OpenIMServer.msg.msg.GetConversationMaxSeq:input_type -> OpenIMServer.msg.GetConversationMaxSeqReq + 53, // 21: OpenIMServer.msg.msg.PullMessageBySeqs:input_type -> OpenIMServer.sdkws.PullMessageBySeqsReq + 6, // 22: OpenIMServer.msg.msg.SendMsg:input_type -> OpenIMServer.msg.SendMsgReq + 24, // 23: OpenIMServer.msg.msg.ClearConversationsMsg:input_type -> OpenIMServer.msg.ClearConversationsMsgReq + 26, // 24: OpenIMServer.msg.msg.UserClearAllMsg:input_type -> OpenIMServer.msg.UserClearAllMsgReq + 28, // 25: OpenIMServer.msg.msg.DeleteMsgs:input_type -> OpenIMServer.msg.DeleteMsgsReq + 32, // 26: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:input_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqReq + 30, // 27: OpenIMServer.msg.msg.DeleteMsgPhysical:input_type -> OpenIMServer.msg.DeleteMsgPhysicalReq + 8, // 28: OpenIMServer.msg.msg.SetSendMsgStatus:input_type -> OpenIMServer.msg.SetSendMsgStatusReq + 10, // 29: OpenIMServer.msg.msg.GetSendMsgStatus:input_type -> OpenIMServer.msg.GetSendMsgStatusReq + 15, // 30: OpenIMServer.msg.msg.RevokeMsg:input_type -> OpenIMServer.msg.RevokeMsgReq + 17, // 31: OpenIMServer.msg.msg.MarkMsgsAsRead:input_type -> OpenIMServer.msg.MarkMsgsAsReadReq + 19, // 32: OpenIMServer.msg.msg.MarkConversationAsRead:input_type -> OpenIMServer.msg.MarkConversationAsReadReq + 21, // 33: OpenIMServer.msg.msg.SetConversationHasReadSeq:input_type -> OpenIMServer.msg.SetConversationHasReadSeqReq + 36, // 34: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:input_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqReq + 39, // 35: OpenIMServer.msg.msg.GetActiveUser:input_type -> OpenIMServer.msg.GetActiveUserReq + 42, // 36: OpenIMServer.msg.msg.GetActiveGroup:input_type -> OpenIMServer.msg.GetActiveGroupReq + 54, // 37: OpenIMServer.msg.msg.GetMaxSeq:output_type -> OpenIMServer.sdkws.GetMaxSeqResp + 35, // 38: OpenIMServer.msg.msg.GetConversationMaxSeq:output_type -> OpenIMServer.msg.GetConversationMaxSeqResp + 55, // 39: OpenIMServer.msg.msg.PullMessageBySeqs:output_type -> OpenIMServer.sdkws.PullMessageBySeqsResp + 7, // 40: OpenIMServer.msg.msg.SendMsg:output_type -> OpenIMServer.msg.SendMsgResp + 25, // 41: OpenIMServer.msg.msg.ClearConversationsMsg:output_type -> OpenIMServer.msg.ClearConversationsMsgResp + 27, // 42: OpenIMServer.msg.msg.UserClearAllMsg:output_type -> OpenIMServer.msg.UserClearAllMsgResp + 29, // 43: OpenIMServer.msg.msg.DeleteMsgs:output_type -> OpenIMServer.msg.DeleteMsgsResp + 33, // 44: OpenIMServer.msg.msg.DeleteMsgPhysicalBySeq:output_type -> OpenIMServer.msg.DeleteMsgPhysicalBySeqResp + 31, // 45: OpenIMServer.msg.msg.DeleteMsgPhysical:output_type -> OpenIMServer.msg.DeleteMsgPhysicalResp + 9, // 46: OpenIMServer.msg.msg.SetSendMsgStatus:output_type -> OpenIMServer.msg.SetSendMsgStatusResp + 11, // 47: OpenIMServer.msg.msg.GetSendMsgStatus:output_type -> OpenIMServer.msg.GetSendMsgStatusResp + 16, // 48: OpenIMServer.msg.msg.RevokeMsg:output_type -> OpenIMServer.msg.RevokeMsgResp + 18, // 49: OpenIMServer.msg.msg.MarkMsgsAsRead:output_type -> OpenIMServer.msg.MarkMsgsAsReadResp + 20, // 50: OpenIMServer.msg.msg.MarkConversationAsRead:output_type -> OpenIMServer.msg.MarkConversationAsReadResp + 22, // 51: OpenIMServer.msg.msg.SetConversationHasReadSeq:output_type -> OpenIMServer.msg.SetConversationHasReadSeqResp + 38, // 52: OpenIMServer.msg.msg.GetConversationsHasReadAndMaxSeq:output_type -> OpenIMServer.msg.GetConversationsHasReadAndMaxSeqResp + 41, // 53: OpenIMServer.msg.msg.GetActiveUser:output_type -> OpenIMServer.msg.GetActiveUserResp + 44, // 54: OpenIMServer.msg.msg.GetActiveGroup:output_type -> OpenIMServer.msg.GetActiveGroupResp + 37, // [37:55] is the sub-list for method output_type + 19, // [19:37] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_msg_msg_proto_init() } @@ -3734,150 +3018,6 @@ func file_msg_msg_proto_init() { } } file_msg_msg_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyMessageReactionExtensionsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMessageReactionExtensionsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMessageReactionExtensionsResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMessagesReactionExtensionsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMessagesReactionExtensionsResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SingleMessageExtensionResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyMessageReactionExtensionsResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteMessagesReactionExtensionsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteMessagesReactionExtensionsResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtendMsgResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[22].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_msg_msg_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyValueResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_msg_msg_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MsgDataToModifyByMQ); i { case 0: return &v.state @@ -3889,7 +3029,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 @@ -3901,7 +3041,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 @@ -3913,7 +3053,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 @@ -3925,7 +3065,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 @@ -3937,7 +3077,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 @@ -3949,7 +3089,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 @@ -3961,7 +3101,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 @@ -3973,7 +3113,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 @@ -3985,7 +3125,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 @@ -3997,7 +3137,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 @@ -4009,7 +3149,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 @@ -4021,7 +3161,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 @@ -4033,7 +3173,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 @@ -4045,7 +3185,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 @@ -4057,7 +3197,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 @@ -4069,7 +3209,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 @@ -4081,7 +3221,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 @@ -4093,7 +3233,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 @@ -4105,7 +3245,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 @@ -4117,7 +3257,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 @@ -4129,7 +3269,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 @@ -4141,7 +3281,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 @@ -4153,7 +3293,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 @@ -4165,7 +3305,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 @@ -4177,7 +3317,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 @@ -4189,7 +3329,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 @@ -4201,8 +3341,68 @@ func file_msg_msg_proto_init() { return nil } } - file_msg_msg_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMessagesReactionExtensionsReq_MessageReactionKey); i { + file_msg_msg_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetActiveUserReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_msg_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActiveUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_msg_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetActiveUserResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_msg_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetActiveGroupReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_msg_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActiveGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_msg_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetActiveGroupResp); i { case 0: return &v.state case 1: @@ -4220,7 +3420,7 @@ func file_msg_msg_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_msg_msg_proto_rawDesc, NumEnums: 0, - NumMessages: 57, + NumMessages: 48, NumExtensions: 0, NumServices: 1, }, @@ -4272,12 +3472,9 @@ 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) } type msgClient struct { @@ -4423,42 +3620,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...) @@ -4468,6 +3629,24 @@ func (c *msgClient) GetConversationsHasReadAndMaxSeq(ctx context.Context, in *Ge return out, nil } +func (c *msgClient) GetActiveUser(ctx context.Context, in *GetActiveUserReq, opts ...grpc.CallOption) (*GetActiveUserResp, error) { + out := new(GetActiveUserResp) + err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/GetActiveUser", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) GetActiveGroup(ctx context.Context, in *GetActiveGroupReq, opts ...grpc.CallOption) (*GetActiveGroupResp, error) { + out := new(GetActiveGroupResp) + err := c.cc.Invoke(ctx, "/OpenIMServer.msg.msg/GetActiveGroup", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // 获取最小最大seq(包括用户的,以及指定群组的) @@ -4496,12 +3675,9 @@ 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) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -4553,21 +3729,15 @@ 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") } +func (*UnimplementedMsgServer) GetActiveUser(context.Context, *GetActiveUserReq) (*GetActiveUserResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetActiveUser not implemented") +} +func (*UnimplementedMsgServer) GetActiveGroup(context.Context, *GetActiveGroupReq) (*GetActiveGroupResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetActiveGroup not implemented") +} func RegisterMsgServer(s *grpc.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -4843,78 +4013,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 { @@ -4933,6 +4031,42 @@ func _Msg_GetConversationsHasReadAndMaxSeq_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _Msg_GetActiveUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetActiveUserReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).GetActiveUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/OpenIMServer.msg.msg/GetActiveUser", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).GetActiveUser(ctx, req.(*GetActiveUserReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_GetActiveGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetActiveGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).GetActiveGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/OpenIMServer.msg.msg/GetActiveGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).GetActiveGroup(ctx, req.(*GetActiveGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "OpenIMServer.msg.msg", HandlerType: (*MsgServer)(nil), @@ -4997,26 +4131,18 @@ 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, }, + { + MethodName: "GetActiveUser", + Handler: _Msg_GetActiveUser_Handler, + }, + { + MethodName: "GetActiveGroup", + Handler: _Msg_GetActiveGroup_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "msg/msg.proto", diff --git a/pkg/proto/msg/msg.proto b/pkg/proto/msg/msg.proto index 9fa093edf..d67195d44 100644 --- a/pkg/proto/msg/msg.proto +++ b/pkg/proto/msg/msg.proto @@ -15,7 +15,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{ @@ -74,93 +74,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; @@ -255,7 +168,7 @@ message DeleteMsgPhysicalBySeqReq { } message DeleteMsgPhysicalBySeqResp { - + } message GetConversationMaxSeqReq { @@ -280,6 +193,45 @@ message GetConversationsHasReadAndMaxSeqResp { map seqs = 1; } +message GetActiveUserReq { + int64 start = 1; + int64 end = 2; + bool ase = 3; + bool group = 4; + sdkws.RequestPagination pagination = 5; +} + +message ActiveUser { + sdkws.UserInfo user = 1; + int64 count = 2; +} + +message GetActiveUserResp { + int64 msgCount = 1; + int64 userCount = 2; + map dateCount = 3; + repeated ActiveUser users = 4; +} + +message GetActiveGroupReq { + int64 start = 1; + int64 end = 2; + bool ase = 3; + sdkws.RequestPagination pagination = 4; +} + +message ActiveGroup { + sdkws.GroupInfo group = 1; + int64 count = 2; +} + +message GetActiveGroupResp { + int64 msgCount = 1; + int64 groupCount = 2; + map dateCount = 3; + repeated ActiveGroup groups = 4; +} + service msg { //获取最小最大seq(包括用户的,以及指定群组的) rpc GetMaxSeq(sdkws.GetMaxSeqReq) returns(sdkws.GetMaxSeqResp); @@ -309,11 +261,9 @@ 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); + rpc GetActiveGroup(GetActiveGroupReq) returns(GetActiveGroupResp); } diff --git a/pkg/proto/msggateway/msggateway.pb.go b/pkg/proto/msggateway/msggateway.pb.go index 51f186c8c..6d3aa576a 100644 --- a/pkg/proto/msggateway/msggateway.pb.go +++ b/pkg/proto/msggateway/msggateway.pb.go @@ -459,6 +459,132 @@ func (x *GetUsersOnlineStatusResp) GetFailedResult() []*GetUsersOnlineStatusResp return nil } +type SingleDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status"` + SinglePlatformToken []*SinglePlatformToken `protobuf:"bytes,3,rep,name=singlePlatformToken,proto3" json:"singlePlatformToken"` +} + +func (x *SingleDetail) Reset() { + *x = SingleDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_msggateway_msggateway_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SingleDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SingleDetail) ProtoMessage() {} + +func (x *SingleDetail) ProtoReflect() protoreflect.Message { + mi := &file_msggateway_msggateway_proto_msgTypes[8] + 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 SingleDetail.ProtoReflect.Descriptor instead. +func (*SingleDetail) Descriptor() ([]byte, []int) { + return file_msggateway_msggateway_proto_rawDescGZIP(), []int{8} +} + +func (x *SingleDetail) GetUserID() string { + if x != nil { + return x.UserID + } + return "" +} + +func (x *SingleDetail) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *SingleDetail) GetSinglePlatformToken() []*SinglePlatformToken { + if x != nil { + return x.SinglePlatformToken + } + return nil +} + +type SinglePlatformToken struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform"` + Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total"` + Token []string `protobuf:"bytes,3,rep,name=token,proto3" json:"token"` +} + +func (x *SinglePlatformToken) Reset() { + *x = SinglePlatformToken{} + if protoimpl.UnsafeEnabled { + mi := &file_msggateway_msggateway_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SinglePlatformToken) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SinglePlatformToken) ProtoMessage() {} + +func (x *SinglePlatformToken) ProtoReflect() protoreflect.Message { + mi := &file_msggateway_msggateway_proto_msgTypes[9] + 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 SinglePlatformToken.ProtoReflect.Descriptor instead. +func (*SinglePlatformToken) Descriptor() ([]byte, []int) { + return file_msggateway_msggateway_proto_rawDescGZIP(), []int{9} +} + +func (x *SinglePlatformToken) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *SinglePlatformToken) GetTotal() int32 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *SinglePlatformToken) GetToken() []string { + if x != nil { + return x.Token + } + return nil +} + type KickUserOfflineReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -471,7 +597,7 @@ type KickUserOfflineReq struct { func (x *KickUserOfflineReq) Reset() { *x = KickUserOfflineReq{} if protoimpl.UnsafeEnabled { - mi := &file_msggateway_msggateway_proto_msgTypes[8] + mi := &file_msggateway_msggateway_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -484,7 +610,7 @@ func (x *KickUserOfflineReq) String() string { func (*KickUserOfflineReq) ProtoMessage() {} func (x *KickUserOfflineReq) ProtoReflect() protoreflect.Message { - mi := &file_msggateway_msggateway_proto_msgTypes[8] + mi := &file_msggateway_msggateway_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -497,7 +623,7 @@ func (x *KickUserOfflineReq) ProtoReflect() protoreflect.Message { // Deprecated: Use KickUserOfflineReq.ProtoReflect.Descriptor instead. func (*KickUserOfflineReq) Descriptor() ([]byte, []int) { - return file_msggateway_msggateway_proto_rawDescGZIP(), []int{8} + return file_msggateway_msggateway_proto_rawDescGZIP(), []int{10} } func (x *KickUserOfflineReq) GetPlatformID() int32 { @@ -523,7 +649,7 @@ type KickUserOfflineResp struct { func (x *KickUserOfflineResp) Reset() { *x = KickUserOfflineResp{} if protoimpl.UnsafeEnabled { - mi := &file_msggateway_msggateway_proto_msgTypes[9] + mi := &file_msggateway_msggateway_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -536,7 +662,7 @@ func (x *KickUserOfflineResp) String() string { func (*KickUserOfflineResp) ProtoMessage() {} func (x *KickUserOfflineResp) ProtoReflect() protoreflect.Message { - mi := &file_msggateway_msggateway_proto_msgTypes[9] + mi := &file_msggateway_msggateway_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -549,7 +675,7 @@ func (x *KickUserOfflineResp) ProtoReflect() protoreflect.Message { // Deprecated: Use KickUserOfflineResp.ProtoReflect.Descriptor instead. func (*KickUserOfflineResp) Descriptor() ([]byte, []int) { - return file_msggateway_msggateway_proto_rawDescGZIP(), []int{9} + return file_msggateway_msggateway_proto_rawDescGZIP(), []int{11} } type MultiTerminalLoginCheckReq struct { @@ -566,7 +692,7 @@ type MultiTerminalLoginCheckReq struct { func (x *MultiTerminalLoginCheckReq) Reset() { *x = MultiTerminalLoginCheckReq{} if protoimpl.UnsafeEnabled { - mi := &file_msggateway_msggateway_proto_msgTypes[10] + mi := &file_msggateway_msggateway_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -579,7 +705,7 @@ func (x *MultiTerminalLoginCheckReq) String() string { func (*MultiTerminalLoginCheckReq) ProtoMessage() {} func (x *MultiTerminalLoginCheckReq) ProtoReflect() protoreflect.Message { - mi := &file_msggateway_msggateway_proto_msgTypes[10] + mi := &file_msggateway_msggateway_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -592,7 +718,7 @@ func (x *MultiTerminalLoginCheckReq) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiTerminalLoginCheckReq.ProtoReflect.Descriptor instead. func (*MultiTerminalLoginCheckReq) Descriptor() ([]byte, []int) { - return file_msggateway_msggateway_proto_rawDescGZIP(), []int{10} + return file_msggateway_msggateway_proto_rawDescGZIP(), []int{12} } func (x *MultiTerminalLoginCheckReq) GetUserID() string { @@ -632,7 +758,7 @@ type MultiTerminalLoginCheckResp struct { func (x *MultiTerminalLoginCheckResp) Reset() { *x = MultiTerminalLoginCheckResp{} if protoimpl.UnsafeEnabled { - mi := &file_msggateway_msggateway_proto_msgTypes[11] + mi := &file_msggateway_msggateway_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -645,7 +771,7 @@ func (x *MultiTerminalLoginCheckResp) String() string { func (*MultiTerminalLoginCheckResp) ProtoMessage() {} func (x *MultiTerminalLoginCheckResp) ProtoReflect() protoreflect.Message { - mi := &file_msggateway_msggateway_proto_msgTypes[11] + mi := &file_msggateway_msggateway_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -658,7 +784,7 @@ func (x *MultiTerminalLoginCheckResp) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiTerminalLoginCheckResp.ProtoReflect.Descriptor instead. func (*MultiTerminalLoginCheckResp) Descriptor() ([]byte, []int) { - return file_msggateway_msggateway_proto_rawDescGZIP(), []int{11} + return file_msggateway_msggateway_proto_rawDescGZIP(), []int{13} } type GetUsersOnlineStatusResp_SuccessDetail struct { @@ -670,12 +796,13 @@ type GetUsersOnlineStatusResp_SuccessDetail struct { Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status"` ConnID string `protobuf:"bytes,3,opt,name=connID,proto3" json:"connID"` IsBackground bool `protobuf:"varint,4,opt,name=isBackground,proto3" json:"isBackground"` + Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token"` } func (x *GetUsersOnlineStatusResp_SuccessDetail) Reset() { *x = GetUsersOnlineStatusResp_SuccessDetail{} if protoimpl.UnsafeEnabled { - mi := &file_msggateway_msggateway_proto_msgTypes[12] + mi := &file_msggateway_msggateway_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -688,7 +815,7 @@ func (x *GetUsersOnlineStatusResp_SuccessDetail) String() string { func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (x *GetUsersOnlineStatusResp_SuccessDetail) ProtoReflect() protoreflect.Message { - mi := &file_msggateway_msggateway_proto_msgTypes[12] + mi := &file_msggateway_msggateway_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -732,6 +859,13 @@ func (x *GetUsersOnlineStatusResp_SuccessDetail) GetIsBackground() bool { return false } +func (x *GetUsersOnlineStatusResp_SuccessDetail) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + type GetUsersOnlineStatusResp_FailedDetail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -743,7 +877,7 @@ type GetUsersOnlineStatusResp_FailedDetail struct { func (x *GetUsersOnlineStatusResp_FailedDetail) Reset() { *x = GetUsersOnlineStatusResp_FailedDetail{} if protoimpl.UnsafeEnabled { - mi := &file_msggateway_msggateway_proto_msgTypes[13] + mi := &file_msggateway_msggateway_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -756,7 +890,7 @@ func (x *GetUsersOnlineStatusResp_FailedDetail) String() string { func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (x *GetUsersOnlineStatusResp_FailedDetail) ProtoReflect() protoreflect.Message { - mi := &file_msggateway_msggateway_proto_msgTypes[13] + mi := &file_msggateway_msggateway_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -792,7 +926,7 @@ type GetUsersOnlineStatusResp_SuccessResult struct { func (x *GetUsersOnlineStatusResp_SuccessResult) Reset() { *x = GetUsersOnlineStatusResp_SuccessResult{} if protoimpl.UnsafeEnabled { - mi := &file_msggateway_msggateway_proto_msgTypes[14] + mi := &file_msggateway_msggateway_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -805,7 +939,7 @@ func (x *GetUsersOnlineStatusResp_SuccessResult) String() string { func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (x *GetUsersOnlineStatusResp_SuccessResult) ProtoReflect() protoreflect.Message { - mi := &file_msggateway_msggateway_proto_msgTypes[14] + mi := &file_msggateway_msggateway_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -898,7 +1032,7 @@ var file_msggateway_msggateway_proto_rawDesc = []byte{ 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x22, - 0xc5, 0x04, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, + 0xdc, 0x04, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, @@ -912,99 +1046,116 @@ var file_msggateway_msggateway_proto_rawDesc = []byte{ 0x77, 0x61, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x7f, 0x0a, 0x0d, 0x53, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x42, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x1a, 0x26, 0x0a, 0x0c, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, - 0x1a, 0xb4, 0x01, 0x0a, 0x0d, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x73, 0x0a, 0x14, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x95, 0x01, 0x0a, 0x0d, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x67, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x42, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, + 0x26, 0x0a, 0x0c, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, + 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0xb4, 0x01, 0x0a, 0x0d, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x73, 0x0a, 0x14, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x14, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9e, + 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x5e, 0x0a, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0x5d, 0x0a, 0x13, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5c, + 0x0a, 0x12, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, + 0x65, 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, 0x26, 0x0a, 0x0e, 0x6b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x69, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x15, 0x0a, 0x13, + 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, 0x0a, 0x1a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 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, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x44, 0x22, 0x1d, 0x0a, 0x1b, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x32, 0xf1, 0x05, 0x0a, 0x0a, 0x6d, 0x73, 0x67, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x12, 0x66, 0x0a, 0x0d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, + 0x67, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, + 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, + 0x68, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7b, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x52, 0x14, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5c, 0x0a, 0x12, 0x4b, 0x69, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 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, 0x26, 0x0a, - 0x0e, 0x6b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x44, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, - 0x72, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, 0x0a, - 0x1a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 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, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x1d, 0x0a, 0x1b, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x32, 0xf1, 0x05, 0x0a, 0x0a, 0x6d, - 0x73, 0x67, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x66, 0x0a, 0x0d, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x4d, - 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x7b, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x65, 0x71, 0x1a, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7e, 0x0a, 0x15, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x31, + 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, + 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, + 0x71, 0x1a, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, + 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x88, 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, + 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x6c, 0x69, - 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x31, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4f, 0x6e, - 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7e, - 0x0a, 0x15, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, - 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, - 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x32, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x50, 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x88, - 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x70, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, - 0x73, 0x67, 0x12, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, - 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x75, 0x73, 0x68, 0x4f, - 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6c, 0x0a, 0x0f, 0x4b, 0x69, 0x63, - 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x2b, 0x2e, 0x4f, + 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, + 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, - 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, - 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x84, 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x12, 0x33, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x34, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x42, 0x3a, - 0x5a, 0x38, 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, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x6c, 0x0a, 0x0f, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, + 0x69, 0x6e, 0x65, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4b, 0x69, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x84, + 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x33, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, 0x73, 0x67, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x6c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, + 0x34, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6d, + 0x73, 0x67, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x42, 0x3a, 0x5a, 0x38, 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, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1019,7 +1170,7 @@ func file_msggateway_msggateway_proto_rawDescGZIP() []byte { return file_msggateway_msggateway_proto_rawDescData } -var file_msggateway_msggateway_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_msggateway_msggateway_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_msggateway_msggateway_proto_goTypes = []interface{}{ (*OnlinePushMsgReq)(nil), // 0: OpenIMServer.msggateway.OnlinePushMsgReq (*OnlinePushMsgResp)(nil), // 1: OpenIMServer.msggateway.OnlinePushMsgResp @@ -1029,41 +1180,44 @@ var file_msggateway_msggateway_proto_goTypes = []interface{}{ (*SingleMsgToUserPlatform)(nil), // 5: OpenIMServer.msggateway.SingleMsgToUserPlatform (*GetUsersOnlineStatusReq)(nil), // 6: OpenIMServer.msggateway.GetUsersOnlineStatusReq (*GetUsersOnlineStatusResp)(nil), // 7: OpenIMServer.msggateway.GetUsersOnlineStatusResp - (*KickUserOfflineReq)(nil), // 8: OpenIMServer.msggateway.KickUserOfflineReq - (*KickUserOfflineResp)(nil), // 9: OpenIMServer.msggateway.KickUserOfflineResp - (*MultiTerminalLoginCheckReq)(nil), // 10: OpenIMServer.msggateway.MultiTerminalLoginCheckReq - (*MultiTerminalLoginCheckResp)(nil), // 11: OpenIMServer.msggateway.MultiTerminalLoginCheckResp - (*GetUsersOnlineStatusResp_SuccessDetail)(nil), // 12: OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessDetail - (*GetUsersOnlineStatusResp_FailedDetail)(nil), // 13: OpenIMServer.msggateway.GetUsersOnlineStatusResp.FailedDetail - (*GetUsersOnlineStatusResp_SuccessResult)(nil), // 14: OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessResult - (*sdkws.MsgData)(nil), // 15: OpenIMServer.sdkws.MsgData + (*SingleDetail)(nil), // 8: OpenIMServer.msggateway.SingleDetail + (*SinglePlatformToken)(nil), // 9: OpenIMServer.msggateway.SinglePlatformToken + (*KickUserOfflineReq)(nil), // 10: OpenIMServer.msggateway.KickUserOfflineReq + (*KickUserOfflineResp)(nil), // 11: OpenIMServer.msggateway.KickUserOfflineResp + (*MultiTerminalLoginCheckReq)(nil), // 12: OpenIMServer.msggateway.MultiTerminalLoginCheckReq + (*MultiTerminalLoginCheckResp)(nil), // 13: OpenIMServer.msggateway.MultiTerminalLoginCheckResp + (*GetUsersOnlineStatusResp_SuccessDetail)(nil), // 14: OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessDetail + (*GetUsersOnlineStatusResp_FailedDetail)(nil), // 15: OpenIMServer.msggateway.GetUsersOnlineStatusResp.FailedDetail + (*GetUsersOnlineStatusResp_SuccessResult)(nil), // 16: OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessResult + (*sdkws.MsgData)(nil), // 17: OpenIMServer.sdkws.MsgData } var file_msggateway_msggateway_proto_depIdxs = []int32{ - 15, // 0: OpenIMServer.msggateway.OnlinePushMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData + 17, // 0: OpenIMServer.msggateway.OnlinePushMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData 5, // 1: OpenIMServer.msggateway.OnlinePushMsgResp.resp:type_name -> OpenIMServer.msggateway.SingleMsgToUserPlatform 5, // 2: OpenIMServer.msggateway.SingleMsgToUserResults.resp:type_name -> OpenIMServer.msggateway.SingleMsgToUserPlatform - 15, // 3: OpenIMServer.msggateway.OnlineBatchPushOneMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData + 17, // 3: OpenIMServer.msggateway.OnlineBatchPushOneMsgReq.msgData:type_name -> OpenIMServer.sdkws.MsgData 2, // 4: OpenIMServer.msggateway.OnlineBatchPushOneMsgResp.singlePushResult:type_name -> OpenIMServer.msggateway.SingleMsgToUserResults - 14, // 5: OpenIMServer.msggateway.GetUsersOnlineStatusResp.successResult:type_name -> OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessResult - 13, // 6: OpenIMServer.msggateway.GetUsersOnlineStatusResp.failedResult:type_name -> OpenIMServer.msggateway.GetUsersOnlineStatusResp.FailedDetail - 12, // 7: OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessResult.detailPlatformStatus:type_name -> OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessDetail - 0, // 8: OpenIMServer.msggateway.msgGateway.OnlinePushMsg:input_type -> OpenIMServer.msggateway.OnlinePushMsgReq - 6, // 9: OpenIMServer.msggateway.msgGateway.GetUsersOnlineStatus:input_type -> OpenIMServer.msggateway.GetUsersOnlineStatusReq - 3, // 10: OpenIMServer.msggateway.msgGateway.OnlineBatchPushOneMsg:input_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgReq - 3, // 11: OpenIMServer.msggateway.msgGateway.SuperGroupOnlineBatchPushOneMsg:input_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgReq - 8, // 12: OpenIMServer.msggateway.msgGateway.KickUserOffline:input_type -> OpenIMServer.msggateway.KickUserOfflineReq - 10, // 13: OpenIMServer.msggateway.msgGateway.MultiTerminalLoginCheck:input_type -> OpenIMServer.msggateway.MultiTerminalLoginCheckReq - 1, // 14: OpenIMServer.msggateway.msgGateway.OnlinePushMsg:output_type -> OpenIMServer.msggateway.OnlinePushMsgResp - 7, // 15: OpenIMServer.msggateway.msgGateway.GetUsersOnlineStatus:output_type -> OpenIMServer.msggateway.GetUsersOnlineStatusResp - 4, // 16: OpenIMServer.msggateway.msgGateway.OnlineBatchPushOneMsg:output_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgResp - 4, // 17: OpenIMServer.msggateway.msgGateway.SuperGroupOnlineBatchPushOneMsg:output_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgResp - 9, // 18: OpenIMServer.msggateway.msgGateway.KickUserOffline:output_type -> OpenIMServer.msggateway.KickUserOfflineResp - 11, // 19: OpenIMServer.msggateway.msgGateway.MultiTerminalLoginCheck:output_type -> OpenIMServer.msggateway.MultiTerminalLoginCheckResp - 14, // [14:20] is the sub-list for method output_type - 8, // [8:14] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 16, // 5: OpenIMServer.msggateway.GetUsersOnlineStatusResp.successResult:type_name -> OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessResult + 15, // 6: OpenIMServer.msggateway.GetUsersOnlineStatusResp.failedResult:type_name -> OpenIMServer.msggateway.GetUsersOnlineStatusResp.FailedDetail + 9, // 7: OpenIMServer.msggateway.SingleDetail.singlePlatformToken:type_name -> OpenIMServer.msggateway.SinglePlatformToken + 14, // 8: OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessResult.detailPlatformStatus:type_name -> OpenIMServer.msggateway.GetUsersOnlineStatusResp.SuccessDetail + 0, // 9: OpenIMServer.msggateway.msgGateway.OnlinePushMsg:input_type -> OpenIMServer.msggateway.OnlinePushMsgReq + 6, // 10: OpenIMServer.msggateway.msgGateway.GetUsersOnlineStatus:input_type -> OpenIMServer.msggateway.GetUsersOnlineStatusReq + 3, // 11: OpenIMServer.msggateway.msgGateway.OnlineBatchPushOneMsg:input_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgReq + 3, // 12: OpenIMServer.msggateway.msgGateway.SuperGroupOnlineBatchPushOneMsg:input_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgReq + 10, // 13: OpenIMServer.msggateway.msgGateway.KickUserOffline:input_type -> OpenIMServer.msggateway.KickUserOfflineReq + 12, // 14: OpenIMServer.msggateway.msgGateway.MultiTerminalLoginCheck:input_type -> OpenIMServer.msggateway.MultiTerminalLoginCheckReq + 1, // 15: OpenIMServer.msggateway.msgGateway.OnlinePushMsg:output_type -> OpenIMServer.msggateway.OnlinePushMsgResp + 7, // 16: OpenIMServer.msggateway.msgGateway.GetUsersOnlineStatus:output_type -> OpenIMServer.msggateway.GetUsersOnlineStatusResp + 4, // 17: OpenIMServer.msggateway.msgGateway.OnlineBatchPushOneMsg:output_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgResp + 4, // 18: OpenIMServer.msggateway.msgGateway.SuperGroupOnlineBatchPushOneMsg:output_type -> OpenIMServer.msggateway.OnlineBatchPushOneMsgResp + 11, // 19: OpenIMServer.msggateway.msgGateway.KickUserOffline:output_type -> OpenIMServer.msggateway.KickUserOfflineResp + 13, // 20: OpenIMServer.msggateway.msgGateway.MultiTerminalLoginCheck:output_type -> OpenIMServer.msggateway.MultiTerminalLoginCheckResp + 15, // [15:21] is the sub-list for method output_type + 9, // [9:15] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_msggateway_msggateway_proto_init() } @@ -1169,7 +1323,7 @@ func file_msggateway_msggateway_proto_init() { } } file_msggateway_msggateway_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KickUserOfflineReq); i { + switch v := v.(*SingleDetail); i { case 0: return &v.state case 1: @@ -1181,7 +1335,7 @@ func file_msggateway_msggateway_proto_init() { } } file_msggateway_msggateway_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KickUserOfflineResp); i { + switch v := v.(*SinglePlatformToken); i { case 0: return &v.state case 1: @@ -1193,7 +1347,7 @@ func file_msggateway_msggateway_proto_init() { } } file_msggateway_msggateway_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiTerminalLoginCheckReq); i { + switch v := v.(*KickUserOfflineReq); i { case 0: return &v.state case 1: @@ -1205,7 +1359,7 @@ func file_msggateway_msggateway_proto_init() { } } file_msggateway_msggateway_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiTerminalLoginCheckResp); i { + switch v := v.(*KickUserOfflineResp); i { case 0: return &v.state case 1: @@ -1217,7 +1371,7 @@ func file_msggateway_msggateway_proto_init() { } } file_msggateway_msggateway_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsersOnlineStatusResp_SuccessDetail); i { + switch v := v.(*MultiTerminalLoginCheckReq); i { case 0: return &v.state case 1: @@ -1229,7 +1383,7 @@ func file_msggateway_msggateway_proto_init() { } } file_msggateway_msggateway_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsersOnlineStatusResp_FailedDetail); i { + switch v := v.(*MultiTerminalLoginCheckResp); i { case 0: return &v.state case 1: @@ -1241,6 +1395,30 @@ func file_msggateway_msggateway_proto_init() { } } file_msggateway_msggateway_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUsersOnlineStatusResp_SuccessDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msggateway_msggateway_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUsersOnlineStatusResp_FailedDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msggateway_msggateway_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetUsersOnlineStatusResp_SuccessResult); i { case 0: return &v.state @@ -1259,7 +1437,7 @@ func file_msggateway_msggateway_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_msggateway_msggateway_proto_rawDesc, NumEnums: 0, - NumMessages: 15, + NumMessages: 17, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/proto/msggateway/msggateway.proto b/pkg/proto/msggateway/msggateway.proto index 0f6c0bd5f..77f0fcbf3 100644 --- a/pkg/proto/msggateway/msggateway.proto +++ b/pkg/proto/msggateway/msggateway.proto @@ -70,6 +70,7 @@ message GetUsersOnlineStatusResp{ string status = 2; string connID = 3; bool isBackground = 4; + string token =5; } message FailedDetail{ string userID = 1; @@ -80,6 +81,17 @@ message GetUsersOnlineStatusResp{ repeated SuccessDetail detailPlatformStatus = 3; } } +message SingleDetail{ + string userID = 1; + string status = 2; + repeated SinglePlatformToken singlePlatformToken = 3; +} +message SinglePlatformToken{ + string platform = 1; + int32 total =2; + repeated string token = 3; +} + message KickUserOfflineReq{ int32 platformID = 1; diff --git a/pkg/proto/sdkws/sdkws.pb.go b/pkg/proto/sdkws/sdkws.pb.go index 9a5e4d630..f2038ee5a 100644 --- a/pkg/proto/sdkws/sdkws.pb.go +++ b/pkg/proto/sdkws/sdkws.pb.go @@ -4579,425 +4579,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 @@ -5010,7 +4591,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) } @@ -5023,7 +4604,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 { @@ -5036,7 +4617,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 { @@ -5835,137 +5416,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 ( @@ -5981,94 +5444,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 @@ -6076,14 +5530,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 @@ -6137,23 +5591,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() } @@ -6907,66 +6353,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 @@ -6985,7 +6371,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 4e81502d3..225172fe2 100644 --- a/pkg/proto/sdkws/sdkws.proto +++ b/pkg/proto/sdkws/sdkws.proto @@ -510,48 +510,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 a2512db38..1ba6c3a05 100644 --- a/pkg/proto/third/third.pb.go +++ b/pkg/proto/third/third.pb.go @@ -25,22 +25,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)) @@ -48,13 +43,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)) @@ -66,75 +61,38 @@ 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 - } - return 0 -} - -func (x *ApplyPutReq) GetHash() string { - if x != nil { - return x.Hash - } - return "" -} - -func (x *ApplyPutReq) GetContentType() string { - if x != nil { - return x.ContentType - } - return "" -} - -func (x *ApplyPutReq) GetFragmentSize() int64 { - if x != nil { - return x.FragmentSize - } - return 0 -} - -func (x *ApplyPutReq) GetValidTime() int64 { - if x != nil { - return x.ValidTime - } - return 0 -} - -type ApplyPutResp struct { +type SignPart 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"` + 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 *ApplyPutResp) Reset() { - *x = ApplyPutResp{} +func (x *SignPart) Reset() { + *x = SignPart{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -142,13 +100,13 @@ func (x *ApplyPutResp) Reset() { } } -func (x *ApplyPutResp) String() string { +func (x *SignPart) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ApplyPutResp) ProtoMessage() {} +func (*SignPart) ProtoMessage() {} -func (x *ApplyPutResp) ProtoReflect() protoreflect.Message { +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)) @@ -160,63 +118,52 @@ func (x *ApplyPutResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ApplyPutResp.ProtoReflect.Descriptor instead. -func (*ApplyPutResp) Descriptor() ([]byte, []int) { +// Deprecated: Use SignPart.ProtoReflect.Descriptor instead. +func (*SignPart) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{1} } -func (x *ApplyPutResp) GetUrl() string { +func (x *SignPart) GetPartNumber() int32 { + if x != nil { + return x.PartNumber + } + return 0 +} + +func (x *SignPart) GetUrl() string { if x != nil { return x.Url } return "" } -func (x *ApplyPutResp) GetPutID() string { +func (x *SignPart) GetQuery() []*KeyValues { if x != nil { - return x.PutID - } - return "" -} - -func (x *ApplyPutResp) GetFragmentSize() int64 { - if x != nil { - return x.FragmentSize - } - return 0 -} - -func (x *ApplyPutResp) GetValidTime() int64 { - if x != nil { - return x.ValidTime - } - return 0 -} - -func (x *ApplyPutResp) GetPutURLsHash() string { - if x != nil { - return x.PutURLsHash - } - return "" -} - -func (x *ApplyPutResp) GetPutURLs() []string { - if x != nil { - return x.PutURLs + return x.Query } return nil } -type ConfirmPutReq struct { +func (x *SignPart) GetHeader() []*KeyValues { + if x != nil { + return x.Header + } + return nil +} + +type AuthSignParts 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"` + 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 *ConfirmPutReq) Reset() { - *x = ConfirmPutReq{} +func (x *AuthSignParts) Reset() { + *x = AuthSignParts{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -224,13 +171,13 @@ func (x *ConfirmPutReq) Reset() { } } -func (x *ConfirmPutReq) String() string { +func (x *AuthSignParts) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ConfirmPutReq) ProtoMessage() {} +func (*AuthSignParts) ProtoMessage() {} -func (x *ConfirmPutReq) ProtoReflect() protoreflect.Message { +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)) @@ -242,28 +189,47 @@ func (x *ConfirmPutReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ConfirmPutReq.ProtoReflect.Descriptor instead. -func (*ConfirmPutReq) Descriptor() ([]byte, []int) { +// Deprecated: Use AuthSignParts.ProtoReflect.Descriptor instead. +func (*AuthSignParts) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{2} } -func (x *ConfirmPutReq) GetPutID() string { +func (x *AuthSignParts) GetUrl() string { if x != nil { - return x.PutID + return x.Url } return "" } -type ConfirmPutResp struct { +func (x *AuthSignParts) GetQuery() []*KeyValues { + if x != nil { + return x.Query + } + return nil +} + +func (x *AuthSignParts) GetHeader() []*KeyValues { + if x != nil { + return x.Header + } + 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 - - Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"` } -func (x *ConfirmPutResp) Reset() { - *x = ConfirmPutResp{} +func (x *PartLimitReq) Reset() { + *x = PartLimitReq{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -271,13 +237,13 @@ func (x *ConfirmPutResp) Reset() { } } -func (x *ConfirmPutResp) String() string { +func (x *PartLimitReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ConfirmPutResp) ProtoMessage() {} +func (*PartLimitReq) ProtoMessage() {} -func (x *ConfirmPutResp) ProtoReflect() protoreflect.Message { +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)) @@ -289,30 +255,23 @@ func (x *ConfirmPutResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ConfirmPutResp.ProtoReflect.Descriptor instead. -func (*ConfirmPutResp) Descriptor() ([]byte, []int) { +// Deprecated: Use PartLimitReq.ProtoReflect.Descriptor instead. +func (*PartLimitReq) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{3} } -func (x *ConfirmPutResp) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -type GetUrlReq struct { +type PartLimitResp 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"` // 是否是附件 + 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 *GetUrlReq) Reset() { - *x = GetUrlReq{} +func (x *PartLimitResp) Reset() { + *x = PartLimitResp{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -320,13 +279,13 @@ func (x *GetUrlReq) Reset() { } } -func (x *GetUrlReq) String() string { +func (x *PartLimitResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetUrlReq) ProtoMessage() {} +func (*PartLimitResp) ProtoMessage() {} -func (x *GetUrlReq) ProtoReflect() protoreflect.Message { +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)) @@ -338,44 +297,42 @@ func (x *GetUrlReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetUrlReq.ProtoReflect.Descriptor instead. -func (*GetUrlReq) Descriptor() ([]byte, []int) { +// Deprecated: Use PartLimitResp.ProtoReflect.Descriptor instead. +func (*PartLimitResp) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{4} } -func (x *GetUrlReq) GetName() string { +func (x *PartLimitResp) GetMinPartSize() int64 { if x != nil { - return x.Name - } - return "" -} - -func (x *GetUrlReq) GetExpires() int64 { - if x != nil { - return x.Expires + return x.MinPartSize } return 0 } -func (x *GetUrlReq) GetAttachment() bool { +func (x *PartLimitResp) GetMaxPartSize() int64 { if x != nil { - return x.Attachment + return x.MaxPartSize } - return false + return 0 } -type GetUrlResp struct { +func (x *PartLimitResp) GetMaxNumSize() int32 { + if x != nil { + return x.MaxNumSize + } + return 0 +} + +type PartSizeReq 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"` + Size int64 `protobuf:"varint,1,opt,name=size,proto3" json:"size"` } -func (x *GetUrlResp) Reset() { - *x = GetUrlResp{} +func (x *PartSizeReq) Reset() { + *x = PartSizeReq{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -383,13 +340,13 @@ func (x *GetUrlResp) Reset() { } } -func (x *GetUrlResp) String() string { +func (x *PartSizeReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetUrlResp) ProtoMessage() {} +func (*PartSizeReq) ProtoMessage() {} -func (x *GetUrlResp) ProtoReflect() protoreflect.Message { +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)) @@ -401,42 +358,28 @@ func (x *GetUrlResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetUrlResp.ProtoReflect.Descriptor instead. -func (*GetUrlResp) Descriptor() ([]byte, []int) { +// Deprecated: Use PartSizeReq.ProtoReflect.Descriptor instead. +func (*PartSizeReq) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{5} } -func (x *GetUrlResp) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -func (x *GetUrlResp) GetSize() int64 { +func (x *PartSizeReq) GetSize() int64 { if x != nil { return x.Size } return 0 } -func (x *GetUrlResp) GetHash() string { - if x != nil { - return x.Hash - } - return "" -} - -type GetPutReq struct { +type PartSizeResp 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,2,opt,name=size,proto3" json:"size"` } -func (x *GetPutReq) Reset() { - *x = GetPutReq{} +func (x *PartSizeResp) Reset() { + *x = PartSizeResp{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -444,13 +387,13 @@ func (x *GetPutReq) Reset() { } } -func (x *GetPutReq) String() string { +func (x *PartSizeResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetPutReq) ProtoMessage() {} +func (*PartSizeResp) ProtoMessage() {} -func (x *GetPutReq) ProtoReflect() protoreflect.Message { +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)) @@ -462,30 +405,34 @@ func (x *GetPutReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetPutReq.ProtoReflect.Descriptor instead. -func (*GetPutReq) Descriptor() ([]byte, []int) { +// Deprecated: Use PartSizeResp.ProtoReflect.Descriptor instead. +func (*PartSizeResp) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{6} } -func (x *GetPutReq) GetPutID() string { +func (x *PartSizeResp) GetSize() int64 { if x != nil { - return x.PutID + return x.Size } - return "" + return 0 } -type GetPutFragment struct { +type InitiateMultipartUploadReq 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"` + 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 *GetPutFragment) Reset() { - *x = GetPutFragment{} +func (x *InitiateMultipartUploadReq) Reset() { + *x = InitiateMultipartUploadReq{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -493,13 +440,13 @@ func (x *GetPutFragment) Reset() { } } -func (x *GetPutFragment) String() string { +func (x *InitiateMultipartUploadReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetPutFragment) ProtoMessage() {} +func (*InitiateMultipartUploadReq) ProtoMessage() {} -func (x *GetPutFragment) ProtoReflect() protoreflect.Message { +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)) @@ -511,54 +458,73 @@ func (x *GetPutFragment) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetPutFragment.ProtoReflect.Descriptor instead. -func (*GetPutFragment) Descriptor() ([]byte, []int) { +// Deprecated: Use InitiateMultipartUploadReq.ProtoReflect.Descriptor instead. +func (*InitiateMultipartUploadReq) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{7} } -func (x *GetPutFragment) GetSize() int64 { - if x != nil { - return x.Size - } - return 0 -} - -func (x *GetPutFragment) GetHash() string { +func (x *InitiateMultipartUploadReq) GetHash() string { if x != nil { return x.Hash } return "" } -func (x *GetPutFragment) GetUrl() string { +func (x *InitiateMultipartUploadReq) GetSize() int64 { if x != nil { - return x.Url + return x.Size + } + return 0 +} + +func (x *InitiateMultipartUploadReq) GetPartSize() int64 { + if x != nil { + return x.PartSize + } + return 0 +} + +func (x *InitiateMultipartUploadReq) GetMaxParts() int32 { + if x != nil { + return x.MaxParts + } + return 0 +} + +func (x *InitiateMultipartUploadReq) GetCause() string { + if x != nil { + return x.Cause } return "" } -type GetPutResp struct { +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 - 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"` + 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"` + ExpireTime int64 `protobuf:"varint,4,opt,name=expireTime,proto3" json:"expireTime"` } -func (x *GetPutResp) Reset() { - *x = GetPutResp{} +func (x *UploadInfo) Reset() { + *x = UploadInfo{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -566,13 +532,13 @@ func (x *GetPutResp) Reset() { } } -func (x *GetPutResp) String() string { +func (x *UploadInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetPutResp) ProtoMessage() {} +func (*UploadInfo) ProtoMessage() {} -func (x *GetPutResp) ProtoReflect() protoreflect.Message { +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)) @@ -584,77 +550,50 @@ func (x *GetPutResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetPutResp.ProtoReflect.Descriptor instead. -func (*GetPutResp) Descriptor() ([]byte, []int) { +// Deprecated: Use UploadInfo.ProtoReflect.Descriptor instead. +func (*UploadInfo) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{8} } -func (x *GetPutResp) GetName() string { +func (x *UploadInfo) GetUploadID() string { if x != nil { - return x.Name + return x.UploadID } return "" } -func (x *GetPutResp) GetSize() int64 { +func (x *UploadInfo) GetPartSize() int64 { if x != nil { - return x.Size + return x.PartSize } return 0 } -func (x *GetPutResp) GetHash() string { +func (x *UploadInfo) GetSign() *AuthSignParts { if x != nil { - return x.Hash - } - return "" -} - -func (x *GetPutResp) GetFragmentSize() int64 { - if x != nil { - return x.FragmentSize - } - return 0 -} - -func (x *GetPutResp) GetContentType() string { - if x != nil { - return x.ContentType - } - return "" -} - -func (x *GetPutResp) GetValidTime() int64 { - if x != nil { - return x.ValidTime - } - return 0 -} - -func (x *GetPutResp) GetPutURLsHash() string { - if x != nil { - return x.PutURLsHash - } - return "" -} - -func (x *GetPutResp) GetFragments() []*GetPutFragment { - if x != nil { - return x.Fragments + return x.Sign } return nil } -type GetHashInfoReq struct { +func (x *UploadInfo) GetExpireTime() int64 { + if x != nil { + return x.ExpireTime + } + return 0 +} + +type InitiateMultipartUploadResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash"` + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"` + Upload *UploadInfo `protobuf:"bytes,2,opt,name=upload,proto3" json:"upload"` } -func (x *GetHashInfoReq) Reset() { - *x = GetHashInfoReq{} +func (x *InitiateMultipartUploadResp) Reset() { + *x = InitiateMultipartUploadResp{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -662,13 +601,13 @@ func (x *GetHashInfoReq) Reset() { } } -func (x *GetHashInfoReq) String() string { +func (x *InitiateMultipartUploadResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetHashInfoReq) ProtoMessage() {} +func (*InitiateMultipartUploadResp) ProtoMessage() {} -func (x *GetHashInfoReq) ProtoReflect() protoreflect.Message { +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)) @@ -680,29 +619,36 @@ func (x *GetHashInfoReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetHashInfoReq.ProtoReflect.Descriptor instead. -func (*GetHashInfoReq) Descriptor() ([]byte, []int) { +// Deprecated: Use InitiateMultipartUploadResp.ProtoReflect.Descriptor instead. +func (*InitiateMultipartUploadResp) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{9} } -func (x *GetHashInfoReq) GetHash() string { +func (x *InitiateMultipartUploadResp) GetUrl() string { if x != nil { - return x.Hash + return x.Url } return "" } -type GetHashInfoResp 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 - Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash"` - Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size"` + 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 *GetHashInfoResp) Reset() { - *x = GetHashInfoResp{} +func (x *AuthSignReq) Reset() { + *x = AuthSignReq{} if protoimpl.UnsafeEnabled { mi := &file_third_third_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -710,13 +656,13 @@ func (x *GetHashInfoResp) Reset() { } } -func (x *GetHashInfoResp) String() string { +func (x *AuthSignReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetHashInfoResp) ProtoMessage() {} +func (*AuthSignReq) ProtoMessage() {} -func (x *GetHashInfoResp) ProtoReflect() protoreflect.Message { +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)) @@ -728,21 +674,320 @@ func (x *GetHashInfoResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetHashInfoResp.ProtoReflect.Descriptor instead. -func (*GetHashInfoResp) Descriptor() ([]byte, []int) { +// Deprecated: Use AuthSignReq.ProtoReflect.Descriptor instead. +func (*AuthSignReq) Descriptor() ([]byte, []int) { return file_third_third_proto_rawDescGZIP(), []int{10} } -func (x *GetHashInfoResp) GetHash() string { +func (x *AuthSignReq) GetUploadID() string { if x != nil { - return x.Hash + return x.UploadID } return "" } -func (x *GetHashInfoResp) GetSize() int64 { +func (x *AuthSignReq) GetPartNumbers() []int32 { if x != nil { - return x.Size + return x.PartNumbers + } + return nil +} + +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 "" +} + +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 + + 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[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompleteMultipartUploadReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompleteMultipartUploadReq) ProtoMessage() {} + +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 { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompleteMultipartUploadReq.ProtoReflect.Descriptor instead. +func (*CompleteMultipartUploadReq) Descriptor() ([]byte, []int) { + return file_third_third_proto_rawDescGZIP(), []int{12} +} + +func (x *CompleteMultipartUploadReq) GetUploadID() string { + if x != nil { + return x.UploadID + } + return "" +} + +func (x *CompleteMultipartUploadReq) GetParts() []string { + if x != nil { + return x.Parts + } + return nil +} + +func (x *CompleteMultipartUploadReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CompleteMultipartUploadReq) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + +func (x *CompleteMultipartUploadReq) GetCause() string { + if x != nil { + return x.Cause + } + return "" +} + +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) + } +} + +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 mi.MessageOf(x) +} + +// Deprecated: Use CompleteMultipartUploadResp.ProtoReflect.Descriptor instead. +func (*CompleteMultipartUploadResp) Descriptor() ([]byte, []int) { + return file_third_third_proto_rawDescGZIP(), []int{13} +} + +func (x *CompleteMultipartUploadResp) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +type AccessURLReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` +} + +func (x *AccessURLReq) Reset() { + *x = AccessURLReq{} + if protoimpl.UnsafeEnabled { + mi := &file_third_third_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccessURLReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessURLReq) ProtoMessage() {} + +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 { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessURLReq.ProtoReflect.Descriptor instead. +func (*AccessURLReq) Descriptor() ([]byte, []int) { + return file_third_third_proto_rawDescGZIP(), []int{14} +} + +func (x *AccessURLReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type AccessURLResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url"` + ExpireTime int64 `protobuf:"varint,2,opt,name=expireTime,proto3" json:"expireTime"` +} + +func (x *AccessURLResp) Reset() { + *x = AccessURLResp{} + if protoimpl.UnsafeEnabled { + mi := &file_third_third_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccessURLResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessURLResp) ProtoMessage() {} + +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 { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessURLResp.ProtoReflect.Descriptor instead. +func (*AccessURLResp) Descriptor() ([]byte, []int) { + return file_third_third_proto_rawDescGZIP(), []int{15} +} + +func (x *AccessURLResp) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *AccessURLResp) GetExpireTime() int64 { + if x != nil { + return x.ExpireTime } return 0 } @@ -761,7 +1006,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) } @@ -774,7 +1019,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 { @@ -787,7 +1032,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 { @@ -827,7 +1072,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) } @@ -840,7 +1085,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 { @@ -853,7 +1098,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 { @@ -868,7 +1113,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) } @@ -881,7 +1126,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 { @@ -894,7 +1139,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 { @@ -920,7 +1165,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) } @@ -933,7 +1178,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 { @@ -946,7 +1191,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 @@ -954,133 +1199,180 @@ 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, + 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, 0x9b, 0x01, 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, 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, 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, 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, - 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, - 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, + 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, 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, - 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, + 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, 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, 0x47, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x1e, 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, + 0x72, 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, 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, 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, + 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, 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, + 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 ( @@ -1095,45 +1387,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() } @@ -1143,7 +1451,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: @@ -1155,7 +1463,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: @@ -1167,7 +1475,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: @@ -1179,7 +1487,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: @@ -1191,7 +1499,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: @@ -1203,7 +1511,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: @@ -1215,7 +1523,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: @@ -1227,7 +1535,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: @@ -1239,7 +1547,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: @@ -1251,7 +1559,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: @@ -1263,7 +1571,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: @@ -1275,7 +1583,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: @@ -1287,7 +1595,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: @@ -1299,7 +1607,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: @@ -1311,6 +1619,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 @@ -1329,7 +1697,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, }, @@ -1355,11 +1723,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) } @@ -1372,45 +1741,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 } @@ -1437,11 +1815,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) } @@ -1450,20 +1829,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") @@ -1476,92 +1858,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).ApplyPut(ctx, in) + return srv.(ThirdServer).PartLimit(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/OpenIMServer.third.third/ApplyPut", + FullMethod: "/OpenIMServer.third.third/PartLimit", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ThirdServer).ApplyPut(ctx, req.(*ApplyPutReq)) + return srv.(ThirdServer).PartLimit(ctx, req.(*PartLimitReq)) } 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_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).GetPut(ctx, in) + return srv.(ThirdServer).PartSize(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/OpenIMServer.third.third/GetPut", + FullMethod: "/OpenIMServer.third.third/PartSize", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ThirdServer).GetPut(ctx, req.(*GetPutReq)) + return srv.(ThirdServer).PartSize(ctx, req.(*PartSizeReq)) } 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_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).ConfirmPut(ctx, in) + return srv.(ThirdServer).InitiateMultipartUpload(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/OpenIMServer.third.third/ConfirmPut", + FullMethod: "/OpenIMServer.third.third/InitiateMultipartUpload", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ThirdServer).ConfirmPut(ctx, req.(*ConfirmPutReq)) + return srv.(ThirdServer).InitiateMultipartUpload(ctx, req.(*InitiateMultipartUploadReq)) } 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_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).GetUrl(ctx, in) + return srv.(ThirdServer).AuthSign(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/OpenIMServer.third.third/GetUrl", + FullMethod: "/OpenIMServer.third.third/AuthSign", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ThirdServer).GetUrl(ctx, req.(*GetUrlReq)) + return srv.(ThirdServer).AuthSign(ctx, req.(*AuthSignReq)) } 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_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).GetHashInfo(ctx, in) + return srv.(ThirdServer).CompleteMultipartUpload(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/OpenIMServer.third.third/GetHashInfo", + FullMethod: "/OpenIMServer.third.third/CompleteMultipartUpload", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ThirdServer).GetHashInfo(ctx, req.(*GetHashInfoReq)) + return srv.(ThirdServer).CompleteMultipartUpload(ctx, req.(*CompleteMultipartUploadReq)) + } + return interceptor(ctx, in, info, handler) +} + +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).AccessURL(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/OpenIMServer.third.third/AccessURL", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ThirdServer).AccessURL(ctx, req.(*AccessURLReq)) } return interceptor(ctx, in, info, handler) } @@ -1607,24 +2007,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: "GetPut", - Handler: _Third_GetPut_Handler, + MethodName: "PartSize", + Handler: _Third_PartSize_Handler, }, { - MethodName: "ConfirmPut", - Handler: _Third_ConfirmPut_Handler, + MethodName: "InitiateMultipartUpload", + Handler: _Third_InitiateMultipartUpload_Handler, }, { - MethodName: "GetUrl", - Handler: _Third_GetUrl_Handler, + MethodName: "AuthSign", + Handler: _Third_AuthSign_Handler, }, { - MethodName: "GetHashInfo", - Handler: _Third_GetHashInfo_Handler, + MethodName: "CompleteMultipartUpload", + Handler: _Third_CompleteMultipartUpload_Handler, + }, + { + MethodName: "AccessURL", + Handler: _Third_AccessURL_Handler, }, { MethodName: "FcmUpdateToken", diff --git a/pkg/proto/third/third.proto b/pkg/proto/third/third.proto index 8cdad7562..3b2456983 100644 --- a/pkg/proto/third/third.proto +++ b/pkg/proto/third/third.proto @@ -16,80 +16,95 @@ 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 ConfirmPutReq { - string putID = 1; +message PartLimitReq { } -message ConfirmPutResp { - string url = 1; +message PartLimitResp { + int64 minPartSize = 1; + int64 maxPartSize = 2; + int32 maxNumSize = 3; } -message GetUrlReq { - string name = 1; // 文件名 - int64 expires = 2; // url有效时间 - bool attachment = 3;// 是否是附件 -} - -message GetUrlResp { - string url = 1; - int64 size = 2; - string hash = 3; -} - -message GetPutReq { - string putID = 1; -} - -message GetPutFragment{ +message PartSizeReq { int64 size = 1; - string hash = 2; - string url = 3; } -message GetPutResp { +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; + int64 expireTime = 4; +} + +message InitiateMultipartUploadResp { + string url = 1; + UploadInfo upload = 2; +} + +message AuthSignReq { + string uploadID = 1; + repeated int32 partNumbers = 2; +} + +message AuthSignResp { + string url = 1; + repeated KeyValues query = 2; + repeated KeyValues header = 3; + repeated SignPart parts = 4; +} + +message CompleteMultipartUploadReq { + string uploadID = 1; + repeated string parts = 2; + string name = 3; + string contentType = 4; + string cause = 5; +} + +message CompleteMultipartUploadResp { + string url = 1; +} + +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 { @@ -111,11 +126,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/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index 86113ec05..c96acb4a4 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -1511,8 +1511,9 @@ type UserRegisterCountResp struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total"` - Count map[string]int64 `protobuf:"bytes,2,rep,name=count,proto3" json:"count" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total"` + Before int64 `protobuf:"varint,2,opt,name=before,proto3" json:"before"` + Count map[string]int64 `protobuf:"bytes,3,rep,name=count,proto3" json:"count" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } func (x *UserRegisterCountResp) Reset() { @@ -1554,6 +1555,13 @@ func (x *UserRegisterCountResp) GetTotal() int64 { return 0 } +func (x *UserRegisterCountResp) GetBefore() int64 { + if x != nil { + return x.Before + } + return 0 +} + func (x *UserRegisterCountResp) GetCount() map[string]int64 { if x != nil { return x.Count @@ -1790,80 +1798,82 @@ var file_user_user_proto_rawDesc = []byte{ 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 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, 0x22, 0xb2, 0x01, 0x0a, 0x15, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xca, 0x01, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x38, 0x0a, 0x0a, 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, - 0x32, 0x9f, 0x07, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x66, 0x0a, 0x11, 0x67, 0x65, 0x74, - 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x27, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x44, - 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x5d, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x78, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, - 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x12, 0x2d, 0x2e, 0x4f, 0x70, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x62, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x62, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x12, 0x49, 0x0a, 0x05, 0x63, 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, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x38, + 0x0a, 0x0a, 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, 0x32, 0x9f, 0x07, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x12, 0x66, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x44, 0x65, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5d, 0x0a, 0x0e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x73, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x73, - 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x78, 0x0a, 0x17, 0x67, 0x65, - 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x4f, 0x70, 0x74, 0x12, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x69, 0x0a, - 0x12, 0x67, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x78, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x4f, 0x70, 0x74, 0x12, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, + 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x78, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, + 0x65, 0x63, 0x76, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x12, 0x2d, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x67, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x4f, + 0x72, 0x2e, 0x67, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x57, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x44, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x12, 0x66, 0x0a, 0x11, 0x75, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x42, 0x34, 0x5a, 0x32, 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, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x67, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x0c, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x22, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x69, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x4f, 0x70, + 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x67, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, 0x74, 0x50, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x57, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x0c, 0x67, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x66, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x34, 0x5a, 0x32, 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, 0x75, 0x73, 0x65, 0x72, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index e63959aff..10035642c 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -54,7 +54,7 @@ message updateUserInfoResp{ message setGlobalRecvMessageOptReq{ string userID = 1; - int32 globalRecvMsgOpt = 3; + int32 globalRecvMsgOpt = 3; } message setGlobalRecvMessageOptResp{ } @@ -155,7 +155,8 @@ message userRegisterCountReq { message userRegisterCountResp { int64 total = 1; - map count = 2; + int64 before = 2; + map count = 3; } service user { diff --git a/pkg/rpcclient/conversation.go b/pkg/rpcclient/conversation.go index 5cab1d689..617446852 100644 --- a/pkg/rpcclient/conversation.go +++ b/pkg/rpcclient/conversation.go @@ -1,29 +1,14 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package rpcclient import ( "context" "fmt" - "google.golang.org/grpc" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" + "google.golang.org/grpc" ) type Conversation struct { @@ -47,18 +32,7 @@ func NewConversationRpcClient(discov discoveryregistry.SvcDiscoveryRegistry) Con return ConversationRpcClient(*NewConversation(discov)) } -func (c *ConversationRpcClient) ModifyConversationField( - ctx context.Context, - req *pbConversation.ModifyConversationFieldReq, -) error { - _, err := c.Client.ModifyConversationField(ctx, req) - return err -} - -func (c *ConversationRpcClient) GetSingleConversationRecvMsgOpt( - ctx context.Context, - userID, conversationID string, -) (int32, error) { +func (c *ConversationRpcClient) GetSingleConversationRecvMsgOpt(ctx context.Context, userID, conversationID string) (int32, error) { var req pbConversation.GetConversationReq req.OwnerUserID = userID req.ConversationID = conversationID @@ -70,51 +44,21 @@ func (c *ConversationRpcClient) GetSingleConversationRecvMsgOpt( } func (c *ConversationRpcClient) SingleChatFirstCreateConversation(ctx context.Context, recvID, sendID string) error { - _, err := c.Client.CreateSingleChatConversations( - ctx, - &pbConversation.CreateSingleChatConversationsReq{RecvID: recvID, SendID: sendID}, - ) + _, err := c.Client.CreateSingleChatConversations(ctx, &pbConversation.CreateSingleChatConversationsReq{RecvID: recvID, SendID: sendID}) return err } -func (c *ConversationRpcClient) GroupChatFirstCreateConversation( - ctx context.Context, - groupID string, - userIDs []string, -) error { - _, err := c.Client.CreateGroupChatConversations( - ctx, - &pbConversation.CreateGroupChatConversationsReq{UserIDs: userIDs, GroupID: groupID}, - ) +func (c *ConversationRpcClient) GroupChatFirstCreateConversation(ctx context.Context, groupID string, userIDs []string) error { + _, err := c.Client.CreateGroupChatConversations(ctx, &pbConversation.CreateGroupChatConversationsReq{UserIDs: userIDs, GroupID: groupID}) return err } -func (c *ConversationRpcClient) SetConversationMaxSeq( - ctx context.Context, - ownerUserIDs []string, - conversationID string, - maxSeq int64, -) error { - _, err := c.Client.SetConversationMaxSeq( - ctx, - &pbConversation.SetConversationMaxSeqReq{ - OwnerUserID: ownerUserIDs, - ConversationID: conversationID, - MaxSeq: maxSeq, - }, - ) +func (c *ConversationRpcClient) SetConversationMaxSeq(ctx context.Context, ownerUserIDs []string, conversationID string, maxSeq int64) error { + _, err := c.Client.SetConversationMaxSeq(ctx, &pbConversation.SetConversationMaxSeqReq{OwnerUserID: ownerUserIDs, ConversationID: conversationID, MaxSeq: maxSeq}) return err } - -func (c *ConversationRpcClient) SetConversations( - ctx context.Context, - userIDs []string, - conversation *pbConversation.ConversationReq, -) error { - _, err := c.Client.SetConversations( - ctx, - &pbConversation.SetConversationsReq{UserIDs: userIDs, Conversation: conversation}, - ) +func (c *ConversationRpcClient) SetConversations(ctx context.Context, userIDs []string, conversation *pbConversation.ConversationReq) error { + _, err := c.Client.SetConversations(ctx, &pbConversation.SetConversationsReq{UserIDs: userIDs, Conversation: conversation}) return err } @@ -126,28 +70,16 @@ func (c *ConversationRpcClient) GetConversationIDs(ctx context.Context, ownerUse return resp.ConversationIDs, nil } -func (c *ConversationRpcClient) GetConversation( - ctx context.Context, - ownerUserID, conversationID string, -) (*pbConversation.Conversation, error) { - resp, err := c.Client.GetConversation( - ctx, - &pbConversation.GetConversationReq{OwnerUserID: ownerUserID, ConversationID: conversationID}, - ) +func (c *ConversationRpcClient) GetConversation(ctx context.Context, ownerUserID, conversationID string) (*pbConversation.Conversation, error) { + resp, err := c.Client.GetConversation(ctx, &pbConversation.GetConversationReq{OwnerUserID: ownerUserID, ConversationID: conversationID}) if err != nil { return nil, err } return resp.Conversation, nil } -func (c *ConversationRpcClient) GetConversationsByConversationID( - ctx context.Context, - conversationIDs []string, -) ([]*pbConversation.Conversation, error) { - resp, err := c.Client.GetConversationsByConversationID( - ctx, - &pbConversation.GetConversationsByConversationIDReq{ConversationIDs: conversationIDs}, - ) +func (c *ConversationRpcClient) GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*pbConversation.Conversation, error) { + resp, err := c.Client.GetConversationsByConversationID(ctx, &pbConversation.GetConversationsByConversationIDReq{ConversationIDs: conversationIDs}) if err != nil { return nil, err } @@ -157,15 +89,8 @@ func (c *ConversationRpcClient) GetConversationsByConversationID( return resp.Conversations, nil } -func (c *ConversationRpcClient) GetConversations( - ctx context.Context, - ownerUserID string, - conversationIDs []string, -) ([]*pbConversation.Conversation, error) { - resp, err := c.Client.GetConversations( - ctx, - &pbConversation.GetConversationsReq{OwnerUserID: ownerUserID, ConversationIDs: conversationIDs}, - ) +func (c *ConversationRpcClient) GetConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ([]*pbConversation.Conversation, error) { + resp, err := c.Client.GetConversations(ctx, &pbConversation.GetConversationsReq{OwnerUserID: ownerUserID, ConversationIDs: conversationIDs}) if err != nil { return nil, err } diff --git a/pkg/rpcclient/msg.go b/pkg/rpcclient/msg.go index aabc3768a..ca02ecc90 100644 --- a/pkg/rpcclient/msg.go +++ b/pkg/rpcclient/msg.go @@ -1,26 +1,9 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package rpcclient import ( "context" "encoding/json" - "google.golang.org/grpc" - "google.golang.org/protobuf/proto" - "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" @@ -28,6 +11,8 @@ import ( "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" + "google.golang.org/grpc" + "google.golang.org/protobuf/proto" // "google.golang.org/protobuf/proto" ) @@ -115,6 +100,8 @@ func newSessionTypeConf() map[int32]int32 { constant.ConversationChangeNotification: constant.SingleChatType, constant.ConversationUnreadNotification: constant.SingleChatType, constant.ConversationPrivateChatNotification: constant.SingleChatType, + // delete + constant.MsgDeleteNotification: constant.SingleChatType, } } @@ -149,10 +136,7 @@ func (m *MessageRpcClient) GetMaxSeq(ctx context.Context, req *sdkws.GetMaxSeqRe return resp, err } -func (m *MessageRpcClient) PullMessageBySeqList( - ctx context.Context, - req *sdkws.PullMessageBySeqsReq, -) (*sdkws.PullMessageBySeqsResp, error) { +func (m *MessageRpcClient) PullMessageBySeqList(ctx context.Context, req *sdkws.PullMessageBySeqsReq) (*sdkws.PullMessageBySeqsResp, error) { resp, err := m.Client.PullMessageBySeqs(ctx, req) return resp, err } @@ -169,62 +153,71 @@ type NotificationSender struct { contentTypeConf map[int32]config.NotificationConf sessionTypeConf map[int32]int32 sendMsg func(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error) + 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 NewNotificationSender(opts ...NewNotificationSenderOptions) *NotificationSender { - notificationSender := &NotificationSender{ - contentTypeConf: newContentTypeConf(), - sessionTypeConf: newSessionTypeConf(), +func WithUserRpcClient(userRpcClient *UserRpcClient) NotificationSenderOptions { + return func(s *NotificationSender) { + s.getUserInfo = userRpcClient.GetUserInfo } +} + +func NewNotificationSender(opts ...NotificationSenderOptions) *NotificationSender { + notificationSender := &NotificationSender{contentTypeConf: newContentTypeConf(), sessionTypeConf: newSessionTypeConf()} for _, opt := range opts { opt(notificationSender) } return notificationSender } -func (s *NotificationSender) NotificationWithSesstionType( - ctx context.Context, - sendID, recvID string, - contentType, sesstionType int32, - m proto.Message, - opts ...utils.OptionsOpt, -) (err error) { +type notificationOpt struct { + WithRpcGetUsername bool +} + +type NotificationOptions func(*notificationOpt) + +func WithRpcGetUserName() NotificationOptions { + return func(opt *notificationOpt) { + opt.WithRpcGetUsername = true + } +} + +func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, sendID, recvID string, contentType, sesstionType int32, m proto.Message, opts ...NotificationOptions) (err error) { n := sdkws.NotificationElem{Detail: utils.StructToJsonString(m)} content, err := json.Marshal(&n) if err != nil { - log.ZError( - ctx, - "MsgClient Notification json.Marshal failed", - err, - "sendID", - sendID, - "recvID", - recvID, - "contentType", - contentType, - "msg", - m, - ) + log.ZError(ctx, "MsgClient Notification json.Marshal failed", err, "sendID", sendID, "recvID", recvID, "contentType", contentType, "msg", m) return err } + notificationOpt := ¬ificationOpt{} + for _, opt := range opts { + opt(notificationOpt) + } var req msg.SendMsgReq var msg sdkws.MsgData + if notificationOpt.WithRpcGetUsername && s.getUserInfo != nil { + userInfo, err := s.getUserInfo(ctx, sendID) + if err != nil { + log.ZWarn(ctx, "getUserInfo failed", err, "sendID", sendID) + } else { + msg.SenderNickname = userInfo.Nickname + msg.SenderFaceURL = userInfo.FaceURL + } + } var offlineInfo sdkws.OfflinePushInfo var title, desc, ex string msg.SendID = sendID @@ -239,7 +232,6 @@ func (s *NotificationSender) NotificationWithSesstionType( msg.CreateTime = utils.GetCurrentTimestampByMill() msg.ClientMsgID = utils.GetMsgID(sendID) options := config.GetOptionsByNotification(s.contentTypeConf[contentType]) - options = utils.WithOptions(options, opts...) msg.Options = options offlineInfo.Title = title offlineInfo.Desc = desc @@ -255,12 +247,6 @@ func (s *NotificationSender) NotificationWithSesstionType( return err } -func (s *NotificationSender) Notification( - ctx context.Context, - sendID, recvID string, - contentType int32, - m proto.Message, - opts ...utils.OptionsOpt, -) error { +func (s *NotificationSender) Notification(ctx context.Context, sendID, recvID string, contentType int32, m proto.Message, opts ...NotificationOptions) error { return s.NotificationWithSesstionType(ctx, sendID, recvID, contentType, s.sessionTypeConf[contentType], m, opts...) } diff --git a/pkg/rpcclient/notification/extend_msg.go b/pkg/rpcclient/notification/extend_msg.go deleted file mode 100644 index 85e5b1903..000000000 --- a/pkg/rpcclient/notification/extend_msg.go +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package notification - -import ( - "context" - "encoding/json" - - "google.golang.org/protobuf/proto" - - "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" -) - -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/group.go b/pkg/rpcclient/notification/group.go index fcc32b092..3efe76802 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -1,17 +1,3 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package notification import ( @@ -30,13 +16,9 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" ) -func NewGroupNotificationSender( - db controller.GroupDatabase, - msgRpcClient *rpcclient.MessageRpcClient, - fn func(ctx context.Context, userIDs []string) ([]CommonUser, error), -) *GroupNotificationSender { +func NewGroupNotificationSender(db controller.GroupDatabase, msgRpcClient *rpcclient.MessageRpcClient, userRpcClient *rpcclient.UserRpcClient, fn func(ctx context.Context, userIDs []string) ([]CommonUser, error)) *GroupNotificationSender { return &GroupNotificationSender{ - NotificationSender: rpcclient.NewNotificationSender(rpcclient.WithRpcClient(msgRpcClient)), + NotificationSender: rpcclient.NewNotificationSender(rpcclient.WithRpcClient(msgRpcClient), rpcclient.WithUserRpcClient(userRpcClient)), getUsersInfo: fn, db: db, } @@ -98,11 +80,7 @@ func (g *GroupNotificationSender) getGroupInfo(ctx context.Context, groupID stri }, nil } -func (g *GroupNotificationSender) getGroupMembers( - ctx context.Context, - groupID string, - userIDs []string, -) ([]*sdkws.GroupMemberFullInfo, error) { +func (g *GroupNotificationSender) getGroupMembers(ctx context.Context, groupID string, userIDs []string) ([]*sdkws.GroupMemberFullInfo, error) { members, err := g.db.FindGroupMember(ctx, []string{groupID}, userIDs, nil) if err != nil { return nil, err @@ -117,9 +95,7 @@ func (g *GroupNotificationSender) getGroupMembers( for _, member := range members { user, ok := users[member.UserID] if !ok { - return nil, errs.ErrUserIDNotFound.Wrap( - fmt.Sprintf("group %s member %s not in user", member.GroupID, member.UserID), - ) + return nil, errs.ErrUserIDNotFound.Wrap(fmt.Sprintf("group %s member %s not in user", member.GroupID, member.UserID)) } if member.Nickname == "" { member.Nickname = user.Nickname @@ -141,11 +117,7 @@ func (g *GroupNotificationSender) getGroupMembers( return res, nil } -func (g *GroupNotificationSender) getGroupMemberMap( - ctx context.Context, - groupID string, - userIDs []string, -) (map[string]*sdkws.GroupMemberFullInfo, error) { +func (g *GroupNotificationSender) getGroupMemberMap(ctx context.Context, groupID string, userIDs []string) (map[string]*sdkws.GroupMemberFullInfo, error) { members, err := g.getGroupMembers(ctx, groupID, userIDs) if err != nil { return nil, err @@ -157,11 +129,7 @@ func (g *GroupNotificationSender) getGroupMemberMap( return m, nil } -func (g *GroupNotificationSender) getGroupMember( - ctx context.Context, - groupID string, - userID string, -) (*sdkws.GroupMemberFullInfo, error) { +func (g *GroupNotificationSender) getGroupMember(ctx context.Context, groupID string, userID string) (*sdkws.GroupMemberFullInfo, error) { members, err := g.getGroupMembers(ctx, groupID, []string{userID}) if err != nil { return nil, err @@ -181,11 +149,7 @@ func (g *GroupNotificationSender) getGroupOwnerAndAdminUserID(ctx context.Contex return utils.Slice(members, fn), nil } -func (g *GroupNotificationSender) groupDB2PB( - group *relation.GroupModel, - ownerUserID string, - memberCount uint32, -) *sdkws.GroupInfo { +func (g *GroupNotificationSender) groupDB2PB(group *relation.GroupModel, ownerUserID string, memberCount uint32) *sdkws.GroupInfo { return &sdkws.GroupInfo{ GroupID: group.GroupID, GroupName: group.GroupName, @@ -207,10 +171,7 @@ func (g *GroupNotificationSender) groupDB2PB( } } -func (g *GroupNotificationSender) groupMemberDB2PB( - member *relation.GroupMemberModel, - appMangerLevel int32, -) *sdkws.GroupMemberFullInfo { +func (g *GroupNotificationSender) groupMemberDB2PB(member *relation.GroupMemberModel, appMangerLevel int32) *sdkws.GroupMemberFullInfo { return &sdkws.GroupMemberFullInfo{ GroupID: member.GroupID, UserID: member.UserID, @@ -227,10 +188,7 @@ func (g *GroupNotificationSender) groupMemberDB2PB( } } -func (g *GroupNotificationSender) getUsersInfoMap( - ctx context.Context, - userIDs []string, -) (map[string]*sdkws.UserInfo, error) { +func (g *GroupNotificationSender) getUsersInfoMap(ctx context.Context, userIDs []string) (map[string]*sdkws.UserInfo, error) { users, err := g.getUsersInfo(ctx, userIDs) if err != nil { return nil, err @@ -242,11 +200,7 @@ func (g *GroupNotificationSender) getUsersInfoMap( return result, nil } -func (g *GroupNotificationSender) fillOpUser( - ctx context.Context, - opUser **sdkws.GroupMemberFullInfo, - groupID string, -) error { +func (g *GroupNotificationSender) fillOpUser(ctx context.Context, opUser **sdkws.GroupMemberFullInfo, groupID string) error { if opUser == nil { return errs.ErrInternalServer.Wrap("**sdkws.GroupMemberFullInfo is nil") } @@ -285,62 +239,35 @@ func (g *GroupNotificationSender) fillOpUser( return nil } -func (g *GroupNotificationSender) GroupCreatedNotification( - ctx context.Context, - tips *sdkws.GroupCreatedTips, -) (err error) { +func (g *GroupNotificationSender) GroupCreatedNotification(ctx context.Context, tips *sdkws.GroupCreatedTips) (err error) { if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } return g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupCreatedNotification, tips) } -func (g *GroupNotificationSender) GroupInfoSetNotification( - ctx context.Context, - tips *sdkws.GroupInfoSetTips, -) (err error) { +func (g *GroupNotificationSender) GroupInfoSetNotification(ctx context.Context, tips *sdkws.GroupInfoSetTips) (err error) { if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } - return g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetNotification, tips) + return g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetNotification, tips, rpcclient.WithRpcGetUserName()) } -func (g *GroupNotificationSender) GroupInfoSetNameNotification( - ctx context.Context, - tips *sdkws.GroupInfoSetNameTips, -) (err error) { +func (g *GroupNotificationSender) GroupInfoSetNameNotification(ctx context.Context, tips *sdkws.GroupInfoSetNameTips) (err error) { if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } - return g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - tips.Group.GroupID, - constant.GroupInfoSetNameNotification, - tips, - ) + return g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetNameNotification, tips) } -func (g *GroupNotificationSender) GroupInfoSetAnnouncementNotification( - ctx context.Context, - tips *sdkws.GroupInfoSetAnnouncementTips, -) (err error) { +func (g *GroupNotificationSender) GroupInfoSetAnnouncementNotification(ctx context.Context, tips *sdkws.GroupInfoSetAnnouncementTips) (err error) { if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } - return g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - tips.Group.GroupID, - constant.GroupInfoSetAnnouncementNotification, - tips, - ) + return g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetAnnouncementNotification, tips, rpcclient.WithRpcGetUserName()) } -func (g *GroupNotificationSender) JoinGroupApplicationNotification( - ctx context.Context, - req *pbGroup.JoinGroupReq, -) (err error) { +func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.Context, req *pbGroup.JoinGroupReq) (err error) { group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err @@ -364,10 +291,7 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification( return nil } -func (g *GroupNotificationSender) MemberQuitNotification( - ctx context.Context, - member *sdkws.GroupMemberFullInfo, -) (err error) { +func (g *GroupNotificationSender) MemberQuitNotification(ctx context.Context, member *sdkws.GroupMemberFullInfo) (err error) { defer log.ZDebug(ctx, "return") defer func() { if err != nil { @@ -382,10 +306,7 @@ func (g *GroupNotificationSender) MemberQuitNotification( return g.Notification(ctx, mcontext.GetOpUserID(ctx), member.GroupID, constant.MemberQuitNotification, tips) } -func (g *GroupNotificationSender) GroupApplicationAcceptedNotification( - ctx context.Context, - req *pbGroup.GroupApplicationResponseReq, -) (err error) { +func (g *GroupNotificationSender) GroupApplicationAcceptedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (err error) { defer log.ZDebug(ctx, "return") defer func() { if err != nil { @@ -405,13 +326,7 @@ func (g *GroupNotificationSender) GroupApplicationAcceptedNotification( return err } for _, userID := range append(userIDs, mcontext.GetOpUserID(ctx)) { - err = g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - userID, - constant.GroupApplicationAcceptedNotification, - tips, - ) + err = g.Notification(ctx, mcontext.GetOpUserID(ctx), userID, constant.GroupApplicationAcceptedNotification, tips) if err != nil { log.ZError(ctx, "failed", err) } @@ -419,10 +334,7 @@ func (g *GroupNotificationSender) GroupApplicationAcceptedNotification( return nil } -func (g *GroupNotificationSender) GroupApplicationRejectedNotification( - ctx context.Context, - req *pbGroup.GroupApplicationResponseReq, -) (err error) { +func (g *GroupNotificationSender) GroupApplicationRejectedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (err error) { group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err @@ -436,13 +348,7 @@ func (g *GroupNotificationSender) GroupApplicationRejectedNotification( return err } for _, userID := range append(userIDs, mcontext.GetOpUserID(ctx)) { - err = g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - userID, - constant.GroupApplicationRejectedNotification, - tips, - ) + err = g.Notification(ctx, mcontext.GetOpUserID(ctx), userID, constant.GroupApplicationRejectedNotification, tips) if err != nil { log.ZError(ctx, "failed", err) } @@ -450,10 +356,7 @@ func (g *GroupNotificationSender) GroupApplicationRejectedNotification( return nil } -func (g *GroupNotificationSender) GroupOwnerTransferredNotification( - ctx context.Context, - req *pbGroup.TransferGroupOwnerReq, -) (err error) { +func (g *GroupNotificationSender) GroupOwnerTransferredNotification(ctx context.Context, req *pbGroup.TransferGroupOwnerReq) (err error) { group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err @@ -463,38 +366,21 @@ func (g *GroupNotificationSender) GroupOwnerTransferredNotification( if err != nil { return err } - tips := &sdkws.GroupOwnerTransferredTips{ - Group: group, - OpUser: member[opUserID], - NewGroupOwner: member[req.NewOwnerUserID], - } + tips := &sdkws.GroupOwnerTransferredTips{Group: group, OpUser: member[opUserID], NewGroupOwner: member[req.NewOwnerUserID]} if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } - return g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - group.GroupID, - constant.GroupOwnerTransferredNotification, - tips, - ) + return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupOwnerTransferredNotification, tips) } -func (g *GroupNotificationSender) MemberKickedNotification( - ctx context.Context, - tips *sdkws.MemberKickedTips, -) (err error) { +func (g *GroupNotificationSender) MemberKickedNotification(ctx context.Context, tips *sdkws.MemberKickedTips) (err error) { if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } return g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.MemberKickedNotification, tips) } -func (g *GroupNotificationSender) MemberInvitedNotification( - ctx context.Context, - groupID, reason string, - invitedUserIDList []string, -) (err error) { +func (g *GroupNotificationSender) MemberInvitedNotification(ctx context.Context, groupID, reason string, invitedUserIDList []string) (err error) { group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err @@ -513,10 +399,7 @@ func (g *GroupNotificationSender) MemberInvitedNotification( return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.MemberInvitedNotification, tips) } -func (g *GroupNotificationSender) MemberEnterNotification( - ctx context.Context, - req *pbGroup.GroupApplicationResponseReq, -) (err error) { +func (g *GroupNotificationSender) MemberEnterNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (err error) { group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err @@ -529,21 +412,14 @@ func (g *GroupNotificationSender) MemberEnterNotification( return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.MemberEnterNotification, tips) } -func (g *GroupNotificationSender) GroupDismissedNotification( - ctx context.Context, - tips *sdkws.GroupDismissedTips, -) (err error) { +func (g *GroupNotificationSender) GroupDismissedNotification(ctx context.Context, tips *sdkws.GroupDismissedTips) (err error) { if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } return g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupDismissedNotification, tips) } -func (g *GroupNotificationSender) GroupMemberMutedNotification( - ctx context.Context, - groupID, groupMemberUserID string, - mutedSeconds uint32, -) (err error) { +func (g *GroupNotificationSender) GroupMemberMutedNotification(ctx context.Context, groupID, groupMemberUserID string, mutedSeconds uint32) (err error) { group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err @@ -560,10 +436,7 @@ func (g *GroupNotificationSender) GroupMemberMutedNotification( return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMemberMutedNotification, tips) } -func (g *GroupNotificationSender) GroupMemberCancelMutedNotification( - ctx context.Context, - groupID, groupMemberUserID string, -) (err error) { +func (g *GroupNotificationSender) GroupMemberCancelMutedNotification(ctx context.Context, groupID, groupMemberUserID string) (err error) { group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err @@ -572,21 +445,11 @@ func (g *GroupNotificationSender) GroupMemberCancelMutedNotification( if err != nil { return err } - tips := &sdkws.GroupMemberCancelMutedTips{ - Group: group, - OpUser: user[mcontext.GetOpUserID(ctx)], - MutedUser: user[groupMemberUserID], - } + tips := &sdkws.GroupMemberCancelMutedTips{Group: group, OpUser: user[mcontext.GetOpUserID(ctx)], MutedUser: user[groupMemberUserID]} if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } - return g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - group.GroupID, - constant.GroupMemberCancelMutedNotification, - tips, - ) + return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMemberCancelMutedNotification, tips) } func (g *GroupNotificationSender) GroupMutedNotification(ctx context.Context, groupID string) (err error) { @@ -627,10 +490,7 @@ func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Conte return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupCancelMutedNotification, tips) } -func (g *GroupNotificationSender) GroupMemberInfoSetNotification( - ctx context.Context, - groupID, groupMemberUserID string, -) (err error) { +func (g *GroupNotificationSender) GroupMemberInfoSetNotification(ctx context.Context, groupID, groupMemberUserID string) (err error) { group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err @@ -639,21 +499,14 @@ func (g *GroupNotificationSender) GroupMemberInfoSetNotification( if err != nil { return err } - tips := &sdkws.GroupMemberInfoSetTips{ - Group: group, - OpUser: user[mcontext.GetOpUserID(ctx)], - ChangedUser: user[groupMemberUserID], - } + tips := &sdkws.GroupMemberInfoSetTips{Group: group, OpUser: user[mcontext.GetOpUserID(ctx)], ChangedUser: user[groupMemberUserID]} if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMemberInfoSetNotification, tips) } -func (g *GroupNotificationSender) GroupMemberSetToAdminNotification( - ctx context.Context, - groupID, groupMemberUserID string, -) (err error) { +func (g *GroupNotificationSender) GroupMemberSetToAdminNotification(ctx context.Context, groupID, groupMemberUserID string) (err error) { group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err @@ -662,27 +515,14 @@ func (g *GroupNotificationSender) GroupMemberSetToAdminNotification( if err != nil { return err } - tips := &sdkws.GroupMemberInfoSetTips{ - Group: group, - OpUser: user[mcontext.GetOpUserID(ctx)], - ChangedUser: user[groupMemberUserID], - } + tips := &sdkws.GroupMemberInfoSetTips{Group: group, OpUser: user[mcontext.GetOpUserID(ctx)], ChangedUser: user[groupMemberUserID]} if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } - return g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - group.GroupID, - constant.GroupMemberSetToAdminNotification, - tips, - ) + return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMemberSetToAdminNotification, tips) } -func (g *GroupNotificationSender) GroupMemberSetToOrdinaryUserNotification( - ctx context.Context, - groupID, groupMemberUserID string, -) (err error) { +func (g *GroupNotificationSender) GroupMemberSetToOrdinaryUserNotification(ctx context.Context, groupID, groupMemberUserID string) (err error) { group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err @@ -691,28 +531,14 @@ func (g *GroupNotificationSender) GroupMemberSetToOrdinaryUserNotification( if err != nil { return err } - tips := &sdkws.GroupMemberInfoSetTips{ - Group: group, - OpUser: user[mcontext.GetOpUserID(ctx)], - ChangedUser: user[groupMemberUserID], - } + tips := &sdkws.GroupMemberInfoSetTips{Group: group, OpUser: user[mcontext.GetOpUserID(ctx)], ChangedUser: user[groupMemberUserID]} if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } - return g.Notification( - ctx, - mcontext.GetOpUserID(ctx), - group.GroupID, - constant.GroupMemberSetToOrdinaryUserNotification, - tips, - ) + return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMemberSetToOrdinaryUserNotification, tips) } -func (g *GroupNotificationSender) MemberEnterDirectlyNotification( - ctx context.Context, - groupID string, - entrantUserID string, -) (err error) { +func (g *GroupNotificationSender) MemberEnterDirectlyNotification(ctx context.Context, groupID string, entrantUserID string) (err error) { defer log.ZDebug(ctx, "return") defer func() { if err != nil { 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 17dec167c..a88c061e2 100644 --- a/pkg/rpcclient/user.go +++ b/pkg/rpcclient/user.go @@ -17,7 +17,6 @@ package rpcclient import ( "context" "strings" - "time" "google.golang.org/grpc" @@ -33,17 +32,16 @@ import ( type User struct { conn grpc.ClientConnInterface Client user.UserClient - discov discoveryregistry.SvcDiscoveryRegistry + Discov discoveryregistry.SvcDiscoveryRegistry } 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) } client := user.NewUserClient(conn) - return &User{discov: discov, Client: client, conn: conn} + return &User{Discov: discov, Client: client, conn: conn} } type UserRpcClient User diff --git a/pkg/utils/utils_v2.go b/pkg/utils/utils_v2.go index f4cc44871..dc14fe4e8 100644 --- a/pkg/utils/utils_v2.go +++ b/pkg/utils/utils_v2.go @@ -543,3 +543,15 @@ func Batch[T any, V any](fn func(T) V, ts []T) []V { } return res } + +func InitSlice[T any](val *[]T) { + if val != nil && *val == nil { + *val = []T{} + } +} + +func InitMap[K comparable, V any](val *map[K]V) { + if val != nil && *val == nil { + *val = map[K]V{} + } +} From b865fb12640fe29313f43030a69b7392042ff76a Mon Sep 17 00:00:00 2001 From: Xinwei Xiong <86140903+cubxxw@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:44:06 +0800 Subject: [PATCH 09/13] fix: fix start scripts (#501) * fix: fix start scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add openim ci Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add bash scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> --------- Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> --- .github/workflows/scripts-test.yml | 14 ++++++++++---- assets/logo-gif/openim-logo.gif | Bin 430462 -> 1729731 bytes assets/openim-logo-gradient.pdf | Bin 0 -> 10462 bytes assets/openim-logo-gradient.svg | 1 + assets/openim-logo-green.pdf | Bin 0 -> 10749 bytes assets/openim-logo-green.svg | 1 + 6 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 assets/openim-logo-gradient.pdf create mode 100644 assets/openim-logo-gradient.svg create mode 100644 assets/openim-logo-green.pdf create mode 100644 assets/openim-logo-green.svg diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml index 1358bcb37..f2fdc8a19 100644 --- a/.github/workflows/scripts-test.yml +++ b/.github/workflows/scripts-test.yml @@ -1,4 +1,4 @@ -name: Execute Scripts +name: OpenIM Start Execute Scripts on: push: @@ -27,20 +27,23 @@ jobs: uses: actions/checkout@v2 - name: Start Docker Compose - run: | + run: | docker-compose stop docker-compose up -d + sleep 60 - name: Stop all services run: | chmod +x ./scripts/stop_all.sh ./scripts/stop_all.sh + shell: bash - name: Build all services run: | chmod +x ./scripts/build_all_service.sh ./scripts/build_all_service.sh cat logs/openIM.log + shell: bash - name: Start all services run: | @@ -48,16 +51,19 @@ jobs: ./scripts/start_all.sh cat logs/openIM.log continue-on-error: true + shell: bash - name: Check all services run: | chmod +x ./scripts/check_all.sh ./scripts/check_all.sh cat logs/openIM.log + shell: bash continue-on-error: true - name: Print openIM.log run: | - cat -n logs/openIM.log + cat logs/openIM.log cat logs/openIM.log >> "$GITHUB_OUTPUT" - + shell: bash + continue-on-error: true diff --git a/assets/logo-gif/openim-logo.gif b/assets/logo-gif/openim-logo.gif index 7797896413b8fa290d3c51ad7ac145f34a44f2ed..42d7d65363d62829395b3ed25fce7fdd83a46c34 100644 GIT binary patch literal 1729731 zcma&NS5#9^+`k)@W&sNdiWHU5o1y|zRa!ub0s-mLTL7hZEEMUH-g^yAAan@5_a0iP zp%Z#S3E9W@ch1H8|6iS(S$oaed*-|Mnz`7|d>(lPIgvL;-zi1N2rMr^AP^V?f`C9U z5C{$eAweKC2t@p^7YqhLz#teH1P6nVU=SJ%BK~(P7y^PoKrjdh4gnz{AT$I-{O@@% z3Xc&n2-=JVP2m%Me;2=00goK08a1imonZQU81POv6L2x7pi3FjM zAmV@1gV7)e8U#aw;AjvM4ML+q#Q$mn6G0Fn2u1|Ki6A5qgeHQB|5GRw41z*HP#6db z2SJe_C>jJMf}kKU6byz!z)%<%3I{`xU?>_4C4!+K2owx~LLg8W1PX^hkq{^v0wqGA zAQ%)3gF;|X7z_%BL6I;h8U`i8pddID42MGCP#7EvheMHYC>jnW!l57}6pVyIkWd&B z3P(bbNGKW!B_g39G!%@6LeNkc8VW~4k!UCy4JD$XAR-h@ghGf=7!e95LXku$ng}Hl zp&$?f3_?Ia2p9+f2O*Fk1R8`Of)F4u0t`k#zz7%^0S6$Xb?aI0U$5{1_KZ<00RSXFn|ODXfQwo z10V3r z{e7EUUh4cz zu0&R~?Fy#2p3pznhC`^v3&Q?NUz%zY>hj|BNM6_n4!i{b5NG<=j=SizAHdUx={~oFHWq)~ zk>gzQyRT`vqndZstksT=` zSZA39m*lpJ{G%pXkQHklyqO!*DwmX3?9Hv4pZ(K%D?cw7VO@}4RcDPTLIGRWMaWj` z?V{>lh8gpEW6gMr#;X@RmTeRtip){Zc#6uqgsO@v1`c(0ko^oce3ionx_ni-JzKWL zH31j4C5z!acC{Okg}B=7#BIB}oz4rpbiebUjr73GH|r=OetWM8M9I6~OhymeZ=vES z+IKp|=-Ow}{Hon=zpn*5=y+&RbkND@x^vL=Bv5Z5CnZ+tuqQDwS+F;`yvU)CCr`;9 zKC30JsK1xzyyY*E^fUTmJWd(k3cwzUk$ty)<=#}(=t^Kt4m*goluqDIh=ga zwsX?=#qqKdZREcC@|Fh4Uu-r8Fd+!rqsX&UdN}Q_hy!RDFmWzodXmjVS??{e=CVF92%C0A!G= ziAQ(rC^eX_(&sl*RE7Vz?eyg;E1G*$`;OzoTl3_v<6B0Y_rE+!2M(+8e7P_3+$fPTc@-;Kp>?38Nkq6-xMOn-z)m=~C7leGjl|@ha2=anPE%5iM(X($gb$9Ca|L}xnuRnRCpb#7$ z8HdbfeI3-Q=ph)DHfPEycD+|Ecr-d&JcnDor#qcQ3M%{P}uSXU&D7xGtDF5fSPS=3MW1FiU~!VZL;p_tUzIbCHAxn1bP z50f1X)n)CA?PLwvEx9IS7!)!2@!VA4k>#6#=lTe30^>YV;goZWc zQUw=X`I$OG<9=AF*ZRfN*---ObfDCS(6?ZHgHYWHdkZ7?+xS6PcK7P#nJq*yp^ zCJ%u9d|LG7$~Cvx-qLQRxb z?hK(jUsIHYD|@Y|J3MT}`ltK(uPr`%eAW$7IfQW)t+I=q^?VF3k1owx0(7QZuO|Qf zQ7yhowc^sEPE!$|p|B+Ac-Cit+l_hIu*U7X3v_*@DGyu`w|K)6-SwvPWjLY1TZP$#nx7=czjq}pW$7Oe2g%{f z0&QVNk3FV`TwKZ%ieXmLo--rtRh8AY4-BO|ewM~o)^sW39Fpn{QzWbFrUq~>^`1uc za?TCvVT&H>=a?#kO7(?-JsnZVR

mWsOI*{Ct0{0D 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\OEj0%2){B)=^3y^&=#1A2M!}Y{^VT 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

=VoVpA%7aXkfWme^2PYwmcy<;x23ux9 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

)GE2eGB8k;HL4$7N@FK7i98Y*YdGky znnczP#s%}$zQHi2b~nb>-SAE|{@Po*Z!pZ(Ji6h`vRt;)tKD>5aJBy%3`5u=XZ{Am z>=Fe_x(;r7U%xEJX^+1nf^Dq;wd;PAm`W#VSZVwErrdNeks)la*bDs=@BMgnqTlum zw7Jgq_v3ZjYGbqvBiWU-7?lhUQ;A>CO4vEOmk(uEI;6KV654P2lzFQ^9_Iu8ij55@ zNGqNS8fX+WE$YmyDPf*`xOprax7tKe8bvsGW-5{UJ+HfLt4A+ow)Z{D-Ao OS? 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