From 6ea6a61e9067e3cb146a6158dfb5b838bb9271c5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 17 May 2022 17:44:08 +0800 Subject: [PATCH 001/752] organization --- deploy_k8s/dockerfiles/admin_cms.Dockerfile | 0 deploy_k8s/dockerfiles/api.Dockerfile | 15 ++++++++++ deploy_k8s/dockerfiles/auth.Dockerfile | 0 deploy_k8s/dockerfiles/cache.Dockerfile | 0 deploy_k8s/dockerfiles/cms_api.Dockerfile | 0 .../dockerfiles/conversation.Dockerfile | 0 deploy_k8s/dockerfiles/demo.Dockerfile | 0 deploy_k8s/dockerfiles/friend.Dockerfile | 0 deploy_k8s/dockerfiles/group.Dockerfile | 0 deploy_k8s/dockerfiles/message_cms.Dockerfile | 0 deploy_k8s/dockerfiles/msg.Dockerfile | 0 deploy_k8s/dockerfiles/msg_gateway.Dockerfile | 0 deploy_k8s/dockerfiles/office.Dockerfile | 0 .../dockerfiles/organization.Dockerfile | 0 deploy_k8s/dockerfiles/push.Dockerfile | 0 deploy_k8s/dockerfiles/sdk_server.Dockerfile | 0 deploy_k8s/dockerfiles/statistics.Dockerfile | 0 deploy_k8s/dockerfiles/transfer.Dockerfile | 0 deploy_k8s/dockerfiles/user.Dockerfile | 0 deploy_k8s/script/build_push_all_images.sh | 28 +++++++++++++++++++ internal/rpc/user/user.go | 17 +++++++++-- 21 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 deploy_k8s/dockerfiles/admin_cms.Dockerfile create mode 100644 deploy_k8s/dockerfiles/api.Dockerfile create mode 100644 deploy_k8s/dockerfiles/auth.Dockerfile create mode 100644 deploy_k8s/dockerfiles/cache.Dockerfile create mode 100644 deploy_k8s/dockerfiles/cms_api.Dockerfile create mode 100644 deploy_k8s/dockerfiles/conversation.Dockerfile create mode 100644 deploy_k8s/dockerfiles/demo.Dockerfile create mode 100644 deploy_k8s/dockerfiles/friend.Dockerfile create mode 100644 deploy_k8s/dockerfiles/group.Dockerfile create mode 100644 deploy_k8s/dockerfiles/message_cms.Dockerfile create mode 100644 deploy_k8s/dockerfiles/msg.Dockerfile create mode 100644 deploy_k8s/dockerfiles/msg_gateway.Dockerfile create mode 100644 deploy_k8s/dockerfiles/office.Dockerfile create mode 100644 deploy_k8s/dockerfiles/organization.Dockerfile create mode 100644 deploy_k8s/dockerfiles/push.Dockerfile create mode 100644 deploy_k8s/dockerfiles/sdk_server.Dockerfile create mode 100644 deploy_k8s/dockerfiles/statistics.Dockerfile create mode 100644 deploy_k8s/dockerfiles/transfer.Dockerfile create mode 100644 deploy_k8s/dockerfiles/user.Dockerfile create mode 100644 deploy_k8s/script/build_push_all_images.sh diff --git a/deploy_k8s/dockerfiles/admin_cms.Dockerfile b/deploy_k8s/dockerfiles/admin_cms.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/api.Dockerfile b/deploy_k8s/dockerfiles/api.Dockerfile new file mode 100644 index 000000000..51d0e1971 --- /dev/null +++ b/deploy_k8s/dockerfiles/api.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ../cmd/bin/open_im_api $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/dockerfiles/auth.Dockerfile b/deploy_k8s/dockerfiles/auth.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/cache.Dockerfile b/deploy_k8s/dockerfiles/cache.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/cms_api.Dockerfile b/deploy_k8s/dockerfiles/cms_api.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/conversation.Dockerfile b/deploy_k8s/dockerfiles/conversation.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/demo.Dockerfile b/deploy_k8s/dockerfiles/demo.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/friend.Dockerfile b/deploy_k8s/dockerfiles/friend.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/group.Dockerfile b/deploy_k8s/dockerfiles/group.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/message_cms.Dockerfile b/deploy_k8s/dockerfiles/message_cms.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/msg.Dockerfile b/deploy_k8s/dockerfiles/msg.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/msg_gateway.Dockerfile b/deploy_k8s/dockerfiles/msg_gateway.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/office.Dockerfile b/deploy_k8s/dockerfiles/office.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/organization.Dockerfile b/deploy_k8s/dockerfiles/organization.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/push.Dockerfile b/deploy_k8s/dockerfiles/push.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/sdk_server.Dockerfile b/deploy_k8s/dockerfiles/sdk_server.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/statistics.Dockerfile b/deploy_k8s/dockerfiles/statistics.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/transfer.Dockerfile b/deploy_k8s/dockerfiles/transfer.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/dockerfiles/user.Dockerfile b/deploy_k8s/dockerfiles/user.Dockerfile new file mode 100644 index 000000000..e69de29bb diff --git a/deploy_k8s/script/build_push_all_images.sh b/deploy_k8s/script/build_push_all_images.sh new file mode 100644 index 000000000..5efab73e9 --- /dev/null +++ b/deploy_k8s/script/build_push_all_images.sh @@ -0,0 +1,28 @@ +#/bin/sh +#service_source_root=( +# #api service file +# ../cmd/open_im_api/ +# ../cmd/open_im_cms_api/ +# #rpc service file +# ../cmd/rpc/open_im_user/ +# ../cmd/rpc/open_im_friend/ +# ../cmd/rpc/open_im_group/ +# ../cmd/rpc/open_im_auth/ +# ../cmd/rpc/open_im_admin_cms/ +# ../cmd/rpc/open_im_message_cms/ +# ../cmd/rpc/open_im_statistics/ +# ../cmd/rpc/open_im_office/ +# ../cmd/rpc/open_im_organization/ +# ../cmd/rpc/open_im_conversation/ +# ../cmd/rpc/open_im_cache/ +# ../cmd/open_im_msg_gateway/ +# ../cmd/open_im_msg_transfer/ +# ../cmd/rpc/open_im_msg/ +# ../cmd/open_im_push/ +# ../cmd/Open-IM-SDK-Core/ +# ../cmd/open_im_demo/ +#) +# +dockerfile_list=pwd + +docker build -t $image . -f deploy.Dockerfile diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 90f983a05..bacd88c9c 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -7,7 +7,6 @@ import ( "Open_IM/pkg/common/db" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" errors "Open_IM/pkg/common/http" - "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" @@ -410,7 +409,21 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI if req.UserInfo.FaceURL != "" { go s.SyncJoinedGroupMemberFaceURL(req.UserInfo.UserID, req.UserInfo.FaceURL, req.OperationID, req.OpUserID) } - + //updateUserInfoToCacheReq := &cache.UpdateUserInfoToCacheReq{ + // OperationID: req.OperationID, + // UserInfoList: []*sdkws.UserInfo{req.UserInfo}, + //} + //cacheEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + //cacheClient := cache.NewCacheClient(cacheEtcdConn) + //resp, err := cacheClient.UpdateUserInfoToCache(context.Background(), updateUserInfoToCacheReq) + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), updateUserInfoToCacheReq.String()) + // return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrServer.ErrCode, ErrMsg: err.Error()}}, nil + //} + //if resp.CommonResp.ErrCode != 0 { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), resp.String()) + // return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrServer.ErrCode, ErrMsg: resp.CommonResp.ErrMsg}}, nil + //} return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{}}, nil } From e2f8156a4dd37bc7097bc8ecb347fdc6a8a25e71 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 17 May 2022 20:18:12 +0800 Subject: [PATCH 002/752] organization --- deploy_k8s/script/build_push_all_images.sh | 11 +++++-- internal/api/office/tag.go | 4 +-- internal/rpc/office/office.go | 37 +++++++++++++++++++++- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/deploy_k8s/script/build_push_all_images.sh b/deploy_k8s/script/build_push_all_images.sh index 5efab73e9..f5a03edfc 100644 --- a/deploy_k8s/script/build_push_all_images.sh +++ b/deploy_k8s/script/build_push_all_images.sh @@ -23,6 +23,13 @@ # ../cmd/open_im_demo/ #) # -dockerfile_list=pwd +dockerfile_list=$(ls ../dockerfiles/) +echo ${dockerfile_list} +for dockerfile in $dockerfile_list +do + echo "start to build images" $dockerfile + docker build -t $image . -f ${dockerfile} + echo "build ${dockerfile} ok" +done +echo ${#dockerfile_list[*]} -docker build -t $image . -f deploy.Dockerfile diff --git a/internal/api/office/tag.go b/internal/api/office/tag.go index 630517593..c187ecef5 100644 --- a/internal/api/office/tag.go +++ b/internal/api/office/tag.go @@ -262,8 +262,8 @@ func GetTagSendLogs(c *gin.Context) { client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetTagSendLogs(context.Background(), &reqPb) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTags failed", err.Error()) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()}) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTagSendLogs failed", err.Error()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetTagSendLogs rpc server failed" + err.Error()}) return } if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil { diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 1e76fa2b6..10d09c938 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -56,7 +56,13 @@ func (s *officeServer) Run() { log.NewInfo("0", "listen network success, ", address, listener) defer listener.Close() //grpc server - srv := grpc.NewServer() + recvSize := 1024 * 1024 * 30 + sendSize := 1024 * 1024 * 30 + var options = []grpc.ServerOption{ + grpc.MaxRecvMsgSize(recvSize), + grpc.MaxSendMsgSize(sendSize), + } + srv := grpc.NewServer(options...) defer srv.GracefulStop() //Service registers with etcd pbOffice.RegisterOfficeServiceServer(srv, s) @@ -548,9 +554,18 @@ func (s *officeServer) GetWorkMomentByID(_ context.Context, req *pbOffice.GetWor if !canSee { log.NewError(req.OperationID, utils.GetSelfFuncName(), "workMoments not access to user", canSee, workMoment, req.OpUserID) } + if err := utils.CopyStructFields(resp.WorkMoment, workMoment); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) } + user, err := imdb.GetUserByUserID(workMoment.UserID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserByUserID failed", err.Error()) + } + if user != nil { + resp.WorkMoment.FaceURL = user.FaceURL + resp.WorkMoment.UserName = user.Nickname + } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } @@ -573,6 +588,16 @@ func (s *officeServer) GetUserWorkMoments(_ context.Context, req *pbOffice.GetUs if err := utils.CopyStructFields(&resp.WorkMoments, workMoments); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } + for _, v := range resp.WorkMoments { + user, err := imdb.GetUserByUserID(v.UserID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + } + if user != nil { + v.UserName = user.Nickname + v.FaceURL = user.FaceURL + } + } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } @@ -590,6 +615,16 @@ func (s *officeServer) GetUserFriendWorkMoments(_ context.Context, req *pbOffice if err := utils.CopyStructFields(&resp.WorkMoments, workMoments); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } + for _, v := range resp.WorkMoments { + user, err := imdb.GetUserByUserID(v.UserID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + } + if user != nil { + v.UserName = user.Nickname + v.FaceURL = user.FaceURL + } + } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } From 2454c503807978c70362a32f5c229849239002f3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 17 May 2022 20:42:43 +0800 Subject: [PATCH 003/752] organization --- internal/rpc/office/office.go | 7 +++++++ pkg/common/constant/error.go | 11 ++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 10d09c938..1cade65eb 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -20,6 +20,7 @@ import ( "strings" "sync" "time" + "unsafe" ) type officeServer struct { @@ -213,6 +214,12 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR userIDList = append(userIDList[:i], userIDList[i+1:]...) } } + if unsafe.Sizeof(userIDList) > 1024*1024 { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "size", unsafe.Sizeof(userIDList)) + resp.CommonResp.ErrMsg = constant.ErrSendLimit.ErrMsg + resp.CommonResp.ErrCode = constant.ErrSendLimit.ErrCode + return + } log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "total userIDList result: ", userIDList) user, err := imdb.GetUserByUserID(req.SendID) if err != nil { diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index c8aca5fe6..2537c3706 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -49,11 +49,12 @@ var ( ErrTokenUnknown = ErrInfo{705, TokenUnknownMsg.Error()} ErrTokenKicked = ErrInfo{706, TokenUserKickedMsg.Error()} - ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} - ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} - ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} - ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} - ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} + ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} + ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} + ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} + ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} + ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} + ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many users"} ) var ( From de9c2d3d850f03fa021135e9adfe68b18eb03043 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 18 May 2022 08:06:05 +0800 Subject: [PATCH 004/752] mutex --- internal/msg_transfer/logic/init.go | 2 ++ internal/msg_transfer/logic/offline_history_msg_handler.go | 2 ++ internal/msg_transfer/logic/online_history_msg_handler.go | 2 ++ 3 files changed, 6 insertions(+) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index c382de7f0..8f5cc0695 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -24,6 +24,8 @@ var ( singleMsgSuccessCount uint64 groupMsgCount uint64 singleMsgFailedCount uint64 + + singleMsgSuccessCountMutex sync.Mutex ) func Init() { diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 13d168ddb..876beb30e 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -53,7 +53,9 @@ func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey s log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) return } + singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount++ + singleMsgSuccessCountMutex.Unlock() log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) } if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 43bd240c4..dd1f22634 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -86,7 +86,9 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey s log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) return } + singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount++ + singleMsgSuccessCountMutex.Unlock() log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) } if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { From 09cd8bcb99b2d67d6df3dfcac0087337035fed3b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 11:04:40 +0800 Subject: [PATCH 005/752] organization --- deploy_k8s/dockerfiles/api.Dockerfile | 2 +- deploy_k8s/script/build_push_all_images.sh | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/deploy_k8s/dockerfiles/api.Dockerfile b/deploy_k8s/dockerfiles/api.Dockerfile index 51d0e1971..6d9481d7d 100644 --- a/deploy_k8s/dockerfiles/api.Dockerfile +++ b/deploy_k8s/dockerfiles/api.Dockerfile @@ -5,7 +5,7 @@ ENV WORKDIR /bin ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ../cmd/bin/open_im_api $WORKDIR/main +ADD ../../cmd/bin/open_im_api $WORKDIR/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ diff --git a/deploy_k8s/script/build_push_all_images.sh b/deploy_k8s/script/build_push_all_images.sh index f5a03edfc..9ce01aa22 100644 --- a/deploy_k8s/script/build_push_all_images.sh +++ b/deploy_k8s/script/build_push_all_images.sh @@ -23,13 +23,19 @@ # ../cmd/open_im_demo/ #) # +cd ../../script/; ./build_all_service.sh +cd ../deploy_k8s/dockerfiles dockerfile_list=$(ls ../dockerfiles/) -echo ${dockerfile_list} + +echo "start to build images" + for dockerfile in $dockerfile_list do echo "start to build images" $dockerfile - docker build -t $image . -f ${dockerfile} - echo "build ${dockerfile} ok" + image=`echo $dockerfile |awk -F '.' '{print $1}'` + docker build -t $image . -f ../dockerfiles/${dockerfile} + echo "build ${dockerfile} success" + docker push $image + echo "push ${image} success " done -echo ${#dockerfile_list[*]} From c7b1d4514fb9dc6ce1877fa5d62d8590dc7a904e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 11:06:45 +0800 Subject: [PATCH 006/752] organization --- deploy_k8s/dockerfiles/api.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/dockerfiles/api.Dockerfile b/deploy_k8s/dockerfiles/api.Dockerfile index 6d9481d7d..bb2c9cc46 100644 --- a/deploy_k8s/dockerfiles/api.Dockerfile +++ b/deploy_k8s/dockerfiles/api.Dockerfile @@ -5,7 +5,7 @@ ENV WORKDIR /bin ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ../../cmd/bin/open_im_api $WORKDIR/main +ADD ../../bin/open_im_api $WORKDIR/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ From 9557baf22aa8b7c431589d331251c43312a0033a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 11:15:09 +0800 Subject: [PATCH 007/752] organization --- deploy_k8s/script/build_push_all_images.sh | 2 +- deploy_k8s/script/test.sh | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 deploy_k8s/script/test.sh diff --git a/deploy_k8s/script/build_push_all_images.sh b/deploy_k8s/script/build_push_all_images.sh index 9ce01aa22..2e4aded65 100644 --- a/deploy_k8s/script/build_push_all_images.sh +++ b/deploy_k8s/script/build_push_all_images.sh @@ -26,7 +26,7 @@ cd ../../script/; ./build_all_service.sh cd ../deploy_k8s/dockerfiles dockerfile_list=$(ls ../dockerfiles/) - +mv ../../bin/* ./ echo "start to build images" for dockerfile in $dockerfile_list diff --git a/deploy_k8s/script/test.sh b/deploy_k8s/script/test.sh new file mode 100644 index 000000000..4551c2a23 --- /dev/null +++ b/deploy_k8s/script/test.sh @@ -0,0 +1,2 @@ +var2=`echo "hello world"|awk -F ' ' '{print $1}'` +echo $var2 \ No newline at end of file From d2563063d19c632cf2403135f51a2c5dfd2b54d6 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 11:18:24 +0800 Subject: [PATCH 008/752] organization --- deploy_k8s/dockerfiles/api.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/dockerfiles/api.Dockerfile b/deploy_k8s/dockerfiles/api.Dockerfile index bb2c9cc46..bf86691d8 100644 --- a/deploy_k8s/dockerfiles/api.Dockerfile +++ b/deploy_k8s/dockerfiles/api.Dockerfile @@ -5,7 +5,7 @@ ENV WORKDIR /bin ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ../../bin/open_im_api $WORKDIR/main +ADD ./open_im_api $WORKDIR/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ From dcda3c7329226e5904c5b8303ab87f06ae0aa2c0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 11:34:12 +0800 Subject: [PATCH 009/752] organization --- deploy_k8s/script/build_push_all_images.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deploy_k8s/script/build_push_all_images.sh b/deploy_k8s/script/build_push_all_images.sh index 2e4aded65..2acd22e19 100644 --- a/deploy_k8s/script/build_push_all_images.sh +++ b/deploy_k8s/script/build_push_all_images.sh @@ -23,6 +23,7 @@ # ../cmd/open_im_demo/ #) # +$version = v2.0.10 cd ../../script/; ./build_all_service.sh cd ../deploy_k8s/dockerfiles dockerfile_list=$(ls ../dockerfiles/) @@ -33,6 +34,7 @@ for dockerfile in $dockerfile_list do echo "start to build images" $dockerfile image=`echo $dockerfile |awk -F '.' '{print $1}'` + image="openim"+image+$version docker build -t $image . -f ../dockerfiles/${dockerfile} echo "build ${dockerfile} success" docker push $image From 3433d211a543ff1e456f41bc43be0b054315e885 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 18 May 2022 11:49:24 +0800 Subject: [PATCH 010/752] options add value --- internal/api/manage/management_chat.go | 3 +-- pkg/utils/map.go | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 962283eb9..94caa5e2a 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -48,9 +48,8 @@ func newUserSendMsgReq(params *ManagementSendMsgReq) *pbChat.SendMsgReq { newContent = params.Content["revokeMsgClientID"].(string) default: } - var options map[string]bool + options := make(map[string]bool, 5) if params.IsOnlineOnly { - options = make(map[string]bool, 5) utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false) utils.SetSwitchFromOptions(options, constant.IsHistory, false) utils.SetSwitchFromOptions(options, constant.IsPersistent, false) diff --git a/pkg/utils/map.go b/pkg/utils/map.go index fc24cc87d..66ca27471 100644 --- a/pkg/utils/map.go +++ b/pkg/utils/map.go @@ -116,6 +116,9 @@ func JsonStringToMap(str string) (tempMap map[string]int32) { return tempMap } func GetSwitchFromOptions(Options map[string]bool, key string) (result bool) { + if Options == nil { + return true + } if flag, ok := Options[key]; !ok || flag { return true } From 313cf858f065868991e8ae495453fcb016ddf629 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 18 May 2022 11:52:15 +0800 Subject: [PATCH 011/752] Statistics --- internal/msg_gateway/gate/init.go | 2 ++ internal/msg_gateway/gate/logic.go | 2 ++ pkg/common/constant/constant.go | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/init.go b/internal/msg_gateway/gate/init.go index 5cf682b84..60c97f1de 100644 --- a/internal/msg_gateway/gate/init.go +++ b/internal/msg_gateway/gate/init.go @@ -19,6 +19,8 @@ var ( sendMsgFailedCount uint64 sendMsgSuccessCount uint64 userCount uint64 + + sendMsgAllCountLock sync.RWMutex ) func Init(rpcPort, wsPort int) { diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 51955f0fe..5644f1cb3 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -143,7 +143,9 @@ func (ws *WServer) pullMsgBySeqListResp(conn *UserConn, m *Req, pb *sdk_ws.PullM } func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { + sendMsgAllCountLock.Lock() sendMsgAllCount++ + sendMsgAllCountLock.Unlock() log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 33e350003..032108ee9 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -272,4 +272,4 @@ const BigVersion = "v3" const LogFileName = "OpenIM.log" -const StatisticsTimeInterval = 300 +const StatisticsTimeInterval = 60 From 681cf349e66aba1ef115dc86085c1d901587e781 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 11:53:57 +0800 Subject: [PATCH 012/752] organization --- internal/api/office/tag.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/api/office/tag.go b/internal/api/office/tag.go index c187ecef5..02278f60e 100644 --- a/internal/api/office/tag.go +++ b/internal/api/office/tag.go @@ -11,6 +11,7 @@ import ( "Open_IM/pkg/utils" "context" "github.com/gin-gonic/gin" + "google.golang.org/grpc" "net/http" "strings" ) @@ -260,7 +261,8 @@ func GetTagSendLogs(c *gin.Context) { } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) client := pbOffice.NewOfficeServiceClient(etcdConn) - respPb, err := client.GetTagSendLogs(context.Background(), &reqPb) + maxSizeOption := grpc.MaxCallRecvMsgSize(1024 * 1024 * 20) + respPb, err := client.GetTagSendLogs(context.Background(), &reqPb, maxSizeOption) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTagSendLogs failed", err.Error()) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetTagSendLogs rpc server failed" + err.Error()}) From 0e03fb6393cca5df7311cb28fd432a1d335c2b82 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 12:51:33 +0800 Subject: [PATCH 013/752] organization --- internal/rpc/office/office.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 1cade65eb..91b8ab669 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -240,6 +240,7 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR var tagSendLogs db.TagSendLog wg.Add(len(userIDList)) + var lock sync.Mutex for _, userID := range userIDList { go func(userID string) { defer wg.Done() @@ -248,10 +249,12 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserNameByUserID failed", err.Error()) return } + lock.Lock() tagSendLogs.UserList = append(tagSendLogs.UserList, db.TagUser{ UserID: userID, UserName: userName, }) + lock.Unlock() }(userID) } wg.Wait() From 888c837cddfe12ad7f00bff4aa8c67be8e807c2d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 15:10:44 +0800 Subject: [PATCH 014/752] office tag async send --- internal/rpc/office/office.go | 53 ++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 91b8ab669..016e6278f 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -28,15 +28,18 @@ type officeServer struct { rpcRegisterName string etcdSchema string etcdAddr []string + ch chan tagSendStruct } func NewOfficeServer(port int) *officeServer { log.NewPrivateLog(constant.LogFileName) + ch := make(chan tagSendStruct, 10000) return &officeServer{ rpcPort: port, rpcRegisterName: config.Config.RpcRegisterName.OpenImOfficeName, etcdSchema: config.Config.Etcd.EtcdSchema, etcdAddr: config.Config.Etcd.EtcdAddr, + ch: ch, } } @@ -80,6 +83,7 @@ func (s *officeServer) Run() { log.NewError("0", "RegisterEtcd failed ", err.Error()) return } + go s.sendTagMsgRoutine() err = srv.Serve(listener) if err != nil { log.NewError("0", "Serve failed ", err.Error()) @@ -88,6 +92,23 @@ func (s *officeServer) Run() { log.NewInfo("0", "message cms rpc success") } +type tagSendStruct struct { + operationID string + user *db.User + userID string + content string + senderPlatformID int32 +} + +func (s *officeServer) sendTagMsgRoutine() { + log.NewInfo("", utils.GetSelfFuncName(), "start") + select { + case v := <-s.ch: + msg.TagSendMessage(v.operationID, v.user, v.userID, v.content, v.senderPlatformID) + time.Sleep(time.Millisecond * 500) + } +} + func (s *officeServer) GetUserTags(_ context.Context, req *pbOffice.GetUserTagsReq) (resp *pbOffice.GetUserTagsResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req ", req.String()) resp = &pbOffice.GetUserTagsResp{ @@ -228,17 +249,29 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR resp.CommonResp.ErrCode = constant.ErrDB.ErrCode return resp, nil } - var wg sync.WaitGroup - wg.Add(len(userIDList)) - for _, userID := range userIDList { - go func(userID string) { - defer wg.Done() - msg.TagSendMessage(req.OperationID, user, userID, req.Content, req.SenderPlatformID) - }(userID) - } - wg.Wait() - var tagSendLogs db.TagSendLog + for _, userID := range userIDList { + t := tagSendStruct{ + operationID: req.OperationID, + user: user, + userID: userID, + content: req.Content, + senderPlatformID: 0, + } + select { + case s.ch <- t: + log.NewDebug(t.operationID, utils.GetSelfFuncName(), "msg: ", t, "send success") + // if channel is full, return grpc req + case <-time.After(1 * time.Second): + log.NewError(t.operationID, utils.GetSelfFuncName(), s.ch, "channel is full") + resp.CommonResp.ErrCode = constant.ErrSendLimit.ErrCode + resp.CommonResp.ErrMsg = constant.ErrSendLimit.ErrMsg + return resp, nil + } + } + + var tagSendLogs db.TagSendLog + var wg sync.WaitGroup wg.Add(len(userIDList)) var lock sync.Mutex for _, userID := range userIDList { From 9913e679282c0c89341517be21de14ef0ff9a822 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 15:16:44 +0800 Subject: [PATCH 015/752] office tag async send --- internal/rpc/office/office.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 016e6278f..93b2d1d2f 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -102,10 +102,12 @@ type tagSendStruct struct { func (s *officeServer) sendTagMsgRoutine() { log.NewInfo("", utils.GetSelfFuncName(), "start") - select { - case v := <-s.ch: - msg.TagSendMessage(v.operationID, v.user, v.userID, v.content, v.senderPlatformID) - time.Sleep(time.Millisecond * 500) + for { + select { + case v := <-s.ch: + msg.TagSendMessage(v.operationID, v.user, v.userID, v.content, v.senderPlatformID) + time.Sleep(time.Millisecond * 500) + } } } From b0e349212d26617acd4da7877a6c30fd703c5859 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 15:25:17 +0800 Subject: [PATCH 016/752] office tag async send --- internal/rpc/office/office.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 93b2d1d2f..816c272c7 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -258,7 +258,7 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR user: user, userID: userID, content: req.Content, - senderPlatformID: 0, + senderPlatformID: req.SenderPlatformID, } select { case s.ch <- t: @@ -281,7 +281,7 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR defer wg.Done() userName, err := im_mysql_model.GetUserNameByUserID(userID) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserNameByUserID failed", err.Error()) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserNameByUserID failed", err.Error(), userID) return } lock.Lock() From 18a61061e1071f1300e5dbc673503aeba6e201b3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 15:48:42 +0800 Subject: [PATCH 017/752] office tag async send --- internal/rpc/office/office.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 816c272c7..753fca492 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -33,7 +33,7 @@ type officeServer struct { func NewOfficeServer(port int) *officeServer { log.NewPrivateLog(constant.LogFileName) - ch := make(chan tagSendStruct, 10000) + ch := make(chan tagSendStruct, 100000) return &officeServer{ rpcPort: port, rpcRegisterName: config.Config.RpcRegisterName.OpenImOfficeName, @@ -106,7 +106,7 @@ func (s *officeServer) sendTagMsgRoutine() { select { case v := <-s.ch: msg.TagSendMessage(v.operationID, v.user, v.userID, v.content, v.senderPlatformID) - time.Sleep(time.Millisecond * 500) + time.Sleep(time.Millisecond * 100) } } } @@ -251,7 +251,7 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR resp.CommonResp.ErrCode = constant.ErrDB.ErrCode return resp, nil } - + var successUserIDList []string for _, userID := range userIDList { t := tagSendStruct{ operationID: req.OperationID, @@ -263,6 +263,7 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR select { case s.ch <- t: log.NewDebug(t.operationID, utils.GetSelfFuncName(), "msg: ", t, "send success") + successUserIDList = append(successUserIDList, userID) // if channel is full, return grpc req case <-time.After(1 * time.Second): log.NewError(t.operationID, utils.GetSelfFuncName(), s.ch, "channel is full") @@ -274,9 +275,9 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR var tagSendLogs db.TagSendLog var wg sync.WaitGroup - wg.Add(len(userIDList)) + wg.Add(len(successUserIDList)) var lock sync.Mutex - for _, userID := range userIDList { + for _, userID := range successUserIDList { go func(userID string) { defer wg.Done() userName, err := im_mysql_model.GetUserNameByUserID(userID) From 1fa16bd8dd01a828c23b4587bef02cdebcdf7c54 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 16:36:30 +0800 Subject: [PATCH 018/752] office tag async send --- deploy_k8s/dockerfiles/admin_cms.Dockerfile | 15 +++++++++++++++ deploy_k8s/script/build_push_all_images.sh | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/deploy_k8s/dockerfiles/admin_cms.Dockerfile b/deploy_k8s/dockerfiles/admin_cms.Dockerfile index e69de29bb..bf86691d8 100644 --- a/deploy_k8s/dockerfiles/admin_cms.Dockerfile +++ b/deploy_k8s/dockerfiles/admin_cms.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_api $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/script/build_push_all_images.sh b/deploy_k8s/script/build_push_all_images.sh index 2acd22e19..128622b77 100644 --- a/deploy_k8s/script/build_push_all_images.sh +++ b/deploy_k8s/script/build_push_all_images.sh @@ -23,7 +23,7 @@ # ../cmd/open_im_demo/ #) # -$version = v2.0.10 +version=v2.0.10 cd ../../script/; ./build_all_service.sh cd ../deploy_k8s/dockerfiles dockerfile_list=$(ls ../dockerfiles/) From c1632f8e65634bc2a8a8d859a317dcac88b6fd8d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 18 May 2022 18:37:42 +0800 Subject: [PATCH 019/752] tag message sender not notification --- internal/rpc/msg/tag_send_msg.go | 1 + pkg/common/constant/constant.go | 1 + 2 files changed, 2 insertions(+) diff --git a/internal/rpc/msg/tag_send_msg.go b/internal/rpc/msg/tag_send_msg.go index 195640498..a79a90ec6 100644 --- a/internal/rpc/msg/tag_send_msg.go +++ b/internal/rpc/msg/tag_send_msg.go @@ -27,6 +27,7 @@ func TagSendMessage(operationID string, user *db.User, recvID, content string, s msgData.SenderNickname = user.Nickname msgData.Options = map[string]bool{} msgData.Options[constant.IsSenderConversationUpdate] = false + msgData.Options[constant.IsSenderNotificationPush] = false msgData.CreateTime = utils.GetCurrentTimestampByMill() msgData.ClientMsgID = utils.GetMsgID(user.UserID) msgData.SenderPlatformID = senderPlatformID diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 33e350003..621bf9eb1 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -144,6 +144,7 @@ const ( IsSenderSync = "senderSync" IsNotPrivate = "notPrivate" IsSenderConversationUpdate = "senderConversationUpdate" + IsSenderNotificationPush = "senderNotificationPush" //GroupStatus GroupOk = 0 From d92d6e84d0a79c46aeca6d2c50ddd56c7ff1c2be Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 18 May 2022 18:58:51 +0800 Subject: [PATCH 020/752] push message --- internal/push/logic/push_to_client.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index b8125be5a..4ee83aa11 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -57,6 +57,9 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { for _, v := range wsResult { if v.ResultCode == 0 { + if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + break + } continue } if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { From 44bad0146cd3a7a12de8141efa361c6a0730580c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 19:13:00 +0800 Subject: [PATCH 021/752] office tag async send --- deploy/dockerfiles/Dockerfile.api | 3 +- .../admin_cms.Dockerfile | 0 .../{dockerfiles => api}/api.Dockerfile | 0 .../{dockerfiles => auth}/auth.Dockerfile | 0 deploy_k8s/build_push_all_images.sh | 51 +++++++++++++++++++ .../{dockerfiles => cache}/cache.Dockerfile | 0 .../cms_api.Dockerfile | 0 .../conversation.Dockerfile | 0 .../{dockerfiles => demo}/demo.Dockerfile | 0 .../{dockerfiles => friend}/friend.Dockerfile | 0 .../{dockerfiles => group}/group.Dockerfile | 0 .../message_cms.Dockerfile | 0 .../{dockerfiles => msg}/msg.Dockerfile | 0 .../msg_gateway.Dockerfile | 0 .../{dockerfiles => office}/office.Dockerfile | 0 .../organization.Dockerfile | 0 .../{dockerfiles => push}/push.Dockerfile | 0 deploy_k8s/script/build_push_all_images.sh | 43 ---------------- deploy_k8s/script/test.sh | 2 - .../sdk_server.Dockerfile | 0 20 files changed, 53 insertions(+), 46 deletions(-) rename deploy_k8s/{dockerfiles => admin_cms}/admin_cms.Dockerfile (100%) rename deploy_k8s/{dockerfiles => api}/api.Dockerfile (100%) rename deploy_k8s/{dockerfiles => auth}/auth.Dockerfile (100%) create mode 100644 deploy_k8s/build_push_all_images.sh rename deploy_k8s/{dockerfiles => cache}/cache.Dockerfile (100%) rename deploy_k8s/{dockerfiles => cms_api}/cms_api.Dockerfile (100%) rename deploy_k8s/{dockerfiles => conversation}/conversation.Dockerfile (100%) rename deploy_k8s/{dockerfiles => demo}/demo.Dockerfile (100%) rename deploy_k8s/{dockerfiles => friend}/friend.Dockerfile (100%) rename deploy_k8s/{dockerfiles => group}/group.Dockerfile (100%) rename deploy_k8s/{dockerfiles => message_cms}/message_cms.Dockerfile (100%) rename deploy_k8s/{dockerfiles => msg}/msg.Dockerfile (100%) rename deploy_k8s/{dockerfiles => msg_gateway}/msg_gateway.Dockerfile (100%) rename deploy_k8s/{dockerfiles => office}/office.Dockerfile (100%) rename deploy_k8s/{dockerfiles => organization}/organization.Dockerfile (100%) rename deploy_k8s/{dockerfiles => push}/push.Dockerfile (100%) delete mode 100644 deploy_k8s/script/build_push_all_images.sh delete mode 100644 deploy_k8s/script/test.sh rename deploy_k8s/{dockerfiles => sdk_server}/sdk_server.Dockerfile (100%) diff --git a/deploy/dockerfiles/Dockerfile.api b/deploy/dockerfiles/Dockerfile.api index 9c70d735d..99582608a 100644 --- a/deploy/dockerfiles/Dockerfile.api +++ b/deploy/dockerfiles/Dockerfile.api @@ -6,6 +6,7 @@ ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 ADD ./open_im_api $WORKDIR/main +COPY ./start_api.sh $$WORKDIR # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ @@ -13,4 +14,4 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ WORKDIR $WORKDIR -CMD ./main \ No newline at end of file +CMD ./start_api.sh \ No newline at end of file diff --git a/deploy_k8s/dockerfiles/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/admin_cms.Dockerfile rename to deploy_k8s/admin_cms/admin_cms.Dockerfile diff --git a/deploy_k8s/dockerfiles/api.Dockerfile b/deploy_k8s/api/api.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/api.Dockerfile rename to deploy_k8s/api/api.Dockerfile diff --git a/deploy_k8s/dockerfiles/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/auth.Dockerfile rename to deploy_k8s/auth/auth.Dockerfile diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh new file mode 100644 index 000000000..c043ebb7f --- /dev/null +++ b/deploy_k8s/build_push_all_images.sh @@ -0,0 +1,51 @@ +#/bin/sh +service=( + #api service file + api + cms_api + + #rpc service file + user + friend + group + auth + admin_cms + message_cms + statistics + office + organization + conversation + cache + gateway + transfer + msg + push + sdk_server + open_im_demo +) +# +version=v2.0.10 +cd ../script/; ./build_all_service.sh +cd ../deploy_k8s/ + +for i in ${service[*]} +do + mv ../bin/open_im_${i} ./${i}/ +done + +echo "move success" + +echo "start to build images" + +for i in ${service[*]} +do + echo "start to build images" $i + cd $i + image="openim/${i}:$version" + docker build -t $image . -f ./${i}.Dockerfile + echo "build ${dockerfile} success" + docker push $image + echo "push ${image} success " + cd .. +done + diff --git a/deploy_k8s/dockerfiles/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/cache.Dockerfile rename to deploy_k8s/cache/cache.Dockerfile diff --git a/deploy_k8s/dockerfiles/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/cms_api.Dockerfile rename to deploy_k8s/cms_api/cms_api.Dockerfile diff --git a/deploy_k8s/dockerfiles/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/conversation.Dockerfile rename to deploy_k8s/conversation/conversation.Dockerfile diff --git a/deploy_k8s/dockerfiles/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/demo.Dockerfile rename to deploy_k8s/demo/demo.Dockerfile diff --git a/deploy_k8s/dockerfiles/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/friend.Dockerfile rename to deploy_k8s/friend/friend.Dockerfile diff --git a/deploy_k8s/dockerfiles/group.Dockerfile b/deploy_k8s/group/group.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/group.Dockerfile rename to deploy_k8s/group/group.Dockerfile diff --git a/deploy_k8s/dockerfiles/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/message_cms.Dockerfile rename to deploy_k8s/message_cms/message_cms.Dockerfile diff --git a/deploy_k8s/dockerfiles/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/msg.Dockerfile rename to deploy_k8s/msg/msg.Dockerfile diff --git a/deploy_k8s/dockerfiles/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/msg_gateway.Dockerfile rename to deploy_k8s/msg_gateway/msg_gateway.Dockerfile diff --git a/deploy_k8s/dockerfiles/office.Dockerfile b/deploy_k8s/office/office.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/office.Dockerfile rename to deploy_k8s/office/office.Dockerfile diff --git a/deploy_k8s/dockerfiles/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/organization.Dockerfile rename to deploy_k8s/organization/organization.Dockerfile diff --git a/deploy_k8s/dockerfiles/push.Dockerfile b/deploy_k8s/push/push.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/push.Dockerfile rename to deploy_k8s/push/push.Dockerfile diff --git a/deploy_k8s/script/build_push_all_images.sh b/deploy_k8s/script/build_push_all_images.sh deleted file mode 100644 index 128622b77..000000000 --- a/deploy_k8s/script/build_push_all_images.sh +++ /dev/null @@ -1,43 +0,0 @@ -#/bin/sh -#service_source_root=( -# #api service file -# ../cmd/open_im_api/ -# ../cmd/open_im_cms_api/ -# #rpc service file -# ../cmd/rpc/open_im_user/ -# ../cmd/rpc/open_im_friend/ -# ../cmd/rpc/open_im_group/ -# ../cmd/rpc/open_im_auth/ -# ../cmd/rpc/open_im_admin_cms/ -# ../cmd/rpc/open_im_message_cms/ -# ../cmd/rpc/open_im_statistics/ -# ../cmd/rpc/open_im_office/ -# ../cmd/rpc/open_im_organization/ -# ../cmd/rpc/open_im_conversation/ -# ../cmd/rpc/open_im_cache/ -# ../cmd/open_im_msg_gateway/ -# ../cmd/open_im_msg_transfer/ -# ../cmd/rpc/open_im_msg/ -# ../cmd/open_im_push/ -# ../cmd/Open-IM-SDK-Core/ -# ../cmd/open_im_demo/ -#) -# -version=v2.0.10 -cd ../../script/; ./build_all_service.sh -cd ../deploy_k8s/dockerfiles -dockerfile_list=$(ls ../dockerfiles/) -mv ../../bin/* ./ -echo "start to build images" - -for dockerfile in $dockerfile_list -do - echo "start to build images" $dockerfile - image=`echo $dockerfile |awk -F '.' '{print $1}'` - image="openim"+image+$version - docker build -t $image . -f ../dockerfiles/${dockerfile} - echo "build ${dockerfile} success" - docker push $image - echo "push ${image} success " -done - diff --git a/deploy_k8s/script/test.sh b/deploy_k8s/script/test.sh deleted file mode 100644 index 4551c2a23..000000000 --- a/deploy_k8s/script/test.sh +++ /dev/null @@ -1,2 +0,0 @@ -var2=`echo "hello world"|awk -F ' ' '{print $1}'` -echo $var2 \ No newline at end of file diff --git a/deploy_k8s/dockerfiles/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile similarity index 100% rename from deploy_k8s/dockerfiles/sdk_server.Dockerfile rename to deploy_k8s/sdk_server/sdk_server.Dockerfile From 03c23f0fdaa24daa2dc9f76eaaafadcfab660188 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 18 May 2022 19:17:43 +0800 Subject: [PATCH 022/752] office tag async send --- deploy_k8s/build_push_all_images.sh | 40 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index c043ebb7f..8902ec8a6 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -2,26 +2,26 @@ service=( #api service file api - cms_api - - #rpc service file - user - friend - group - auth - admin_cms - message_cms - statistics - office - organization - conversation - cache - gateway - transfer - msg - push - sdk_server - open_im_demo +# cms_api +# +# #rpc service file +# user +# friend +# group +# auth +# admin_cms +# message_cms +# statistics +# office +# organization +# conversation +# cache +# gateway +# transfer +# msg +# push +# sdk_server +# open_im_demo ) # version=v2.0.10 From 967a4c774842162048b4b7d71ba072ad39034f3e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 18 May 2022 21:09:49 +0800 Subject: [PATCH 023/752] statistic update --- pkg/statistics/statistics.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/statistics/statistics.go b/pkg/statistics/statistics.go index 800f5864b..50d6a2814 100644 --- a/pkg/statistics/statistics.go +++ b/pkg/statistics/statistics.go @@ -17,6 +17,7 @@ func (s *Statistics) output() { t := time.NewTicker(time.Duration(s.SleepTime) * time.Second) defer t.Stop() var sum uint64 + var timeIntervalNum uint64 for { sum = *s.AllCount select { @@ -27,7 +28,8 @@ func (s *Statistics) output() { } else { intervalCount = *s.AllCount - sum } - log.NewWarn("", " system stat ", s.ModuleName, s.PrintArgs, intervalCount, "total:", *s.AllCount) + timeIntervalNum++ + log.NewWarn("", " system stat ", s.ModuleName, s.PrintArgs, intervalCount, "total:", *s.AllCount, "intervalNum", timeIntervalNum) } } From 4f165f3b2718450d050c726c81c535406705982a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 18 May 2022 21:58:32 +0800 Subject: [PATCH 024/752] statistic update --- pkg/statistics/statistics.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/statistics/statistics.go b/pkg/statistics/statistics.go index 50d6a2814..63653c42f 100644 --- a/pkg/statistics/statistics.go +++ b/pkg/statistics/statistics.go @@ -9,7 +9,7 @@ type Statistics struct { AllCount *uint64 ModuleName string PrintArgs string - SleepTime int + SleepTime uint64 } func (s *Statistics) output() { @@ -29,12 +29,12 @@ func (s *Statistics) output() { intervalCount = *s.AllCount - sum } timeIntervalNum++ - log.NewWarn("", " system stat ", s.ModuleName, s.PrintArgs, intervalCount, "total:", *s.AllCount, "intervalNum", timeIntervalNum) + log.NewWarn("", " system stat ", s.ModuleName, s.PrintArgs, intervalCount, "total:", *s.AllCount, "intervalNum", timeIntervalNum, "avg", (*s.AllCount)/(timeIntervalNum)/s.SleepTime) } } func NewStatistics(allCount *uint64, moduleName, printArgs string, sleepTime int) *Statistics { - p := &Statistics{AllCount: allCount, ModuleName: moduleName, SleepTime: sleepTime, PrintArgs: printArgs} + p := &Statistics{AllCount: allCount, ModuleName: moduleName, SleepTime: uint64(sleepTime), PrintArgs: printArgs} go p.output() return p } From 23b03919e612e30286198d7294847ed06ef5a41c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 10:44:39 +0800 Subject: [PATCH 025/752] office tag async send --- cmd/open_im_api/main.go | 3 ++- cmd/open_im_cms_api/main.go | 3 ++- cmd/open_im_demo/main.go | 4 ++-- cmd/open_im_msg_gateway/main.go | 7 +++++-- cmd/open_im_push/main.go | 4 +++- cmd/rpc/open_im_admin_cms/main.go | 4 +++- cmd/rpc/open_im_auth/main.go | 4 +++- cmd/rpc/open_im_cache/main.go | 4 +++- cmd/rpc/open_im_conversation/main.go | 4 +++- cmd/rpc/open_im_friend/main.go | 5 +++-- cmd/rpc/open_im_group/main.go | 4 +++- cmd/rpc/open_im_message_cms/main.go | 4 +++- cmd/rpc/open_im_msg/main.go | 4 +++- cmd/rpc/open_im_office/main.go | 4 +++- cmd/rpc/open_im_organization/main.go | 4 +++- cmd/rpc/open_im_statistics/main.go | 4 +++- cmd/rpc/open_im_user/main.go | 4 +++- deploy_k8s/admin_cms/admin_cms.Dockerfile | 2 +- deploy_k8s/auth/auth.Dockerfile | 15 +++++++++++++ deploy_k8s/cache/cache.Dockerfile | 15 +++++++++++++ deploy_k8s/cms_api/cms_api.Dockerfile | 15 +++++++++++++ .../conversation/conversation.Dockerfile | 15 +++++++++++++ deploy_k8s/demo/demo.Dockerfile | 15 +++++++++++++ deploy_k8s/dockerfiles/statistics.Dockerfile | 0 deploy_k8s/dockerfiles/transfer.Dockerfile | 0 deploy_k8s/dockerfiles/user.Dockerfile | 0 deploy_k8s/friend/friend.Dockerfile | 15 +++++++++++++ deploy_k8s/group/group.Dockerfile | 15 +++++++++++++ deploy_k8s/message_cms/message_cms.Dockerfile | 15 +++++++++++++ deploy_k8s/msg/msg.Dockerfile | 15 +++++++++++++ deploy_k8s/msg_gateway/msg_gateway.Dockerfile | 15 +++++++++++++ deploy_k8s/office/office.Dockerfile | 15 +++++++++++++ .../organization/organization.Dockerfile | 15 +++++++++++++ deploy_k8s/push/push.Dockerfile | 15 +++++++++++++ deploy_k8s/sdk_server/sdk_server.Dockerfile | 15 +++++++++++++ deploy_k8s/statistics/statistics.Dockerfile | 15 +++++++++++++ deploy_k8s/transfer/transfer.Dockerfile | 15 +++++++++++++ deploy_k8s/user/user.Dockerfile | 15 +++++++++++++ pkg/common/config/config.go | 21 ++++++++++++------- 39 files changed, 320 insertions(+), 28 deletions(-) delete mode 100644 deploy_k8s/dockerfiles/statistics.Dockerfile delete mode 100644 deploy_k8s/dockerfiles/transfer.Dockerfile delete mode 100644 deploy_k8s/dockerfiles/user.Dockerfile create mode 100644 deploy_k8s/statistics/statistics.Dockerfile create mode 100644 deploy_k8s/transfer/transfer.Dockerfile create mode 100644 deploy_k8s/user/user.Dockerfile diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index cd774627b..e7a333b3a 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -182,7 +182,8 @@ func main() { } go apiThird.MinioInit() - ginPort := flag.Int("port", 10002, "get ginServerPort from cmd,default 10002 as port") + defaultPorts := config.Config.Api.GinPort + ginPort := flag.Int("port", defaultPorts[0], "get ginServerPort from cmd,default 10002 as port") flag.Parse() address := "0.0.0.0:" + strconv.Itoa(*ginPort) if config.Config.Api.ListenIP != "" { diff --git a/cmd/open_im_cms_api/main.go b/cmd/open_im_cms_api/main.go index 6a0068195..b2b1cae7c 100644 --- a/cmd/open_im_cms_api/main.go +++ b/cmd/open_im_cms_api/main.go @@ -15,7 +15,8 @@ func main() { gin.SetMode(gin.ReleaseMode) router := cms_api.NewGinRouter() router.Use(utils.CorsHandler()) - ginPort := flag.Int("port", 10006, "get ginServerPort from cmd,default 10006 as port") + defaultPorts := config.Config.CmsApi.GinPort + ginPort := flag.Int("port", defaultPorts[0], "get ginServerPort from cmd,default 10006 as port") flag.Parse() address := "0.0.0.0:" + strconv.Itoa(*ginPort) if config.Config.Api.ListenIP != "" { diff --git a/cmd/open_im_demo/main.go b/cmd/open_im_demo/main.go index c2ec21783..418d578a6 100644 --- a/cmd/open_im_demo/main.go +++ b/cmd/open_im_demo/main.go @@ -32,8 +32,8 @@ func main() { authRouterGroup.POST("/login", register.Login) authRouterGroup.POST("/reset_password", register.ResetPassword) } - - ginPort := flag.Int("port", 42233, "get ginServerPort from cmd,default 42233 as port") + defaultPorts := config.Config.Demo.Port + ginPort := flag.Int("port", defaultPorts[0], "get ginServerPort from cmd,default 42233 as port") flag.Parse() fmt.Println("start demo api server, port: ", *ginPort) address := "0.0.0.0:" + strconv.Itoa(*ginPort) diff --git a/cmd/open_im_msg_gateway/main.go b/cmd/open_im_msg_gateway/main.go index 283f831b8..5996a4ac5 100644 --- a/cmd/open_im_msg_gateway/main.go +++ b/cmd/open_im_msg_gateway/main.go @@ -2,6 +2,7 @@ package main import ( "Open_IM/internal/msg_gateway/gate" + "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "flag" @@ -11,8 +12,10 @@ import ( func main() { log.NewPrivateLog(constant.LogFileName) - rpcPort := flag.Int("rpc_port", 10400, "rpc listening port") - wsPort := flag.Int("ws_port", 17778, "ws listening port") + defaultRpcPorts := config.Config.RpcPort.OpenImMessageGatewayPort + defaultWsPorts := config.Config.LongConnSvr.WebsocketPort + rpcPort := flag.Int("rpc_port", defaultRpcPorts[0], "rpc listening port") + wsPort := flag.Int("ws_port", defaultWsPorts[0], "ws listening port") flag.Parse() var wg sync.WaitGroup wg.Add(1) diff --git a/cmd/open_im_push/main.go b/cmd/open_im_push/main.go index 95e8521dd..63b2aaa12 100644 --- a/cmd/open_im_push/main.go +++ b/cmd/open_im_push/main.go @@ -2,6 +2,7 @@ package main import ( "Open_IM/internal/push/logic" + "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "flag" @@ -10,7 +11,8 @@ import ( ) func main() { - rpcPort := flag.Int("port", 10700, "rpc listening port") + defaultPorts := config.Config.RpcPort.OpenImPushPort + rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port") flag.Parse() var wg sync.WaitGroup wg.Add(1) diff --git a/cmd/rpc/open_im_admin_cms/main.go b/cmd/rpc/open_im_admin_cms/main.go index c69135645..eeb4ca588 100644 --- a/cmd/rpc/open_im_admin_cms/main.go +++ b/cmd/rpc/open_im_admin_cms/main.go @@ -2,12 +2,14 @@ package main import ( rpcMessageCMS "Open_IM/internal/rpc/admin_cms" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 11000, "rpc listening port") + defaultPorts := config.Config.RpcPort.OpenImAdminCmsPort + rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port") flag.Parse() fmt.Println("start cms rpc server, port: ", *rpcPort) rpcServer := rpcMessageCMS.NewAdminCMSServer(*rpcPort) diff --git a/cmd/rpc/open_im_auth/main.go b/cmd/rpc/open_im_auth/main.go index 53b0f9de5..939c7d6f2 100644 --- a/cmd/rpc/open_im_auth/main.go +++ b/cmd/rpc/open_im_auth/main.go @@ -2,12 +2,14 @@ package main import ( rpcAuth "Open_IM/internal/rpc/auth" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 10600, "RpcToken default listen port 10800") + defaultPorts := config.Config.RpcPort.OpenImAuthPort + rpcPort := flag.Int("port", defaultPorts[0], "RpcToken default listen port 10800") flag.Parse() fmt.Println("start auth rpc server, port: ", *rpcPort) rpcServer := rpcAuth.NewRpcAuthServer(*rpcPort) diff --git a/cmd/rpc/open_im_cache/main.go b/cmd/rpc/open_im_cache/main.go index bc50cc28e..d0aacfbc9 100644 --- a/cmd/rpc/open_im_cache/main.go +++ b/cmd/rpc/open_im_cache/main.go @@ -2,12 +2,14 @@ package main import ( rpcCache "Open_IM/internal/rpc/cache" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 10600, "RpcToken default listen port 10800") + defaultPorts := config.Config.RpcPort.OpenImCachePort + rpcPort := flag.Int("port", defaultPorts[0], "RpcToken default listen port 10800") flag.Parse() fmt.Println("start auth rpc server, port: ", *rpcPort) rpcServer := rpcCache.NewCacheServer(*rpcPort) diff --git a/cmd/rpc/open_im_conversation/main.go b/cmd/rpc/open_im_conversation/main.go index dc43063e6..53769c4ac 100644 --- a/cmd/rpc/open_im_conversation/main.go +++ b/cmd/rpc/open_im_conversation/main.go @@ -2,12 +2,14 @@ package main import ( rpcConversation "Open_IM/internal/rpc/conversation" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 11400, "RpcConversation default listen port 11300") + defaultPorts := config.Config.RpcPort.OpenImConversationPort + rpcPort := flag.Int("port", defaultPorts[0], "RpcConversation default listen port 11300") flag.Parse() fmt.Println("start conversation rpc server, port: ", *rpcPort) rpcServer := rpcConversation.NewRpcConversationServer(*rpcPort) diff --git a/cmd/rpc/open_im_friend/main.go b/cmd/rpc/open_im_friend/main.go index 85d05e39c..b6a650e63 100644 --- a/cmd/rpc/open_im_friend/main.go +++ b/cmd/rpc/open_im_friend/main.go @@ -2,13 +2,14 @@ package main import ( "Open_IM/internal/rpc/friend" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - - rpcPort := flag.Int("port", 10200, "get RpcFriendPort from cmd,default 12000 as port") + defaultPorts := config.Config.RpcPort.OpenImFriendPort + rpcPort := flag.Int("port", defaultPorts[0], "get RpcFriendPort from cmd,default 12000 as port") flag.Parse() fmt.Println("start friend rpc server, port: ", *rpcPort) rpcServer := friend.NewFriendServer(*rpcPort) diff --git a/cmd/rpc/open_im_group/main.go b/cmd/rpc/open_im_group/main.go index 7afc7ec57..14cb56722 100644 --- a/cmd/rpc/open_im_group/main.go +++ b/cmd/rpc/open_im_group/main.go @@ -2,12 +2,14 @@ package main import ( "Open_IM/internal/rpc/group" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 10500, "get RpcGroupPort from cmd,default 16000 as port") + defaultPorts := config.Config.RpcPort.OpenImGroupPort + rpcPort := flag.Int("port", defaultPorts[0], "get RpcGroupPort from cmd,default 16000 as port") flag.Parse() fmt.Println("start group rpc server, port: ", *rpcPort) rpcServer := group.NewGroupServer(*rpcPort) diff --git a/cmd/rpc/open_im_message_cms/main.go b/cmd/rpc/open_im_message_cms/main.go index 16151a2ed..9c39a99e4 100644 --- a/cmd/rpc/open_im_message_cms/main.go +++ b/cmd/rpc/open_im_message_cms/main.go @@ -2,12 +2,14 @@ package main import ( rpcMessageCMS "Open_IM/internal/rpc/message_cms" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 10900, "rpc listening port") + defaultPorts := config.Config.RpcPort.OpenImMessageCmsPort[0] + rpcPort := flag.Int("port", defaultPorts, "rpc listening port") flag.Parse() fmt.Println("start msg cms rpc server, port: ", *rpcPort) rpcServer := rpcMessageCMS.NewMessageCMSServer(*rpcPort) diff --git a/cmd/rpc/open_im_msg/main.go b/cmd/rpc/open_im_msg/main.go index 95908f48a..8c7948c1a 100644 --- a/cmd/rpc/open_im_msg/main.go +++ b/cmd/rpc/open_im_msg/main.go @@ -2,12 +2,14 @@ package main import ( rpcChat "Open_IM/internal/rpc/msg" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 10300, "rpc listening port") + defaultPorts := config.Config.RpcPort.OpenImMessagePort + rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port") flag.Parse() fmt.Println("start msg rpc server, port: ", *rpcPort) rpcServer := rpcChat.NewRpcChatServer(*rpcPort) diff --git a/cmd/rpc/open_im_office/main.go b/cmd/rpc/open_im_office/main.go index c9a05c791..51ec154f0 100644 --- a/cmd/rpc/open_im_office/main.go +++ b/cmd/rpc/open_im_office/main.go @@ -2,12 +2,14 @@ package main import ( rpc "Open_IM/internal/rpc/office" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 11100, "rpc listening port") + defaultPorts := config.Config.RpcPort.OpenImOfficePort + rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port") flag.Parse() fmt.Println("start office rpc server, port: ", *rpcPort) rpcServer := rpc.NewOfficeServer(*rpcPort) diff --git a/cmd/rpc/open_im_organization/main.go b/cmd/rpc/open_im_organization/main.go index 906ac510f..2e8b94bb1 100644 --- a/cmd/rpc/open_im_organization/main.go +++ b/cmd/rpc/open_im_organization/main.go @@ -2,12 +2,14 @@ package main import ( "Open_IM/internal/rpc/organization" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 11200, "get RpcOrganizationPort from cmd,default 11200 as port") + defaultPorts := config.Config.RpcPort.OpenImOrganizationPort + rpcPort := flag.Int("port", defaultPorts[0], "get RpcOrganizationPort from cmd,default 11200 as port") flag.Parse() fmt.Println("start organization rpc server, port: ", *rpcPort) rpcServer := organization.NewServer(*rpcPort) diff --git a/cmd/rpc/open_im_statistics/main.go b/cmd/rpc/open_im_statistics/main.go index b87440abf..f9b0e8539 100644 --- a/cmd/rpc/open_im_statistics/main.go +++ b/cmd/rpc/open_im_statistics/main.go @@ -2,12 +2,14 @@ package main import ( "Open_IM/internal/rpc/statistics" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 10800, "rpc listening port") + defaultPorts := config.Config.RpcPort.OpenImStatisticsPort + rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port") flag.Parse() fmt.Println("start statistics rpc server, port: ", *rpcPort) rpcServer := statistics.NewStatisticsServer(*rpcPort) diff --git a/cmd/rpc/open_im_user/main.go b/cmd/rpc/open_im_user/main.go index d8644d028..e50ebef35 100644 --- a/cmd/rpc/open_im_user/main.go +++ b/cmd/rpc/open_im_user/main.go @@ -2,12 +2,14 @@ package main import ( "Open_IM/internal/rpc/user" + "Open_IM/pkg/common/config" "flag" "fmt" ) func main() { - rpcPort := flag.Int("port", 10100, "rpc listening port") + defaultPorts := config.Config.RpcPort.OpenImUserPort + rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port") flag.Parse() fmt.Println("start user rpc server, port: ", *rpcPort) rpcServer := user.NewUserServer(*rpcPort) diff --git a/deploy_k8s/admin_cms/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile index bf86691d8..6527d0e2a 100644 --- a/deploy_k8s/admin_cms/admin_cms.Dockerfile +++ b/deploy_k8s/admin_cms/admin_cms.Dockerfile @@ -5,7 +5,7 @@ ENV WORKDIR /bin ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_api $WORKDIR/main +ADD ./open_im_admin_cms $WORKDIR/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ diff --git a/deploy_k8s/auth/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile index e69de29bb..e0bc9f738 100644 --- a/deploy_k8s/auth/auth.Dockerfile +++ b/deploy_k8s/auth/auth.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_auth $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/cache/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile index e69de29bb..d4ff085af 100644 --- a/deploy_k8s/cache/cache.Dockerfile +++ b/deploy_k8s/cache/cache.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_cache $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/cms_api/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile index e69de29bb..b1fb004f5 100644 --- a/deploy_k8s/cms_api/cms_api.Dockerfile +++ b/deploy_k8s/cms_api/cms_api.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_cms_api $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/conversation/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile index e69de29bb..10b2071c2 100644 --- a/deploy_k8s/conversation/conversation.Dockerfile +++ b/deploy_k8s/conversation/conversation.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_conversation $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/demo/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile index e69de29bb..eb9f3b146 100644 --- a/deploy_k8s/demo/demo.Dockerfile +++ b/deploy_k8s/demo/demo.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_demo $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/dockerfiles/statistics.Dockerfile b/deploy_k8s/dockerfiles/statistics.Dockerfile deleted file mode 100644 index e69de29bb..000000000 diff --git a/deploy_k8s/dockerfiles/transfer.Dockerfile b/deploy_k8s/dockerfiles/transfer.Dockerfile deleted file mode 100644 index e69de29bb..000000000 diff --git a/deploy_k8s/dockerfiles/user.Dockerfile b/deploy_k8s/dockerfiles/user.Dockerfile deleted file mode 100644 index e69de29bb..000000000 diff --git a/deploy_k8s/friend/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile index e69de29bb..5e93252db 100644 --- a/deploy_k8s/friend/friend.Dockerfile +++ b/deploy_k8s/friend/friend.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_friend $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/group/group.Dockerfile b/deploy_k8s/group/group.Dockerfile index e69de29bb..ce6cd8c61 100644 --- a/deploy_k8s/group/group.Dockerfile +++ b/deploy_k8s/group/group.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_group $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/message_cms/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile index e69de29bb..0e73e0f6f 100644 --- a/deploy_k8s/message_cms/message_cms.Dockerfile +++ b/deploy_k8s/message_cms/message_cms.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_message_cms $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/msg/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile index e69de29bb..8ba79d0da 100644 --- a/deploy_k8s/msg/msg.Dockerfile +++ b/deploy_k8s/msg/msg.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_msg $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile index e69de29bb..88734306a 100644 --- a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile +++ b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_msg_gateway $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/office/office.Dockerfile b/deploy_k8s/office/office.Dockerfile index e69de29bb..fafc1cc36 100644 --- a/deploy_k8s/office/office.Dockerfile +++ b/deploy_k8s/office/office.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_office $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/organization/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile index e69de29bb..2c820ed08 100644 --- a/deploy_k8s/organization/organization.Dockerfile +++ b/deploy_k8s/organization/organization.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_organization $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/push/push.Dockerfile b/deploy_k8s/push/push.Dockerfile index e69de29bb..a3294b53c 100644 --- a/deploy_k8s/push/push.Dockerfile +++ b/deploy_k8s/push/push.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_push $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index e69de29bb..30b639c01 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_sdk_server $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/statistics/statistics.Dockerfile b/deploy_k8s/statistics/statistics.Dockerfile new file mode 100644 index 000000000..85604b2b7 --- /dev/null +++ b/deploy_k8s/statistics/statistics.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_statistics $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/transfer/transfer.Dockerfile b/deploy_k8s/transfer/transfer.Dockerfile new file mode 100644 index 000000000..bb6fc6f35 --- /dev/null +++ b/deploy_k8s/transfer/transfer.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_transfer $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/deploy_k8s/user/user.Dockerfile b/deploy_k8s/user/user.Dockerfile new file mode 100644 index 000000000..f2a5f5e95 --- /dev/null +++ b/deploy_k8s/user/user.Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu + +# 设置固定的项目路径 +ENV WORKDIR /bin +ENV CONFIG_NAME $WORKDIR/config/config.yaml + +# 将可执行文件复制到目标目录 +ADD ./open_im_user $WORKDIR/main + +# 创建用于挂载的几个目录,添加可执行权限 +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ + chmod +x $WORKDIR/main + +WORKDIR $WORKDIR +CMD ./main diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index e898e5aa6..b60794a12 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -104,13 +104,20 @@ type config struct { DBPassWord string `yaml:"dbPassWord"` } RpcPort struct { - OpenImUserPort []int `yaml:"openImUserPort"` - openImFriendPort []int `yaml:"openImFriendPort"` - RpcMessagePort []int `yaml:"rpcMessagePort"` - RpcPushMessagePort []int `yaml:"rpcPushMessagePort"` - OpenImGroupPort []int `yaml:"openImGroupPort"` - RpcModifyUserInfoPort []int `yaml:"rpcModifyUserInfoPort"` - RpcGetTokenPort []int `yaml:"rpcGetTokenPort"` + OpenImUserPort []int `yaml:"openImUserPort"` + OpenImFriendPort []int `yaml:"openImFriendPort"` + OpenImMessagePort []int `yaml:"openImMessagePort"` + OpenImMessageGatewayPort []int `yaml:"openImMessageGatewayPort"` + OpenImGroupPort []int `yaml:"openImGroupPort"` + OpenImAuthPort []int `yaml:"openImAuthPort"` + OpenImPushPort []int `yaml:"openImPushPort"` + OpenImStatisticsPort []int `yaml:"openImStatisticsPort"` + OpenImMessageCmsPort []int `yaml:"openImMessageCmsPort"` + OpenImAdminCmsPort []int `yaml:"openImAdminCmsPort"` + OpenImOfficePort []int `yaml:"openImOfficePort"` + OpenImOrganizationPort []int `yaml:"openImOrganizationPort"` + OpenImConversationPort []int `yaml:"openImConversationPort"` + OpenImCachePort []int `yaml:"openImCachePort"` } RpcRegisterName struct { OpenImStatisticsName string `yaml:"openImStatisticsName"` From 0b49ecfc123079d6f7a632da32ae6c06a8fd35f3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 10:49:40 +0800 Subject: [PATCH 026/752] office tag async send --- deploy_k8s/admin_cms/admin_cms.Dockerfile | 5 ++- deploy_k8s/api/api.Dockerfile | 5 ++- deploy_k8s/build_push_all_images.sh | 40 +++++++++++------------ 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/deploy_k8s/admin_cms/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile index 6527d0e2a..bf310981c 100644 --- a/deploy_k8s/admin_cms/admin_cms.Dockerfile +++ b/deploy_k8s/admin_cms/admin_cms.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_admin_cms $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/api/api.Dockerfile b/deploy_k8s/api/api.Dockerfile index bf86691d8..346045b7c 100644 --- a/deploy_k8s/api/api.Dockerfile +++ b/deploy_k8s/api/api.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_api $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index 8902ec8a6..c043ebb7f 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -2,26 +2,26 @@ service=( #api service file api -# cms_api -# -# #rpc service file -# user -# friend -# group -# auth -# admin_cms -# message_cms -# statistics -# office -# organization -# conversation -# cache -# gateway -# transfer -# msg -# push -# sdk_server -# open_im_demo + cms_api + + #rpc service file + user + friend + group + auth + admin_cms + message_cms + statistics + office + organization + conversation + cache + gateway + transfer + msg + push + sdk_server + open_im_demo ) # version=v2.0.10 From 267b3a9547813d34845cea3efab81c815f9d2010 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 10:50:22 +0800 Subject: [PATCH 027/752] k8s_deploy --- deploy_k8s/build_push_all_images.sh | 40 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index c043ebb7f..8902ec8a6 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -2,26 +2,26 @@ service=( #api service file api - cms_api - - #rpc service file - user - friend - group - auth - admin_cms - message_cms - statistics - office - organization - conversation - cache - gateway - transfer - msg - push - sdk_server - open_im_demo +# cms_api +# +# #rpc service file +# user +# friend +# group +# auth +# admin_cms +# message_cms +# statistics +# office +# organization +# conversation +# cache +# gateway +# transfer +# msg +# push +# sdk_server +# open_im_demo ) # version=v2.0.10 From ab06eaeca89d79ab42619c3f69a3cc616dd4b3cc Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 10:55:14 +0800 Subject: [PATCH 028/752] k8s_deploy --- deploy_k8s/auth/auth.Dockerfile | 5 ++++- deploy_k8s/cache/cache.Dockerfile | 4 +++- deploy_k8s/cms_api/cms_api.Dockerfile | 5 ++++- deploy_k8s/conversation/conversation.Dockerfile | 5 ++++- deploy_k8s/demo/demo.Dockerfile | 5 ++++- deploy_k8s/friend/friend.Dockerfile | 5 ++++- deploy_k8s/group/group.Dockerfile | 5 ++++- deploy_k8s/message_cms/message_cms.Dockerfile | 5 ++++- deploy_k8s/msg/msg.Dockerfile | 5 ++++- deploy_k8s/msg_gateway/msg_gateway.Dockerfile | 5 ++++- deploy_k8s/office/office.Dockerfile | 4 +++- deploy_k8s/organization/organization.Dockerfile | 4 +++- deploy_k8s/push/push.Dockerfile | 4 +++- deploy_k8s/sdk_server/sdk_server.Dockerfile | 4 +++- deploy_k8s/statistics/statistics.Dockerfile | 4 +++- deploy_k8s/transfer/transfer.Dockerfile | 4 +++- deploy_k8s/user/user.Dockerfile | 4 +++- 17 files changed, 60 insertions(+), 17 deletions(-) diff --git a/deploy_k8s/auth/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile index e0bc9f738..f757d5801 100644 --- a/deploy_k8s/auth/auth.Dockerfile +++ b/deploy_k8s/auth/auth.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_auth $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/cache/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile index d4ff085af..c040f622a 100644 --- a/deploy_k8s/cache/cache.Dockerfile +++ b/deploy_k8s/cache/cache.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_cache $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/cms_api/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile index b1fb004f5..1fcc67afc 100644 --- a/deploy_k8s/cms_api/cms_api.Dockerfile +++ b/deploy_k8s/cms_api/cms_api.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_cms_api $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/conversation/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile index 10b2071c2..443734175 100644 --- a/deploy_k8s/conversation/conversation.Dockerfile +++ b/deploy_k8s/conversation/conversation.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_conversation $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/demo/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile index eb9f3b146..61ffbe566 100644 --- a/deploy_k8s/demo/demo.Dockerfile +++ b/deploy_k8s/demo/demo.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_demo $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/friend/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile index 5e93252db..80a3580b3 100644 --- a/deploy_k8s/friend/friend.Dockerfile +++ b/deploy_k8s/friend/friend.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_friend $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/group/group.Dockerfile b/deploy_k8s/group/group.Dockerfile index ce6cd8c61..159db839f 100644 --- a/deploy_k8s/group/group.Dockerfile +++ b/deploy_k8s/group/group.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_group $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/message_cms/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile index 0e73e0f6f..0ae1a6abf 100644 --- a/deploy_k8s/message_cms/message_cms.Dockerfile +++ b/deploy_k8s/message_cms/message_cms.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_message_cms $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/msg/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile index 8ba79d0da..32f094ed9 100644 --- a/deploy_k8s/msg/msg.Dockerfile +++ b/deploy_k8s/msg/msg.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_msg $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile index 88734306a..552ee3b1e 100644 --- a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile +++ b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,8 @@ ADD ./open_im_msg_gateway $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/office/office.Dockerfile b/deploy_k8s/office/office.Dockerfile index fafc1cc36..bdb509abc 100644 --- a/deploy_k8s/office/office.Dockerfile +++ b/deploy_k8s/office/office.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_office $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/organization/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile index 2c820ed08..0fccb1c47 100644 --- a/deploy_k8s/organization/organization.Dockerfile +++ b/deploy_k8s/organization/organization.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_organization $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/push/push.Dockerfile b/deploy_k8s/push/push.Dockerfile index a3294b53c..6b12925d8 100644 --- a/deploy_k8s/push/push.Dockerfile +++ b/deploy_k8s/push/push.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_push $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index 30b639c01..6e8ec93cc 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_sdk_server $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/statistics/statistics.Dockerfile b/deploy_k8s/statistics/statistics.Dockerfile index 85604b2b7..1b33f1732 100644 --- a/deploy_k8s/statistics/statistics.Dockerfile +++ b/deploy_k8s/statistics/statistics.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_statistics $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/transfer/transfer.Dockerfile b/deploy_k8s/transfer/transfer.Dockerfile index bb6fc6f35..2db727066 100644 --- a/deploy_k8s/transfer/transfer.Dockerfile +++ b/deploy_k8s/transfer/transfer.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_transfer $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main diff --git a/deploy_k8s/user/user.Dockerfile b/deploy_k8s/user/user.Dockerfile index f2a5f5e95..bafd9215f 100644 --- a/deploy_k8s/user/user.Dockerfile +++ b/deploy_k8s/user/user.Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu # 设置固定的项目路径 -ENV WORKDIR /bin +ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -11,5 +11,7 @@ ADD ./open_im_user $WORKDIR/main RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ chmod +x $WORKDIR/main +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] + WORKDIR $WORKDIR CMD ./main From 759fb8a8025578ba1d1932f7428b32f69c42ebae Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 10:58:33 +0800 Subject: [PATCH 029/752] k8s_deploy --- deploy_k8s/build_push_all_images.sh | 39 ++++++++++++++--------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index 8902ec8a6..86cb923d0 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -2,26 +2,25 @@ service=( #api service file api -# cms_api -# -# #rpc service file -# user -# friend -# group -# auth -# admin_cms -# message_cms -# statistics -# office -# organization -# conversation -# cache -# gateway -# transfer -# msg -# push -# sdk_server -# open_im_demo + cms_api + #rpc service file + user + friend + group + auth + admin_cms + message_cms + statistics + office + organization + conversation + cache + gateway + transfer + msg + push + sdk_server + open_im_demo ) # version=v2.0.10 From 9f8cb6ca34fbc5a6c2a147818162ee2c4de75cf9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 11:17:07 +0800 Subject: [PATCH 030/752] k8s_deploy --- deploy_k8s/build_push_all_images.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index 86cb923d0..2ad18c382 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -15,12 +15,12 @@ service=( organization conversation cache - gateway + msg_gateway transfer msg push sdk_server - open_im_demo + demo ) # version=v2.0.10 From ee0a71de1b306abe3b3e2490af63a4b450903b85 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 19 May 2022 12:25:46 +0800 Subject: [PATCH 031/752] concurrent consumption of messages --- config/config.yaml | 4 +- internal/msg_transfer/logic/db.go | 20 ++- internal/msg_transfer/logic/init.go | 1 + .../logic/online_history_msg_handler.go | 141 +++++++++++++++++- pkg/common/config/config.go | 3 +- 5 files changed, 151 insertions(+), 18 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 736b15bce..0f1c5c4ec 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -222,7 +222,9 @@ secret: tuoyun multiloginpolicy: 1 #chat log insert to db -chatPersistenceMysql: true +chatpersistencemysql: true +#可靠性存储 +reliablestorage: true #token config tokenpolicy: diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index 806b782c0..98a684cc7 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -2,22 +2,20 @@ package logic import ( "Open_IM/pkg/common/db" - "Open_IM/pkg/common/log" pbMsg "Open_IM/pkg/proto/chat" - "Open_IM/pkg/utils" ) func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { - time := utils.GetCurrentTimestampByMill() - seq, err := db.DB.IncrUserSeq(uid) - if err != nil { - log.NewError(msg.OperationID, "data insert to redis err", err.Error(), msg.String()) - return err - } - msg.MsgData.Seq = uint32(seq) + //time := utils.GetCurrentTimestampByMill() + //seq, err := db.DB.IncrUserSeq(uid) + //if err != nil { + // log.NewError(msg.OperationID, "data insert to redis err", err.Error(), msg.String()) + // return err + //} + //msg.MsgData.Seq = uint32(seq) pbSaveData := pbMsg.MsgDataToDB{} pbSaveData.MsgData = msg.MsgData - log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time) + //log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time) return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) -// return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) + // return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) } diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 8f5cc0695..bef20e8c7 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -12,6 +12,7 @@ import ( const OnlineTopicBusy = 1 const OnlineTopicVacancy = 0 +const Msg = 2 var ( persistentCH PersistentConsumerHandler diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index dd1f22634..fb94ffe5f 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -3,6 +3,7 @@ package logic import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" kfk "Open_IM/pkg/common/kafka" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" @@ -17,7 +18,11 @@ import ( "time" ) -type fcb func(msg []byte, msgKey string) +type MsgChannelValue struct { + userID string + msg *pbMsg.MsgDataToMQ +} +type fcb func(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) type Cmd2Value struct { Cmd int Value interface{} @@ -26,12 +31,22 @@ type OnlineHistoryConsumerHandler struct { msgHandle map[string]fcb historyConsumerGroup *kfk.MConsumerGroup cmdCh chan Cmd2Value + msgCh chan Cmd2Value } func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle = make(map[string]fcb) och.cmdCh = cmdCh - och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2Mongo + och.msgCh = make(chan Cmd2Value, 1000) + if config.Config.ReliableStorage { + och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2Mongo + } else { + och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability + for i := 0; i < 10; i++ { + go och.Run() + + } + } och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) @@ -61,7 +76,28 @@ func sendCmd(ch chan Cmd2Value, value Cmd2Value, timeout int64) error { return errors.New("send cmd timeout") } } -func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey string) { +func (och *OnlineHistoryConsumerHandler) Run() { + for { + select { + case cmd := <-och.msgCh: + switch cmd.Cmd { + case Msg: + msgChannelValue := cmd.Value.(MsgChannelValue) + err := saveUserChat(msgChannelValue.userID, msgChannelValue.msg) + if err != nil { + singleMsgFailedCount++ + log.NewError(msgChannelValue.msg.OperationID, "single data insert to mongo err", err.Error(), msgChannelValue.msg.String()) + } else { + singleMsgSuccessCountMutex.Lock() + singleMsgSuccessCount++ + singleMsgSuccessCountMutex.Unlock() + } + } + } + } +} +func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { + msg := cMsg.Value now := time.Now() msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) @@ -126,6 +162,102 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey s log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) return } + sess.MarkMessage(cMsg, "") + log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) +} +func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { + msg := cMsg.Value + now := time.Now() + msgFromMQ := pbMsg.MsgDataToMQ{} + err := proto.Unmarshal(msg, &msgFromMQ) + if err != nil { + log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) + return + } + operationID := msgFromMQ.OperationID + log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) + //Control whether to store offline messages (mongo) + isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) + //Control whether to store history messages (mysql) + isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) + isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) + switch msgFromMQ.MsgData.SessionType { + case constant.SingleChatType: + log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return + } + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} + //err := saveUserChat(msgKey, &msgFromMQ) + //if err != nil { + // singleMsgFailedCount++ + // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) + // return + //} + //singleMsgSuccessCountMutex.Lock() + //singleMsgSuccessCount++ + //singleMsgSuccessCountMutex.Unlock() + //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + } + if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { + } else { + go sendMessageToPush(&msgFromMQ, msgKey) + } + log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) + case constant.GroupChatType: + log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return + } + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} + //err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) + //if err != nil { + // log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) + // return + //} + //groupMsgCount++ + } + go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) + case constant.NotificationChatType: + log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return + } + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} + //err := saveUserChat(msgKey, &msgFromMQ) + //if err != nil { + // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) + // return + //} + //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + } + if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { + } else { + go sendMessageToPush(&msgFromMQ, msgKey) + } + log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) + default: + log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) + return + } log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) } @@ -138,8 +270,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS SetOnlineTopicStatus(OnlineTopicBusy) //och.TriggerCmd(OnlineTopicBusy) log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) - och.msgHandle[msg.Topic](msg.Value, string(msg.Key)) - sess.MarkMessage(msg, "") + och.msgHandle[msg.Topic](msg, string(msg.Key), sess) if claim.HighWaterMarkOffset()-msg.Offset <= 1 { log.Debug("", "online msg consume end", claim.HighWaterMarkOffset(), msg.Offset) SetOnlineTopicStatus(OnlineTopicVacancy) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index e898e5aa6..b7454c37b 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -209,7 +209,8 @@ type config struct { } Secret string `yaml:"secret"` MultiLoginPolicy int `yaml:"multiloginpolicy"` - ChatPersistenceMysql bool `yaml:"chatPersistenceMysql"` + ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` + ReliableStorage bool `yaml:"reliablestorage"` TokenPolicy struct { AccessSecret string `yaml:"accessSecret"` From 98542bd5d5d659abc2e38f1b5d1a103895295422 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 19 May 2022 12:28:14 +0800 Subject: [PATCH 032/752] concurrent consumption of messages --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 0f1c5c4ec..ee973fe37 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -224,7 +224,7 @@ multiloginpolicy: 1 #chat log insert to db chatpersistencemysql: true #可靠性存储 -reliablestorage: true +reliablestorage: false #token config tokenpolicy: From 143e2908ad23c65d7b557323ef7963491185546f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 19 May 2022 14:18:05 +0800 Subject: [PATCH 033/752] concurrent consumption of messages --- .../logic/offline_history_msg_handler.go | 139 +++++++++++++++++- 1 file changed, 132 insertions(+), 7 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 876beb30e..cf3f206cb 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -3,6 +3,7 @@ package logic import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" kfk "Open_IM/pkg/common/kafka" "Open_IM/pkg/common/log" pbMsg "Open_IM/pkg/proto/chat" @@ -15,20 +16,50 @@ import ( type OfflineHistoryConsumerHandler struct { msgHandle map[string]fcb cmdCh chan Cmd2Value + msgCh chan Cmd2Value historyConsumerGroup *kfk.MConsumerGroup } func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { mc.msgHandle = make(map[string]fcb) mc.cmdCh = cmdCh - mc.msgHandle[config.Config.Kafka.Ws2mschatOffline.Topic] = mc.handleChatWs2Mongo + mc.msgCh = make(chan Cmd2Value, 1000) + if config.Config.ReliableStorage { + mc.msgHandle[config.Config.Kafka.Ws2mschatOffline.Topic] = mc.handleChatWs2Mongo + } else { + mc.msgHandle[config.Config.Kafka.Ws2mschatOffline.Topic] = mc.handleChatWs2MongoLowReliability + for i := 0; i < 10; i++ { + go mc.Run() + + } + } mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschatOffline.Topic}, config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline) } - -func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey string) { +func (mc *OfflineHistoryConsumerHandler) Run() { + for { + select { + case cmd := <-mc.msgCh: + switch cmd.Cmd { + case Msg: + msgChannelValue := cmd.Value.(MsgChannelValue) + err := saveUserChat(msgChannelValue.userID, msgChannelValue.msg) + if err != nil { + singleMsgFailedCount++ + log.NewError(msgChannelValue.msg.OperationID, "single data insert to mongo err", err.Error(), msgChannelValue.msg.String()) + } else { + singleMsgSuccessCountMutex.Lock() + singleMsgSuccessCount++ + singleMsgSuccessCountMutex.Unlock() + } + } + } + } +} +func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { + msg := cMsg.Value now := time.Now() msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) @@ -95,6 +126,102 @@ func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey s log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) return } + sess.MarkMessage(cMsg, "") + log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) +} +func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { + msg := cMsg.Value + now := time.Now() + msgFromMQ := pbMsg.MsgDataToMQ{} + err := proto.Unmarshal(msg, &msgFromMQ) + if err != nil { + log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) + return + } + operationID := msgFromMQ.OperationID + log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) + //Control whether to store offline messages (mongo) + isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) + //Control whether to store history messages (mysql) + isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) + isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) + switch msgFromMQ.MsgData.SessionType { + case constant.SingleChatType: + log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return + } + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} + //err := saveUserChat(msgKey, &msgFromMQ) + //if err != nil { + // singleMsgFailedCount++ + // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) + // return + //} + //singleMsgSuccessCountMutex.Lock() + //singleMsgSuccessCount++ + //singleMsgSuccessCountMutex.Unlock() + //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + } + if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { + } else { + go sendMessageToPush(&msgFromMQ, msgKey) + } + log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) + case constant.GroupChatType: + log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return + } + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} + //err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) + //if err != nil { + // log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) + // return + //} + //groupMsgCount++ + } + go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) + case constant.NotificationChatType: + log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return + } + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} + //err := saveUserChat(msgKey, &msgFromMQ) + //if err != nil { + // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) + // return + //} + //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + } + if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { + } else { + go sendMessageToPush(&msgFromMQ, msgKey) + } + log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) + default: + log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) + return + } log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) } @@ -110,8 +237,7 @@ func (mc *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS for msg := range claim.Messages() { if GetOnlineTopicStatus() == OnlineTopicVacancy { log.NewDebug("", "vacancy offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) - mc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) - sess.MarkMessage(msg, "") + mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) } else { select { case <-mc.cmdCh: @@ -119,8 +245,7 @@ func (mc *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS case <-time.After(time.Millisecond * time.Duration(100)): log.NewDebug("", "timeout offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) } - mc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) - sess.MarkMessage(msg, "") + mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) } } From a2888b009d37de7634217522ba1b8757a651d524 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 19 May 2022 14:21:38 +0800 Subject: [PATCH 034/752] concurrent consumption of messages --- internal/msg_transfer/logic/persistent_msg_handler.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index 6e330a664..7418e629e 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -32,7 +32,8 @@ func (pc *PersistentConsumerHandler) Init() { } -func (pc *PersistentConsumerHandler) handleChatWs2Mysql(msg []byte, msgKey string) { +func (pc *PersistentConsumerHandler) handleChatWs2Mysql(cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) { + msg := cMsg.Value log.NewInfo("msg come here mysql!!!", "", "msg", string(msg)) var tag bool msgFromMQ := pbMsg.MsgDataToMQ{} @@ -71,7 +72,7 @@ func (pc *PersistentConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSessi claim sarama.ConsumerGroupClaim) error { for msg := range claim.Messages() { log.NewDebug("", "kafka get info to mysql", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) - pc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) + pc.msgHandle[msg.Topic](msg, string(msg.Key), sess) sess.MarkMessage(msg, "") } return nil From 523ca2f7fcdddb813b34803617ceb2db1cea8a5d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 17:50:04 +0800 Subject: [PATCH 035/752] k8s_deploy --- deploy_k8s/admin_cms/deployment.yaml | 92 ++++++++++++++++++++++++++++ deploy_k8s/api/deployment.yaml | 44 +++++++++++++ deploy_k8s/ingress.yaml | 77 +++++++++++++++++++++++ deploy_k8s/kubctl_start.sh | 24 ++++++++ 4 files changed, 237 insertions(+) create mode 100644 deploy_k8s/admin_cms/deployment.yaml create mode 100644 deploy_k8s/api/deployment.yaml create mode 100644 deploy_k8s/ingress.yaml create mode 100644 deploy_k8s/kubctl_start.sh diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml new file mode 100644 index 000000000..b1ef1b3b2 --- /dev/null +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -0,0 +1,92 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: admin-cms +spec: + podManagementPolicy: OrderedReady + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: admin-cms + workload.auth.cattle.io/workloadselector: statefulSet-openim-admin-cms + serviceName: admin-cms + template: + metadata: + labels: + app: admin-cms + workload.auth.cattle.io/workloadselector: statefulSet-openim-admin-cms + spec: + containers: + - image: "IMAGE_TAG" + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: NODE_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.hostIP + - name: POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + ports: + - name: p11000 + protocol: TCP + containerPort: 11000 + imagePullPolicy: Always + name: admin-cms + stdin: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + tty: true + volumeMounts: + - mountPath: /Open-IM-Server/config.tmp.yaml + name: vol2 + readOnly: true + subPath: config.yaml + dnsConfig: {} + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + volumes: + - configMap: + defaultMode: 256 + name: config.yaml + optional: false + name: vol2 + updateStrategy: + rollingUpdate: + partition: 0 + type: RollingUpdate +--- +apiVersion: v1 +kind: Service +metadata: + name: admin-cms +spec: + ports: + - name: p11000 + port: 11000 + protocol: TCP + targetPort: 11000 + selector: + app: admin-cms + type: ClusterIP \ No newline at end of file diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml new file mode 100644 index 000000000..798db3aa0 --- /dev/null +++ b/deploy_k8s/api/deployment.yaml @@ -0,0 +1,44 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: api-deployment +spec: + selector: + matchLabels: + app: api # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: api # 标签 + spec: + containers: + - name: api + image: openim/api:2.0.10 + ports: + - containerPort: 10002 + volumeMounts: + - name: cfg + mountPath: /Open-IM-Server/config/config.yaml + subPath: config.yaml + updateStrategy: #更新策略 + rollingUpdate: + partition: 1 + type: RollingUpdate # 滚动更新 +--- +apiVersion: v1 +kind: Service +metadata: + name: api +spec: + externalTrafficPolicy: Cluster + ports: + - name: apiPort + nodePort: NODE_PORT_API + port: 10002 + protocol: TCP + targetPort: 10002 + selector: + app: api + type: NodePort diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml new file mode 100644 index 000000000..271cc8e10 --- /dev/null +++ b/deploy_k8s/ingress.yaml @@ -0,0 +1,77 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + # 配置注解 支持websocket + annotations: + nginx.ingress.kubernetes.io/proxy-http-version: "1.1" + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" + name: sdk-server.openim.xxx.com +spec: + rules: + - host: sdk-server.openim.xxx.com + http: + paths: + - backend: + service: + name: sdk-server + port: + number: 30000 + path: / + pathType: Prefix +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + nginx.ingress.kubernetes.io/proxy-http-version: "1.1" + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" + name: msg-gateway.openim.xxx.com +spec: + rules: + - host: msg-gateway.openim.xxx.com + http: + paths: + - backend: + service: + name: msg-gateway + port: + number: 17778 + path: / + pathType: Prefix +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: api.openim.xxx.com +spec: + rules: + - host: api.openim.xxx.com + http: + paths: + - backend: + service: + name: api + port: + number: 10000 + path: / + pathType: Prefix +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo.openim.xxx.com +spec: + rules: + - host: demo.openim.xxx.com + http: + paths: + - backend: + service: + name: demo + port: + number: 42233 + path: / + pathType: Prefix diff --git a/deploy_k8s/kubctl_start.sh b/deploy_k8s/kubctl_start.sh new file mode 100644 index 000000000..f1db196f3 --- /dev/null +++ b/deploy_k8s/kubctl_start.sh @@ -0,0 +1,24 @@ +service=( + #api service file + api + cms_api + #rpc service file + user + friend + group + auth + admin_cms + message_cms + statistics + office + organization + conversation + cache + msg_gateway + transfer + msg + push + sdk_server + demo +) + From d086de81036a5f8bff98285f8fb0c7a5d3511f3e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 19 May 2022 18:08:44 +0800 Subject: [PATCH 036/752] concurrent consumption of messages --- .../logic/offline_history_msg_handler.go | 108 +++++----------- .../logic/online_history_msg_handler.go | 119 ++++++------------ 2 files changed, 68 insertions(+), 159 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index cf3f206cb..c5cac9a82 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -45,14 +45,20 @@ func (mc *OfflineHistoryConsumerHandler) Run() { switch cmd.Cmd { case Msg: msgChannelValue := cmd.Value.(MsgChannelValue) - err := saveUserChat(msgChannelValue.userID, msgChannelValue.msg) + msg := msgChannelValue.msg + log.Debug(msg.OperationID, "msg arrived channel", msg.String()) + isSenderSync := utils.GetSwitchFromOptions(msg.MsgData.Options, constant.IsSenderSync) + err := saveUserChat(msgChannelValue.userID, &msg) if err != nil { singleMsgFailedCount++ - log.NewError(msgChannelValue.msg.OperationID, "single data insert to mongo err", err.Error(), msgChannelValue.msg.String()) + log.NewError(msg.OperationID, "single data insert to mongo err", err.Error(), msg.String()) } else { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount++ singleMsgSuccessCountMutex.Unlock() + if !(!isSenderSync && msgChannelValue.userID == msg.MsgData.SendID) { + go sendMessageToPush(&msg, msgChannelValue.userID) + } } } } @@ -131,7 +137,6 @@ func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Consume } func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value - now := time.Now() msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) if err != nil { @@ -142,87 +147,32 @@ func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) //Control whether to store offline messages (mongo) isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - //Control whether to store history messages (mysql) - isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - switch msgFromMQ.MsgData.SessionType { - case constant.SingleChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} - //err := saveUserChat(msgKey, &msgFromMQ) - //if err != nil { - // singleMsgFailedCount++ - // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - // return - //} - //singleMsgSuccessCountMutex.Lock() - //singleMsgSuccessCount++ - //singleMsgSuccessCountMutex.Unlock() - //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} + //err := saveUserChat(msgKey, &msgFromMQ) + //if err != nil { + // singleMsgFailedCount++ + // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) + // return + //} + //singleMsgSuccessCountMutex.Lock() + //singleMsgSuccessCount++ + //singleMsgSuccessCountMutex.Unlock() + //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + } else { + if !(!isSenderSync && msgKey == msgFromMQ.MsgData.SendID) { go sendMessageToPush(&msgFromMQ, msgKey) } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) - case constant.GroupChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} - //err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) - //if err != nil { - // log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) - // return - //} - //groupMsgCount++ - } - go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) - case constant.NotificationChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} - //err := saveUserChat(msgKey, &msgFromMQ) - //if err != nil { - // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - // return - //} - //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) - default: - log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - return } - log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) } func (OfflineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index fb94ffe5f..ea787c107 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -20,7 +20,7 @@ import ( type MsgChannelValue struct { userID string - msg *pbMsg.MsgDataToMQ + msg pbMsg.MsgDataToMQ } type fcb func(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) type Cmd2Value struct { @@ -83,14 +83,29 @@ func (och *OnlineHistoryConsumerHandler) Run() { switch cmd.Cmd { case Msg: msgChannelValue := cmd.Value.(MsgChannelValue) - err := saveUserChat(msgChannelValue.userID, msgChannelValue.msg) + msg := msgChannelValue.msg + log.Debug(msg.OperationID, "msg arrived channel", msg.String()) + isSenderSync := utils.GetSwitchFromOptions(msg.MsgData.Options, constant.IsSenderSync) + //switch msgChannelValue.msg.MsgData.SessionType { + //case constant.SingleChatType: + //case constant.GroupChatType: + //case constant.NotificationChatType: + //default: + // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) + // return + //} + + err := saveUserChat(msgChannelValue.userID, &msg) if err != nil { singleMsgFailedCount++ - log.NewError(msgChannelValue.msg.OperationID, "single data insert to mongo err", err.Error(), msgChannelValue.msg.String()) + log.NewError(msg.OperationID, "single data insert to mongo err", err.Error(), msg.String()) } else { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount++ singleMsgSuccessCountMutex.Unlock() + if !(!isSenderSync && msgChannelValue.userID == msg.MsgData.SendID) { + go sendMessageToPush(&msg, msgChannelValue.userID) + } } } } @@ -167,7 +182,6 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Consume } func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value - now := time.Now() msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) if err != nil { @@ -178,87 +192,32 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) //Control whether to store offline messages (mongo) isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - //Control whether to store history messages (mysql) - isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - switch msgFromMQ.MsgData.SessionType { - case constant.SingleChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} - //err := saveUserChat(msgKey, &msgFromMQ) - //if err != nil { - // singleMsgFailedCount++ - // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - // return - //} - //singleMsgSuccessCountMutex.Lock() - //singleMsgSuccessCount++ - //singleMsgSuccessCountMutex.Unlock() - //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + if isHistory { + seq, err := db.DB.IncrUserSeq(msgKey) + if err != nil { + log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) + return } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { + sess.MarkMessage(cMsg, "") + msgFromMQ.MsgData.Seq = uint32(seq) + log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) + och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} + //err := saveUserChat(msgKey, &msgFromMQ) + //if err != nil { + // singleMsgFailedCount++ + // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) + // return + //} + //singleMsgSuccessCountMutex.Lock() + //singleMsgSuccessCount++ + //singleMsgSuccessCountMutex.Unlock() + //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) + } else { + if !(!isSenderSync && msgKey == msgFromMQ.MsgData.SendID) { go sendMessageToPush(&msgFromMQ, msgKey) } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) - case constant.GroupChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} - //err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) - //if err != nil { - // log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) - // return - //} - //groupMsgCount++ - } - go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) - case constant.NotificationChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, &msgFromMQ}} - //err := saveUserChat(msgKey, &msgFromMQ) - //if err != nil { - // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - // return - //} - //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) - default: - log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - return } - log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) } func (OnlineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } From b1f270c0822fa9ae09e6d08c8a8a8849a605b3c9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 18:22:18 +0800 Subject: [PATCH 037/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 1 - deploy_k8s/k8s_deploy.md | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 deploy_k8s/k8s_deploy.md diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 798db3aa0..a338b1763 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -35,7 +35,6 @@ spec: externalTrafficPolicy: Cluster ports: - name: apiPort - nodePort: NODE_PORT_API port: 10002 protocol: TCP targetPort: 10002 diff --git a/deploy_k8s/k8s_deploy.md b/deploy_k8s/k8s_deploy.md new file mode 100644 index 000000000..3c933bca3 --- /dev/null +++ b/deploy_k8s/k8s_deploy.md @@ -0,0 +1,8 @@ +#### im k8s部署文档 +### 1.修改配置文件 +在Open-IM-SERVER目录下修改config/config.yaml配置文件 + +### 2. 项目根目录创建im configMap +kubectl create configmap config config/config.yaml + +### 3. \ No newline at end of file From cc93dba50896dbe67a52caefb654bfc3f9de80c3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:03:27 +0800 Subject: [PATCH 038/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 4 ++-- deploy_k8s/k8s_deploy.md | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index a338b1763..a7cc227ae 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -1,6 +1,6 @@ --- apiVersion: apps/v1 -kind: Deployment +kind: StatefulSet metadata: name: api-deployment spec: @@ -22,7 +22,7 @@ spec: - name: cfg mountPath: /Open-IM-Server/config/config.yaml subPath: config.yaml - updateStrategy: #更新策略 + strategy: #更新策略 rollingUpdate: partition: 1 type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/k8s_deploy.md b/deploy_k8s/k8s_deploy.md index 3c933bca3..d91019f80 100644 --- a/deploy_k8s/k8s_deploy.md +++ b/deploy_k8s/k8s_deploy.md @@ -2,7 +2,9 @@ ### 1.修改配置文件 在Open-IM-SERVER目录下修改config/config.yaml配置文件 -### 2. 项目根目录创建im configMap -kubectl create configmap config config/config.yaml +### 2. 项目根目录创建im configMap到k8s +kubectl -n {namespace} create configmap config --from-file=config/config.yaml +namespace 为im项目的namespace + +### 3. -### 3. \ No newline at end of file From e2f9c18a27eb83edfbe6f1fd1eadadc129ce2d06 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:12:35 +0800 Subject: [PATCH 039/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index a7cc227ae..8eaef5979 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -1,6 +1,6 @@ --- apiVersion: apps/v1 -kind: StatefulSet +kind: Deployment metadata: name: api-deployment spec: From 6355e4e3bca8672bb18ec4fbd4ac268ca09e4cfe Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:13:22 +0800 Subject: [PATCH 040/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 8eaef5979..b4cad6d51 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -23,8 +23,6 @@ spec: mountPath: /Open-IM-Server/config/config.yaml subPath: config.yaml strategy: #更新策略 - rollingUpdate: - partition: 1 type: RollingUpdate # 滚动更新 --- apiVersion: v1 From f067af664eb69eed108848a07028bae613911c3a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:22:57 +0800 Subject: [PATCH 041/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index b4cad6d51..b0799e099 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -19,7 +19,7 @@ spec: ports: - containerPort: 10002 volumeMounts: - - name: cfg + - name: config mountPath: /Open-IM-Server/config/config.yaml subPath: config.yaml strategy: #更新策略 @@ -32,7 +32,6 @@ metadata: spec: externalTrafficPolicy: Cluster ports: - - name: apiPort port: 10002 protocol: TCP targetPort: 10002 From 8d6e016e48f30f9716c2e43859aafba3f8338043 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:29:45 +0800 Subject: [PATCH 042/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index b0799e099..f4398fcb5 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -19,7 +19,7 @@ spec: ports: - containerPort: 10002 volumeMounts: - - name: config + name: config mountPath: /Open-IM-Server/config/config.yaml subPath: config.yaml strategy: #更新策略 From dcb03a225091d42aa0feeef71574426552144265 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:48:29 +0800 Subject: [PATCH 043/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index f4398fcb5..b0799e099 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -19,7 +19,7 @@ spec: ports: - containerPort: 10002 volumeMounts: - name: config + - name: config mountPath: /Open-IM-Server/config/config.yaml subPath: config.yaml strategy: #更新策略 From d431a81cf0d43ce1fde89866e4db33b07acac35a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:55:51 +0800 Subject: [PATCH 044/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index b0799e099..654c49153 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -22,6 +22,10 @@ spec: - name: config mountPath: /Open-IM-Server/config/config.yaml subPath: config.yaml + volumes: + - name: config + configMap: + name: myconfigmap strategy: #更新策略 type: RollingUpdate # 滚动更新 --- From e444a52b6aa3480c09b99bdbf26fe90182d26783 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:56:49 +0800 Subject: [PATCH 045/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 654c49153..eae0398cc 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -22,10 +22,10 @@ spec: - name: config mountPath: /Open-IM-Server/config/config.yaml subPath: config.yaml - volumes: - - name: config - configMap: - name: myconfigmap + volumes: + - name: config + configMap: + name: myconfigmap strategy: #更新策略 type: RollingUpdate # 滚动更新 --- From 6fd84dba8fc914b1c4427a51ddab7b6f46c5577f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 19:58:46 +0800 Subject: [PATCH 046/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index eae0398cc..ca66496ab 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -14,18 +14,18 @@ spec: app: api # 标签 spec: containers: - - name: api - image: openim/api:2.0.10 - ports: - - containerPort: 10002 - volumeMounts: - - name: config - mountPath: /Open-IM-Server/config/config.yaml - subPath: config.yaml - volumes: + - name: api + image: openim/api:2.0.10 + ports: + - containerPort: 10002 + volumeMounts: - name: config - configMap: - name: myconfigmap + mountPath: /Open-IM-Server/config/config.yaml + subPath: config.yaml + volumes: + - name: config + configMap: + name: myconfigmap strategy: #更新策略 type: RollingUpdate # 滚动更新 --- From dbc7023c0061ffb8997f503267d371a7d2ab76d3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 19 May 2022 20:05:37 +0800 Subject: [PATCH 047/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index ca66496ab..57efc1a8f 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -25,7 +25,7 @@ spec: volumes: - name: config configMap: - name: myconfigmap + name: config strategy: #更新策略 type: RollingUpdate # 滚动更新 --- From 9d6d74ce98335f450cababf8eafbee15e5c98288 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 20 May 2022 10:19:00 +0800 Subject: [PATCH 048/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 57efc1a8f..be6d97f07 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -36,9 +36,10 @@ metadata: spec: externalTrafficPolicy: Cluster ports: - port: 10002 - protocol: TCP - targetPort: 10002 + - name: apiPort + port: 10002 + protocol: TCP + targetPort: 10002 selector: app: api type: NodePort From a2cdf6559daad14ed9c29a63436615366494eac2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 20 May 2022 10:28:07 +0800 Subject: [PATCH 049/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index be6d97f07..2d4c013bb 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -20,8 +20,8 @@ spec: - containerPort: 10002 volumeMounts: - name: config - mountPath: /Open-IM-Server/config/config.yaml - subPath: config.yaml + mountPath: /Open-IM-Server/config + readOnly: true volumes: - name: config configMap: @@ -36,10 +36,8 @@ metadata: spec: externalTrafficPolicy: Cluster ports: - - name: apiPort - port: 10002 - protocol: TCP - targetPort: 10002 + - protocol: TCP + port: 10002 + targetPort: 10002 selector: app: api - type: NodePort From 1186f2fb14e17658b1bcf651f6ea2140a7733468 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 20 May 2022 10:32:51 +0800 Subject: [PATCH 050/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 2d4c013bb..4b7dd5372 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -34,9 +34,9 @@ kind: Service metadata: name: api spec: - externalTrafficPolicy: Cluster ports: - - protocol: TCP + - name: api + protocol: TCP port: 10002 targetPort: 10002 selector: From e048813c43a09887cb51a6368f8009110a41bea3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 20 May 2022 10:42:33 +0800 Subject: [PATCH 051/752] k8s_deploy --- deploy_k8s/api/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 4b7dd5372..c8c8a177c 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: api - image: openim/api:2.0.10 + image: openim/api:v2.0.10 ports: - containerPort: 10002 volumeMounts: From d4f81f086cf496ae26eed03987e1a9ea0804f622 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 11:00:11 +0800 Subject: [PATCH 052/752] batch to mongo --- internal/msg_transfer/logic/db.go | 23 ++++++--- pkg/common/db/batch_insert_chat.go | 78 ++++++++++++++++++++++++++++++ pkg/common/db/mongoModel.go | 47 +++++++++++++++++- 3 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 pkg/common/db/batch_insert_chat.go diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index 98a684cc7..74106999c 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -2,20 +2,27 @@ package logic import ( "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" pbMsg "Open_IM/pkg/proto/chat" + "Open_IM/pkg/utils" ) func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { - //time := utils.GetCurrentTimestampByMill() - //seq, err := db.DB.IncrUserSeq(uid) - //if err != nil { - // log.NewError(msg.OperationID, "data insert to redis err", err.Error(), msg.String()) - // return err - //} - //msg.MsgData.Seq = uint32(seq) + time := utils.GetCurrentTimestampByMill() + seq, err := db.DB.IncrUserSeq(uid) + if err != nil { + log.NewError(msg.OperationID, "data insert to redis err", err.Error(), msg.String()) + return err + } + msg.MsgData.Seq = uint32(seq) pbSaveData := pbMsg.MsgDataToDB{} pbSaveData.MsgData = msg.MsgData - //log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time) + log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time) return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) // return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) } + +func saveUserChatList(uid string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { + log.Info(operationID, utils.GetSelfFuncName(), "args ", uid, len(msgList)) + return db.DB.BatchInsertChat(uid, msgList, operationID) +} diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go new file mode 100644 index 000000000..9c23244f6 --- /dev/null +++ b/pkg/common/db/batch_insert_chat.go @@ -0,0 +1,78 @@ +package db + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/log" + pbMsg "Open_IM/pkg/proto/chat" + "Open_IM/pkg/utils" + "context" + "errors" + "github.com/garyburd/redigo/redis" + "github.com/golang/protobuf/proto" + "go.mongodb.org/mongo-driver/bson" + "time" +) + +func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { + if len(msgList) > GetSingleGocMsgNum() { + return errors.New("too large") + } + currentMaxSeq, err := d.GetUserMaxSeq(userID) + if err == nil { + + } else if err == redis.ErrNil { + currentMaxSeq = 0 + } else { + return utils.Wrap(err, "") + } + + remain := currentMaxSeq % uint64(GetSingleGocMsgNum()) + insertCounter := uint64(0) + msgListToMongo := make([]MsgInfo, 0) + msgListToMongoNext := make([]MsgInfo, 0) + seqUid := "" + seqUidNext := "" + for _, m := range msgList { + currentMaxSeq++ + sMsg := MsgInfo{} + sMsg.SendTime = m.MsgData.SendTime + m.MsgData.Seq = uint32(currentMaxSeq) + if sMsg.Msg, err = proto.Marshal(m.MsgData); err != nil { + return utils.Wrap(err, "") + } + if insertCounter < remain { + msgListToMongo = append(msgListToMongo, sMsg) + insertCounter++ + seqUid = getSeqUid(userID, uint32(currentMaxSeq)) + } else { + msgListToMongoNext = append(msgListToMongoNext, sMsg) + seqUidNext = getSeqUid(userID, uint32(currentMaxSeq)) + } + } + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + newTime := getCurrentTimestampByMill() + + if seqUid != "" { + filter := bson.M{"uid": seqUid} + log.NewDebug(operationID, "filter ", seqUid) + err := c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": bson.M{"$each": msgListToMongo}}}).Err() + if err != nil { + log.Error(operationID, "FindOneAndUpdate failed ", err.Error(), filter) + return utils.Wrap(err, "") + } + } + + if seqUidNext != "" { + filter := bson.M{"uid": seqUidNext} + sChat := UserChat{} + sChat.UID = seqUidNext + sChat.Msg = msgListToMongoNext + if _, err = c.InsertOne(ctx, &sChat); err != nil { + log.NewError(operationID, "InsertOne failed", filter, err.Error(), sChat) + return utils.Wrap(err, "") + } + } + log.NewDebug(operationID, "find mgo uid cost time", getCurrentTimestampByMill()-newTime) + return nil +} diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 08d605113..96206c6f2 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -31,6 +31,10 @@ const cWorkMoment = "work_moment" const cCommentMsg = "comment_msg" const singleGocMsgNum = 5000 +func GetSingleGocMsgNum() int { + return singleGocMsgNum +} + type MsgInfo struct { SendTime int64 Msg []byte @@ -351,7 +355,7 @@ func (d *DataBases) SaveUserChatMongo2(uid string, sendTime int64, m *pbMsg.MsgD return utils.Wrap(err, "") } err = c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": sMsg}}).Err() - log.NewDebug(operationID, "get mgoSession cost time", getCurrentTimestampByMill()-newTime) + log.NewWarn(operationID, "get mgoSession cost time", getCurrentTimestampByMill()-newTime) if err != nil { sChat := UserChat{} sChat.UID = seqUid @@ -368,6 +372,47 @@ func (d *DataBases) SaveUserChatMongo2(uid string, sendTime int64, m *pbMsg.MsgD return nil } +// +//func (d *DataBases) SaveUserChatListMongo2(uid string, sendTime int64, msgList []*pbMsg.MsgDataToDB) error { +// ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) +// c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) +// newTime := getCurrentTimestampByMill() +// operationID := "" +// seqUid := "" +// msgListToMongo := make([]MsgInfo, 0) +// +// for _, m := range msgList { +// seqUid = getSeqUid(uid, m.MsgData.Seq) +// var err error +// sMsg := MsgInfo{} +// sMsg.SendTime = sendTime +// if sMsg.Msg, err = proto.Marshal(m.MsgData); err != nil { +// return utils.Wrap(err, "") +// } +// msgListToMongo = append(msgListToMongo, sMsg) +// } +// +// filter := bson.M{"uid": seqUid} +// log.NewDebug(operationID, "filter ", seqUid) +// err := c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": bson.M{"$each": msgListToMongo}}}).Err() +// log.NewWarn(operationID, "get mgoSession cost time", getCurrentTimestampByMill()-newTime) +// if err != nil { +// sChat := UserChat{} +// sChat.UID = seqUid +// sChat.Msg = msgListToMongo +// +// if _, err = c.InsertOne(ctx, &sChat); err != nil { +// log.NewError(operationID, "InsertOne failed", filter, err.Error(), sChat) +// return utils.Wrap(err, "") +// } +// } else { +// log.NewDebug(operationID, "FindOneAndUpdate ok", filter) +// } +// +// log.NewDebug(operationID, "find mgo uid cost time", getCurrentTimestampByMill()-newTime) +// return nil +//} + func (d *DataBases) SaveUserChat(uid string, sendTime int64, m *pbMsg.MsgDataToDB) error { var seqUid string newTime := getCurrentTimestampByMill() From 00a2a23190ae688f806a7becc82a1080fb24fae6 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 11:20:21 +0800 Subject: [PATCH 053/752] batch to mongo --- internal/msg_transfer/logic/db.go | 6 +++--- pkg/common/db/batch_insert_chat.go | 2 +- pkg/common/db/redisModel.go | 7 +++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index 74106999c..7a2af5404 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -22,7 +22,7 @@ func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { // return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) } -func saveUserChatList(uid string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { - log.Info(operationID, utils.GetSelfFuncName(), "args ", uid, len(msgList)) - return db.DB.BatchInsertChat(uid, msgList, operationID) +func saveUserChatList(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { + log.Info(operationID, utils.GetSelfFuncName(), "args ", userID, len(msgList)) + return db.DB.BatchInsertChat(userID, msgList, operationID) } diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 9c23244f6..f64fc4a18 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -74,5 +74,5 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, } } log.NewDebug(operationID, "find mgo uid cost time", getCurrentTimestampByMill()-newTime) - return nil + return utils.Wrap(d.SetUserMaxSeq(userID, uint32(currentMaxSeq)), "") } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 9996ea356..01f161f84 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -68,6 +68,13 @@ func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { return redis.Uint64(d.Exec("GET", key)) } +//set the largest Seq +func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint32) error { + key := userIncrSeq + uid + _, err := redis.Uint64(d.Exec("SET", key, maxSeq)) + return err +} + //Set the user's minimum seq func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { key := userMinSeq + uid From 31911a40c0d060f569217992cde268e1f414d6a4 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 11:24:10 +0800 Subject: [PATCH 054/752] batch to mongo --- pkg/common/db/batch_insert_chat.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index f64fc4a18..c6435525f 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -14,6 +14,7 @@ import ( ) func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { + newTime := getCurrentTimestampByMill() if len(msgList) > GetSingleGocMsgNum() { return errors.New("too large") } @@ -51,28 +52,27 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, } ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) - newTime := getCurrentTimestampByMill() if seqUid != "" { filter := bson.M{"uid": seqUid} - log.NewDebug(operationID, "filter ", seqUid) + log.NewDebug(operationID, "filter ", seqUid, "list ", msgListToMongo) err := c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": bson.M{"$each": msgListToMongo}}}).Err() if err != nil { log.Error(operationID, "FindOneAndUpdate failed ", err.Error(), filter) return utils.Wrap(err, "") } } - if seqUidNext != "" { filter := bson.M{"uid": seqUidNext} sChat := UserChat{} sChat.UID = seqUidNext sChat.Msg = msgListToMongoNext + log.NewDebug(operationID, "filter ", seqUidNext, "list ", msgListToMongoNext) if _, err = c.InsertOne(ctx, &sChat); err != nil { log.NewError(operationID, "InsertOne failed", filter, err.Error(), sChat) return utils.Wrap(err, "") } } - log.NewDebug(operationID, "find mgo uid cost time", getCurrentTimestampByMill()-newTime) + log.NewWarn(operationID, "batch mgo cost time ", getCurrentTimestampByMill()-newTime, userID, len(msgList)) return utils.Wrap(d.SetUserMaxSeq(userID, uint32(currentMaxSeq)), "") } From b914e8388dcaf29cf0af91b179a3cb807709e67b Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 12:11:46 +0800 Subject: [PATCH 055/752] batch to mongo --- pkg/common/db/batch_insert_chat.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index c6435525f..82c9638a1 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -45,9 +45,11 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, msgListToMongo = append(msgListToMongo, sMsg) insertCounter++ seqUid = getSeqUid(userID, uint32(currentMaxSeq)) + log.Debug(operationID, "msgListToMongo ", seqUid, m.MsgData.Seq, m.MsgData.ClientMsgID) } else { msgListToMongoNext = append(msgListToMongoNext, sMsg) seqUidNext = getSeqUid(userID, uint32(currentMaxSeq)) + log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID) } } ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) From 0fbc1095be5f8eca0aba85bbfc6a922dcb81a96b Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 12:21:29 +0800 Subject: [PATCH 056/752] batch to mongo --- pkg/common/db/batch_insert_chat.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 82c9638a1..3ce323df9 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -33,6 +33,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, msgListToMongoNext := make([]MsgInfo, 0) seqUid := "" seqUidNext := "" + log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq) for _, m := range msgList { currentMaxSeq++ sMsg := MsgInfo{} @@ -45,11 +46,11 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, msgListToMongo = append(msgListToMongo, sMsg) insertCounter++ seqUid = getSeqUid(userID, uint32(currentMaxSeq)) - log.Debug(operationID, "msgListToMongo ", seqUid, m.MsgData.Seq, m.MsgData.ClientMsgID) + log.Debug(operationID, "msgListToMongo ", seqUid, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) } else { msgListToMongoNext = append(msgListToMongoNext, sMsg) seqUidNext = getSeqUid(userID, uint32(currentMaxSeq)) - log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID) + log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) } } ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) From ea8638c8432ed5e9358ab2d24af9864bbc65c4a2 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 13:01:08 +0800 Subject: [PATCH 057/752] batch to mongo --- pkg/common/db/batch_insert_chat.go | 4 ++-- pkg/common/db/redisModel.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 3ce323df9..1cc910e13 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -33,7 +33,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, msgListToMongoNext := make([]MsgInfo, 0) seqUid := "" seqUidNext := "" - log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq) + log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq, userID) for _, m := range msgList { currentMaxSeq++ sMsg := MsgInfo{} @@ -77,5 +77,5 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, } } log.NewWarn(operationID, "batch mgo cost time ", getCurrentTimestampByMill()-newTime, userID, len(msgList)) - return utils.Wrap(d.SetUserMaxSeq(userID, uint32(currentMaxSeq)), "") + return utils.Wrap(d.SetUserMaxSeq(userID, uint64(currentMaxSeq)), "") } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 01f161f84..d7165ba94 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -69,7 +69,7 @@ func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { } //set the largest Seq -func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint32) error { +func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { key := userIncrSeq + uid _, err := redis.Uint64(d.Exec("SET", key, maxSeq)) return err From 17695927d54a7195ff71bd3a4b97946bf5f057ad Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 13:09:28 +0800 Subject: [PATCH 058/752] batch to mongo --- pkg/common/db/batch_insert_chat.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 1cc910e13..e327ba7b5 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -27,7 +27,8 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, return utils.Wrap(err, "") } - remain := currentMaxSeq % uint64(GetSingleGocMsgNum()) + //4999 + remain := uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) msgListToMongoNext := make([]MsgInfo, 0) From 866c7d4f2f261a64b4ebdd8ea1246cd235215662 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 13:15:32 +0800 Subject: [PATCH 059/752] batch to mongo --- pkg/common/db/redisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index d7165ba94..46318ac4a 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -71,7 +71,7 @@ func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { //set the largest Seq func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { key := userIncrSeq + uid - _, err := redis.Uint64(d.Exec("SET", key, maxSeq)) + _, err := d.Exec("SET", key, maxSeq) return err } From 06726758d218d96330a559378b2b0b15e8b0f700 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 13:33:38 +0800 Subject: [PATCH 060/752] concurrent consumption of messages --- internal/msg_transfer/logic/init.go | 3 + .../logic/offline_history_msg_handler.go | 175 ++++++++++---- .../logic/online_history_msg_handler.go | 225 +++++++++++++++--- 3 files changed, 336 insertions(+), 67 deletions(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index bef20e8c7..b4cfff6db 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -13,6 +13,9 @@ import ( const OnlineTopicBusy = 1 const OnlineTopicVacancy = 0 const Msg = 2 +const ConsumerMsgs = 3 +const UserMessages = 4 +const ChannelNum = 10 var ( persistentCH PersistentConsumerHandler diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index c5cac9a82..4fdd30577 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -15,22 +15,28 @@ import ( type OfflineHistoryConsumerHandler struct { msgHandle map[string]fcb + historyConsumerGroup *kfk.MConsumerGroup cmdCh chan Cmd2Value msgCh chan Cmd2Value - historyConsumerGroup *kfk.MConsumerGroup + UserAggregationMsgs map[string][]*pbMsg.MsgDataToMQ + chArrays [ChannelNum]chan Cmd2Value + msgDistributionCh chan Cmd2Value } func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { mc.msgHandle = make(map[string]fcb) + mc.UserAggregationMsgs = make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) + mc.msgDistributionCh = make(chan Cmd2Value) //no buffer channel + go mc.MessagesDistributionHandle() mc.cmdCh = cmdCh mc.msgCh = make(chan Cmd2Value, 1000) if config.Config.ReliableStorage { - mc.msgHandle[config.Config.Kafka.Ws2mschatOffline.Topic] = mc.handleChatWs2Mongo + mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2Mongo } else { - mc.msgHandle[config.Config.Kafka.Ws2mschatOffline.Topic] = mc.handleChatWs2MongoLowReliability - for i := 0; i < 10; i++ { - go mc.Run() - + mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2MongoLowReliability + for i := 0; i < ChannelNum; i++ { + mc.chArrays[i] = make(chan Cmd2Value, 1000) + go mc.Run(i) } } mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, @@ -38,31 +44,91 @@ func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline) } -func (mc *OfflineHistoryConsumerHandler) Run() { +func (och *OfflineHistoryConsumerHandler) Run(channelID int) { for { select { - case cmd := <-mc.msgCh: + case cmd := <-och.chArrays[channelID]: switch cmd.Cmd { - case Msg: + case UserMessages: msgChannelValue := cmd.Value.(MsgChannelValue) - msg := msgChannelValue.msg - log.Debug(msg.OperationID, "msg arrived channel", msg.String()) - isSenderSync := utils.GetSwitchFromOptions(msg.MsgData.Options, constant.IsSenderSync) - err := saveUserChat(msgChannelValue.userID, &msg) + msgList := msgChannelValue.msgList + storageMsgList := make([]*pbMsg.MsgDataToMQ, 80) + pushMsgList := make([]*pbMsg.MsgDataToMQ, 80) + latestMsgOperationID := msgList[len(msgList)-1].OperationID + log.Debug(latestMsgOperationID, "msg arrived channel", "channel id", channelID, msgList) + for _, v := range msgList { + isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) + isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) + if isHistory { + storageMsgList = append(storageMsgList, v) + } + if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { + pushMsgList = append(pushMsgList, v) + } + } + + //switch msgChannelValue.msg.MsgData.SessionType { + //case constant.SingleChatType: + //case constant.GroupChatType: + //case constant.NotificationChatType: + //default: + // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) + // return + //} + + err := saveUserChatList(msgChannelValue.userID, storageMsgList, latestMsgOperationID) if err != nil { - singleMsgFailedCount++ - log.NewError(msg.OperationID, "single data insert to mongo err", err.Error(), msg.String()) + singleMsgFailedCount += uint64(len(storageMsgList)) + log.NewError(latestMsgOperationID, "single data insert to mongo err", err.Error(), storageMsgList) } else { singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount++ + singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - if !(!isSenderSync && msgChannelValue.userID == msg.MsgData.SendID) { - go sendMessageToPush(&msg, msgChannelValue.userID) + for _, v := range pushMsgList { + sendMessageToPush(v, msgChannelValue.userID) + } + + } + } + } + } +} +func (och *OfflineHistoryConsumerHandler) MessagesDistributionHandle() { + for { + select { + case cmd := <-och.msgDistributionCh: + switch cmd.Cmd { + case ConsumerMsgs: + consumerMessages := cmd.Value.([]*sarama.ConsumerMessage) + //Aggregation map[userid]message list + for i := 0; i < len(consumerMessages); i++ { + msgFromMQ := pbMsg.MsgDataToMQ{} + err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) + if err != nil { + log.Error("msg_transfer Unmarshal msg err", "", "msg", string(consumerMessages[i].Value), "err", err.Error()) + return + } + if oldM, ok := och.UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + oldM = append(oldM, &msgFromMQ) + och.UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + } else { + m := make([]*pbMsg.MsgDataToMQ, 100) + m = append(m, &msgFromMQ) + och.UserAggregationMsgs[string(consumerMessages[i].Key)] = m + } + } + for userID, v := range och.UserAggregationMsgs { + if len(v) >= 0 { + channelID := getHashCode(userID) % ChannelNum + go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages}} + }(channelID, userID, v) } } } } } + } func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value @@ -157,7 +223,7 @@ func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * sess.MarkMessage(cMsg, "") msgFromMQ.MsgData.Seq = uint32(seq) log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} + //mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} //err := saveUserChat(msgKey, &msgFromMQ) //if err != nil { // singleMsgFailedCount++ @@ -177,27 +243,56 @@ func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * func (OfflineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } -func (mc *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, - claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group - //log.NewDebug("", "offline new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - //for msg := range claim.Messages() { - // log.NewDebug("", "kafka get info to delay mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "offline") - // //mc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) - //} - for msg := range claim.Messages() { - if GetOnlineTopicStatus() == OnlineTopicVacancy { - log.NewDebug("", "vacancy offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) - mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) - } else { - select { - case <-mc.cmdCh: - log.NewDebug("", "cmd offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) - case <-time.After(time.Millisecond * time.Duration(100)): - log.NewDebug("", "timeout offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) - } - mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) - } - } +//func (mc *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +// claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group +// //log.NewDebug("", "offline new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) +// //for msg := range claim.Messages() { +// // log.NewDebug("", "kafka get info to delay mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "offline") +// // //mc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) +// //} +// for msg := range claim.Messages() { +// if GetOnlineTopicStatus() == OnlineTopicVacancy { +// log.NewDebug("", "vacancy offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) +// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) +// } else { +// select { +// case <-mc.cmdCh: +// log.NewDebug("", "cmd offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) +// case <-time.After(time.Millisecond * time.Duration(100)): +// log.NewDebug("", "timeout offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) +// } +// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) +// } +// } +// +// return nil +//} +func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, + claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group + log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) + cMsg := make([]*sarama.ConsumerMessage, 500) + t := time.NewTicker(time.Duration(500) * time.Millisecond) + for msg := range claim.Messages() { + //och.TriggerCmd(OnlineTopicBusy) + cMsg = append(cMsg, msg) + select { + case <-t.C: + if len(cMsg) >= 0 { + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + sess.MarkMessage(msg, "") + cMsg = cMsg[0:0] + } + default: + if len(cMsg) >= 500 { + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + sess.MarkMessage(msg, "") + cMsg = cMsg[0:0] + } + + } + log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) + + } return nil } diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index ea787c107..248e55bd6 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -14,13 +14,14 @@ import ( "errors" "github.com/Shopify/sarama" "github.com/golang/protobuf/proto" + "hash/crc32" "strings" "time" ) type MsgChannelValue struct { - userID string - msg pbMsg.MsgDataToMQ + userID string + msgList []*pbMsg.MsgDataToMQ } type fcb func(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) type Cmd2Value struct { @@ -32,19 +33,25 @@ type OnlineHistoryConsumerHandler struct { historyConsumerGroup *kfk.MConsumerGroup cmdCh chan Cmd2Value msgCh chan Cmd2Value + UserAggregationMsgs map[string][]*pbMsg.MsgDataToMQ + chArrays [ChannelNum]chan Cmd2Value + msgDistributionCh chan Cmd2Value } func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle = make(map[string]fcb) + och.UserAggregationMsgs = make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) + och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel + go och.MessagesDistributionHandle() och.cmdCh = cmdCh och.msgCh = make(chan Cmd2Value, 1000) if config.Config.ReliableStorage { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2Mongo } else { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability - for i := 0; i < 10; i++ { - go och.Run() - + for i := 0; i < ChannelNum; i++ { + och.chArrays[i] = make(chan Cmd2Value, 1000) + go och.Run(i) } } och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, @@ -76,16 +83,29 @@ func sendCmd(ch chan Cmd2Value, value Cmd2Value, timeout int64) error { return errors.New("send cmd timeout") } } -func (och *OnlineHistoryConsumerHandler) Run() { +func (och *OnlineHistoryConsumerHandler) Run(channelID int) { for { select { - case cmd := <-och.msgCh: + case cmd := <-och.chArrays[channelID]: switch cmd.Cmd { - case Msg: + case UserMessages: msgChannelValue := cmd.Value.(MsgChannelValue) - msg := msgChannelValue.msg - log.Debug(msg.OperationID, "msg arrived channel", msg.String()) - isSenderSync := utils.GetSwitchFromOptions(msg.MsgData.Options, constant.IsSenderSync) + msgList := msgChannelValue.msgList + storageMsgList := make([]*pbMsg.MsgDataToMQ, 80) + pushMsgList := make([]*pbMsg.MsgDataToMQ, 80) + latestMsgOperationID := msgList[len(msgList)-1].OperationID + log.Debug(latestMsgOperationID, "msg arrived channel", "channel id", channelID, msgList) + for _, v := range msgList { + isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) + isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) + if isHistory { + storageMsgList = append(storageMsgList, v) + } + if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { + pushMsgList = append(pushMsgList, v) + } + } + //switch msgChannelValue.msg.MsgData.SessionType { //case constant.SingleChatType: //case constant.GroupChatType: @@ -95,23 +115,132 @@ func (och *OnlineHistoryConsumerHandler) Run() { // return //} - err := saveUserChat(msgChannelValue.userID, &msg) + err := saveUserChatList(msgChannelValue.userID, storageMsgList, latestMsgOperationID) if err != nil { - singleMsgFailedCount++ - log.NewError(msg.OperationID, "single data insert to mongo err", err.Error(), msg.String()) + singleMsgFailedCount += uint64(len(storageMsgList)) + log.NewError(latestMsgOperationID, "single data insert to mongo err", err.Error(), storageMsgList) } else { singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount++ + singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - if !(!isSenderSync && msgChannelValue.userID == msg.MsgData.SendID) { - go sendMessageToPush(&msg, msgChannelValue.userID) + for _, v := range pushMsgList { + sendMessageToPush(v, msgChannelValue.userID) } + } } } } } -func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { + +//func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { +// msg := cMsg.Value +// now := time.Now() +// msgFromMQ := pbMsg.MsgDataToMQ{} +// err := proto.Unmarshal(msg, &msgFromMQ) +// if err != nil { +// log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) +// return +// } +// operationID := msgFromMQ.OperationID +// log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) +// //Control whether to store offline messages (mongo) +// isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) +// //Control whether to store history messages (mysql) +// isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) +// isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) +// switch msgFromMQ.MsgData.SessionType { +// case constant.SingleChatType: +// log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) +// if isHistory { +// err := saveUserChat(msgKey, &msgFromMQ) +// if err != nil { +// singleMsgFailedCount++ +// log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) +// return +// } +// singleMsgSuccessCountMutex.Lock() +// singleMsgSuccessCount++ +// singleMsgSuccessCountMutex.Unlock() +// log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) +// } +// if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { +// } else { +// go sendMessageToPush(&msgFromMQ, msgKey) +// } +// log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) +// case constant.GroupChatType: +// log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) +// if isHistory { +// err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) +// if err != nil { +// log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) +// return +// } +// groupMsgCount++ +// } +// go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) +// case constant.NotificationChatType: +// log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) +// if isHistory { +// err := saveUserChat(msgKey, &msgFromMQ) +// if err != nil { +// log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) +// return +// } +// log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) +// } +// if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { +// } else { +// go sendMessageToPush(&msgFromMQ, msgKey) +// } +// log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) +// default: +// log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) +// return +// } +// sess.MarkMessage(cMsg, "") +// log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) +//} + +func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { + for { + select { + case cmd := <-och.msgDistributionCh: + switch cmd.Cmd { + case ConsumerMsgs: + consumerMessages := cmd.Value.([]*sarama.ConsumerMessage) + //Aggregation map[userid]message list + for i := 0; i < len(consumerMessages); i++ { + msgFromMQ := pbMsg.MsgDataToMQ{} + err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) + if err != nil { + log.Error("msg_transfer Unmarshal msg err", "", "msg", string(consumerMessages[i].Value), "err", err.Error()) + return + } + if oldM, ok := och.UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + oldM = append(oldM, &msgFromMQ) + och.UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + } else { + m := make([]*pbMsg.MsgDataToMQ, 100) + m = append(m, &msgFromMQ) + och.UserAggregationMsgs[string(consumerMessages[i].Key)] = m + } + } + for userID, v := range och.UserAggregationMsgs { + if len(v) >= 0 { + channelID := getHashCode(userID) % ChannelNum + go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages}} + }(channelID, userID, v) + } + } + } + } + } + +} +func (mc *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value now := time.Now() msgFromMQ := pbMsg.MsgDataToMQ{} @@ -146,7 +275,7 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Consume } else { go sendMessageToPush(&msgFromMQ, msgKey) } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) + log.NewDebug(operationID, "saveSingleMsg cost time ", time.Since(now)) case constant.GroupChatType: log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) if isHistory { @@ -158,6 +287,8 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Consume groupMsgCount++ } go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) + log.NewDebug(operationID, "saveGroupMsg cost time ", time.Since(now)) + case constant.NotificationChatType: log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) if isHistory { @@ -180,6 +311,7 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Consume sess.MarkMessage(cMsg, "") log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) } + func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value msgFromMQ := pbMsg.MsgDataToMQ{} @@ -202,7 +334,7 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * sess.MarkMessage(cMsg, "") msgFromMQ.MsgData.Seq = uint32(seq) log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} + //och.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} //err := saveUserChat(msgKey, &msgFromMQ) //if err != nil { // singleMsgFailedCount++ @@ -222,19 +354,49 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * func (OnlineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } + +//func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +// claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group +// log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) +// for msg := range claim.Messages() { +// SetOnlineTopicStatus(OnlineTopicBusy) +// //och.TriggerCmd(OnlineTopicBusy) +// log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) +// och.msgHandle[msg.Topic](msg, string(msg.Key), sess) +// if claim.HighWaterMarkOffset()-msg.Offset <= 1 { +// log.Debug("", "online msg consume end", claim.HighWaterMarkOffset(), msg.Offset) +// SetOnlineTopicStatus(OnlineTopicVacancy) +// och.TriggerCmd(OnlineTopicVacancy) +// } +// } +// return nil +//} + func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) + cMsg := make([]*sarama.ConsumerMessage, 500) + t := time.NewTicker(time.Duration(500) * time.Millisecond) for msg := range claim.Messages() { - SetOnlineTopicStatus(OnlineTopicBusy) //och.TriggerCmd(OnlineTopicBusy) - log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) - och.msgHandle[msg.Topic](msg, string(msg.Key), sess) - if claim.HighWaterMarkOffset()-msg.Offset <= 1 { - log.Debug("", "online msg consume end", claim.HighWaterMarkOffset(), msg.Offset) - SetOnlineTopicStatus(OnlineTopicVacancy) - och.TriggerCmd(OnlineTopicVacancy) + cMsg = append(cMsg, msg) + select { + case <-t.C: + if len(cMsg) >= 0 { + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + sess.MarkMessage(msg, "") + cMsg = cMsg[0:0] + } + default: + if len(cMsg) >= 500 { + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + sess.MarkMessage(msg, "") + cMsg = cMsg[0:0] + } + } + log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) + } return nil } @@ -264,3 +426,12 @@ func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { } } + +// String hashes a string to a unique hashcode. +// +// crc32 returns a uint32, but for our use we need +// and non negative integer. Here we cast to an integer +// and invert it if the result is negative. +func getHashCode(s string) uint32 { + return crc32.ChecksumIEEE([]byte(s)) +} From f0c6295cff66d4b5f2122d2962f08708f3743e7d Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 13:34:34 +0800 Subject: [PATCH 061/752] batch to mongo --- pkg/common/db/batch_insert_chat.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index e327ba7b5..b3211e701 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -18,16 +18,17 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, if len(msgList) > GetSingleGocMsgNum() { return errors.New("too large") } + isInit := false currentMaxSeq, err := d.GetUserMaxSeq(userID) if err == nil { } else if err == redis.ErrNil { + isInit = true currentMaxSeq = 0 } else { return utils.Wrap(err, "") } - //4999 remain := uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) @@ -43,6 +44,13 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, if sMsg.Msg, err = proto.Marshal(m.MsgData); err != nil { return utils.Wrap(err, "") } + if isInit { + msgListToMongoNext = append(msgListToMongoNext, sMsg) + seqUidNext = getSeqUid(userID, uint32(currentMaxSeq)) + log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) + continue + } + if insertCounter < remain { msgListToMongo = append(msgListToMongo, sMsg) insertCounter++ From 6f79e63b3fc98e59d4bf80630297448b4f1f5f95 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 14:06:31 +0800 Subject: [PATCH 062/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 248e55bd6..6bd344737 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -378,18 +378,21 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS cMsg := make([]*sarama.ConsumerMessage, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) for msg := range claim.Messages() { + operationID := utils.OperationIDGenerator() //och.TriggerCmd(OnlineTopicBusy) cMsg = append(cMsg, msg) select { case <-t.C: if len(cMsg) >= 0 { och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + log.Debug(operationID, "timer send to msgDistributionCh", och.msgDistributionCh, "len: ", len(cMsg)) sess.MarkMessage(msg, "") cMsg = cMsg[0:0] } default: if len(cMsg) >= 500 { och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + log.Debug(operationID, "500 send to msgDistributionCh", och.msgDistributionCh, "len: ", len(cMsg)) sess.MarkMessage(msg, "") cMsg = cMsg[0:0] } From 3bf04802e4b1ae6e259e88edbbfc756efc141b68 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 14:06:51 +0800 Subject: [PATCH 063/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 6bd344737..5e1e5f935 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -376,7 +376,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 500) - t := time.NewTicker(time.Duration(500) * time.Millisecond) + t := time.NewTicker(time.Duration(10) * time.Millisecond) for msg := range claim.Messages() { operationID := utils.OperationIDGenerator() //och.TriggerCmd(OnlineTopicBusy) From 06aae24dada45bb0dfefeab884cdd81ce7f3640e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 14:12:29 +0800 Subject: [PATCH 064/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 5e1e5f935..b6e717af6 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -205,19 +205,23 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { for { + operationID := utils.OperationIDGenerator() select { + case cmd := <-och.msgDistributionCh: switch cmd.Cmd { case ConsumerMsgs: consumerMessages := cmd.Value.([]*sarama.ConsumerMessage) //Aggregation map[userid]message list for i := 0; i < len(consumerMessages); i++ { + msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(consumerMessages[i].Value), "err", err.Error()) + log.Error(operationID, "msg_transfer Unmarshal msg err", "", "msg", string(consumerMessages[i].Value), "err", err.Error()) return } + log.Debug(operationID, "MessagesDistributionHandle ", msgFromMQ.String()) if oldM, ok := och.UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) och.UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM @@ -230,6 +234,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { for userID, v := range och.UserAggregationMsgs { if len(v) >= 0 { channelID := getHashCode(userID) % ChannelNum + log.Debug(operationID, "UserAggregationMsgs ", len(v), channelID, userID) go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages}} }(channelID, userID, v) From b632a991b9b8a588cef2bd4de4a05425c05ede21 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 14:18:54 +0800 Subject: [PATCH 065/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index b6e717af6..b13f02631 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -238,6 +238,8 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages}} }(channelID, userID, v) + } else { + log.NewWarn(operationID, "UserAggregationMsgs ", len(v), userID) } } } From a14fd303fcdbd904b8459f22527e8532aae6c488 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 14:32:09 +0800 Subject: [PATCH 066/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index b13f02631..7105c08c2 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -213,6 +213,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { case ConsumerMsgs: consumerMessages := cmd.Value.([]*sarama.ConsumerMessage) //Aggregation map[userid]message list + log.Debug(operationID, "consumerMessages len ", len(consumerMessages)) for i := 0; i < len(consumerMessages); i++ { msgFromMQ := pbMsg.MsgDataToMQ{} From a7be7a3e7a6938ea29064370db7baa2d2e3c93c1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 14:38:10 +0800 Subject: [PATCH 067/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 7105c08c2..2a84e5a63 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -226,12 +226,15 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { if oldM, ok := och.UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) och.UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + log.Debug(operationID, "consumerMessages key ", string(consumerMessages[i].Key), oldM) } else { m := make([]*pbMsg.MsgDataToMQ, 100) m = append(m, &msgFromMQ) och.UserAggregationMsgs[string(consumerMessages[i].Key)] = m + log.Debug(operationID, "consumerMessages key ", string(consumerMessages[i].Key), m) } } + log.Debug(operationID, "UserAggregationMsgs len ", len(och.UserAggregationMsgs)) for userID, v := range och.UserAggregationMsgs { if len(v) >= 0 { channelID := getHashCode(userID) % ChannelNum From 7ea1309146c8338d3f10b1fbe28a96c6083e4d4a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 14:42:49 +0800 Subject: [PATCH 068/752] concurrent consumption of messages --- .../logic/offline_history_msg_handler.go | 48 ++++++++++------ .../logic/online_history_msg_handler.go | 57 ++++++++++++------- 2 files changed, 69 insertions(+), 36 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 4fdd30577..2f63f2007 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -18,14 +18,12 @@ type OfflineHistoryConsumerHandler struct { historyConsumerGroup *kfk.MConsumerGroup cmdCh chan Cmd2Value msgCh chan Cmd2Value - UserAggregationMsgs map[string][]*pbMsg.MsgDataToMQ chArrays [ChannelNum]chan Cmd2Value msgDistributionCh chan Cmd2Value } func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { mc.msgHandle = make(map[string]fcb) - mc.UserAggregationMsgs = make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) mc.msgDistributionCh = make(chan Cmd2Value) //no buffer channel go mc.MessagesDistributionHandle() mc.cmdCh = cmdCh @@ -52,11 +50,12 @@ func (och *OfflineHistoryConsumerHandler) Run(channelID int) { case UserMessages: msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList + triggerID := msgChannelValue.triggerID storageMsgList := make([]*pbMsg.MsgDataToMQ, 80) pushMsgList := make([]*pbMsg.MsgDataToMQ, 80) - latestMsgOperationID := msgList[len(msgList)-1].OperationID - log.Debug(latestMsgOperationID, "msg arrived channel", "channel id", channelID, msgList) + log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { + log.Debug(triggerID, "msg come to storage center", v.String()) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) if isHistory { @@ -76,10 +75,10 @@ func (och *OfflineHistoryConsumerHandler) Run(channelID int) { // return //} - err := saveUserChatList(msgChannelValue.userID, storageMsgList, latestMsgOperationID) + err := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) - log.NewError(latestMsgOperationID, "single data insert to mongo err", err.Error(), storageMsgList) + log.NewError(triggerID, "single data insert to mongo err", err.Error(), storageMsgList) } else { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) @@ -94,34 +93,40 @@ func (och *OfflineHistoryConsumerHandler) Run(channelID int) { } } func (och *OfflineHistoryConsumerHandler) MessagesDistributionHandle() { + UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) for { select { case cmd := <-och.msgDistributionCh: switch cmd.Cmd { case ConsumerMsgs: - consumerMessages := cmd.Value.([]*sarama.ConsumerMessage) + triggerChannelValue := cmd.Value.(TriggerChannelValue) + triggerID := triggerChannelValue.triggerID + consumerMessages := triggerChannelValue.cmsgList //Aggregation map[userid]message list + log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) for i := 0; i < len(consumerMessages); i++ { msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(consumerMessages[i].Value), "err", err.Error()) + log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) return } - if oldM, ok := och.UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String()) + if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) - och.UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { - m := make([]*pbMsg.MsgDataToMQ, 100) + m := make([]*pbMsg.MsgDataToMQ, 0, 100) m = append(m, &msgFromMQ) - och.UserAggregationMsgs[string(consumerMessages[i].Key)] = m + UserAggregationMsgs[string(consumerMessages[i].Key)] = m } } - for userID, v := range och.UserAggregationMsgs { + log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) + for userID, v := range UserAggregationMsgs { if len(v) >= 0 { channelID := getHashCode(userID) % ChannelNum go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages}} + och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} }(channelID, userID, v) } } @@ -271,23 +276,32 @@ func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) erro func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 500) + cMsg := make([]*sarama.ConsumerMessage, 0, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) + var triggerID string for msg := range claim.Messages() { //och.TriggerCmd(OnlineTopicBusy) cMsg = append(cMsg, msg) select { case <-t.C: if len(cMsg) >= 0 { - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "timer trigger msg consumer start", len(cMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: cMsg}} sess.MarkMessage(msg, "") cMsg = cMsg[0:0] + log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } default: if len(cMsg) >= 500 { - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "length trigger msg consumer start", len(cMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: cMsg}} sess.MarkMessage(msg, "") cMsg = cMsg[0:0] + log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } } diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 248e55bd6..b33014bc4 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -20,8 +20,13 @@ import ( ) type MsgChannelValue struct { - userID string - msgList []*pbMsg.MsgDataToMQ + userID string + triggerID string + msgList []*pbMsg.MsgDataToMQ +} +type TriggerChannelValue struct { + triggerID string + cmsgList []*sarama.ConsumerMessage } type fcb func(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) type Cmd2Value struct { @@ -33,14 +38,12 @@ type OnlineHistoryConsumerHandler struct { historyConsumerGroup *kfk.MConsumerGroup cmdCh chan Cmd2Value msgCh chan Cmd2Value - UserAggregationMsgs map[string][]*pbMsg.MsgDataToMQ chArrays [ChannelNum]chan Cmd2Value msgDistributionCh chan Cmd2Value } func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle = make(map[string]fcb) - och.UserAggregationMsgs = make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel go och.MessagesDistributionHandle() och.cmdCh = cmdCh @@ -91,11 +94,12 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { case UserMessages: msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList + triggerID := msgChannelValue.triggerID storageMsgList := make([]*pbMsg.MsgDataToMQ, 80) pushMsgList := make([]*pbMsg.MsgDataToMQ, 80) - latestMsgOperationID := msgList[len(msgList)-1].OperationID - log.Debug(latestMsgOperationID, "msg arrived channel", "channel id", channelID, msgList) + log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { + log.Debug(triggerID, "msg come to storage center", v.String()) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) if isHistory { @@ -115,10 +119,10 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // return //} - err := saveUserChatList(msgChannelValue.userID, storageMsgList, latestMsgOperationID) + err := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) - log.NewError(latestMsgOperationID, "single data insert to mongo err", err.Error(), storageMsgList) + log.NewError(triggerID, "single data insert to mongo err", err.Error(), storageMsgList) } else { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) @@ -204,34 +208,40 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { //} func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { + UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) for { select { case cmd := <-och.msgDistributionCh: switch cmd.Cmd { case ConsumerMsgs: - consumerMessages := cmd.Value.([]*sarama.ConsumerMessage) + triggerChannelValue := cmd.Value.(TriggerChannelValue) + triggerID := triggerChannelValue.triggerID + consumerMessages := triggerChannelValue.cmsgList //Aggregation map[userid]message list + log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) for i := 0; i < len(consumerMessages); i++ { msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(consumerMessages[i].Value), "err", err.Error()) + log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) return } - if oldM, ok := och.UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String()) + if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) - och.UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { - m := make([]*pbMsg.MsgDataToMQ, 100) + m := make([]*pbMsg.MsgDataToMQ, 0, 100) m = append(m, &msgFromMQ) - och.UserAggregationMsgs[string(consumerMessages[i].Key)] = m + UserAggregationMsgs[string(consumerMessages[i].Key)] = m } } - for userID, v := range och.UserAggregationMsgs { + log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) + for userID, v := range UserAggregationMsgs { if len(v) >= 0 { channelID := getHashCode(userID) % ChannelNum go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages}} + och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} }(channelID, userID, v) } } @@ -375,23 +385,32 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 500) + cMsg := make([]*sarama.ConsumerMessage, 0, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) + var triggerID string for msg := range claim.Messages() { //och.TriggerCmd(OnlineTopicBusy) cMsg = append(cMsg, msg) select { case <-t.C: if len(cMsg) >= 0 { - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "timer trigger msg consumer start", len(cMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: cMsg}} sess.MarkMessage(msg, "") cMsg = cMsg[0:0] + log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } default: if len(cMsg) >= 500 { - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: cMsg} + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "length trigger msg consumer start", len(cMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: cMsg}} sess.MarkMessage(msg, "") cMsg = cMsg[0:0] + log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } } From 2b142baf192e1175526188c4c51711b85b6fdd63 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 14:48:06 +0800 Subject: [PATCH 069/752] concurrent consumption of messages --- internal/msg_transfer/logic/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index b4cfff6db..d36a3d8d5 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -15,7 +15,7 @@ const OnlineTopicVacancy = 0 const Msg = 2 const ConsumerMsgs = 3 const UserMessages = 4 -const ChannelNum = 10 +const ChannelNum = 11 var ( persistentCH PersistentConsumerHandler From aa733542e37023b24203252239b57dc736948bd8 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 15:01:41 +0800 Subject: [PATCH 070/752] concurrent consumption of messages --- internal/msg_transfer/logic/offline_history_msg_handler.go | 4 ++-- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 2f63f2007..69994149a 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -116,7 +116,7 @@ func (och *OfflineHistoryConsumerHandler) MessagesDistributionHandle() { oldM = append(oldM, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { - m := make([]*pbMsg.MsgDataToMQ, 0, 100) + m := make([]*pbMsg.MsgDataToMQ, 50, 100) m = append(m, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = m } @@ -276,7 +276,7 @@ func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) erro func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 0, 500) + cMsg := make([]*sarama.ConsumerMessage, 200, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) var triggerID string for msg := range claim.Messages() { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index b33014bc4..37f7d2c57 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -231,7 +231,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { oldM = append(oldM, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { - m := make([]*pbMsg.MsgDataToMQ, 0, 100) + m := make([]*pbMsg.MsgDataToMQ, 50, 100) m = append(m, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = m } @@ -385,7 +385,7 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 0, 500) + cMsg := make([]*sarama.ConsumerMessage, 200, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) var triggerID string for msg := range claim.Messages() { From 222d6cdca1e7b10b53cb31631b42d092bbe0c8a4 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 15:21:16 +0800 Subject: [PATCH 071/752] fix bug --- internal/msg_transfer/logic/offline_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 69994149a..d6d25ccd4 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -276,7 +276,7 @@ func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) erro func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 200, 500) + cMsg := make([]*sarama.ConsumerMessage, 0, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) var triggerID string for msg := range claim.Messages() { From 7f806389281e81ce5a3e796a2f8c231ead273032 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 15:27:25 +0800 Subject: [PATCH 072/752] fix bug --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 37f7d2c57..a1951ee21 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -385,7 +385,7 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 200, 500) + cMsg := make([]*sarama.ConsumerMessage, 0, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) var triggerID string for msg := range claim.Messages() { From a2f7edcbcd67ac56032e622f3095b12546143b80 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 15:28:36 +0800 Subject: [PATCH 073/752] concurrent consumption of messages --- internal/msg_transfer/logic/offline_history_msg_handler.go | 4 ++-- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 69994149a..2f63f2007 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -116,7 +116,7 @@ func (och *OfflineHistoryConsumerHandler) MessagesDistributionHandle() { oldM = append(oldM, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { - m := make([]*pbMsg.MsgDataToMQ, 50, 100) + m := make([]*pbMsg.MsgDataToMQ, 0, 100) m = append(m, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = m } @@ -276,7 +276,7 @@ func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) erro func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 200, 500) + cMsg := make([]*sarama.ConsumerMessage, 0, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) var triggerID string for msg := range claim.Messages() { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 37f7d2c57..b33014bc4 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -231,7 +231,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { oldM = append(oldM, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { - m := make([]*pbMsg.MsgDataToMQ, 50, 100) + m := make([]*pbMsg.MsgDataToMQ, 0, 100) m = append(m, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = m } @@ -385,7 +385,7 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 200, 500) + cMsg := make([]*sarama.ConsumerMessage, 0, 500) t := time.NewTicker(time.Duration(500) * time.Millisecond) var triggerID string for msg := range claim.Messages() { From e12207fc73e1731f2b5590c5fd9552727a4a5735 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 15:40:40 +0800 Subject: [PATCH 074/752] concurrent consumption of messages --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index b33014bc4..622f7eae6 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -239,7 +239,9 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) for userID, v := range UserAggregationMsgs { if len(v) >= 0 { - channelID := getHashCode(userID) % ChannelNum + hashCode := getHashCode(userID) + channelID := hashCode % ChannelNum + log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} }(channelID, userID, v) From 8fe929d8ab8692b082ebe8c3c267df5f6dbf0b0a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 15:47:04 +0800 Subject: [PATCH 075/752] concurrent consumption of messages --- internal/msg_transfer/logic/online_history_msg_handler.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 622f7eae6..4773e1af3 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -242,9 +242,9 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { hashCode := getHashCode(userID) channelID := hashCode % ChannelNum log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) - go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} - }(channelID, userID, v) + //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} + //}(channelID, userID, v) } } } From 930923e330f6e4a12a927100935a410ba5482504 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 15:51:37 +0800 Subject: [PATCH 076/752] concurrent consumption of messages --- .../msg_transfer/logic/offline_history_msg_handler.go | 9 +++++---- .../msg_transfer/logic/online_history_msg_handler.go | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 2f63f2007..a2a7f7673 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -28,14 +28,15 @@ func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { go mc.MessagesDistributionHandle() mc.cmdCh = cmdCh mc.msgCh = make(chan Cmd2Value, 1000) + for i := 0; i < ChannelNum; i++ { + mc.chArrays[i] = make(chan Cmd2Value, 1000) + go mc.Run(i) + } if config.Config.ReliableStorage { mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2Mongo } else { mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2MongoLowReliability - for i := 0; i < ChannelNum; i++ { - mc.chArrays[i] = make(chan Cmd2Value, 1000) - go mc.Run(i) - } + } mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschatOffline.Topic}, diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 4773e1af3..6efef8124 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -48,14 +48,15 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { go och.MessagesDistributionHandle() och.cmdCh = cmdCh och.msgCh = make(chan Cmd2Value, 1000) + for i := 0; i < ChannelNum; i++ { + och.chArrays[i] = make(chan Cmd2Value, 1000) + go och.Run(i) + } if config.Config.ReliableStorage { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2Mongo } else { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability - for i := 0; i < ChannelNum; i++ { - och.chArrays[i] = make(chan Cmd2Value, 1000) - go och.Run(i) - } + } och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, From 223b2678b4903201011a7d7b2e29e7229e92653a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 16:03:33 +0800 Subject: [PATCH 077/752] fix bug --- internal/msg_transfer/logic/offline_history_msg_handler.go | 4 ++-- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- pkg/common/db/batch_insert_chat.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index a2a7f7673..78c867851 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -52,8 +52,8 @@ func (och *OfflineHistoryConsumerHandler) Run(channelID int) { msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID - storageMsgList := make([]*pbMsg.MsgDataToMQ, 80) - pushMsgList := make([]*pbMsg.MsgDataToMQ, 80) + storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + pushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 6efef8124..173f534b2 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -96,8 +96,8 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID - storageMsgList := make([]*pbMsg.MsgDataToMQ, 80) - pushMsgList := make([]*pbMsg.MsgDataToMQ, 80) + storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + pushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index b3211e701..e6b7fa7b5 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -35,7 +35,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, msgListToMongoNext := make([]MsgInfo, 0) seqUid := "" seqUidNext := "" - log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq, userID) + log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq, userID, len(msgList)) for _, m := range msgList { currentMaxSeq++ sMsg := MsgInfo{} From 15329a97fe2ed1a3b0c6d1a7011d856b8b0deb61 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 16:07:32 +0800 Subject: [PATCH 078/752] concurrent consumption of messages --- internal/msg_transfer/logic/online_history_msg_handler.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 6efef8124..297c3ea99 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -96,8 +96,8 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID - storageMsgList := make([]*pbMsg.MsgDataToMQ, 80) - pushMsgList := make([]*pbMsg.MsgDataToMQ, 80) + storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + pushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) @@ -119,7 +119,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) // return //} - + log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(pushMsgList)) err := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) @@ -227,7 +227,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) return } - log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String()) + log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM From abcfaa05e277fbb2659e829f9adf7b3921daada3 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 16:12:05 +0800 Subject: [PATCH 079/752] log --- pkg/common/db/batch_insert_chat.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index e6b7fa7b5..7d1b61342 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -37,6 +37,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, seqUidNext := "" log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq, userID, len(msgList)) for _, m := range msgList { + log.Debug(operationID, "msg node ", m.String(), m.MsgData.ClientMsgID) currentMaxSeq++ sMsg := MsgInfo{} sMsg.SendTime = m.MsgData.SendTime From 686d77dcc1a1e61f1eca0e992c6226738ad6fea6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 16:53:35 +0800 Subject: [PATCH 080/752] concurrent consumption of messages --- .../logic/online_history_msg_handler.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 297c3ea99..36fcb45a0 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -397,20 +397,30 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS select { case <-t.C: if len(cMsg) >= 0 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 500) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) + + } triggerID = utils.OperationIDGenerator() log.Debug(triggerID, "timer trigger msg consumer start", len(cMsg)) och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} + triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(msg, "") cMsg = cMsg[0:0] log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } default: if len(cMsg) >= 500 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 500) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) + + } triggerID = utils.OperationIDGenerator() log.Debug(triggerID, "length trigger msg consumer start", len(cMsg)) och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} + triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(msg, "") cMsg = cMsg[0:0] log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) From a12c8f4dbc6e55c4a0c59779d9dc5209a8e71fc0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 17:06:51 +0800 Subject: [PATCH 081/752] concurrent consumption of messages --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 36fcb45a0..6e38ac015 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -407,7 +407,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] + cMsg = make([]*sarama.ConsumerMessage, 0, 500) log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } default: @@ -422,7 +422,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] + cMsg = make([]*sarama.ConsumerMessage, 0, 500) log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } From c5f055718ab8d87f063d7e783bd7b5c3b5d036df Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 17:32:40 +0800 Subject: [PATCH 082/752] concurrent consumption of messages --- internal/msg_transfer/logic/online_history_msg_handler.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 6e38ac015..f36d6cfaf 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -209,8 +209,8 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { //} func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) for { + UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) select { case cmd := <-och.msgDistributionCh: switch cmd.Cmd { @@ -250,6 +250,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { } } } + } } @@ -403,7 +404,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS } triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(cMsg)) + log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(msg, "") @@ -418,7 +419,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS } triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "length trigger msg consumer start", len(cMsg)) + log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(msg, "") From 757829d286697a95c11409f754bfa06ba42dd8c3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 17:43:25 +0800 Subject: [PATCH 083/752] concurrent consumption of messages --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index f36d6cfaf..5aa94d607 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -390,7 +390,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 500) - t := time.NewTicker(time.Duration(500) * time.Millisecond) + t := time.NewTicker(time.Duration(10) * time.Millisecond) var triggerID string for msg := range claim.Messages() { //och.TriggerCmd(OnlineTopicBusy) From 624bb0a7e522e3e71d787a14a398928407874903 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 18:46:19 +0800 Subject: [PATCH 084/752] concurrent consumption of messages --- pkg/common/db/batch_insert_chat.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 7d1b61342..eec173897 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -28,8 +28,11 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, } else { return utils.Wrap(err, "") } - - remain := uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + var remain uint64 + if currentMaxSeq < uint64(GetSingleGocMsgNum()) { + remain = uint64(GetSingleGocMsgNum()-1) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + } + remain = uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) msgListToMongoNext := make([]MsgInfo, 0) From adb6337a27778025d248b3e86ee72aab1bd54e4d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 19:34:45 +0800 Subject: [PATCH 085/752] concurrent consumption of messages --- pkg/common/db/batch_insert_chat.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index eec173897..64d2d342b 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -31,8 +31,9 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, var remain uint64 if currentMaxSeq < uint64(GetSingleGocMsgNum()) { remain = uint64(GetSingleGocMsgNum()-1) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + } else { + remain = uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) } - remain = uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) msgListToMongoNext := make([]MsgInfo, 0) @@ -54,7 +55,6 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) continue } - if insertCounter < remain { msgListToMongo = append(msgListToMongo, sMsg) insertCounter++ From eb27db22322aca2fc418d3371d6440f60b959f13 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 19:36:06 +0800 Subject: [PATCH 086/752] fix bug --- pkg/common/db/batch_insert_chat.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index eec173897..8ef1117a2 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -31,8 +31,9 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, var remain uint64 if currentMaxSeq < uint64(GetSingleGocMsgNum()) { remain = uint64(GetSingleGocMsgNum()-1) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + } else { + remain = uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) } - remain = uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) msgListToMongoNext := make([]MsgInfo, 0) From e8e4af72868e31fefdfa8be6da1a6e82f790b9a7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 20 May 2022 19:43:28 +0800 Subject: [PATCH 087/752] k8s_deploy --- deploy_k8s/admin_cms/deployment.yaml | 93 +++++----------------------- 1 file changed, 16 insertions(+), 77 deletions(-) diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml index b1ef1b3b2..c37061e64 100644 --- a/deploy_k8s/admin_cms/deployment.yaml +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -1,92 +1,31 @@ --- apiVersion: apps/v1 -kind: StatefulSet +kind: Deployment metadata: - name: admin-cms + name: api-deployment spec: - podManagementPolicy: OrderedReady - replicas: 1 - revisionHistoryLimit: 10 selector: matchLabels: - app: admin-cms - workload.auth.cattle.io/workloadselector: statefulSet-openim-admin-cms - serviceName: admin-cms + app: admin_cms # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 template: metadata: labels: - app: admin-cms - workload.auth.cattle.io/workloadselector: statefulSet-openim-admin-cms + app: api # 标签 spec: containers: - - image: "IMAGE_TAG" - env: - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - - name: NODE_IP - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: status.hostIP - - name: POD_IP - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: status.podIP - - name: NAMESPACE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace + - name: api + image: openim/api:v2.0.10 ports: - - name: p11000 - protocol: TCP - containerPort: 11000 - imagePullPolicy: Always - name: admin-cms - stdin: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - tty: true + - containerPort: 10002 volumeMounts: - - mountPath: /Open-IM-Server/config.tmp.yaml - name: vol2 + - name: config + mountPath: /Open-IM-Server/config readOnly: true - subPath: config.yaml - dnsConfig: {} - dnsPolicy: ClusterFirst - restartPolicy: Always - schedulerName: default-scheduler - securityContext: {} - terminationGracePeriodSeconds: 30 volumes: - - configMap: - defaultMode: 256 - name: config.yaml - optional: false - name: vol2 - updateStrategy: - rollingUpdate: - partition: 0 - type: RollingUpdate ---- -apiVersion: v1 -kind: Service -metadata: - name: admin-cms -spec: - ports: - - name: p11000 - port: 11000 - protocol: TCP - targetPort: 11000 - selector: - app: admin-cms - type: ClusterIP \ No newline at end of file + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 + From 9f62de042087ac718729094c0ab28af9854d085b Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 19:46:49 +0800 Subject: [PATCH 088/752] fix bug --- pkg/common/db/batch_insert_chat.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 64d2d342b..9fd25f8de 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -10,7 +10,6 @@ import ( "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson" - "time" ) func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { @@ -66,7 +65,9 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) } } - ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + // ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + + ctx := context.Background() c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) if seqUid != "" { From 38317c549794b07d8ff170f94709ca6b502dc6b1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 20:10:24 +0800 Subject: [PATCH 089/752] concurrent consumption of messages --- pkg/common/db/batch_insert_chat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 64d2d342b..9b78c8822 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -32,7 +32,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, if currentMaxSeq < uint64(GetSingleGocMsgNum()) { remain = uint64(GetSingleGocMsgNum()-1) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) } else { - remain = uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + remain = uint64(GetSingleGocMsgNum()) - ((currentMaxSeq - 4999) % uint64(GetSingleGocMsgNum())) } insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) From 0265ea45b2a1b428e4d07e6cbea8227804b26527 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 20 May 2022 20:11:47 +0800 Subject: [PATCH 090/752] fix bug --- config/config.yaml | 4 ++-- pkg/common/db/batch_insert_chat.go | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index ee973fe37..1cfee4e1d 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -22,12 +22,12 @@ mongo: dbUri: ""#当dbUri值不为空则直接使用该值 dbAddress: [ 127.0.0.1:37017 ] #mongo地址 目前仅支持单机,默认即可 dbDirect: false - dbTimeout: 10 + dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 dbSource: admin dbUserName: #mongo用户名,建议先不设置 dbPassword: #mongo密码,建议先不设置 - dbMaxPoolSize: 20 + dbMaxPoolSize: 100 dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 redis: diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 9fd25f8de..2f0884441 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -31,13 +31,14 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, if currentMaxSeq < uint64(GetSingleGocMsgNum()) { remain = uint64(GetSingleGocMsgNum()-1) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) } else { - remain = uint64(GetSingleGocMsgNum()) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + remain = uint64(GetSingleGocMsgNum()) - ((currentMaxSeq - (uint64(GetSingleGocMsgNum()) - 1)) % uint64(GetSingleGocMsgNum())) } insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) msgListToMongoNext := make([]MsgInfo, 0) seqUid := "" seqUidNext := "" + //1, log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq, userID, len(msgList)) for _, m := range msgList { log.Debug(operationID, "msg node ", m.String(), m.MsgData.ClientMsgID) From 55907a9a05b8f81ca32311c83b6079a43df0a10d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 21:02:18 +0800 Subject: [PATCH 091/752] concurrent consumption of messages --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 5aa94d607..9d0fad271 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -390,7 +390,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 500) - t := time.NewTicker(time.Duration(10) * time.Millisecond) + t := time.NewTicker(time.Duration(100) * time.Millisecond) var triggerID string for msg := range claim.Messages() { //och.TriggerCmd(OnlineTopicBusy) From 01b065b3c23d4bd826af944d1ba6018e5bc27d40 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 20 May 2022 21:58:23 +0800 Subject: [PATCH 092/752] concurrent consumption of messages --- .../logic/online_history_msg_handler.go | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 9d0fad271..c20422551 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -392,26 +392,11 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS cMsg := make([]*sarama.ConsumerMessage, 0, 500) t := time.NewTicker(time.Duration(100) * time.Millisecond) var triggerID string - for msg := range claim.Messages() { + for { //och.TriggerCmd(OnlineTopicBusy) - cMsg = append(cMsg, msg) select { - case <-t.C: - if len(cMsg) >= 0 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 500) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) - - } - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(msg, "") - cMsg = make([]*sarama.ConsumerMessage, 0, 500) - log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) - } - default: + case msg := <-claim.Messages(): + cMsg = append(cMsg, msg) if len(cMsg) >= 500 { ccMsg := make([]*sarama.ConsumerMessage, 0, 500) for _, v := range cMsg { @@ -426,9 +411,23 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS cMsg = make([]*sarama.ConsumerMessage, 0, 500) log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } + case <-t.C: + if len(cMsg) > 0 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 500) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) + } + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg}} + sess.MarkMessage(cMsg[len(cMsg)-1], "") + cMsg = make([]*sarama.ConsumerMessage, 0, 500) + log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) + } } - log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) + //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) } return nil From c2e7863ca0143d052ebed7543bd79aa3db981499 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 21 May 2022 07:32:45 +0800 Subject: [PATCH 093/752] fix bug --- pkg/common/db/batch_insert_chat.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index a7baef303..0354082d0 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -28,11 +28,20 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, return utils.Wrap(err, "") } var remain uint64 + //if currentMaxSeq < uint64(GetSingleGocMsgNum()) { + // remain = uint64(GetSingleGocMsgNum()-1) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + //} else { + // remain = uint64(GetSingleGocMsgNum()) - ((currentMaxSeq - (uint64(GetSingleGocMsgNum()) - 1)) % uint64(GetSingleGocMsgNum())) + //} + + blk0 := uint64(GetSingleGocMsgNum() - 1) if currentMaxSeq < uint64(GetSingleGocMsgNum()) { - remain = uint64(GetSingleGocMsgNum()-1) - (currentMaxSeq % uint64(GetSingleGocMsgNum())) + remain = blk0 - currentMaxSeq } else { - remain = uint64(GetSingleGocMsgNum()) - ((currentMaxSeq - (uint64(GetSingleGocMsgNum()) - 1)) % uint64(GetSingleGocMsgNum())) + excludeBlk0 := currentMaxSeq - blk0 + remain = (uint64(GetSingleGocMsgNum()) - (excludeBlk0 % uint64(GetSingleGocMsgNum()))) % uint64(GetSingleGocMsgNum()) } + insertCounter := uint64(0) msgListToMongo := make([]MsgInfo, 0) msgListToMongoNext := make([]MsgInfo, 0) From 79b5551ec1370078ca6434506e9aa34af423ee28 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 21 May 2022 09:58:27 +0800 Subject: [PATCH 094/752] log change --- .../msg_transfer/logic/online_history_msg_handler.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index c20422551..7e4026088 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -389,7 +389,7 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 0, 500) + cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) var triggerID string for { @@ -397,8 +397,8 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS select { case msg := <-claim.Messages(): cMsg = append(cMsg, msg) - if len(cMsg) >= 500 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 500) + if len(cMsg) >= 1000 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) for _, v := range cMsg { ccMsg = append(ccMsg, v) @@ -408,12 +408,12 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(msg, "") - cMsg = make([]*sarama.ConsumerMessage, 0, 500) + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } case <-t.C: if len(cMsg) > 0 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 500) + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) for _, v := range cMsg { ccMsg = append(ccMsg, v) } @@ -422,7 +422,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg}} sess.MarkMessage(cMsg[len(cMsg)-1], "") - cMsg = make([]*sarama.ConsumerMessage, 0, 500) + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } From 5cdba3c00a8ef05334bb3eb674981cb82af33666 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 21 May 2022 10:19:02 +0800 Subject: [PATCH 095/752] log change --- internal/msg_transfer/logic/online_history_msg_handler.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 7e4026088..f714eaa5c 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -388,6 +388,9 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group + if sess == nil { + time.Sleep(100 * time.Millisecond) + } log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) From 17b4a0525ddbfed9f7471e5946db199b35d72273 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 21 May 2022 10:59:44 +0800 Subject: [PATCH 096/752] log --- internal/msg_gateway/gate/logic.go | 1 + internal/msg_transfer/logic/online_history_msg_handler.go | 1 + internal/rpc/msg/send_msg.go | 2 ++ pkg/common/db/batch_insert_chat.go | 2 ++ 4 files changed, 6 insertions(+) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 5644f1cb3..884f5f842 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -147,6 +147,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { sendMsgAllCount++ sendMsgAllCountLock.Unlock() log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) + nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg) if isPass { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index c20422551..7e5053df1 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -105,6 +105,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) if isHistory { storageMsgList = append(storageMsgList, v) + log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) } if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { pushMsgList = append(pushMsgList, v) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 16e4c5ab6..e04610c7b 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -372,6 +372,8 @@ func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status str pid, offset, err := rpc.onlineProducer.SendMessage(m, key) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) + } else { + log.NewWarn(m.OperationID, "sendMsgToKafka client msgID ", m.MsgData.ClientMsgID) } return err case constant.OfflineStatus: diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 0354082d0..b5fca3502 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -48,6 +48,8 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, seqUid := "" seqUidNext := "" log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq, userID, len(msgList)) + //4998 remain ==1 + //4999 for _, m := range msgList { log.Debug(operationID, "msg node ", m.String(), m.MsgData.ClientMsgID) currentMaxSeq++ From 7d1843f48513b246fcf4e081a5e3057ccaad4704 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 21 May 2022 14:19:45 +0800 Subject: [PATCH 097/752] log change --- .../msg_transfer/logic/online_history_msg_handler.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 007896bd4..905d39b10 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -129,9 +129,15 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - for _, v := range pushMsgList { - sendMessageToPush(v, msgChannelValue.userID) - } + //go func(push,storage []*pbMsg.MsgDataToMQ) { + // for _, v := range storage { + // sendMessageToPush(v, msgChannelValue.userID) + // } + // for _, x := range utils.DifferenceString() { + // sendMessageToPush(v, msgChannelValue.userID) + // } + // + //}(pushMsgList,storageMsgList) } } From 5b9e5f904b1a277f3e22f98eb94fa41ebec10568 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 21 May 2022 15:01:01 +0800 Subject: [PATCH 098/752] log --- .../logic/online_history_msg_handler.go | 13 ++++++++++--- internal/rpc/msg/send_msg.go | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 007896bd4..4f0c9ba8f 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -105,7 +105,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) if isHistory { storageMsgList = append(storageMsgList, v) - log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) + // log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) } if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { pushMsgList = append(pushMsgList, v) @@ -389,9 +389,16 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group - if sess == nil { - time.Sleep(100 * time.Millisecond) + for { + if sess == nil { + log.Error("sess == nil") + time.Sleep(100 * time.Millisecond) + } else { + log.NewWarn("sess == ", sess) + break + } } + log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index e04610c7b..587f56998 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -373,7 +373,7 @@ func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status str if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } else { - log.NewWarn(m.OperationID, "sendMsgToKafka client msgID ", m.MsgData.ClientMsgID) + // log.NewWarn(m.OperationID, "sendMsgToKafka client msgID ", m.MsgData.ClientMsgID) } return err case constant.OfflineStatus: From e2eb546069e431831151cd1c0b95bf1a1e5073ba Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 21 May 2022 15:03:26 +0800 Subject: [PATCH 099/752] log change --- .../logic/online_history_msg_handler.go | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 905d39b10..8568f32b4 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -97,7 +97,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - pushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + noStoragepushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) @@ -106,10 +106,12 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { if isHistory { storageMsgList = append(storageMsgList, v) log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) + } else { + if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { + noStoragepushMsgList = append(noStoragepushMsgList, v) + } } - if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - pushMsgList = append(pushMsgList, v) - } + } //switch msgChannelValue.msg.MsgData.SessionType { @@ -120,7 +122,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) // return //} - log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(pushMsgList)) + log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(noStoragepushMsgList)) err := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) @@ -129,15 +131,15 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - //go func(push,storage []*pbMsg.MsgDataToMQ) { - // for _, v := range storage { - // sendMessageToPush(v, msgChannelValue.userID) - // } - // for _, x := range utils.DifferenceString() { - // sendMessageToPush(v, msgChannelValue.userID) - // } - // - //}(pushMsgList,storageMsgList) + go func(push, storage []*pbMsg.MsgDataToMQ) { + for _, v := range storage { + sendMessageToPush(v, msgChannelValue.userID) + } + for _, x := range push { + sendMessageToPush(x, msgChannelValue.userID) + } + + }(noStoragepushMsgList, storageMsgList) } } From 31e0a8a88b57a0e54c1675deb804a5c6cd6e10ac Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 21 May 2022 15:04:42 +0800 Subject: [PATCH 100/752] log change --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 8568f32b4..67e299dcc 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -105,7 +105,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) if isHistory { storageMsgList = append(storageMsgList, v) - log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) + //log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) } else { if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { noStoragepushMsgList = append(noStoragepushMsgList, v) From b864f9c6a9c4c7bad2610661a38c5de62117a0b6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 21 May 2022 19:17:31 +0800 Subject: [PATCH 101/752] message --- internal/msg_transfer/logic/init.go | 4 ++-- internal/rpc/msg/send_msg.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index d36a3d8d5..53fcea474 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -15,7 +15,7 @@ const OnlineTopicVacancy = 0 const Msg = 2 const ConsumerMsgs = 3 const UserMessages = 4 -const ChannelNum = 11 +const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler @@ -52,7 +52,7 @@ func Run() { fmt.Println("not start mysql consumer") } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) - go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) + //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) } func SetOnlineTopicStatus(status int) { w.Lock() diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 587f56998..7e4ab3953 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -377,7 +377,7 @@ func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status str } return err case constant.OfflineStatus: - pid, offset, err := rpc.offlineProducer.SendMessage(m, key) + pid, offset, err := rpc.onlineProducer.SendMessage(m, key) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } From 821ad4de2ec3d6665c65232808552f8b9762645d Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 15:09:21 +0800 Subject: [PATCH 102/752] log --- internal/rpc/msg/send_msg.go | 5 ++++- pkg/common/db/mongoModel.go | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 587f56998..a31c03611 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -142,7 +142,8 @@ func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { } func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.SendMsgResp, error) { replay := pbChat.SendMsgResp{} - log.NewDebug(pb.OperationID, "rpc sendMsg come here", pb.String()) + newTime := db.GetCurrentTimestampByMill() + log.NewWarn(pb.OperationID, "rpc sendMsg come here", pb.String(), pb.MsgData.ClientMsgID) flag, errCode, errMsg := userRelationshipVerification(pb) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) @@ -360,6 +361,8 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) } } + + log.NewWarn(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) default: return returnMsg(&replay, pb, 203, "unkonwn sessionType", "", 0) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 96206c6f2..80e9d3400 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -884,6 +884,9 @@ func generateWorkMomentCommentID(workMomentID string) string { func getCurrentTimestampByMill() int64 { return time.Now().UnixNano() / 1e6 } +func GetCurrentTimestampByMill() int64 { + return time.Now().UnixNano() / 1e6 +} func getSeqUid(uid string, seq uint32) string { seqSuffix := seq / singleGocMsgNum From 9f295d8399165e76cf0baa68aaeb4f5f23a2f42a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 15:15:55 +0800 Subject: [PATCH 103/752] log --- internal/rpc/msg/send_msg.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 7e0a2227a..4367a6eb7 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -342,6 +342,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } }() } + log.NewWarn(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) } From 2fc6b0a8cb34bbbe60667c775d81393915776c55 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 15:57:02 +0800 Subject: [PATCH 104/752] log --- internal/rpc/msg/send_msg.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 4367a6eb7..2df926486 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -266,6 +266,9 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S m[constant.OnlineStatus] = memberUserIDList } + log.NewWarn(pb.OperationID, "send msg cost time1 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) + newTime = db.GetCurrentTimestampByMill() + //split parallel send var wg sync.WaitGroup var sendTag bool @@ -284,6 +287,8 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S wg.Add(1) go rpc.sendMsgToGroup(addUidList, *pb, constant.OnlineStatus, &sendTag, &wg) wg.Wait() + log.NewWarn(pb.OperationID, "send msg cost time2 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) + newTime = db.GetCurrentTimestampByMill() // callback if err := callbackAfterSendGroupMsg(pb); err != nil { log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendGroupMsg failed", err.Error()) @@ -342,7 +347,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } }() } - log.NewWarn(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) + log.NewWarn(pb.OperationID, "send msg cost time3 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) } From d276be9594e5af47f6b888c9407a02638e3f3636 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 18:28:51 +0800 Subject: [PATCH 105/752] Reduce memory copies --- internal/rpc/msg/send_msg.go | 67 ++++++++++++++++++++++++++++++++++-- pkg/utils/map.go | 1 + 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 2df926486..cbb301956 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -277,11 +277,15 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S remain := len(v) % split for i := 0; i < len(v)/split; i++ { wg.Add(1) - go rpc.sendMsgToGroup(v[i*split:(i+1)*split], *pb, k, &sendTag, &wg) + tmp := valueCopy(pb) + // go rpc.sendMsgToGroup(v[i*split:(i+1)*split], *pb, k, &sendTag, &wg) + go rpc.sendMsgToGroupOptimization(v[i*split:(i+1)*split], tmp, k, &sendTag, &wg) } if remain > 0 { wg.Add(1) - go rpc.sendMsgToGroup(v[split*(len(v)/split):], *pb, k, &sendTag, &wg) + tmp := valueCopy(pb) + // go rpc.sendMsgToGroup(v[split*(len(v)/split):], *pb, k, &sendTag, &wg) + go rpc.sendMsgToGroupOptimization(v[split*(len(v)/split):], tmp, k, &sendTag, &wg) } } wg.Add(1) @@ -431,6 +435,29 @@ func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType i return true } +func modifyMessageByUserMessageReceiveOptoptimization(userID, sourceID string, sessionType int, operationID string, options *map[string]bool) bool { + conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) + opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) + if err != nil && err != redis.ErrNil { + log.NewError(operationID, "GetSingleConversationMsgOpt from redis err", userID, conversationID, err.Error()) + return true + } + + switch opt { + case constant.ReceiveMessage: + return true + case constant.NotReceiveMessage: + return false + case constant.ReceiveNotNotifyMessage: + if *options == nil { + *options = make(map[string]bool, 10) + } + utils.SetSwitchFromOptions(*options, constant.IsOfflinePush, false) + return true + } + return true +} + type NotificationMsg struct { SendID string RecvID string @@ -748,6 +775,23 @@ func getOnlineAndOfflineUserIDList(memberList []string, m map[string][]string, o m[constant.OfflineStatus] = offlUserIDList } +func valueCopy(pb *pbChat.SendMsgReq) *pbChat.SendMsgReq { + offlinePushInfo := sdk_ws.OfflinePushInfo{} + if pb.MsgData.OfflinePushInfo != nil { + offlinePushInfo = *pb.MsgData.OfflinePushInfo + } + msgData := sdk_ws.MsgData{} + msgData = *pb.MsgData + msgData.OfflinePushInfo = &offlinePushInfo + + options := make(map[string]bool, 10) + for key, value := range pb.MsgData.Options { + options[key] = value + } + msgData.Options = options + return &pbChat.SendMsgReq{Token: "", OperationID: pb.OperationID, MsgData: &msgData} +} + func (rpc *rpcChat) sendMsgToGroup(list []string, pb pbChat.SendMsgReq, status string, sendTag *bool, wg *sync.WaitGroup) { // log.Debug(pb.OperationID, "split userID ", list) offlinePushInfo := sdk_ws.OfflinePushInfo{} @@ -783,3 +827,22 @@ func (rpc *rpcChat) sendMsgToGroup(list []string, pb pbChat.SendMsgReq, status s } wg.Done() } + +func (rpc *rpcChat) sendMsgToGroupOptimization(list []string, groupPB *pbChat.SendMsgReq, status string, sendTag *bool, wg *sync.WaitGroup) { + msgToMQGroup := pbChat.MsgDataToMQ{Token: groupPB.Token, OperationID: groupPB.OperationID, MsgData: groupPB.MsgData} + for _, v := range list { + groupPB.MsgData.RecvID = v + isSend := modifyMessageByUserMessageReceiveOpt(v, groupPB.MsgData.GroupID, constant.GroupChatType, groupPB) + if isSend { + err := rpc.sendMsgToKafka(&msgToMQGroup, v, status) + if err != nil { + log.NewError(msgToMQGroup.OperationID, "kafka send msg err:UserId", v, msgToMQGroup.String()) + } else { + *sendTag = true + } + } else { + log.Debug(groupPB.OperationID, "not sendMsgToKafka, ", v) + } + } + wg.Done() +} diff --git a/pkg/utils/map.go b/pkg/utils/map.go index 66ca27471..7a5fb2d6b 100644 --- a/pkg/utils/map.go +++ b/pkg/utils/map.go @@ -124,6 +124,7 @@ func GetSwitchFromOptions(Options map[string]bool, key string) (result bool) { } return false } + func SetSwitchFromOptions(options map[string]bool, key string, value bool) { if options == nil { options = make(map[string]bool, 5) From 883e7f96ee0435232e00ee9cc90d90ef119ddd53 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 18:42:08 +0800 Subject: [PATCH 106/752] log --- internal/rpc/msg/send_msg.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index cbb301956..77d6bf5b5 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -288,6 +288,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S go rpc.sendMsgToGroupOptimization(v[split*(len(v)/split):], tmp, k, &sendTag, &wg) } } + log.NewWarn(pb.OperationID, "send msg cost time22 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID, "uidList : ", len(addUidList)) wg.Add(1) go rpc.sendMsgToGroup(addUidList, *pb, constant.OnlineStatus, &sendTag, &wg) wg.Wait() From 04a9788bc0712e953da5a497933f52dd12a10b23 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 18:47:16 +0800 Subject: [PATCH 107/752] log --- internal/rpc/msg/send_msg.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 77d6bf5b5..09509f3f7 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -272,7 +272,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S //split parallel send var wg sync.WaitGroup var sendTag bool - var split = 50 + var split = 20 for k, v := range m { remain := len(v) % split for i := 0; i < len(v)/split; i++ { From 8c119a76d1943f2ea6f60915d7c716ef2403fac7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 21:08:57 +0800 Subject: [PATCH 108/752] sess == nil --- .../msg_transfer/logic/online_history_msg_handler.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 67e299dcc..040096529 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -397,9 +397,15 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group - if sess == nil { - time.Sleep(100 * time.Millisecond) + for { + if sess == nil { + log.NewWarn("", " sess == nil, waiting ") + time.Sleep(100 * time.Millisecond) + } else { + break + } } + log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) From b09e2c11eb54e69c14dd31319d1a4a7497945158 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 21:10:18 +0800 Subject: [PATCH 109/752] sess == nil --- internal/msg_transfer/logic/online_history_msg_handler.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 040096529..7039b3079 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -419,7 +419,6 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) for _, v := range cMsg { ccMsg = append(ccMsg, v) - } triggerID = utils.OperationIDGenerator() log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) From 5c0b06f27d6cf9bd61c21c8ac08c244cc7f0208b Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 21:27:29 +0800 Subject: [PATCH 110/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 7039b3079..12b02b50b 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -397,6 +397,7 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group + for { if sess == nil { log.NewWarn("", " sess == nil, waiting ") @@ -414,6 +415,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS //och.TriggerCmd(OnlineTopicBusy) select { case msg := <-claim.Messages(): + log.NewDebug("", "claim.Messages ", msg, *msg) cMsg = append(cMsg, msg) if len(cMsg) >= 1000 { ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) From 64d83d90487499836c378f2057611ecbafae2dc6 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 21:31:10 +0800 Subject: [PATCH 111/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 12b02b50b..e41c61611 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -415,7 +415,11 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS //och.TriggerCmd(OnlineTopicBusy) select { case msg := <-claim.Messages(): - log.NewDebug("", "claim.Messages ", msg, *msg) + if msg == nil { + log.NewDebug("", "claim.Messages ", msg) + continue + } + cMsg = append(cMsg, msg) if len(cMsg) >= 1000 { ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) From 24073b20ab6a055b4847fb0749aeb57cf93ff9db Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 21:37:38 +0800 Subject: [PATCH 112/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index e41c61611..12b02b50b 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -415,11 +415,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS //och.TriggerCmd(OnlineTopicBusy) select { case msg := <-claim.Messages(): - if msg == nil { - log.NewDebug("", "claim.Messages ", msg) - continue - } - + log.NewDebug("", "claim.Messages ", msg, *msg) cMsg = append(cMsg, msg) if len(cMsg) >= 1000 { ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) From bef0e40db8756bcff497f855e7e93db200aac7f3 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 22 May 2022 21:48:01 +0800 Subject: [PATCH 113/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 12b02b50b..8fee2a69f 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -415,7 +415,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS //och.TriggerCmd(OnlineTopicBusy) select { case msg := <-claim.Messages(): - log.NewDebug("", "claim.Messages ", msg, *msg) + log.NewDebug("", "claim.Messages ", msg) cMsg = append(cMsg, msg) if len(cMsg) >= 1000 { ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) From cb497fe7204efba98ca6f033413e7b94a7c653f4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 00:55:56 +0800 Subject: [PATCH 114/752] k8s_deployment --- deploy_k8s/admin_cms/deployment.yaml | 12 ++--- deploy_k8s/api/deployment.yaml | 2 +- deploy_k8s/auth/deployment.yaml | 30 ++++++++++++ deploy_k8s/cache/deployment.yaml | 30 ++++++++++++ deploy_k8s/cms_api/deployment.yaml | 43 +++++++++++++++++ deploy_k8s/conversation/deployment.yaml | 31 +++++++++++++ deploy_k8s/demo/deployment.yaml | 43 +++++++++++++++++ deploy_k8s/friend/deployment.yaml | 31 +++++++++++++ deploy_k8s/group/deployment.yaml | 30 ++++++++++++ deploy_k8s/ingress.yaml | 41 +++++++++++++++-- deploy_k8s/k8s_deploy.md | 10 ---- deploy_k8s/k8s_openim_deploy.md | 27 +++++++++++ .../{kubctl_start.sh => kubectl_start_all.sh} | 5 ++ deploy_k8s/kubectl_stop_all.sh | 36 +++++++++++++++ deploy_k8s/message_cms/deployment.yaml | 30 ++++++++++++ deploy_k8s/msg/deployment.yaml | 30 ++++++++++++ deploy_k8s/msg_gateway/deployment.yaml | 46 +++++++++++++++++++ deploy_k8s/office/deployment.yaml | 30 ++++++++++++ deploy_k8s/organization/deployment.yaml | 30 ++++++++++++ deploy_k8s/push/deployment.yaml | 30 ++++++++++++ deploy_k8s/sdk_server/deployment.yaml | 45 ++++++++++++++++++ deploy_k8s/statistics/deployment.yaml | 30 ++++++++++++ deploy_k8s/transfer/deployment.yaml | 28 +++++++++++ deploy_k8s/user/deployment.yaml | 28 +++++++++++ 24 files changed, 677 insertions(+), 21 deletions(-) create mode 100644 deploy_k8s/auth/deployment.yaml create mode 100644 deploy_k8s/cache/deployment.yaml create mode 100644 deploy_k8s/cms_api/deployment.yaml create mode 100644 deploy_k8s/conversation/deployment.yaml create mode 100644 deploy_k8s/demo/deployment.yaml create mode 100644 deploy_k8s/friend/deployment.yaml create mode 100644 deploy_k8s/group/deployment.yaml delete mode 100644 deploy_k8s/k8s_deploy.md create mode 100644 deploy_k8s/k8s_openim_deploy.md rename deploy_k8s/{kubctl_start.sh => kubectl_start_all.sh} (74%) create mode 100644 deploy_k8s/kubectl_stop_all.sh create mode 100644 deploy_k8s/message_cms/deployment.yaml create mode 100644 deploy_k8s/msg/deployment.yaml create mode 100644 deploy_k8s/msg_gateway/deployment.yaml create mode 100644 deploy_k8s/office/deployment.yaml create mode 100644 deploy_k8s/organization/deployment.yaml create mode 100644 deploy_k8s/push/deployment.yaml create mode 100644 deploy_k8s/sdk_server/deployment.yaml create mode 100644 deploy_k8s/statistics/deployment.yaml create mode 100644 deploy_k8s/transfer/deployment.yaml create mode 100644 deploy_k8s/user/deployment.yaml diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml index c37061e64..437b1ffc5 100644 --- a/deploy_k8s/admin_cms/deployment.yaml +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -2,22 +2,22 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: api-deployment + name: admin-cms-deployment spec: selector: matchLabels: - app: admin_cms # 选择这个指定标签执行 + app: admin-cms # 选择这个指定标签执行 replicas: 2 # 运行pod数量 template: metadata: labels: - app: api # 标签 + app: admin-cms # 标签 spec: containers: - - name: api - image: openim/api:v2.0.10 + - name: admin-cms + image: openim/admin_cms:v2.0.10 ports: - - containerPort: 10002 + - containerPort: 10200 volumeMounts: - name: config mountPath: /Open-IM-Server/config diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index c8c8a177c..870423066 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -35,7 +35,7 @@ metadata: name: api spec: ports: - - name: api + - name: api-port protocol: TCP port: 10002 targetPort: 10002 diff --git a/deploy_k8s/auth/deployment.yaml b/deploy_k8s/auth/deployment.yaml new file mode 100644 index 000000000..89428d08c --- /dev/null +++ b/deploy_k8s/auth/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: auth-deployment +spec: + selector: + matchLabels: + app: auth # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: auth # 标签 + spec: + containers: + - name: auth + image: openim/auth:v2.0.10 + ports: + - containerPort: 10160 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/cache/deployment.yaml b/deploy_k8s/cache/deployment.yaml new file mode 100644 index 000000000..f957a8ef5 --- /dev/null +++ b/deploy_k8s/cache/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cache-deployment +spec: + selector: + matchLabels: + app: cache # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: cache # 标签 + spec: + containers: + - name: cache + image: openim/cache:v2.0.10 + ports: + - containerPort: 10240 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/cms_api/deployment.yaml b/deploy_k8s/cms_api/deployment.yaml new file mode 100644 index 000000000..cdaa78fd9 --- /dev/null +++ b/deploy_k8s/cms_api/deployment.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cms-api-deployment +spec: + selector: + matchLabels: + app: cms-api # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: cms-api # 标签 + spec: + containers: + - name: cms-api + image: openim/cms_api:v2.0.10 + ports: + - containerPort: 10006 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 +--- +apiVersion: v1 +kind: Service +metadata: + name: cms-api +spec: + ports: + - name: cms-api-port + protocol: TCP + port: 10006 + targetPort: 10006 + selector: + app: cms_api \ No newline at end of file diff --git a/deploy_k8s/conversation/deployment.yaml b/deploy_k8s/conversation/deployment.yaml new file mode 100644 index 000000000..1e14e794a --- /dev/null +++ b/deploy_k8s/conversation/deployment.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: conversation-deployment +spec: + selector: + matchLabels: + app: conversation # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: conversation # 标签 + spec: + containers: + - name: conversation + image: openim/conversation:v2.0.10 + ports: + - containerPort: 10230 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 + diff --git a/deploy_k8s/demo/deployment.yaml b/deploy_k8s/demo/deployment.yaml new file mode 100644 index 000000000..edaaf1d03 --- /dev/null +++ b/deploy_k8s/demo/deployment.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: demo-deployment +spec: + selector: + matchLabels: + app: demo # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: demo # 标签 + spec: + containers: + - name: demo + image: openim/demo:v2.0.10 + ports: + - containerPort: 10004 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 +--- +apiVersion: v1 +kind: Service +metadata: + name: demo +spec: + ports: + - name: demo + protocol: TCP + port: 10004 + targetPort: 10004 + selector: + app: demo \ No newline at end of file diff --git a/deploy_k8s/friend/deployment.yaml b/deploy_k8s/friend/deployment.yaml new file mode 100644 index 000000000..79070b768 --- /dev/null +++ b/deploy_k8s/friend/deployment.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: friend-deployment +spec: + selector: + matchLabels: + app: friend # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: friend # 标签 + spec: + containers: + - name: friend + image: openim/friend:v2.0.10 + ports: + - containerPort: 10120 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 + diff --git a/deploy_k8s/group/deployment.yaml b/deploy_k8s/group/deployment.yaml new file mode 100644 index 000000000..47acea4a8 --- /dev/null +++ b/deploy_k8s/group/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: group-deployment +spec: + selector: + matchLabels: + app: group # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: group # 标签 + spec: + containers: + - name: group + image: openim/group:v2.0.10 + ports: + - containerPort: 10150 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 271cc8e10..47c6268f4 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -2,7 +2,6 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - # 配置注解 支持websocket annotations: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" @@ -17,7 +16,7 @@ spec: service: name: sdk-server port: - number: 30000 + number: 10003 path: / pathType: Prefix --- @@ -38,7 +37,7 @@ spec: service: name: msg-gateway port: - number: 17778 + number: 10001 path: / pathType: Prefix --- @@ -55,7 +54,7 @@ spec: service: name: api port: - number: 10000 + number: 10002 path: / pathType: Prefix --- @@ -75,3 +74,37 @@ spec: number: 42233 path: / pathType: Prefix +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo.openim.xxx.com +spec: + rules: + - host: demo.openim.xxx.com + http: + paths: + - backend: + service: + name: demo + port: + number: 10004 + path: / + pathType: Prefix +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: cms-api.openim.xxx.com +spec: + rules: + - host: cms-api.openim.xxx.com + http: + paths: + - backend: + service: + name: cms-api + port: + number: 10006 + path: / + pathType: Prefix diff --git a/deploy_k8s/k8s_deploy.md b/deploy_k8s/k8s_deploy.md deleted file mode 100644 index d91019f80..000000000 --- a/deploy_k8s/k8s_deploy.md +++ /dev/null @@ -1,10 +0,0 @@ -#### im k8s部署文档 -### 1.修改配置文件 -在Open-IM-SERVER目录下修改config/config.yaml配置文件 - -### 2. 项目根目录创建im configMap到k8s -kubectl -n {namespace} create configmap config --from-file=config/config.yaml -namespace 为im项目的namespace - -### 3. - diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md new file mode 100644 index 000000000..b96497f93 --- /dev/null +++ b/deploy_k8s/k8s_openim_deploy.md @@ -0,0 +1,27 @@ +#### openIM k8s部署文档 +### 1. 修改配置文件 +在Open-IM-SERVER目录下修改config/config.yaml配置文件, 将MySQL, Kafka, MongoDB等配置修改。 + +### 2. 项目根目录创建im configMap到k8s openim namespace +kubectl create namespace openim +kubectl -n openim create configmap config --from-file=config/config.yaml +openim 为im项目的namespace, 可选 + +### 3(可选). 修改每个deployment.yml +kubectl get nodes +kubectl label node k8s-node1 role=kube-Node +应需要调度的node打上标签 +nodeSelector: + node: kube-Node +创建资源清单时添加上nodeSelector属性对应即可 +修改每种服务数量,建议至少每种2个rpc。 + +### 4. 修改ingress.yaml配置文件 + +### 5. 执行./kubectl_start.sh脚本 +kubectl 启动所有deployment,services,ingress + +### 6. 查看k8s deployment service ingress状态 +kubectl -n openim get services +kubectl -n openim get deployment +kubectl -n openim get ingress diff --git a/deploy_k8s/kubctl_start.sh b/deploy_k8s/kubectl_start_all.sh similarity index 74% rename from deploy_k8s/kubctl_start.sh rename to deploy_k8s/kubectl_start_all.sh index f1db196f3..afc56aeaa 100644 --- a/deploy_k8s/kubctl_start.sh +++ b/deploy_k8s/kubectl_start_all.sh @@ -22,3 +22,8 @@ service=( demo ) +for i in ${service[*]} +do + kubectl -n openim apply -f ./${i}/deployment.yaml +done + diff --git a/deploy_k8s/kubectl_stop_all.sh b/deploy_k8s/kubectl_stop_all.sh new file mode 100644 index 000000000..d672a53c2 --- /dev/null +++ b/deploy_k8s/kubectl_stop_all.sh @@ -0,0 +1,36 @@ +service=( + #api service file + api + cms-api + #rpc service file + user + friend + group + auth + admin-cms + message-cms + statistics + office + organization + conversation + cache + msg-gateway + transfer + msg + push + sdk-server + demo +) + +for i in ${service[*]} +do + kubectl -n openim delete deployment "${i}-deployment" +done + +kubectl -n openim delete service api +kubectl -n openim delete service cms-api +kubectl -n openim delete service sdk-server +kubectl -n openim delete service msg-gateway +kubectl -n openim delete service demo + +echo done \ No newline at end of file diff --git a/deploy_k8s/message_cms/deployment.yaml b/deploy_k8s/message_cms/deployment.yaml new file mode 100644 index 000000000..3792e4da4 --- /dev/null +++ b/deploy_k8s/message_cms/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: message-cms-deployment +spec: + selector: + matchLabels: + app: message-cms # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: message-cms # 标签 + spec: + containers: + - name: message-cms + image: openim/message_cms:v2.0.10 + ports: + - containerPort: 10190 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/msg/deployment.yaml b/deploy_k8s/msg/deployment.yaml new file mode 100644 index 000000000..4ab52e999 --- /dev/null +++ b/deploy_k8s/msg/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: msg-deployment +spec: + selector: + matchLabels: + app: msg # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: msg # 标签 + spec: + containers: + - name: msg + image: openim/msg:v2.0.10 + ports: + - containerPort: 10130 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml new file mode 100644 index 000000000..85f51721b --- /dev/null +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -0,0 +1,46 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: msg-gateway-deployment +spec: + selector: + matchLabels: + app: msg-gateway # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: msg-gateway # 标签 + spec: + containers: + - name: msg-gateway + image: openim/msg_gateway:v2.0.10 + ports: + - containerPort: 10140 + - containerPort: 10001 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 +--- +apiVersion: v1 +kind: Service +metadata: + name: msg-gateway +spec: + ports: + - name: msg-gateway-port + protocol: TCP + port: 10001 + targetPort: 10001 + selector: + app: demo + + \ No newline at end of file diff --git a/deploy_k8s/office/deployment.yaml b/deploy_k8s/office/deployment.yaml new file mode 100644 index 000000000..5fec3450a --- /dev/null +++ b/deploy_k8s/office/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: office-deployment +spec: + selector: + matchLabels: + app: office # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: office # 标签 + spec: + containers: + - name: office + image: openim/office:v2.0.10 + ports: + - containerPort: 10210 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/organization/deployment.yaml b/deploy_k8s/organization/deployment.yaml new file mode 100644 index 000000000..7d5318c64 --- /dev/null +++ b/deploy_k8s/organization/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: organization-deployment +spec: + selector: + matchLabels: + app: organization # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: organization # 标签 + spec: + containers: + - name: organization + image: openim/organization:v2.0.10 + ports: + - containerPort: 10220 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/push/deployment.yaml b/deploy_k8s/push/deployment.yaml new file mode 100644 index 000000000..61c9929fc --- /dev/null +++ b/deploy_k8s/push/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: push-deployment +spec: + selector: + matchLabels: + app: push # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: push # 标签 + spec: + containers: + - name: push + image: openim/push:v2.0.10 + ports: + - containerPort: 10170 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml new file mode 100644 index 000000000..7ea15856f --- /dev/null +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -0,0 +1,45 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: sdk-server-deployment +spec: + selector: + matchLabels: + app: sdk-server # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: sdk-server # 标签 + spec: + containers: + - name: sdk-server + image: openim/sdk_server:v2.0.10 + ports: + - containerPort: 10003 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 +--- +apiVersion: v1 +kind: Service +metadata: + name: sdk-server +spec: + ports: + - name: sdk-server-port + protocol: TCP + port: 10003 + targetPort: 10003 + selector: + app: demo + + \ No newline at end of file diff --git a/deploy_k8s/statistics/deployment.yaml b/deploy_k8s/statistics/deployment.yaml new file mode 100644 index 000000000..a517caf7d --- /dev/null +++ b/deploy_k8s/statistics/deployment.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: statistics-deployment +spec: + selector: + matchLabels: + app: statistics # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: statistics # 标签 + spec: + containers: + - name: statistics + image: openim/statistics:v2.0.10 + ports: + - containerPort: 10180 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/transfer/deployment.yaml b/deploy_k8s/transfer/deployment.yaml new file mode 100644 index 000000000..c65d4d65f --- /dev/null +++ b/deploy_k8s/transfer/deployment.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: transfer-deployment +spec: + selector: + matchLabels: + app: transfer # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: transfer # 标签 + spec: + containers: + - name: transfer + image: openim/transfer:v2.0.10 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/user/deployment.yaml b/deploy_k8s/user/deployment.yaml new file mode 100644 index 000000000..8ad91a526 --- /dev/null +++ b/deploy_k8s/user/deployment.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: user-deployment +spec: + selector: + matchLabels: + app: user # 选择这个指定标签执行 + replicas: 2 # 运行pod数量 + template: + metadata: + labels: + app: user # 标签 + spec: + containers: + - name: user + image: openim/user:v2.0.10 + volumeMounts: + - name: config + mountPath: /Open-IM-Server/config + readOnly: true + volumes: + - name: config + configMap: + name: config + strategy: #更新策略 + type: RollingUpdate # 滚动更新 From f5c7197dda3df9faa3bd7160a60629c881d10b79 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 23 May 2022 08:42:50 +0800 Subject: [PATCH 115/752] log --- internal/rpc/msg/send_msg.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 09509f3f7..f7bb18db3 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -266,7 +266,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S m[constant.OnlineStatus] = memberUserIDList } - log.NewWarn(pb.OperationID, "send msg cost time1 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) + log.Debug(pb.OperationID, "send msg cost time1 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() //split parallel send @@ -288,11 +288,11 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S go rpc.sendMsgToGroupOptimization(v[split*(len(v)/split):], tmp, k, &sendTag, &wg) } } - log.NewWarn(pb.OperationID, "send msg cost time22 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID, "uidList : ", len(addUidList)) + log.Debug(pb.OperationID, "send msg cost time22 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID, "uidList : ", len(addUidList)) wg.Add(1) go rpc.sendMsgToGroup(addUidList, *pb, constant.OnlineStatus, &sendTag, &wg) wg.Wait() - log.NewWarn(pb.OperationID, "send msg cost time2 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) + log.Debug(pb.OperationID, "send msg cost time2 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() // callback if err := callbackAfterSendGroupMsg(pb); err != nil { @@ -352,7 +352,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } }() } - log.NewWarn(pb.OperationID, "send msg cost time3 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) + log.Debug(pb.OperationID, "send msg cost time3 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) } @@ -373,7 +373,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } } - log.NewWarn(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) + log.Debug(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) default: return returnMsg(&replay, pb, 203, "unkonwn sessionType", "", 0) From 1f20024b91fd0d5181923d81dc38e5867958f827 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 23 May 2022 08:44:20 +0800 Subject: [PATCH 116/752] log --- internal/rpc/msg/send_msg.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index f7bb18db3..b52e02aba 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -376,7 +376,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.Debug(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) default: - return returnMsg(&replay, pb, 203, "unkonwn sessionType", "", 0) + return returnMsg(&replay, pb, 203, "unknown sessionType", "", 0) } } From f0dadcef7039e16ffa08fded19ad2c08cfc01352 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 09:41:34 +0800 Subject: [PATCH 117/752] message handle --- .../logic/online_history_msg_handler.go | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 8fee2a69f..9ea433faa 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -416,19 +416,21 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS select { case msg := <-claim.Messages(): log.NewDebug("", "claim.Messages ", msg) - cMsg = append(cMsg, msg) - if len(cMsg) >= 1000 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) + if msg != nil { + cMsg = append(cMsg, msg) + if len(cMsg) >= 1000 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) + } + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg}} + sess.MarkMessage(msg, "") + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(msg, "") - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } case <-t.C: if len(cMsg) > 0 { From 767131a117fe1d83577a51ffcbac93a12aa4f0b5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 09:54:43 +0800 Subject: [PATCH 118/752] message handle --- internal/rpc/msg/send_msg.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index b52e02aba..4fc66bbaf 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -790,7 +790,7 @@ func valueCopy(pb *pbChat.SendMsgReq) *pbChat.SendMsgReq { options[key] = value } msgData.Options = options - return &pbChat.SendMsgReq{Token: "", OperationID: pb.OperationID, MsgData: &msgData} + return &pbChat.SendMsgReq{Token: pb.Token, OperationID: pb.OperationID, MsgData: &msgData} } func (rpc *rpcChat) sendMsgToGroup(list []string, pb pbChat.SendMsgReq, status string, sendTag *bool, wg *sync.WaitGroup) { From d1cb176b312fac161a58492ff88ba6bb1856986e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 10:14:10 +0800 Subject: [PATCH 119/752] del msg sync --- internal/rpc/msg/del_msg.go | 17 +++++++++++------ internal/rpc/msg/rpcChat.go | 22 ++++++++++++++++++++++ pkg/common/constant/error.go | 2 +- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/internal/rpc/msg/del_msg.go b/internal/rpc/msg/del_msg.go index 17610a384..c6856bb98 100644 --- a/internal/rpc/msg/del_msg.go +++ b/internal/rpc/msg/del_msg.go @@ -2,23 +2,28 @@ package msg import ( "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "time" ) func (rpc *rpcChat) DelMsgList(_ context.Context, req *commonPb.DelMsgListReq) (*commonPb.DelMsgListResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) resp := &commonPb.DelMsgListResp{} - if err := db.DB.DelMsgBySeqList(req.UserID, req.SeqList, req.OperationID); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsg failed", err.Error()) - resp.ErrMsg = constant.ErrDB.ErrMsg - resp.ErrCode = constant.ErrDB.ErrCode + select { + case rpc.delMsgCh <- deleteMsg{ + UserID: req.UserID, + OpUserID: req.OpUserID, + SeqList: req.SeqList, + OperationID: req.OperationID, + }: + case <-time.After(1 * time.Second): + resp.ErrCode = constant.ErrSendLimit.ErrCode + resp.ErrMsg = constant.ErrSendLimit.ErrMsg return resp, nil } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index 002918bae..fd8b5ccf5 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -3,6 +3,7 @@ package msg import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" "Open_IM/pkg/common/kafka" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" @@ -21,6 +22,14 @@ type rpcChat struct { etcdAddr []string onlineProducer *kafka.Producer offlineProducer *kafka.Producer + delMsgCh chan deleteMsg +} + +type deleteMsg struct { + UserID string + OpUserID string + SeqList []uint32 + OperationID string } func NewRpcChatServer(port int) *rpcChat { @@ -33,6 +42,7 @@ func NewRpcChatServer(port int) *rpcChat { } rc.onlineProducer = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic) rc.offlineProducer = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.Ws2mschatOffline.Topic) + rc.delMsgCh = make(chan deleteMsg, 1000) return &rc } @@ -75,3 +85,15 @@ func (rpc *rpcChat) Run() { } log.Info("", "rpc rpcChat init success") } + +func (rpc *rpcChat) runCh() { + log.NewInfo("", "start del msg chan ") + for { + select { + case msg := <-rpc.delMsgCh: + if err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID); err != nil { + log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList qrgs: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error()) + } + } + } +} diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index 2537c3706..b0c28725e 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -54,7 +54,7 @@ var ( ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} - ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many users"} + ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} ) var ( From 50bb13b7cdb99a0c830e920613be5448e4d2fc14 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 10:55:33 +0800 Subject: [PATCH 120/752] message handle --- .../logic/online_history_msg_handler.go | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 9ea433faa..8e4e3c2a2 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -416,22 +416,21 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS select { case msg := <-claim.Messages(): log.NewDebug("", "claim.Messages ", msg) - if msg != nil { - cMsg = append(cMsg, msg) - if len(cMsg) >= 1000 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) - } - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(msg, "") - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) + cMsg = append(cMsg, msg) + if len(cMsg) >= 1000 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) } + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg}} + sess.MarkMessage(msg, "") + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } + case <-t.C: if len(cMsg) > 0 { ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) From d196f455cbb466a589027b1945538a793ad07a2a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 11:32:33 +0800 Subject: [PATCH 121/752] k8s deploy --- deploy_k8s/build_push_all_images.sh | 28 +++---------------- deploy_k8s/kubectl_start_all.sh | 24 +--------------- deploy_k8s/kubectl_stop_all.sh | 2 +- .../deployment.yaml | 10 +++---- .../msg_transfer.Dockerfile} | 0 deploy_k8s/path_info.cfg | 24 ++++++++++++++++ 6 files changed, 35 insertions(+), 53 deletions(-) rename deploy_k8s/{transfer => msg_transfer}/deployment.yaml (70%) rename deploy_k8s/{transfer/transfer.Dockerfile => msg_transfer/msg_transfer.Dockerfile} (100%) create mode 100644 deploy_k8s/path_info.cfg diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index 2ad18c382..4d083e241 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -1,29 +1,9 @@ #/bin/sh -service=( - #api service file - api - cms_api - #rpc service file - user - friend - group - auth - admin_cms - message_cms - statistics - office - organization - conversation - cache - msg_gateway - transfer - msg - push - sdk_server - demo -) -# +source ./path_info.cfg + +# images version version=v2.0.10 + cd ../script/; ./build_all_service.sh cd ../deploy_k8s/ diff --git a/deploy_k8s/kubectl_start_all.sh b/deploy_k8s/kubectl_start_all.sh index afc56aeaa..bb1fb0a9c 100644 --- a/deploy_k8s/kubectl_start_all.sh +++ b/deploy_k8s/kubectl_start_all.sh @@ -1,26 +1,4 @@ -service=( - #api service file - api - cms_api - #rpc service file - user - friend - group - auth - admin_cms - message_cms - statistics - office - organization - conversation - cache - msg_gateway - transfer - msg - push - sdk_server - demo -) +source ./path_info.cfg for i in ${service[*]} do diff --git a/deploy_k8s/kubectl_stop_all.sh b/deploy_k8s/kubectl_stop_all.sh index d672a53c2..b20ca24b3 100644 --- a/deploy_k8s/kubectl_stop_all.sh +++ b/deploy_k8s/kubectl_stop_all.sh @@ -15,7 +15,7 @@ service=( conversation cache msg-gateway - transfer + msg-transfer msg push sdk-server diff --git a/deploy_k8s/transfer/deployment.yaml b/deploy_k8s/msg_transfer/deployment.yaml similarity index 70% rename from deploy_k8s/transfer/deployment.yaml rename to deploy_k8s/msg_transfer/deployment.yaml index c65d4d65f..24ff62289 100644 --- a/deploy_k8s/transfer/deployment.yaml +++ b/deploy_k8s/msg_transfer/deployment.yaml @@ -2,20 +2,20 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: transfer-deployment + name: msg-transfer-deployment spec: selector: matchLabels: - app: transfer # 选择这个指定标签执行 + app: msg-transfer # 选择这个指定标签执行 replicas: 2 # 运行pod数量 template: metadata: labels: - app: transfer # 标签 + app: msg-transfer # 标签 spec: containers: - - name: transfer - image: openim/transfer:v2.0.10 + - name: msg-transfer + image: openim/msg_transfer:v2.0.10 volumeMounts: - name: config mountPath: /Open-IM-Server/config diff --git a/deploy_k8s/transfer/transfer.Dockerfile b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile similarity index 100% rename from deploy_k8s/transfer/transfer.Dockerfile rename to deploy_k8s/msg_transfer/msg_transfer.Dockerfile diff --git a/deploy_k8s/path_info.cfg b/deploy_k8s/path_info.cfg new file mode 100644 index 000000000..6839e97bf --- /dev/null +++ b/deploy_k8s/path_info.cfg @@ -0,0 +1,24 @@ +#/bin/sh +service=( + #api service file + api + cms_api + #rpc service file + user + friend + group + auth + admin_cms + message_cms + statistics + office + organization + conversation + cache + msg_gateway + msg_transfer + msg + push + sdk_server + demo +) \ No newline at end of file From 03ae9357567091b093d90830df8f0abbf474ade1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 11:39:59 +0800 Subject: [PATCH 122/752] k8s deploy --- deploy_k8s/k8s_openim_deploy.md | 4 ++++ deploy_k8s/kubectl_start_all.sh | 2 ++ deploy_k8s/kubectl_stop_all.sh | 2 ++ deploy_k8s/msg_transfer/msg_transfer.Dockerfile | 2 +- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index b96497f93..303ce4289 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -6,6 +6,7 @@ kubectl create namespace openim kubectl -n openim create configmap config --from-file=config/config.yaml openim 为im项目的namespace, 可选 +kubectl -n openim get configmap ### 3(可选). 修改每个deployment.yml kubectl get nodes @@ -15,8 +16,10 @@ nodeSelector: node: kube-Node 创建资源清单时添加上nodeSelector属性对应即可 修改每种服务数量,建议至少每种2个rpc。 +如果修改了config/config.yaml某些配置比如端口,同时需要修改对应deployment端口 ### 4. 修改ingress.yaml配置文件 +域名修改等操作 ### 5. 执行./kubectl_start.sh脚本 kubectl 启动所有deployment,services,ingress @@ -25,3 +28,4 @@ kubectl 启动所有deployment,services,ingress kubectl -n openim get services kubectl -n openim get deployment kubectl -n openim get ingress +kubectl -n openim get pods \ No newline at end of file diff --git a/deploy_k8s/kubectl_start_all.sh b/deploy_k8s/kubectl_start_all.sh index bb1fb0a9c..6fc90af7c 100644 --- a/deploy_k8s/kubectl_start_all.sh +++ b/deploy_k8s/kubectl_start_all.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env bash + source ./path_info.cfg for i in ${service[*]} diff --git a/deploy_k8s/kubectl_stop_all.sh b/deploy_k8s/kubectl_stop_all.sh index b20ca24b3..47f87eeb6 100644 --- a/deploy_k8s/kubectl_stop_all.sh +++ b/deploy_k8s/kubectl_stop_all.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env bash + service=( #api service file api diff --git a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile index 2db727066..9ff56c71a 100644 --- a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile +++ b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile @@ -5,7 +5,7 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_transfer $WORKDIR/main +ADD ./open_im_msg_transfer $WORKDIR/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ From e385f054df002ab0f6e9de48216aeac4e9a18997 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 11:57:41 +0800 Subject: [PATCH 123/752] message handle --- internal/msg_transfer/logic/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 53fcea474..f3f1b138e 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -39,7 +39,7 @@ func Init() { historyCH.Init(cmdCh) onlineTopicStatus = OnlineTopicVacancy log.Debug("come msg transfer ts", config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline, config.Config.Kafka.Ws2mschatOffline.Topic) - offlineHistoryCH.Init(cmdCh) + //offlineHistoryCH.Init(cmdCh) statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) producer = kafka.NewKafkaProducer(config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.Ms2pschat.Topic) From 8240cb9c0fd675322ca8d67148c1e0e0ff484c0b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 14:24:46 +0800 Subject: [PATCH 124/752] k8s deploy --- deploy_k8s/cms_api/deployment.yaml | 2 +- deploy_k8s/k8s_openim_deploy.md | 1 + deploy_k8s/msg_gateway/deployment.yaml | 2 +- deploy_k8s/sdk_server/deployment.yaml | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/deploy_k8s/cms_api/deployment.yaml b/deploy_k8s/cms_api/deployment.yaml index cdaa78fd9..7cffa4c2b 100644 --- a/deploy_k8s/cms_api/deployment.yaml +++ b/deploy_k8s/cms_api/deployment.yaml @@ -40,4 +40,4 @@ spec: port: 10006 targetPort: 10006 selector: - app: cms_api \ No newline at end of file + app: cms-api \ No newline at end of file diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 303ce4289..bb385f1d0 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -6,6 +6,7 @@ kubectl create namespace openim kubectl -n openim create configmap config --from-file=config/config.yaml openim 为im项目的namespace, 可选 +查看configmap kubectl -n openim get configmap ### 3(可选). 修改每个deployment.yml diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index 85f51721b..b927717c9 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -41,6 +41,6 @@ spec: port: 10001 targetPort: 10001 selector: - app: demo + app: msg-gateway \ No newline at end of file diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 7ea15856f..0b6254bd4 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -40,6 +40,6 @@ spec: port: 10003 targetPort: 10003 selector: - app: demo + app: sdk-server \ No newline at end of file From 046003328132262952cd9b61b2b70b6b8c230de3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 14:30:54 +0800 Subject: [PATCH 125/752] k8s deploy --- internal/rpc/cache/cache.go | 122 +++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 49 deletions(-) diff --git a/internal/rpc/cache/cache.go b/internal/rpc/cache/cache.go index ab181b908..b8a8b2b5e 100644 --- a/internal/rpc/cache/cache.go +++ b/internal/rpc/cache/cache.go @@ -11,11 +11,11 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "google.golang.org/grpc" "net" "strconv" "strings" - - "google.golang.org/grpc" + "sync" ) type cacheServer struct { @@ -103,27 +103,33 @@ func SyncDB2Cache() error { func DelRelationCache() {} func updateAllUserToCache(userList []db.User) error { + wg := &sync.WaitGroup{} + wg.Add(len(userList)) for _, userInfo := range userList { - userInfoPb := &commonPb.UserInfo{ - UserID: userInfo.UserID, - Nickname: userInfo.Nickname, - FaceURL: userInfo.FaceURL, - Gender: userInfo.Gender, - PhoneNumber: userInfo.PhoneNumber, - Birth: uint32(userInfo.Birth.Unix()), - Email: userInfo.Email, - Ex: userInfo.Ex, - CreateTime: uint32(userInfo.CreateTime.Unix()), - AppMangerLevel: userInfo.AppMangerLevel, - } - m, err := utils.Pb2Map(userInfoPb) - if err != nil { - log.NewWarn("", utils.GetSelfFuncName(), err.Error()) - } - if err := db.DB.SetUserInfoToCache(userInfo.UserID, m); err != nil { - log.NewWarn("0", utils.GetSelfFuncName(), "set userInfo to cache failed", err.Error()) - } + go func() { + defer wg.Done() + userInfoPb := &commonPb.UserInfo{ + UserID: userInfo.UserID, + Nickname: userInfo.Nickname, + FaceURL: userInfo.FaceURL, + Gender: userInfo.Gender, + PhoneNumber: userInfo.PhoneNumber, + Birth: uint32(userInfo.Birth.Unix()), + Email: userInfo.Email, + Ex: userInfo.Ex, + CreateTime: uint32(userInfo.CreateTime.Unix()), + AppMangerLevel: userInfo.AppMangerLevel, + } + m, err := utils.Pb2Map(userInfoPb) + if err != nil { + log.NewWarn("", utils.GetSelfFuncName(), err.Error()) + } + if err := db.DB.SetUserInfoToCache(userInfo.UserID, m); err != nil { + log.NewWarn("0", utils.GetSelfFuncName(), "set userInfo to cache failed", err.Error()) + } + }() } + wg.Wait() log.NewInfo("0", utils.GetSelfFuncName(), "ok") return nil } @@ -135,55 +141,73 @@ func updateAllGroupMemberListToCache() error { log.NewWarn("0", utils.GetSelfFuncName(), "getAllGroupIDList failed", err.Error()) panic(err.Error()) } + wg := &sync.WaitGroup{} + wg.Add(len(groupIDList)) for _, groupID := range groupIDList { - groupMemberIDList, err := imdb.GetGroupMemberIDListByGroupID(groupID) - if err != nil { - log.NewWarn("", utils.GetSelfFuncName(), "GetGroupMemberIDListByGroupID", err.Error()) - continue - } - //log.NewDebug("", utils.GetSelfFuncName(), "groupMemberIDList", groupMemberIDList) - if len(groupMemberIDList) > 0 { - if err := db.DB.AddGroupMemberToCache(groupID, groupMemberIDList...); err != nil { - log.NewWarn("", utils.GetSelfFuncName(), "AddGroupMemberToCache", err.Error()) + go func() { + defer wg.Done() + groupMemberIDList, err := imdb.GetGroupMemberIDListByGroupID(groupID) + if err != nil { + log.NewWarn("", utils.GetSelfFuncName(), "GetGroupMemberIDListByGroupID", err.Error()) + return } - } + //log.NewDebug("", utils.GetSelfFuncName(), "groupMemberIDList", groupMemberIDList) + if len(groupMemberIDList) > 0 { + if err := db.DB.AddGroupMemberToCache(groupID, groupMemberIDList...); err != nil { + log.NewWarn("", utils.GetSelfFuncName(), "AddGroupMemberToCache", err.Error()) + } + } + }() } + wg.Wait() log.NewInfo("0", utils.GetSelfFuncName(), "ok") return nil } func updateAllFriendToCache(userList []db.User) error { log.NewInfo("0", utils.GetSelfFuncName()) + wg := sync.WaitGroup{} + wg.Add(len(userList)) for _, user := range userList { - friendIDList, err := imdb.GetFriendIDListByUserID(user.UserID) - if err != nil { - log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) - continue - } - if len(friendIDList) > 0 { - if err := db.DB.AddFriendToCache(user.UserID, friendIDList...); err != nil { - log.NewWarn("0", utils.GetSelfFuncName(), err.Error(), friendIDList, user.UserID) + go func() { + defer wg.Done() + friendIDList, err := imdb.GetFriendIDListByUserID(user.UserID) + if err != nil { + log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) + return } - } + if len(friendIDList) > 0 { + if err := db.DB.AddFriendToCache(user.UserID, friendIDList...); err != nil { + log.NewWarn("0", utils.GetSelfFuncName(), err.Error(), friendIDList, user.UserID) + } + } + }() } + wg.Wait() log.NewInfo("0", utils.GetSelfFuncName(), "ok") return nil } func updateAllBlackListToCache(userList []db.User) error { log.NewInfo("0", utils.GetSelfFuncName()) + wg := &sync.WaitGroup{} + wg.Add(len(userList)) for _, user := range userList { - blackIDList, err := imdb.GetBlackIDListByUserID(user.UserID) - if err != nil { - log.NewWarn("", utils.GetSelfFuncName(), err.Error()) - continue - } - if len(blackIDList) > 0 { - if err := db.DB.AddBlackUserToCache(user.UserID, blackIDList...); err != nil { - log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) + go func() { + defer wg.Done() + blackIDList, err := imdb.GetBlackIDListByUserID(user.UserID) + if err != nil { + log.NewWarn("", utils.GetSelfFuncName(), err.Error()) + return } - } + if len(blackIDList) > 0 { + if err := db.DB.AddBlackUserToCache(user.UserID, blackIDList...); err != nil { + log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) + } + } + }() } + wg.Wait() log.NewInfo("0", utils.GetSelfFuncName(), "ok") return nil } From 48940272aee84b02de9d78b98a4f728a3cd3a213 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 15:49:55 +0800 Subject: [PATCH 126/752] k8s deploy --- deploy_k8s/k8s_openim_deploy.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index bb385f1d0..de92379b1 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -23,6 +23,8 @@ nodeSelector: 域名修改等操作 ### 5. 执行./kubectl_start.sh脚本 +chmod +x ./kubectl_start.sh +./kubectl_start.sh kubectl 启动所有deployment,services,ingress ### 6. 查看k8s deployment service ingress状态 From ce15c26b59405203a8c4070dd8eae387af31700d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 16:07:52 +0800 Subject: [PATCH 127/752] k8s deploy --- deploy_k8s/k8s_openim_deploy.md | 2 +- internal/rpc/msg/rpcChat.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index de92379b1..1897b9a47 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -23,7 +23,7 @@ nodeSelector: 域名修改等操作 ### 5. 执行./kubectl_start.sh脚本 -chmod +x ./kubectl_start.sh +chmod +x ./kubectl_start.sh ./kubectl_stop.sh ./kubectl_start.sh kubectl 启动所有deployment,services,ingress diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index fd8b5ccf5..00dc51161 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -77,7 +77,7 @@ func (rpc *rpcChat) Run() { log.Error("", "register rpcChat to etcd failed ", err.Error()) return } - + go rpc.runCh() err = srv.Serve(listener) if err != nil { log.Error("", "rpc rpcChat failed ", err.Error()) From e3a8d12d4b50b47af779b6ae903e6da1840d64cf Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 17:19:53 +0800 Subject: [PATCH 128/752] k8s deploy --- deploy_k8s/sdk_server/deployment.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 0b6254bd4..2c94f177d 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -22,10 +22,18 @@ spec: - name: config mountPath: /Open-IM-Server/config readOnly: true + - name: localDB + mountPath: /db/sdk + command: ["/Open-IM-Server/main"] + args: ["-openIM_api_port", "10002", "-openIM_ws_port", "10001", "-sdk_ws_port", "10003", "-openIM_log_level", "6"] volumes: - name: config configMap: name: config + - name: localDB + hostPath: + path: /db/sdk + type: Directory strategy: #更新策略 type: RollingUpdate # 滚动更新 --- From 4287082f4b26ca63868a0d8ec8e2b9fbeb89b857 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 17:22:27 +0800 Subject: [PATCH 129/752] k8s deploy --- deploy_k8s/sdk_server/deployment.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 2c94f177d..baffb9eab 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -22,7 +22,7 @@ spec: - name: config mountPath: /Open-IM-Server/config readOnly: true - - name: localDB + - name: local-db mountPath: /db/sdk command: ["/Open-IM-Server/main"] args: ["-openIM_api_port", "10002", "-openIM_ws_port", "10001", "-sdk_ws_port", "10003", "-openIM_log_level", "6"] @@ -30,7 +30,7 @@ spec: - name: config configMap: name: config - - name: localDB + - name: local-db hostPath: path: /db/sdk type: Directory From b5ceec48834741be494d9688ed03c598915182f5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 17:40:04 +0800 Subject: [PATCH 130/752] k8s deploy --- deploy_k8s/sdk_server/deployment.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index baffb9eab..7bec639b5 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -33,7 +33,6 @@ spec: - name: local-db hostPath: path: /db/sdk - type: Directory strategy: #更新策略 type: RollingUpdate # 滚动更新 --- From b3525ea6a5062fcc6bc0ff03f5e7689999c08467 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 17:56:29 +0800 Subject: [PATCH 131/752] k8s deploy --- deploy_k8s/sdk_server/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 7bec639b5..2a01b20c0 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -25,7 +25,7 @@ spec: - name: local-db mountPath: /db/sdk command: ["/Open-IM-Server/main"] - args: ["-openIM_api_port", "10002", "-openIM_ws_port", "10001", "-sdk_ws_port", "10003", "-openIM_log_level", "6"] + args: ["openIM_api_port", "10002", "openIM_ws_port", "10001", "sdk_ws_port", "10003", "openIM_log_level", "6"] volumes: - name: config configMap: From 79b2d39305cd9671cffa9bfe5e320bfe228bfe19 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 18:04:51 +0800 Subject: [PATCH 132/752] k8s deploy --- deploy_k8s/sdk_server/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 2a01b20c0..7bec639b5 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -25,7 +25,7 @@ spec: - name: local-db mountPath: /db/sdk command: ["/Open-IM-Server/main"] - args: ["openIM_api_port", "10002", "openIM_ws_port", "10001", "sdk_ws_port", "10003", "openIM_log_level", "6"] + args: ["-openIM_api_port", "10002", "-openIM_ws_port", "10001", "-sdk_ws_port", "10003", "-openIM_log_level", "6"] volumes: - name: config configMap: From 6ffc12ef9713a0f5672a81bdc8ae098ef504e548 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 23 May 2022 19:14:29 +0800 Subject: [PATCH 133/752] k8s deploy --- config/config.yaml | 2 ++ deploy_k8s/k8s_openim_deploy.md | 2 ++ deploy_k8s/kubectl_start_all.sh | 2 ++ 3 files changed, 6 insertions(+) diff --git a/config/config.yaml b/config/config.yaml index 1cfee4e1d..643ee88a4 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -7,6 +7,8 @@ etcd: etcdSchema: openim #默认即可 etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 +k8sMod: false #开启k8s模式 使用pod里面环境变量请求services调用服务 而并非etcd + mysql: dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 dbMysqlUserName: root #mysql用户名,建议修改 diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 1897b9a47..57f85600a 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -19,6 +19,8 @@ nodeSelector: 修改每种服务数量,建议至少每种2个rpc。 如果修改了config/config.yaml某些配置比如端口,同时需要修改对应deployment端口 +jssdk 需要在sdk_server/deployment.yaml修改启动端口等 + ### 4. 修改ingress.yaml配置文件 域名修改等操作 diff --git a/deploy_k8s/kubectl_start_all.sh b/deploy_k8s/kubectl_start_all.sh index 6fc90af7c..ddb7743f1 100644 --- a/deploy_k8s/kubectl_start_all.sh +++ b/deploy_k8s/kubectl_start_all.sh @@ -2,6 +2,8 @@ source ./path_info.cfg +mkdir -p /db/sdk #path for jssdk sqlite + for i in ${service[*]} do kubectl -n openim apply -f ./${i}/deployment.yaml From b7309cdda88060ffcf804c5ba1f93d76944f2080 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 19:56:34 +0800 Subject: [PATCH 134/752] log --- pkg/common/kafka/consumer_group.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/common/kafka/consumer_group.go b/pkg/common/kafka/consumer_group.go index 3af714373..01b84e85e 100644 --- a/pkg/common/kafka/consumer_group.go +++ b/pkg/common/kafka/consumer_group.go @@ -8,6 +8,7 @@ package kafka import ( "context" + "fmt" "github.com/Shopify/sarama" ) @@ -28,6 +29,7 @@ func NewMConsumerGroup(consumerConfig *MConsumerGroupConfig, topics, addr []stri config.Version = consumerConfig.KafkaVersion config.Consumer.Offsets.Initial = consumerConfig.OffsetsInitial config.Consumer.Return.Errors = consumerConfig.IsReturnErr + fmt.Println("init address is ", addr, "topics is ", topics) client, err := sarama.NewClient(addr, config) if err != nil { panic(err.Error()) From 66c62d88758944741f0e5de68b8407cc3b003547 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 20:12:54 +0800 Subject: [PATCH 135/752] consumer update --- pkg/common/kafka/consumer_group.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pkg/common/kafka/consumer_group.go b/pkg/common/kafka/consumer_group.go index 01b84e85e..6da75972d 100644 --- a/pkg/common/kafka/consumer_group.go +++ b/pkg/common/kafka/consumer_group.go @@ -24,17 +24,13 @@ type MConsumerGroupConfig struct { IsReturnErr bool } -func NewMConsumerGroup(consumerConfig *MConsumerGroupConfig, topics, addr []string, groupID string) *MConsumerGroup { +func NewMConsumerGroup(consumerConfig *MConsumerGroupConfig, topics, addrs []string, groupID string) *MConsumerGroup { config := sarama.NewConfig() config.Version = consumerConfig.KafkaVersion config.Consumer.Offsets.Initial = consumerConfig.OffsetsInitial config.Consumer.Return.Errors = consumerConfig.IsReturnErr - fmt.Println("init address is ", addr, "topics is ", topics) - client, err := sarama.NewClient(addr, config) - if err != nil { - panic(err.Error()) - } - consumerGroup, err := sarama.NewConsumerGroupFromClient(groupID, client) + fmt.Println("init address is ", addrs, "topics is ", topics) + consumerGroup, err := sarama.NewConsumerGroup(addrs, groupID, config) if err != nil { panic(err.Error()) } From ed3a1296d853313b2292e88d8473a18289276224 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 20:20:06 +0800 Subject: [PATCH 136/752] consumer update --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 8e4e3c2a2..80360eb3c 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -58,7 +58,7 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability } - och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, + och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) From 7fc6b61f21885c2728cfd10ef552f41d98eba70d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 23 May 2022 20:39:44 +0800 Subject: [PATCH 137/752] consumer update --- internal/msg_transfer/logic/offline_history_msg_handler.go | 2 +- internal/msg_transfer/logic/persistent_msg_handler.go | 2 +- internal/push/logic/push_handler.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 78c867851..504ed5d9c 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -38,7 +38,7 @@ func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2MongoLowReliability } - mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, + mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschatOffline.Topic}, config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index 7418e629e..245634d84 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -26,7 +26,7 @@ type PersistentConsumerHandler struct { func (pc *PersistentConsumerHandler) Init() { pc.msgHandle = make(map[string]fcb) pc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = pc.handleChatWs2Mysql - pc.persistentConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, + pc.persistentConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMySql) diff --git a/internal/push/logic/push_handler.go b/internal/push/logic/push_handler.go index 5412b8b3e..e18f0c136 100644 --- a/internal/push/logic/push_handler.go +++ b/internal/push/logic/push_handler.go @@ -26,7 +26,7 @@ type PushConsumerHandler struct { func (ms *PushConsumerHandler) Init() { ms.msgHandle = make(map[string]fcb) ms.msgHandle[config.Config.Kafka.Ms2pschat.Topic] = ms.handleMs2PsChat - ms.pushConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0, + ms.pushConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ms2pschat.Topic}, config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToPush) } From c0f7d02f44b80e173936c8dd717c60a10b4c6039 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 24 May 2022 10:42:07 +0800 Subject: [PATCH 138/752] k8s deploy --- deploy_k8s/ingress.yaml | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 47c6268f4..0f5eb74ff 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -6,7 +6,7 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" - name: sdk-server.openim.xxx.com + name: sdk-server-ingress spec: rules: - host: sdk-server.openim.xxx.com @@ -27,7 +27,7 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" - name: msg-gateway.openim.xxx.com + name: msg-gateway-ingress spec: rules: - host: msg-gateway.openim.xxx.com @@ -44,7 +44,7 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: api.openim.xxx.com + name: api-ingress spec: rules: - host: api.openim.xxx.com @@ -61,24 +61,7 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: demo.openim.xxx.com -spec: - rules: - - host: demo.openim.xxx.com - http: - paths: - - backend: - service: - name: demo - port: - number: 42233 - path: / - pathType: Prefix ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: demo.openim.xxx.com + name: demo-ingress spec: rules: - host: demo.openim.xxx.com @@ -95,7 +78,7 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: cms-api.openim.xxx.com + name: cms-api-ingress spec: rules: - host: cms-api.openim.xxx.com From 84cc6e9140bd57e0038d3014ddf1077d58814e01 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 24 May 2022 10:53:18 +0800 Subject: [PATCH 139/752] k8s deploy --- internal/rpc/cache/cache.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/internal/rpc/cache/cache.go b/internal/rpc/cache/cache.go index b8a8b2b5e..0adad4970 100644 --- a/internal/rpc/cache/cache.go +++ b/internal/rpc/cache/cache.go @@ -94,9 +94,21 @@ func SyncDB2Cache() error { return utils.Wrap(err, "") } //err = updateAllUserToCache(userList) - err = updateAllFriendToCache(userList) - err = updateAllBlackListToCache(userList) - err = updateAllGroupMemberListToCache() + wg := &sync.WaitGroup{} + wg.Add(3) + go func() { + defer wg.Done() + err = updateAllFriendToCache(userList) + }() + go func() { + defer wg.Done() + err = updateAllBlackListToCache(userList) + }() + go func() { + defer wg.Done() + err = updateAllGroupMemberListToCache() + }() + wg.Wait() return utils.Wrap(err, "") } From 305e81bef1dfb40b2a8f94d0aa85c7522dedb683 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 11:14:02 +0800 Subject: [PATCH 140/752] consumer update test --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 80360eb3c..1d958c035 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -58,7 +58,7 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability } - och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, + och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_8_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) From df7266cc75c17344ddc051216fed1c933b1f38f5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 11:35:03 +0800 Subject: [PATCH 141/752] consumer update test --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 1d958c035..40aa9ccc2 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -58,7 +58,7 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability } - och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_8_0_0, + och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V3_1_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) From a4d2740f24b39810db91ef5dd9e209cfa26fc040 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 11:37:39 +0800 Subject: [PATCH 142/752] consumer update test --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 40aa9ccc2..840b90eaf 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -58,7 +58,7 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability } - och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V3_1_0_0, + och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V1_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) From 2ada6d969d18d6d5d86bd7c19592aa776068e99f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 11:46:29 +0800 Subject: [PATCH 143/752] compose file update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index c4183aeb1..3168b2e09 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -73,7 +73,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092,OUTSIDE://localhost:9093 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 network_mode: "host" depends_on: From 247649ec3422e698cb6acab9c2e6ed54244144a2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 12:09:55 +0800 Subject: [PATCH 144/752] compose file update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 3168b2e09..bb824e478 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -73,7 +73,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092,OUTSIDE://localhost:9093 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://localhost:9093 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 network_mode: "host" depends_on: From 268e5cbdb16938afdffb31890dadeef9280e4e23 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 12:19:55 +0800 Subject: [PATCH 145/752] compose file update --- docker-compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index bb824e478..606c207d7 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -69,12 +69,15 @@ services: image: wurstmeister/kafka container_name: kafka restart: always + ports: + - 9093:9093 environment: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://localhost:9093 - KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 + KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" network_mode: "host" depends_on: - zookeeper From d385f555dda49f1bcb6b0c4694ebaa357d26bef7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 12:23:39 +0800 Subject: [PATCH 146/752] compose file update --- docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yaml b/docker-compose.yaml index 606c207d7..d9abc4a37 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -78,6 +78,7 @@ services: KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://localhost:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" + KAFKA_INTER_BROKER_LISTENER_NAME: kafka network_mode: "host" depends_on: - zookeeper From 0ab2eaa630c4ad6174073ed334787a3037a40dcf Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 12:24:53 +0800 Subject: [PATCH 147/752] compose file update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index d9abc4a37..885f649c6 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://localhost:9093 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: kafka From ced8eb419f19abf644d3f64e8aceaf76efd0ff52 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 12:25:41 +0800 Subject: [PATCH 148/752] compose file update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 885f649c6..895369de4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -78,7 +78,7 @@ services: KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" - KAFKA_INTER_BROKER_LISTENER_NAME: kafka + KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE network_mode: "host" depends_on: - zookeeper From ffae976e1127f2a99e00d45ac87a98a726a76dbc Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 12:36:05 +0800 Subject: [PATCH 149/752] compose file update --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 840b90eaf..80360eb3c 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -58,7 +58,7 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2MongoLowReliability } - och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V1_0_0_0, + och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) From bfe08acfec4bbb193e1dc325dba8af882e8fc6d9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 12:39:37 +0800 Subject: [PATCH 150/752] docker compose file update --- docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yaml b/docker-compose.yaml index 895369de4..4a419ae1b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,6 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 + KAFKA_CREATE_TOPICS: "ws2ms_chat:2:1,ms2ps_chat:2:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" From 499c4a27d34c75b295fd4373ce8cf7ee91b54883 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 24 May 2022 15:48:45 +0800 Subject: [PATCH 151/752] k8s deploy --- pkg/common/db/batch_insert_chat.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index b5fca3502..7273dbd18 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -4,6 +4,7 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" pbMsg "Open_IM/pkg/proto/chat" + server_api_params "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" "errors" @@ -104,3 +105,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, log.NewWarn(operationID, "batch mgo cost time ", getCurrentTimestampByMill()-newTime, userID, len(msgList)) return utils.Wrap(d.SetUserMaxSeq(userID, uint64(currentMaxSeq)), "") } + +func setMessageToCache(msgList []*server_api_params.MsgData, uid string) (err error) { + return err +} From df51c8b9a4996b12b103dfc0ec2d2a2f15e83cd8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 24 May 2022 16:54:56 +0800 Subject: [PATCH 152/752] msg cache --- pkg/common/db/batch_insert_chat.go | 5 ----- pkg/common/db/redisModel.go | 27 +++++++++++++++++++++++++++ pkg/utils/utils.go | 1 - 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 7273dbd18..b5fca3502 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -4,7 +4,6 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" pbMsg "Open_IM/pkg/proto/chat" - server_api_params "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" "errors" @@ -105,7 +104,3 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, log.NewWarn(operationID, "batch mgo cost time ", getCurrentTimestampByMill()-newTime, userID, len(msgList)) return utils.Wrap(d.SetUserMaxSeq(userID, uint64(currentMaxSeq)), "") } - -func setMessageToCache(msgList []*server_api_params.MsgData, uid string) (err error) { - return err -} diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 46318ac4a..93ac28d80 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -3,9 +3,14 @@ package db import ( "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" + pbChat "Open_IM/pkg/proto/chat" pbCommon "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" "encoding/json" + "errors" + "fmt" "github.com/garyburd/redigo/redis" + "strconv" ) const ( @@ -21,6 +26,7 @@ const ( friendRelationCache = "FRIEND_RELATION_CACHE:" blackListCache = "BLACK_LIST_CACHE:" groupCache = "GROUP_CACHE:" + messageCache = "MESSAGE_CACHE:" ) func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { @@ -257,3 +263,24 @@ func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, err result, err := redis.Strings(d.Exec("SMEMBERS", groupCache+groupID)) return result, err } + +func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string) (err error) { + var failedList []pbChat.MsgDataToMQ + for _, msg := range msgList { + key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) + m, err := utils.Pb2Map(msg.MsgData) + if err != nil { + log2.NewWarn("", utils.GetSelfFuncName(), "Pb2Map failed", *msg.MsgData, uid, err.Error()) + continue + } + _, err = d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) + if err != nil { + log2.NewWarn("", utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid) + failedList = append(failedList, *msg) + } + } + if len(failedList) != 0 { + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) + } + return err +} diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 86b1be180..b9282d699 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -147,6 +147,5 @@ func Pb2Map(pb proto.Message) (map[string]interface{}, error) { jsonCnt := _buffer.Bytes() var out map[string]interface{} err := json.Unmarshal(jsonCnt, &out) - return out, err } From 9dfef527a34aff55313021130bfd8491f9d7c18c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 24 May 2022 17:09:02 +0800 Subject: [PATCH 153/752] msg cache --- pkg/common/db/redisModel.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 93ac28d80..2e1363b4d 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -273,9 +273,10 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string) log2.NewWarn("", utils.GetSelfFuncName(), "Pb2Map failed", *msg.MsgData, uid, err.Error()) continue } + log2.NewDebug("", "m", m) _, err = d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) if err != nil { - log2.NewWarn("", utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid) + log2.NewWarn("", utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, m) failedList = append(failedList, *msg) } } From c32b53b3c00bd372ba30df8f852ead31f5bf162e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 24 May 2022 17:22:17 +0800 Subject: [PATCH 154/752] msg cache --- config/config.yaml | 2 ++ pkg/common/config/config.go | 1 + pkg/common/db/redisModel.go | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 643ee88a4..552290e6b 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -227,6 +227,8 @@ multiloginpolicy: 1 chatpersistencemysql: true #可靠性存储 reliablestorage: false +#消息缓存时间 +msgCacheTimeout: 60 * 60 #token config tokenpolicy: diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 290e63ec2..76e80767e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -218,6 +218,7 @@ type config struct { MultiLoginPolicy int `yaml:"multiloginpolicy"` ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` ReliableStorage bool `yaml:"reliablestorage"` + MsgCacheTimeout int `yaml:"msgCacheTimeout"` TokenPolicy struct { AccessSecret string `yaml:"accessSecret"` diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 2e1363b4d..41c7ea6c1 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -1,6 +1,7 @@ package db import ( + "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" @@ -274,7 +275,7 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string) continue } log2.NewDebug("", "m", m) - _, err = d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) + _, err = d.Exec("hmset", key, redis.Args{}.Add("TIMEOUT", config.Config.MsgCacheTimeout).AddFlat(m)...) if err != nil { log2.NewWarn("", utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, m) failedList = append(failedList, *msg) From d58f7fd0895481449901ff6d7e7cc20db0be8459 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 17:36:11 +0800 Subject: [PATCH 155/752] redis add get message --- internal/rpc/msg/pull_message.go | 26 ++++++++++++++++++-------- pkg/common/db/redisModel.go | 23 +++++++++++++++++++++++ 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 819a9592e..1811d3847 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -40,18 +40,28 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String()) resp := new(open_im_sdk.PullMessageBySeqListResp) //msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) - msgList, err := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, in.SeqList, in.OperationID) + redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID) if err != nil { - log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) - resp.ErrCode = 201 - resp.ErrMsg = err.Error() - return resp, nil + if err != redis.ErrNil { + log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) + } else { + log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) + } + msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, failedSeqList, in.OperationID) + if err1 != nil { + log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) + resp.ErrCode = 201 + resp.ErrMsg = err.Error() + return resp, nil + } else { + redisMsgList = append(redisMsgList, msgList...) + resp.List = redisMsgList + } + } else { + resp.List = redisMsgList } //respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID) //respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat) - resp.ErrCode = 0 - resp.ErrMsg = "" - resp.List = msgList return resp, nil } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 93ac28d80..2596038a0 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -263,6 +263,29 @@ func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, err result, err := redis.Strings(d.Exec("SMEMBERS", groupCache+groupID)) return result, err } +func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { + for _, v := range seqList { + key := messageCache + userID + "_" + strconv.Itoa(int(v)) + result, err := redis.String(d.Exec("HGETALL", key)) + if err != nil { + if err != redis.ErrNil { + errResult = err + } + failedSeqList = append(failedSeqList, v) + } else { + msg := pbCommon.MsgData{} + err = json.Unmarshal([]byte(result), &msg) + if err != nil { + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) + } else { + seqMsg = append(seqMsg, &msg) + } + + } + } + return seqMsg, failedSeqList, errResult +} func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string) (err error) { var failedList []pbChat.MsgDataToMQ From f5ed9d93c369b3bcfbf3a1e4c07ce4bf84fd66e8 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 17:47:25 +0800 Subject: [PATCH 156/752] redis add get message --- pkg/common/db/redisModel.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 05c721174..f1a5a7911 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -269,9 +269,7 @@ func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operati key := messageCache + userID + "_" + strconv.Itoa(int(v)) result, err := redis.String(d.Exec("HGETALL", key)) if err != nil { - if err != redis.ErrNil { - errResult = err - } + errResult = err failedSeqList = append(failedSeqList, v) } else { msg := pbCommon.MsgData{} @@ -280,6 +278,7 @@ func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operati failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) } else { + log2.NewDebug(operationID, "redis get msg is ", msg.String()) seqMsg = append(seqMsg, &msg) } @@ -288,24 +287,24 @@ func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operati return seqMsg, failedSeqList, errResult } -func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string) (err error) { +func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) m, err := utils.Pb2Map(msg.MsgData) if err != nil { - log2.NewWarn("", utils.GetSelfFuncName(), "Pb2Map failed", *msg.MsgData, uid, err.Error()) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2Map failed", msg.MsgData.String(), uid, err.Error()) continue } - log2.NewDebug("", "m", m) + log2.NewDebug(operationID, "convert map is ", m) _, err = d.Exec("hmset", key, redis.Args{}.Add("TIMEOUT", config.Config.MsgCacheTimeout).AddFlat(m)...) if err != nil { - log2.NewWarn("", utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, m) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, m) failedList = append(failedList, *msg) } } if len(failedList) != 0 { return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) } - return err + return nil } From c2248926099f062f65db0d87532214614e039072 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 17:49:43 +0800 Subject: [PATCH 157/752] redis add get message --- config/config.yaml | 2 +- pkg/common/db/redisModel.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 552290e6b..2c1b469ee 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -228,7 +228,7 @@ chatpersistencemysql: true #可靠性存储 reliablestorage: false #消息缓存时间 -msgCacheTimeout: 60 * 60 +msgCacheTimeout: 1800 #token config tokenpolicy: diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index f1a5a7911..e98fe1ce0 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -275,6 +275,7 @@ func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operati msg := pbCommon.MsgData{} err = json.Unmarshal([]byte(result), &msg) if err != nil { + errResult = err failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) } else { From e2db8c07afd37ddec5bc78a7082c00ea79cf1116 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 24 May 2022 17:52:29 +0800 Subject: [PATCH 158/752] msg cache --- pkg/common/db/batch_insert_chat.go | 130 +++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index b5fca3502..6a872529b 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -10,8 +10,134 @@ import ( "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson" + "runtime" + "time" ) +func (d *DataBases) BatchInsertChat2DB(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string, currentMaxSeq uint64) error { + newTime := getCurrentTimestampByMill() + if len(msgList) > GetSingleGocMsgNum() { + return errors.New("too large") + } + isInit := false + var remain uint64 + blk0 := uint64(GetSingleGocMsgNum() - 1) + if currentMaxSeq < uint64(GetSingleGocMsgNum()) { + remain = blk0 - currentMaxSeq + } else { + excludeBlk0 := currentMaxSeq - blk0 + remain = (uint64(GetSingleGocMsgNum()) - (excludeBlk0 % uint64(GetSingleGocMsgNum()))) % uint64(GetSingleGocMsgNum()) + } + insertCounter := uint64(0) + msgListToMongo := make([]MsgInfo, 0) + msgListToMongoNext := make([]MsgInfo, 0) + seqUid := "" + seqUidNext := "" + log.Debug(operationID, "remain ", remain, "insertCounter ", insertCounter, "currentMaxSeq ", currentMaxSeq, userID, len(msgList)) + var err error + for _, m := range msgList { + log.Debug(operationID, "msg node ", m.String(), m.MsgData.ClientMsgID) + currentMaxSeq++ + sMsg := MsgInfo{} + sMsg.SendTime = m.MsgData.SendTime + m.MsgData.Seq = uint32(currentMaxSeq) + if sMsg.Msg, err = proto.Marshal(m.MsgData); err != nil { + return utils.Wrap(err, "") + } + if isInit { + msgListToMongoNext = append(msgListToMongoNext, sMsg) + seqUidNext = getSeqUid(userID, uint32(currentMaxSeq)) + log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) + continue + } + if insertCounter < remain { + msgListToMongo = append(msgListToMongo, sMsg) + insertCounter++ + seqUid = getSeqUid(userID, uint32(currentMaxSeq)) + log.Debug(operationID, "msgListToMongo ", seqUid, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) + } else { + msgListToMongoNext = append(msgListToMongoNext, sMsg) + seqUidNext = getSeqUid(userID, uint32(currentMaxSeq)) + log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain) + } + } + + ctx := context.Background() + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + + if seqUid != "" { + filter := bson.M{"uid": seqUid} + log.NewDebug(operationID, "filter ", seqUid, "list ", msgListToMongo) + err := c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": bson.M{"$each": msgListToMongo}}}).Err() + if err != nil { + log.Error(operationID, "FindOneAndUpdate failed ", err.Error(), filter) + return utils.Wrap(err, "") + } + } + if seqUidNext != "" { + filter := bson.M{"uid": seqUidNext} + sChat := UserChat{} + sChat.UID = seqUidNext + sChat.Msg = msgListToMongoNext + log.NewDebug(operationID, "filter ", seqUidNext, "list ", msgListToMongoNext) + if _, err = c.InsertOne(ctx, &sChat); err != nil { + log.NewError(operationID, "InsertOne failed", filter, err.Error(), sChat) + return utils.Wrap(err, "") + } + } + log.NewWarn(operationID, "batch mgo cost time ", getCurrentTimestampByMill()-newTime, userID, len(msgList)) + return nil +} + +func (d *DataBases) BatchInsertChat2Cache(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) (error, uint64) { + newTime := getCurrentTimestampByMill() + if len(msgList) > GetSingleGocMsgNum() { + return errors.New("too large"), 0 + } + currentMaxSeq, err := d.GetUserMaxSeq(userID) + if err == nil { + + } else if err == redis.ErrNil { + currentMaxSeq = 0 + } else { + return utils.Wrap(err, ""), 0 + } + lastMaxSeq := currentMaxSeq + + for _, m := range msgList { + log.Debug(operationID, "msg node ", m.String(), m.MsgData.ClientMsgID) + currentMaxSeq++ + sMsg := MsgInfo{} + sMsg.SendTime = m.MsgData.SendTime + m.MsgData.Seq = uint32(currentMaxSeq) + } + log.Debug(operationID, "SetMessageToCache ", userID, len(msgList)) + err = d.SetMessageToCache(msgList, userID, operationID) + if err != nil { + log.Error(operationID, "setMessageToCache failed, continue ", err.Error(), len(msgList), userID) + } + log.NewWarn(operationID, "batch to redis cost time ", getCurrentTimestampByMill()-newTime, userID, len(msgList)) + return utils.Wrap(d.SetUserMaxSeq(userID, uint64(currentMaxSeq)), ""), lastMaxSeq +} + +func (d *DataBases) BatchInsertChatBoth(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { + err, lastMaxSeq := d.BatchInsertChat2Cache(userID, msgList, operationID) + if err != nil { + log.Error(operationID, "BatchInsertChat2Cache failed ", err.Error(), userID, len(msgList)) + return err + } + for { + if runtime.NumGoroutine() > 50000 { + log.NewWarn(operationID, "too many NumGoroutine ", runtime.NumGoroutine()) + time.Sleep(10 * time.Millisecond) + } else { + break + } + } + go d.BatchInsertChat2DB(userID, msgList, operationID, lastMaxSeq) + return nil +} + func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { newTime := getCurrentTimestampByMill() if len(msgList) > GetSingleGocMsgNum() { @@ -104,3 +230,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, log.NewWarn(operationID, "batch mgo cost time ", getCurrentTimestampByMill()-newTime, userID, len(msgList)) return utils.Wrap(d.SetUserMaxSeq(userID, uint64(currentMaxSeq)), "") } + +//func (d *DataBases)setMessageToCache(msgList []*pbMsg.MsgDataToMQ, uid string) (err error) { +// +//} From c176a5b80a354e69e40e10f2cab7e2764275e365 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 24 May 2022 18:17:50 +0800 Subject: [PATCH 159/752] msg cache --- internal/rpc/cache/cache.go | 75 ++++++++++++++----------------------- 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/internal/rpc/cache/cache.go b/internal/rpc/cache/cache.go index 0adad4970..e42ab22e7 100644 --- a/internal/rpc/cache/cache.go +++ b/internal/rpc/cache/cache.go @@ -153,73 +153,56 @@ func updateAllGroupMemberListToCache() error { log.NewWarn("0", utils.GetSelfFuncName(), "getAllGroupIDList failed", err.Error()) panic(err.Error()) } - wg := &sync.WaitGroup{} - wg.Add(len(groupIDList)) + for _, groupID := range groupIDList { - go func() { - defer wg.Done() - groupMemberIDList, err := imdb.GetGroupMemberIDListByGroupID(groupID) - if err != nil { - log.NewWarn("", utils.GetSelfFuncName(), "GetGroupMemberIDListByGroupID", err.Error()) - return + groupMemberIDList, err := imdb.GetGroupMemberIDListByGroupID(groupID) + if err != nil { + log.NewWarn("", utils.GetSelfFuncName(), "GetGroupMemberIDListByGroupID", err.Error()) + continue + } + if len(groupMemberIDList) > 0 { + if err := db.DB.AddGroupMemberToCache(groupID, groupMemberIDList...); err != nil { + log.NewWarn("", utils.GetSelfFuncName(), "AddGroupMemberToCache", err.Error()) } - //log.NewDebug("", utils.GetSelfFuncName(), "groupMemberIDList", groupMemberIDList) - if len(groupMemberIDList) > 0 { - if err := db.DB.AddGroupMemberToCache(groupID, groupMemberIDList...); err != nil { - log.NewWarn("", utils.GetSelfFuncName(), "AddGroupMemberToCache", err.Error()) - } - } - }() + } } - wg.Wait() log.NewInfo("0", utils.GetSelfFuncName(), "ok") return nil } func updateAllFriendToCache(userList []db.User) error { log.NewInfo("0", utils.GetSelfFuncName()) - wg := sync.WaitGroup{} - wg.Add(len(userList)) for _, user := range userList { - go func() { - defer wg.Done() - friendIDList, err := imdb.GetFriendIDListByUserID(user.UserID) - if err != nil { - log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) - return + friendIDList, err := imdb.GetFriendIDListByUserID(user.UserID) + if err != nil { + log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) + continue + } + if len(friendIDList) > 0 { + if err := db.DB.AddFriendToCache(user.UserID, friendIDList...); err != nil { + log.NewWarn("0", utils.GetSelfFuncName(), err.Error(), friendIDList, user.UserID) } - if len(friendIDList) > 0 { - if err := db.DB.AddFriendToCache(user.UserID, friendIDList...); err != nil { - log.NewWarn("0", utils.GetSelfFuncName(), err.Error(), friendIDList, user.UserID) - } - } - }() + } } - wg.Wait() + log.NewInfo("0", utils.GetSelfFuncName(), "ok") return nil } func updateAllBlackListToCache(userList []db.User) error { log.NewInfo("0", utils.GetSelfFuncName()) - wg := &sync.WaitGroup{} - wg.Add(len(userList)) for _, user := range userList { - go func() { - defer wg.Done() - blackIDList, err := imdb.GetBlackIDListByUserID(user.UserID) - if err != nil { - log.NewWarn("", utils.GetSelfFuncName(), err.Error()) - return + blackIDList, err := imdb.GetBlackIDListByUserID(user.UserID) + if err != nil { + log.NewWarn("", utils.GetSelfFuncName(), err.Error()) + continue + } + if len(blackIDList) > 0 { + if err := db.DB.AddBlackUserToCache(user.UserID, blackIDList...); err != nil { + log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) } - if len(blackIDList) > 0 { - if err := db.DB.AddBlackUserToCache(user.UserID, blackIDList...); err != nil { - log.NewWarn("0", utils.GetSelfFuncName(), err.Error()) - } - } - }() + } } - wg.Wait() log.NewInfo("0", utils.GetSelfFuncName(), "ok") return nil } From c3e3f4e947833de964c19ff7b7d1fa8a587e3f88 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 24 May 2022 18:18:59 +0800 Subject: [PATCH 160/752] msg cache --- internal/msg_transfer/logic/db.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index 7a2af5404..89bda4b1b 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -24,5 +24,6 @@ func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { func saveUserChatList(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { log.Info(operationID, utils.GetSelfFuncName(), "args ", userID, len(msgList)) - return db.DB.BatchInsertChat(userID, msgList, operationID) + //return db.DB.BatchInsertChat(userID, msgList, operationID) + return db.DB.BatchInsertChatBoth(userID, msgList, operationID) } From 57967835bd7f83103d5ec6c1986c696d6bba7d5d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 18:40:57 +0800 Subject: [PATCH 161/752] redis add get message --- pkg/common/db/redisModel.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index e98fe1ce0..fb5241dd7 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -266,14 +266,17 @@ func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, err } func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { for _, v := range seqList { + //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - result, err := redis.String(d.Exec("HGETALL", key)) + + result, err := redis.Bytes(d.Exec("HGETALL", key)) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "redis get message error:", err.Error(), v) } else { msg := pbCommon.MsgData{} - err = json.Unmarshal([]byte(result), &msg) + err = json.Unmarshal(result, &msg) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) From d6742812c850e9984e56e4f21d662b7fdb8af757 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 18:58:22 +0800 Subject: [PATCH 162/752] redis add get message --- pkg/common/db/redisModel.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index fb5241dd7..c5c810977 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -269,14 +269,18 @@ func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operati //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - result, err := redis.Bytes(d.Exec("HGETALL", key)) + result, err := redis.Values(d.Exec("HGETALL", key)) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "redis get message error:", err.Error(), v) } else { + var a []byte + for _, v := range result { + a = append(a, v.(byte)) + } msg := pbCommon.MsgData{} - err = json.Unmarshal(result, &msg) + err = json.Unmarshal(a, &msg) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) From 79ff36d49a62a225cf06e7a893cc21cb3afedeba Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 19:24:11 +0800 Subject: [PATCH 163/752] redis add get message --- pkg/common/db/redisModel.go | 19 ++++++++----------- pkg/utils/utils.go | 28 +++++++++++++++++----------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index c5c810977..79ee58b5a 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -11,6 +11,7 @@ import ( "errors" "fmt" "github.com/garyburd/redigo/redis" + "github.com/golang/protobuf/jsonpb" "strconv" ) @@ -269,18 +270,14 @@ func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operati //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - result, err := redis.Values(d.Exec("HGETALL", key)) + result, err := redis.String(d.Exec("GET", key)) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "redis get message error:", err.Error(), v) } else { - var a []byte - for _, v := range result { - a = append(a, v.(byte)) - } msg := pbCommon.MsgData{} - err = json.Unmarshal(a, &msg) + err = jsonpb.UnmarshalString(result, &msg) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) @@ -299,15 +296,15 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) - m, err := utils.Pb2Map(msg.MsgData) + s, err := utils.Pb2String(msg.MsgData) if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2Map failed", msg.MsgData.String(), uid, err.Error()) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) continue } - log2.NewDebug(operationID, "convert map is ", m) - _, err = d.Exec("hmset", key, redis.Args{}.Add("TIMEOUT", config.Config.MsgCacheTimeout).AddFlat(m)...) + log2.NewDebug(operationID, "convert string is ", s) + _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, m) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s) failedList = append(failedList, *msg) } } diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index b9282d699..e4383263c 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -1,7 +1,6 @@ package utils import ( - "bytes" "encoding/json" "github.com/gogo/protobuf/jsonpb" "github.com/golang/protobuf/proto" @@ -136,16 +135,23 @@ func RemoveRepeatedStringInList(slc []string) []string { return result } -func Pb2Map(pb proto.Message) (map[string]interface{}, error) { - _buffer := bytes.Buffer{} - jsonbMarshaller := &jsonpb.Marshaler{ +func Pb2String(pb proto.Message) (string, error) { + marshaler := jsonpb.Marshaler{ OrigName: true, - EnumsAsInts: true, - EmitDefaults: true, + EnumsAsInts: false, + EmitDefaults: false, } - _ = jsonbMarshaller.Marshal(&_buffer, pb) - jsonCnt := _buffer.Bytes() - var out map[string]interface{} - err := json.Unmarshal(jsonCnt, &out) - return out, err + return marshaler.MarshalToString(pb) + +} +func Map2Pb(m map[string]interface{}) (pb proto.Message, err error) { + b, err := json.Marshal(m) + if err != nil { + return nil, err + } + err = proto.Unmarshal(b, pb) + if err != nil { + return nil, err + } + return pb, nil } From ae0cfe15759ce4d30c095a3bfcd8f6bd8190b06d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 19:25:49 +0800 Subject: [PATCH 164/752] redis add get message --- pkg/utils/utils.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index e4383263c..4c3e9e5f3 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -1,6 +1,7 @@ package utils import ( + "bytes" "encoding/json" "github.com/gogo/protobuf/jsonpb" "github.com/golang/protobuf/proto" @@ -144,6 +145,7 @@ func Pb2String(pb proto.Message) (string, error) { return marshaler.MarshalToString(pb) } + func Map2Pb(m map[string]interface{}) (pb proto.Message, err error) { b, err := json.Marshal(m) if err != nil { @@ -155,3 +157,16 @@ func Map2Pb(m map[string]interface{}) (pb proto.Message, err error) { } return pb, nil } +func Pb2Map(pb proto.Message) (map[string]interface{}, error) { + _buffer := bytes.Buffer{} + jsonbMarshaller := &jsonpb.Marshaler{ + OrigName: true, + EnumsAsInts: true, + EmitDefaults: true, + } + _ = jsonbMarshaller.Marshal(&_buffer, pb) + jsonCnt := _buffer.Bytes() + var out map[string]interface{} + err := json.Unmarshal(jsonCnt, &out) + return out, err +} From c66ccfeda2bee2b09feeee5035e21554bd6a21e9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 20:04:40 +0800 Subject: [PATCH 165/752] redis add get message --- .../logic/online_history_msg_handler.go | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 80360eb3c..390cf6ba9 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -415,20 +415,24 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS //och.TriggerCmd(OnlineTopicBusy) select { case msg := <-claim.Messages(): - log.NewDebug("", "claim.Messages ", msg) - cMsg = append(cMsg, msg) - if len(cMsg) >= 1000 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) + triggerID = utils.OperationIDGenerator() + if msg != nil { + log.NewDebug(triggerID, "claim.Messages ", msg) + cMsg = append(cMsg, msg) + if len(cMsg) >= 1000 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) + } + log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg}} + sess.MarkMessage(msg, "") + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(msg, "") - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) + } else { + log.NewWarn(triggerID, "msg is nil") } case <-t.C: From 36b531507569b75809f85ff7643e5dfee222c91f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 20:17:06 +0800 Subject: [PATCH 166/752] redis add get message --- .../logic/online_history_msg_handler.go | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 390cf6ba9..698e52cc4 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -416,23 +416,20 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS select { case msg := <-claim.Messages(): triggerID = utils.OperationIDGenerator() - if msg != nil { - log.NewDebug(triggerID, "claim.Messages ", msg) - cMsg = append(cMsg, msg) - if len(cMsg) >= 1000 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) - } - log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(msg, "") - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) + + log.NewDebug(triggerID, "claim.Messages ", msg) + cMsg = append(cMsg, msg) + if len(cMsg) >= 1000 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) } - } else { - log.NewWarn(triggerID, "msg is nil") + log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg}} + sess.MarkMessage(msg, "") + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) } case <-t.C: From 94e6380485289d8f6bd7cf23f719ef98d744eb6a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 21:14:39 +0800 Subject: [PATCH 167/752] redis add get message --- internal/msg_transfer/logic/init.go | 1 + .../logic/online_history_msg_handler.go | 28 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index f3f1b138e..f8c424dcc 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -15,6 +15,7 @@ const OnlineTopicVacancy = 0 const Msg = 2 const ConsumerMsgs = 3 const UserMessages = 4 +const MongoMessages = 5 const ChannelNum = 100 var ( diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 698e52cc4..cf51e9628 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -39,6 +39,7 @@ type OnlineHistoryConsumerHandler struct { cmdCh chan Cmd2Value msgCh chan Cmd2Value chArrays [ChannelNum]chan Cmd2Value + chMongoArrays [ChannelNum]chan Cmd2Value msgDistributionCh chan Cmd2Value } @@ -52,6 +53,10 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.chArrays[i] = make(chan Cmd2Value, 1000) go och.Run(i) } + for i := 0; i < ChannelNum; i++ { + och.chMongoArrays[i] = make(chan Cmd2Value, 1000) + go och.MongoMessageRun(i) + } if config.Config.ReliableStorage { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2Mongo } else { @@ -146,6 +151,28 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } } +func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ) { + hashCode := getHashCode(userID) + channelID := hashCode % ChannelNum + log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} +} +func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { + for { + select { + case cmd := <-och.chArrays[channelID]: + switch cmd.Cmd { + + case MongoMessages: + msgChannelValue := cmd.Value.(MsgChannelValue) + msgList := msgChannelValue.msgList + triggerID := msgChannelValue.triggerID + userID := msgChannelValue.userID + } + } + } +} //func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { // msg := cMsg.Value @@ -216,7 +243,6 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // sess.MarkMessage(cMsg, "") // log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) //} - func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { for { UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) From 49cd31fd41b46870f8e1290bbb919a08c3d1c0cf Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 24 May 2022 21:31:55 +0800 Subject: [PATCH 168/752] msg cache --- pkg/common/db/batch_insert_chat.go | 35 ++++++++++++++---------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 6a872529b..173001a41 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -10,8 +10,6 @@ import ( "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson" - "runtime" - "time" ) func (d *DataBases) BatchInsertChat2DB(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string, currentMaxSeq uint64) error { @@ -120,23 +118,22 @@ func (d *DataBases) BatchInsertChat2Cache(userID string, msgList []*pbMsg.MsgDat return utils.Wrap(d.SetUserMaxSeq(userID, uint64(currentMaxSeq)), ""), lastMaxSeq } -func (d *DataBases) BatchInsertChatBoth(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { - err, lastMaxSeq := d.BatchInsertChat2Cache(userID, msgList, operationID) - if err != nil { - log.Error(operationID, "BatchInsertChat2Cache failed ", err.Error(), userID, len(msgList)) - return err - } - for { - if runtime.NumGoroutine() > 50000 { - log.NewWarn(operationID, "too many NumGoroutine ", runtime.NumGoroutine()) - time.Sleep(10 * time.Millisecond) - } else { - break - } - } - go d.BatchInsertChat2DB(userID, msgList, operationID, lastMaxSeq) - return nil -} +//func (d *DataBases) BatchInsertChatBoth(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) (error, uint64) { +// err, lastMaxSeq := d.BatchInsertChat2Cache(userID, msgList, operationID) +// if err != nil { +// log.Error(operationID, "BatchInsertChat2Cache failed ", err.Error(), userID, len(msgList)) +// return err, 0 +// } +// for { +// if runtime.NumGoroutine() > 50000 { +// log.NewWarn(operationID, "too many NumGoroutine ", runtime.NumGoroutine()) +// time.Sleep(10 * time.Millisecond) +// } else { +// break +// } +// } +// return nil, lastMaxSeq +//} func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { newTime := getCurrentTimestampByMill() From 1246f3aa21b13c8857f0f1165b182e3d39461cbf Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 24 May 2022 21:34:02 +0800 Subject: [PATCH 169/752] msg cache --- internal/msg_transfer/logic/db.go | 4 ++-- pkg/common/db/mongoModel.go | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index 89bda4b1b..579cdedf3 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -22,8 +22,8 @@ func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { // return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) } -func saveUserChatList(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) error { +func saveUserChatList(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) (error, uint64) { log.Info(operationID, utils.GetSelfFuncName(), "args ", userID, len(msgList)) //return db.DB.BatchInsertChat(userID, msgList, operationID) - return db.DB.BatchInsertChatBoth(userID, msgList, operationID) + return db.DB.BatchInsertChat2Cache(userID, msgList, operationID) } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 80e9d3400..1e824c11b 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -893,6 +893,10 @@ func getSeqUid(uid string, seq uint32) string { return indexGen(uid, seqSuffix) } +func GetSeqUid(uid string, seq uint32) string { + return getSeqUid(uid, seq) +} + func getMsgIndex(seq uint32) int { seqSuffix := seq / singleGocMsgNum var index uint32 From 25c316165e64210fef38d4455ca00171c332c08d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 21:42:12 +0800 Subject: [PATCH 170/752] redis add get message --- .../logic/online_history_msg_handler.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index cf51e9628..f409da44a 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -23,6 +23,7 @@ type MsgChannelValue struct { userID string triggerID string msgList []*pbMsg.MsgDataToMQ + lastSeq uint64 } type TriggerChannelValue struct { triggerID string @@ -54,7 +55,7 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { go och.Run(i) } for i := 0; i < ChannelNum; i++ { - och.chMongoArrays[i] = make(chan Cmd2Value, 1000) + och.chMongoArrays[i] = make(chan Cmd2Value, 10000) go och.MongoMessageRun(i) } if config.Config.ReliableStorage { @@ -128,14 +129,15 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // return //} log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(noStoragepushMsgList)) - err := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) + err, lastSeq := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) - log.NewError(triggerID, "single data insert to mongo err", err.Error(), storageMsgList) + log.NewError(triggerID, "single data insert to redis err", err.Error(), storageMsgList) } else { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() + och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) go func(push, storage []*pbMsg.MsgDataToMQ) { for _, v := range storage { sendMessageToPush(v, msgChannelValue.userID) @@ -151,24 +153,28 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } } -func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ) { +func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { hashCode := getHashCode(userID) channelID := hashCode % ChannelNum log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} + och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { for { select { case cmd := <-och.chArrays[channelID]: switch cmd.Cmd { - case MongoMessages: msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID userID := msgChannelValue.userID + lastSeq := msgChannelValue.lastSeq + err := db.DB.BatchInsertChat2DB(userID, msgList, triggerID, lastSeq) + if err != nil { + log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) + } } } } From bb45c0c34b62023dc5bff243e2f4fe5f35494afa Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 21:45:34 +0800 Subject: [PATCH 171/752] redis add get message --- internal/msg_transfer/logic/offline_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go index 504ed5d9c..b7ee3b2e3 100644 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ b/internal/msg_transfer/logic/offline_history_msg_handler.go @@ -76,7 +76,7 @@ func (och *OfflineHistoryConsumerHandler) Run(channelID int) { // return //} - err := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) + err, _ := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) log.NewError(triggerID, "single data insert to mongo err", err.Error(), storageMsgList) From b48197c8aac95563b79375f5352a62a1f1b73385 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 22:14:30 +0800 Subject: [PATCH 172/752] redis add get message --- .../logic/online_history_msg_handler.go | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index f409da44a..211e2a416 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -443,26 +443,27 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) var triggerID string - for { + for msg := range claim.Messages() { + cMsg = append(cMsg, msg) //och.TriggerCmd(OnlineTopicBusy) select { - case msg := <-claim.Messages(): - triggerID = utils.OperationIDGenerator() - - log.NewDebug(triggerID, "claim.Messages ", msg) - cMsg = append(cMsg, msg) - if len(cMsg) >= 1000 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) - } - log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(msg, "") - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) - } + //case : + // triggerID = utils.OperationIDGenerator() + // + // log.NewDebug(triggerID, "claim.Messages ", msg) + // cMsg = append(cMsg, msg) + // if len(cMsg) >= 1000 { + // ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + // for _, v := range cMsg { + // ccMsg = append(ccMsg, v) + // } + // log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + // och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + // triggerID: triggerID, cmsgList: ccMsg}} + // sess.MarkMessage(msg, "") + // cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + // log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) + // } case <-t.C: if len(cMsg) > 0 { From 4571a3b50be5ca0fa8dc50d0e3c1278675a0a5d1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 22:27:53 +0800 Subject: [PATCH 173/752] redis add get message --- internal/msg_transfer/logic/online_history_msg_handler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 211e2a416..9e1a07925 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -479,6 +479,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS cMsg = make([]*sarama.ConsumerMessage, 0, 1000) log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } + default: } //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) From 8d78ef5946991c6e176b0410cb9133f6b82d4423 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 23:07:07 +0800 Subject: [PATCH 174/752] redis add get message --- .../logic/online_history_msg_handler.go | 202 +++++++++--------- 1 file changed, 103 insertions(+), 99 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 9e1a07925..5a2c95eb2 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -180,75 +180,6 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { } } -//func (och *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { -// msg := cMsg.Value -// now := time.Now() -// msgFromMQ := pbMsg.MsgDataToMQ{} -// err := proto.Unmarshal(msg, &msgFromMQ) -// if err != nil { -// log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) -// return -// } -// operationID := msgFromMQ.OperationID -// log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) -// //Control whether to store offline messages (mongo) -// isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) -// //Control whether to store history messages (mysql) -// isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) -// isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) -// switch msgFromMQ.MsgData.SessionType { -// case constant.SingleChatType: -// log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) -// if isHistory { -// err := saveUserChat(msgKey, &msgFromMQ) -// if err != nil { -// singleMsgFailedCount++ -// log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) -// return -// } -// singleMsgSuccessCountMutex.Lock() -// singleMsgSuccessCount++ -// singleMsgSuccessCountMutex.Unlock() -// log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) -// } -// if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { -// } else { -// go sendMessageToPush(&msgFromMQ, msgKey) -// } -// log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) -// case constant.GroupChatType: -// log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) -// if isHistory { -// err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) -// if err != nil { -// log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) -// return -// } -// groupMsgCount++ -// } -// go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) -// case constant.NotificationChatType: -// log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) -// if isHistory { -// err := saveUserChat(msgKey, &msgFromMQ) -// if err != nil { -// log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) -// return -// } -// log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) -// } -// if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { -// } else { -// go sendMessageToPush(&msgFromMQ, msgKey) -// } -// log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) -// default: -// log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) -// return -// } -// sess.MarkMessage(cMsg, "") -// log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) -//} func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { for { UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) @@ -440,53 +371,126 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS } log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 0, 1000) - t := time.NewTicker(time.Duration(100) * time.Millisecond) + //cMsg := make([]*sarama.ConsumerMessage, 0, 1000) + //t := time.NewTicker(time.Duration(100) * time.Millisecond) var triggerID string for msg := range claim.Messages() { - cMsg = append(cMsg, msg) + msgFromMQ := pbMsg.MsgDataToMQ{} + err := proto.Unmarshal(msg.Value, &msgFromMQ) + if err != nil { + log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(msg.Value), "err", err.Error()) + } + userID := string(msg.Key) + hashCode := getHashCode(userID) + channelID := hashCode % ChannelNum + log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: triggerID}} + sess.MarkMessage(msg, "") + //cMsg = append(cMsg, msg) //och.TriggerCmd(OnlineTopicBusy) - select { - //case : - // triggerID = utils.OperationIDGenerator() + //select { + ////case : + //// triggerID = utils.OperationIDGenerator() + //// + //// log.NewDebug(triggerID, "claim.Messages ", msg) + //// cMsg = append(cMsg, msg) + //// if len(cMsg) >= 1000 { + //// ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + //// for _, v := range cMsg { + //// ccMsg = append(ccMsg, v) + //// } + //// log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + //// och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + //// triggerID: triggerID, cmsgList: ccMsg}} + //// sess.MarkMessage(msg, "") + //// cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + //// log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) + //// } // - // log.NewDebug(triggerID, "claim.Messages ", msg) - // cMsg = append(cMsg, msg) - // if len(cMsg) >= 1000 { + //case <-t.C: + // if len(cMsg) > 0 { // ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) // for _, v := range cMsg { // ccMsg = append(ccMsg, v) // } - // log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + // triggerID = utils.OperationIDGenerator() + // log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) // och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ // triggerID: triggerID, cmsgList: ccMsg}} - // sess.MarkMessage(msg, "") + // sess.MarkMessage(cMsg[len(cMsg)-1], "") // cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - // log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) + // log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) // } - - case <-t.C: - if len(cMsg) > 0 { - ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) - } - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(cMsg[len(cMsg)-1], "") - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) - } - default: - - } + //default: + // + //} //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) } return nil } + +//func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +// claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group +// +// for { +// if sess == nil { +// log.NewWarn("", " sess == nil, waiting ") +// time.Sleep(100 * time.Millisecond) +// } else { +// break +// } +// } +// +// log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) +// cMsg := make([]*sarama.ConsumerMessage, 0, 1000) +// t := time.NewTicker(time.Duration(100) * time.Millisecond) +// var triggerID string +// for msg := range claim.Messages() { +// cMsg = append(cMsg, msg) +// //och.TriggerCmd(OnlineTopicBusy) +// select { +// //case : +// // triggerID = utils.OperationIDGenerator() +// // +// // log.NewDebug(triggerID, "claim.Messages ", msg) +// // cMsg = append(cMsg, msg) +// // if len(cMsg) >= 1000 { +// // ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) +// // for _, v := range cMsg { +// // ccMsg = append(ccMsg, v) +// // } +// // log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) +// // och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ +// // triggerID: triggerID, cmsgList: ccMsg}} +// // sess.MarkMessage(msg, "") +// // cMsg = make([]*sarama.ConsumerMessage, 0, 1000) +// // log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) +// // } +// +// case <-t.C: +// if len(cMsg) > 0 { +// ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) +// for _, v := range cMsg { +// ccMsg = append(ccMsg, v) +// } +// triggerID = utils.OperationIDGenerator() +// log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) +// och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ +// triggerID: triggerID, cmsgList: ccMsg}} +// sess.MarkMessage(cMsg[len(cMsg)-1], "") +// cMsg = make([]*sarama.ConsumerMessage, 0, 1000) +// log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) +// } +// default: +// +// } +// //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) +// +// } +// return nil +//} func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { log.Info(message.OperationID, "msg_transfer send message to push", "message", message.String()) rpcPushMsg := pbPush.PushMsgReq{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID} From 77c7efbe896d3632673ae3e80c4553669b10cc16 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 24 May 2022 23:31:37 +0800 Subject: [PATCH 175/752] redis add get message --- .../logic/online_history_msg_handler.go | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 5a2c95eb2..805eef805 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -41,13 +41,13 @@ type OnlineHistoryConsumerHandler struct { msgCh chan Cmd2Value chArrays [ChannelNum]chan Cmd2Value chMongoArrays [ChannelNum]chan Cmd2Value - msgDistributionCh chan Cmd2Value + //msgDistributionCh chan Cmd2Value } func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle = make(map[string]fcb) - och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel - go och.MessagesDistributionHandle() + //och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel + //go och.MessagesDistributionHandle() och.cmdCh = cmdCh och.msgCh = make(chan Cmd2Value, 1000) for i := 0; i < ChannelNum; i++ { @@ -180,52 +180,52 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { } } -func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { - for { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) - select { - case cmd := <-och.msgDistributionCh: - switch cmd.Cmd { - case ConsumerMsgs: - triggerChannelValue := cmd.Value.(TriggerChannelValue) - triggerID := triggerChannelValue.triggerID - consumerMessages := triggerChannelValue.cmsgList - //Aggregation map[userid]message list - log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) - for i := 0; i < len(consumerMessages); i++ { - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) - if err != nil { - log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) - return - } - log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) - if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { - oldM = append(oldM, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM - } else { - m := make([]*pbMsg.MsgDataToMQ, 0, 100) - m = append(m, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = m - } - } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) - for userID, v := range UserAggregationMsgs { - if len(v) >= 0 { - hashCode := getHashCode(userID) - channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) - //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} - //}(channelID, userID, v) - } - } - } - } - - } - -} +//func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { +// for { +// UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) +// select { +// case cmd := <-och.msgDistributionCh: +// switch cmd.Cmd { +// case ConsumerMsgs: +// triggerChannelValue := cmd.Value.(TriggerChannelValue) +// triggerID := triggerChannelValue.triggerID +// consumerMessages := triggerChannelValue.cmsgList +// //Aggregation map[userid]message list +// log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) +// for i := 0; i < len(consumerMessages); i++ { +// msgFromMQ := pbMsg.MsgDataToMQ{} +// err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) +// if err != nil { +// log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) +// return +// } +// log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) +// if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { +// oldM = append(oldM, &msgFromMQ) +// UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM +// } else { +// m := make([]*pbMsg.MsgDataToMQ, 0, 100) +// m = append(m, &msgFromMQ) +// UserAggregationMsgs[string(consumerMessages[i].Key)] = m +// } +// } +// log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) +// for userID, v := range UserAggregationMsgs { +// if len(v) >= 0 { +// hashCode := getHashCode(userID) +// channelID := hashCode % ChannelNum +// log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) +// //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { +// och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} +// //}(channelID, userID, v) +// } +// } +// } +// } +// +// } +// +//} func (mc *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value now := time.Now() @@ -385,7 +385,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS channelID := hashCode % ChannelNum log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: triggerID}} + och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: msgFromMQ.OperationID}} sess.MarkMessage(msg, "") //cMsg = append(cMsg, msg) //och.TriggerCmd(OnlineTopicBusy) From 8ee3f7ab66eef2c15633e3b2058d5684c91c17d1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 14:22:39 +0800 Subject: [PATCH 176/752] pb file --- pkg/proto/sdk_ws/ws.proto | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index c2a89652f..d05d9fff2 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -445,7 +445,12 @@ message ConversationSetPrivateTips{ bool isPrivate = 3; } - +////////////////////message/////////////////////// +message DeleteMessageTips{ + string opUserID = 1; + string userID =2; + repeated string seqList = 3; +} ///cms message RequestPagination { int32 pageNumber = 1; From f8bed154cef611e53dbce6c4f7e900d9c8ced02b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 14:36:24 +0800 Subject: [PATCH 177/752] pb file --- pkg/proto/sdk_ws/ws.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index d05d9fff2..8d9e04fc5 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -449,7 +449,7 @@ message ConversationSetPrivateTips{ message DeleteMessageTips{ string opUserID = 1; string userID =2; - repeated string seqList = 3; + repeated uint32 seqList = 3; } ///cms message RequestPagination { From a4e41462c7ea522465b790bb2ef42f61f4a0dc5d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 14:55:14 +0800 Subject: [PATCH 178/752] message update --- internal/rpc/msg/msg_notification.go | 47 ++++++++++++++++++++++++++++ internal/rpc/msg/send_msg.go | 2 ++ 2 files changed, 49 insertions(+) create mode 100644 internal/rpc/msg/msg_notification.go diff --git a/internal/rpc/msg/msg_notification.go b/internal/rpc/msg/msg_notification.go new file mode 100644 index 000000000..8ecdafbff --- /dev/null +++ b/internal/rpc/msg/msg_notification.go @@ -0,0 +1,47 @@ +package msg + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/log" + open_im_sdk "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" +) + +func DeleteMessageNotification(opUserID, userID string, seqList []uint32, operationID string) { + DeleteMessageTips := open_im_sdk.DeleteMessageTips{OpUserID: opUserID, UserID: userID, SeqList: seqList} + MessageNotification(operationID, userID, userID, constant.DeleteMessageNotification, &DeleteMessageTips) +} + +func MessageNotification(operationID, sendID, recvID string, contentType int32, m proto.Message) { + log.Debug(operationID, utils.GetSelfFuncName(), "args: ", m.String(), contentType) + var err error + var tips open_im_sdk.TipsComm + tips.Detail, err = proto.Marshal(m) + if err != nil { + log.Error(operationID, "Marshal failed ", err.Error(), m.String()) + return + } + + marshaler := jsonpb.Marshaler{ + OrigName: true, + EnumsAsInts: false, + EmitDefaults: false, + } + + tips.JsonDetail, _ = marshaler.MarshalToString(m) + var n NotificationMsg + n.SendID = sendID + n.RecvID = recvID + n.ContentType = contentType + n.SessionType = constant.SingleChatType + n.MsgFrom = constant.SysMsgType + n.OperationID = operationID + n.Content, err = proto.Marshal(&tips) + if err != nil { + log.Error(operationID, "Marshal failed ", err.Error(), tips.String()) + return + } + Notification(&n) +} diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 4fc66bbaf..93f488729 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -706,6 +706,8 @@ func Notification(n *NotificationMsg) { ex = config.Config.Notification.ConversationSetPrivate.OfflinePush.Ext reliabilityLevel = config.Config.Notification.ConversationSetPrivate.Conversation.ReliabilityLevel unReadCount = config.Config.Notification.ConversationSetPrivate.Conversation.UnreadCount + case constant.DeleteMessageNotification: + reliabilityLevel = constant.ReliableNotificationNoMsg } switch reliabilityLevel { case constant.UnreliableNotification: From 18eaae80ec5dfe470f6b12bb2b6c2340d108be34 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 15:09:17 +0800 Subject: [PATCH 179/752] del msg --- internal/rpc/msg/rpcChat.go | 1 + pkg/common/db/redisModel.go | 28 ++++++++++++++++++++++++++++ pkg/utils/utils.go | 3 +++ 3 files changed, 32 insertions(+) diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index 00dc51161..1dee643c7 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -94,6 +94,7 @@ func (rpc *rpcChat) runCh() { if err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID); err != nil { log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList qrgs: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error()) } + db.DataBases.DelMsgFromCache(msg.SeqList, msg.UserID, msg.OperationID) } } } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 79ee58b5a..32ff05326 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -313,3 +313,31 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, } return nil } + +func (d *DataBases) DelMsgFromCache(seqList []uint32, uid, operationID string) { + for _, seq := range seqList { + key := messageCache + uid + "_" + strconv.Itoa(int(seq)) + result, err := redis.String(d.Exec("GET", key)) + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key) + continue + } + log2.Debug(operationID, utils.GetSelfFuncName(), "del result", result) + var msg pbCommon.MsgData + err = utils.String2Pb(result, &msg) + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) + continue + } + msg.Status = 4 + s, err := utils.Pb2String(&msg) + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) + continue + } + _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, msg, s) + } + } +} diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 4c3e9e5f3..5346292ac 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -143,7 +143,10 @@ func Pb2String(pb proto.Message) (string, error) { EmitDefaults: false, } return marshaler.MarshalToString(pb) +} +func String2Pb(s string, pb proto.Message) error { + return proto.Unmarshal([]byte(s), pb) } func Map2Pb(m map[string]interface{}) (pb proto.Message, err error) { From b8641258d6c1ab4cdafb831438ca206c51c7f1f0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 15:21:53 +0800 Subject: [PATCH 180/752] message update --- internal/msg_transfer/logic/init.go | 2 +- .../logic/online_history_msg_handler.go | 29 ++++++++++++++++--- pkg/common/constant/constant.go | 4 +-- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index f8c424dcc..96412fa40 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -16,7 +16,7 @@ const Msg = 2 const ConsumerMsgs = 3 const UserMessages = 4 const MongoMessages = 5 -const ChannelNum = 100 +const ChannelNum = 10 var ( persistentCH PersistentConsumerHandler diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 805eef805..138292fdc 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -9,6 +9,7 @@ import ( "Open_IM/pkg/grpc-etcdv3/getcdv3" pbMsg "Open_IM/pkg/proto/chat" pbPush "Open_IM/pkg/proto/push" + server_api_params "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" "errors" @@ -103,7 +104,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - noStoragepushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + notStoragepushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) @@ -114,7 +115,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { //log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) } else { if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - noStoragepushMsgList = append(noStoragepushMsgList, v) + notStoragepushMsgList = append(notStoragepushMsgList, v) } } @@ -128,7 +129,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) // return //} - log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(noStoragepushMsgList)) + log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragepushMsgList)) err, lastSeq := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) @@ -146,7 +147,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { sendMessageToPush(x, msgChannelValue.userID) } - }(noStoragepushMsgList, storageMsgList) + }(notStoragepushMsgList, storageMsgList) } } @@ -175,6 +176,26 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { if err != nil { log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) } + for _, v := range msgList { + if v.MsgData.ContentType == constant.DeleteMessageNotification { + tips := server_api_params.TipsComm{} + DeleteMessageTips := server_api_params.DeleteMessageTips{} + err := proto.Unmarshal(v.MsgData.Content, &tips) + if err != nil { + log.NewError(triggerID, "tips unmarshal err:", err.Error(), v.String()) + continue + } + err = proto.Unmarshal(tips.Detail, &DeleteMessageTips) + if err != nil { + log.NewError(triggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) + continue + } + if err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { + log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error()) + } + + } + } } } } diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 66a4439e3..d8d305f95 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -46,8 +46,8 @@ const ( GroupMsg = 201 //SysRelated - NotificationBegin = 1000 - + NotificationBegin = 1000 + DeleteMessageNotification = 1100 FriendApplicationApprovedNotification = 1201 //add_friend_response FriendApplicationRejectedNotification = 1202 //add_friend_response FriendApplicationNotification = 1203 //add_friend From e9a515ac34375bbd3f52a6e6744554797994fbcd Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 15:29:38 +0800 Subject: [PATCH 181/752] message update --- pkg/proto/sdk_ws/ws.pb.go | 587 +++++++++++++++++++++----------------- 1 file changed, 322 insertions(+), 265 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 2f5ca5e67..204cdfa50 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{0} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{1} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{2} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{3} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{4} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{5} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{6} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{7} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{8} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{9} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{10} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{11} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{12} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1277,7 +1277,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{13} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{13} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1331,7 +1331,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{14} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{14} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1382,7 +1382,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{15} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{15} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1414,7 +1414,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{16} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{16} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1461,7 +1461,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{17} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{17} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1531,7 +1531,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{18} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{18} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1699,7 +1699,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{19} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{19} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1767,7 +1767,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{20} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{20} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1824,7 +1824,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{21} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{21} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1893,7 +1893,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{22} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{22} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1948,7 +1948,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{23} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{23} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2004,7 +2004,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{24} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{24} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2059,7 +2059,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{25} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{25} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2114,7 +2114,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{26} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{26} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2170,7 +2170,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{27} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{27} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2233,7 +2233,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{28} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{28} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2296,7 +2296,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{29} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{29} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2358,7 +2358,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{30} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{30} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2412,7 +2412,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{31} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{31} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2468,7 +2468,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{32} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{32} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2537,7 +2537,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{33} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{33} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2598,7 +2598,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{34} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{34} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2652,7 +2652,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{35} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{35} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2707,7 +2707,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{36} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{36} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2767,7 +2767,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{37} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{37} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2814,7 +2814,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{38} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{38} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2867,7 +2867,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{39} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{39} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2913,7 +2913,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{40} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{40} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2953,7 +2953,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{41} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{41} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3000,7 +3000,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{42} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{42} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3048,7 +3048,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{43} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{43} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3101,7 +3101,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{44} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{44} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3139,7 +3139,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{45} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{45} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3177,7 +3177,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{46} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{46} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3215,7 +3215,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{47} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{47} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3254,7 +3254,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{48} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{48} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3293,7 +3293,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{49} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{49} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3333,7 +3333,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{50} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{50} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3374,6 +3374,61 @@ func (m *ConversationSetPrivateTips) GetIsPrivate() bool { return false } +// //////////////////message/////////////////////// +type DeleteMessageTips struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } +func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } +func (*DeleteMessageTips) ProtoMessage() {} +func (*DeleteMessageTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{51} +} +func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) +} +func (m *DeleteMessageTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteMessageTips.Marshal(b, m, deterministic) +} +func (dst *DeleteMessageTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteMessageTips.Merge(dst, src) +} +func (m *DeleteMessageTips) XXX_Size() int { + return xxx_messageInfo_DeleteMessageTips.Size(m) +} +func (m *DeleteMessageTips) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteMessageTips.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteMessageTips proto.InternalMessageInfo + +func (m *DeleteMessageTips) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *DeleteMessageTips) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *DeleteMessageTips) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + // /cms type RequestPagination struct { PageNumber int32 `protobuf:"varint,1,opt,name=pageNumber" json:"pageNumber,omitempty"` @@ -3387,7 +3442,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{51} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{52} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3433,7 +3488,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{52} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{53} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3486,7 +3541,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{53} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{54} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3753,7 +3808,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{54} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{55} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4021,7 +4076,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{55} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{56} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4117,7 +4172,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{56} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{57} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4172,7 +4227,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{57} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{58} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4233,7 +4288,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{58} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{59} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4288,7 +4343,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{59} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{60} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4349,7 +4404,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{60} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{61} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4404,7 +4459,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{61} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{62} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4462,7 +4517,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{62} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{63} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4497,7 +4552,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{63} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{64} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4565,7 +4620,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{64} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{65} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4619,7 +4674,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{65} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{66} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4670,7 +4725,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{66} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{67} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4705,7 +4760,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{67} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{68} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4770,7 +4825,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{68} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{69} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -4804,7 +4859,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{69} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{70} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -4864,7 +4919,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_8b0ea2633e539530, []int{70} + return fileDescriptor_ws_e8e186fa2bf7c43d, []int{71} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -4951,6 +5006,7 @@ func init() { proto.RegisterType((*UserInfoUpdatedTips)(nil), "server_api_params.UserInfoUpdatedTips") proto.RegisterType((*ConversationUpdateTips)(nil), "server_api_params.ConversationUpdateTips") proto.RegisterType((*ConversationSetPrivateTips)(nil), "server_api_params.ConversationSetPrivateTips") + proto.RegisterType((*DeleteMessageTips)(nil), "server_api_params.DeleteMessageTips") proto.RegisterType((*RequestPagination)(nil), "server_api_params.RequestPagination") proto.RegisterType((*ResponsePagination)(nil), "server_api_params.ResponsePagination") proto.RegisterType((*SignalReq)(nil), "server_api_params.SignalReq") @@ -4973,199 +5029,200 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_8b0ea2633e539530) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_e8e186fa2bf7c43d) } -var fileDescriptor_ws_8b0ea2633e539530 = []byte{ - // 3049 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcb, 0x6f, 0x24, 0x49, - 0xd1, 0xff, 0xaa, 0xda, 0xdd, 0x76, 0x47, 0xbb, 0xfd, 0xa8, 0x99, 0xcf, 0xdb, 0x98, 0xd9, 0xc1, - 0x14, 0xd6, 0xb2, 0x2c, 0x30, 0x8b, 0x76, 0x85, 0x04, 0xbb, 0x30, 0x68, 0x6c, 0xcf, 0x6b, 0x19, - 0x7b, 0xbc, 0xd5, 0x33, 0x2c, 0x02, 0xa4, 0x55, 0xb9, 0x2b, 0xdd, 0xae, 0x75, 0x55, 0x66, 0x75, - 0x3d, 0x3c, 0x33, 0x08, 0x09, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, - 0xd5, 0x6a, 0x85, 0x40, 0xe2, 0x80, 0x10, 0x07, 0xfe, 0x01, 0x8e, 0x88, 0x0b, 0xe2, 0xcc, 0x95, - 0x03, 0x12, 0x12, 0x28, 0x33, 0xb2, 0xaa, 0x32, 0xab, 0xba, 0xed, 0x9e, 0x96, 0xb5, 0x33, 0xab, - 0xe1, 0xd6, 0x11, 0x95, 0x11, 0x19, 0xf9, 0x8b, 0xc8, 0x8c, 0xc8, 0x47, 0xc3, 0x72, 0xe2, 0x1d, - 0xbf, 0xfd, 0x20, 0x79, 0xf9, 0x41, 0x72, 0x25, 0x8a, 0x59, 0xca, 0xac, 0xd5, 0x84, 0xc4, 0x27, - 0x24, 0x7e, 0xdb, 0x8d, 0xfc, 0xb7, 0x23, 0x37, 0x76, 0xc3, 0xc4, 0xfe, 0xa7, 0x09, 0xed, 0x9b, - 0x31, 0xcb, 0xa2, 0xdb, 0xf4, 0x90, 0x59, 0x3d, 0x98, 0x1f, 0x0a, 0x62, 0xa7, 0x67, 0x6c, 0x18, - 0x2f, 0xb6, 0x9d, 0x9c, 0xb4, 0x2e, 0x41, 0x5b, 0xfc, 0xdc, 0x73, 0x43, 0xd2, 0x33, 0xc5, 0xb7, - 0x92, 0x61, 0xd9, 0xb0, 0x48, 0x59, 0xea, 0x1f, 0xfa, 0x03, 0x37, 0xf5, 0x19, 0xed, 0x35, 0x44, - 0x03, 0x8d, 0xc7, 0xdb, 0xf8, 0x34, 0x8d, 0x99, 0x97, 0x0d, 0x44, 0x9b, 0x39, 0x6c, 0xa3, 0xf2, - 0x78, 0xff, 0x87, 0xee, 0x80, 0xdc, 0x77, 0xee, 0xf4, 0x9a, 0xd8, 0xbf, 0x24, 0xad, 0x0d, 0xe8, - 0xb0, 0x07, 0x94, 0xc4, 0xf7, 0x13, 0x12, 0xdf, 0xde, 0xe9, 0xb5, 0xc4, 0x57, 0x95, 0x65, 0x5d, - 0x06, 0x18, 0xc4, 0xc4, 0x4d, 0xc9, 0x3d, 0x3f, 0x24, 0xbd, 0xf9, 0x0d, 0xe3, 0xc5, 0xae, 0xa3, - 0x70, 0xb8, 0x86, 0x90, 0x84, 0x07, 0x24, 0xde, 0x66, 0x19, 0x4d, 0x7b, 0x0b, 0xa2, 0x81, 0xca, - 0xb2, 0x96, 0xc0, 0x24, 0x0f, 0x7b, 0x6d, 0xa1, 0xda, 0x24, 0x0f, 0xad, 0x35, 0x68, 0x25, 0xa9, - 0x9b, 0x66, 0x49, 0x0f, 0x36, 0x8c, 0x17, 0x9b, 0x8e, 0xa4, 0xac, 0x4d, 0xe8, 0x0a, 0xbd, 0x2c, - 0xb7, 0xa6, 0x23, 0x44, 0x74, 0x66, 0x81, 0xd8, 0xbd, 0x47, 0x11, 0xe9, 0x2d, 0x0a, 0x05, 0x25, - 0xc3, 0xfe, 0x8b, 0x09, 0x17, 0x04, 0xee, 0xbb, 0xc2, 0x80, 0x1b, 0x59, 0x10, 0x9c, 0xe1, 0x81, - 0x35, 0x68, 0x65, 0xd8, 0x1d, 0xc2, 0x2f, 0x29, 0xde, 0x4f, 0xcc, 0x02, 0x72, 0x87, 0x9c, 0x90, - 0x40, 0x00, 0xdf, 0x74, 0x4a, 0x86, 0xb5, 0x0e, 0x0b, 0xef, 0x30, 0x9f, 0x0a, 0x4c, 0xe6, 0xc4, - 0xc7, 0x82, 0xe6, 0xdf, 0xa8, 0x3f, 0x38, 0xa6, 0xdc, 0xa5, 0x08, 0x77, 0x41, 0xab, 0x9e, 0x68, - 0xe9, 0x9e, 0x78, 0x01, 0x96, 0xdc, 0x28, 0xda, 0x75, 0xe9, 0x90, 0xc4, 0xd8, 0xe9, 0xbc, 0xd0, - 0x5b, 0xe1, 0x72, 0x7f, 0xf0, 0x9e, 0xfa, 0x2c, 0x8b, 0x07, 0x44, 0xc0, 0xdd, 0x74, 0x14, 0x0e, - 0xd7, 0xc3, 0x22, 0x12, 0x2b, 0x30, 0x22, 0xf2, 0x15, 0xae, 0xf4, 0x0a, 0x14, 0x5e, 0xe1, 0x7e, - 0xcc, 0x52, 0x72, 0x9d, 0x7a, 0x62, 0x50, 0x1d, 0xe9, 0xc7, 0x92, 0x65, 0xff, 0xc0, 0x80, 0xa5, - 0xfd, 0xec, 0x20, 0xf0, 0x07, 0x42, 0x05, 0x87, 0xb5, 0x04, 0xcf, 0xd0, 0xc0, 0x53, 0x21, 0x30, - 0x27, 0x43, 0xd0, 0xd0, 0x21, 0x58, 0x83, 0xd6, 0x90, 0x50, 0x8f, 0xc4, 0x12, 0x52, 0x49, 0x49, - 0x53, 0x9b, 0xb9, 0xa9, 0xf6, 0x4f, 0x4c, 0x58, 0xf8, 0x80, 0x4d, 0xd8, 0x80, 0x4e, 0x74, 0xc4, - 0x28, 0xd9, 0xcb, 0x78, 0x58, 0x49, 0x5b, 0x54, 0x96, 0x75, 0x11, 0x9a, 0x07, 0x7e, 0x9c, 0x1e, - 0x09, 0xbf, 0x76, 0x1d, 0x24, 0x38, 0x97, 0x84, 0xae, 0x8f, 0xce, 0x6c, 0x3b, 0x48, 0xc8, 0x01, - 0x2d, 0x14, 0xd8, 0xeb, 0x73, 0xac, 0x5d, 0x9b, 0x63, 0xf5, 0xd8, 0x80, 0x71, 0xb1, 0x61, 0xff, - 0xcb, 0x00, 0xb8, 0x11, 0xfb, 0x84, 0x7a, 0x02, 0x9a, 0xca, 0xe4, 0x36, 0xea, 0x93, 0x7b, 0x0d, - 0x5a, 0x31, 0x09, 0xdd, 0xf8, 0x38, 0x0f, 0x7e, 0xa4, 0x2a, 0x06, 0x35, 0x6a, 0x06, 0xbd, 0x0e, - 0x70, 0x28, 0xfa, 0xe1, 0x7a, 0x04, 0x54, 0x9d, 0x57, 0x3e, 0x7a, 0xa5, 0xb6, 0x0c, 0x5e, 0xc9, - 0xbd, 0xe4, 0x28, 0xcd, 0xf9, 0xcc, 0x72, 0x3d, 0x4f, 0x06, 0x70, 0x13, 0x67, 0x56, 0xc1, 0x18, - 0x13, 0xbf, 0xad, 0x53, 0xe2, 0x77, 0xbe, 0x08, 0x8a, 0x7f, 0x18, 0xd0, 0xde, 0x0a, 0xdc, 0xc1, - 0xf1, 0x94, 0x43, 0xd7, 0x87, 0x68, 0xd6, 0x86, 0x78, 0x13, 0xba, 0x07, 0x5c, 0x5d, 0x3e, 0x04, - 0x81, 0x42, 0xe7, 0x95, 0x8f, 0x8f, 0x19, 0xa5, 0x3e, 0x29, 0x1c, 0x5d, 0x4e, 0x1f, 0xee, 0xdc, - 0xd9, 0xc3, 0x6d, 0x9e, 0x32, 0xdc, 0x56, 0x31, 0xdc, 0x3f, 0x9b, 0xb0, 0x28, 0x16, 0x3a, 0x87, - 0x8c, 0x32, 0x92, 0xa4, 0xd6, 0x97, 0x61, 0x21, 0xcb, 0x4d, 0x35, 0xa6, 0x35, 0xb5, 0x10, 0xb1, - 0x5e, 0x93, 0xcb, 0xaa, 0x90, 0x37, 0x85, 0xfc, 0xa5, 0x31, 0xf2, 0x45, 0x4e, 0x73, 0xca, 0xe6, - 0x3c, 0x05, 0x1d, 0xb9, 0xd4, 0x0b, 0x88, 0x43, 0x92, 0x2c, 0x48, 0xe5, 0x6a, 0xa9, 0xf1, 0x30, - 0xd2, 0x46, 0xbb, 0xc9, 0x50, 0x26, 0x28, 0x49, 0x71, 0x74, 0xb0, 0x1d, 0xff, 0x84, 0x43, 0x2f, - 0x19, 0x7c, 0xa2, 0xc6, 0x64, 0x24, 0x3c, 0x84, 0xd3, 0x2a, 0x27, 0xcb, 0x3e, 0x25, 0x6a, 0x18, - 0x08, 0x1a, 0x8f, 0xbb, 0x18, 0x69, 0xa1, 0x00, 0x33, 0x93, 0xc2, 0xa9, 0x26, 0x26, 0xfb, 0xaf, - 0x0d, 0xe8, 0xe2, 0xf4, 0xc9, 0x41, 0xbd, 0xcc, 0xe3, 0x9c, 0x85, 0x5a, 0x14, 0x29, 0x1c, 0x6e, - 0x05, 0xa7, 0xf6, 0xf4, 0x85, 0x46, 0xe3, 0xf1, 0x50, 0xe4, 0xf4, 0x0d, 0x6d, 0xc1, 0x51, 0x59, - 0x79, 0x2f, 0x37, 0xd5, 0x85, 0x47, 0xe1, 0xf0, 0xa5, 0x2c, 0x65, 0x5a, 0x74, 0x14, 0x34, 0x97, - 0x4d, 0x59, 0xd1, 0x3f, 0xc6, 0x87, 0xc2, 0xe1, 0xf8, 0xa6, 0x2c, 0xef, 0x1b, 0x41, 0x2a, 0x19, - 0xa8, 0x59, 0xf6, 0x8b, 0xa9, 0xa4, 0xa0, 0x6b, 0x5e, 0x6d, 0x9f, 0xea, 0x55, 0xd0, 0xbc, 0xaa, - 0x4f, 0xae, 0x4e, 0x6d, 0x72, 0x6d, 0x42, 0x17, 0xf5, 0xe4, 0x41, 0xbf, 0x88, 0xa9, 0x5e, 0x63, - 0xea, 0xb1, 0xd1, 0xad, 0xc6, 0x86, 0xee, 0xdd, 0xa5, 0x09, 0xde, 0x5d, 0x2e, 0xbc, 0xfb, 0x6b, - 0x13, 0x60, 0x87, 0x44, 0x6e, 0x9c, 0x86, 0x84, 0xa6, 0x7c, 0x78, 0x5e, 0x41, 0x15, 0xce, 0xd5, - 0x78, 0x6a, 0x9e, 0x30, 0xf5, 0x3c, 0x61, 0xc1, 0x9c, 0x00, 0x1c, 0xbd, 0x29, 0x7e, 0x73, 0x30, - 0x23, 0x37, 0x46, 0x6d, 0x18, 0xe4, 0x05, 0xcd, 0xf3, 0x00, 0x8b, 0x3d, 0x99, 0x39, 0x9a, 0x0e, - 0x12, 0x7c, 0xf2, 0x97, 0xfd, 0x89, 0x82, 0xa6, 0x85, 0xeb, 0xba, 0xce, 0x3d, 0xb3, 0x06, 0x7b, - 0x09, 0x56, 0x92, 0xec, 0xa0, 0x1c, 0xdc, 0x5e, 0x16, 0xca, 0x70, 0xaf, 0xf1, 0x39, 0xa8, 0x58, - 0x9c, 0xf1, 0x46, 0x98, 0x6a, 0x4a, 0x46, 0xb5, 0x2a, 0xb0, 0xdf, 0x35, 0x61, 0xe5, 0x6e, 0x3c, - 0x74, 0xa9, 0xff, 0x6d, 0x51, 0x6e, 0x8a, 0x05, 0x7c, 0x96, 0x94, 0xbb, 0x01, 0x1d, 0x42, 0x87, - 0x81, 0x9f, 0x1c, 0xed, 0x95, 0xb8, 0xa9, 0x2c, 0x15, 0xec, 0xb9, 0x49, 0x49, 0xb9, 0xa9, 0x25, - 0xe5, 0x35, 0x68, 0x85, 0xec, 0xc0, 0x0f, 0xf2, 0xb8, 0x97, 0x94, 0x88, 0x79, 0x12, 0x10, 0x91, - 0x9d, 0x8b, 0x98, 0xcf, 0x19, 0x65, 0xa2, 0x5e, 0x18, 0x9b, 0xa8, 0xdb, 0x6a, 0xa2, 0xd6, 0x81, - 0x87, 0x1a, 0xf0, 0x08, 0x57, 0xa7, 0x80, 0xeb, 0x8f, 0x06, 0xac, 0x94, 0x70, 0x63, 0x0d, 0x3a, - 0x11, 0xae, 0x6a, 0x04, 0x9a, 0x63, 0x22, 0xb0, 0x88, 0x9b, 0x86, 0x1a, 0x37, 0x3c, 0xd2, 0x58, - 0xe2, 0x2b, 0xf5, 0x7e, 0x41, 0xf3, 0xde, 0x02, 0xe2, 0x2a, 0x60, 0x21, 0xa5, 0x54, 0xdd, 0x2d, - 0xad, 0xea, 0xae, 0xe6, 0xd1, 0xdf, 0x19, 0x70, 0x91, 0x7b, 0xb9, 0x36, 0x8c, 0xbb, 0xb0, 0xc2, - 0x2a, 0x91, 0x20, 0x13, 0xcd, 0x27, 0xc6, 0x24, 0x8a, 0x6a, 0xd0, 0x38, 0x35, 0x61, 0xae, 0xd0, - 0xab, 0x74, 0x22, 0x33, 0xcf, 0x38, 0x85, 0x55, 0x7b, 0x9c, 0x9a, 0xb0, 0xfd, 0x7b, 0x03, 0x56, - 0x30, 0xb5, 0x29, 0xf3, 0xfc, 0xdc, 0xcd, 0x7e, 0x0b, 0x2e, 0x56, 0x7b, 0xbe, 0xe3, 0x27, 0x69, - 0xcf, 0xdc, 0x68, 0x4c, 0x6b, 0xfa, 0x58, 0x05, 0xf6, 0x77, 0xa0, 0xb7, 0x9f, 0x05, 0xc1, 0x2e, - 0x49, 0x12, 0x77, 0x48, 0xb6, 0x1e, 0xf5, 0xc9, 0x88, 0xf3, 0x1d, 0x92, 0x44, 0x7c, 0x72, 0x90, - 0x38, 0xde, 0x66, 0x1e, 0x11, 0xc6, 0x37, 0x9d, 0x9c, 0xe4, 0x7e, 0x25, 0x71, 0xcc, 0x57, 0x48, - 0x59, 0xc2, 0x21, 0x65, 0x5d, 0x81, 0xb9, 0x80, 0x9b, 0xd5, 0x10, 0x66, 0xad, 0x8f, 0x31, 0x6b, - 0x37, 0x19, 0xee, 0xb8, 0xa9, 0xeb, 0x88, 0x76, 0x76, 0x08, 0xcf, 0x8d, 0xef, 0x7d, 0x34, 0x31, - 0x80, 0x79, 0x91, 0x25, 0xaa, 0x14, 0x9f, 0xd1, 0x22, 0x7e, 0x55, 0x16, 0x37, 0x3b, 0x41, 0x3d, - 0xc2, 0x8e, 0xae, 0x93, 0x93, 0xf6, 0x45, 0xb0, 0x6e, 0x92, 0x74, 0xd7, 0x7d, 0x78, 0x8d, 0x7a, - 0xbb, 0x3e, 0xed, 0x93, 0x91, 0x43, 0x46, 0xf6, 0x75, 0xb8, 0x50, 0xe3, 0x26, 0x91, 0x98, 0xe8, - 0xee, 0xc3, 0x3e, 0x19, 0x09, 0x03, 0xba, 0x8e, 0xa4, 0x04, 0x5f, 0xb4, 0x92, 0xf5, 0x9b, 0xa4, - 0xec, 0x11, 0x2c, 0x73, 0x57, 0xf5, 0x09, 0xf5, 0x76, 0x93, 0xa1, 0x50, 0xb1, 0x01, 0x1d, 0x44, - 0x60, 0x37, 0x19, 0x96, 0x05, 0xa1, 0xc2, 0xe2, 0x2d, 0x06, 0x81, 0xcf, 0x5d, 0x22, 0x5a, 0xc8, - 0xd1, 0x28, 0x2c, 0x3e, 0xed, 0x12, 0x22, 0xf7, 0x47, 0x7c, 0x3e, 0x36, 0x9c, 0x82, 0xb6, 0xff, - 0xd6, 0x84, 0x79, 0x09, 0xa8, 0x98, 0x6a, 0xbc, 0x06, 0x2f, 0xf0, 0x42, 0x0a, 0xb3, 0xe5, 0xe0, - 0xa4, 0xdc, 0x6a, 0x22, 0xa5, 0x6e, 0x4e, 0x1b, 0xfa, 0xe6, 0xb4, 0x62, 0xd3, 0x5c, 0xdd, 0xa6, - 0xca, 0xb8, 0x9a, 0xf5, 0x71, 0xf1, 0xe4, 0x20, 0xd6, 0xcb, 0xfd, 0xc0, 0x4d, 0x0f, 0x59, 0x1c, - 0xca, 0x92, 0xba, 0xe9, 0xd4, 0xf8, 0x3c, 0x21, 0x21, 0xaf, 0xa8, 0x28, 0x70, 0x61, 0xa8, 0x70, - 0x79, 0xfe, 0x46, 0x4e, 0x5e, 0x59, 0xe0, 0x5e, 0x46, 0x67, 0xa2, 0x6d, 0x49, 0xe2, 0x33, 0x2a, - 0x72, 0x1b, 0x16, 0x10, 0x2a, 0x8b, 0x8f, 0x3c, 0x4c, 0x86, 0x37, 0x62, 0x16, 0xca, 0x1d, 0x4d, - 0x4e, 0x8a, 0x91, 0x33, 0x9a, 0xe6, 0x79, 0xb1, 0x83, 0xb2, 0x0a, 0x8b, 0xcb, 0x4a, 0x52, 0x54, - 0x0f, 0x8b, 0x4e, 0x4e, 0x5a, 0x2b, 0xd0, 0x48, 0xc8, 0x48, 0x96, 0x04, 0xfc, 0xa7, 0xe6, 0xb9, - 0x65, 0xdd, 0x73, 0x95, 0x35, 0x7e, 0x45, 0x7c, 0x55, 0xd7, 0xf8, 0x72, 0xe1, 0x5c, 0xd5, 0x16, - 0xce, 0x6b, 0x30, 0xcf, 0x22, 0x1e, 0xe7, 0x49, 0xcf, 0x12, 0x73, 0xec, 0x93, 0x93, 0xe7, 0xd8, - 0x95, 0xbb, 0xd8, 0xf2, 0x3a, 0x4d, 0xe3, 0x47, 0x4e, 0x2e, 0x67, 0xdd, 0x81, 0x65, 0x76, 0x78, - 0x18, 0xf8, 0x94, 0xec, 0x67, 0xc9, 0x91, 0x28, 0xbd, 0x2f, 0x88, 0xa5, 0xc9, 0x1e, 0xb7, 0x34, - 0xe9, 0x2d, 0x9d, 0xaa, 0x28, 0xcf, 0x27, 0x6e, 0x8a, 0xa5, 0x93, 0x98, 0x71, 0x17, 0x37, 0x1a, - 0x3c, 0x9f, 0xa8, 0xbc, 0xf5, 0xd7, 0x60, 0x51, 0x35, 0x85, 0x43, 0x75, 0x4c, 0x1e, 0xc9, 0x38, - 0xe5, 0x3f, 0x79, 0xc6, 0x39, 0x71, 0x83, 0x0c, 0x33, 0xf8, 0x82, 0x83, 0xc4, 0x6b, 0xe6, 0x17, - 0x0c, 0xfb, 0xc7, 0x06, 0x2c, 0x57, 0x8c, 0xe0, 0xad, 0x53, 0x3f, 0x0d, 0x88, 0xd4, 0x80, 0x04, - 0xaf, 0x8e, 0x3c, 0x92, 0x0c, 0x64, 0x98, 0x8b, 0xdf, 0x32, 0xcf, 0x34, 0x8a, 0x3d, 0xaf, 0x0d, - 0x8b, 0xfe, 0xdd, 0x3e, 0x57, 0xd4, 0x67, 0x19, 0xf5, 0x8a, 0x73, 0x2b, 0x85, 0xc7, 0xc3, 0xcc, - 0xbf, 0xdb, 0xdf, 0x72, 0xbd, 0x21, 0xc1, 0xd3, 0xa5, 0xa6, 0xb0, 0x49, 0x67, 0xda, 0x1e, 0x2c, - 0xdc, 0xf3, 0xa3, 0x64, 0x9b, 0x85, 0x21, 0x77, 0x96, 0x47, 0x52, 0x9e, 0xc7, 0x0d, 0x11, 0x13, - 0x92, 0xe2, 0xe1, 0xe4, 0x91, 0x43, 0x37, 0x0b, 0x52, 0xde, 0x34, 0x9f, 0xdc, 0x0a, 0x4b, 0x9c, - 0xab, 0x24, 0x8c, 0xee, 0xa0, 0x34, 0xda, 0xa9, 0x70, 0xec, 0x3f, 0x99, 0xb0, 0x22, 0x76, 0x3f, - 0xdb, 0x22, 0x34, 0x3c, 0x21, 0xf4, 0x0a, 0x34, 0xc5, 0x54, 0x95, 0x19, 0xe5, 0xf4, 0x1d, 0x13, - 0x36, 0xb5, 0xae, 0x42, 0x8b, 0x45, 0x22, 0x0d, 0x61, 0xb2, 0x7b, 0x61, 0x92, 0x90, 0x7e, 0x84, - 0xe5, 0x48, 0x29, 0xeb, 0x06, 0x40, 0x58, 0x66, 0x1d, 0x5c, 0xde, 0xa7, 0xd5, 0xa1, 0x48, 0x72, - 0x70, 0x8b, 0xa5, 0xba, 0x38, 0xc7, 0x6a, 0x38, 0x3a, 0xd3, 0xda, 0x83, 0x25, 0x61, 0xf6, 0xdd, - 0x7c, 0xeb, 0x2c, 0x7c, 0x30, 0x7d, 0x8f, 0x15, 0x69, 0xfb, 0xe7, 0x86, 0x84, 0x91, 0x7f, 0xed, - 0x13, 0xc4, 0xbe, 0x84, 0xc4, 0x98, 0x09, 0x92, 0x75, 0x58, 0x08, 0x33, 0x65, 0x27, 0xdf, 0x70, - 0x0a, 0xba, 0x74, 0x51, 0x63, 0x6a, 0x17, 0xd9, 0xbf, 0x30, 0xa0, 0xf7, 0x06, 0xf3, 0xa9, 0xf8, - 0x70, 0x2d, 0x8a, 0x02, 0x79, 0xd8, 0x3a, 0xb3, 0xcf, 0xbf, 0x02, 0x6d, 0x17, 0xd5, 0xd0, 0x54, - 0xba, 0x7d, 0x8a, 0xdd, 0x79, 0x29, 0xa3, 0x6c, 0xb4, 0x1a, 0xea, 0x46, 0xcb, 0x7e, 0xcf, 0x80, - 0x25, 0x04, 0xe5, 0xcd, 0xcc, 0x4f, 0x67, 0xb6, 0x6f, 0x0b, 0x16, 0x46, 0x99, 0x9f, 0xce, 0x10, - 0x95, 0x85, 0x5c, 0x3d, 0x9e, 0x1a, 0x63, 0xe2, 0xc9, 0x7e, 0xdf, 0x80, 0x4b, 0x55, 0x58, 0xaf, - 0x0d, 0x06, 0x24, 0x7a, 0x92, 0x53, 0x4a, 0xdb, 0x68, 0xce, 0x55, 0x36, 0x9a, 0x63, 0x4d, 0x76, - 0xc8, 0x3b, 0x64, 0xf0, 0xf4, 0x9a, 0xfc, 0x7d, 0x13, 0x3e, 0x72, 0xb3, 0x98, 0x78, 0xf7, 0x62, - 0x97, 0x26, 0x87, 0x24, 0x8e, 0x9f, 0xa0, 0xbd, 0x77, 0xa0, 0x4b, 0xc9, 0x83, 0xd2, 0x26, 0x39, - 0x1d, 0xa7, 0x55, 0xa3, 0x0b, 0x4f, 0xb7, 0x76, 0xd9, 0xff, 0x36, 0x60, 0x05, 0xf5, 0x7c, 0xd5, - 0x1f, 0x1c, 0x3f, 0xc1, 0xc1, 0xef, 0xc1, 0xd2, 0xb1, 0xb0, 0x80, 0x53, 0x33, 0x2c, 0xdb, 0x15, - 0xe9, 0x29, 0x87, 0xff, 0x1f, 0x03, 0x56, 0x51, 0xd1, 0x6d, 0x7a, 0xe2, 0x3f, 0xc9, 0x60, 0xdd, - 0x87, 0x65, 0x1f, 0x4d, 0x98, 0x11, 0x80, 0xaa, 0xf8, 0x94, 0x08, 0xfc, 0xd6, 0x80, 0x65, 0xd4, - 0x74, 0x9d, 0xa6, 0x24, 0x9e, 0x79, 0xfc, 0xb7, 0xa0, 0x43, 0x68, 0x1a, 0xbb, 0x74, 0x96, 0x15, - 0x52, 0x15, 0x9d, 0x72, 0x91, 0x7c, 0xcf, 0x00, 0x4b, 0xa8, 0xda, 0xf1, 0x93, 0xd0, 0x4f, 0x92, - 0x27, 0xe8, 0xba, 0xe9, 0x0c, 0xfe, 0xa9, 0x09, 0x17, 0x15, 0x2d, 0xbb, 0x59, 0xfa, 0xb4, 0x9b, - 0x6c, 0xed, 0x40, 0x9b, 0xd7, 0x08, 0xea, 0x0d, 0xc6, 0xb4, 0x1d, 0x95, 0x82, 0xbc, 0x8a, 0x15, - 0x44, 0x9f, 0x0c, 0x18, 0xf5, 0x12, 0x51, 0x1c, 0x75, 0x1d, 0x8d, 0xc7, 0x97, 0xa1, 0x75, 0x45, - 0xcd, 0xb6, 0x4b, 0x07, 0x24, 0x78, 0x66, 0x20, 0xb2, 0x7f, 0x65, 0xc0, 0x12, 0x36, 0x79, 0xfa, - 0x87, 0xcc, 0x73, 0x3d, 0x06, 0xf2, 0x87, 0xc6, 0x4b, 0x3c, 0xbc, 0xd6, 0x14, 0x2d, 0x6a, 0x5d, - 0xfd, 0xf4, 0x86, 0xd6, 0x2d, 0xe8, 0x0c, 0x8e, 0x5c, 0x3a, 0x9c, 0x29, 0xb8, 0x54, 0x51, 0x3b, - 0x85, 0xe7, 0xd4, 0x43, 0xbb, 0x6d, 0xfc, 0x24, 0x86, 0xff, 0x6a, 0x65, 0x28, 0xa7, 0xde, 0x50, - 0x3e, 0x1e, 0xe8, 0xc7, 0xb0, 0x8a, 0x37, 0x45, 0x4a, 0x4d, 0x68, 0xf5, 0x60, 0xde, 0xf5, 0xf0, - 0x90, 0xc1, 0x10, 0x42, 0x39, 0xa9, 0xdf, 0x01, 0xca, 0x67, 0x1e, 0xe5, 0x1d, 0xe0, 0x65, 0x00, - 0xd7, 0xf3, 0xde, 0x62, 0xb1, 0xe7, 0xd3, 0xbc, 0xc0, 0x57, 0x38, 0xf6, 0x1b, 0xb0, 0x78, 0x23, - 0x66, 0xe1, 0x3d, 0xe5, 0xce, 0xe7, 0xd4, 0x5b, 0x29, 0xf5, 0xbe, 0xc8, 0xd4, 0xef, 0x8b, 0xec, - 0x6f, 0xc1, 0xff, 0xd7, 0x0c, 0x17, 0x60, 0x6d, 0xe3, 0x55, 0x56, 0xde, 0x89, 0x0c, 0x99, 0x8f, - 0x8d, 0x81, 0x4c, 0xb5, 0xc5, 0xd1, 0x84, 0xec, 0xef, 0x19, 0xf0, 0x7c, 0x4d, 0xfd, 0xb5, 0x28, - 0x8a, 0xd9, 0x89, 0xf4, 0xc9, 0x79, 0x74, 0xa3, 0x17, 0xbf, 0x66, 0xb5, 0xf8, 0x1d, 0x6b, 0x84, - 0x56, 0xb0, 0x7f, 0x00, 0x46, 0xfc, 0xd2, 0x80, 0x65, 0x69, 0x84, 0xe7, 0xc9, 0x6e, 0x3f, 0x0f, - 0x2d, 0xbc, 0x06, 0x97, 0x1d, 0x3e, 0x3f, 0xb6, 0xc3, 0xfc, 0xfa, 0xde, 0x91, 0x8d, 0xeb, 0x11, - 0x69, 0x8e, 0x9b, 0x51, 0x5f, 0x2c, 0x82, 0x7d, 0xea, 0x8b, 0x6a, 0x29, 0x60, 0x7f, 0x3d, 0x0f, - 0xe6, 0x1d, 0x12, 0x90, 0xf3, 0xc4, 0xc8, 0xbe, 0x0f, 0x4b, 0xe2, 0x4e, 0xbe, 0xc4, 0xe0, 0x5c, - 0xd4, 0xbe, 0x05, 0x2b, 0x42, 0xed, 0xb9, 0xdb, 0x5b, 0xcc, 0x0e, 0x8e, 0x8f, 0xba, 0x94, 0x9c, - 0x8b, 0xf6, 0xcf, 0xc2, 0x85, 0x1c, 0xfb, 0xfb, 0x91, 0x57, 0x1c, 0x22, 0x4d, 0x38, 0x5e, 0xb7, - 0x3f, 0x07, 0x6b, 0xdb, 0x8c, 0x9e, 0x90, 0x38, 0xc1, 0xcb, 0x07, 0x21, 0x92, 0x4b, 0x68, 0x93, - 0x5f, 0x52, 0xf6, 0x3b, 0xb0, 0xae, 0x4a, 0xf4, 0x49, 0xba, 0x1f, 0xfb, 0x27, 0x8a, 0x94, 0x3c, - 0x7e, 0x36, 0xb4, 0xe3, 0xe7, 0xf2, 0xb8, 0xda, 0xd4, 0x8e, 0xab, 0x2f, 0x41, 0xdb, 0x4f, 0xa4, - 0x02, 0x11, 0x54, 0x0b, 0x4e, 0xc9, 0xb0, 0xfb, 0xb0, 0x2a, 0x6f, 0xc9, 0xf7, 0xdd, 0xa1, 0x4f, - 0x71, 0x05, 0xbc, 0x0c, 0x10, 0xb9, 0xc3, 0xfc, 0x95, 0x0c, 0xde, 0x54, 0x28, 0x1c, 0xfe, 0x3d, - 0x39, 0x62, 0x0f, 0xe4, 0x77, 0x13, 0xbf, 0x97, 0x1c, 0xfb, 0x6b, 0x60, 0x39, 0x24, 0x89, 0x18, - 0x4d, 0x88, 0xa2, 0x75, 0x03, 0x3a, 0xdb, 0x59, 0x1c, 0x13, 0xca, 0xbb, 0xca, 0x9f, 0x8c, 0xa8, - 0x2c, 0xae, 0xb7, 0x5f, 0xea, 0xc5, 0xd3, 0x6d, 0x85, 0x63, 0xff, 0xac, 0x01, 0xed, 0xbe, 0x3f, - 0xa4, 0x6e, 0xe0, 0x90, 0x91, 0xf5, 0x25, 0x68, 0xe1, 0x7e, 0x42, 0xba, 0x71, 0xdc, 0x69, 0x2b, - 0xb6, 0xc6, 0x8d, 0x93, 0x43, 0x46, 0xb7, 0xfe, 0xcf, 0x91, 0x32, 0xd6, 0x9b, 0xd0, 0xc5, 0x5f, - 0xb7, 0xf1, 0x7c, 0x48, 0x26, 0x97, 0x4f, 0x9d, 0xa1, 0x44, 0xb6, 0x46, 0x5d, 0xba, 0x06, 0x6e, - 0xd0, 0x40, 0xd4, 0x1b, 0x72, 0xee, 0x4e, 0x36, 0x08, 0xcb, 0x12, 0x69, 0x10, 0xca, 0x70, 0x69, - 0x57, 0x9c, 0xa0, 0xc8, 0x34, 0x3a, 0x59, 0x1a, 0x0f, 0x5a, 0xa4, 0x34, 0xca, 0x70, 0xe9, 0xa3, - 0x8c, 0x0e, 0xef, 0x47, 0xf2, 0x60, 0x6f, 0xb2, 0xf4, 0x2d, 0xd1, 0x4c, 0x4a, 0xa3, 0x0c, 0x97, - 0x8e, 0xc5, 0xca, 0x2a, 0x40, 0x3f, 0x4d, 0x1a, 0x17, 0x60, 0x29, 0x8d, 0x32, 0x5b, 0x6d, 0x98, - 0x8f, 0xdc, 0x47, 0x01, 0x73, 0x3d, 0xfb, 0xdd, 0x06, 0x40, 0xde, 0x30, 0x11, 0x55, 0x88, 0xe6, - 0xa2, 0xcd, 0x33, 0x5d, 0x14, 0x05, 0x8f, 0x14, 0x27, 0xf5, 0xc7, 0x3b, 0xe9, 0xd3, 0xd3, 0x3a, - 0x09, 0xb5, 0x55, 0xdc, 0x74, 0xb5, 0xe2, 0xa6, 0xcd, 0x33, 0xdd, 0x24, 0x8d, 0x92, 0x8e, 0xba, - 0x5a, 0x71, 0xd4, 0xe6, 0x99, 0x8e, 0x92, 0xf2, 0xd2, 0x55, 0x57, 0x2b, 0xae, 0xda, 0x3c, 0xd3, - 0x55, 0x52, 0x5e, 0x3a, 0xeb, 0x6a, 0xc5, 0x59, 0x9b, 0x67, 0x3a, 0x4b, 0xca, 0xd7, 0xdd, 0xf5, - 0xbe, 0x09, 0x4b, 0x02, 0x32, 0xbc, 0xe9, 0xa3, 0x87, 0x4c, 0x1c, 0xd6, 0x0b, 0xb8, 0xf4, 0x47, - 0x57, 0x3a, 0xd3, 0xfa, 0x0c, 0xac, 0x22, 0x83, 0x28, 0x37, 0x15, 0xa6, 0xb8, 0xa9, 0xa8, 0x7f, - 0x10, 0x77, 0x33, 0x59, 0x92, 0xb2, 0x70, 0xc7, 0x4d, 0xdd, 0xbc, 0x32, 0x2a, 0x39, 0xea, 0xcd, - 0xd9, 0x5c, 0xed, 0x59, 0x67, 0xcc, 0x58, 0x58, 0x5c, 0x89, 0x49, 0x8a, 0x4b, 0xa4, 0x7e, 0x48, - 0x58, 0x96, 0xca, 0x65, 0x22, 0x27, 0xf1, 0x61, 0x84, 0xe7, 0xbb, 0xe2, 0xbe, 0x49, 0xbe, 0x1a, - 0x28, 0x18, 0x62, 0x65, 0x2b, 0xef, 0xcf, 0xe4, 0xb3, 0xcb, 0x92, 0x73, 0xf6, 0x5d, 0x97, 0xfd, - 0x77, 0x03, 0x2e, 0xec, 0xbb, 0x71, 0xea, 0x0f, 0xfc, 0xc8, 0xa5, 0xe9, 0x2e, 0x49, 0x5d, 0x31, - 0x06, 0xed, 0xe5, 0x95, 0xf1, 0x78, 0x2f, 0xaf, 0xf6, 0x61, 0x79, 0xa8, 0x97, 0xfe, 0x8f, 0x59, - 0xb5, 0x57, 0xc5, 0xb5, 0x67, 0x64, 0x8d, 0xc7, 0x7e, 0x46, 0x66, 0xff, 0xd0, 0x84, 0xe5, 0xca, - 0xd2, 0xc9, 0xcb, 0x51, 0x2c, 0x34, 0x8a, 0x98, 0x28, 0x68, 0xeb, 0x1a, 0x80, 0x5f, 0x84, 0xd1, - 0x29, 0x27, 0xe3, 0x7a, 0xac, 0x39, 0x8a, 0xd0, 0xb8, 0x4b, 0xb4, 0xc6, 0xec, 0x97, 0x68, 0xb7, - 0xa0, 0x13, 0x95, 0x4e, 0x3a, 0x65, 0x63, 0x32, 0xc6, 0x95, 0x8e, 0x2a, 0x6a, 0x7f, 0x13, 0x56, - 0x6b, 0x2b, 0x94, 0xb8, 0x2f, 0x63, 0xc7, 0x84, 0x16, 0xf7, 0x65, 0x9c, 0x50, 0x82, 0xd5, 0xac, - 0x06, 0x6b, 0xe0, 0x9f, 0xa8, 0xef, 0x54, 0x25, 0x69, 0xff, 0xc8, 0x84, 0xb5, 0xf1, 0xd9, 0xe5, - 0x59, 0x85, 0xfb, 0x00, 0x7a, 0x93, 0x56, 0xf2, 0x73, 0x43, 0xbd, 0x8c, 0xee, 0x22, 0x0f, 0x3f, - 0xab, 0x70, 0x5f, 0xc8, 0xa3, 0x5b, 0x49, 0x75, 0xf6, 0x6f, 0x0a, 0x7c, 0x8a, 0x4a, 0xe3, 0x19, - 0xc5, 0xc7, 0x7a, 0x09, 0x56, 0x70, 0x98, 0xca, 0xab, 0x0b, 0x2c, 0x5c, 0x6b, 0xfc, 0x72, 0xa5, - 0x50, 0xd2, 0xfe, 0xb9, 0xc5, 0xec, 0x1f, 0x8c, 0xdc, 0x27, 0x45, 0xfd, 0xf6, 0xa1, 0xf2, 0x49, - 0x19, 0x69, 0x4a, 0x51, 0xa3, 0x44, 0x5a, 0x51, 0x57, 0xfe, 0x2f, 0xd2, 0xce, 0x8e, 0xb4, 0x02, - 0x4b, 0xa5, 0xc0, 0xb3, 0xbf, 0x0b, 0xdd, 0x1d, 0x12, 0xec, 0x26, 0xc3, 0xfc, 0xbd, 0xd7, 0x69, - 0x40, 0x4e, 0xfa, 0xbb, 0xcc, 0xc4, 0x97, 0x5e, 0xd5, 0x57, 0x62, 0x73, 0xb5, 0x57, 0x62, 0xf6, - 0x16, 0x2c, 0xa9, 0x06, 0xcc, 0xf2, 0xdc, 0x6d, 0xeb, 0xd2, 0x37, 0xd6, 0xaf, 0xbc, 0x8c, 0x7f, - 0xcc, 0x7a, 0xbd, 0x06, 0xe2, 0x41, 0x4b, 0xfc, 0x51, 0xeb, 0xd5, 0xff, 0x06, 0x00, 0x00, 0xff, - 0xff, 0xf8, 0x91, 0x1b, 0x32, 0xbb, 0x35, 0x00, 0x00, +var fileDescriptor_ws_e8e186fa2bf7c43d = []byte{ + // 3059 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x6f, 0x24, 0x57, + 0xf1, 0xbf, 0xee, 0xf1, 0x8c, 0x3d, 0x35, 0xfe, 0xec, 0xdd, 0x9f, 0x33, 0x98, 0xcd, 0x62, 0x1a, + 0x2b, 0x84, 0x00, 0x1b, 0x94, 0x08, 0x09, 0x12, 0x58, 0xb4, 0xb6, 0xf7, 0x2b, 0xac, 0xbd, 0x4e, + 0xcf, 0x2e, 0x41, 0x80, 0x14, 0xb5, 0xa7, 0x9f, 0xc7, 0x1d, 0xf7, 0xf4, 0xeb, 0xe9, 0x0f, 0xef, + 0x2e, 0x42, 0x42, 0x02, 0x09, 0x71, 0xe3, 0x04, 0x07, 0x2e, 0x48, 0x5c, 0x10, 0x28, 0x8a, 0x22, + 0x04, 0x12, 0x07, 0x84, 0x38, 0xf0, 0x0f, 0x70, 0x44, 0x5c, 0x10, 0x67, 0xae, 0x1c, 0x90, 0x90, + 0x40, 0xaf, 0xea, 0x75, 0xf7, 0x7b, 0xdd, 0x33, 0xf6, 0xac, 0x65, 0x65, 0x37, 0x5a, 0x6e, 0x53, + 0xd5, 0xaf, 0xea, 0xd5, 0xab, 0xaa, 0x57, 0x55, 0xef, 0xd5, 0x1b, 0x58, 0x4a, 0xbc, 0xa3, 0xb7, + 0x1f, 0x24, 0x2f, 0x3f, 0x48, 0xae, 0x44, 0x31, 0x4f, 0xb9, 0xb5, 0x92, 0xb0, 0xf8, 0x98, 0xc5, + 0x6f, 0xbb, 0x91, 0xff, 0x76, 0xe4, 0xc6, 0xee, 0x30, 0xb1, 0xff, 0x69, 0x42, 0xfb, 0x66, 0xcc, + 0xb3, 0xe8, 0x76, 0x78, 0xc0, 0xad, 0x2e, 0xcc, 0x0e, 0x10, 0xd8, 0xee, 0x1a, 0xeb, 0xc6, 0x8b, + 0x6d, 0x27, 0x07, 0xad, 0x4b, 0xd0, 0xc6, 0x9f, 0xbb, 0xee, 0x90, 0x75, 0x4d, 0xfc, 0x56, 0x22, + 0x2c, 0x1b, 0xe6, 0x43, 0x9e, 0xfa, 0x07, 0x7e, 0xdf, 0x4d, 0x7d, 0x1e, 0x76, 0x1b, 0x38, 0x40, + 0xc3, 0x89, 0x31, 0x7e, 0x98, 0xc6, 0xdc, 0xcb, 0xfa, 0x38, 0x66, 0x86, 0xc6, 0xa8, 0x38, 0x31, + 0xff, 0x81, 0xdb, 0x67, 0xf7, 0x9d, 0x3b, 0xdd, 0x26, 0xcd, 0x2f, 0x41, 0x6b, 0x1d, 0x3a, 0xfc, + 0x41, 0xc8, 0xe2, 0xfb, 0x09, 0x8b, 0x6f, 0x6f, 0x77, 0x5b, 0xf8, 0x55, 0x45, 0x59, 0x97, 0x01, + 0xfa, 0x31, 0x73, 0x53, 0x76, 0xcf, 0x1f, 0xb2, 0xee, 0xec, 0xba, 0xf1, 0xe2, 0x82, 0xa3, 0x60, + 0x04, 0x87, 0x21, 0x1b, 0xee, 0xb3, 0x78, 0x8b, 0x67, 0x61, 0xda, 0x9d, 0xc3, 0x01, 0x2a, 0xca, + 0x5a, 0x04, 0x93, 0x3d, 0xec, 0xb6, 0x91, 0xb5, 0xc9, 0x1e, 0x5a, 0xab, 0xd0, 0x4a, 0x52, 0x37, + 0xcd, 0x92, 0x2e, 0xac, 0x1b, 0x2f, 0x36, 0x1d, 0x09, 0x59, 0x1b, 0xb0, 0x80, 0x7c, 0x79, 0x2e, + 0x4d, 0x07, 0x49, 0x74, 0x64, 0xa1, 0xb1, 0x7b, 0x8f, 0x22, 0xd6, 0x9d, 0x47, 0x06, 0x25, 0xc2, + 0xfe, 0x8b, 0x09, 0x17, 0x50, 0xef, 0x3b, 0x28, 0xc0, 0x8d, 0x2c, 0x08, 0x4e, 0xb1, 0xc0, 0x2a, + 0xb4, 0x32, 0x9a, 0x8e, 0xd4, 0x2f, 0x21, 0x31, 0x4f, 0xcc, 0x03, 0x76, 0x87, 0x1d, 0xb3, 0x00, + 0x15, 0xdf, 0x74, 0x4a, 0x84, 0xb5, 0x06, 0x73, 0xef, 0x70, 0x3f, 0x44, 0x9d, 0xcc, 0xe0, 0xc7, + 0x02, 0x16, 0xdf, 0x42, 0xbf, 0x7f, 0x14, 0x0a, 0x93, 0x92, 0xba, 0x0b, 0x58, 0xb5, 0x44, 0x4b, + 0xb7, 0xc4, 0x0b, 0xb0, 0xe8, 0x46, 0xd1, 0x8e, 0x1b, 0x0e, 0x58, 0x4c, 0x93, 0xce, 0x22, 0xdf, + 0x0a, 0x56, 0xd8, 0x43, 0xcc, 0xd4, 0xe3, 0x59, 0xdc, 0x67, 0xa8, 0xee, 0xa6, 0xa3, 0x60, 0x04, + 0x1f, 0x1e, 0xb1, 0x58, 0x51, 0x23, 0x69, 0xbe, 0x82, 0x95, 0x56, 0x81, 0xc2, 0x2a, 0xc2, 0x8e, + 0x59, 0xca, 0xae, 0x87, 0x1e, 0x2e, 0xaa, 0x23, 0xed, 0x58, 0xa2, 0xec, 0x1f, 0x18, 0xb0, 0xb8, + 0x97, 0xed, 0x07, 0x7e, 0x1f, 0x59, 0x08, 0xb5, 0x96, 0xca, 0x33, 0x34, 0xe5, 0xa9, 0x2a, 0x30, + 0x27, 0xab, 0xa0, 0xa1, 0xab, 0x60, 0x15, 0x5a, 0x03, 0x16, 0x7a, 0x2c, 0x96, 0x2a, 0x95, 0x90, + 0x14, 0xb5, 0x99, 0x8b, 0x6a, 0xff, 0xc4, 0x84, 0xb9, 0x0f, 0x58, 0x84, 0x75, 0xe8, 0x44, 0x87, + 0x3c, 0x64, 0xbb, 0x99, 0x70, 0x2b, 0x29, 0x8b, 0x8a, 0xb2, 0x2e, 0x42, 0x73, 0xdf, 0x8f, 0xd3, + 0x43, 0xb4, 0xeb, 0x82, 0x43, 0x80, 0xc0, 0xb2, 0xa1, 0xeb, 0x93, 0x31, 0xdb, 0x0e, 0x01, 0x72, + 0x41, 0x73, 0x85, 0xee, 0xf5, 0x3d, 0xd6, 0xae, 0xed, 0xb1, 0xba, 0x6f, 0xc0, 0x38, 0xdf, 0xb0, + 0xff, 0x65, 0x00, 0xdc, 0x88, 0x7d, 0x16, 0x7a, 0xa8, 0x9a, 0xca, 0xe6, 0x36, 0xea, 0x9b, 0x7b, + 0x15, 0x5a, 0x31, 0x1b, 0xba, 0xf1, 0x51, 0xee, 0xfc, 0x04, 0x55, 0x04, 0x6a, 0xd4, 0x04, 0x7a, + 0x1d, 0xe0, 0x00, 0xe7, 0x11, 0x7c, 0x50, 0x55, 0x9d, 0x57, 0x3e, 0x7a, 0xa5, 0x16, 0x06, 0xaf, + 0xe4, 0x56, 0x72, 0x94, 0xe1, 0x62, 0x67, 0xb9, 0x9e, 0x27, 0x1d, 0xb8, 0x49, 0x3b, 0xab, 0x40, + 0x8c, 0xf1, 0xdf, 0xd6, 0x09, 0xfe, 0x3b, 0x5b, 0x38, 0xc5, 0x3f, 0x0c, 0x68, 0x6f, 0x06, 0x6e, + 0xff, 0x68, 0xca, 0xa5, 0xeb, 0x4b, 0x34, 0x6b, 0x4b, 0xbc, 0x09, 0x0b, 0xfb, 0x82, 0x5d, 0xbe, + 0x04, 0xd4, 0x42, 0xe7, 0x95, 0x8f, 0x8f, 0x59, 0xa5, 0xbe, 0x29, 0x1c, 0x9d, 0x4e, 0x5f, 0xee, + 0xcc, 0xe9, 0xcb, 0x6d, 0x9e, 0xb0, 0xdc, 0x56, 0xb1, 0xdc, 0x3f, 0x9b, 0x30, 0x8f, 0x81, 0xce, + 0x61, 0xa3, 0x8c, 0x25, 0xa9, 0xf5, 0x65, 0x98, 0xcb, 0x72, 0x51, 0x8d, 0x69, 0x45, 0x2d, 0x48, + 0xac, 0xd7, 0x64, 0x58, 0x45, 0x7a, 0x13, 0xe9, 0x2f, 0x8d, 0xa1, 0x2f, 0x72, 0x9a, 0x53, 0x0e, + 0x17, 0x29, 0xe8, 0xd0, 0x0d, 0xbd, 0x80, 0x39, 0x2c, 0xc9, 0x82, 0x54, 0x46, 0x4b, 0x0d, 0x47, + 0x9e, 0x36, 0xda, 0x49, 0x06, 0x32, 0x41, 0x49, 0x48, 0x68, 0x87, 0xc6, 0x89, 0x4f, 0xb4, 0xf4, + 0x12, 0x21, 0x36, 0x6a, 0xcc, 0x46, 0x68, 0x21, 0xda, 0x56, 0x39, 0x58, 0xce, 0x29, 0xb5, 0x46, + 0x8e, 0xa0, 0xe1, 0x84, 0x89, 0x09, 0x46, 0x06, 0x94, 0x99, 0x14, 0x4c, 0x35, 0x31, 0xd9, 0x7f, + 0x6d, 0xc0, 0x02, 0x6d, 0x9f, 0x5c, 0xa9, 0x97, 0x85, 0x9f, 0xf3, 0xa1, 0xe6, 0x45, 0x0a, 0x46, + 0x48, 0x21, 0xa0, 0x5d, 0x3d, 0xd0, 0x68, 0x38, 0xe1, 0x8a, 0x02, 0xbe, 0xa1, 0x05, 0x1c, 0x15, + 0x95, 0xcf, 0x72, 0x53, 0x0d, 0x3c, 0x0a, 0x46, 0x84, 0xb2, 0x94, 0x6b, 0xde, 0x51, 0xc0, 0x82, + 0x36, 0xe5, 0xc5, 0xfc, 0xe4, 0x1f, 0x0a, 0x46, 0xe8, 0x37, 0xe5, 0xf9, 0xdc, 0xa4, 0xa4, 0x12, + 0x41, 0x9c, 0xe5, 0xbc, 0x94, 0x4a, 0x0a, 0xb8, 0x66, 0xd5, 0xf6, 0x89, 0x56, 0x05, 0xcd, 0xaa, + 0xfa, 0xe6, 0xea, 0xd4, 0x36, 0xd7, 0x06, 0x2c, 0x10, 0x9f, 0xdc, 0xe9, 0xe7, 0x29, 0xd5, 0x6b, + 0x48, 0xdd, 0x37, 0x16, 0xaa, 0xbe, 0xa1, 0x5b, 0x77, 0x71, 0x82, 0x75, 0x97, 0x0a, 0xeb, 0xfe, + 0xda, 0x04, 0xd8, 0x66, 0x91, 0x1b, 0xa7, 0x43, 0x16, 0xa6, 0x62, 0x79, 0x5e, 0x01, 0x15, 0xc6, + 0xd5, 0x70, 0x6a, 0x9e, 0x30, 0xf5, 0x3c, 0x61, 0xc1, 0x0c, 0x2a, 0x9c, 0xac, 0x89, 0xbf, 0x85, + 0x32, 0x23, 0x37, 0x26, 0x6e, 0xe4, 0xe4, 0x05, 0x2c, 0xf2, 0x00, 0x8f, 0x3d, 0x99, 0x39, 0x9a, + 0x0e, 0x01, 0x62, 0xf3, 0x97, 0xf3, 0x61, 0x41, 0xd3, 0xa2, 0xb8, 0xae, 0x63, 0x4f, 0xad, 0xc1, + 0x5e, 0x82, 0xe5, 0x24, 0xdb, 0x2f, 0x17, 0xb7, 0x9b, 0x0d, 0xa5, 0xbb, 0xd7, 0xf0, 0x42, 0xa9, + 0x54, 0x9c, 0x89, 0x41, 0x94, 0x6a, 0x4a, 0x44, 0xb5, 0x2a, 0xb0, 0xdf, 0x35, 0x61, 0xf9, 0x6e, + 0x3c, 0x70, 0x43, 0xff, 0xdb, 0x58, 0x6e, 0x62, 0x00, 0x3f, 0x4b, 0xca, 0x5d, 0x87, 0x0e, 0x0b, + 0x07, 0x81, 0x9f, 0x1c, 0xee, 0x96, 0x7a, 0x53, 0x51, 0xaa, 0xb2, 0x67, 0x26, 0x25, 0xe5, 0xa6, + 0x96, 0x94, 0x57, 0xa1, 0x35, 0xe4, 0xfb, 0x7e, 0x90, 0xfb, 0xbd, 0x84, 0xd0, 0xe7, 0x59, 0xc0, + 0x30, 0x3b, 0x17, 0x3e, 0x9f, 0x23, 0xca, 0x44, 0x3d, 0x37, 0x36, 0x51, 0xb7, 0xd5, 0x44, 0xad, + 0x2b, 0x1e, 0x6a, 0x8a, 0x27, 0x75, 0x75, 0x0a, 0x75, 0xfd, 0xd1, 0x80, 0xe5, 0x52, 0xdd, 0x54, + 0x83, 0x4e, 0x54, 0x57, 0xd5, 0x03, 0xcd, 0x31, 0x1e, 0x58, 0xf8, 0x4d, 0x43, 0xf5, 0x1b, 0xe1, + 0x69, 0x3c, 0xf1, 0x95, 0x7a, 0xbf, 0x80, 0xc5, 0x6c, 0x01, 0x73, 0x15, 0x65, 0x11, 0xa4, 0x54, + 0xdd, 0x2d, 0xad, 0xea, 0xae, 0xe6, 0xd1, 0xdf, 0x19, 0x70, 0x51, 0x58, 0xb9, 0xb6, 0x8c, 0xbb, + 0xb0, 0xcc, 0x2b, 0x9e, 0x20, 0x13, 0xcd, 0x27, 0xc6, 0x24, 0x8a, 0xaa, 0xd3, 0x38, 0x35, 0x62, + 0xc1, 0xd0, 0xab, 0x4c, 0x22, 0x33, 0xcf, 0x38, 0x86, 0x55, 0x79, 0x9c, 0x1a, 0xb1, 0xfd, 0x7b, + 0x03, 0x96, 0x29, 0xb5, 0x29, 0xfb, 0xfc, 0xdc, 0xc5, 0x7e, 0x0b, 0x2e, 0x56, 0x67, 0xbe, 0xe3, + 0x27, 0x69, 0xd7, 0x5c, 0x6f, 0x4c, 0x2b, 0xfa, 0x58, 0x06, 0xf6, 0x77, 0xa0, 0xbb, 0x97, 0x05, + 0xc1, 0x0e, 0x4b, 0x12, 0x77, 0xc0, 0x36, 0x1f, 0xf5, 0xd8, 0x48, 0xe0, 0x1d, 0x96, 0x44, 0x62, + 0x73, 0xb0, 0x38, 0xde, 0xe2, 0x1e, 0x43, 0xe1, 0x9b, 0x4e, 0x0e, 0x0a, 0xbb, 0xb2, 0x38, 0x16, + 0x11, 0x52, 0x96, 0x70, 0x04, 0x59, 0x57, 0x60, 0x26, 0x10, 0x62, 0x35, 0x50, 0xac, 0xb5, 0x31, + 0x62, 0xed, 0x24, 0x83, 0x6d, 0x37, 0x75, 0x1d, 0x1c, 0x67, 0x0f, 0xe1, 0xb9, 0xf1, 0xb3, 0x8f, + 0x26, 0x3a, 0xb0, 0x28, 0xb2, 0xb0, 0x4a, 0xf1, 0x79, 0x58, 0xf8, 0xaf, 0x8a, 0x12, 0x62, 0x27, + 0xc4, 0x07, 0xe5, 0x58, 0x70, 0x72, 0xd0, 0xbe, 0x08, 0xd6, 0x4d, 0x96, 0xee, 0xb8, 0x0f, 0xaf, + 0x85, 0xde, 0x8e, 0x1f, 0xf6, 0xd8, 0xc8, 0x61, 0x23, 0xfb, 0x3a, 0x5c, 0xa8, 0x61, 0x93, 0x08, + 0x37, 0xba, 0xfb, 0xb0, 0xc7, 0x46, 0x28, 0xc0, 0x82, 0x23, 0x21, 0xc4, 0xe3, 0x28, 0x59, 0xbf, + 0x49, 0xc8, 0x1e, 0xc1, 0x92, 0x30, 0x55, 0x8f, 0x85, 0xde, 0x4e, 0x32, 0x40, 0x16, 0xeb, 0xd0, + 0x21, 0x0d, 0xec, 0x24, 0x83, 0xb2, 0x20, 0x54, 0x50, 0x62, 0x44, 0x3f, 0xf0, 0x85, 0x49, 0x70, + 0x84, 0x5c, 0x8d, 0x82, 0x12, 0xdb, 0x2e, 0x61, 0xf2, 0x7c, 0x24, 0xf6, 0x63, 0xc3, 0x29, 0x60, + 0xfb, 0x6f, 0x4d, 0x98, 0x95, 0x0a, 0xc5, 0xad, 0x26, 0x6a, 0xf0, 0x42, 0x5f, 0x04, 0x51, 0xb6, + 0xec, 0x1f, 0x97, 0x47, 0x4d, 0x82, 0xd4, 0xc3, 0x69, 0x43, 0x3f, 0x9c, 0x56, 0x64, 0x9a, 0xa9, + 0xcb, 0x54, 0x59, 0x57, 0xb3, 0xbe, 0x2e, 0x91, 0x1c, 0x30, 0x5e, 0xee, 0x05, 0x6e, 0x7a, 0xc0, + 0xe3, 0xa1, 0x2c, 0xa9, 0x9b, 0x4e, 0x0d, 0x2f, 0x12, 0x12, 0xe1, 0x8a, 0x8a, 0x82, 0x02, 0x43, + 0x05, 0x2b, 0xf2, 0x37, 0x61, 0xf2, 0xca, 0x82, 0xce, 0x32, 0x3a, 0x92, 0x64, 0x4b, 0x12, 0x9f, + 0x87, 0x98, 0xdb, 0xa8, 0x80, 0x50, 0x51, 0x62, 0xe5, 0xc3, 0x64, 0x70, 0x23, 0xe6, 0x43, 0x79, + 0xa2, 0xc9, 0x41, 0x5c, 0x39, 0x0f, 0xd3, 0x3c, 0x2f, 0x76, 0x88, 0x56, 0x41, 0x09, 0x5a, 0x09, + 0x62, 0xf5, 0x30, 0xef, 0xe4, 0xa0, 0xb5, 0x0c, 0x8d, 0x84, 0x8d, 0x64, 0x49, 0x20, 0x7e, 0x6a, + 0x96, 0x5b, 0xd2, 0x2d, 0x57, 0x89, 0xf1, 0xcb, 0xf8, 0x55, 0x8d, 0xf1, 0x65, 0xe0, 0x5c, 0xd1, + 0x02, 0xe7, 0x35, 0x98, 0xe5, 0x91, 0xf0, 0xf3, 0xa4, 0x6b, 0xe1, 0x1e, 0xfb, 0xe4, 0xe4, 0x3d, + 0x76, 0xe5, 0x2e, 0x8d, 0xbc, 0x1e, 0xa6, 0xf1, 0x23, 0x27, 0xa7, 0xb3, 0xee, 0xc0, 0x12, 0x3f, + 0x38, 0x08, 0xfc, 0x90, 0xed, 0x65, 0xc9, 0x21, 0x96, 0xde, 0x17, 0x30, 0x34, 0xd9, 0xe3, 0x42, + 0x93, 0x3e, 0xd2, 0xa9, 0x92, 0x8a, 0x7c, 0xe2, 0xa6, 0x54, 0x3a, 0xe1, 0x8e, 0xbb, 0xb8, 0xde, + 0x10, 0xf9, 0x44, 0xc5, 0xad, 0xbd, 0x06, 0xf3, 0xaa, 0x28, 0x42, 0x55, 0x47, 0xec, 0x91, 0xf4, + 0x53, 0xf1, 0x53, 0x64, 0x9c, 0x63, 0x37, 0xc8, 0x28, 0x83, 0xcf, 0x39, 0x04, 0xbc, 0x66, 0x7e, + 0xc1, 0xb0, 0x7f, 0x6c, 0xc0, 0x52, 0x45, 0x08, 0x31, 0x3a, 0xf5, 0xd3, 0x80, 0x49, 0x0e, 0x04, + 0x88, 0xea, 0xc8, 0x63, 0x49, 0x5f, 0xba, 0x39, 0xfe, 0x96, 0x79, 0xa6, 0x51, 0x9c, 0x79, 0x6d, + 0x98, 0xf7, 0xef, 0xf6, 0x04, 0xa3, 0x1e, 0xcf, 0x42, 0xaf, 0xb8, 0xb7, 0x52, 0x70, 0xc2, 0xcd, + 0xfc, 0xbb, 0xbd, 0x4d, 0xd7, 0x1b, 0x30, 0xba, 0x5d, 0x6a, 0xa2, 0x4c, 0x3a, 0xd2, 0xf6, 0x60, + 0xee, 0x9e, 0x1f, 0x25, 0x5b, 0x7c, 0x38, 0x14, 0xc6, 0xf2, 0x58, 0x2a, 0xf2, 0xb8, 0x81, 0x3e, + 0x21, 0x21, 0xe1, 0x4e, 0x1e, 0x3b, 0x70, 0xb3, 0x20, 0x15, 0x43, 0xf3, 0xcd, 0xad, 0xa0, 0xf0, + 0x5e, 0x25, 0xe1, 0xe1, 0x36, 0x51, 0x93, 0x9c, 0x0a, 0xc6, 0xfe, 0x93, 0x09, 0xcb, 0x78, 0xfa, + 0xd9, 0x42, 0xd7, 0xf0, 0x90, 0xe8, 0x15, 0x68, 0xe2, 0x56, 0x95, 0x19, 0xe5, 0xe4, 0x13, 0x13, + 0x0d, 0xb5, 0xae, 0x42, 0x8b, 0x47, 0x98, 0x86, 0x28, 0xd9, 0xbd, 0x30, 0x89, 0x48, 0xbf, 0xc2, + 0x72, 0x24, 0x95, 0x75, 0x03, 0x60, 0x58, 0x66, 0x1d, 0x0a, 0xef, 0xd3, 0xf2, 0x50, 0x28, 0x85, + 0x72, 0x8b, 0x50, 0x5d, 0xdc, 0x63, 0x35, 0x1c, 0x1d, 0x69, 0xed, 0xc2, 0x22, 0x8a, 0x7d, 0x37, + 0x3f, 0x3a, 0xa3, 0x0d, 0xa6, 0x9f, 0xb1, 0x42, 0x6d, 0xff, 0xdc, 0x90, 0x6a, 0x14, 0x5f, 0x7b, + 0x8c, 0x74, 0x5f, 0xaa, 0xc4, 0x38, 0x93, 0x4a, 0xd6, 0x60, 0x6e, 0x98, 0x29, 0x27, 0xf9, 0x86, + 0x53, 0xc0, 0xa5, 0x89, 0x1a, 0x53, 0x9b, 0xc8, 0xfe, 0x85, 0x01, 0xdd, 0x37, 0xb8, 0x1f, 0xe2, + 0x87, 0x6b, 0x51, 0x14, 0xc8, 0xcb, 0xd6, 0x33, 0xdb, 0xfc, 0x2b, 0xd0, 0x76, 0x89, 0x4d, 0x98, + 0x4a, 0xb3, 0x4f, 0x71, 0x3a, 0x2f, 0x69, 0x94, 0x83, 0x56, 0x43, 0x3d, 0x68, 0xd9, 0xef, 0x19, + 0xb0, 0x48, 0x4a, 0x79, 0x33, 0xf3, 0xd3, 0x33, 0xcb, 0xb7, 0x09, 0x73, 0xa3, 0xcc, 0x4f, 0xcf, + 0xe0, 0x95, 0x05, 0x5d, 0xdd, 0x9f, 0x1a, 0x63, 0xfc, 0xc9, 0x7e, 0xdf, 0x80, 0x4b, 0x55, 0xb5, + 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, 0x8a, + 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xfb, 0x26, 0x7c, 0xe4, 0x66, 0xb1, 0xf1, 0xee, + 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, 0x65, + 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, 0xe7, + 0xab, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, 0x6c, + 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, 0x3a, + 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x35, 0x60, + 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, 0xc3, + 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, 0xa1, + 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x53, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, 0xf4, + 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, 0xa2, + 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, 0xd0, + 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xca, 0x80, 0x45, 0x1a, + 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8d, 0x95, 0x84, 0x7b, 0xad, 0x2a, 0x5c, + 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, 0xa5, + 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, 0x9c, + 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, 0xac, + 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, 0x78, + 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, 0x98, + 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, 0xbf, + 0xc8, 0xfe, 0x16, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, 0xcb, + 0x7c, 0x6c, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x9e, 0x01, 0xcf, 0xd7, 0xd8, 0x5f, + 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, 0xb1, + 0x42, 0x68, 0x05, 0xfb, 0x07, 0x20, 0xc4, 0x2f, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, 0xf6, + 0xf3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, 0xae, + 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xb1, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, 0x7a, + 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, 0xc1, + 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, 0x94, + 0x9c, 0x0b, 0xf7, 0xcf, 0xc2, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, 0xbd, + 0x6e, 0x7f, 0x0e, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, 0x68, + 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, 0x95, + 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, 0x4f, + 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, 0xa7, + 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, 0x07, + 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, 0x0f, + 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, 0x62, + 0xec, 0xaf, 0x81, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, 0xe2, + 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, 0x57, + 0x30, 0xf6, 0xcf, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x04, 0x2d, + 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, 0xff, + 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0xa7, 0x4e, + 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, 0x05, + 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, 0xd3, + 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, 0x4c, + 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, 0x14, + 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, 0x1b, + 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, 0x46, + 0xea, 0x8d, 0x37, 0xd2, 0xa7, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, 0x1b, + 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, 0xa5, + 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, 0x36, + 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0x7d, 0x13, 0x16, 0x51, 0x65, 0xd4, 0x4c, 0x0c, 0x0f, + 0x38, 0xf6, 0x03, 0x50, 0x5d, 0xfa, 0xbb, 0x2e, 0x1d, 0x69, 0x7d, 0x06, 0x56, 0x08, 0xc1, 0x94, + 0x66, 0x88, 0x89, 0xcd, 0x90, 0xfa, 0x07, 0x6c, 0xff, 0x64, 0x49, 0xca, 0x87, 0xdb, 0x6e, 0xea, + 0xe6, 0xc5, 0x57, 0x89, 0x51, 0x9b, 0x73, 0x33, 0xb5, 0x97, 0xa3, 0x31, 0xe7, 0xc3, 0xa2, 0xeb, + 0x26, 0x21, 0x41, 0x91, 0xfa, 0x43, 0xc6, 0xb3, 0x54, 0x86, 0x89, 0x1c, 0xa4, 0xb7, 0x17, 0x9e, + 0xef, 0x62, 0x4b, 0x4b, 0x3e, 0x4c, 0x28, 0x10, 0x18, 0xd9, 0xca, 0x16, 0x9d, 0x7c, 0xd9, 0x59, + 0x62, 0x4e, 0x6f, 0xa7, 0xd9, 0x7f, 0x37, 0xe0, 0xc2, 0x9e, 0x1b, 0xa7, 0x7e, 0xdf, 0x8f, 0xdc, + 0x30, 0xdd, 0x61, 0xa9, 0x8b, 0x6b, 0xd0, 0x1e, 0x77, 0x19, 0x8f, 0xf7, 0xb8, 0x6b, 0x0f, 0x96, + 0x06, 0xfa, 0xe9, 0xe2, 0x31, 0x0f, 0x06, 0x55, 0x72, 0xed, 0xa5, 0x5a, 0xe3, 0xb1, 0x5f, 0xaa, + 0xd9, 0x3f, 0x34, 0x61, 0xa9, 0x12, 0x3a, 0x4f, 0xcc, 0x3b, 0xd7, 0x00, 0xfc, 0xc2, 0x8d, 0x4e, + 0xb8, 0x7c, 0xd7, 0x7d, 0xcd, 0x51, 0x88, 0xc6, 0xf5, 0xe9, 0x1a, 0x67, 0xef, 0xd3, 0xdd, 0x82, + 0x4e, 0x54, 0x1a, 0xe9, 0x84, 0xb3, 0xcf, 0x18, 0x53, 0x3a, 0x2a, 0xa9, 0xfd, 0x4d, 0x58, 0xa9, + 0x45, 0x28, 0x6c, 0xc9, 0xf1, 0x23, 0x16, 0x16, 0x2d, 0x39, 0x01, 0x28, 0xce, 0x6a, 0x56, 0x9d, + 0x35, 0xf0, 0x8f, 0xd5, 0xa7, 0xb0, 0x12, 0xb4, 0x7f, 0x64, 0xc2, 0xea, 0xf8, 0xec, 0xf2, 0xac, + 0xaa, 0x7b, 0x1f, 0xba, 0x93, 0x22, 0xf9, 0xb9, 0x69, 0xbd, 0xf4, 0xee, 0x22, 0x0f, 0x3f, 0xab, + 0xea, 0xbe, 0x90, 0x7b, 0xb7, 0x92, 0xea, 0xec, 0xdf, 0x14, 0xfa, 0x29, 0x2a, 0x8d, 0x67, 0x54, + 0x3f, 0xd6, 0x4b, 0xb0, 0x4c, 0xcb, 0x54, 0x1e, 0x76, 0x50, 0xe1, 0x5a, 0xc3, 0x97, 0x91, 0x42, + 0x49, 0xfb, 0xe7, 0xe6, 0xb3, 0x7f, 0x30, 0x72, 0x9b, 0x14, 0xf5, 0xdb, 0x87, 0xca, 0x26, 0xa5, + 0xa7, 0x29, 0x45, 0x8d, 0xe2, 0x69, 0x45, 0x5d, 0xf9, 0x3f, 0x4f, 0x3b, 0xdd, 0xd3, 0x0a, 0x5d, + 0x2a, 0x05, 0x9e, 0xfd, 0x5d, 0x58, 0xd8, 0x66, 0xc1, 0x4e, 0x32, 0xc8, 0x9f, 0x94, 0x9d, 0xeb, + 0x41, 0xb1, 0xfa, 0x10, 0x6d, 0xa6, 0xf6, 0x10, 0xcd, 0xde, 0x84, 0x45, 0x55, 0x80, 0xb3, 0xbc, + 0xa8, 0xdb, 0xbc, 0xf4, 0x8d, 0xb5, 0x2b, 0x2f, 0xd3, 0x7f, 0xbf, 0x5e, 0xaf, 0x29, 0x71, 0xbf, + 0x85, 0xff, 0x05, 0x7b, 0xf5, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x11, 0x1c, 0x36, 0x1e, + 0x36, 0x00, 0x00, } From ce554fc442e0b393f0309a1772ed18960d2ad8b2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 15:48:48 +0800 Subject: [PATCH 182/752] push update --- internal/push/logic/init.go | 20 +++++++++++++++----- internal/push/logic/push_to_client.go | 10 ---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/internal/push/logic/init.go b/internal/push/logic/init.go index 75902e7f8..c9e168940 100644 --- a/internal/push/logic/init.go +++ b/internal/push/logic/init.go @@ -7,6 +7,9 @@ package logic import ( + pusher "Open_IM/internal/push" + "Open_IM/internal/push/getui" + jpush "Open_IM/internal/push/jpush" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/kafka" @@ -15,11 +18,12 @@ import ( ) var ( - rpcServer RPCServer - pushCh PushConsumerHandler - pushTerminal []int32 - producer *kafka.Producer - successCount uint64 + rpcServer RPCServer + pushCh PushConsumerHandler + pushTerminal []int32 + producer *kafka.Producer + offlinePusher pusher.OfflinePusher + successCount uint64 ) func Init(rpcPort int) { @@ -31,6 +35,12 @@ func Init(rpcPort int) { func init() { producer = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic) statistics.NewStatistics(&successCount, config.Config.ModuleName.PushName, fmt.Sprintf("%d second push to msg_gateway count", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) + if config.Config.Push.Getui.Enable { + offlinePusher = getui.GetuiClient + } + if config.Config.Push.Jpns.Enable { + offlinePusher = jpush.JPushClient + } } func Run() { diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 4ee83aa11..21e8e3023 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -7,8 +7,6 @@ package logic import ( - pusher "Open_IM/internal/push" - "Open_IM/internal/push/getui" jpush "Open_IM/internal/push/jpush" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" @@ -102,14 +100,6 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { content = constant.ContentType2PushContent[constant.Common] } } - var offlinePusher pusher.OfflinePusher - if config.Config.Push.Getui.Enable { - log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), config.Config.Push.Getui) - offlinePusher = getui.GetuiClient - } - if config.Config.Push.Jpns.Enable { - offlinePusher = jpush.JPushClient - } if offlinePusher == nil { offlinePusher = jpush.JPushClient } From 4a822c5920ae4a9c670d3e77c53ffbaa34e25712 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 15:53:19 +0800 Subject: [PATCH 183/752] push update --- internal/rpc/msg/rpcChat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index 1dee643c7..19ea0631e 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -94,7 +94,7 @@ func (rpc *rpcChat) runCh() { if err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID); err != nil { log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList qrgs: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error()) } - db.DataBases.DelMsgFromCache(msg.SeqList, msg.UserID, msg.OperationID) + //db.DataBases.DelMsgFromCache(msg.SeqList, msg.UserID, msg.OperationID) } } } From 841566a5d1591ba682836535a886ffd76d6e1d16 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 15:56:39 +0800 Subject: [PATCH 184/752] del msg --- internal/rpc/msg/rpcChat.go | 7 ++--- pkg/common/db/mongoModel.go | 51 +++++++++++++++++++++++++------------ pkg/common/db/redisModel.go | 3 ++- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index 1dee643c7..59b36f65d 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -91,10 +91,11 @@ func (rpc *rpcChat) runCh() { for { select { case msg := <-rpc.delMsgCh: - if err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID); err != nil { - log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList qrgs: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error()) + if unexistSeqList, err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID); err != nil { + log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error()) + DeleteMessageNotification(msg.OpUserID, msg.UserID, unexistSeqList, msg.OperationID) } - db.DataBases.DelMsgFromCache(msg.SeqList, msg.UserID, msg.OperationID) + db.DB.DelMsgFromCache(msg.UserID, msg.SeqList, msg.OperationID) } } } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 1e824c11b..0152941d3 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -85,7 +85,7 @@ func (d *DataBases) GetMinSeqFromMongo2(uid string) (MinSeq uint32, err error) { } // deleteMsgByLogic -func (d *DataBases) DelMsgBySeqList(userID string, seqList []uint32, operationID string) (err error) { +func (d *DataBases) DelMsgBySeqList(userID string, seqList []uint32, operationID string) (totalUnexistSeqList []uint32, err error) { log.Debug(operationID, utils.GetSelfFuncName(), "args ", userID, seqList) sortkeys.Uint32s(seqList) suffixUserID2SubSeqList := func(uid string, seqList []uint32) map[string][]uint32 { @@ -102,33 +102,38 @@ func (d *DataBases) DelMsgBySeqList(userID string, seqList []uint32, operationID return t }(userID, seqList) + lock := sync.Mutex{} var wg sync.WaitGroup wg.Add(len(suffixUserID2SubSeqList)) for k, v := range suffixUserID2SubSeqList { go func(suffixUserID string, subSeqList []uint32, operationID string) { - if e := d.DelMsgBySeqListInOneDoc(suffixUserID, subSeqList, operationID); e != nil { + defer wg.Done() + unexistSeqList, err := d.DelMsgBySeqListInOneDoc(suffixUserID, subSeqList, operationID) + if err != nil { log.Error(operationID, "DelMsgBySeqListInOneDoc failed ", e.Error(), suffixUserID, subSeqList) - err = e + return } + lock.Lock() + totalUnexistSeqList = append(totalUnexistSeqList, unexistSeqList...) + lock.Unlock() wg.Done() }(k, v, operationID) } - wg.Wait() - return err + return totalUnexistSeqList, err } -func (d *DataBases) DelMsgBySeqListInOneDoc(suffixUserID string, seqList []uint32, operationID string) error { +func (d *DataBases) DelMsgBySeqListInOneDoc(suffixUserID string, seqList []uint32, operationID string) ([]uint32, error) { log.Debug(operationID, utils.GetSelfFuncName(), "args ", suffixUserID, seqList) - seqMsgList, indexList, err := d.GetMsgAndIndexBySeqListInOneMongo2(suffixUserID, seqList, operationID) + seqMsgList, indexList, unexistSeqList, err := d.GetMsgAndIndexBySeqListInOneMongo2(suffixUserID, seqList, operationID) if err != nil { - return utils.Wrap(err, "") + return nil, utils.Wrap(err, "") } for i, v := range seqMsgList { if err := d.ReplaceMsgByIndex(suffixUserID, v, operationID, indexList[i]); err != nil { - return utils.Wrap(err, "") + return nil, utils.Wrap(err, "") } } - return nil + return unexistSeqList, nil } // deleteMsgByLogic @@ -302,13 +307,13 @@ func (d *DataBases) GetMsgBySeqListMongo2(uid string, seqList []uint32, operatio return seqMsg, nil } -func (d *DataBases) GetMsgAndIndexBySeqListInOneMongo2(suffixUserID string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, indexList []int, err error) { +func (d *DataBases) GetMsgAndIndexBySeqListInOneMongo2(suffixUserID string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, indexList []int, unexistSeqList []uint32, err error) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) sChat := UserChat{} if err = c.FindOne(ctx, bson.M{"uid": suffixUserID}).Decode(&sChat); err != nil { log.NewError(operationID, "not find seqUid", suffixUserID, err.Error()) - return nil, nil, utils.Wrap(err, "") + return nil, nil, nil, utils.Wrap(err, "") } singleCount := 0 var hasSeqList []uint32 @@ -316,7 +321,7 @@ func (d *DataBases) GetMsgAndIndexBySeqListInOneMongo2(suffixUserID string, seqL msg := new(open_im_sdk.MsgData) if err = proto.Unmarshal(sChat.Msg[i].Msg, msg); err != nil { log.NewError(operationID, "Unmarshal err", msg.String(), err.Error()) - return nil, nil, err + return nil, nil, nil, err } if isContainInt32(msg.Seq, seqList) { indexList = append(indexList, i) @@ -328,8 +333,13 @@ func (d *DataBases) GetMsgAndIndexBySeqListInOneMongo2(suffixUserID string, seqL } } } - - return seqMsg, indexList, nil + for _, i := range seqList { + if isContainInt32(i, hasSeqList) { + continue + } + unexistSeqList = append(unexistSeqList, i) + } + return seqMsg, indexList, unexistSeqList, nil } func genExceptionMessageBySeqList(seqList []uint32) (exceptionMsg []*open_im_sdk.MsgData) { @@ -915,8 +925,17 @@ func isContainInt32(target uint32, List []uint32) bool { } } return false - } + +func isNotContainInt32(target uint32, List []uint32) bool { + for _, i := range List { + if i == target { + return false + } + } + return true +} + func indexGen(uid string, seqSuffix uint32) string { return uid + ":" + strconv.FormatInt(int64(seqSuffix), 10) } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 32ff05326..524d9ca56 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -314,7 +314,7 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, return nil } -func (d *DataBases) DelMsgFromCache(seqList []uint32, uid, operationID string) { +func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { for _, seq := range seqList { key := messageCache + uid + "_" + strconv.Itoa(int(seq)) result, err := redis.String(d.Exec("GET", key)) @@ -325,6 +325,7 @@ func (d *DataBases) DelMsgFromCache(seqList []uint32, uid, operationID string) { log2.Debug(operationID, utils.GetSelfFuncName(), "del result", result) var msg pbCommon.MsgData err = utils.String2Pb(result, &msg) + log2.NewDebug(operationID, utils.GetSelfFuncName(), "msg", msg) if err != nil { log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) continue From c16a35ec8c29186992863de7bf70414021608439 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 15:57:17 +0800 Subject: [PATCH 185/752] del msg --- pkg/common/db/redisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 524d9ca56..722c61b93 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -330,7 +330,7 @@ func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID st log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) continue } - msg.Status = 4 + msg.Status = constant.MsgDeleted s, err := utils.Pb2String(&msg) if err != nil { log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) From 9eb18701962ebaf7033a7bbaa8d9783ee4249325 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 16:01:34 +0800 Subject: [PATCH 186/752] Merge branch 'tuoyun' of github.com:OpenIMSDK/Open-IM-Server into tuoyun # Conflicts: # internal/rpc/msg/rpcChat.go --- internal/rpc/msg/rpcChat.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index 59b36f65d..e42f4f465 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -91,11 +91,15 @@ func (rpc *rpcChat) runCh() { for { select { case msg := <-rpc.delMsgCh: - if unexistSeqList, err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID); err != nil { - log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error()) - DeleteMessageNotification(msg.OpUserID, msg.UserID, unexistSeqList, msg.OperationID) - } db.DB.DelMsgFromCache(msg.UserID, msg.SeqList, msg.OperationID) + unexistSeqList, err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID) + if err != nil { + log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error()) + continue + } + if len(unexistSeqList) > 0 { + DeleteMessageNotification(msg.OpUserID, msg.UserID, msg.SeqList, msg.OperationID) + } } } } From 4d8708a5ee99fd594c02537895265591f8374357 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 16:10:05 +0800 Subject: [PATCH 187/752] Merge branch 'tuoyun' of github.com:OpenIMSDK/Open-IM-Server into tuoyun # Conflicts: # internal/rpc/msg/rpcChat.go --- internal/rpc/msg/rpcChat.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index e42f4f465..4cfdfaedc 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -91,6 +91,7 @@ func (rpc *rpcChat) runCh() { for { select { case msg := <-rpc.delMsgCh: + log.NewInfo(msg.OperationID, utils.GetSelfFuncName(), "delmsgch recv new: ", msg) db.DB.DelMsgFromCache(msg.UserID, msg.SeqList, msg.OperationID) unexistSeqList, err := db.DB.DelMsgBySeqList(msg.UserID, msg.SeqList, msg.OperationID) if err != nil { From 061af3f827fcd445178cba61d30ca93c9a765922 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 16:16:23 +0800 Subject: [PATCH 188/752] push update --- pkg/common/db/mongoModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 0152941d3..24cb9c9ca 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -110,7 +110,7 @@ func (d *DataBases) DelMsgBySeqList(userID string, seqList []uint32, operationID defer wg.Done() unexistSeqList, err := d.DelMsgBySeqListInOneDoc(suffixUserID, subSeqList, operationID) if err != nil { - log.Error(operationID, "DelMsgBySeqListInOneDoc failed ", e.Error(), suffixUserID, subSeqList) + log.Error(operationID, "DelMsgBySeqListInOneDoc failed ", err.Error(), suffixUserID, subSeqList) return } lock.Lock() From c544c4d6b555c1f914f1676135416fb2b2f796c2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 16:22:35 +0800 Subject: [PATCH 189/752] push update --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 138292fdc..b6919554d 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -190,8 +190,8 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { log.NewError(triggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) continue } - if err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { - log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error()) + if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { + log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) } } From 5957e4b2646c9bef0ddbd65abc8c8dcfefe7000e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 16:25:16 +0800 Subject: [PATCH 190/752] Merge branch 'tuoyun' of github.com:OpenIMSDK/Open-IM-Server into tuoyun # Conflicts: # internal/rpc/msg/rpcChat.go --- internal/rpc/msg/rpcChat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index 4cfdfaedc..cc65a4612 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -99,7 +99,7 @@ func (rpc *rpcChat) runCh() { continue } if len(unexistSeqList) > 0 { - DeleteMessageNotification(msg.OpUserID, msg.UserID, msg.SeqList, msg.OperationID) + DeleteMessageNotification(msg.OpUserID, msg.UserID, unexistSeqList, msg.OperationID) } } } From 657ec411c396157ed811e9ee14fdd7c88a6a5efd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 16:28:28 +0800 Subject: [PATCH 191/752] del msg --- pkg/common/db/redisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 722c61b93..92b27c614 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -336,7 +336,7 @@ func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID st log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) continue } - _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) + _, err = d.Exec("SET", key, s) if err != nil { log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, msg, s) } From eb2218c2208a82b167734c798b52d8209f14a11c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 16:33:28 +0800 Subject: [PATCH 192/752] del msg --- pkg/common/db/mongoModel.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 24cb9c9ca..22c54dae8 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -116,7 +116,6 @@ func (d *DataBases) DelMsgBySeqList(userID string, seqList []uint32, operationID lock.Lock() totalUnexistSeqList = append(totalUnexistSeqList, unexistSeqList...) lock.Unlock() - wg.Done() }(k, v, operationID) } return totalUnexistSeqList, err From 746b01f8caedbd665ebf983c5348d91706c9b914 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 16:37:20 +0800 Subject: [PATCH 193/752] push update --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index b6919554d..5c34b8ff4 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -164,7 +164,7 @@ func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, tri func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { for { select { - case cmd := <-och.chArrays[channelID]: + case cmd := <-och.chMongoArrays[channelID]: switch cmd.Cmd { case MongoMessages: msgChannelValue := cmd.Value.(MsgChannelValue) From e8fe7cc853f35009d50c5c1ae932995e90ef859c Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 25 May 2022 17:14:09 +0800 Subject: [PATCH 194/752] debug --- internal/push/logic/push_to_client.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 21e8e3023..6e9b8787b 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -17,6 +17,7 @@ import ( "Open_IM/pkg/utils" "context" "encoding/json" + "google.golang.org/grpc" "strings" ) @@ -32,11 +33,16 @@ type AtContent struct { IsAtSelf bool `json:"isAtSelf"` } +var grpcCons []*grpc.ClientConn + func MsgToUser(pushMsg *pbPush.PushMsgReq) { var wsResult []*pbRelay.SingleMsgToUser isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) - grpcCons := getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + if len(grpcCons) == 0 { + log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") + grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + } //Online push message log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { From 837cf10e36afff6ca1c8597ae0e94f2ac04636ac Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 17:38:49 +0800 Subject: [PATCH 195/752] del msg --- test/mongo/main.go | 33 +++++++++++++++++++++++++++++++++ test/mongo/mongo_utils.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 test/mongo/main.go create mode 100644 test/mongo/mongo_utils.go diff --git a/test/mongo/main.go b/test/mongo/main.go new file mode 100644 index 000000000..29ea4ea4f --- /dev/null +++ b/test/mongo/main.go @@ -0,0 +1,33 @@ +package mongo + +import ( + "context" + "flag" + "fmt" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +var ( + client *mongo.Client +) + +func initDB() { + clientOptions := options.Client().ApplyURI("mongodb://127.0.0.1:37017/openIM/?maxPoolSize=100") + client, err := mongo.Connect(context.TODO(), clientOptions) + if err != nil { + panic(err) + } + err = client.Ping(context.TODO(), nil) + if err != nil { + panic(err) + } + fmt.Println("Connected to MongoDB!") +} + +func main() { + userID := flag.String("userID", "", "userID") + flag.Parse() + fmt.Println("userID:", userID) + GetUserAllChat(*userID) +} diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go new file mode 100644 index 000000000..e2c14ccdd --- /dev/null +++ b/test/mongo/mongo_utils.go @@ -0,0 +1,36 @@ +package mongo + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/db" + server_api_params "Open_IM/pkg/proto/sdk_ws" + "context" + "fmt" + "github.com/golang/protobuf/proto" + "go.mongodb.org/mongo-driver/bson/primitive" + "gopkg.in/mgo.v2/bson" +) + +func GetUserAllChat(uid string) { + collection := client.Database(config.Config.Mongo.DBDatabase).Collection("msg") + var userChatList []db.UserChat + result, err := collection.Find(context.Background(), bson.M{"uid": primitive.Regex{Pattern: uid}}) + if err != nil { + fmt.Println(err.Error()) + return + } + if err := result.All(context.Background(), &userChatList); err != nil { + fmt.Println(err.Error()) + } + for _, userChat := range userChatList { + for _, msg := range userChat.Msg { + msgData := &server_api_params.MsgData{} + err := proto.Unmarshal(msg.Msg, msgData) + if err != nil { + fmt.Println(err.Error(), msg) + continue + } + fmt.Println(*msgData) + } + } +} From 13b9749e8f3443fe71ac742ef74e881ac45d67a6 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 17:41:32 +0800 Subject: [PATCH 196/752] del msg --- test/mongo/{ => cmd}/main.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) rename test/mongo/{ => cmd}/main.go (86%) diff --git a/test/mongo/main.go b/test/mongo/cmd/main.go similarity index 86% rename from test/mongo/main.go rename to test/mongo/cmd/main.go index 29ea4ea4f..d3711e2ba 100644 --- a/test/mongo/main.go +++ b/test/mongo/cmd/main.go @@ -1,6 +1,7 @@ -package mongo +package cmd import ( + mongo2 "Open_IM/test/mongo" "context" "flag" "fmt" @@ -12,7 +13,7 @@ var ( client *mongo.Client ) -func initDB() { +func init() { clientOptions := options.Client().ApplyURI("mongodb://127.0.0.1:37017/openIM/?maxPoolSize=100") client, err := mongo.Connect(context.TODO(), clientOptions) if err != nil { @@ -29,5 +30,5 @@ func main() { userID := flag.String("userID", "", "userID") flag.Parse() fmt.Println("userID:", userID) - GetUserAllChat(*userID) + mongo2.GetUserAllChat(*userID) } From 72c7cc2c67d3f9393d52b914331b8197656e42e1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 17:42:45 +0800 Subject: [PATCH 197/752] script --- test/mongo/cmd/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mongo/cmd/main.go b/test/mongo/cmd/main.go index d3711e2ba..75ec8323f 100644 --- a/test/mongo/cmd/main.go +++ b/test/mongo/cmd/main.go @@ -1,4 +1,4 @@ -package cmd +package main import ( mongo2 "Open_IM/test/mongo" From 76b5affaaab8f9a63891c76f19156d2d03b64298 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 17:46:02 +0800 Subject: [PATCH 198/752] script --- test/mongo/cmd/main.go | 9 +++------ test/mongo/mongo_utils.go | 8 +++++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/test/mongo/cmd/main.go b/test/mongo/cmd/main.go index 75ec8323f..8c8b2dbef 100644 --- a/test/mongo/cmd/main.go +++ b/test/mongo/cmd/main.go @@ -9,17 +9,14 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -var ( - client *mongo.Client -) - func init() { clientOptions := options.Client().ApplyURI("mongodb://127.0.0.1:37017/openIM/?maxPoolSize=100") - client, err := mongo.Connect(context.TODO(), clientOptions) + var err error + mongo2.Client, err = mongo.Connect(context.TODO(), clientOptions) if err != nil { panic(err) } - err = client.Ping(context.TODO(), nil) + err = mongo2.Client.Ping(context.TODO(), nil) if err != nil { panic(err) } diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index e2c14ccdd..6f211cd69 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -4,15 +4,21 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/db" server_api_params "Open_IM/pkg/proto/sdk_ws" + "Open_IM/test/mongo/cmd" "context" "fmt" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" "gopkg.in/mgo.v2/bson" ) +var ( + Client *mongo.Client +) + func GetUserAllChat(uid string) { - collection := client.Database(config.Config.Mongo.DBDatabase).Collection("msg") + collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg") var userChatList []db.UserChat result, err := collection.Find(context.Background(), bson.M{"uid": primitive.Regex{Pattern: uid}}) if err != nil { From c02f95c2fc1bdcdeec265f6f01ed78586386e5be Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 17:47:04 +0800 Subject: [PATCH 199/752] script --- test/mongo/mongo_utils.go | 1 - 1 file changed, 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 6f211cd69..86c305e26 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -4,7 +4,6 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/db" server_api_params "Open_IM/pkg/proto/sdk_ws" - "Open_IM/test/mongo/cmd" "context" "fmt" "github.com/golang/protobuf/proto" From fc677ca0e90f678a1195ac9e0cc3e9af560b98c1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 17:48:28 +0800 Subject: [PATCH 200/752] script --- test/mongo/cmd/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mongo/cmd/main.go b/test/mongo/cmd/main.go index 8c8b2dbef..ffc4a6eb0 100644 --- a/test/mongo/cmd/main.go +++ b/test/mongo/cmd/main.go @@ -26,6 +26,6 @@ func init() { func main() { userID := flag.String("userID", "", "userID") flag.Parse() - fmt.Println("userID:", userID) + fmt.Println("userID:", *userID) mongo2.GetUserAllChat(*userID) } From 0ed223ef012e9429148a239b1771abd307ab7c3e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 17:58:05 +0800 Subject: [PATCH 201/752] script --- test/mongo/cmd/main.go | 18 ++++++++++++++++-- test/mongo/mongo_utils.go | 6 ++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/test/mongo/cmd/main.go b/test/mongo/cmd/main.go index ffc4a6eb0..2a8d41523 100644 --- a/test/mongo/cmd/main.go +++ b/test/mongo/cmd/main.go @@ -1,6 +1,7 @@ package main import ( + "Open_IM/pkg/common/config" mongo2 "Open_IM/test/mongo" "context" "flag" @@ -10,9 +11,22 @@ import ( ) func init() { - clientOptions := options.Client().ApplyURI("mongodb://127.0.0.1:37017/openIM/?maxPoolSize=100") + uri := "mongodb://sample.host:27017/?maxPoolSize=20&w=majority" + if config.Config.Mongo.DBUri != "" { + // example: mongodb://$user:$password@mongo1.mongo:27017,mongo2.mongo:27017,mongo3.mongo:27017/$DBDatabase/?replicaSet=rs0&readPreference=secondary&authSource=admin&maxPoolSize=$DBMaxPoolSize + uri = config.Config.Mongo.DBUri + } else { + if config.Config.Mongo.DBPassword != "" && config.Config.Mongo.DBUserName != "" { + uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress[0], + config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) + } else { + uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d", + config.Config.Mongo.DBAddress[0], config.Config.Mongo.DBDatabase, + config.Config.Mongo.DBMaxPoolSize) + } + } var err error - mongo2.Client, err = mongo.Connect(context.TODO(), clientOptions) + mongo2.Client, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) if err != nil { panic(err) } diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 86c305e26..53835c355 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -10,6 +10,7 @@ import ( "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "gopkg.in/mgo.v2/bson" + "time" ) var ( @@ -17,14 +18,15 @@ var ( ) func GetUserAllChat(uid string) { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg") var userChatList []db.UserChat result, err := collection.Find(context.Background(), bson.M{"uid": primitive.Regex{Pattern: uid}}) if err != nil { - fmt.Println(err.Error()) + fmt.Println("find error", err.Error()) return } - if err := result.All(context.Background(), &userChatList); err != nil { + if err := result.All(ctx, &userChatList); err != nil { fmt.Println(err.Error()) } for _, userChat := range userChatList { From 730bedf0a5f32eacd24053416fa30eb6969f9be4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 18:01:39 +0800 Subject: [PATCH 202/752] script --- test/mongo/mongo_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 53835c355..aac63e548 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -37,7 +37,7 @@ func GetUserAllChat(uid string) { fmt.Println(err.Error(), msg) continue } - fmt.Println(*msgData) + fmt.Println("seq:", msgData.Seq, "status:", msgData.Status) } } } From 84e7935971fbe0aa936a3873f21f9a9068e2f4dd Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 18:03:43 +0800 Subject: [PATCH 203/752] channelNum --- internal/msg_transfer/logic/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 96412fa40..f8c424dcc 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -16,7 +16,7 @@ const Msg = 2 const ConsumerMsgs = 3 const UserMessages = 4 const MongoMessages = 5 -const ChannelNum = 10 +const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler From 93d63508dccfc9957070b542dfb32f7fa5bbb41a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 18:05:24 +0800 Subject: [PATCH 204/752] script --- test/mongo/mongo_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index aac63e548..f736f0d54 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -21,7 +21,7 @@ func GetUserAllChat(uid string) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg") var userChatList []db.UserChat - result, err := collection.Find(context.Background(), bson.M{"uid": primitive.Regex{Pattern: uid}}) + result, err := collection.Find(context.Background(), bson.M{"uid": bson.M{"$regex": uid}}) if err != nil { fmt.Println("find error", err.Error()) return From f9698414642f617d87af44f94cb9dacf9fc1656b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 18:05:47 +0800 Subject: [PATCH 205/752] script --- test/mongo/mongo_utils.go | 1 - 1 file changed, 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index f736f0d54..243dd6d00 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -7,7 +7,6 @@ import ( "context" "fmt" "github.com/golang/protobuf/proto" - "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "gopkg.in/mgo.v2/bson" "time" From d791aa2e4fbc51ab44710c2e2f3aea671b3fd847 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 18:09:41 +0800 Subject: [PATCH 206/752] script --- test/mongo/mongo_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 243dd6d00..748cfc9fb 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -36,7 +36,7 @@ func GetUserAllChat(uid string) { fmt.Println(err.Error(), msg) continue } - fmt.Println("seq:", msgData.Seq, "status:", msgData.Status) + fmt.Println("sendID: ", msgData.SendID, "recvID: ", msgData.RecvID, "seq:", msgData.Seq, "status:", msgData.Status) } } } From eb41d8b16de26de942a8392dc3c8190b79891d8a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 18:10:53 +0800 Subject: [PATCH 207/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 5c34b8ff4..069ec8c1b 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -130,7 +130,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // return //} log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragepushMsgList)) - err, lastSeq := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) + err, _ := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) log.NewError(triggerID, "single data insert to redis err", err.Error(), storageMsgList) @@ -138,7 +138,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) + //och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) go func(push, storage []*pbMsg.MsgDataToMQ) { for _, v := range storage { sendMessageToPush(v, msgChannelValue.userID) From b797492dbd98087ef1ca74e05f40240b50918bbd Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 18:11:49 +0800 Subject: [PATCH 208/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 069ec8c1b..8e8941d62 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -130,7 +130,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // return //} log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragepushMsgList)) - err, _ := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) + err, lastSeq := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) log.NewError(triggerID, "single data insert to redis err", err.Error(), storageMsgList) @@ -138,7 +138,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - //och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) + och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) go func(push, storage []*pbMsg.MsgDataToMQ) { for _, v := range storage { sendMessageToPush(v, msgChannelValue.userID) @@ -155,6 +155,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { + return hashCode := getHashCode(userID) channelID := hashCode % ChannelNum log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) From 7267fd080e6e2e0567c28cf2a453320578f34ec5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 18:17:55 +0800 Subject: [PATCH 209/752] channelNum --- internal/msg_transfer/logic/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index f8c424dcc..96412fa40 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -16,7 +16,7 @@ const Msg = 2 const ConsumerMsgs = 3 const UserMessages = 4 const MongoMessages = 5 -const ChannelNum = 100 +const ChannelNum = 10 var ( persistentCH PersistentConsumerHandler From 620dd0be78e80011e8f22f778c372a01a043237c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 18:18:35 +0800 Subject: [PATCH 210/752] script --- test/mongo/mongo_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 748cfc9fb..ddea11016 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -36,7 +36,7 @@ func GetUserAllChat(uid string) { fmt.Println(err.Error(), msg) continue } - fmt.Println("sendID: ", msgData.SendID, "recvID: ", msgData.RecvID, "seq:", msgData.Seq, "status:", msgData.Status) + fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status, "sendID: ", msgData.SendID, "recvID: ", msgData.RecvID) } } } From 79bbeea7f066cb6be363e0aec32ab87478cd38fe Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 18:25:09 +0800 Subject: [PATCH 211/752] script --- test/mongo/mongo_utils.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index ddea11016..9c9dce8cc 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -20,7 +20,9 @@ func GetUserAllChat(uid string) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg") var userChatList []db.UserChat - result, err := collection.Find(context.Background(), bson.M{"uid": bson.M{"$regex": uid}}) + //filter := bson.M{"uid": bson.M{"$regex": uid}} + filter := bson.M{"uid": "17726378428:0"} + result, err := collection.Find(context.Background(), filter) if err != nil { fmt.Println("find error", err.Error()) return From d37dd66ec53570adf981c333b2c20e08ea9de2b5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 18:26:12 +0800 Subject: [PATCH 212/752] script --- test/mongo/mongo_utils.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 9c9dce8cc..8393e0477 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -20,8 +20,8 @@ func GetUserAllChat(uid string) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg") var userChatList []db.UserChat - //filter := bson.M{"uid": bson.M{"$regex": uid}} - filter := bson.M{"uid": "17726378428:0"} + filter := bson.M{"uid": bson.M{"$regex": uid}} + //filter := bson.M{"uid": "17726378428:0"} result, err := collection.Find(context.Background(), filter) if err != nil { fmt.Println("find error", err.Error()) From dc2bc7fbf72388e9b5d734eebe0e323b80a3c779 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 18:46:53 +0800 Subject: [PATCH 213/752] channelNum --- .../logic/online_history_msg_handler.go | 182 +++++++++--------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 8e8941d62..4e1242eff 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -42,13 +42,13 @@ type OnlineHistoryConsumerHandler struct { msgCh chan Cmd2Value chArrays [ChannelNum]chan Cmd2Value chMongoArrays [ChannelNum]chan Cmd2Value - //msgDistributionCh chan Cmd2Value + msgDistributionCh chan Cmd2Value } func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle = make(map[string]fcb) - //och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel - //go och.MessagesDistributionHandle() + och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel + go och.MessagesDistributionHandle() och.cmdCh = cmdCh och.msgCh = make(chan Cmd2Value, 1000) for i := 0; i < ChannelNum; i++ { @@ -202,52 +202,52 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { } } -//func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { -// for { -// UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) -// select { -// case cmd := <-och.msgDistributionCh: -// switch cmd.Cmd { -// case ConsumerMsgs: -// triggerChannelValue := cmd.Value.(TriggerChannelValue) -// triggerID := triggerChannelValue.triggerID -// consumerMessages := triggerChannelValue.cmsgList -// //Aggregation map[userid]message list -// log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) -// for i := 0; i < len(consumerMessages); i++ { -// msgFromMQ := pbMsg.MsgDataToMQ{} -// err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) -// if err != nil { -// log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) -// return -// } -// log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) -// if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { -// oldM = append(oldM, &msgFromMQ) -// UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM -// } else { -// m := make([]*pbMsg.MsgDataToMQ, 0, 100) -// m = append(m, &msgFromMQ) -// UserAggregationMsgs[string(consumerMessages[i].Key)] = m -// } -// } -// log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) -// for userID, v := range UserAggregationMsgs { -// if len(v) >= 0 { -// hashCode := getHashCode(userID) -// channelID := hashCode % ChannelNum -// log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) -// //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { -// och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} -// //}(channelID, userID, v) -// } -// } -// } -// } -// -// } -// -//} +func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { + for { + UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) + select { + case cmd := <-och.msgDistributionCh: + switch cmd.Cmd { + case ConsumerMsgs: + triggerChannelValue := cmd.Value.(TriggerChannelValue) + triggerID := triggerChannelValue.triggerID + consumerMessages := triggerChannelValue.cmsgList + //Aggregation map[userid]message list + log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) + for i := 0; i < len(consumerMessages); i++ { + msgFromMQ := pbMsg.MsgDataToMQ{} + err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) + if err != nil { + log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) + return + } + log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) + if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + oldM = append(oldM, &msgFromMQ) + UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + } else { + m := make([]*pbMsg.MsgDataToMQ, 0, 100) + m = append(m, &msgFromMQ) + UserAggregationMsgs[string(consumerMessages[i].Key)] = m + } + } + log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) + for userID, v := range UserAggregationMsgs { + if len(v) >= 0 { + hashCode := getHashCode(userID) + channelID := hashCode % ChannelNum + log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} + //}(channelID, userID, v) + } + } + } + } + + } + +} func (mc *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value now := time.Now() @@ -393,60 +393,60 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS } log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - //cMsg := make([]*sarama.ConsumerMessage, 0, 1000) - //t := time.NewTicker(time.Duration(100) * time.Millisecond) + cMsg := make([]*sarama.ConsumerMessage, 0, 1000) + t := time.NewTicker(time.Duration(100) * time.Millisecond) var triggerID string for msg := range claim.Messages() { - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(msg.Value, &msgFromMQ) - if err != nil { - log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(msg.Value), "err", err.Error()) - } - userID := string(msg.Key) - hashCode := getHashCode(userID) - channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) - //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: msgFromMQ.OperationID}} - sess.MarkMessage(msg, "") - //cMsg = append(cMsg, msg) + //msgFromMQ := pbMsg.MsgDataToMQ{} + //err := proto.Unmarshal(msg.Value, &msgFromMQ) + //if err != nil { + // log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(msg.Value), "err", err.Error()) + //} + //userID := string(msg.Key) + //hashCode := getHashCode(userID) + //channelID := hashCode % ChannelNum + //log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + //och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: msgFromMQ.OperationID}} + //sess.MarkMessage(msg, "") + cMsg = append(cMsg, msg) //och.TriggerCmd(OnlineTopicBusy) - //select { - ////case : - //// triggerID = utils.OperationIDGenerator() - //// - //// log.NewDebug(triggerID, "claim.Messages ", msg) - //// cMsg = append(cMsg, msg) - //// if len(cMsg) >= 1000 { - //// ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - //// for _, v := range cMsg { - //// ccMsg = append(ccMsg, v) - //// } - //// log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) - //// och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - //// triggerID: triggerID, cmsgList: ccMsg}} - //// sess.MarkMessage(msg, "") - //// cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - //// log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) - //// } + select { + //case : + // triggerID = utils.OperationIDGenerator() // - //case <-t.C: - // if len(cMsg) > 0 { + // log.NewDebug(triggerID, "claim.Messages ", msg) + // cMsg = append(cMsg, msg) + // if len(cMsg) >= 1000 { // ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) // for _, v := range cMsg { // ccMsg = append(ccMsg, v) // } - // triggerID = utils.OperationIDGenerator() - // log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) + // log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) // och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ // triggerID: triggerID, cmsgList: ccMsg}} - // sess.MarkMessage(cMsg[len(cMsg)-1], "") + // sess.MarkMessage(msg, "") // cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - // log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) + // log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) // } - //default: - // - //} + + case <-t.C: + if len(cMsg) > 0 { + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) + } + triggerID = utils.OperationIDGenerator() + log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg}} + sess.MarkMessage(ccMsg[len(cMsg)-1], "") + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) + } + default: + + } //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) } From 17b7ef80ba92124438f9b07658913ff8d86cace4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 19:01:36 +0800 Subject: [PATCH 214/752] channelNum --- internal/msg_transfer/logic/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 96412fa40..f8c424dcc 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -16,7 +16,7 @@ const Msg = 2 const ConsumerMsgs = 3 const UserMessages = 4 const MongoMessages = 5 -const ChannelNum = 10 +const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler From 08cc287dffe9411baeb2bea0002e1e90c5a64103 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 19:15:15 +0800 Subject: [PATCH 215/752] script --- test/mongo/mongo_utils.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 8393e0477..ead1faf83 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -20,6 +20,7 @@ func GetUserAllChat(uid string) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg") var userChatList []db.UserChat + uid = uid + ":" filter := bson.M{"uid": bson.M{"$regex": uid}} //filter := bson.M{"uid": "17726378428:0"} result, err := collection.Find(context.Background(), filter) From 60c8d3b8327cfbaf07636a8f04f0a68566f266b1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 19:21:06 +0800 Subject: [PATCH 216/752] script --- test/mongo/mongo_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index ead1faf83..7053e56b6 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -39,7 +39,7 @@ func GetUserAllChat(uid string) { fmt.Println(err.Error(), msg) continue } - fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status, "sendID: ", msgData.SendID, "recvID: ", msgData.RecvID) + fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status, "sendID: ", msgData.SendID, "recvID: ", msgData.RecvID, "sendTime: ", msgData.SendTime) } } } From c997fbafb04a937c4df4a56d9193667bab2527c1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 19:37:20 +0800 Subject: [PATCH 217/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 4e1242eff..a915fce0e 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -39,7 +39,6 @@ type OnlineHistoryConsumerHandler struct { msgHandle map[string]fcb historyConsumerGroup *kfk.MConsumerGroup cmdCh chan Cmd2Value - msgCh chan Cmd2Value chArrays [ChannelNum]chan Cmd2Value chMongoArrays [ChannelNum]chan Cmd2Value msgDistributionCh chan Cmd2Value @@ -50,13 +49,12 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel go och.MessagesDistributionHandle() och.cmdCh = cmdCh - och.msgCh = make(chan Cmd2Value, 1000) for i := 0; i < ChannelNum; i++ { - och.chArrays[i] = make(chan Cmd2Value, 1000) + och.chArrays[i] = make(chan Cmd2Value, 100) go och.Run(i) } for i := 0; i < ChannelNum; i++ { - och.chMongoArrays[i] = make(chan Cmd2Value, 10000) + och.chMongoArrays[i] = make(chan Cmd2Value, 1000) go och.MongoMessageRun(i) } if config.Config.ReliableStorage { From b2112ca8b999b825b9e1ebc8458fed5d8460916d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 19:45:57 +0800 Subject: [PATCH 218/752] ingress --- deploy_k8s/ingress.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 0f5eb74ff..460cdc588 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -9,7 +9,7 @@ metadata: name: sdk-server-ingress spec: rules: - - host: sdk-server.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -17,7 +17,7 @@ spec: name: sdk-server port: number: 10003 - path: / + path: /sdk-server pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -30,7 +30,7 @@ metadata: name: msg-gateway-ingress spec: rules: - - host: msg-gateway.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -38,7 +38,7 @@ spec: name: msg-gateway port: number: 10001 - path: / + path: /msg-gateway pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -47,7 +47,7 @@ metadata: name: api-ingress spec: rules: - - host: api.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -55,7 +55,7 @@ spec: name: api port: number: 10002 - path: / + path: /api pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -64,7 +64,7 @@ metadata: name: demo-ingress spec: rules: - - host: demo.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -72,7 +72,7 @@ spec: name: demo port: number: 10004 - path: / + path: /demo pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -81,7 +81,7 @@ metadata: name: cms-api-ingress spec: rules: - - host: cms-api.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -89,5 +89,5 @@ spec: name: cms-api port: number: 10006 - path: / + path: /cms-api pathType: Prefix From ef5bd956208c299e73306e6e2156d88f7eb8b29f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 25 May 2022 20:17:17 +0800 Subject: [PATCH 219/752] ingress --- test/mongo/mongo_utils.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 7053e56b6..591143d90 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -2,7 +2,6 @@ package mongo import ( "Open_IM/pkg/common/config" - "Open_IM/pkg/common/db" server_api_params "Open_IM/pkg/proto/sdk_ws" "context" "fmt" @@ -16,10 +15,20 @@ var ( Client *mongo.Client ) +type MsgInfo struct { + SendTime int64 + Msg []byte +} + +type UserChat struct { + UID string + Msg []MsgInfo +} + func GetUserAllChat(uid string) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg") - var userChatList []db.UserChat + var userChatList []UserChat uid = uid + ":" filter := bson.M{"uid": bson.M{"$regex": uid}} //filter := bson.M{"uid": "17726378428:0"} From ee47c6d7274abd95d33f9e913ecdcf0459a4ec9e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 20:29:32 +0800 Subject: [PATCH 220/752] channelNum --- .../logic/online_history_msg_handler.go | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index a915fce0e..3deed6a23 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -17,6 +17,7 @@ import ( "github.com/golang/protobuf/proto" "hash/crc32" "strings" + "sync" "time" ) @@ -389,7 +390,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS break } } - + rwLock := new(sync.RWMutex) log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) @@ -407,8 +408,16 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { //och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: msgFromMQ.OperationID}} //sess.MarkMessage(msg, "") + rwLock.Lock() cMsg = append(cMsg, msg) + rwLock.Unlock() + sess.MarkMessage(msg, "") //och.TriggerCmd(OnlineTopicBusy) + + //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) + + } + go func() { select { //case : // triggerID = utils.OperationIDGenerator() @@ -430,24 +439,26 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS case <-t.C: if len(cMsg) > 0 { + rwLock.Lock() ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) for _, v := range cMsg { ccMsg = append(ccMsg, v) } + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + rwLock.Unlock() + triggerID = utils.OperationIDGenerator() log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg}} - sess.MarkMessage(ccMsg[len(cMsg)-1], "") - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + //sess.MarkMessage(ccMsg[len(cMsg)-1], "") + log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } - default: } - //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) + }() - } return nil } From bf87eb68e2f9aa5d11c0b19aa9ae7e4a98750edb Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 21:03:48 +0800 Subject: [PATCH 221/752] channelNum --- .../logic/online_history_msg_handler.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 3deed6a23..095319f10 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -446,11 +446,17 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS } cMsg = make([]*sarama.ConsumerMessage, 0, 1000) rwLock.Unlock() - + split := 1000 triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg}} + for i := 0; i < len(ccMsg)/split; i++ { + log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg[i*split : (i+1)*split]}} + } + if (len(ccMsg) % split) > 0 { + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg[split*(len(ccMsg)/split):]}} + } //sess.MarkMessage(ccMsg[len(cMsg)-1], "") log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) From bcfa3efef7b3d729bfab6139ebf08ad704709b16 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 21:15:17 +0800 Subject: [PATCH 222/752] channelNum --- .../logic/online_history_msg_handler.go | 86 ++++++++++--------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 095319f10..48f190dde 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -418,51 +418,55 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS } go func() { - select { - //case : - // triggerID = utils.OperationIDGenerator() - // - // log.NewDebug(triggerID, "claim.Messages ", msg) - // cMsg = append(cMsg, msg) - // if len(cMsg) >= 1000 { - // ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - // for _, v := range cMsg { - // ccMsg = append(ccMsg, v) - // } - // log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) - // och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - // triggerID: triggerID, cmsgList: ccMsg}} - // sess.MarkMessage(msg, "") - // cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - // log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) - // } + for { + select { + //case : + // triggerID = utils.OperationIDGenerator() + // + // log.NewDebug(triggerID, "claim.Messages ", msg) + // cMsg = append(cMsg, msg) + // if len(cMsg) >= 1000 { + // ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + // for _, v := range cMsg { + // ccMsg = append(ccMsg, v) + // } + // log.Debug(triggerID, "length trigger msg consumer start", len(ccMsg)) + // och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + // triggerID: triggerID, cmsgList: ccMsg}} + // sess.MarkMessage(msg, "") + // cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + // log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) + // } - case <-t.C: - if len(cMsg) > 0 { - rwLock.Lock() - ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) - for _, v := range cMsg { - ccMsg = append(ccMsg, v) - } - cMsg = make([]*sarama.ConsumerMessage, 0, 1000) - rwLock.Unlock() - split := 1000 - triggerID = utils.OperationIDGenerator() - for i := 0; i < len(ccMsg)/split; i++ { - log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg[i*split : (i+1)*split]}} - } - if (len(ccMsg) % split) > 0 { - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: ccMsg[split*(len(ccMsg)/split):]}} - } - //sess.MarkMessage(ccMsg[len(cMsg)-1], "") + case <-t.C: + if len(cMsg) > 0 { + rwLock.Lock() + ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) + for _, v := range cMsg { + ccMsg = append(ccMsg, v) + } + cMsg = make([]*sarama.ConsumerMessage, 0, 1000) + rwLock.Unlock() + split := 1000 + triggerID = utils.OperationIDGenerator() + for i := 0; i < len(ccMsg)/split; i++ { + log.NewWarn(triggerID, "timer trigger msg consumer start", len(ccMsg)) + //log.Debug() + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg[i*split : (i+1)*split]}} + } + if (len(ccMsg) % split) > 0 { + och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ + triggerID: triggerID, cmsgList: ccMsg[split*(len(ccMsg)/split):]}} + } + //sess.MarkMessage(ccMsg[len(cMsg)-1], "") + + log.NewWarn(triggerID, "timer trigger msg consumer end", len(cMsg)) + } - log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) } - } + }() return nil From 94cd17909d0cc9039c54ebba8d8d98b090e6471a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 21:23:10 +0800 Subject: [PATCH 223/752] channelNum --- .../logic/online_history_msg_handler.go | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 48f190dde..7434dfd5d 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -395,28 +395,6 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) var triggerID string - for msg := range claim.Messages() { - //msgFromMQ := pbMsg.MsgDataToMQ{} - //err := proto.Unmarshal(msg.Value, &msgFromMQ) - //if err != nil { - // log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(msg.Value), "err", err.Error()) - //} - //userID := string(msg.Key) - //hashCode := getHashCode(userID) - //channelID := hashCode % ChannelNum - //log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) - ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - //och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: msgFromMQ.OperationID}} - //sess.MarkMessage(msg, "") - rwLock.Lock() - cMsg = append(cMsg, msg) - rwLock.Unlock() - sess.MarkMessage(msg, "") - //och.TriggerCmd(OnlineTopicBusy) - - //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) - - } go func() { for { select { @@ -468,6 +446,28 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS } }() + for msg := range claim.Messages() { + //msgFromMQ := pbMsg.MsgDataToMQ{} + //err := proto.Unmarshal(msg.Value, &msgFromMQ) + //if err != nil { + // log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(msg.Value), "err", err.Error()) + //} + //userID := string(msg.Key) + //hashCode := getHashCode(userID) + //channelID := hashCode % ChannelNum + //log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + //och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: msgFromMQ.OperationID}} + //sess.MarkMessage(msg, "") + rwLock.Lock() + cMsg = append(cMsg, msg) + rwLock.Unlock() + sess.MarkMessage(msg, "") + //och.TriggerCmd(OnlineTopicBusy) + + //log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) + + } return nil } From 948e5a2ddea3957dc240d319c09ac4e5938ce719 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 21:43:35 +0800 Subject: [PATCH 224/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 7434dfd5d..695691107 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -427,8 +427,8 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS rwLock.Unlock() split := 1000 triggerID = utils.OperationIDGenerator() + log.NewWarn(triggerID, "timer trigger msg consumer start", len(ccMsg)) for i := 0; i < len(ccMsg)/split; i++ { - log.NewWarn(triggerID, "timer trigger msg consumer start", len(ccMsg)) //log.Debug() och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ triggerID: triggerID, cmsgList: ccMsg[i*split : (i+1)*split]}} From c83e816bdae0011b9034b12561479268c4564203 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 22:15:34 +0800 Subject: [PATCH 225/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 695691107..2baa30a36 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -154,7 +154,6 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { - return hashCode := getHashCode(userID) channelID := hashCode % ChannelNum log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) From 5621a651a16ff1eda44e64e93863ad5cf6d4ca6e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 22:17:11 +0800 Subject: [PATCH 226/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 2baa30a36..0f07bd63f 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -51,11 +51,11 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { go och.MessagesDistributionHandle() och.cmdCh = cmdCh for i := 0; i < ChannelNum; i++ { - och.chArrays[i] = make(chan Cmd2Value, 100) + och.chArrays[i] = make(chan Cmd2Value, 10) go och.Run(i) } for i := 0; i < ChannelNum; i++ { - och.chMongoArrays[i] = make(chan Cmd2Value, 1000) + och.chMongoArrays[i] = make(chan Cmd2Value, 100) go och.MongoMessageRun(i) } if config.Config.ReliableStorage { From 2910a6effd29978b3c5f1c14ff9da6967d9acaa5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 22:30:30 +0800 Subject: [PATCH 227/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 0f07bd63f..328669a7e 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -55,7 +55,7 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { go och.Run(i) } for i := 0; i < ChannelNum; i++ { - och.chMongoArrays[i] = make(chan Cmd2Value, 100) + och.chMongoArrays[i] = make(chan Cmd2Value, 1000) go och.MongoMessageRun(i) } if config.Config.ReliableStorage { From 2add9a02f966e9aa691c272f943444f3a2ac49b1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 25 May 2022 22:42:44 +0800 Subject: [PATCH 228/752] channelNum --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 328669a7e..fb5b33ce9 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -51,11 +51,11 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { go och.MessagesDistributionHandle() och.cmdCh = cmdCh for i := 0; i < ChannelNum; i++ { - och.chArrays[i] = make(chan Cmd2Value, 10) + och.chArrays[i] = make(chan Cmd2Value, 50) go och.Run(i) } for i := 0; i < ChannelNum; i++ { - och.chMongoArrays[i] = make(chan Cmd2Value, 1000) + och.chMongoArrays[i] = make(chan Cmd2Value, 10000) go och.MongoMessageRun(i) } if config.Config.ReliableStorage { From d8c0a82411ef7d1f07298fe99697a74c8e81285e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 10:06:56 +0800 Subject: [PATCH 229/752] ingress --- deploy_k8s/ingress.yaml | 20 ++++++++++---------- deploy_k8s/k8s_openim_deploy.md | 2 ++ internal/rpc/group/group.go | 6 +++--- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 460cdc588..0f5eb74ff 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -9,7 +9,7 @@ metadata: name: sdk-server-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: sdk-server.openim.xxx.com http: paths: - backend: @@ -17,7 +17,7 @@ spec: name: sdk-server port: number: 10003 - path: /sdk-server + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -30,7 +30,7 @@ metadata: name: msg-gateway-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: msg-gateway.openim.xxx.com http: paths: - backend: @@ -38,7 +38,7 @@ spec: name: msg-gateway port: number: 10001 - path: /msg-gateway + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -47,7 +47,7 @@ metadata: name: api-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: api.openim.xxx.com http: paths: - backend: @@ -55,7 +55,7 @@ spec: name: api port: number: 10002 - path: /api + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -64,7 +64,7 @@ metadata: name: demo-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: demo.openim.xxx.com http: paths: - backend: @@ -72,7 +72,7 @@ spec: name: demo port: number: 10004 - path: /demo + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -81,7 +81,7 @@ metadata: name: cms-api-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: cms-api.openim.xxx.com http: paths: - backend: @@ -89,5 +89,5 @@ spec: name: cms-api port: number: 10006 - path: /cms-api + path: / pathType: Prefix diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 57f85600a..d4ccb4bfe 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -25,8 +25,10 @@ jssdk 需要在sdk_server/deployment.yaml修改启动端口等 域名修改等操作 ### 5. 执行./kubectl_start.sh脚本 +需要安装ingress controller chmod +x ./kubectl_start.sh ./kubectl_stop.sh ./kubectl_start.sh +kubectl -n openim apply -f ingress.yaml kubectl 启动所有deployment,services,ingress ### 6. 查看k8s deployment service ingress状态 diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 22fcc61af..57faf3fe2 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -379,11 +379,11 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro } for _, v := range memberList { - log.Debug(req.OperationID, v) + //log.Debug(req.OperationID, v) var node open_im_sdk.GroupMemberFullInfo cp.GroupMemberDBCopyOpenIM(&node, &v) - log.Debug(req.OperationID, "db value:", v.MuteEndTime, "seconds: ", v.MuteEndTime.Unix()) - log.Debug(req.OperationID, "cp value: ", node) + //log.Debug(req.OperationID, "db value:", v.MuteEndTime, "seconds: ", v.MuteEndTime.Unix()) + //log.Debug(req.OperationID, "cp value: ", node) resp.MemberList = append(resp.MemberList, &node) } log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String()) From f61dbdcceca11486921fd3ab03bd2e4709ed1ead Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 10:37:06 +0800 Subject: [PATCH 230/752] ingress --- deploy_k8s/ingress.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 0f5eb74ff..d8402ee05 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -3,6 +3,7 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: + kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" @@ -24,6 +25,7 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: + kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" @@ -44,6 +46,8 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: + annotations: + kubernetes.io/ingress.class: "nginx" name: api-ingress spec: rules: @@ -61,6 +65,8 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: + annotations: + kubernetes.io/ingress.class: "nginx" name: demo-ingress spec: rules: @@ -78,6 +84,8 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: + annotations: + kubernetes.io/ingress.class: "nginx" name: cms-api-ingress spec: rules: From d1651b54ec9fa006012cec084e8ec2074218d9f4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 10:45:16 +0800 Subject: [PATCH 231/752] ingress --- deploy_k8s/k8s_openim_deploy.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index d4ccb4bfe..017fb0e85 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -17,15 +17,14 @@ nodeSelector: node: kube-Node 创建资源清单时添加上nodeSelector属性对应即可 修改每种服务数量,建议至少每种2个rpc。 -如果修改了config/config.yaml某些配置比如端口,同时需要修改对应deployment端口 +如果修改了config/config.yaml某些配置比如端口,同时需要修改对应deployment端口和ingress端口 -jssdk 需要在sdk_server/deployment.yaml修改启动端口等 ### 4. 修改ingress.yaml配置文件 -域名修改等操作 +需要安装ingress controller 这里使用的是ingress-nginx 其他ingress需要修改配置文件 +进行域名修改等操作 ### 5. 执行./kubectl_start.sh脚本 -需要安装ingress controller chmod +x ./kubectl_start.sh ./kubectl_stop.sh ./kubectl_start.sh kubectl -n openim apply -f ingress.yaml @@ -35,4 +34,4 @@ kubectl 启动所有deployment,services,ingress kubectl -n openim get services kubectl -n openim get deployment kubectl -n openim get ingress -kubectl -n openim get pods \ No newline at end of file +kubectl -n openim get pods From ac1e557c46d307d99e7faaed207dbc03c5dc89ab Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Thu, 26 May 2022 12:10:30 +0800 Subject: [PATCH 232/752] add error handling : mongo --- go.mod | 8 +--- go.sum | 59 ++++++++++++++++++++++-------- pkg/common/db/batch_insert_chat.go | 27 +++++++++++++- pkg/common/db/model.go | 5 +++ 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index c3dd5f1e8..0fcf1b807 100644 --- a/go.mod +++ b/go.mod @@ -4,25 +4,21 @@ go 1.15 require ( github.com/Shopify/sarama v1.32.0 - github.com/Shopify/toxiproxy v2.1.4+incompatible // indirect github.com/alibabacloud-go/darabonba-openapi v0.1.11 github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.8 github.com/alibabacloud-go/sts-20150401 v1.1.0 github.com/alibabacloud-go/tea v1.1.17 github.com/antonfisher/nested-logrus-formatter v1.3.0 github.com/bwmarrin/snowflake v0.3.0 - 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 github.com/fatih/structs v1.1.0 github.com/garyburd/redigo v1.6.2 github.com/gin-gonic/gin v1.7.0 github.com/go-playground/validator/v10 v10.4.1 + github.com/go-redis/redis/v8 v8.11.5 github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/gogo/protobuf v1.3.2 github.com/golang-jwt/jwt/v4 v4.1.0 github.com/golang/protobuf v1.5.2 - github.com/golang/snappy v0.0.4 // indirect github.com/gorilla/websocket v1.4.2 github.com/jinzhu/copier v0.3.4 github.com/jinzhu/gorm v1.9.16 @@ -36,9 +32,7 @@ require ( github.com/mitchellh/mapstructure v1.4.2 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 - github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/pkg/errors v0.9.1 - github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 diff --git a/go.sum b/go.sum index 59d70ead3..3d828c7c2 100644 --- a/go.sum +++ b/go.sum @@ -3,12 +3,8 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.32.0 h1:P+RUjEaRU0GMMbYexGMDyrMkLhbbBVUVISDywi+IlFU= github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= -github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -54,8 +50,14 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +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/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/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -75,6 +77,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM= github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= 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/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= @@ -97,10 +101,11 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= -github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns= github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM= github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -122,11 +127,14 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -165,11 +173,10 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -186,6 +193,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= @@ -225,7 +234,6 @@ 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.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -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/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4= github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -283,10 +291,24 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW 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= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/olivere/elastic/v7 v7.0.23 h1:b7tjMogDMhf2CisGI+L02LXLVa0ZyE82Z15XfW1e8t8= github.com/olivere/elastic/v7 v7.0.23/go.mod h1:OuWmD2DiuYhddWegBKPWQuelVKBLrW0fa/VUYgxuGTY= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.0.0 h1:CcuG/HvWNkkaqCUpJifQY8z7qEMBJya6aLPx6ftGyjQ= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -357,7 +379,6 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.0 h1:d70R37I0HrDLsafRrMBXyrD4lmQbCHE873t00Vr0gm0= github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= @@ -395,8 +416,6 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -413,6 +432,7 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -425,13 +445,14 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -450,11 +471,16 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cO golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -463,6 +489,7 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -493,6 +520,7 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -540,11 +568,11 @@ gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 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/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -553,6 +581,7 @@ gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +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= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index 173001a41..fd037998c 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -10,8 +10,13 @@ import ( "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" ) +func (d *DataBases) BatchDeleteChat2DB(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string) { + +} + func (d *DataBases) BatchInsertChat2DB(userID string, msgList []*pbMsg.MsgDataToMQ, operationID string, currentMaxSeq uint64) error { newTime := getCurrentTimestampByMill() if len(msgList) > GetSingleGocMsgNum() { @@ -68,8 +73,20 @@ func (d *DataBases) BatchInsertChat2DB(userID string, msgList []*pbMsg.MsgDataTo log.NewDebug(operationID, "filter ", seqUid, "list ", msgListToMongo) err := c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": bson.M{"$each": msgListToMongo}}}).Err() if err != nil { - log.Error(operationID, "FindOneAndUpdate failed ", err.Error(), filter) - return utils.Wrap(err, "") + if err == mongo.ErrNoDocuments { + filter := bson.M{"uid": seqUid} + sChat := UserChat{} + sChat.UID = seqUid + sChat.Msg = msgListToMongo + log.NewDebug(operationID, "filter ", seqUid, "list ", msgListToMongo) + if _, err = c.InsertOne(ctx, &sChat); err != nil { + log.NewError(operationID, "InsertOne failed", filter, err.Error(), sChat) + return utils.Wrap(err, "") + } + } else { + log.Error(operationID, "FindOneAndUpdate failed ", err.Error(), filter) + return utils.Wrap(err, "") + } } } if seqUidNext != "" { @@ -231,3 +248,9 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, //func (d *DataBases)setMessageToCache(msgList []*pbMsg.MsgDataToMQ, uid string) (err error) { // //} + +func (d *DataBases) GetFromCacheAndInsertDB(msgUserIDPrefix string) { + //get value from redis + + //batch insert to db +} diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 6edf36b8a..bcc357494 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -20,6 +20,9 @@ import ( //"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" // "go.mongodb.org/mongo-driver/mongo/options" + + +//go_redis "github.com/go-redis/redis/v8" ) var DB DataBases @@ -29,6 +32,8 @@ type DataBases struct { mgoSession *mgo.Session redisPool *redis.Pool mongoClient *mongo.Client + + rdb * } func key(dbAddress, dbName string) string { From 8addb49012c4d9fdc54fc8e72a1e69da5784f872 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Thu, 26 May 2022 12:10:45 +0800 Subject: [PATCH 233/752] add error handling : mongo --- pkg/common/db/model.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index bcc357494..f8aaca54a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -20,9 +20,7 @@ import ( //"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" // "go.mongodb.org/mongo-driver/mongo/options" - - -//go_redis "github.com/go-redis/redis/v8" + //go_redis "github.com/go-redis/redis/v8" ) var DB DataBases @@ -32,8 +30,6 @@ type DataBases struct { mgoSession *mgo.Session redisPool *redis.Pool mongoClient *mongo.Client - - rdb * } func key(dbAddress, dbName string) string { From b4da35a0abaafd461f708b2f0cfd5211b606908c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 18:02:00 +0800 Subject: [PATCH 234/752] ingress --- internal/api/manage/management_chat.go | 135 ++++++++++++++++++++----- internal/msg_gateway/gate/callback.go | 51 ++++++++++ internal/msg_gateway/gate/ws_server.go | 8 +- internal/push/logic/callback.go | 33 ++++++ internal/push/logic/push_to_client.go | 8 ++ internal/rpc/msg/callback.go | 109 ++++++++++---------- internal/rpc/msg/send_msg.go | 65 +++++------- pkg/base_info/manage_api_struct.go | 30 ++++++ pkg/call_back_struct/common.go | 8 ++ pkg/call_back_struct/msg_gateway.go | 18 ++++ pkg/call_back_struct/push.go | 12 +++ pkg/common/config/config.go | 5 +- pkg/common/constant/constant.go | 3 + 13 files changed, 359 insertions(+), 126 deletions(-) create mode 100644 internal/msg_gateway/gate/callback.go create mode 100644 internal/push/logic/callback.go create mode 100644 pkg/call_back_struct/msg_gateway.go create mode 100644 pkg/call_back_struct/push.go diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 94caa5e2a..9ee8c7874 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -28,7 +28,7 @@ import ( var validate *validator.Validate -func newUserSendMsgReq(params *ManagementSendMsgReq) *pbChat.SendMsgReq { +func newUserSendMsgReq(params *api.ManagementSendMsgReq) *pbChat.SendMsgReq { var newContent string var err error switch params.ContentType { @@ -91,7 +91,7 @@ func init() { func ManagementSendMsg(c *gin.Context) { var data interface{} - params := ManagementSendMsgReq{} + params := api.ManagementSendMsgReq{} if err := c.BindJSON(¶ms); err != nil { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) log.Error(c.PostForm("operationID"), "json unmarshal err", err.Error(), c.PostForm("content")) @@ -186,34 +186,113 @@ func ManagementSendMsg(c *gin.Context) { resp := api.ManagementSendMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, ResultList: server_api_params.UserSendMsgResp{ServerMsgID: RpcResp.ServerMsgID, ClientMsgID: RpcResp.ClientMsgID, SendTime: RpcResp.SendTime}} log.Info(params.OperationID, "ManagementSendMsg return", resp) c.JSON(http.StatusOK, resp) - } -// -//type MergeElem struct { -// Title string `json:"title"` -// AbstractList []string `json:"abstractList"` -// MultiMessage []*MsgStruct `json:"multiMessage"` -//} -// -//type QuoteElem struct { -// Text string `json:"text"` -// QuoteMessage *MsgStruct `json:"quoteMessage"` -//} -type ManagementSendMsgReq struct { - OperationID string `json:"operationID" binding:"required"` - SendID string `json:"sendID" binding:"required"` - RecvID string `json:"recvID" ` - GroupID string `json:"groupID" ` - SenderNickname string `json:"senderNickname" ` - SenderFaceURL string `json:"senderFaceURL" ` - SenderPlatformID int32 `json:"senderPlatformID"` - ForceList []string `json:"forceList" ` - Content map[string]interface{} `json:"content" binding:"required"` - ContentType int32 `json:"contentType" binding:"required"` - SessionType int32 `json:"sessionType" binding:"required"` - IsOnlineOnly bool `json:"isOnlineOnly"` - OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"` +func ManagementBatchSendMsg(c *gin.Context) { + var data interface{} + params := api.ManagementBatchSendMsgReq{} + resp := api.ManagementBatchSendMsgResp{} + if err := c.BindJSON(¶ms); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + log.Error(c.PostForm("operationID"), "json unmarshal err", err.Error(), c.PostForm("content")) + return + } + switch params.ContentType { + case constant.Text: + data = TextElem{} + case constant.Picture: + data = PictureElem{} + case constant.Voice: + data = SoundElem{} + case constant.Video: + data = VideoElem{} + case constant.File: + data = FileElem{} + //case constant.AtText: + // data = AtElem{} + //case constant.Merger: + // data = + //case constant.Card: + //case constant.Location: + case constant.Custom: + data = CustomElem{} + case constant.Revoke: + data = RevokeElem{} + case constant.OANotification: + data = OANotificationElem{} + params.SessionType = constant.NotificationChatType + //case constant.HasReadReceipt: + //case constant.Typing: + //case constant.Quote: + default: + c.JSON(http.StatusBadRequest, gin.H{"errCode": 404, "errMsg": "contentType err"}) + log.Error(c.PostForm("operationID"), "contentType err", c.PostForm("content")) + return + } + if err := mapstructure.WeakDecode(params.Content, &data); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()}) + log.Error(c.PostForm("operationID"), "content to Data struct err", err.Error()) + return + } else if err := validate.Struct(data); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 403, "errMsg": err.Error()}) + log.Error(c.PostForm("operationID"), "data args validate err", err.Error()) + return + } + log.NewInfo("", data, params) + token := c.Request.Header.Get("token") + claims, err := token_verify.ParseToken(token, params.OperationID) + if err != nil { + log.NewError(params.OperationID, "parse token failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "parse token failed", "sendTime": 0, "MsgID": ""}) + return + } + if !utils.IsContain(claims.UID, config.Config.Manager.AppManagerUid) { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""}) + return + + } + switch params.SessionType { + case constant.SingleChatType: + if len(params.RecvID) == 0 { + log.NewError(params.OperationID, "recvID is a null string") + c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""}) + return + } + case constant.GroupChatType: + if len(params.GroupID) == 0 { + log.NewError(params.OperationID, "groupID is a null string") + c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""}) + return + } + + } + log.NewInfo(params.OperationID, "Ws call success to ManagementSendMsgReq", params) + for _, recvID := range params.RecvIDList { + pbData := newUserSendMsgReq(¶ms.ManagementSendMsgReq) + pbData.MsgData.RecvID = recvID + log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + client := pbChat.NewChatClient(etcdConn) + rpcResp, err := client.SendMsg(context.Background(), pbData) + if err != nil { + log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error()) + resp.Data.FailedIDList = append(resp.Data.FailedIDList, recvID) + continue + } + if rpcResp.ErrCode != 0 { + log.NewError(params.OperationID, utils.GetSelfFuncName(), "rpc failed", pbData) + resp.Data.FailedIDList = append(resp.Data.FailedIDList, recvID) + continue + } + resp.Data.ResultList = append(resp.Data.ResultList, server_api_params.UserSendMsgResp{ + ServerMsgID: rpcResp.ServerMsgID, + ClientMsgID: rpcResp.ClientMsgID, + SendTime: rpcResp.SendTime, + }) + } + + log.NewInfo(params.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + c.JSON(http.StatusOK, resp) } type PictureBaseInfo struct { diff --git a/internal/msg_gateway/gate/callback.go b/internal/msg_gateway/gate/callback.go new file mode 100644 index 000000000..58d3a98b2 --- /dev/null +++ b/internal/msg_gateway/gate/callback.go @@ -0,0 +1,51 @@ +package gate + +import ( + cbApi "Open_IM/pkg/call_back_struct" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/http" + http2 "net/http" +) + +func callbackUserOnline(operationID, userID string, platformID int32, token string) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} + if !config.Config.Callback.CallbackUserOnline.Enable { + return callbackResp + } + callbackUserOnlineReq := cbApi.CallbackUserOnlineReq{ + Token: token, + UserStatusCallbackReq: cbApi.UserStatusCallbackReq{ + CallbackCommand: constant.CallbackUserOnlineCommand, + OperationID: operationID, + UserID: userID, + PlatformID: platformID, + Platform: constant.PlatformIDToName(platformID), + }} + callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: callbackResp} + if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackUserOnlineReq, callbackUserOnlineResp, config.Config.Callback.CallbackUserOnline.CallbackTimeOut); err != nil { + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + } + return callbackResp +} + +func callbackUserOffline(operationID, userID string, platform string) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} + if !config.Config.Callback.CallbackUserOffline.Enable { + return callbackResp + } + callbackOfflineReq := cbApi.CallbackUserOfflineReq{UserStatusCallbackReq: cbApi.UserStatusCallbackReq{ + CallbackCommand: constant.CallbackUserOfflineCommand, + OperationID: operationID, + UserID: userID, + PlatformID: constant.PlatformNameToID(platform), + Platform: platform, + }} + callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: callbackResp} + if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil { + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + } + return callbackResp +} diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index c14277c9c..daae9e793 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -59,7 +59,6 @@ func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { } else { //Connection mapping relationship, //userID+" "+platformID->conn - //Initialize a lock for each user newConn := &UserConn{conn, new(sync.Mutex)} userCount++ @@ -167,6 +166,10 @@ func (ws *WServer) addUserConn(uid string, platformID int32, conn *UserConn, tok rwLock.Lock() defer rwLock.Unlock() operationID := utils.OperationIDGenerator() + callbackResp := callbackUserOnline(operationID, uid, platformID, token) + if callbackResp.ErrCode != 0 { + log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOnline resp:", callbackResp) + } ws.MultiTerminalLoginChecker(uid, platformID, conn, token, operationID) if oldConnMap, ok := ws.wsUserToConn[uid]; ok { oldConnMap[constant.PlatformIDToName(platformID)] = conn @@ -191,7 +194,6 @@ func (ws *WServer) addUserConn(uid string, platformID int32, conn *UserConn, tok count = count + len(v) } log.Debug(operationID, "WS Add operation", "", "wsUser added", ws.wsUserToConn, "connection_uid", uid, "connection_platform", constant.PlatformIDToName(platformID), "online_user_num", len(ws.wsUserToConn), "online_conn_num", count) - } func (ws *WServer) delUserConn(conn *UserConn) { @@ -225,7 +227,7 @@ func (ws *WServer) delUserConn(conn *UserConn) { if err != nil { log.Error(operationID, " close err", "", "uid", uid, "platform", platform) } - + callbaclResp := callbackUserOffline(operationID, uid, platform) } func (ws *WServer) getUserConn(uid string, platform string) *UserConn { diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go new file mode 100644 index 000000000..a706ef006 --- /dev/null +++ b/internal/push/logic/callback.go @@ -0,0 +1,33 @@ +package logic + +import ( + cbApi "Open_IM/pkg/call_back_struct" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/http" + commonPb "Open_IM/pkg/proto/sdk_ws" + http2 "net/http" +) + +func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushInfo, platformID int32) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} + if !config.Config.Callback.CallbackUserOnline.Enable { + return callbackResp + } + callbackOfflinePushReq := cbApi.CallbackOfflinePushReq{ + UserStatusCallbackReq: cbApi.UserStatusCallbackReq{ + CallbackCommand: constant.CallbackOfflinePushCommand, + OperationID: operationID, + UserID: userID, + PlatformID: platformID, + Platform: constant.PlatformIDToName(platformID), + }, + OfflinePushInfo: info, + } + callbackOfflinePushResp := &cbApi.CallbackOfflinePushResp{CommonCallbackResp: callbackResp} + if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflinePushReq, callbackOfflinePushResp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil { + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + } + return callbackResp +} diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 6e9b8787b..8911218f2 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -106,6 +106,14 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { content = constant.ContentType2PushContent[constant.Common] } } + callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) + if callbackResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + break + } + if offlinePusher == nil { offlinePusher = jpush.JPushClient } diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index 452846799..af8f7c334 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -8,6 +8,7 @@ import ( "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" "Open_IM/pkg/utils" + http2 "net/http" ) func copyCallbackCommonReqStruct(msg *pbChat.SendMsgReq) cbApi.CommonCallbackReq { @@ -27,11 +28,11 @@ func copyCallbackCommonReqStruct(msg *pbChat.SendMsgReq) cbApi.CommonCallbackReq } } -func callbackBeforeSendSingleMsg(msg *pbChat.SendMsgReq) (canSend bool, err error) { +func callbackBeforeSendSingleMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID} if !config.Config.Callback.CallbackBeforeSendSingleMsg.Enable { - return true, nil + return callbackResp } - log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg) commonCallbackReq := copyCallbackCommonReqStruct(msg) commonCallbackReq.CallbackCommand = constant.CallbackBeforeSendSingleMsgCommand @@ -40,27 +41,28 @@ func callbackBeforeSendSingleMsg(msg *pbChat.SendMsgReq) (canSend bool, err erro RecvID: msg.MsgData.RecvID, } resp := &cbApi.CallbackBeforeSendSingleMsgResp{ - CommonCallbackResp: cbApi.CommonCallbackResp{}, + CommonCallbackResp: callbackResp, } //utils.CopyStructFields(req, msg.MsgData) defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackTimeOut); err != nil { + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() if !config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackFailedContinue { - return false, err + callbackResp.ActionCode = constant.ActionForbidden + return callbackResp } else { - return true, err - } - } else { - if resp.ActionCode == constant.ActionForbidden && resp.ErrCode == constant.CallbackHandleSuccess { - return false, nil + callbackResp.ActionCode = constant.ActionAllow + return callbackResp } } - return true, err + return callbackResp } -func callbackAfterSendSingleMsg(msg *pbChat.SendMsgReq) error { +func callbackAfterSendSingleMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID} if !config.Config.Callback.CallbackAfterSendSingleMsg.Enable { - return nil + return callbackResp } log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg) commonCallbackReq := copyCallbackCommonReqStruct(msg) @@ -69,18 +71,20 @@ func callbackAfterSendSingleMsg(msg *pbChat.SendMsgReq) error { CommonCallbackReq: commonCallbackReq, RecvID: msg.MsgData.RecvID, } - resp := &cbApi.CallbackAfterSendSingleMsgResp{CommonCallbackResp: cbApi.CommonCallbackResp{}} - //utils.CopyStructFields(req, msg.MsgData) + resp := &cbApi.CallbackAfterSendSingleMsgResp{CommonCallbackResp: callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackAfterSendSingleMsg.CallbackTimeOut); err != nil { - return err + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + return callbackResp } - return nil + return callbackResp } -func callbackBeforeSendGroupMsg(msg *pbChat.SendMsgReq) (canSend bool, err error) { +func callbackBeforeSendGroupMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID} if !config.Config.Callback.CallbackBeforeSendGroupMsg.Enable { - return true, nil + return callbackResp } log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg) commonCallbackReq := copyCallbackCommonReqStruct(msg) @@ -89,26 +93,26 @@ func callbackBeforeSendGroupMsg(msg *pbChat.SendMsgReq) (canSend bool, err error CommonCallbackReq: commonCallbackReq, GroupID: msg.MsgData.GroupID, } - resp := &cbApi.CallbackBeforeSendGroupMsgResp{CommonCallbackResp: cbApi.CommonCallbackResp{}} - //utils.CopyStructFields(req, msg.MsgData) + resp := &cbApi.CallbackBeforeSendGroupMsgResp{CommonCallbackResp: callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackTimeOut); err != nil { - if !config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackFailedContinue { - return false, err + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + if !config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackFailedContinue { + callbackResp.ActionCode = constant.ActionForbidden + return callbackResp } else { - return true, err - } - } else { - if resp.ActionCode == constant.ActionForbidden && resp.ErrCode == constant.CallbackHandleSuccess { - return false, nil + callbackResp.ActionCode = constant.ActionAllow + return callbackResp } } - return true, err + return callbackResp } -func callbackAfterSendGroupMsg(msg *pbChat.SendMsgReq) error { +func callbackAfterSendGroupMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID} if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable { - return nil + return callbackResp } log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg) commonCallbackReq := copyCallbackCommonReqStruct(msg) @@ -117,19 +121,20 @@ func callbackAfterSendGroupMsg(msg *pbChat.SendMsgReq) error { CommonCallbackReq: commonCallbackReq, GroupID: msg.MsgData.GroupID, } - resp := &cbApi.CallbackAfterSendGroupMsgResp{CommonCallbackResp: cbApi.CommonCallbackResp{}} - - //utils.CopyStructFields(req, msg.MsgData) + resp := &cbApi.CallbackAfterSendGroupMsgResp{CommonCallbackResp: callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut); err != nil { - return err + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + return callbackResp } - return nil + return callbackResp } -func callbackWordFilter(msg *pbChat.SendMsgReq) (canSend bool, err error) { +func callbackWordFilter(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID} if !config.Config.Callback.CallbackWordFilter.Enable || msg.MsgData.ContentType != constant.Text { - return true, nil + return callbackResp } log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg) commonCallbackReq := copyCallbackCommonReqStruct(msg) @@ -137,24 +142,22 @@ func callbackWordFilter(msg *pbChat.SendMsgReq) (canSend bool, err error) { req := cbApi.CallbackWordFilterReq{ CommonCallbackReq: commonCallbackReq, } - resp := &cbApi.CallbackWordFilterResp{CommonCallbackResp: cbApi.CommonCallbackResp{}} - //utils.CopyStructFields(&req., msg.MsgData) + resp := &cbApi.CallbackWordFilterResp{CommonCallbackResp: callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackWordFilter.CallbackTimeOut); err != nil { - if !config.Config.Callback.CallbackWordFilter.CallbackFailedContinue { - log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), "callback failed and config disable, stop this operation") - return false, err + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + if !config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackFailedContinue { + callbackResp.ActionCode = constant.ActionForbidden + return callbackResp } else { - return true, err + callbackResp.ActionCode = constant.ActionAllow + return callbackResp } - } else { - if resp.ActionCode == constant.ActionForbidden && resp.ErrCode == constant.CallbackHandleSuccess { - return false, nil - } - if resp.ErrCode == constant.CallbackHandleSuccess { - msg.MsgData.Content = []byte(resp.Content) - } - log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), string(msg.MsgData.Content)) } - return true, err + if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow { + msg.MsgData.Content = []byte(resp.Content) + } + log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), string(msg.MsgData.Content)) + return callbackResp } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 93f488729..549de2fc9 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -148,47 +148,29 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } - //if !utils.VerifyToken(pb.Token, pb.SendID) { - // return returnMsg(&replay, pb, http.StatusUnauthorized, "token validate err,not authorized", "", 0) rpc.encapsulateMsgData(pb.MsgData) log.Info("", "this is a test MsgData ", pb.MsgData) msgToMQSingle := pbChat.MsgDataToMQ{Token: pb.Token, OperationID: pb.OperationID, MsgData: pb.MsgData} - //options := utils.JsonStringToMap(pbData.Options) - isHistory := utils.GetSwitchFromOptions(pb.MsgData.Options, constant.IsHistory) - mReq := MsgCallBackReq{ - SendID: pb.MsgData.SendID, - RecvID: pb.MsgData.RecvID, - Content: string(pb.MsgData.Content), - SendTime: pb.MsgData.SendTime, - MsgFrom: pb.MsgData.MsgFrom, - ContentType: pb.MsgData.ContentType, - SessionType: pb.MsgData.SessionType, - PlatformID: pb.MsgData.SenderPlatformID, - MsgID: pb.MsgData.ClientMsgID, - } - if !isHistory { - mReq.IsOnlineOnly = true - } // callback - canSend, err := callbackWordFilter(pb) - if err != nil { - log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter failed", err.Error(), pb.MsgData) + callbackResp := callbackWordFilter(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) } - if !canSend { - log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter result", canSend, "end rpc and return", pb.MsgData) - return returnMsg(&replay, pb, 201, "callbackWordFilter result stop rpc and return", "", 0) + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter result", "end rpc and return", pb.MsgData) + return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) } switch pb.MsgData.SessionType { case constant.SingleChatType: // callback - canSend, err := callbackBeforeSendSingleMsg(pb) - if err != nil { - log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg failed", err.Error()) + callbackResp := callbackBeforeSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg resp: ", callbackResp) } - if !canSend { - log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg result", canSend, "end rpc and return") - return returnMsg(&replay, pb, 201, "callbackBeforeSendSingleMsg result stop rpc and return", "", 0) + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg result", "end rpc and return", callbackResp) + return returnMsg(&replay, pb, int32(callbackResp.ActionCode), callbackResp.ErrMsg, "", 0) } isSend := modifyMessageByUserMessageReceiveOpt(pb.MsgData.RecvID, pb.MsgData.SendID, constant.SingleChatType, pb) if isSend { @@ -208,19 +190,20 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } } // callback - if err := callbackAfterSendSingleMsg(pb); err != nil { - log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendSingleMsg failed", err.Error()) + callbackResp = callbackAfterSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendSingleMsg resp: ", callbackResp) } return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) case constant.GroupChatType: // callback - canSend, err := callbackBeforeSendGroupMsg(pb) - if err != nil { - log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendGroupMsg failed", err.Error()) + callbackResp := callbackBeforeSendGroupMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendGroupMsg resp:", callbackResp) } - if !canSend { - log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendGroupMsg result", canSend, "end rpc and return") - return returnMsg(&replay, pb, 201, "callbackBeforeSendGroupMsg result stop rpc and return", "", 0) + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg result", "end rpc and return", callbackResp) + return returnMsg(&replay, pb, int32(callbackResp.ActionCode), callbackResp.ErrMsg, "", 0) } getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pb.OperationID, GroupID: pb.MsgData.GroupID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) @@ -295,8 +278,9 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.Debug(pb.OperationID, "send msg cost time2 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() // callback - if err := callbackAfterSendGroupMsg(pb); err != nil { - log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendGroupMsg failed", err.Error()) + callbackResp = callbackAfterSendGroupMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendGroupMsg resp: ", callbackResp) } if !sendTag { return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) @@ -354,7 +338,6 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } log.Debug(pb.OperationID, "send msg cost time3 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) - } case constant.NotificationChatType: msgToMQSingle.MsgData = pb.MsgData diff --git a/pkg/base_info/manage_api_struct.go b/pkg/base_info/manage_api_struct.go index 4b2061b57..f8515dd5b 100644 --- a/pkg/base_info/manage_api_struct.go +++ b/pkg/base_info/manage_api_struct.go @@ -3,6 +3,7 @@ package base_info import ( pbRelay "Open_IM/pkg/proto/relay" "Open_IM/pkg/proto/sdk_ws" + open_im_sdk "Open_IM/pkg/proto/sdk_ws" pbUser "Open_IM/pkg/proto/user" ) @@ -38,7 +39,36 @@ type AccountCheckResp struct { ResultList []*pbUser.AccountCheckResp_SingleUserStatus `json:"data"` } +type ManagementSendMsgReq struct { + OperationID string `json:"operationID" binding:"required"` + SendID string `json:"sendID" binding:"required"` + RecvID string `json:"recvID" ` + GroupID string `json:"groupID" ` + SenderNickname string `json:"senderNickname" ` + SenderFaceURL string `json:"senderFaceURL" ` + SenderPlatformID int32 `json:"senderPlatformID"` + ForceList []string `json:"forceList" ` + Content map[string]interface{} `json:"content" binding:"required"` + ContentType int32 `json:"contentType" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + IsOnlineOnly bool `json:"isOnlineOnly"` + OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"` +} + type ManagementSendMsgResp struct { CommResp ResultList server_api_params.UserSendMsgResp `json:"data"` } + +type ManagementBatchSendMsgReq struct { + ManagementSendMsgReq + RecvIDList []string `json:"recvIDList"` +} + +type ManagementBatchSendMsgResp struct { + CommResp + Data struct { + ResultList []server_api_params.UserSendMsgResp `json:"resultList"` + FailedIDList []string + } `json:"data"` +} diff --git a/pkg/call_back_struct/common.go b/pkg/call_back_struct/common.go index bc9ad5dac..14aed5b97 100644 --- a/pkg/call_back_struct/common.go +++ b/pkg/call_back_struct/common.go @@ -22,3 +22,11 @@ type CommonCallbackResp struct { ErrMsg string `json:"errMsg"` OperationID string `json:"operationID"` } + +type UserStatusCallbackReq struct { + CallbackCommand string `json:"callbackCommand"` + OperationID string `json:"operationID"` + UserID string `json:"userID"` + PlatformID int32 `json:"platformID"` + Platform string `json:"platform"` +} diff --git a/pkg/call_back_struct/msg_gateway.go b/pkg/call_back_struct/msg_gateway.go new file mode 100644 index 000000000..e6c3ec389 --- /dev/null +++ b/pkg/call_back_struct/msg_gateway.go @@ -0,0 +1,18 @@ +package call_back_struct + +type CallbackUserOnlineReq struct { + UserStatusCallbackReq + Token string `json:"token"` +} + +type CallbackUserOnlineResp struct { + CommonCallbackResp +} + +type CallbackUserOfflineReq struct { + UserStatusCallbackReq +} + +type CallbackUserOfflineResp struct { + CommonCallbackResp +} diff --git a/pkg/call_back_struct/push.go b/pkg/call_back_struct/push.go new file mode 100644 index 000000000..a63b2930d --- /dev/null +++ b/pkg/call_back_struct/push.go @@ -0,0 +1,12 @@ +package call_back_struct + +import commonPb "Open_IM/pkg/proto/sdk_ws" + +type CallbackOfflinePushReq struct { + UserStatusCallbackReq + *commonPb.OfflinePushInfo +} + +type CallbackOfflinePushResp struct { + CommonCallbackResp +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 76e80767e..a14b268a6 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -234,11 +234,14 @@ type config struct { Callback struct { CallbackUrl string `yaml:"callbackUrl"` - CallbackBeforeSendSingleMsg callBackConfig `yaml:"callbackbeforeSendSingleMsg"` + CallbackBeforeSendSingleMsg callBackConfig `yaml:"callbackBeforeSendSingleMsg"` CallbackAfterSendSingleMsg callBackConfig `yaml:"callbackAfterSendSingleMsg"` CallbackBeforeSendGroupMsg callBackConfig `yaml:"callbackBeforeSendGroupMsg"` CallbackAfterSendGroupMsg callBackConfig `yaml:"callbackAfterSendGroupMsg"` CallbackWordFilter callBackConfig `yaml:"callbackWordFilter"` + CallbackUserOnline callBackConfig `yaml:"callbackUserOnline"` + CallbackUserOffline callBackConfig `yaml:"callbackUserOffline"` + CallbackOfflinePush callBackConfig `yaml:"callbackOfflinePush"` } `yaml:"callback"` Notification struct { ///////////////////////group///////////////////////////// diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index d8d305f95..e27be4d8e 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -177,6 +177,9 @@ const ( CallbackBeforeSendGroupMsgCommand = "callbackBeforeSendGroupMsgCommand" CallbackAfterSendGroupMsgCommand = "callbackAfterSendGroupMsgCommand" CallbackWordFilterCommand = "callbackWordFilterCommand" + CallbackUserOnlineCommand = "callbackUserOnlineCommand" + CallbackUserOfflineCommand = "callbackUserOfflineCommand" + CallbackOfflinePushCommand = "callbackOfflinePushCommand" //callback actionCode ActionAllow = 0 ActionForbidden = 1 From 73cf3eb8695aafa7c5a999b1ea260f4cf657db1c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 18:08:29 +0800 Subject: [PATCH 235/752] callback --- config/config.yaml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 2c1b469ee..1ec2d183a 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -256,7 +256,7 @@ callback: # callback url 需要自行更换callback url callbackUrl : "http://127.0.0.1:8080/callback" # 开启关闭操作前后回调的配置 - callbackbeforeSendSingleMsg: + callbackBeforeSendSingleMsg: enable: false # 回调是否启用 callbackTimeOut: 2 # 回调超时时间 callbackFailedContinue: true # 回调超时是否继续执行代码 @@ -274,7 +274,16 @@ callback: enable: false callbackTimeOut: 2 callbackFailedContinue: true - + callbackUserOnline: + enable: true + callbackTimeOut: 2 + callbackUserOffline: + enable: true + callbackTimeOut: 2 + callbackOfflinePush: + enable: true + callbackTimeOut: 2 + callbackFailedContinue: true # 回调超时是否继续离线推送 notification: groupCreated: From 1eeb7f8303b20b83ddc24aaf3c5a439bf1ee7bfb Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 19:53:13 +0800 Subject: [PATCH 236/752] callback --- config/config.yaml | 1 + internal/demo/register/set_password.go | 3 +-- pkg/common/config/config.go | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 1ec2d183a..0f8a56552 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -694,6 +694,7 @@ demo: smtpAddr: "smtp.qq.com" smtpPort: 25 #需开放此端口 出口方向 testDepartMentID: 001 + imAPIURL: http://127.0.0.1:10002 rtc: port: 11300 diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 2b1bbbee1..7a0578264 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -10,7 +10,6 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/utils" "encoding/json" - "fmt" "github.com/gin-gonic/gin" "net/http" ) @@ -53,7 +52,7 @@ func SetPassword(c *gin.Context) { return } } - url := fmt.Sprintf("http://%s:%d/auth/user_register", utils.ServerIP, config.Config.Api.GinPort[0]) + url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID openIMRegisterReq.Platform = params.Platform diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index a14b268a6..53ac8023e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -439,6 +439,7 @@ type config struct { SmtpPort int `yaml:"smtpPort"` } TestDepartMentID string `yaml:"testDepartMentID"` + ImAPIURL string `yaml:"imAPIURL"` } Rtc struct { Port int `yaml:"port"` From 098f8a52f76b0087a98bdce813300b2f973648ab Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 19:59:40 +0800 Subject: [PATCH 237/752] callback --- internal/msg_gateway/gate/ws_server.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index daae9e793..360b82926 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -227,7 +227,10 @@ func (ws *WServer) delUserConn(conn *UserConn) { if err != nil { log.Error(operationID, " close err", "", "uid", uid, "platform", platform) } - callbaclResp := callbackUserOffline(operationID, uid, platform) + callbackResp := callbackUserOffline(operationID, uid, platform) + if callbackResp.ErrCode != 0 { + log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOffline failed", callbackResp) + } } func (ws *WServer) getUserConn(uid string, platform string) *UserConn { From decf728d91b1bf4b186db0c02aaa39998439b800 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 26 May 2022 22:11:03 +0800 Subject: [PATCH 238/752] ingress --- deploy_k8s/ingress.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index d8402ee05..d68aeedb6 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -18,7 +18,7 @@ spec: name: sdk-server port: number: 10003 - path: / + path: /sdk-server pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -97,5 +97,5 @@ spec: name: cms-api port: number: 10006 - path: / + path: /cms-api pathType: Prefix From dcb777d6ea02e271d97a59503a6c703e589a3a96 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 00:01:51 +0800 Subject: [PATCH 239/752] ingress --- deploy_k8s/ingress.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index d68aeedb6..cef557054 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -10,7 +10,7 @@ metadata: name: sdk-server-ingress spec: rules: - - host: sdk-server.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -32,7 +32,7 @@ metadata: name: msg-gateway-ingress spec: rules: - - host: msg-gateway.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -40,7 +40,7 @@ spec: name: msg-gateway port: number: 10001 - path: / + path: /msg-gateway pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -51,7 +51,7 @@ metadata: name: api-ingress spec: rules: - - host: api.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -59,7 +59,7 @@ spec: name: api port: number: 10002 - path: / + path: /api pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -70,7 +70,7 @@ metadata: name: demo-ingress spec: rules: - - host: demo.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: @@ -78,7 +78,7 @@ spec: name: demo port: number: 10004 - path: / + path: /demo pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -89,7 +89,7 @@ metadata: name: cms-api-ingress spec: rules: - - host: cms-api.openim.xxx.com + - host: k8s.open-im-test.rentsoft.cn http: paths: - backend: From ce5f927a8d219a98cab580c1c696af22bd731626 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 00:27:17 +0800 Subject: [PATCH 240/752] ingress --- deploy_k8s/ingress.yaml | 10 +++++----- deploy_k8s/kubectl_start_all.sh | 0 deploy_k8s/kubectl_stop_all.sh | 0 3 files changed, 5 insertions(+), 5 deletions(-) mode change 100644 => 100755 deploy_k8s/kubectl_start_all.sh mode change 100644 => 100755 deploy_k8s/kubectl_stop_all.sh diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index cef557054..696b4a61d 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -18,7 +18,7 @@ spec: name: sdk-server port: number: 10003 - path: /sdk-server + path: /sdk-server/(.*) pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -40,7 +40,7 @@ spec: name: msg-gateway port: number: 10001 - path: /msg-gateway + path: /msg-gateway/(.*) pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -59,7 +59,7 @@ spec: name: api port: number: 10002 - path: /api + path: /api/(.*) pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -78,7 +78,7 @@ spec: name: demo port: number: 10004 - path: /demo + path: /demo/(.*) pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -97,5 +97,5 @@ spec: name: cms-api port: number: 10006 - path: /cms-api + path: /cms-api/(.*) pathType: Prefix diff --git a/deploy_k8s/kubectl_start_all.sh b/deploy_k8s/kubectl_start_all.sh old mode 100644 new mode 100755 diff --git a/deploy_k8s/kubectl_stop_all.sh b/deploy_k8s/kubectl_stop_all.sh old mode 100644 new mode 100755 From ab047944b61d135829f43bd61d23b9d0d80e6e72 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 00:33:52 +0800 Subject: [PATCH 241/752] ingress --- deploy_k8s/ingress.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 696b4a61d..4b3a81aa9 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -7,6 +7,9 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" + # 使用重写后的路径进行路由 + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: sdk-server-ingress spec: rules: @@ -29,6 +32,9 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" + # 使用重写后的路径进行路由 + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: msg-gateway-ingress spec: rules: @@ -48,6 +54,9 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" + # 使用重写后的路径进行路由 + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: api-ingress spec: rules: @@ -67,6 +76,9 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" + # 使用重写后的路径进行路由 + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: demo-ingress spec: rules: @@ -86,6 +98,9 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" + # 使用重写后的路径进行路由 + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: cms-api-ingress spec: rules: From f5befcc95f6ff2e309020029300edbdad11b1dac Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 10:26:44 +0800 Subject: [PATCH 242/752] callback --- internal/push/logic/callback.go | 5 ++++- internal/push/logic/push_to_client.go | 1 + internal/rpc/msg/callback.go | 10 +++++----- pkg/call_back_struct/message.go | 15 +++++++-------- pkg/call_back_struct/push.go | 2 +- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index a706ef006..4e3961066 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -5,7 +5,9 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/http" + "Open_IM/pkg/common/log" commonPb "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" http2 "net/http" ) @@ -24,10 +26,11 @@ func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushI }, OfflinePushInfo: info, } - callbackOfflinePushResp := &cbApi.CallbackOfflinePushResp{CommonCallbackResp: callbackResp} + callbackOfflinePushResp := &cbApi.CallbackOfflinePushResp{CommonCallbackResp: &callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflinePushReq, callbackOfflinePushResp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError callbackResp.ErrMsg = err.Error() } + log.NewDebug(operationID, utils.GetSelfFuncName(), callbackOfflinePushResp) return callbackResp } diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 8911218f2..55aadbda3 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -111,6 +111,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) } if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline push was stop") break } diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index af8f7c334..142171aaa 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -41,7 +41,7 @@ func callbackBeforeSendSingleMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackRes RecvID: msg.MsgData.RecvID, } resp := &cbApi.CallbackBeforeSendSingleMsgResp{ - CommonCallbackResp: callbackResp, + CommonCallbackResp: &callbackResp, } //utils.CopyStructFields(req, msg.MsgData) defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) @@ -71,7 +71,7 @@ func callbackAfterSendSingleMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp CommonCallbackReq: commonCallbackReq, RecvID: msg.MsgData.RecvID, } - resp := &cbApi.CallbackAfterSendSingleMsgResp{CommonCallbackResp: callbackResp} + resp := &cbApi.CallbackAfterSendSingleMsgResp{CommonCallbackResp: &callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackAfterSendSingleMsg.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError @@ -93,7 +93,7 @@ func callbackBeforeSendGroupMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp CommonCallbackReq: commonCallbackReq, GroupID: msg.MsgData.GroupID, } - resp := &cbApi.CallbackBeforeSendGroupMsgResp{CommonCallbackResp: callbackResp} + resp := &cbApi.CallbackBeforeSendGroupMsgResp{CommonCallbackResp: &callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError @@ -121,7 +121,7 @@ func callbackAfterSendGroupMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp CommonCallbackReq: commonCallbackReq, GroupID: msg.MsgData.GroupID, } - resp := &cbApi.CallbackAfterSendGroupMsgResp{CommonCallbackResp: callbackResp} + resp := &cbApi.CallbackAfterSendGroupMsgResp{CommonCallbackResp: &callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError @@ -142,7 +142,7 @@ func callbackWordFilter(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { req := cbApi.CallbackWordFilterReq{ CommonCallbackReq: commonCallbackReq, } - resp := &cbApi.CallbackWordFilterResp{CommonCallbackResp: callbackResp} + resp := &cbApi.CallbackWordFilterResp{CommonCallbackResp: &callbackResp} defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp) if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackWordFilter.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError diff --git a/pkg/call_back_struct/message.go b/pkg/call_back_struct/message.go index 31c215ea2..65f281bb8 100644 --- a/pkg/call_back_struct/message.go +++ b/pkg/call_back_struct/message.go @@ -1,22 +1,21 @@ package call_back_struct - type CallbackBeforeSendSingleMsgReq struct { CommonCallbackReq - RecvID string `json:"recvID"` + RecvID string `json:"recvID"` } type CallbackBeforeSendSingleMsgResp struct { - CommonCallbackResp + *CommonCallbackResp } type CallbackAfterSendSingleMsgReq struct { CommonCallbackReq - RecvID string `json:"recvID"` + RecvID string `json:"recvID"` } type CallbackAfterSendSingleMsgResp struct { - CommonCallbackResp + *CommonCallbackResp } type CallbackBeforeSendGroupMsgReq struct { @@ -25,7 +24,7 @@ type CallbackBeforeSendGroupMsgReq struct { } type CallbackBeforeSendGroupMsgResp struct { - CommonCallbackResp + *CommonCallbackResp } type CallbackAfterSendGroupMsgReq struct { @@ -34,7 +33,7 @@ type CallbackAfterSendGroupMsgReq struct { } type CallbackAfterSendGroupMsgResp struct { - CommonCallbackResp + *CommonCallbackResp } type CallbackWordFilterReq struct { @@ -42,6 +41,6 @@ type CallbackWordFilterReq struct { } type CallbackWordFilterResp struct { - CommonCallbackResp + *CommonCallbackResp Content string `json:"content"` } diff --git a/pkg/call_back_struct/push.go b/pkg/call_back_struct/push.go index a63b2930d..af7e38d79 100644 --- a/pkg/call_back_struct/push.go +++ b/pkg/call_back_struct/push.go @@ -8,5 +8,5 @@ type CallbackOfflinePushReq struct { } type CallbackOfflinePushResp struct { - CommonCallbackResp + *CommonCallbackResp } From d67e4a3491403a95983585fac64dccce23e36936 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 11:08:27 +0800 Subject: [PATCH 243/752] callback --- internal/rpc/msg/send_msg.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 549de2fc9..89f679e04 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -157,6 +157,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S if callbackResp.ErrCode != 0 { log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) } + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackResp: ", callbackResp) if callbackResp.ActionCode != constant.ActionAllow { log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter result", "end rpc and return", pb.MsgData) return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) From b155a9908b8e7036a8cd47a9107314ce3d69d9f7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 11:34:10 +0800 Subject: [PATCH 244/752] callback --- internal/rpc/msg/callback.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index 142171aaa..c0c933afe 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -98,7 +98,7 @@ func callbackBeforeSendGroupMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError callbackResp.ErrMsg = err.Error() - if !config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackFailedContinue { + if !config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackFailedContinue { callbackResp.ActionCode = constant.ActionForbidden return callbackResp } else { @@ -147,7 +147,7 @@ func callbackWordFilter(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackWordFilter.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError callbackResp.ErrMsg = err.Error() - if !config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackFailedContinue { + if !config.Config.Callback.CallbackWordFilter.CallbackFailedContinue { callbackResp.ActionCode = constant.ActionForbidden return callbackResp } else { From e5945fa720a633f3e6a90acc1c1a271b7241aef5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 11:49:38 +0800 Subject: [PATCH 245/752] callback --- internal/push/logic/callback.go | 10 ++++++++-- internal/push/logic/push_to_client.go | 2 +- internal/rpc/msg/send_msg.go | 13 +++++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index 4e3961066..bf77e6516 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -13,7 +13,7 @@ import ( func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushInfo, platformID int32) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} - if !config.Config.Callback.CallbackUserOnline.Enable { + if !config.Config.Callback.CallbackOfflinePush.Enable { return callbackResp } callbackOfflinePushReq := cbApi.CallbackOfflinePushReq{ @@ -30,7 +30,13 @@ func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushI if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflinePushReq, callbackOfflinePushResp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError callbackResp.ErrMsg = err.Error() + if !config.Config.Callback.CallbackOfflinePush.CallbackFailedContinue { + callbackResp.ActionCode = constant.ActionForbidden + return callbackResp + } else { + callbackResp.ActionCode = constant.ActionAllow + return callbackResp + } } - log.NewDebug(operationID, utils.GetSelfFuncName(), callbackOfflinePushResp) return callbackResp } diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 55aadbda3..e96670772 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -107,11 +107,11 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") if callbackResp.ErrCode != 0 { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) } if callbackResp.ActionCode != constant.ActionAllow { - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline push was stop") break } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 89f679e04..f75fe3a3d 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -159,6 +159,9 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackResp: ", callbackResp) if callbackResp.ActionCode != constant.ActionAllow { + if callbackResp.ErrCode == 0 { + callbackResp.ErrCode = 201 + } log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter result", "end rpc and return", pb.MsgData) return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) } @@ -170,8 +173,11 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg resp: ", callbackResp) } if callbackResp.ActionCode != constant.ActionAllow { + if callbackResp.ErrCode == 0 { + callbackResp.ErrCode = 201 + } log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg result", "end rpc and return", callbackResp) - return returnMsg(&replay, pb, int32(callbackResp.ActionCode), callbackResp.ErrMsg, "", 0) + return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) } isSend := modifyMessageByUserMessageReceiveOpt(pb.MsgData.RecvID, pb.MsgData.SendID, constant.SingleChatType, pb) if isSend { @@ -203,8 +209,11 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendGroupMsg resp:", callbackResp) } if callbackResp.ActionCode != constant.ActionAllow { + if callbackResp.ErrCode == 0 { + callbackResp.ErrCode = 201 + } log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg result", "end rpc and return", callbackResp) - return returnMsg(&replay, pb, int32(callbackResp.ActionCode), callbackResp.ErrMsg, "", 0) + return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) } getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pb.OperationID, GroupID: pb.MsgData.GroupID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) From 884b410dcedcf18e56996abcd2a896fda421569e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 12:49:26 +0800 Subject: [PATCH 246/752] callback --- internal/rpc/msg/callback.go | 2 +- internal/rpc/msg/send_msg.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index c0c933afe..d84af8099 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -155,7 +155,7 @@ func callbackWordFilter(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { return callbackResp } } - if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow { + if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow && resp.Content != "" { msg.MsgData.Content = []byte(resp.Content) } log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), string(msg.MsgData.Content)) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index f75fe3a3d..a97dd84ed 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -155,7 +155,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S // callback callbackResp := callbackWordFilter(pb) if callbackResp.ErrCode != 0 { - log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) } log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackResp: ", callbackResp) if callbackResp.ActionCode != constant.ActionAllow { From f54ba4b0182fa6c49c851de1630e2da4bac1948c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 13:11:19 +0800 Subject: [PATCH 247/752] callback --- internal/push/logic/push_to_client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index e96670772..35618013a 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -112,6 +112,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) } if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") break } From a8705be6eed94ac2abc89510a3f233bd5f3a525b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 13:16:05 +0800 Subject: [PATCH 248/752] callback --- config/config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 0f8a56552..ca992ee8c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -275,10 +275,10 @@ callback: callbackTimeOut: 2 callbackFailedContinue: true callbackUserOnline: - enable: true + enable: false callbackTimeOut: 2 callbackUserOffline: - enable: true + enable: false callbackTimeOut: 2 callbackOfflinePush: enable: true From d104c6dbf4fe7e9ebd995385492772648660d942 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 14:20:05 +0800 Subject: [PATCH 249/752] callback --- cmd/open_im_api/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index e7a333b3a..84ea9b705 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -122,6 +122,7 @@ func main() { { managementGroup.POST("/delete_user", manage.DeleteUser) //1 managementGroup.POST("/send_msg", manage.ManagementSendMsg) + managementGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg) managementGroup.POST("/get_all_users_uid", manage.GetAllUsersUid) //1 managementGroup.POST("/account_check", manage.AccountCheck) //1 managementGroup.POST("/get_users_online_status", manage.GetUsersOnlineStatus) //1 From 0f0470b93cb4a9f48453c9a38918004d67abde5c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 15:03:29 +0800 Subject: [PATCH 250/752] callback --- internal/push/logic/callback.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index bf77e6516..1ff91cf76 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -5,14 +5,16 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/http" - "Open_IM/pkg/common/log" commonPb "Open_IM/pkg/proto/sdk_ws" - "Open_IM/pkg/utils" + "fmt" http2 "net/http" ) func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushInfo, platformID int32) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} + fmt.Println(config.Config.Callback.CallbackOfflinePush) + fmt.Println(config.Config.Callback.CallbackUserOnline) + if !config.Config.Callback.CallbackOfflinePush.Enable { return callbackResp } From cbf0b3c05ec4fd75f35996d186e59d34e1262719 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 15:10:20 +0800 Subject: [PATCH 251/752] callback --- internal/push/logic/callback.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index 1ff91cf76..655751dc2 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -6,15 +6,11 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/http" commonPb "Open_IM/pkg/proto/sdk_ws" - "fmt" http2 "net/http" ) func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushInfo, platformID int32) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} - fmt.Println(config.Config.Callback.CallbackOfflinePush) - fmt.Println(config.Config.Callback.CallbackUserOnline) - if !config.Config.Callback.CallbackOfflinePush.Enable { return callbackResp } From 3f126be081829d9b5b377101717ce9b1e0f26580 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 15:14:12 +0800 Subject: [PATCH 252/752] callback --- config/config.yaml | 2 +- pkg/base_info/manage_api_struct.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index ca992ee8c..481bbc103 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -281,7 +281,7 @@ callback: enable: false callbackTimeOut: 2 callbackOfflinePush: - enable: true + enable: false callbackTimeOut: 2 callbackFailedContinue: true # 回调超时是否继续离线推送 diff --git a/pkg/base_info/manage_api_struct.go b/pkg/base_info/manage_api_struct.go index f8515dd5b..2c850a8eb 100644 --- a/pkg/base_info/manage_api_struct.go +++ b/pkg/base_info/manage_api_struct.go @@ -41,7 +41,7 @@ type AccountCheckResp struct { type ManagementSendMsgReq struct { OperationID string `json:"operationID" binding:"required"` - SendID string `json:"sendID" binding:"required"` + SendID string `json:"sendID"` RecvID string `json:"recvID" ` GroupID string `json:"groupID" ` SenderNickname string `json:"senderNickname" ` From d6907f3f3aee2d79ec1560a79fe1afdb0f14c37d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 15:17:17 +0800 Subject: [PATCH 253/752] callback --- internal/api/manage/management_chat.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 9ee8c7874..8e7d2cb84 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -250,21 +250,6 @@ func ManagementBatchSendMsg(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""}) return - } - switch params.SessionType { - case constant.SingleChatType: - if len(params.RecvID) == 0 { - log.NewError(params.OperationID, "recvID is a null string") - c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""}) - return - } - case constant.GroupChatType: - if len(params.GroupID) == 0 { - log.NewError(params.OperationID, "groupID is a null string") - c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""}) - return - } - } log.NewInfo(params.OperationID, "Ws call success to ManagementSendMsgReq", params) for _, recvID := range params.RecvIDList { From a4c0728e283c7bae8fd5b1d0491c753f3b2edcc3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 15:19:13 +0800 Subject: [PATCH 254/752] callback --- pkg/base_info/manage_api_struct.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/base_info/manage_api_struct.go b/pkg/base_info/manage_api_struct.go index 2c850a8eb..f8515dd5b 100644 --- a/pkg/base_info/manage_api_struct.go +++ b/pkg/base_info/manage_api_struct.go @@ -41,7 +41,7 @@ type AccountCheckResp struct { type ManagementSendMsgReq struct { OperationID string `json:"operationID" binding:"required"` - SendID string `json:"sendID"` + SendID string `json:"sendID" binding:"required"` RecvID string `json:"recvID" ` GroupID string `json:"groupID" ` SenderNickname string `json:"senderNickname" ` From 16a56457ed34b10356a0d6be6b8bb6be49815ff9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 15:34:10 +0800 Subject: [PATCH 255/752] callback --- internal/api/manage/management_chat.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 8e7d2cb84..22835fcd0 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -192,6 +192,7 @@ func ManagementBatchSendMsg(c *gin.Context) { var data interface{} params := api.ManagementBatchSendMsgReq{} resp := api.ManagementBatchSendMsgResp{} + resp.Data.FailedIDList = make([]string, 0) if err := c.BindJSON(¶ms); err != nil { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) log.Error(c.PostForm("operationID"), "json unmarshal err", err.Error(), c.PostForm("content")) From bbe8c46df9c23a6253fa067ca1d3837d3dc20260 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 16:13:44 +0800 Subject: [PATCH 256/752] callback --- internal/rpc/group/group.go | 124 ++++++++++++++++---------------- pkg/common/constant/constant.go | 3 +- pkg/common/db/mongoModel.go | 4 ++ 3 files changed, 70 insertions(+), 61 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 57faf3fe2..f42b6d30d 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -91,12 +91,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewError(req.OperationID, "CheckAccess false ", req.OpUserID, req.OwnerUserID) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil } - canCreate, err := callbackBeforeCreateGroup(req) - if err != nil || !canCreate { - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "callbackBeforeCreateGroup failed") - } - } groupId := req.GroupInfo.GroupID if groupId == "" { @@ -107,72 +101,82 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR utils.CopyStructFields(&groupInfo, req.GroupInfo) groupInfo.CreatorUserID = req.OpUserID groupInfo.GroupID = groupId - err = imdb.InsertIntoGroup(groupInfo) + err := imdb.InsertIntoGroup(groupInfo) if err != nil { log.NewError(req.OperationID, "InsertIntoGroup failed, ", err.Error(), groupInfo) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - groupMember := db.GroupMember{} - us := &db.User{} - if req.OwnerUserID == "" { - goto initMemberList - } - us, err = imdb.GetUserByUserID(req.OwnerUserID) - if err != nil { - log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID) - return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) - } - - //to group member - groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} - utils.CopyStructFields(&groupMember, us) - err = imdb.InsertIntoGroupMember(groupMember) - if err != nil { - log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) - return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) - } - -initMemberList: var okUserIDList []string - //to group member - for _, user := range req.InitMemberList { - us, err := imdb.GetUserByUserID(user.UserID) + + if req.GroupInfo.GroupType == constant.NormalGroup { + groupMember := db.GroupMember{} + us := &db.User{} + if req.OwnerUserID == "" { + goto initMemberList + } + us, err = imdb.GetUserByUserID(req.OwnerUserID) if err != nil { - log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), user.UserID) - continue + log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID) + return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - if user.RoleLevel == constant.GroupOwner { - log.NewError(req.OperationID, "only one owner, failed ", user) - continue - } - groupMember.RoleLevel = user.RoleLevel + + //to group member + groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} utils.CopyStructFields(&groupMember, us) err = imdb.InsertIntoGroupMember(groupMember) if err != nil { log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) - continue + return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - okUserIDList = append(okUserIDList, user.UserID) - } - resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} - group, err := imdb.GetGroupInfoByGroupID(groupId) - if err != nil { - log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId) - resp.ErrCode = constant.ErrDB.ErrCode - resp.ErrMsg = err.Error() - return resp, nil - } - utils.CopyStructFields(resp.GroupInfo, group) - resp.GroupInfo.MemberCount, err = imdb.GetGroupMemberNumByGroupID(groupId) - if err != nil { - log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) - resp.ErrCode = constant.ErrDB.ErrCode - resp.ErrMsg = err.Error() - return resp, nil - } - if req.OwnerUserID != "" { - resp.GroupInfo.OwnerUserID = req.OwnerUserID - okUserIDList = append(okUserIDList, req.OwnerUserID) + + initMemberList: + var okUserIDList []string + //to group member + for _, user := range req.InitMemberList { + us, err := imdb.GetUserByUserID(user.UserID) + if err != nil { + log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), user.UserID) + continue + } + if user.RoleLevel == constant.GroupOwner { + log.NewError(req.OperationID, "only one owner, failed ", user) + continue + } + groupMember.RoleLevel = user.RoleLevel + utils.CopyStructFields(&groupMember, us) + err = imdb.InsertIntoGroupMember(groupMember) + if err != nil { + log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) + continue + } + okUserIDList = append(okUserIDList, user.UserID) + } + resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} + group, err := imdb.GetGroupInfoByGroupID(groupId) + if err != nil { + log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = err.Error() + return resp, nil + } + utils.CopyStructFields(resp.GroupInfo, group) + resp.GroupInfo.MemberCount, err = imdb.GetGroupMemberNumByGroupID(groupId) + if err != nil { + log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = err.Error() + return resp, nil + } + if req.OwnerUserID != "" { + resp.GroupInfo.OwnerUserID = req.OwnerUserID + okUserIDList = append(okUserIDList, req.OwnerUserID) + } + } else if req.GroupInfo.GroupType == constant.SuperGroup { + for _, v := range req.InitMemberList { + okUserIDList = append(okUserIDList, v.UserID) + } + //memberCount := len(okUserIDList) + } if len(okUserIDList) != 0 { diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index e27be4d8e..5878c3851 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -154,7 +154,8 @@ const ( //GroupType NormalGroup = 0 - DepartmentGroup = 1 + SuperGroup = 1 + DepartmentGroup = 2 GroupBaned = 3 GroupBanPrivateChat = 4 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 22c54dae8..ad4413675 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -878,6 +878,10 @@ func (d *DataBases) GetUserFriendWorkMoments(showNumber, pageNumber int32, userI return workMomentList, err } +func (d *DataBases) CreateSuperGroup() { + +} + func generateTagID(tagName, userID string) string { return utils.Md5(tagName + userID + strconv.Itoa(rand.Int()) + time.Now().String()) } From b55e13dbeb1870eac4b48ff4c6904d2f4119cdd3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 18:40:24 +0800 Subject: [PATCH 257/752] superGroup --- internal/rpc/group/group.go | 492 ++++++++++++++++++++---------------- pkg/common/db/mongoModel.go | 46 +++- 2 files changed, 324 insertions(+), 214 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index f42b6d30d..8c550684f 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -107,19 +107,15 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } var okUserIDList []string - - if req.GroupInfo.GroupType == constant.NormalGroup { - groupMember := db.GroupMember{} - us := &db.User{} - if req.OwnerUserID == "" { - goto initMemberList - } + resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} + groupMember := db.GroupMember{} + us := &db.User{} + if req.OwnerUserID != "" { us, err = imdb.GetUserByUserID(req.OwnerUserID) if err != nil { log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - //to group member groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} utils.CopyStructFields(&groupMember, us) @@ -128,8 +124,8 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - - initMemberList: + } + if req.GroupInfo.GroupType != constant.SuperGroup { var okUserIDList []string //to group member for _, user := range req.InitMemberList { @@ -151,7 +147,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } okUserIDList = append(okUserIDList, user.UserID) } - resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} group, err := imdb.GetGroupInfoByGroupID(groupId) if err != nil { log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId) @@ -171,12 +166,16 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR resp.GroupInfo.OwnerUserID = req.OwnerUserID okUserIDList = append(okUserIDList, req.OwnerUserID) } - } else if req.GroupInfo.GroupType == constant.SuperGroup { + } else { for _, v := range req.InitMemberList { okUserIDList = append(okUserIDList, v.UserID) } - //memberCount := len(okUserIDList) - + if err := db.DB.CreateSuperGroup(groupId, okUserIDList, len(okUserIDList)); err != nil { + log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = err.Error() + ": CreateSuperGroup failed" + return resp, nil + } } if len(okUserIDList) != 0 { @@ -198,7 +197,9 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String()) - chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) + if req.GroupInfo.GroupType != constant.SuperGroup { + chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) + } return resp, nil } else { log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String()) @@ -261,93 +262,104 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite // //from User: invite: applicant //to user: invite: invited - var resp pbGroup.InviteUserToGroupResp var okUserIDList []string - for _, v := range req.InvitedUserIDList { - var resultNode pbGroup.Id2Result - resultNode.UserID = v - resultNode.Result = 0 - toUserInfo, err := imdb.GetUserByUserID(v) - if err != nil { - log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), v) - resultNode.Result = -1 + if groupInfo.GroupType != constant.SuperGroup { + var resp pbGroup.InviteUserToGroupResp + for _, v := range req.InvitedUserIDList { + var resultNode pbGroup.Id2Result + resultNode.UserID = v + resultNode.Result = 0 + toUserInfo, err := imdb.GetUserByUserID(v) + if err != nil { + log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), v) + resultNode.Result = -1 + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + continue + } + + if imdb.IsExistGroupMember(req.GroupID, v) { + log.NewError(req.OperationID, "IsExistGroupMember ", req.GroupID, v) + resultNode.Result = -1 + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + continue + } + var toInsertInfo db.GroupMember + utils.CopyStructFields(&toInsertInfo, toUserInfo) + toInsertInfo.GroupID = req.GroupID + toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers + toInsertInfo.OperatorUserID = req.OpUserID + err = imdb.InsertIntoGroupMember(toInsertInfo) + if err != nil { + log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL) + resultNode.Result = -1 + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + continue + } + okUserIDList = append(okUserIDList, v) + err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID) + if err != nil { + log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), req.GroupID, toUserInfo.UserID) + } resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) - continue + } + var haveConUserID []string + conversations, err := imdb.GetConversationsByConversationIDMultipleOwner(okUserIDList, utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType)) + if err != nil { + log.NewError(req.OperationID, "GetConversationsByConversationIDMultipleOwner failed ", err.Error(), req.GroupID, constant.GroupChatType) + } + for _, v := range conversations { + haveConUserID = append(haveConUserID, v.OwnerUserID) + } + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + for _, v := range conversations { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v.OwnerUserID + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.RecvMsgOpt = v.RecvMsgOpt + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsPinned = v.IsPinned + c.AttachedInfo = v.AttachedInfo + c.IsPrivateChat = v.IsPrivateChat + c.GroupAtType = v.GroupAtType + c.IsNotInGroup = false + c.Ex = v.Ex + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.OwnerUserID) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.OwnerUserID) + } + } + for _, v := range utils.DifferenceString(haveConUserID, okUserIDList) { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = false + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) + } + } + } else { + okUserIDList = req.InvitedUserIDList + if err := db.DB.AddUserToSuperGroup(req.GroupID, req.InvitedUserIDList); err != nil { + log.NewError(req.OperationID, "AddUserToSuperGroup failed ", req.GroupID, err) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}, nil } - if imdb.IsExistGroupMember(req.GroupID, v) { - log.NewError(req.OperationID, "IsExistGroupMember ", req.GroupID, v) - resultNode.Result = -1 - resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) - continue - } - var toInsertInfo db.GroupMember - utils.CopyStructFields(&toInsertInfo, toUserInfo) - toInsertInfo.GroupID = req.GroupID - toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers - toInsertInfo.OperatorUserID = req.OpUserID - err = imdb.InsertIntoGroupMember(toInsertInfo) - if err != nil { - log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL) - resultNode.Result = -1 - resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) - continue - } - okUserIDList = append(okUserIDList, v) - err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID) - if err != nil { - log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), req.GroupID, toUserInfo.UserID) - } - resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) } - var haveConUserID []string - conversations, err := imdb.GetConversationsByConversationIDMultipleOwner(okUserIDList, utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType)) - for _, v := range conversations { - haveConUserID = append(haveConUserID, v.OwnerUserID) - } - var reqPb pbUser.SetConversationReq - var c pbUser.Conversation - for _, v := range conversations { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v.OwnerUserID - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.RecvMsgOpt = v.RecvMsgOpt - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsPinned = v.IsPinned - c.AttachedInfo = v.AttachedInfo - c.IsPrivateChat = v.IsPrivateChat - c.GroupAtType = v.GroupAtType - c.IsNotInGroup = false - c.Ex = v.Ex - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.OwnerUserID) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.OwnerUserID) - } - } - for _, v := range utils.DifferenceString(haveConUserID, okUserIDList) { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsNotInGroup = false - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) - } - } - addGroupMemberToCacheReq := &pbCache.AddGroupMemberToCacheReq{ UserIDList: okUserIDList, GroupID: req.GroupID, @@ -365,31 +377,56 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil } - chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) - resp.ErrCode = 0 - log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp.String()) - return &resp, nil + if groupInfo.GroupType != constant.SuperGroup { + chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) + } + + log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") + return &pbGroup.InviteUserToGroupResp{}, nil } func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) { log.NewInfo(req.OperationID, "GetGroupAllMember, args ", req.String()) var resp pbGroup.GetGroupAllMemberResp - memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) + groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) resp.ErrCode = constant.ErrDB.ErrCode resp.ErrMsg = constant.ErrDB.ErrMsg - log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) return &resp, nil } + if groupInfo.GroupType != constant.SuperGroup { + memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) + if err != nil { + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = constant.ErrDB.ErrMsg + log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) + return &resp, nil + } - for _, v := range memberList { - //log.Debug(req.OperationID, v) - var node open_im_sdk.GroupMemberFullInfo - cp.GroupMemberDBCopyOpenIM(&node, &v) - //log.Debug(req.OperationID, "db value:", v.MuteEndTime, "seconds: ", v.MuteEndTime.Unix()) - //log.Debug(req.OperationID, "cp value: ", node) - resp.MemberList = append(resp.MemberList, &node) + for _, v := range memberList { + //log.Debug(req.OperationID, v) + var node open_im_sdk.GroupMemberFullInfo + cp.GroupMemberDBCopyOpenIM(&node, &v) + //log.Debug(req.OperationID, "db value:", v.MuteEndTime, "seconds: ", v.MuteEndTime.Unix()) + //log.Debug(req.OperationID, "cp value: ", node) + resp.MemberList = append(resp.MemberList, &node) + } + } else { + groupInfo, err := db.DB.GetSuperGroup(req.GroupID) + if err != nil { + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = constant.ErrDB.ErrMsg + log.NewError(req.OperationID, "GetSuperGroup failed,", err.Error(), req.GroupID) + return &resp, nil + } + for _, userID := range groupInfo.MemberIDList { + var node open_im_sdk.GroupMemberFullInfo + node.UserID = userID + resp.MemberList = append(resp.MemberList, &node) + } } + log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String()) return &resp, nil } @@ -424,88 +461,104 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) { log.NewInfo(req.OperationID, "KickGroupMember args ", req.String()) - ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID) + groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupInfoByGroupID", req.GroupID, err.Error()) return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil } - //op is group owner? - var flag = 0 - for _, v := range ownerList { - if v.UserID == req.OpUserID { - flag = 1 - log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID) - break - } - } - - //op is app manager - if flag != 1 { - if token_verify.IsManagerUserID(req.OpUserID) { - flag = 1 - log.NewDebug(req.OperationID, "is app manager ", req.OpUserID) - } - } - - if flag != 1 { - log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID) - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil - } - - if len(req.KickedUserIDList) == 0 { - log.NewError(req.OperationID, "failed, kick list 0") - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil - } - - groupOwnerUserID := "" - for _, v := range ownerList { - if v.RoleLevel == constant.GroupOwner { - groupOwnerUserID = v.UserID - } - } - var okUserIDList []string - //remove var resp pbGroup.KickGroupMemberResp - for _, v := range req.KickedUserIDList { - //owner can‘t kicked - if v == groupOwnerUserID { - log.NewError(req.OperationID, "failed, can't kick owner ", v) - resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) - continue - } - err := imdb.RemoveGroupMember(req.GroupID, v) + if groupInfo.GroupType != constant.SuperGroup { + ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v) - resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) - } else { - log.NewDebug(req.OperationID, "kicked ", v) - resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0}) - okUserIDList = append(okUserIDList, v) + log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil + } + //op is group owner? + var flag = 0 + for _, v := range ownerList { + if v.UserID == req.OpUserID { + flag = 1 + log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID) + break + } } - //err = db.DB.DelGroupMember(req.GroupID, v) - //if err != nil { - // log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v) - //} - } - var reqPb pbUser.SetConversationReq - var c pbUser.Conversation - for _, v := range okUserIDList { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsNotInGroup = true - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) + //op is app manager + if flag != 1 { + if token_verify.IsManagerUserID(req.OpUserID) { + flag = 1 + log.NewDebug(req.OperationID, "is app manager ", req.OpUserID) + } + } + + if flag != 1 { + log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil + } + + if len(req.KickedUserIDList) == 0 { + log.NewError(req.OperationID, "failed, kick list 0") + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil + } + + groupOwnerUserID := "" + for _, v := range ownerList { + if v.RoleLevel == constant.GroupOwner { + groupOwnerUserID = v.UserID + } + } + + var okUserIDList []string + //remove + for _, v := range req.KickedUserIDList { + //owner can‘t kicked + if v == groupOwnerUserID { + log.NewError(req.OperationID, "failed, can't kick owner ", v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + continue + } + err := imdb.RemoveGroupMember(req.GroupID, v) + if err != nil { + log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + } else { + log.NewDebug(req.OperationID, "kicked ", v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0}) + okUserIDList = append(okUserIDList, v) + } + + //err = db.DB.DelGroupMember(req.GroupID, v) + //if err != nil { + // log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v) + //} + } + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + for _, v := range okUserIDList { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = true + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) + } + } + } else { + okUserIDList = req.KickedUserIDList + if err := db.DB.RemoverUserFromSuperGroup(req.GroupID, okUserIDList); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, req.KickedUserIDList, err.Error()) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = constant.ErrDB.ErrMsg + return &resp, nil } } @@ -525,8 +578,9 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou log.NewError(req.OperationID, "ReduceGroupMemberFromCache rpc logic call failed ", cacheResp.String()) return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil } - - chat.MemberKickedNotification(req, okUserIDList) + if groupInfo.GroupType != constant.SuperGroup { + chat.MemberKickedNotification(req, okUserIDList) + } log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String()) return &resp, nil } @@ -1265,38 +1319,50 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou log.NewError(req.OperationID, "OperateGroupStatus failed ", req.GroupID, constant.GroupStatusDismissed) return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) + groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - //modify quitter conversation info - var reqPb pbUser.SetConversationReq - var c pbUser.Conversation - for _, v := range memberList { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v.UserID - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsNotInGroup = true - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) + if groupInfo.GroupType != constant.SuperGroup { + memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.UserID) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.UserID) + log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) + } + //modify quitter conversation info + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + for _, v := range memberList { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v.UserID + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = true + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.UserID) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.UserID) + } + } + err = imdb.DeleteGroupMemberByGroupID(req.GroupID) + if err != nil { + log.NewError(req.OperationID, "DeleteGroupMemberByGroupID failed ", req.GroupID) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + chat.GroupDismissedNotification(req) + } else { + err = db.DB.DeleteSuperGroup(req.GroupID) + if err != nil { + log.NewError(req.OperationID, "DeleteGroupMemberByGroupID failed ", req.GroupID) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } } - chat.GroupDismissedNotification(req) - err = imdb.DeleteGroupMemberByGroupID(req.GroupID) - if err != nil { - log.NewError(req.OperationID, "DeleteGroupMemberByGroupID failed ", req.GroupID) - return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - - } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}) return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index ad4413675..2f727c159 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -29,6 +29,7 @@ const cTag = "tag" const cSendLog = "send_log" const cWorkMoment = "work_moment" const cCommentMsg = "comment_msg" +const cSuperGroup = "super_group" const singleGocMsgNum = 5000 func GetSingleGocMsgNum() int { @@ -878,8 +879,51 @@ func (d *DataBases) GetUserFriendWorkMoments(showNumber, pageNumber int32, userI return workMomentList, err } -func (d *DataBases) CreateSuperGroup() { +type SuperGroup struct { + GroupID string `bson:"group_id"` + MemberNumCount int `bson:"member_num_count"` + MemberIDList []string `bson:"member_id_list"` +} +func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, memberNumCount int) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + superGroup := SuperGroup{ + GroupID: groupID, + MemberNumCount: memberNumCount, + MemberIDList: initMemberIDList, + } + _, err := c.InsertOne(ctx, superGroup) + return err +} + +func (d *DataBases) GetSuperGroup(groupID string) (SuperGroup, error) { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + superGroup := SuperGroup{} + err := c.FindOne(ctx, bson.M{"group_id": groupID}).Decode(&superGroup) + return superGroup, err +} + +func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": userIDList}}) + return err +} + +func (d *DataBases) RemoverUserFromSuperGroup(groupID string, userIDList []string) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + return err +} + +func (d *DataBases) DeleteSuperGroup(groupID string) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + _, err := c.DeleteOne(ctx, bson.M{"group_id": groupID}) + return err } func generateTagID(tagName, userID string) string { From cc6d8d28b55bccb07502838597281539ef0fc401 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 18:53:47 +0800 Subject: [PATCH 258/752] superGroup --- internal/rpc/group/group.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 8c550684f..87fd76a69 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -126,7 +126,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } } if req.GroupInfo.GroupType != constant.SuperGroup { - var okUserIDList []string //to group member for _, user := range req.InitMemberList { us, err := imdb.GetUserByUserID(user.UserID) @@ -174,7 +173,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) resp.ErrCode = constant.ErrDB.ErrCode resp.ErrMsg = err.Error() + ": CreateSuperGroup failed" - return resp, nil } } From 8cdcd7105adf379f50503ec8a913f4ed62530a66 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 18:57:04 +0800 Subject: [PATCH 259/752] superGroup --- internal/rpc/group/group.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 87fd76a69..2fe567b4e 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -506,8 +506,6 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou groupOwnerUserID = v.UserID } } - - var okUserIDList []string //remove for _, v := range req.KickedUserIDList { //owner can‘t kicked From b3ba06aecb2225f0243c60b4e95dfdd1838c375b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 19:16:47 +0800 Subject: [PATCH 260/752] superGroup --- pkg/common/db/mongoModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 2f727c159..fb87df4e0 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -908,7 +908,7 @@ func (d *DataBases) GetSuperGroup(groupID string) (SuperGroup, error) { func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": userIDList}}) + _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": bson.M{"$each": userIDList}}}) return err } From 8967343079c5edaed726af7ffa642bba5e551de4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 19:33:47 +0800 Subject: [PATCH 261/752] superGroup --- internal/msg_gateway/gate/callback.go | 22 ++++++++++++++-------- internal/push/logic/callback.go | 14 ++++++++++---- internal/push/logic/push_to_client.go | 2 +- pkg/call_back_struct/msg_gateway.go | 2 ++ pkg/call_back_struct/push.go | 7 +++++++ 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/internal/msg_gateway/gate/callback.go b/internal/msg_gateway/gate/callback.go index 58d3a98b2..5f472c9f3 100644 --- a/internal/msg_gateway/gate/callback.go +++ b/internal/msg_gateway/gate/callback.go @@ -6,6 +6,7 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/http" http2 "net/http" + "time" ) func callbackUserOnline(operationID, userID string, platformID int32, token string) cbApi.CommonCallbackResp { @@ -21,7 +22,9 @@ func callbackUserOnline(operationID, userID string, platformID int32, token stri UserID: userID, PlatformID: platformID, Platform: constant.PlatformIDToName(platformID), - }} + }, + Seq: time.Now().Nanosecond() / 1e6, + } callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackUserOnlineReq, callbackUserOnlineResp, config.Config.Callback.CallbackUserOnline.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError @@ -35,13 +38,16 @@ func callbackUserOffline(operationID, userID string, platform string) cbApi.Comm if !config.Config.Callback.CallbackUserOffline.Enable { return callbackResp } - callbackOfflineReq := cbApi.CallbackUserOfflineReq{UserStatusCallbackReq: cbApi.UserStatusCallbackReq{ - CallbackCommand: constant.CallbackUserOfflineCommand, - OperationID: operationID, - UserID: userID, - PlatformID: constant.PlatformNameToID(platform), - Platform: platform, - }} + callbackOfflineReq := cbApi.CallbackUserOfflineReq{ + UserStatusCallbackReq: cbApi.UserStatusCallbackReq{ + CallbackCommand: constant.CallbackUserOfflineCommand, + OperationID: operationID, + UserID: userID, + PlatformID: constant.PlatformNameToID(platform), + Platform: platform, + }, + Seq: time.Now().Nanosecond() / 1e6, + } callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil { callbackResp.ErrCode = http2.StatusInternalServerError diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index 655751dc2..8e269e1dd 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -9,7 +9,7 @@ import ( http2 "net/http" ) -func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushInfo, platformID int32) cbApi.CommonCallbackResp { +func callbackOfflinePush(operationID, userID string, msg *commonPb.MsgData) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackOfflinePush.Enable { return callbackResp @@ -19,10 +19,16 @@ func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushI CallbackCommand: constant.CallbackOfflinePushCommand, OperationID: operationID, UserID: userID, - PlatformID: platformID, - Platform: constant.PlatformIDToName(platformID), + PlatformID: msg.SenderPlatformID, + Platform: constant.PlatformIDToName(msg.SenderPlatformID), }, - OfflinePushInfo: info, + OfflinePushInfo: msg.OfflinePushInfo, + SendID: msg.SendID, + GroupID: msg.GroupID, + ContentType: msg.ContentType, + SessionType: msg.SessionType, + AtUserIDList: msg.AtUserIDList, + Content: string(msg.Content), } callbackOfflinePushResp := &cbApi.CallbackOfflinePushResp{CommonCallbackResp: &callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflinePushReq, callbackOfflinePushResp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil { diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 35618013a..ba657aff1 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -106,7 +106,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { content = constant.ContentType2PushContent[constant.Common] } } - callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) + callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData) log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") if callbackResp.ErrCode != 0 { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) diff --git a/pkg/call_back_struct/msg_gateway.go b/pkg/call_back_struct/msg_gateway.go index e6c3ec389..2fba45114 100644 --- a/pkg/call_back_struct/msg_gateway.go +++ b/pkg/call_back_struct/msg_gateway.go @@ -3,6 +3,7 @@ package call_back_struct type CallbackUserOnlineReq struct { UserStatusCallbackReq Token string `json:"token"` + Seq int `json:"seq"` } type CallbackUserOnlineResp struct { @@ -11,6 +12,7 @@ type CallbackUserOnlineResp struct { type CallbackUserOfflineReq struct { UserStatusCallbackReq + Seq int `json:"seq"` } type CallbackUserOfflineResp struct { diff --git a/pkg/call_back_struct/push.go b/pkg/call_back_struct/push.go index af7e38d79..271803679 100644 --- a/pkg/call_back_struct/push.go +++ b/pkg/call_back_struct/push.go @@ -5,6 +5,13 @@ import commonPb "Open_IM/pkg/proto/sdk_ws" type CallbackOfflinePushReq struct { UserStatusCallbackReq *commonPb.OfflinePushInfo + CommonCallbackReq + SendID string `json:"sendID"` + GroupID string `json:"groupID"` + ContentType int32 `json:"contentType"` + SessionType int32 `json:"sessionType"` + AtUserIDList []string `json:"atUserIDList"` + Content string `json` } type CallbackOfflinePushResp struct { From 1bfefbd08336e8fa4c12458c07e5d1a392fd2de5 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Fri, 27 May 2022 20:29:39 +0800 Subject: [PATCH 262/752] super group --- pkg/proto/auto_proto.sh | 6 +- pkg/proto/sdk_ws/ws.pb.go | 836 +++++++++++++++++++++++--------------- pkg/proto/sdk_ws/ws.proto | 33 +- 3 files changed, 540 insertions(+), 335 deletions(-) diff --git a/pkg/proto/auto_proto.sh b/pkg/proto/auto_proto.sh index 25408d46e..7ecece08e 100644 --- a/pkg/proto/auto_proto.sh +++ b/pkg/proto/auto_proto.sh @@ -4,10 +4,14 @@ source ./proto_dir.cfg for ((i = 0; i < ${#all_proto[*]}; i++)); do proto=${all_proto[$i]} - protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto + + protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto s=`echo $proto | sed 's/ //g'` v=${s//proto/pb.go} protoc-go-inject-tag -input=./$v echo "protoc --go_out=plugins=grpc:." $proto done echo "proto file generate success..." + +find ./ -type f -path "*.pb.go"|xargs sed -i 's/\".\/sdk_ws\"/\"Open_IM\/pkg\/proto\/sdk_ws\"/g' + diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 204cdfa50..8ed8e4a1c 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{0} + return fileDescriptor_ws_b2b8932ad953b270, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{1} + return fileDescriptor_ws_b2b8932ad953b270, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{2} + return fileDescriptor_ws_b2b8932ad953b270, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{3} + return fileDescriptor_ws_b2b8932ad953b270, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{4} + return fileDescriptor_ws_b2b8932ad953b270, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{5} + return fileDescriptor_ws_b2b8932ad953b270, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{6} + return fileDescriptor_ws_b2b8932ad953b270, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{7} + return fileDescriptor_ws_b2b8932ad953b270, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{8} + return fileDescriptor_ws_b2b8932ad953b270, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{9} + return fileDescriptor_ws_b2b8932ad953b270, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{10} + return fileDescriptor_ws_b2b8932ad953b270, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{11} + return fileDescriptor_ws_b2b8932ad953b270, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{12} + return fileDescriptor_ws_b2b8932ad953b270, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1264,74 +1264,22 @@ func (m *UserInDepartment) GetDepartmentMemberList() []*DepartmentMember { return nil } -type PullMessageBySeqListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } -func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } -func (*PullMessageBySeqListResp) ProtoMessage() {} -func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{13} -} -func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) -} -func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) -} -func (m *PullMessageBySeqListResp) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListResp.Size(m) -} -func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo - -func (m *PullMessageBySeqListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *PullMessageBySeqListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *PullMessageBySeqListResp) GetList() []*MsgData { - if m != nil { - return m.List - } - return nil -} - +// /////////////////////////////////base end///////////////////////////////////// type PullMessageBySeqListReq struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` + SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + GroupSeqList map[string]*SeqList `protobuf:"bytes,4,rep,name=groupSeqList" json:"groupSeqList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq{} } func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{14} + return fileDescriptor_ws_b2b8932ad953b270, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1372,7 +1320,154 @@ func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { return nil } +func (m *PullMessageBySeqListReq) GetGroupSeqList() map[string]*SeqList { + if m != nil { + return m.GroupSeqList + } + return nil +} + +type SeqList struct { + SeqList []uint32 `protobuf:"varint,1,rep,packed,name=seqList" json:"seqList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SeqList) Reset() { *m = SeqList{} } +func (m *SeqList) String() string { return proto.CompactTextString(m) } +func (*SeqList) ProtoMessage() {} +func (*SeqList) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_b2b8932ad953b270, []int{14} +} +func (m *SeqList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SeqList.Unmarshal(m, b) +} +func (m *SeqList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SeqList.Marshal(b, m, deterministic) +} +func (dst *SeqList) XXX_Merge(src proto.Message) { + xxx_messageInfo_SeqList.Merge(dst, src) +} +func (m *SeqList) XXX_Size() int { + return xxx_messageInfo_SeqList.Size(m) +} +func (m *SeqList) XXX_DiscardUnknown() { + xxx_messageInfo_SeqList.DiscardUnknown(m) +} + +var xxx_messageInfo_SeqList proto.InternalMessageInfo + +func (m *SeqList) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + +type MsgDataList struct { + MsgDataList []*MsgData `protobuf:"bytes,1,rep,name=msgDataList" json:"msgDataList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MsgDataList) Reset() { *m = MsgDataList{} } +func (m *MsgDataList) String() string { return proto.CompactTextString(m) } +func (*MsgDataList) ProtoMessage() {} +func (*MsgDataList) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_b2b8932ad953b270, []int{15} +} +func (m *MsgDataList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgDataList.Unmarshal(m, b) +} +func (m *MsgDataList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgDataList.Marshal(b, m, deterministic) +} +func (dst *MsgDataList) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDataList.Merge(dst, src) +} +func (m *MsgDataList) XXX_Size() int { + return xxx_messageInfo_MsgDataList.Size(m) +} +func (m *MsgDataList) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDataList.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDataList proto.InternalMessageInfo + +func (m *MsgDataList) GetMsgDataList() []*MsgData { + if m != nil { + return m.MsgDataList + } + return nil +} + +type PullMessageBySeqListResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` + GroupMsgDataList map[string]*MsgDataList `protobuf:"bytes,4,rep,name=groupMsgDataList" json:"groupMsgDataList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } +func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } +func (*PullMessageBySeqListResp) ProtoMessage() {} +func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_b2b8932ad953b270, []int{16} +} +func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) +} +func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) +} +func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) +} +func (m *PullMessageBySeqListResp) XXX_Size() int { + return xxx_messageInfo_PullMessageBySeqListResp.Size(m) +} +func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { + xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) +} + +var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo + +func (m *PullMessageBySeqListResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *PullMessageBySeqListResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *PullMessageBySeqListResp) GetList() []*MsgData { + if m != nil { + return m.List + } + return nil +} + +func (m *PullMessageBySeqListResp) GetGroupMsgDataList() map[string]*MsgDataList { + if m != nil { + return m.GroupMsgDataList + } + return nil +} + type GetMaxAndMinSeqReq struct { + GroupIDList []string `protobuf:"bytes,1,rep,name=groupIDList" json:"groupIDList,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1382,7 +1477,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{15} + return fileDescriptor_ws_b2b8932ad953b270, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1402,7 +1497,21 @@ func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo -type GetMaxAndMinSeqResp struct { +func (m *GetMaxAndMinSeqReq) GetGroupIDList() []string { + if m != nil { + return m.GroupIDList + } + return nil +} + +func (m *GetMaxAndMinSeqReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +type MaxAndMinSeq struct { MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1410,11 +1519,58 @@ type GetMaxAndMinSeqResp struct { XXX_sizecache int32 `json:"-"` } +func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } +func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } +func (*MaxAndMinSeq) ProtoMessage() {} +func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_b2b8932ad953b270, []int{18} +} +func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) +} +func (m *MaxAndMinSeq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MaxAndMinSeq.Marshal(b, m, deterministic) +} +func (dst *MaxAndMinSeq) XXX_Merge(src proto.Message) { + xxx_messageInfo_MaxAndMinSeq.Merge(dst, src) +} +func (m *MaxAndMinSeq) XXX_Size() int { + return xxx_messageInfo_MaxAndMinSeq.Size(m) +} +func (m *MaxAndMinSeq) XXX_DiscardUnknown() { + xxx_messageInfo_MaxAndMinSeq.DiscardUnknown(m) +} + +var xxx_messageInfo_MaxAndMinSeq proto.InternalMessageInfo + +func (m *MaxAndMinSeq) GetMaxSeq() uint32 { + if m != nil { + return m.MaxSeq + } + return 0 +} + +func (m *MaxAndMinSeq) GetMinSeq() uint32 { + if m != nil { + return m.MinSeq + } + return 0 +} + +type GetMaxAndMinSeqResp struct { + MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` + MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` + GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,3,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{16} + return fileDescriptor_ws_b2b8932ad953b270, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1448,6 +1604,13 @@ func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { return 0 } +func (m *GetMaxAndMinSeqResp) GetGroupMaxAndMinSeq() map[string]*MaxAndMinSeq { + if m != nil { + return m.GroupMaxAndMinSeq + } + return nil +} + type UserSendMsgResp struct { ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID" json:"serverMsgID,omitempty"` ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` @@ -1461,7 +1624,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{17} + return fileDescriptor_ws_b2b8932ad953b270, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1531,7 +1694,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{18} + return fileDescriptor_ws_b2b8932ad953b270, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1699,7 +1862,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{19} + return fileDescriptor_ws_b2b8932ad953b270, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1767,7 +1930,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{20} + return fileDescriptor_ws_b2b8932ad953b270, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1824,7 +1987,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{21} + return fileDescriptor_ws_b2b8932ad953b270, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1893,7 +2056,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{22} + return fileDescriptor_ws_b2b8932ad953b270, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1948,7 +2111,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{23} + return fileDescriptor_ws_b2b8932ad953b270, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2004,7 +2167,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{24} + return fileDescriptor_ws_b2b8932ad953b270, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2059,7 +2222,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{25} + return fileDescriptor_ws_b2b8932ad953b270, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2114,7 +2277,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{26} + return fileDescriptor_ws_b2b8932ad953b270, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2170,7 +2333,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{27} + return fileDescriptor_ws_b2b8932ad953b270, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2233,7 +2396,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{28} + return fileDescriptor_ws_b2b8932ad953b270, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2296,7 +2459,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{29} + return fileDescriptor_ws_b2b8932ad953b270, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2358,7 +2521,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{30} + return fileDescriptor_ws_b2b8932ad953b270, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2412,7 +2575,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{31} + return fileDescriptor_ws_b2b8932ad953b270, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2468,7 +2631,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{32} + return fileDescriptor_ws_b2b8932ad953b270, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2537,7 +2700,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{33} + return fileDescriptor_ws_b2b8932ad953b270, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2598,7 +2761,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{34} + return fileDescriptor_ws_b2b8932ad953b270, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2652,7 +2815,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{35} + return fileDescriptor_ws_b2b8932ad953b270, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2707,7 +2870,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{36} + return fileDescriptor_ws_b2b8932ad953b270, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2767,7 +2930,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{37} + return fileDescriptor_ws_b2b8932ad953b270, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2814,7 +2977,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{38} + return fileDescriptor_ws_b2b8932ad953b270, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2867,7 +3030,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{39} + return fileDescriptor_ws_b2b8932ad953b270, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2913,7 +3076,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{40} + return fileDescriptor_ws_b2b8932ad953b270, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2953,7 +3116,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{41} + return fileDescriptor_ws_b2b8932ad953b270, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3000,7 +3163,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{42} + return fileDescriptor_ws_b2b8932ad953b270, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3048,7 +3211,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{43} + return fileDescriptor_ws_b2b8932ad953b270, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3101,7 +3264,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{44} + return fileDescriptor_ws_b2b8932ad953b270, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3139,7 +3302,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{45} + return fileDescriptor_ws_b2b8932ad953b270, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3177,7 +3340,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{46} + return fileDescriptor_ws_b2b8932ad953b270, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3215,7 +3378,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{47} + return fileDescriptor_ws_b2b8932ad953b270, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3254,7 +3417,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{48} + return fileDescriptor_ws_b2b8932ad953b270, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3293,7 +3456,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{49} + return fileDescriptor_ws_b2b8932ad953b270, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3333,7 +3496,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{50} + return fileDescriptor_ws_b2b8932ad953b270, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3388,7 +3551,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{51} + return fileDescriptor_ws_b2b8932ad953b270, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3442,7 +3605,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{52} + return fileDescriptor_ws_b2b8932ad953b270, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3488,7 +3651,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{53} + return fileDescriptor_ws_b2b8932ad953b270, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3541,7 +3704,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{54} + return fileDescriptor_ws_b2b8932ad953b270, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3808,7 +3971,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{55} + return fileDescriptor_ws_b2b8932ad953b270, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4076,7 +4239,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{56} + return fileDescriptor_ws_b2b8932ad953b270, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4172,7 +4335,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{57} + return fileDescriptor_ws_b2b8932ad953b270, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4227,7 +4390,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{58} + return fileDescriptor_ws_b2b8932ad953b270, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4288,7 +4451,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{59} + return fileDescriptor_ws_b2b8932ad953b270, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4343,7 +4506,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{60} + return fileDescriptor_ws_b2b8932ad953b270, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4404,7 +4567,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{61} + return fileDescriptor_ws_b2b8932ad953b270, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4459,7 +4622,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{62} + return fileDescriptor_ws_b2b8932ad953b270, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4517,7 +4680,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{63} + return fileDescriptor_ws_b2b8932ad953b270, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4552,7 +4715,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{64} + return fileDescriptor_ws_b2b8932ad953b270, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4620,7 +4783,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{65} + return fileDescriptor_ws_b2b8932ad953b270, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4674,7 +4837,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{66} + return fileDescriptor_ws_b2b8932ad953b270, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4725,7 +4888,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{67} + return fileDescriptor_ws_b2b8932ad953b270, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4760,7 +4923,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{68} + return fileDescriptor_ws_b2b8932ad953b270, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4825,7 +4988,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{69} + return fileDescriptor_ws_b2b8932ad953b270, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -4859,7 +5022,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{70} + return fileDescriptor_ws_b2b8932ad953b270, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -4919,7 +5082,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{71} + return fileDescriptor_ws_b2b8932ad953b270, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -4967,10 +5130,16 @@ func init() { proto.RegisterType((*DepartmentMember)(nil), "server_api_params.DepartmentMember") proto.RegisterType((*UserDepartmentMember)(nil), "server_api_params.UserDepartmentMember") proto.RegisterType((*UserInDepartment)(nil), "server_api_params.UserInDepartment") - proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") + proto.RegisterMapType((map[string]*SeqList)(nil), "server_api_params.PullMessageBySeqListReq.GroupSeqListEntry") + proto.RegisterType((*SeqList)(nil), "server_api_params.seqList") + proto.RegisterType((*MsgDataList)(nil), "server_api_params.MsgDataList") + proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") + proto.RegisterMapType((map[string]*MsgDataList)(nil), "server_api_params.PullMessageBySeqListResp.GroupMsgDataListEntry") proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") + proto.RegisterType((*MaxAndMinSeq)(nil), "server_api_params.MaxAndMinSeq") proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") + proto.RegisterMapType((map[string]*MaxAndMinSeq)(nil), "server_api_params.GetMaxAndMinSeqResp.GroupMaxAndMinSeqEntry") proto.RegisterType((*UserSendMsgResp)(nil), "server_api_params.UserSendMsgResp") proto.RegisterType((*MsgData)(nil), "server_api_params.MsgData") proto.RegisterMapType((map[string]bool)(nil), "server_api_params.MsgData.OptionsEntry") @@ -5029,200 +5198,211 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_e8e186fa2bf7c43d) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_b2b8932ad953b270) } -var fileDescriptor_ws_e8e186fa2bf7c43d = []byte{ - // 3059 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x6f, 0x24, 0x57, - 0xf1, 0xbf, 0xee, 0xf1, 0x8c, 0x3d, 0x35, 0xfe, 0xec, 0xdd, 0x9f, 0x33, 0x98, 0xcd, 0x62, 0x1a, - 0x2b, 0x84, 0x00, 0x1b, 0x94, 0x08, 0x09, 0x12, 0x58, 0xb4, 0xb6, 0xf7, 0x2b, 0xac, 0xbd, 0x4e, - 0xcf, 0x2e, 0x41, 0x80, 0x14, 0xb5, 0xa7, 0x9f, 0xc7, 0x1d, 0xf7, 0xf4, 0xeb, 0xe9, 0x0f, 0xef, - 0x2e, 0x42, 0x42, 0x02, 0x09, 0x71, 0xe3, 0x04, 0x07, 0x2e, 0x48, 0x5c, 0x10, 0x28, 0x8a, 0x22, - 0x04, 0x12, 0x07, 0x84, 0x38, 0xf0, 0x0f, 0x70, 0x44, 0x5c, 0x10, 0x67, 0xae, 0x1c, 0x90, 0x90, - 0x40, 0xaf, 0xea, 0x75, 0xf7, 0x7b, 0xdd, 0x33, 0xf6, 0xac, 0x65, 0x65, 0x37, 0x5a, 0x6e, 0x53, - 0xd5, 0xaf, 0xea, 0xd5, 0xab, 0xaa, 0x57, 0x55, 0xef, 0xd5, 0x1b, 0x58, 0x4a, 0xbc, 0xa3, 0xb7, - 0x1f, 0x24, 0x2f, 0x3f, 0x48, 0xae, 0x44, 0x31, 0x4f, 0xb9, 0xb5, 0x92, 0xb0, 0xf8, 0x98, 0xc5, - 0x6f, 0xbb, 0x91, 0xff, 0x76, 0xe4, 0xc6, 0xee, 0x30, 0xb1, 0xff, 0x69, 0x42, 0xfb, 0x66, 0xcc, - 0xb3, 0xe8, 0x76, 0x78, 0xc0, 0xad, 0x2e, 0xcc, 0x0e, 0x10, 0xd8, 0xee, 0x1a, 0xeb, 0xc6, 0x8b, - 0x6d, 0x27, 0x07, 0xad, 0x4b, 0xd0, 0xc6, 0x9f, 0xbb, 0xee, 0x90, 0x75, 0x4d, 0xfc, 0x56, 0x22, - 0x2c, 0x1b, 0xe6, 0x43, 0x9e, 0xfa, 0x07, 0x7e, 0xdf, 0x4d, 0x7d, 0x1e, 0x76, 0x1b, 0x38, 0x40, - 0xc3, 0x89, 0x31, 0x7e, 0x98, 0xc6, 0xdc, 0xcb, 0xfa, 0x38, 0x66, 0x86, 0xc6, 0xa8, 0x38, 0x31, - 0xff, 0x81, 0xdb, 0x67, 0xf7, 0x9d, 0x3b, 0xdd, 0x26, 0xcd, 0x2f, 0x41, 0x6b, 0x1d, 0x3a, 0xfc, - 0x41, 0xc8, 0xe2, 0xfb, 0x09, 0x8b, 0x6f, 0x6f, 0x77, 0x5b, 0xf8, 0x55, 0x45, 0x59, 0x97, 0x01, - 0xfa, 0x31, 0x73, 0x53, 0x76, 0xcf, 0x1f, 0xb2, 0xee, 0xec, 0xba, 0xf1, 0xe2, 0x82, 0xa3, 0x60, - 0x04, 0x87, 0x21, 0x1b, 0xee, 0xb3, 0x78, 0x8b, 0x67, 0x61, 0xda, 0x9d, 0xc3, 0x01, 0x2a, 0xca, - 0x5a, 0x04, 0x93, 0x3d, 0xec, 0xb6, 0x91, 0xb5, 0xc9, 0x1e, 0x5a, 0xab, 0xd0, 0x4a, 0x52, 0x37, - 0xcd, 0x92, 0x2e, 0xac, 0x1b, 0x2f, 0x36, 0x1d, 0x09, 0x59, 0x1b, 0xb0, 0x80, 0x7c, 0x79, 0x2e, - 0x4d, 0x07, 0x49, 0x74, 0x64, 0xa1, 0xb1, 0x7b, 0x8f, 0x22, 0xd6, 0x9d, 0x47, 0x06, 0x25, 0xc2, - 0xfe, 0x8b, 0x09, 0x17, 0x50, 0xef, 0x3b, 0x28, 0xc0, 0x8d, 0x2c, 0x08, 0x4e, 0xb1, 0xc0, 0x2a, - 0xb4, 0x32, 0x9a, 0x8e, 0xd4, 0x2f, 0x21, 0x31, 0x4f, 0xcc, 0x03, 0x76, 0x87, 0x1d, 0xb3, 0x00, - 0x15, 0xdf, 0x74, 0x4a, 0x84, 0xb5, 0x06, 0x73, 0xef, 0x70, 0x3f, 0x44, 0x9d, 0xcc, 0xe0, 0xc7, - 0x02, 0x16, 0xdf, 0x42, 0xbf, 0x7f, 0x14, 0x0a, 0x93, 0x92, 0xba, 0x0b, 0x58, 0xb5, 0x44, 0x4b, - 0xb7, 0xc4, 0x0b, 0xb0, 0xe8, 0x46, 0xd1, 0x8e, 0x1b, 0x0e, 0x58, 0x4c, 0x93, 0xce, 0x22, 0xdf, - 0x0a, 0x56, 0xd8, 0x43, 0xcc, 0xd4, 0xe3, 0x59, 0xdc, 0x67, 0xa8, 0xee, 0xa6, 0xa3, 0x60, 0x04, - 0x1f, 0x1e, 0xb1, 0x58, 0x51, 0x23, 0x69, 0xbe, 0x82, 0x95, 0x56, 0x81, 0xc2, 0x2a, 0xc2, 0x8e, - 0x59, 0xca, 0xae, 0x87, 0x1e, 0x2e, 0xaa, 0x23, 0xed, 0x58, 0xa2, 0xec, 0x1f, 0x18, 0xb0, 0xb8, - 0x97, 0xed, 0x07, 0x7e, 0x1f, 0x59, 0x08, 0xb5, 0x96, 0xca, 0x33, 0x34, 0xe5, 0xa9, 0x2a, 0x30, - 0x27, 0xab, 0xa0, 0xa1, 0xab, 0x60, 0x15, 0x5a, 0x03, 0x16, 0x7a, 0x2c, 0x96, 0x2a, 0x95, 0x90, - 0x14, 0xb5, 0x99, 0x8b, 0x6a, 0xff, 0xc4, 0x84, 0xb9, 0x0f, 0x58, 0x84, 0x75, 0xe8, 0x44, 0x87, - 0x3c, 0x64, 0xbb, 0x99, 0x70, 0x2b, 0x29, 0x8b, 0x8a, 0xb2, 0x2e, 0x42, 0x73, 0xdf, 0x8f, 0xd3, - 0x43, 0xb4, 0xeb, 0x82, 0x43, 0x80, 0xc0, 0xb2, 0xa1, 0xeb, 0x93, 0x31, 0xdb, 0x0e, 0x01, 0x72, - 0x41, 0x73, 0x85, 0xee, 0xf5, 0x3d, 0xd6, 0xae, 0xed, 0xb1, 0xba, 0x6f, 0xc0, 0x38, 0xdf, 0xb0, - 0xff, 0x65, 0x00, 0xdc, 0x88, 0x7d, 0x16, 0x7a, 0xa8, 0x9a, 0xca, 0xe6, 0x36, 0xea, 0x9b, 0x7b, - 0x15, 0x5a, 0x31, 0x1b, 0xba, 0xf1, 0x51, 0xee, 0xfc, 0x04, 0x55, 0x04, 0x6a, 0xd4, 0x04, 0x7a, - 0x1d, 0xe0, 0x00, 0xe7, 0x11, 0x7c, 0x50, 0x55, 0x9d, 0x57, 0x3e, 0x7a, 0xa5, 0x16, 0x06, 0xaf, - 0xe4, 0x56, 0x72, 0x94, 0xe1, 0x62, 0x67, 0xb9, 0x9e, 0x27, 0x1d, 0xb8, 0x49, 0x3b, 0xab, 0x40, - 0x8c, 0xf1, 0xdf, 0xd6, 0x09, 0xfe, 0x3b, 0x5b, 0x38, 0xc5, 0x3f, 0x0c, 0x68, 0x6f, 0x06, 0x6e, - 0xff, 0x68, 0xca, 0xa5, 0xeb, 0x4b, 0x34, 0x6b, 0x4b, 0xbc, 0x09, 0x0b, 0xfb, 0x82, 0x5d, 0xbe, - 0x04, 0xd4, 0x42, 0xe7, 0x95, 0x8f, 0x8f, 0x59, 0xa5, 0xbe, 0x29, 0x1c, 0x9d, 0x4e, 0x5f, 0xee, - 0xcc, 0xe9, 0xcb, 0x6d, 0x9e, 0xb0, 0xdc, 0x56, 0xb1, 0xdc, 0x3f, 0x9b, 0x30, 0x8f, 0x81, 0xce, - 0x61, 0xa3, 0x8c, 0x25, 0xa9, 0xf5, 0x65, 0x98, 0xcb, 0x72, 0x51, 0x8d, 0x69, 0x45, 0x2d, 0x48, - 0xac, 0xd7, 0x64, 0x58, 0x45, 0x7a, 0x13, 0xe9, 0x2f, 0x8d, 0xa1, 0x2f, 0x72, 0x9a, 0x53, 0x0e, - 0x17, 0x29, 0xe8, 0xd0, 0x0d, 0xbd, 0x80, 0x39, 0x2c, 0xc9, 0x82, 0x54, 0x46, 0x4b, 0x0d, 0x47, - 0x9e, 0x36, 0xda, 0x49, 0x06, 0x32, 0x41, 0x49, 0x48, 0x68, 0x87, 0xc6, 0x89, 0x4f, 0xb4, 0xf4, - 0x12, 0x21, 0x36, 0x6a, 0xcc, 0x46, 0x68, 0x21, 0xda, 0x56, 0x39, 0x58, 0xce, 0x29, 0xb5, 0x46, - 0x8e, 0xa0, 0xe1, 0x84, 0x89, 0x09, 0x46, 0x06, 0x94, 0x99, 0x14, 0x4c, 0x35, 0x31, 0xd9, 0x7f, - 0x6d, 0xc0, 0x02, 0x6d, 0x9f, 0x5c, 0xa9, 0x97, 0x85, 0x9f, 0xf3, 0xa1, 0xe6, 0x45, 0x0a, 0x46, - 0x48, 0x21, 0xa0, 0x5d, 0x3d, 0xd0, 0x68, 0x38, 0xe1, 0x8a, 0x02, 0xbe, 0xa1, 0x05, 0x1c, 0x15, - 0x95, 0xcf, 0x72, 0x53, 0x0d, 0x3c, 0x0a, 0x46, 0x84, 0xb2, 0x94, 0x6b, 0xde, 0x51, 0xc0, 0x82, - 0x36, 0xe5, 0xc5, 0xfc, 0xe4, 0x1f, 0x0a, 0x46, 0xe8, 0x37, 0xe5, 0xf9, 0xdc, 0xa4, 0xa4, 0x12, - 0x41, 0x9c, 0xe5, 0xbc, 0x94, 0x4a, 0x0a, 0xb8, 0x66, 0xd5, 0xf6, 0x89, 0x56, 0x05, 0xcd, 0xaa, - 0xfa, 0xe6, 0xea, 0xd4, 0x36, 0xd7, 0x06, 0x2c, 0x10, 0x9f, 0xdc, 0xe9, 0xe7, 0x29, 0xd5, 0x6b, - 0x48, 0xdd, 0x37, 0x16, 0xaa, 0xbe, 0xa1, 0x5b, 0x77, 0x71, 0x82, 0x75, 0x97, 0x0a, 0xeb, 0xfe, - 0xda, 0x04, 0xd8, 0x66, 0x91, 0x1b, 0xa7, 0x43, 0x16, 0xa6, 0x62, 0x79, 0x5e, 0x01, 0x15, 0xc6, - 0xd5, 0x70, 0x6a, 0x9e, 0x30, 0xf5, 0x3c, 0x61, 0xc1, 0x0c, 0x2a, 0x9c, 0xac, 0x89, 0xbf, 0x85, - 0x32, 0x23, 0x37, 0x26, 0x6e, 0xe4, 0xe4, 0x05, 0x2c, 0xf2, 0x00, 0x8f, 0x3d, 0x99, 0x39, 0x9a, - 0x0e, 0x01, 0x62, 0xf3, 0x97, 0xf3, 0x61, 0x41, 0xd3, 0xa2, 0xb8, 0xae, 0x63, 0x4f, 0xad, 0xc1, - 0x5e, 0x82, 0xe5, 0x24, 0xdb, 0x2f, 0x17, 0xb7, 0x9b, 0x0d, 0xa5, 0xbb, 0xd7, 0xf0, 0x42, 0xa9, - 0x54, 0x9c, 0x89, 0x41, 0x94, 0x6a, 0x4a, 0x44, 0xb5, 0x2a, 0xb0, 0xdf, 0x35, 0x61, 0xf9, 0x6e, - 0x3c, 0x70, 0x43, 0xff, 0xdb, 0x58, 0x6e, 0x62, 0x00, 0x3f, 0x4b, 0xca, 0x5d, 0x87, 0x0e, 0x0b, - 0x07, 0x81, 0x9f, 0x1c, 0xee, 0x96, 0x7a, 0x53, 0x51, 0xaa, 0xb2, 0x67, 0x26, 0x25, 0xe5, 0xa6, - 0x96, 0x94, 0x57, 0xa1, 0x35, 0xe4, 0xfb, 0x7e, 0x90, 0xfb, 0xbd, 0x84, 0xd0, 0xe7, 0x59, 0xc0, - 0x30, 0x3b, 0x17, 0x3e, 0x9f, 0x23, 0xca, 0x44, 0x3d, 0x37, 0x36, 0x51, 0xb7, 0xd5, 0x44, 0xad, - 0x2b, 0x1e, 0x6a, 0x8a, 0x27, 0x75, 0x75, 0x0a, 0x75, 0xfd, 0xd1, 0x80, 0xe5, 0x52, 0xdd, 0x54, - 0x83, 0x4e, 0x54, 0x57, 0xd5, 0x03, 0xcd, 0x31, 0x1e, 0x58, 0xf8, 0x4d, 0x43, 0xf5, 0x1b, 0xe1, - 0x69, 0x3c, 0xf1, 0x95, 0x7a, 0xbf, 0x80, 0xc5, 0x6c, 0x01, 0x73, 0x15, 0x65, 0x11, 0xa4, 0x54, - 0xdd, 0x2d, 0xad, 0xea, 0xae, 0xe6, 0xd1, 0xdf, 0x19, 0x70, 0x51, 0x58, 0xb9, 0xb6, 0x8c, 0xbb, - 0xb0, 0xcc, 0x2b, 0x9e, 0x20, 0x13, 0xcd, 0x27, 0xc6, 0x24, 0x8a, 0xaa, 0xd3, 0x38, 0x35, 0x62, - 0xc1, 0xd0, 0xab, 0x4c, 0x22, 0x33, 0xcf, 0x38, 0x86, 0x55, 0x79, 0x9c, 0x1a, 0xb1, 0xfd, 0x7b, - 0x03, 0x96, 0x29, 0xb5, 0x29, 0xfb, 0xfc, 0xdc, 0xc5, 0x7e, 0x0b, 0x2e, 0x56, 0x67, 0xbe, 0xe3, - 0x27, 0x69, 0xd7, 0x5c, 0x6f, 0x4c, 0x2b, 0xfa, 0x58, 0x06, 0xf6, 0x77, 0xa0, 0xbb, 0x97, 0x05, - 0xc1, 0x0e, 0x4b, 0x12, 0x77, 0xc0, 0x36, 0x1f, 0xf5, 0xd8, 0x48, 0xe0, 0x1d, 0x96, 0x44, 0x62, - 0x73, 0xb0, 0x38, 0xde, 0xe2, 0x1e, 0x43, 0xe1, 0x9b, 0x4e, 0x0e, 0x0a, 0xbb, 0xb2, 0x38, 0x16, - 0x11, 0x52, 0x96, 0x70, 0x04, 0x59, 0x57, 0x60, 0x26, 0x10, 0x62, 0x35, 0x50, 0xac, 0xb5, 0x31, - 0x62, 0xed, 0x24, 0x83, 0x6d, 0x37, 0x75, 0x1d, 0x1c, 0x67, 0x0f, 0xe1, 0xb9, 0xf1, 0xb3, 0x8f, - 0x26, 0x3a, 0xb0, 0x28, 0xb2, 0xb0, 0x4a, 0xf1, 0x79, 0x58, 0xf8, 0xaf, 0x8a, 0x12, 0x62, 0x27, - 0xc4, 0x07, 0xe5, 0x58, 0x70, 0x72, 0xd0, 0xbe, 0x08, 0xd6, 0x4d, 0x96, 0xee, 0xb8, 0x0f, 0xaf, - 0x85, 0xde, 0x8e, 0x1f, 0xf6, 0xd8, 0xc8, 0x61, 0x23, 0xfb, 0x3a, 0x5c, 0xa8, 0x61, 0x93, 0x08, - 0x37, 0xba, 0xfb, 0xb0, 0xc7, 0x46, 0x28, 0xc0, 0x82, 0x23, 0x21, 0xc4, 0xe3, 0x28, 0x59, 0xbf, - 0x49, 0xc8, 0x1e, 0xc1, 0x92, 0x30, 0x55, 0x8f, 0x85, 0xde, 0x4e, 0x32, 0x40, 0x16, 0xeb, 0xd0, - 0x21, 0x0d, 0xec, 0x24, 0x83, 0xb2, 0x20, 0x54, 0x50, 0x62, 0x44, 0x3f, 0xf0, 0x85, 0x49, 0x70, - 0x84, 0x5c, 0x8d, 0x82, 0x12, 0xdb, 0x2e, 0x61, 0xf2, 0x7c, 0x24, 0xf6, 0x63, 0xc3, 0x29, 0x60, - 0xfb, 0x6f, 0x4d, 0x98, 0x95, 0x0a, 0xc5, 0xad, 0x26, 0x6a, 0xf0, 0x42, 0x5f, 0x04, 0x51, 0xb6, - 0xec, 0x1f, 0x97, 0x47, 0x4d, 0x82, 0xd4, 0xc3, 0x69, 0x43, 0x3f, 0x9c, 0x56, 0x64, 0x9a, 0xa9, - 0xcb, 0x54, 0x59, 0x57, 0xb3, 0xbe, 0x2e, 0x91, 0x1c, 0x30, 0x5e, 0xee, 0x05, 0x6e, 0x7a, 0xc0, - 0xe3, 0xa1, 0x2c, 0xa9, 0x9b, 0x4e, 0x0d, 0x2f, 0x12, 0x12, 0xe1, 0x8a, 0x8a, 0x82, 0x02, 0x43, - 0x05, 0x2b, 0xf2, 0x37, 0x61, 0xf2, 0xca, 0x82, 0xce, 0x32, 0x3a, 0x92, 0x64, 0x4b, 0x12, 0x9f, - 0x87, 0x98, 0xdb, 0xa8, 0x80, 0x50, 0x51, 0x62, 0xe5, 0xc3, 0x64, 0x70, 0x23, 0xe6, 0x43, 0x79, - 0xa2, 0xc9, 0x41, 0x5c, 0x39, 0x0f, 0xd3, 0x3c, 0x2f, 0x76, 0x88, 0x56, 0x41, 0x09, 0x5a, 0x09, - 0x62, 0xf5, 0x30, 0xef, 0xe4, 0xa0, 0xb5, 0x0c, 0x8d, 0x84, 0x8d, 0x64, 0x49, 0x20, 0x7e, 0x6a, - 0x96, 0x5b, 0xd2, 0x2d, 0x57, 0x89, 0xf1, 0xcb, 0xf8, 0x55, 0x8d, 0xf1, 0x65, 0xe0, 0x5c, 0xd1, - 0x02, 0xe7, 0x35, 0x98, 0xe5, 0x91, 0xf0, 0xf3, 0xa4, 0x6b, 0xe1, 0x1e, 0xfb, 0xe4, 0xe4, 0x3d, - 0x76, 0xe5, 0x2e, 0x8d, 0xbc, 0x1e, 0xa6, 0xf1, 0x23, 0x27, 0xa7, 0xb3, 0xee, 0xc0, 0x12, 0x3f, - 0x38, 0x08, 0xfc, 0x90, 0xed, 0x65, 0xc9, 0x21, 0x96, 0xde, 0x17, 0x30, 0x34, 0xd9, 0xe3, 0x42, - 0x93, 0x3e, 0xd2, 0xa9, 0x92, 0x8a, 0x7c, 0xe2, 0xa6, 0x54, 0x3a, 0xe1, 0x8e, 0xbb, 0xb8, 0xde, - 0x10, 0xf9, 0x44, 0xc5, 0xad, 0xbd, 0x06, 0xf3, 0xaa, 0x28, 0x42, 0x55, 0x47, 0xec, 0x91, 0xf4, - 0x53, 0xf1, 0x53, 0x64, 0x9c, 0x63, 0x37, 0xc8, 0x28, 0x83, 0xcf, 0x39, 0x04, 0xbc, 0x66, 0x7e, - 0xc1, 0xb0, 0x7f, 0x6c, 0xc0, 0x52, 0x45, 0x08, 0x31, 0x3a, 0xf5, 0xd3, 0x80, 0x49, 0x0e, 0x04, - 0x88, 0xea, 0xc8, 0x63, 0x49, 0x5f, 0xba, 0x39, 0xfe, 0x96, 0x79, 0xa6, 0x51, 0x9c, 0x79, 0x6d, - 0x98, 0xf7, 0xef, 0xf6, 0x04, 0xa3, 0x1e, 0xcf, 0x42, 0xaf, 0xb8, 0xb7, 0x52, 0x70, 0xc2, 0xcd, - 0xfc, 0xbb, 0xbd, 0x4d, 0xd7, 0x1b, 0x30, 0xba, 0x5d, 0x6a, 0xa2, 0x4c, 0x3a, 0xd2, 0xf6, 0x60, - 0xee, 0x9e, 0x1f, 0x25, 0x5b, 0x7c, 0x38, 0x14, 0xc6, 0xf2, 0x58, 0x2a, 0xf2, 0xb8, 0x81, 0x3e, - 0x21, 0x21, 0xe1, 0x4e, 0x1e, 0x3b, 0x70, 0xb3, 0x20, 0x15, 0x43, 0xf3, 0xcd, 0xad, 0xa0, 0xf0, - 0x5e, 0x25, 0xe1, 0xe1, 0x36, 0x51, 0x93, 0x9c, 0x0a, 0xc6, 0xfe, 0x93, 0x09, 0xcb, 0x78, 0xfa, - 0xd9, 0x42, 0xd7, 0xf0, 0x90, 0xe8, 0x15, 0x68, 0xe2, 0x56, 0x95, 0x19, 0xe5, 0xe4, 0x13, 0x13, - 0x0d, 0xb5, 0xae, 0x42, 0x8b, 0x47, 0x98, 0x86, 0x28, 0xd9, 0xbd, 0x30, 0x89, 0x48, 0xbf, 0xc2, - 0x72, 0x24, 0x95, 0x75, 0x03, 0x60, 0x58, 0x66, 0x1d, 0x0a, 0xef, 0xd3, 0xf2, 0x50, 0x28, 0x85, - 0x72, 0x8b, 0x50, 0x5d, 0xdc, 0x63, 0x35, 0x1c, 0x1d, 0x69, 0xed, 0xc2, 0x22, 0x8a, 0x7d, 0x37, - 0x3f, 0x3a, 0xa3, 0x0d, 0xa6, 0x9f, 0xb1, 0x42, 0x6d, 0xff, 0xdc, 0x90, 0x6a, 0x14, 0x5f, 0x7b, - 0x8c, 0x74, 0x5f, 0xaa, 0xc4, 0x38, 0x93, 0x4a, 0xd6, 0x60, 0x6e, 0x98, 0x29, 0x27, 0xf9, 0x86, - 0x53, 0xc0, 0xa5, 0x89, 0x1a, 0x53, 0x9b, 0xc8, 0xfe, 0x85, 0x01, 0xdd, 0x37, 0xb8, 0x1f, 0xe2, - 0x87, 0x6b, 0x51, 0x14, 0xc8, 0xcb, 0xd6, 0x33, 0xdb, 0xfc, 0x2b, 0xd0, 0x76, 0x89, 0x4d, 0x98, - 0x4a, 0xb3, 0x4f, 0x71, 0x3a, 0x2f, 0x69, 0x94, 0x83, 0x56, 0x43, 0x3d, 0x68, 0xd9, 0xef, 0x19, - 0xb0, 0x48, 0x4a, 0x79, 0x33, 0xf3, 0xd3, 0x33, 0xcb, 0xb7, 0x09, 0x73, 0xa3, 0xcc, 0x4f, 0xcf, - 0xe0, 0x95, 0x05, 0x5d, 0xdd, 0x9f, 0x1a, 0x63, 0xfc, 0xc9, 0x7e, 0xdf, 0x80, 0x4b, 0x55, 0xb5, - 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, 0x8a, - 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xfb, 0x26, 0x7c, 0xe4, 0x66, 0xb1, 0xf1, 0xee, - 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, 0x65, - 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, 0xe7, - 0xab, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, 0x6c, - 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, 0x3a, - 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x35, 0x60, - 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, 0xc3, - 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, 0xa1, - 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x53, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, 0xf4, - 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, 0xa2, - 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, 0xd0, - 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xca, 0x80, 0x45, 0x1a, - 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8d, 0x95, 0x84, 0x7b, 0xad, 0x2a, 0x5c, - 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, 0xa5, - 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, 0x9c, - 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, 0xac, - 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, 0x78, - 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, 0x98, - 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, 0xbf, - 0xc8, 0xfe, 0x16, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, 0xcb, - 0x7c, 0x6c, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x9e, 0x01, 0xcf, 0xd7, 0xd8, 0x5f, - 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, 0xb1, - 0x42, 0x68, 0x05, 0xfb, 0x07, 0x20, 0xc4, 0x2f, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, 0xf6, - 0xf3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, 0xae, - 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xb1, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, 0x7a, - 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, 0xc1, - 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, 0x94, - 0x9c, 0x0b, 0xf7, 0xcf, 0xc2, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, 0xbd, - 0x6e, 0x7f, 0x0e, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, 0x68, - 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, 0x95, - 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, 0x4f, - 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, 0xa7, - 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, 0x07, - 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, 0x0f, - 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, 0x62, - 0xec, 0xaf, 0x81, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, 0xe2, - 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, 0x57, - 0x30, 0xf6, 0xcf, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x04, 0x2d, - 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, 0xff, - 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0xa7, 0x4e, - 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, 0x05, - 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, 0xd3, - 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, 0x4c, - 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, 0x14, - 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, 0x1b, - 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, 0x46, - 0xea, 0x8d, 0x37, 0xd2, 0xa7, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, 0x1b, - 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, 0xa5, - 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, 0x36, - 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0x7d, 0x13, 0x16, 0x51, 0x65, 0xd4, 0x4c, 0x0c, 0x0f, - 0x38, 0xf6, 0x03, 0x50, 0x5d, 0xfa, 0xbb, 0x2e, 0x1d, 0x69, 0x7d, 0x06, 0x56, 0x08, 0xc1, 0x94, - 0x66, 0x88, 0x89, 0xcd, 0x90, 0xfa, 0x07, 0x6c, 0xff, 0x64, 0x49, 0xca, 0x87, 0xdb, 0x6e, 0xea, - 0xe6, 0xc5, 0x57, 0x89, 0x51, 0x9b, 0x73, 0x33, 0xb5, 0x97, 0xa3, 0x31, 0xe7, 0xc3, 0xa2, 0xeb, - 0x26, 0x21, 0x41, 0x91, 0xfa, 0x43, 0xc6, 0xb3, 0x54, 0x86, 0x89, 0x1c, 0xa4, 0xb7, 0x17, 0x9e, - 0xef, 0x62, 0x4b, 0x4b, 0x3e, 0x4c, 0x28, 0x10, 0x18, 0xd9, 0xca, 0x16, 0x9d, 0x7c, 0xd9, 0x59, - 0x62, 0x4e, 0x6f, 0xa7, 0xd9, 0x7f, 0x37, 0xe0, 0xc2, 0x9e, 0x1b, 0xa7, 0x7e, 0xdf, 0x8f, 0xdc, - 0x30, 0xdd, 0x61, 0xa9, 0x8b, 0x6b, 0xd0, 0x1e, 0x77, 0x19, 0x8f, 0xf7, 0xb8, 0x6b, 0x0f, 0x96, - 0x06, 0xfa, 0xe9, 0xe2, 0x31, 0x0f, 0x06, 0x55, 0x72, 0xed, 0xa5, 0x5a, 0xe3, 0xb1, 0x5f, 0xaa, - 0xd9, 0x3f, 0x34, 0x61, 0xa9, 0x12, 0x3a, 0x4f, 0xcc, 0x3b, 0xd7, 0x00, 0xfc, 0xc2, 0x8d, 0x4e, - 0xb8, 0x7c, 0xd7, 0x7d, 0xcd, 0x51, 0x88, 0xc6, 0xf5, 0xe9, 0x1a, 0x67, 0xef, 0xd3, 0xdd, 0x82, - 0x4e, 0x54, 0x1a, 0xe9, 0x84, 0xb3, 0xcf, 0x18, 0x53, 0x3a, 0x2a, 0xa9, 0xfd, 0x4d, 0x58, 0xa9, - 0x45, 0x28, 0x6c, 0xc9, 0xf1, 0x23, 0x16, 0x16, 0x2d, 0x39, 0x01, 0x28, 0xce, 0x6a, 0x56, 0x9d, - 0x35, 0xf0, 0x8f, 0xd5, 0xa7, 0xb0, 0x12, 0xb4, 0x7f, 0x64, 0xc2, 0xea, 0xf8, 0xec, 0xf2, 0xac, - 0xaa, 0x7b, 0x1f, 0xba, 0x93, 0x22, 0xf9, 0xb9, 0x69, 0xbd, 0xf4, 0xee, 0x22, 0x0f, 0x3f, 0xab, - 0xea, 0xbe, 0x90, 0x7b, 0xb7, 0x92, 0xea, 0xec, 0xdf, 0x14, 0xfa, 0x29, 0x2a, 0x8d, 0x67, 0x54, - 0x3f, 0xd6, 0x4b, 0xb0, 0x4c, 0xcb, 0x54, 0x1e, 0x76, 0x50, 0xe1, 0x5a, 0xc3, 0x97, 0x91, 0x42, - 0x49, 0xfb, 0xe7, 0xe6, 0xb3, 0x7f, 0x30, 0x72, 0x9b, 0x14, 0xf5, 0xdb, 0x87, 0xca, 0x26, 0xa5, - 0xa7, 0x29, 0x45, 0x8d, 0xe2, 0x69, 0x45, 0x5d, 0xf9, 0x3f, 0x4f, 0x3b, 0xdd, 0xd3, 0x0a, 0x5d, - 0x2a, 0x05, 0x9e, 0xfd, 0x5d, 0x58, 0xd8, 0x66, 0xc1, 0x4e, 0x32, 0xc8, 0x9f, 0x94, 0x9d, 0xeb, - 0x41, 0xb1, 0xfa, 0x10, 0x6d, 0xa6, 0xf6, 0x10, 0xcd, 0xde, 0x84, 0x45, 0x55, 0x80, 0xb3, 0xbc, - 0xa8, 0xdb, 0xbc, 0xf4, 0x8d, 0xb5, 0x2b, 0x2f, 0xd3, 0x7f, 0xbf, 0x5e, 0xaf, 0x29, 0x71, 0xbf, - 0x85, 0xff, 0x05, 0x7b, 0xf5, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x11, 0x1c, 0x36, 0x1e, - 0x36, 0x00, 0x00, +var fileDescriptor_ws_b2b8932ad953b270 = []byte{ + // 3238 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x24, 0x57, + 0x11, 0xa7, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x3f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, + 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x1f, 0x8b, 0xfc, 0x91, 0xfd, 0x48, 0xd6, 0x5e, 0xa7, + 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc3, 0xbb, + 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x48, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, + 0x90, 0x38, 0x20, 0xc4, 0x81, 0x3f, 0x00, 0x8e, 0x88, 0x0b, 0xe2, 0xcc, 0x95, 0x03, 0x12, 0x12, + 0xe8, 0x55, 0xbd, 0xee, 0x7e, 0xaf, 0xbb, 0xc7, 0x9e, 0x1d, 0x59, 0xd9, 0x8d, 0x96, 0x9b, 0xab, + 0xe6, 0x55, 0xbd, 0x7a, 0xf5, 0xab, 0x57, 0x55, 0xfd, 0xde, 0x33, 0x2c, 0xc4, 0xce, 0xe1, 0x7b, + 0x77, 0xe3, 0xe7, 0xef, 0xc6, 0x97, 0xc2, 0x28, 0x48, 0x02, 0x63, 0x29, 0x66, 0xd1, 0x31, 0x8b, + 0xde, 0xb3, 0x43, 0xf7, 0xbd, 0xd0, 0x8e, 0xec, 0x61, 0x6c, 0xfe, 0x4b, 0x87, 0xf6, 0xd5, 0x28, + 0x48, 0xc3, 0xeb, 0xfe, 0x7e, 0x60, 0x74, 0x61, 0x7a, 0x80, 0xc4, 0x56, 0x57, 0x5b, 0xd5, 0x9e, + 0x6d, 0x5b, 0x19, 0x69, 0x5c, 0x80, 0x36, 0xfe, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0xdf, 0x0a, + 0x86, 0x61, 0xc2, 0xac, 0x1f, 0x24, 0xee, 0xbe, 0xdb, 0xb7, 0x13, 0x37, 0xf0, 0xbb, 0x0d, 0x1c, + 0xa0, 0xf0, 0xf8, 0x18, 0xd7, 0x4f, 0xa2, 0xc0, 0x49, 0xfb, 0x38, 0x66, 0x8a, 0xc6, 0xc8, 0x3c, + 0x3e, 0xff, 0xbe, 0xdd, 0x67, 0xb7, 0xad, 0x1b, 0xdd, 0x26, 0xcd, 0x2f, 0x48, 0x63, 0x15, 0x3a, + 0xc1, 0x5d, 0x9f, 0x45, 0xb7, 0x63, 0x16, 0x5d, 0xdf, 0xea, 0xb6, 0xf0, 0x57, 0x99, 0x65, 0x5c, + 0x04, 0xe8, 0x47, 0xcc, 0x4e, 0xd8, 0x2d, 0x77, 0xc8, 0xba, 0xd3, 0xab, 0xda, 0xb3, 0x73, 0x96, + 0xc4, 0xe1, 0x1a, 0x86, 0x6c, 0xb8, 0xc7, 0xa2, 0xcd, 0x20, 0xf5, 0x93, 0xee, 0x0c, 0x0e, 0x90, + 0x59, 0xc6, 0x3c, 0xe8, 0xec, 0x5e, 0xb7, 0x8d, 0xaa, 0x75, 0x76, 0xcf, 0x58, 0x86, 0x56, 0x9c, + 0xd8, 0x49, 0x1a, 0x77, 0x61, 0x55, 0x7b, 0xb6, 0x69, 0x09, 0xca, 0x58, 0x83, 0x39, 0xd4, 0x1b, + 0x64, 0xd6, 0x74, 0x50, 0x44, 0x65, 0xe6, 0x1e, 0xbb, 0x75, 0x3f, 0x64, 0xdd, 0x59, 0x54, 0x50, + 0x30, 0xcc, 0xbf, 0xea, 0x70, 0x0e, 0xfd, 0xbe, 0x8d, 0x06, 0x5c, 0x49, 0x3d, 0xef, 0x14, 0x04, + 0x96, 0xa1, 0x95, 0xd2, 0x74, 0xe4, 0x7e, 0x41, 0xf1, 0x79, 0xa2, 0xc0, 0x63, 0x37, 0xd8, 0x31, + 0xf3, 0xd0, 0xf1, 0x4d, 0xab, 0x60, 0x18, 0x2b, 0x30, 0x73, 0x27, 0x70, 0x7d, 0xf4, 0xc9, 0x14, + 0xfe, 0x98, 0xd3, 0xfc, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, + 0xb4, 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0x9a, 0x74, 0x1a, + 0xf5, 0x96, 0xb8, 0x1c, 0x0f, 0x3e, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, + 0xc3, 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, + 0x1c, 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0xb8, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, + 0x7e, 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, + 0xa0, 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, + 0x28, 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, + 0x0f, 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, + 0x4a, 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, + 0x62, 0x41, 0x33, 0xb9, 0xef, 0xd5, 0x3d, 0xd6, 0xae, 0xec, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, + 0x98, 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x73, 0x6b, 0xd5, 0xcd, + 0xbd, 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, + 0xbd, 0x0a, 0xb0, 0x8f, 0xf3, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x49, 0x83, + 0x97, 0x32, 0x94, 0x2c, 0x69, 0x38, 0xdf, 0x59, 0xb6, 0xe3, 0x88, 0x00, 0x6e, 0xd2, 0xce, 0xca, + 0x19, 0x35, 0xf1, 0xdb, 0x3a, 0x21, 0x7e, 0xa7, 0xf3, 0xa0, 0xf8, 0xa7, 0x06, 0xed, 0x0d, 0xcf, + 0xee, 0x1f, 0x8e, 0xb9, 0x74, 0x75, 0x89, 0x7a, 0x65, 0x89, 0x57, 0x61, 0x6e, 0x8f, 0xab, 0xcb, + 0x96, 0x80, 0x5e, 0xe8, 0xbc, 0xf8, 0x99, 0x9a, 0x55, 0xaa, 0x9b, 0xc2, 0x52, 0xe5, 0xd4, 0xe5, + 0x4e, 0x9d, 0xbe, 0xdc, 0xe6, 0x09, 0xcb, 0x6d, 0xe5, 0xcb, 0xfd, 0x8b, 0x0e, 0xb3, 0x98, 0xe8, + 0x2c, 0x76, 0x94, 0xb2, 0x38, 0x31, 0x5e, 0x87, 0x99, 0x34, 0x33, 0x55, 0x1b, 0xd7, 0xd4, 0x5c, + 0xc4, 0x78, 0x45, 0xa4, 0x55, 0x94, 0xd7, 0x51, 0xfe, 0x42, 0x8d, 0x7c, 0x5e, 0xd3, 0xac, 0x62, + 0x38, 0x2f, 0x41, 0x07, 0xb6, 0xef, 0x78, 0xcc, 0x62, 0x71, 0xea, 0x25, 0x22, 0x5b, 0x2a, 0x3c, + 0x8a, 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x0a, 0x94, 0xa0, 0xb8, 0x77, 0x68, 0x1c, 0xff, 0x89, 0x96, + 0x5e, 0x30, 0xf8, 0x46, 0x8d, 0xd8, 0x11, 0x22, 0x44, 0xdb, 0x2a, 0x23, 0x8b, 0x39, 0x85, 0xd7, + 0x28, 0x10, 0x14, 0x1e, 0x87, 0x98, 0x68, 0x54, 0x40, 0x95, 0x49, 0xe2, 0x94, 0x0b, 0x93, 0xf9, + 0xb7, 0x06, 0xcc, 0xd1, 0xf6, 0xc9, 0x9c, 0x7a, 0x91, 0xc7, 0x79, 0x30, 0x54, 0xa2, 0x48, 0xe2, + 0x70, 0x2b, 0x38, 0xb5, 0xa3, 0x26, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x84, 0x23, + 0xb3, 0xb2, 0x59, 0xae, 0xca, 0x89, 0x47, 0xe2, 0xf0, 0x54, 0x96, 0x04, 0x4a, 0x74, 0xe4, 0x34, + 0x97, 0x4d, 0x82, 0x7c, 0x7e, 0x8a, 0x0f, 0x89, 0xc3, 0xfd, 0x9b, 0x04, 0xd9, 0xdc, 0xe4, 0xa4, + 0x82, 0x41, 0x9a, 0xc5, 0xbc, 0x54, 0x4a, 0x72, 0xba, 0x82, 0x6a, 0xfb, 0x44, 0x54, 0x41, 0x41, + 0x55, 0xdd, 0x5c, 0x9d, 0xca, 0xe6, 0x5a, 0x83, 0x39, 0xd2, 0x93, 0x05, 0xfd, 0x2c, 0x95, 0x7a, + 0x85, 0xa9, 0xc6, 0xc6, 0x5c, 0x39, 0x36, 0x54, 0x74, 0xe7, 0x47, 0xa0, 0xbb, 0x90, 0xa3, 0xfb, + 0x6b, 0x1d, 0x60, 0x8b, 0x85, 0x76, 0x94, 0x0c, 0x99, 0x9f, 0xf0, 0xe5, 0x39, 0x39, 0x95, 0x83, + 0xab, 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x74, 0x38, 0xa1, 0x89, 0x7f, 0x73, + 0x67, 0x86, 0x76, 0x44, 0xda, 0x28, 0xc8, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, + 0x5a, 0x44, 0xf0, 0xcd, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf2, 0xba, 0xca, 0x3d, 0xb5, 0x07, + 0x7b, 0x0e, 0x16, 0xe3, 0x74, 0xaf, 0x58, 0xdc, 0x4e, 0x3a, 0x14, 0xe1, 0x5e, 0xe1, 0x73, 0xa7, + 0x52, 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, + 0xd1, 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x09, 0x7c, 0x92, 0x92, 0xbb, 0x0a, 0x1d, 0xe6, + 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x2a, 0xca, 0x4d, + 0xa5, 0x28, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, + 0xc3, 0xea, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x0a, 0xf5, 0x4c, 0x6d, 0xa1, 0x6e, 0xcb, 0x85, 0x5a, + 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0xa3, 0x06, 0x8b, 0x85, 0xbb, 0xa9, + 0x07, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, + 0x69, 0x41, 0xec, 0x4a, 0xfd, 0x7e, 0x4e, 0xf3, 0xd9, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xea, + 0xba, 0x5b, 0x4a, 0xd7, 0x5d, 0xae, 0xa3, 0xbf, 0xd3, 0xe0, 0x3c, 0x47, 0xb9, 0xb2, 0x8c, 0x9b, + 0xb0, 0x18, 0x94, 0x22, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, + 0x57, 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, + 0x83, 0x45, 0x2a, 0x6d, 0xd2, 0x3e, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, + 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xef, 0xb5, 0x27, 0x77, 0x53, 0xcf, + 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, + 0x0c, 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x10, 0x92, 0x59, 0x7c, 0x5b, 0xc5, 0xa4, + 0xa7, 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, + 0x9d, 0xc2, 0x05, 0xbc, 0x56, 0xdb, 0x35, 0xd4, 0x5a, 0x45, 0xdd, 0x80, 0xa0, 0xdf, 0xf0, 0x93, + 0xe8, 0xbe, 0xa5, 0x68, 0x5c, 0x79, 0x17, 0x96, 0x2a, 0x43, 0x8c, 0x45, 0x68, 0x1c, 0xb2, 0xfb, + 0x62, 0x1d, 0xfc, 0x4f, 0xe3, 0x05, 0x68, 0x1e, 0xdb, 0x5e, 0xca, 0x04, 0xfa, 0x2b, 0x35, 0x16, + 0x08, 0x9b, 0x2d, 0x1a, 0xf8, 0x8a, 0xfe, 0x65, 0xcd, 0x7c, 0x3a, 0x5f, 0x98, 0xbc, 0x46, 0x4d, + 0x59, 0xa3, 0xf9, 0x16, 0x74, 0xb6, 0xe3, 0xc1, 0x96, 0x9d, 0xd8, 0x38, 0xf0, 0x35, 0xe8, 0x0c, + 0x0b, 0x12, 0x07, 0xd7, 0xcf, 0x27, 0x84, 0x2c, 0x79, 0xb8, 0xf9, 0x67, 0x1d, 0xba, 0xf5, 0xae, + 0x88, 0x43, 0x6e, 0x03, 0x8b, 0xa2, 0xcd, 0xc0, 0x61, 0xb8, 0xb4, 0xa6, 0x95, 0x91, 0x1c, 0x3b, + 0x16, 0x45, 0xbc, 0x86, 0x89, 0x26, 0x9b, 0x28, 0xe3, 0x12, 0x4c, 0x79, 0x19, 0x2c, 0x27, 0x5b, + 0x81, 0xe3, 0x8c, 0x21, 0x2c, 0xa2, 0x77, 0xa5, 0x05, 0x09, 0xcc, 0xd6, 0xc7, 0xc6, 0x2c, 0x0e, + 0x09, 0x34, 0x49, 0x07, 0x01, 0x57, 0x51, 0xbd, 0xd2, 0x87, 0x27, 0x6a, 0x87, 0xd6, 0x00, 0xf8, + 0x25, 0x15, 0xc0, 0x8b, 0xa3, 0x97, 0x52, 0x06, 0x71, 0x07, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, + 0xad, 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xcf, 0xf3, 0x1c, + 0xa6, 0xb6, 0x25, 0xb3, 0x46, 0x7d, 0xb5, 0x9b, 0x97, 0x61, 0x56, 0x56, 0x86, 0x25, 0xc2, 0xbe, + 0xd7, 0x63, 0x47, 0x68, 0xee, 0x9c, 0x25, 0x28, 0xe4, 0xe3, 0x08, 0xd1, 0xf9, 0x0b, 0xca, 0xfc, + 0x89, 0x0e, 0xe7, 0x2a, 0x06, 0xc5, 0xe1, 0x83, 0xea, 0x31, 0x0e, 0x61, 0x89, 0x1c, 0x2a, 0x29, + 0x12, 0x40, 0xbf, 0x5e, 0xd7, 0x56, 0x57, 0xa7, 0x14, 0x38, 0x49, 0x5c, 0x02, 0xaa, 0xaa, 0x77, + 0x85, 0xc1, 0x72, 0xfd, 0xe0, 0x1a, 0xa8, 0x5e, 0x56, 0xa1, 0xfa, 0x74, 0x1d, 0x54, 0xb2, 0x25, + 0x12, 0x56, 0x47, 0xb0, 0xc0, 0x13, 0x60, 0x8f, 0xf9, 0xce, 0x76, 0x3c, 0x40, 0xb7, 0xac, 0x42, + 0x87, 0xe4, 0xb7, 0xe3, 0x41, 0xf1, 0x99, 0x25, 0xb1, 0xf8, 0x88, 0xbe, 0xe7, 0xf2, 0x44, 0x87, + 0x23, 0x44, 0x82, 0x92, 0x58, 0xbc, 0x98, 0xc5, 0x4c, 0x9c, 0x3a, 0xf0, 0x2a, 0xd7, 0xb0, 0x72, + 0xda, 0xfc, 0x7b, 0x13, 0xa6, 0x45, 0xe4, 0x60, 0x01, 0xe3, 0x5f, 0xb6, 0x79, 0x0a, 0x24, 0x8a, + 0x7a, 0xd0, 0xfe, 0x71, 0x11, 0x0a, 0x44, 0xc9, 0x47, 0x3e, 0x0d, 0xf5, 0xc8, 0xa7, 0x64, 0xd3, + 0x54, 0xd5, 0xa6, 0xd2, 0xba, 0x9a, 0xd5, 0x75, 0xf1, 0x96, 0x0b, 0xbb, 0x90, 0x5d, 0xcf, 0x4e, + 0xf6, 0x83, 0x68, 0x28, 0x3e, 0x54, 0x9b, 0x56, 0x85, 0xcf, 0xdb, 0x3c, 0xe2, 0xe5, 0x7d, 0x3a, + 0x95, 0xdb, 0x12, 0x97, 0x77, 0xc5, 0xc4, 0xc9, 0xfa, 0x75, 0x3a, 0x21, 0x50, 0x99, 0x64, 0x5b, + 0x1c, 0xbb, 0x81, 0x8f, 0x1d, 0x23, 0xb5, 0xe5, 0x32, 0x8b, 0xaf, 0x7c, 0x18, 0x0f, 0xae, 0x44, + 0xc1, 0x50, 0x9c, 0x13, 0x64, 0x24, 0xae, 0x3c, 0xf0, 0x93, 0xac, 0xdb, 0xec, 0x90, 0xac, 0xc4, + 0xe2, 0xb2, 0x82, 0xc4, 0x9e, 0x7c, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0x8d, 0x36, + 0xff, 0x53, 0x41, 0x6e, 0x41, 0x45, 0xae, 0xd4, 0x39, 0x2d, 0xe2, 0xaf, 0x72, 0xe7, 0x54, 0xb4, + 0x23, 0x4b, 0x4a, 0x3b, 0xb2, 0x0e, 0xd3, 0x41, 0xc8, 0x4b, 0x57, 0xdc, 0x35, 0x70, 0xbb, 0x7c, + 0x76, 0x74, 0x32, 0xb9, 0x74, 0x93, 0x46, 0xd2, 0xc6, 0xc8, 0xe4, 0x8c, 0x1b, 0xb0, 0x10, 0xec, + 0xef, 0x7b, 0xae, 0xcf, 0x76, 0xd3, 0xf8, 0x00, 0x3f, 0x68, 0xcf, 0x61, 0xb0, 0x9b, 0x75, 0x05, + 0x5f, 0x1d, 0x69, 0x95, 0x45, 0x79, 0x97, 0x66, 0x27, 0xf4, 0x41, 0x82, 0xc9, 0xe8, 0x3c, 0x26, + 0x23, 0x85, 0xb7, 0xf2, 0x0a, 0xcc, 0xca, 0xa6, 0xd4, 0x6c, 0xbb, 0xf3, 0xf2, 0xb6, 0x9b, 0x91, + 0x77, 0xd5, 0x8f, 0x34, 0x58, 0x28, 0x19, 0xc1, 0x47, 0x27, 0x6e, 0xe2, 0x31, 0xa1, 0x81, 0x08, + 0xfe, 0xcd, 0xe1, 0xb0, 0xb8, 0x2f, 0xc2, 0x1c, 0xff, 0x16, 0xdd, 0x5b, 0x23, 0x3f, 0x49, 0x32, + 0x61, 0xd6, 0xbd, 0xd9, 0xe3, 0x8a, 0x7a, 0x41, 0xea, 0x3b, 0xf9, 0x69, 0xb0, 0xc4, 0xe3, 0x61, + 0xe6, 0xde, 0xec, 0x6d, 0xd8, 0xce, 0x80, 0xd1, 0x99, 0x6d, 0x13, 0x6d, 0x52, 0x99, 0xa6, 0x03, + 0x33, 0xb7, 0xdc, 0x30, 0xde, 0x0c, 0x86, 0x43, 0x0e, 0x96, 0xc3, 0x12, 0xde, 0x1d, 0x6b, 0x18, + 0x13, 0x82, 0xe2, 0xe1, 0xe4, 0xb0, 0x7d, 0x3b, 0xf5, 0x12, 0x3e, 0x34, 0xdb, 0xdc, 0x12, 0x0b, + 0x4f, 0x2b, 0xe3, 0xc0, 0xdf, 0x22, 0x69, 0xb2, 0x53, 0xe2, 0x98, 0x7f, 0xd2, 0x61, 0x11, 0x73, + 0xd7, 0x26, 0x86, 0x86, 0x83, 0x42, 0x2f, 0x42, 0x13, 0xb7, 0xaa, 0xe8, 0xd3, 0x4e, 0x3e, 0x87, + 0xa0, 0xa1, 0xc6, 0x65, 0x68, 0x05, 0x21, 0x36, 0x77, 0x94, 0xd8, 0x9e, 0x19, 0x25, 0xa4, 0x1e, + 0x0c, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0x7a, 0x39, 0xca, 0xd4, 0xe3, 0xea, 0x90, 0x24, + 0xb9, 0x73, 0xf3, 0xee, 0x2b, 0x3f, 0x1d, 0x6e, 0x58, 0x2a, 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, + 0x66, 0x76, 0x20, 0x85, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, 0xfc, 0xb9, 0x26, 0xdc, 0xc8, 0x7f, + 0xed, 0x31, 0xf2, 0x7d, 0xe1, 0x12, 0x6d, 0x22, 0x97, 0xac, 0xc0, 0xcc, 0x30, 0x95, 0xce, 0xc7, + 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, + 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x57, 0x18, 0x13, 0x63, 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, + 0x4f, 0x04, 0xec, 0x63, 0x9c, 0x79, 0x15, 0x32, 0xd2, 0xf1, 0x45, 0x43, 0x3e, 0xbe, 0x30, 0x3f, + 0xd0, 0x60, 0x9e, 0x9c, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, + 0x4c, 0x10, 0x95, 0xb9, 0x5c, 0x35, 0x9e, 0x1a, 0x35, 0xf1, 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0xb2, + 0x5b, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x2d, 0xa5, 0x1c, 0xdf, 0x4c, 0x95, 0x8e, 0x6f, 0x6a, + 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, 0x0e, 0x9f, 0xbc, 0x9a, 0x6f, 0xbc, + 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, + 0x9b, 0xc4, 0x76, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0x5e, 0xee, 0x32, 0xff, 0xa3, 0xc1, 0x22, 0xe9, + 0x79, 0xcb, 0xed, 0x1f, 0x3e, 0xc4, 0xc5, 0xef, 0xc0, 0xfc, 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xd2, + 0x76, 0x49, 0x7a, 0xcc, 0xe5, 0xff, 0x57, 0x83, 0x25, 0x52, 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, + 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0xe8, 0x80, 0xb2, 0xf8, 0x98, 0x1e, 0xf8, 0xad, 0x06, + 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xeb, 0xbf, 0x06, 0x1d, 0xe6, 0x27, 0x91, 0xed, + 0x4f, 0x92, 0x21, 0x65, 0xd1, 0x31, 0x93, 0xe4, 0x07, 0x1a, 0x18, 0xa8, 0x6a, 0xcb, 0x8d, 0x87, + 0x6e, 0x1c, 0x3f, 0x44, 0xe8, 0xc6, 0x33, 0xf8, 0xa7, 0x3a, 0x9c, 0x97, 0xb4, 0x6c, 0xa7, 0xc9, + 0xa3, 0x6e, 0xb2, 0xb1, 0x05, 0x6d, 0xde, 0x23, 0xc8, 0xf7, 0x82, 0xe3, 0x4e, 0x54, 0x08, 0xf2, + 0x2e, 0x16, 0x89, 0x1e, 0xeb, 0x07, 0xbe, 0x13, 0x63, 0x73, 0x34, 0x67, 0x29, 0x3c, 0x9e, 0x86, + 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0xd3, + 0x90, 0x47, 0x7f, 0xc9, 0xbc, 0xd6, 0x53, 0x20, 0x7f, 0x6c, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, + 0x91, 0xfb, 0xea, 0x47, 0x37, 0xb4, 0xae, 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, + 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x0a, 0xdf, 0xa4, 0x9f, 0x70, 0xf9, 0x2f, 0x95, 0x96, 0x72, + 0xe2, 0xbd, 0xff, 0x83, 0x39, 0xfd, 0x10, 0x96, 0xe8, 0xfe, 0x55, 0xea, 0x09, 0x8d, 0x2e, 0x4c, + 0xdb, 0x0e, 0x1d, 0x32, 0x68, 0x28, 0x94, 0x91, 0xea, 0xcd, 0xba, 0x78, 0x3c, 0x55, 0xdc, 0xac, + 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, + 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x26, 0xf5, 0xc4, 0xbb, 0x5e, 0xf9, 0x16, 0x56, 0x57, + 0x6f, 0x61, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x41, 0x9c, 0x4d, 0x22, + 0x42, 0xa6, 0xee, 0xd4, 0x4d, 0xb6, 0xc5, 0x52, 0x84, 0xcc, 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, + 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, + 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, + 0x97, 0xa1, 0x45, 0x8f, 0x4b, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, 0x98, 0x3d, 0x8a, 0xb1, 0xc4, 0xe0, + 0x6a, 0x44, 0xea, 0x75, 0x3b, 0xea, 0x2b, 0x79, 0xb0, 0x8f, 0xfd, 0xfc, 0x43, 0x08, 0x98, 0x5f, + 0xcf, 0x82, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x7d, 0x64, 0xde, 0x86, 0x79, 0x7c, 0xe9, 0x52, 0xf8, + 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, 0xcd, 0x77, 0x07, 0xf7, 0x8f, 0x9c, + 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, + 0x31, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0x57, 0x7a, 0x28, 0x92, 0x49, + 0x28, 0x9b, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, + 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, + 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xea, 0x06, + 0xa7, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0x7c, 0x92, 0x9c, 0x1e, 0xf9, 0x7c, 0x71, 0xe4, 0xb5, 0x9f, + 0xd9, 0x83, 0x25, 0xf1, 0xbc, 0x65, 0xd7, 0x1e, 0xb8, 0x3e, 0x25, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, + 0xc8, 0x9e, 0xb7, 0xd1, 0x05, 0x96, 0xc4, 0xe1, 0xbf, 0xc7, 0x07, 0xc1, 0x5d, 0xf1, 0xbb, 0x4e, + 0xbf, 0x17, 0x1c, 0xf3, 0x6b, 0x60, 0x58, 0x2c, 0x0e, 0x03, 0x3f, 0x66, 0x92, 0xd6, 0x55, 0xe8, + 0x6c, 0xa6, 0x51, 0xc4, 0x7c, 0x3e, 0x55, 0xf6, 0xd6, 0x4b, 0x66, 0x71, 0xbd, 0xbd, 0x42, 0x2f, + 0x1d, 0xa0, 0x4b, 0x1c, 0xf3, 0x67, 0x0d, 0x68, 0xf7, 0xdc, 0x81, 0x6f, 0x7b, 0x16, 0x3b, 0x32, + 0x5e, 0x83, 0x16, 0x7d, 0xb2, 0x88, 0x48, 0xa9, 0x3b, 0xd0, 0xa5, 0xd1, 0xf4, 0x6d, 0x66, 0xb1, + 0xa3, 0x6b, 0x9f, 0xb0, 0x84, 0x8c, 0xf1, 0x36, 0xcc, 0xd1, 0x5f, 0xd7, 0xe9, 0x08, 0x4a, 0xd4, + 0xaf, 0xcf, 0x9d, 0xa2, 0x44, 0x8c, 0x26, 0x5d, 0xaa, 0x06, 0x6e, 0x50, 0x1f, 0x5b, 0x1a, 0x91, + 0x1e, 0x46, 0x1b, 0x44, 0x9d, 0x8f, 0x30, 0x88, 0x64, 0xb8, 0xb4, 0x8d, 0x87, 0x34, 0xa2, 0x52, + 0x8f, 0x96, 0xa6, 0xb3, 0x1c, 0x21, 0x4d, 0x32, 0x5c, 0xfa, 0x20, 0xf5, 0x07, 0xb7, 0x43, 0x71, + 0x76, 0x38, 0x5a, 0xfa, 0x1a, 0x0e, 0x13, 0xd2, 0x24, 0xc3, 0xa5, 0x23, 0x4c, 0xde, 0xe8, 0xf4, + 0x93, 0xa4, 0x29, 0xc7, 0x0b, 0x69, 0x92, 0xd9, 0x68, 0xc3, 0x74, 0x68, 0xdf, 0xf7, 0x02, 0xdb, + 0x31, 0xdf, 0x6f, 0x00, 0x64, 0x03, 0x63, 0x6c, 0x74, 0x14, 0x88, 0xd6, 0x4e, 0x85, 0x28, 0xf4, + 0xee, 0x4b, 0x20, 0xf5, 0xea, 0x41, 0xfa, 0xfc, 0xb8, 0x20, 0x91, 0xb6, 0x12, 0x4c, 0x97, 0x4b, + 0x30, 0xad, 0x9d, 0x0a, 0x93, 0x30, 0x4a, 0x00, 0x75, 0xb9, 0x04, 0xd4, 0xda, 0xa9, 0x40, 0x09, + 0x79, 0x01, 0xd5, 0xe5, 0x12, 0x54, 0x6b, 0xa7, 0x42, 0x25, 0xe4, 0x05, 0x58, 0x97, 0x4b, 0x60, + 0xad, 0x9d, 0x0a, 0x96, 0x90, 0xaf, 0xc2, 0xf5, 0xa1, 0x0e, 0xf3, 0xe8, 0x32, 0x7a, 0x1f, 0xe0, + 0xef, 0x07, 0x78, 0x1f, 0x80, 0xee, 0x52, 0x5f, 0x4b, 0xaa, 0x4c, 0xe3, 0x0b, 0xb0, 0x44, 0x0c, + 0x26, 0x5d, 0x86, 0xe8, 0x78, 0x19, 0x52, 0xfd, 0x01, 0xaf, 0x7f, 0xd2, 0x38, 0x09, 0x86, 0x5b, + 0x76, 0x62, 0x67, 0xcd, 0x57, 0xc1, 0x91, 0x2f, 0xe7, 0xa6, 0x2a, 0xef, 0xb1, 0xa3, 0x20, 0x18, + 0xe6, 0xb7, 0x6e, 0x82, 0xe2, 0x12, 0x89, 0x3b, 0x64, 0x41, 0x9a, 0x88, 0x34, 0x91, 0x91, 0xf4, + 0xa2, 0xc9, 0x71, 0x6d, 0xbc, 0xd2, 0x12, 0xcf, 0x7d, 0x72, 0x06, 0x66, 0xb6, 0xe2, 0x8a, 0x4e, + 0xbc, 0x97, 0x2e, 0x38, 0xa7, 0x5f, 0xa7, 0x99, 0xff, 0xd0, 0xe0, 0xdc, 0xae, 0x1d, 0x25, 0x6e, + 0xdf, 0x0d, 0x6d, 0x3f, 0xd9, 0x66, 0x89, 0x8d, 0x6b, 0x50, 0x9e, 0x4c, 0x6a, 0x0f, 0xf6, 0x64, + 0x72, 0x17, 0x16, 0x06, 0xea, 0xd7, 0xc5, 0x03, 0x7e, 0x18, 0x94, 0xc5, 0x95, 0xf7, 0x9f, 0x8d, + 0x07, 0x7e, 0xff, 0x69, 0xfe, 0x40, 0x87, 0x85, 0x52, 0xea, 0x3c, 0xb1, 0xee, 0xac, 0x03, 0xb8, + 0x79, 0x18, 0x9d, 0x70, 0xf8, 0xae, 0xc6, 0x9a, 0x25, 0x09, 0xd5, 0xdd, 0xd3, 0x35, 0x26, 0xbf, + 0xa7, 0xbb, 0x06, 0x9d, 0xb0, 0x00, 0xe9, 0x84, 0x6f, 0x9f, 0x1a, 0x28, 0x2d, 0x59, 0xd4, 0x7c, + 0x17, 0x96, 0x2a, 0x19, 0x0a, 0xaf, 0xe4, 0x82, 0x43, 0xe6, 0xe7, 0x57, 0x72, 0x9c, 0x90, 0x82, + 0x55, 0x2f, 0x07, 0xab, 0xe7, 0x1e, 0xcb, 0x0f, 0xcc, 0x05, 0x69, 0xfe, 0x50, 0x87, 0xe5, 0xfa, + 0xea, 0xf2, 0xb8, 0xba, 0x7b, 0x0f, 0xba, 0xa3, 0x32, 0xf9, 0x99, 0x79, 0xbd, 0x88, 0xee, 0xbc, + 0x0e, 0x3f, 0xae, 0xee, 0x3e, 0x97, 0x45, 0xb7, 0x54, 0xea, 0xcc, 0xdf, 0xe4, 0xfe, 0xc9, 0x3b, + 0x8d, 0xc7, 0xd4, 0x3f, 0xc6, 0x73, 0xb0, 0x48, 0xcb, 0x94, 0x1e, 0x76, 0x50, 0xe3, 0x5a, 0xe1, + 0x17, 0x99, 0x42, 0x2a, 0xfb, 0x67, 0x16, 0xb3, 0x7f, 0xd0, 0x32, 0x4c, 0xf2, 0xfe, 0xed, 0x63, + 0x85, 0x49, 0x11, 0x69, 0x52, 0x53, 0x23, 0x45, 0x5a, 0xde, 0x57, 0xfe, 0x3f, 0xd2, 0x4e, 0x8f, + 0xb4, 0xdc, 0x97, 0x52, 0x83, 0x67, 0x7e, 0x07, 0xe6, 0xb6, 0x98, 0xb7, 0x1d, 0x0f, 0xb2, 0x57, + 0xa2, 0x67, 0xfa, 0xa1, 0x58, 0x7e, 0x5b, 0x3a, 0x55, 0x79, 0x5b, 0x6a, 0x6e, 0xc0, 0xbc, 0x6c, + 0xc0, 0x24, 0xaf, 0x20, 0x37, 0x2e, 0x7c, 0x63, 0xe5, 0xd2, 0xf3, 0xf4, 0x1f, 0x95, 0xaf, 0x56, + 0x9c, 0xb8, 0xd7, 0xc2, 0xff, 0xb0, 0x7c, 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x96, + 0xc4, 0xbf, 0x74, 0x39, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 8d9e04fc5..43112b919 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -170,30 +170,51 @@ message UserInDepartment { ///////////////////////////////////base end///////////////////////////////////// +message PullMessageBySeqListReq{ + string userID = 1; + string operationID = 2; + repeated uint32 seqList = 3; + map groupSeqList = 4; +} + +message seqList { + repeated uint32 seqList = 1; +} + + +message MsgDataList { + repeated MsgData msgDataList = 1; +} message PullMessageBySeqListResp { int32 errCode = 1; string errMsg = 2; repeated MsgData list = 3; + map groupMsgDataList = 4; } -message PullMessageBySeqListReq{ - string userID = 1; - string operationID = 2; - repeated uint32 seqList = 3; -} + + + message GetMaxAndMinSeqReq { + repeated string groupIDList = 1; + string userID = 2; +} +message MaxAndMinSeq{ + uint32 maxSeq = 1; + uint32 minSeq = 2; } message GetMaxAndMinSeqResp { uint32 maxSeq = 1; uint32 minSeq = 2; + map groupMaxAndMinSeq = 3; } message UserSendMsgResp { string serverMsgID = 1; string clientMsgID = 2; int64 sendTime = 3; - } + message MsgData { string sendID = 1; string recvID = 2; From e9bf26e0caa7ce9856665d516df7c9d0fe645b1e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 28 May 2022 17:22:19 +0800 Subject: [PATCH 263/752] pb file --- pkg/proto/chat/chat.pb.go | 96 +++---- pkg/proto/chat/chat.proto | 2 +- pkg/proto/sdk_ws/ws.pb.go | 585 ++++++++++++++++++++------------------ pkg/proto/sdk_ws/ws.proto | 5 +- 4 files changed, 358 insertions(+), 330 deletions(-) diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index cf1c6ba50..092fff9ca 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -37,7 +37,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{0} + return fileDescriptor_chat_732204f30d7bcb33, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{1} + return fileDescriptor_chat_732204f30d7bcb33, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{2} + return fileDescriptor_chat_732204f30d7bcb33, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -210,7 +210,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{3} + return fileDescriptor_chat_732204f30d7bcb33, []int{3} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -258,7 +258,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{4} + return fileDescriptor_chat_732204f30d7bcb33, []int{4} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -319,7 +319,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{5} + return fileDescriptor_chat_732204f30d7bcb33, []int{5} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{6} + return fileDescriptor_chat_732204f30d7bcb33, []int{6} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -451,7 +451,7 @@ const _ = grpc.SupportPackageIsVersion4 // Client API for Chat service type ChatClient interface { - GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*GetMaxAndMinSeqResp, error) + GetMaxAndMinSeq(ctx context.Context, in *sdk_ws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdk_ws.GetMaxAndMinSeqResp, error) PullMessageBySeqList(ctx context.Context, in *sdk_ws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, opts ...grpc.CallOption) (*sdk_ws.DelMsgListResp, error) @@ -465,8 +465,8 @@ func NewChatClient(cc *grpc.ClientConn) ChatClient { return &chatClient{cc} } -func (c *chatClient) GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*GetMaxAndMinSeqResp, error) { - out := new(GetMaxAndMinSeqResp) +func (c *chatClient) GetMaxAndMinSeq(ctx context.Context, in *sdk_ws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdk_ws.GetMaxAndMinSeqResp, error) { + out := new(sdk_ws.GetMaxAndMinSeqResp) err := grpc.Invoke(ctx, "/pbChat.Chat/GetMaxAndMinSeq", in, out, c.cc, opts...) if err != nil { return nil, err @@ -504,7 +504,7 @@ func (c *chatClient) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, o // Server API for Chat service type ChatServer interface { - GetMaxAndMinSeq(context.Context, *GetMaxAndMinSeqReq) (*GetMaxAndMinSeqResp, error) + GetMaxAndMinSeq(context.Context, *sdk_ws.GetMaxAndMinSeqReq) (*sdk_ws.GetMaxAndMinSeqResp, error) PullMessageBySeqList(context.Context, *sdk_ws.PullMessageBySeqListReq) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error) DelMsgList(context.Context, *sdk_ws.DelMsgListReq) (*sdk_ws.DelMsgListResp, error) @@ -515,7 +515,7 @@ func RegisterChatServer(s *grpc.Server, srv ChatServer) { } func _Chat_GetMaxAndMinSeq_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMaxAndMinSeqReq) + in := new(sdk_ws.GetMaxAndMinSeqReq) if err := dec(in); err != nil { return nil, err } @@ -527,7 +527,7 @@ func _Chat_GetMaxAndMinSeq_Handler(srv interface{}, ctx context.Context, dec fun FullMethod: "/pbChat.Chat/GetMaxAndMinSeq", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ChatServer).GetMaxAndMinSeq(ctx, req.(*GetMaxAndMinSeqReq)) + return srv.(ChatServer).GetMaxAndMinSeq(ctx, req.(*sdk_ws.GetMaxAndMinSeqReq)) } return interceptor(ctx, in, info, handler) } @@ -611,40 +611,40 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_83f286704599d5b1) } +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_732204f30d7bcb33) } -var fileDescriptor_chat_83f286704599d5b1 = []byte{ - // 507 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcd, 0x6e, 0xda, 0x40, - 0x10, 0x96, 0x49, 0x80, 0x32, 0x34, 0x42, 0xda, 0x44, 0x95, 0xe5, 0x5e, 0x1c, 0x9f, 0x50, 0x2b, - 0x19, 0x89, 0xf6, 0xd6, 0x53, 0x89, 0xa3, 0x8a, 0xaa, 0xdb, 0x24, 0x86, 0x5e, 0x7a, 0x41, 0x9b, - 0x30, 0x32, 0x16, 0x60, 0x2f, 0x3b, 0xa6, 0xa4, 0xed, 0x33, 0xf4, 0x19, 0xfa, 0x3e, 0x7d, 0xaa, - 0xca, 0xbb, 0x26, 0x98, 0x40, 0x15, 0x4e, 0xbd, 0x58, 0x9a, 0x6f, 0x3e, 0x7f, 0x3f, 0xeb, 0x1f, - 0x68, 0xdd, 0x4d, 0x44, 0xd6, 0xc9, 0x2f, 0xbe, 0x54, 0x69, 0x96, 0xb2, 0x9a, 0xbc, 0xbd, 0x98, - 0x88, 0xcc, 0x39, 0xbf, 0x92, 0x98, 0x8c, 0xfa, 0xbc, 0x23, 0xa7, 0x51, 0x47, 0xaf, 0x3a, 0x34, - 0x9e, 0x8e, 0x56, 0xd4, 0x59, 0x91, 0xa1, 0x7a, 0x3f, 0xa1, 0xc9, 0x29, 0x0a, 0x44, 0x26, 0x86, - 0x29, 0xbf, 0x61, 0x67, 0x50, 0xcd, 0xd2, 0x29, 0x26, 0xb6, 0xe5, 0x5a, 0xed, 0x46, 0x68, 0x06, - 0xe6, 0x42, 0x33, 0x95, 0xa8, 0x44, 0x16, 0xa7, 0x49, 0x3f, 0xb0, 0x2b, 0x7a, 0x57, 0x86, 0xd8, - 0x5b, 0xa8, 0xcf, 0x8d, 0x8c, 0x7d, 0xe4, 0x5a, 0xed, 0x66, 0xd7, 0xf1, 0x09, 0xd5, 0x37, 0x54, - 0x23, 0x21, 0xe3, 0x91, 0x14, 0x4a, 0xcc, 0xc9, 0x2f, 0x8c, 0xc2, 0x35, 0xd5, 0xc3, 0x92, 0x79, - 0xd0, 0x2b, 0x8b, 0x58, 0x07, 0x8b, 0x3c, 0x1d, 0xce, 0xfb, 0x65, 0x41, 0xeb, 0x7a, 0x49, 0x93, - 0x72, 0x51, 0x17, 0x9a, 0x57, 0xa5, 0xbb, 0x4c, 0xdd, 0x32, 0x54, 0x4e, 0x53, 0x39, 0x3c, 0x8d, - 0x07, 0xcf, 0xe5, 0x92, 0x26, 0xc3, 0xf4, 0x0b, 0xa1, 0xea, 0x07, 0xfa, 0x34, 0x1a, 0xe1, 0x16, - 0xe6, 0x7d, 0x06, 0xf6, 0x01, 0x33, 0x2e, 0xee, 0xdf, 0x27, 0x63, 0x1e, 0x27, 0x03, 0x5c, 0x84, - 0xb8, 0x60, 0x2f, 0xa0, 0x56, 0xdc, 0x63, 0xc2, 0x14, 0xd3, 0xe3, 0xa4, 0x95, 0x9d, 0xa4, 0xde, - 0x0a, 0x4e, 0x77, 0xf4, 0x48, 0x32, 0x1b, 0xea, 0x97, 0x4a, 0x5d, 0xa4, 0x63, 0xd4, 0x8a, 0xd5, - 0x70, 0x3d, 0xe6, 0x56, 0x97, 0x4a, 0x71, 0x8a, 0x0a, 0xb5, 0x62, 0xca, 0x71, 0x2e, 0xee, 0x07, - 0xb8, 0xd0, 0xb1, 0x4f, 0xc2, 0x62, 0xd2, 0xb8, 0xd6, 0xb5, 0x8f, 0x0b, 0x5c, 0x4f, 0xde, 0x0f, - 0x80, 0x01, 0x26, 0x63, 0x4e, 0x51, 0x5e, 0xe0, 0xff, 0xbe, 0x3b, 0xbf, 0x2d, 0x68, 0x3e, 0x98, - 0x9b, 0xb6, 0xb8, 0xdd, 0x16, 0x37, 0x6d, 0x71, 0xab, 0xad, 0x99, 0xf2, 0x64, 0xc6, 0x87, 0x53, - 0xd4, 0x0f, 0x74, 0xb5, 0x46, 0x58, 0x86, 0x72, 0xc6, 0xdd, 0x2c, 0xc6, 0x24, 0x33, 0x8c, 0xaa, - 0x61, 0x94, 0x20, 0xe6, 0xc0, 0x33, 0xc2, 0x64, 0x3c, 0x8c, 0xe7, 0x68, 0xd7, 0x5c, 0xab, 0x7d, - 0x14, 0x3e, 0xcc, 0xdd, 0x3f, 0x15, 0x38, 0xce, 0x3f, 0x43, 0xf6, 0x11, 0x5a, 0x8f, 0x9e, 0x0f, - 0x73, 0x7c, 0xf3, 0x89, 0xfa, 0xbb, 0x2f, 0x82, 0xf3, 0xf2, 0x9f, 0x3b, 0x92, 0x2c, 0x85, 0xb3, - 0xeb, 0xe5, 0x6c, 0xc6, 0x91, 0x48, 0x44, 0xd8, 0xfb, 0x3e, 0xc0, 0xc5, 0xa7, 0x98, 0x32, 0xf6, - 0x6a, 0xcf, 0x99, 0xed, 0x23, 0xe6, 0x06, 0xaf, 0x0f, 0xe6, 0x92, 0x64, 0x5d, 0xa8, 0x17, 0xc7, - 0xcc, 0xd8, 0x3a, 0xd8, 0xe6, 0xa1, 0x3b, 0xa7, 0x3b, 0x18, 0x49, 0x76, 0x03, 0x10, 0xe0, 0x8c, - 0x53, 0xa4, 0xa3, 0xb9, 0x7b, 0xec, 0x36, 0xeb, 0x5c, 0xe4, 0xfc, 0x09, 0x06, 0xc9, 0x5e, 0xeb, - 0xeb, 0x89, 0xaf, 0x7f, 0x71, 0xef, 0x8c, 0xdf, 0x6d, 0x4d, 0xff, 0xbf, 0xde, 0xfc, 0x0d, 0x00, - 0x00, 0xff, 0xff, 0x6f, 0x9d, 0x6f, 0xa0, 0xfd, 0x04, 0x00, 0x00, +var fileDescriptor_chat_732204f30d7bcb33 = []byte{ + // 508 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xdd, 0x6e, 0xda, 0x30, + 0x14, 0x56, 0x68, 0x0b, 0xe3, 0xb0, 0x0a, 0xc9, 0xad, 0xa6, 0x88, 0xab, 0x34, 0xd2, 0x26, 0xb4, + 0x49, 0x89, 0xc4, 0x76, 0xb7, 0xab, 0xd1, 0x54, 0x13, 0xd2, 0xbc, 0xb6, 0x81, 0xdd, 0xec, 0x86, + 0xb9, 0xcd, 0x51, 0x88, 0x80, 0xc4, 0xf8, 0x84, 0xd1, 0x6d, 0xcf, 0xb0, 0x67, 0xd8, 0xab, 0xed, + 0x51, 0xa6, 0xd8, 0x69, 0x09, 0x05, 0xa9, 0x5c, 0xed, 0x06, 0xe9, 0x7c, 0xfe, 0xfc, 0xfd, 0x18, + 0xc7, 0xd0, 0xbe, 0x9d, 0x88, 0xdc, 0x2f, 0x7e, 0x3c, 0xa9, 0xb2, 0x3c, 0x63, 0x75, 0x79, 0x73, + 0x3e, 0x11, 0x79, 0xe7, 0xec, 0x52, 0x62, 0x3a, 0x1e, 0x70, 0x5f, 0x4e, 0x63, 0x5f, 0x2f, 0xf9, + 0x14, 0x4d, 0xc7, 0x2b, 0xf2, 0x57, 0x64, 0xa8, 0xee, 0x2f, 0x68, 0x71, 0x8a, 0x03, 0x91, 0x8b, + 0x51, 0xc6, 0xaf, 0xd9, 0x29, 0x1c, 0xe5, 0xd9, 0x14, 0x53, 0xdb, 0x72, 0xac, 0x6e, 0x33, 0x34, + 0x03, 0x73, 0xa0, 0x95, 0x49, 0x54, 0x22, 0x4f, 0xb2, 0x74, 0x10, 0xd8, 0x35, 0xbd, 0x56, 0x85, + 0xd8, 0x3b, 0x68, 0xcc, 0x8d, 0x8c, 0x7d, 0xe0, 0x58, 0xdd, 0x56, 0xaf, 0xe3, 0x11, 0xaa, 0xef, + 0xa8, 0xc6, 0x42, 0x26, 0x63, 0x29, 0x94, 0x98, 0x93, 0x57, 0x1a, 0x85, 0xf7, 0x54, 0x17, 0x2b, + 0xe6, 0x41, 0xbf, 0x2a, 0x62, 0xed, 0x2d, 0xf2, 0x74, 0x38, 0xf7, 0xb7, 0x05, 0xed, 0xab, 0x25, + 0x4d, 0xaa, 0x45, 0x1d, 0x68, 0x5d, 0x56, 0x76, 0x99, 0xba, 0x55, 0xa8, 0x9a, 0xa6, 0xb6, 0x7f, + 0x1a, 0x17, 0x9e, 0xcb, 0x25, 0x4d, 0x46, 0xd9, 0x17, 0x42, 0x35, 0x08, 0xf4, 0x69, 0x34, 0xc3, + 0x0d, 0xcc, 0xfd, 0x0c, 0xec, 0x23, 0xe6, 0x5c, 0xdc, 0x7d, 0x48, 0x23, 0x9e, 0xa4, 0x43, 0x5c, + 0x84, 0xb8, 0x60, 0x2f, 0xa0, 0x5e, 0xee, 0x31, 0x61, 0xca, 0xe9, 0x71, 0xd2, 0xda, 0x56, 0x52, + 0x77, 0x05, 0x27, 0x5b, 0x7a, 0x24, 0x99, 0x0d, 0x8d, 0x0b, 0xa5, 0xce, 0xb3, 0x08, 0xb5, 0xe2, + 0x51, 0x78, 0x3f, 0x16, 0x56, 0x17, 0x4a, 0x71, 0x8a, 0x4b, 0xb5, 0x72, 0x2a, 0x70, 0x2e, 0xee, + 0x86, 0xb8, 0xd0, 0xb1, 0x8f, 0xc3, 0x72, 0xd2, 0xb8, 0xd6, 0xb5, 0x0f, 0x4b, 0x5c, 0x4f, 0xee, + 0x4f, 0x80, 0x21, 0xa6, 0x11, 0xa7, 0xb8, 0x28, 0xf0, 0x7f, 0xef, 0xce, 0x1f, 0x0b, 0x5a, 0x0f, + 0xe6, 0xa6, 0x2d, 0x6e, 0xb6, 0xc5, 0x75, 0x5b, 0xdc, 0x68, 0x6b, 0xa6, 0x22, 0x99, 0xf1, 0xe1, + 0x14, 0x0f, 0x02, 0x5d, 0xad, 0x19, 0x56, 0xa1, 0x82, 0x71, 0x3b, 0x4b, 0x30, 0xcd, 0x0d, 0xe3, + 0xc8, 0x30, 0x2a, 0x10, 0xeb, 0xc0, 0x33, 0xc2, 0x34, 0x1a, 0x25, 0x73, 0xb4, 0xeb, 0x8e, 0xd5, + 0x3d, 0x08, 0x1f, 0xe6, 0xde, 0xdf, 0x1a, 0x1c, 0x16, 0x9f, 0x21, 0xfb, 0x06, 0xed, 0x47, 0xff, + 0x0f, 0x7b, 0xb9, 0xa3, 0xe2, 0xf6, 0x9d, 0xe8, 0xbc, 0xda, 0x87, 0x46, 0x92, 0x65, 0x70, 0x7a, + 0xb5, 0x9c, 0xcd, 0x38, 0x12, 0x89, 0x18, 0xfb, 0x3f, 0x86, 0xb8, 0xf8, 0x94, 0x50, 0xce, 0x5e, + 0xef, 0xd8, 0xbf, 0x8b, 0x58, 0x78, 0xbd, 0xd9, 0x9b, 0x4b, 0x92, 0xf5, 0xa0, 0x51, 0x1e, 0x3e, + 0x63, 0x9e, 0x79, 0x6d, 0xbc, 0xf5, 0x55, 0xe8, 0x9c, 0x6c, 0x61, 0x24, 0xd9, 0x35, 0x40, 0x80, + 0x33, 0x4e, 0xb1, 0x8e, 0xe6, 0xec, 0xb0, 0x5b, 0x2f, 0x17, 0x22, 0x67, 0x4f, 0x30, 0x48, 0xf6, + 0xdb, 0x5f, 0x8f, 0x3d, 0xfd, 0xf0, 0xbd, 0x37, 0x7e, 0x37, 0x75, 0xfd, 0xaa, 0xbd, 0xfd, 0x17, + 0x00, 0x00, 0xff, 0xff, 0x9f, 0xc6, 0xef, 0x8e, 0x13, 0x05, 0x00, 0x00, } diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index 146994f01..d30010db2 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -75,7 +75,7 @@ message SendMsgResp { service Chat { - rpc GetMaxAndMinSeq(GetMaxAndMinSeqReq) returns(GetMaxAndMinSeqResp); + rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc SendMsg(SendMsgReq) returns(SendMsgResp); rpc DelMsgList(server_api_params.DelMsgListReq) returns(server_api_params.DelMsgListResp); diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 8ed8e4a1c..6c768fcaa 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{0} + return fileDescriptor_ws_5ad487361de288a1, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{1} + return fileDescriptor_ws_5ad487361de288a1, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{2} + return fileDescriptor_ws_5ad487361de288a1, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{3} + return fileDescriptor_ws_5ad487361de288a1, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{4} + return fileDescriptor_ws_5ad487361de288a1, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{5} + return fileDescriptor_ws_5ad487361de288a1, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{6} + return fileDescriptor_ws_5ad487361de288a1, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{7} + return fileDescriptor_ws_5ad487361de288a1, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{8} + return fileDescriptor_ws_5ad487361de288a1, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{9} + return fileDescriptor_ws_5ad487361de288a1, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{10} + return fileDescriptor_ws_5ad487361de288a1, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{11} + return fileDescriptor_ws_5ad487361de288a1, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{12} + return fileDescriptor_ws_5ad487361de288a1, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1279,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{13} + return fileDescriptor_ws_5ad487361de288a1, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1338,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{14} + return fileDescriptor_ws_5ad487361de288a1, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1376,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{15} + return fileDescriptor_ws_5ad487361de288a1, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1417,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{16} + return fileDescriptor_ws_5ad487361de288a1, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1468,6 +1468,7 @@ func (m *PullMessageBySeqListResp) GetGroupMsgDataList() map[string]*MsgDataList type GetMaxAndMinSeqReq struct { GroupIDList []string `protobuf:"bytes,1,rep,name=groupIDList" json:"groupIDList,omitempty"` UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1477,7 +1478,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{17} + return fileDescriptor_ws_5ad487361de288a1, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1511,6 +1512,13 @@ func (m *GetMaxAndMinSeqReq) GetUserID() string { return "" } +func (m *GetMaxAndMinSeqReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + type MaxAndMinSeq struct { MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` @@ -1523,7 +1531,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{18} + return fileDescriptor_ws_5ad487361de288a1, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1560,7 +1568,9 @@ func (m *MaxAndMinSeq) GetMinSeq() uint32 { type GetMaxAndMinSeqResp struct { MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` - GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,3,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ErrCode int32 `protobuf:"varint,3,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,4,opt,name=errMsg" json:"errMsg,omitempty"` + GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,5,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1570,7 +1580,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{19} + return fileDescriptor_ws_5ad487361de288a1, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1604,6 +1614,20 @@ func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { return 0 } +func (m *GetMaxAndMinSeqResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *GetMaxAndMinSeqResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + func (m *GetMaxAndMinSeqResp) GetGroupMaxAndMinSeq() map[string]*MaxAndMinSeq { if m != nil { return m.GroupMaxAndMinSeq @@ -1624,7 +1648,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{20} + return fileDescriptor_ws_5ad487361de288a1, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1694,7 +1718,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{21} + return fileDescriptor_ws_5ad487361de288a1, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1862,7 +1886,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{22} + return fileDescriptor_ws_5ad487361de288a1, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1930,7 +1954,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{23} + return fileDescriptor_ws_5ad487361de288a1, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1987,7 +2011,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{24} + return fileDescriptor_ws_5ad487361de288a1, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2056,7 +2080,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{25} + return fileDescriptor_ws_5ad487361de288a1, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2111,7 +2135,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{26} + return fileDescriptor_ws_5ad487361de288a1, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2167,7 +2191,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{27} + return fileDescriptor_ws_5ad487361de288a1, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2222,7 +2246,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{28} + return fileDescriptor_ws_5ad487361de288a1, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2277,7 +2301,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{29} + return fileDescriptor_ws_5ad487361de288a1, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2333,7 +2357,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{30} + return fileDescriptor_ws_5ad487361de288a1, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2396,7 +2420,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{31} + return fileDescriptor_ws_5ad487361de288a1, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2459,7 +2483,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{32} + return fileDescriptor_ws_5ad487361de288a1, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2521,7 +2545,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{33} + return fileDescriptor_ws_5ad487361de288a1, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2575,7 +2599,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{34} + return fileDescriptor_ws_5ad487361de288a1, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2631,7 +2655,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{35} + return fileDescriptor_ws_5ad487361de288a1, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2700,7 +2724,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{36} + return fileDescriptor_ws_5ad487361de288a1, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2761,7 +2785,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{37} + return fileDescriptor_ws_5ad487361de288a1, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2815,7 +2839,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{38} + return fileDescriptor_ws_5ad487361de288a1, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2870,7 +2894,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{39} + return fileDescriptor_ws_5ad487361de288a1, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2930,7 +2954,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{40} + return fileDescriptor_ws_5ad487361de288a1, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2977,7 +3001,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{41} + return fileDescriptor_ws_5ad487361de288a1, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3030,7 +3054,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{42} + return fileDescriptor_ws_5ad487361de288a1, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3076,7 +3100,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{43} + return fileDescriptor_ws_5ad487361de288a1, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3116,7 +3140,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{44} + return fileDescriptor_ws_5ad487361de288a1, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3163,7 +3187,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{45} + return fileDescriptor_ws_5ad487361de288a1, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3211,7 +3235,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{46} + return fileDescriptor_ws_5ad487361de288a1, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3264,7 +3288,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{47} + return fileDescriptor_ws_5ad487361de288a1, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3302,7 +3326,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{48} + return fileDescriptor_ws_5ad487361de288a1, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3340,7 +3364,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{49} + return fileDescriptor_ws_5ad487361de288a1, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3378,7 +3402,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{50} + return fileDescriptor_ws_5ad487361de288a1, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3417,7 +3441,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{51} + return fileDescriptor_ws_5ad487361de288a1, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3456,7 +3480,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{52} + return fileDescriptor_ws_5ad487361de288a1, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3496,7 +3520,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{53} + return fileDescriptor_ws_5ad487361de288a1, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3551,7 +3575,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{54} + return fileDescriptor_ws_5ad487361de288a1, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3605,7 +3629,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{55} + return fileDescriptor_ws_5ad487361de288a1, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3651,7 +3675,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{56} + return fileDescriptor_ws_5ad487361de288a1, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3704,7 +3728,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{57} + return fileDescriptor_ws_5ad487361de288a1, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3971,7 +3995,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{58} + return fileDescriptor_ws_5ad487361de288a1, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4239,7 +4263,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{59} + return fileDescriptor_ws_5ad487361de288a1, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4335,7 +4359,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{60} + return fileDescriptor_ws_5ad487361de288a1, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4390,7 +4414,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{61} + return fileDescriptor_ws_5ad487361de288a1, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4451,7 +4475,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{62} + return fileDescriptor_ws_5ad487361de288a1, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4506,7 +4530,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{63} + return fileDescriptor_ws_5ad487361de288a1, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4567,7 +4591,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{64} + return fileDescriptor_ws_5ad487361de288a1, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4622,7 +4646,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{65} + return fileDescriptor_ws_5ad487361de288a1, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4680,7 +4704,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{66} + return fileDescriptor_ws_5ad487361de288a1, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4715,7 +4739,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{67} + return fileDescriptor_ws_5ad487361de288a1, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4783,7 +4807,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{68} + return fileDescriptor_ws_5ad487361de288a1, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4837,7 +4861,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{69} + return fileDescriptor_ws_5ad487361de288a1, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4888,7 +4912,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{70} + return fileDescriptor_ws_5ad487361de288a1, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4923,7 +4947,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{71} + return fileDescriptor_ws_5ad487361de288a1, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4988,7 +5012,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{72} + return fileDescriptor_ws_5ad487361de288a1, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5022,7 +5046,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{73} + return fileDescriptor_ws_5ad487361de288a1, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5082,7 +5106,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2b8932ad953b270, []int{74} + return fileDescriptor_ws_5ad487361de288a1, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5198,211 +5222,212 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_b2b8932ad953b270) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_5ad487361de288a1) } -var fileDescriptor_ws_b2b8932ad953b270 = []byte{ - // 3238 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x24, 0x57, - 0x11, 0xa7, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x3f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x1f, 0x8b, 0xfc, 0x91, 0xfd, 0x48, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc3, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x48, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, - 0x90, 0x38, 0x20, 0xc4, 0x81, 0x3f, 0x00, 0x8e, 0x88, 0x0b, 0xe2, 0xcc, 0x95, 0x03, 0x12, 0x12, - 0xe8, 0x55, 0xbd, 0xee, 0x7e, 0xaf, 0xbb, 0xc7, 0x9e, 0x1d, 0x59, 0xd9, 0x8d, 0x96, 0x9b, 0xab, - 0xe6, 0x55, 0xbd, 0x7a, 0xf5, 0xab, 0x57, 0x55, 0xfd, 0xde, 0x33, 0x2c, 0xc4, 0xce, 0xe1, 0x7b, - 0x77, 0xe3, 0xe7, 0xef, 0xc6, 0x97, 0xc2, 0x28, 0x48, 0x02, 0x63, 0x29, 0x66, 0xd1, 0x31, 0x8b, - 0xde, 0xb3, 0x43, 0xf7, 0xbd, 0xd0, 0x8e, 0xec, 0x61, 0x6c, 0xfe, 0x4b, 0x87, 0xf6, 0xd5, 0x28, - 0x48, 0xc3, 0xeb, 0xfe, 0x7e, 0x60, 0x74, 0x61, 0x7a, 0x80, 0xc4, 0x56, 0x57, 0x5b, 0xd5, 0x9e, - 0x6d, 0x5b, 0x19, 0x69, 0x5c, 0x80, 0x36, 0xfe, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0xdf, 0x0a, - 0x86, 0x61, 0xc2, 0xac, 0x1f, 0x24, 0xee, 0xbe, 0xdb, 0xb7, 0x13, 0x37, 0xf0, 0xbb, 0x0d, 0x1c, - 0xa0, 0xf0, 0xf8, 0x18, 0xd7, 0x4f, 0xa2, 0xc0, 0x49, 0xfb, 0x38, 0x66, 0x8a, 0xc6, 0xc8, 0x3c, - 0x3e, 0xff, 0xbe, 0xdd, 0x67, 0xb7, 0xad, 0x1b, 0xdd, 0x26, 0xcd, 0x2f, 0x48, 0x63, 0x15, 0x3a, - 0xc1, 0x5d, 0x9f, 0x45, 0xb7, 0x63, 0x16, 0x5d, 0xdf, 0xea, 0xb6, 0xf0, 0x57, 0x99, 0x65, 0x5c, - 0x04, 0xe8, 0x47, 0xcc, 0x4e, 0xd8, 0x2d, 0x77, 0xc8, 0xba, 0xd3, 0xab, 0xda, 0xb3, 0x73, 0x96, - 0xc4, 0xe1, 0x1a, 0x86, 0x6c, 0xb8, 0xc7, 0xa2, 0xcd, 0x20, 0xf5, 0x93, 0xee, 0x0c, 0x0e, 0x90, - 0x59, 0xc6, 0x3c, 0xe8, 0xec, 0x5e, 0xb7, 0x8d, 0xaa, 0x75, 0x76, 0xcf, 0x58, 0x86, 0x56, 0x9c, - 0xd8, 0x49, 0x1a, 0x77, 0x61, 0x55, 0x7b, 0xb6, 0x69, 0x09, 0xca, 0x58, 0x83, 0x39, 0xd4, 0x1b, - 0x64, 0xd6, 0x74, 0x50, 0x44, 0x65, 0xe6, 0x1e, 0xbb, 0x75, 0x3f, 0x64, 0xdd, 0x59, 0x54, 0x50, - 0x30, 0xcc, 0xbf, 0xea, 0x70, 0x0e, 0xfd, 0xbe, 0x8d, 0x06, 0x5c, 0x49, 0x3d, 0xef, 0x14, 0x04, - 0x96, 0xa1, 0x95, 0xd2, 0x74, 0xe4, 0x7e, 0x41, 0xf1, 0x79, 0xa2, 0xc0, 0x63, 0x37, 0xd8, 0x31, - 0xf3, 0xd0, 0xf1, 0x4d, 0xab, 0x60, 0x18, 0x2b, 0x30, 0x73, 0x27, 0x70, 0x7d, 0xf4, 0xc9, 0x14, - 0xfe, 0x98, 0xd3, 0xfc, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, - 0xb4, 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0x9a, 0x74, 0x1a, - 0xf5, 0x96, 0xb8, 0x1c, 0x0f, 0x3e, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, - 0xc3, 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, - 0x1c, 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0xb8, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, - 0x7e, 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, - 0xa0, 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, - 0x28, 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, - 0x0f, 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, - 0x4a, 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, - 0x62, 0x41, 0x33, 0xb9, 0xef, 0xd5, 0x3d, 0xd6, 0xae, 0xec, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, - 0x98, 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x73, 0x6b, 0xd5, 0xcd, - 0xbd, 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, - 0xbd, 0x0a, 0xb0, 0x8f, 0xf3, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x49, 0x83, - 0x97, 0x32, 0x94, 0x2c, 0x69, 0x38, 0xdf, 0x59, 0xb6, 0xe3, 0x88, 0x00, 0x6e, 0xd2, 0xce, 0xca, - 0x19, 0x35, 0xf1, 0xdb, 0x3a, 0x21, 0x7e, 0xa7, 0xf3, 0xa0, 0xf8, 0xa7, 0x06, 0xed, 0x0d, 0xcf, - 0xee, 0x1f, 0x8e, 0xb9, 0x74, 0x75, 0x89, 0x7a, 0x65, 0x89, 0x57, 0x61, 0x6e, 0x8f, 0xab, 0xcb, - 0x96, 0x80, 0x5e, 0xe8, 0xbc, 0xf8, 0x99, 0x9a, 0x55, 0xaa, 0x9b, 0xc2, 0x52, 0xe5, 0xd4, 0xe5, - 0x4e, 0x9d, 0xbe, 0xdc, 0xe6, 0x09, 0xcb, 0x6d, 0xe5, 0xcb, 0xfd, 0x8b, 0x0e, 0xb3, 0x98, 0xe8, - 0x2c, 0x76, 0x94, 0xb2, 0x38, 0x31, 0x5e, 0x87, 0x99, 0x34, 0x33, 0x55, 0x1b, 0xd7, 0xd4, 0x5c, - 0xc4, 0x78, 0x45, 0xa4, 0x55, 0x94, 0xd7, 0x51, 0xfe, 0x42, 0x8d, 0x7c, 0x5e, 0xd3, 0xac, 0x62, - 0x38, 0x2f, 0x41, 0x07, 0xb6, 0xef, 0x78, 0xcc, 0x62, 0x71, 0xea, 0x25, 0x22, 0x5b, 0x2a, 0x3c, - 0x8a, 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x0a, 0x94, 0xa0, 0xb8, 0x77, 0x68, 0x1c, 0xff, 0x89, 0x96, - 0x5e, 0x30, 0xf8, 0x46, 0x8d, 0xd8, 0x11, 0x22, 0x44, 0xdb, 0x2a, 0x23, 0x8b, 0x39, 0x85, 0xd7, - 0x28, 0x10, 0x14, 0x1e, 0x87, 0x98, 0x68, 0x54, 0x40, 0x95, 0x49, 0xe2, 0x94, 0x0b, 0x93, 0xf9, - 0xb7, 0x06, 0xcc, 0xd1, 0xf6, 0xc9, 0x9c, 0x7a, 0x91, 0xc7, 0x79, 0x30, 0x54, 0xa2, 0x48, 0xe2, - 0x70, 0x2b, 0x38, 0xb5, 0xa3, 0x26, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x84, 0x23, - 0xb3, 0xb2, 0x59, 0xae, 0xca, 0x89, 0x47, 0xe2, 0xf0, 0x54, 0x96, 0x04, 0x4a, 0x74, 0xe4, 0x34, - 0x97, 0x4d, 0x82, 0x7c, 0x7e, 0x8a, 0x0f, 0x89, 0xc3, 0xfd, 0x9b, 0x04, 0xd9, 0xdc, 0xe4, 0xa4, - 0x82, 0x41, 0x9a, 0xc5, 0xbc, 0x54, 0x4a, 0x72, 0xba, 0x82, 0x6a, 0xfb, 0x44, 0x54, 0x41, 0x41, - 0x55, 0xdd, 0x5c, 0x9d, 0xca, 0xe6, 0x5a, 0x83, 0x39, 0xd2, 0x93, 0x05, 0xfd, 0x2c, 0x95, 0x7a, - 0x85, 0xa9, 0xc6, 0xc6, 0x5c, 0x39, 0x36, 0x54, 0x74, 0xe7, 0x47, 0xa0, 0xbb, 0x90, 0xa3, 0xfb, - 0x6b, 0x1d, 0x60, 0x8b, 0x85, 0x76, 0x94, 0x0c, 0x99, 0x9f, 0xf0, 0xe5, 0x39, 0x39, 0x95, 0x83, - 0xab, 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x74, 0x38, 0xa1, 0x89, 0x7f, 0x73, - 0x67, 0x86, 0x76, 0x44, 0xda, 0x28, 0xc8, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, - 0x5a, 0x44, 0xf0, 0xcd, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf2, 0xba, 0xca, 0x3d, 0xb5, 0x07, - 0x7b, 0x0e, 0x16, 0xe3, 0x74, 0xaf, 0x58, 0xdc, 0x4e, 0x3a, 0x14, 0xe1, 0x5e, 0xe1, 0x73, 0xa7, - 0x52, 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, - 0xd1, 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x09, 0x7c, 0x92, 0x92, 0xbb, 0x0a, 0x1d, 0xe6, - 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x2a, 0xca, 0x4d, - 0xa5, 0x28, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, - 0xc3, 0xea, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x0a, 0xf5, 0x4c, 0x6d, 0xa1, 0x6e, 0xcb, 0x85, 0x5a, - 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0xa3, 0x06, 0x8b, 0x85, 0xbb, 0xa9, - 0x07, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, - 0x69, 0x41, 0xec, 0x4a, 0xfd, 0x7e, 0x4e, 0xf3, 0xd9, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xea, - 0xba, 0x5b, 0x4a, 0xd7, 0x5d, 0xae, 0xa3, 0xbf, 0xd3, 0xe0, 0x3c, 0x47, 0xb9, 0xb2, 0x8c, 0x9b, - 0xb0, 0x18, 0x94, 0x22, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, - 0x57, 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, - 0x83, 0x45, 0x2a, 0x6d, 0xd2, 0x3e, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, - 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xef, 0xb5, 0x27, 0x77, 0x53, 0xcf, - 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, - 0x0c, 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x10, 0x92, 0x59, 0x7c, 0x5b, 0xc5, 0xa4, - 0xa7, 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, - 0x9d, 0xc2, 0x05, 0xbc, 0x56, 0xdb, 0x35, 0xd4, 0x5a, 0x45, 0xdd, 0x80, 0xa0, 0xdf, 0xf0, 0x93, - 0xe8, 0xbe, 0xa5, 0x68, 0x5c, 0x79, 0x17, 0x96, 0x2a, 0x43, 0x8c, 0x45, 0x68, 0x1c, 0xb2, 0xfb, - 0x62, 0x1d, 0xfc, 0x4f, 0xe3, 0x05, 0x68, 0x1e, 0xdb, 0x5e, 0xca, 0x04, 0xfa, 0x2b, 0x35, 0x16, - 0x08, 0x9b, 0x2d, 0x1a, 0xf8, 0x8a, 0xfe, 0x65, 0xcd, 0x7c, 0x3a, 0x5f, 0x98, 0xbc, 0x46, 0x4d, - 0x59, 0xa3, 0xf9, 0x16, 0x74, 0xb6, 0xe3, 0xc1, 0x96, 0x9d, 0xd8, 0x38, 0xf0, 0x35, 0xe8, 0x0c, - 0x0b, 0x12, 0x07, 0xd7, 0xcf, 0x27, 0x84, 0x2c, 0x79, 0xb8, 0xf9, 0x67, 0x1d, 0xba, 0xf5, 0xae, - 0x88, 0x43, 0x6e, 0x03, 0x8b, 0xa2, 0xcd, 0xc0, 0x61, 0xb8, 0xb4, 0xa6, 0x95, 0x91, 0x1c, 0x3b, - 0x16, 0x45, 0xbc, 0x86, 0x89, 0x26, 0x9b, 0x28, 0xe3, 0x12, 0x4c, 0x79, 0x19, 0x2c, 0x27, 0x5b, - 0x81, 0xe3, 0x8c, 0x21, 0x2c, 0xa2, 0x77, 0xa5, 0x05, 0x09, 0xcc, 0xd6, 0xc7, 0xc6, 0x2c, 0x0e, - 0x09, 0x34, 0x49, 0x07, 0x01, 0x57, 0x51, 0xbd, 0xd2, 0x87, 0x27, 0x6a, 0x87, 0xd6, 0x00, 0xf8, - 0x25, 0x15, 0xc0, 0x8b, 0xa3, 0x97, 0x52, 0x06, 0x71, 0x07, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, - 0xad, 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xcf, 0xf3, 0x1c, - 0xa6, 0xb6, 0x25, 0xb3, 0x46, 0x7d, 0xb5, 0x9b, 0x97, 0x61, 0x56, 0x56, 0x86, 0x25, 0xc2, 0xbe, - 0xd7, 0x63, 0x47, 0x68, 0xee, 0x9c, 0x25, 0x28, 0xe4, 0xe3, 0x08, 0xd1, 0xf9, 0x0b, 0xca, 0xfc, - 0x89, 0x0e, 0xe7, 0x2a, 0x06, 0xc5, 0xe1, 0x83, 0xea, 0x31, 0x0e, 0x61, 0x89, 0x1c, 0x2a, 0x29, - 0x12, 0x40, 0xbf, 0x5e, 0xd7, 0x56, 0x57, 0xa7, 0x14, 0x38, 0x49, 0x5c, 0x02, 0xaa, 0xaa, 0x77, - 0x85, 0xc1, 0x72, 0xfd, 0xe0, 0x1a, 0xa8, 0x5e, 0x56, 0xa1, 0xfa, 0x74, 0x1d, 0x54, 0xb2, 0x25, - 0x12, 0x56, 0x47, 0xb0, 0xc0, 0x13, 0x60, 0x8f, 0xf9, 0xce, 0x76, 0x3c, 0x40, 0xb7, 0xac, 0x42, - 0x87, 0xe4, 0xb7, 0xe3, 0x41, 0xf1, 0x99, 0x25, 0xb1, 0xf8, 0x88, 0xbe, 0xe7, 0xf2, 0x44, 0x87, - 0x23, 0x44, 0x82, 0x92, 0x58, 0xbc, 0x98, 0xc5, 0x4c, 0x9c, 0x3a, 0xf0, 0x2a, 0xd7, 0xb0, 0x72, - 0xda, 0xfc, 0x7b, 0x13, 0xa6, 0x45, 0xe4, 0x60, 0x01, 0xe3, 0x5f, 0xb6, 0x79, 0x0a, 0x24, 0x8a, - 0x7a, 0xd0, 0xfe, 0x71, 0x11, 0x0a, 0x44, 0xc9, 0x47, 0x3e, 0x0d, 0xf5, 0xc8, 0xa7, 0x64, 0xd3, - 0x54, 0xd5, 0xa6, 0xd2, 0xba, 0x9a, 0xd5, 0x75, 0xf1, 0x96, 0x0b, 0xbb, 0x90, 0x5d, 0xcf, 0x4e, - 0xf6, 0x83, 0x68, 0x28, 0x3e, 0x54, 0x9b, 0x56, 0x85, 0xcf, 0xdb, 0x3c, 0xe2, 0xe5, 0x7d, 0x3a, - 0x95, 0xdb, 0x12, 0x97, 0x77, 0xc5, 0xc4, 0xc9, 0xfa, 0x75, 0x3a, 0x21, 0x50, 0x99, 0x64, 0x5b, - 0x1c, 0xbb, 0x81, 0x8f, 0x1d, 0x23, 0xb5, 0xe5, 0x32, 0x8b, 0xaf, 0x7c, 0x18, 0x0f, 0xae, 0x44, - 0xc1, 0x50, 0x9c, 0x13, 0x64, 0x24, 0xae, 0x3c, 0xf0, 0x93, 0xac, 0xdb, 0xec, 0x90, 0xac, 0xc4, - 0xe2, 0xb2, 0x82, 0xc4, 0x9e, 0x7c, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0x8d, 0x36, - 0xff, 0x53, 0x41, 0x6e, 0x41, 0x45, 0xae, 0xd4, 0x39, 0x2d, 0xe2, 0xaf, 0x72, 0xe7, 0x54, 0xb4, - 0x23, 0x4b, 0x4a, 0x3b, 0xb2, 0x0e, 0xd3, 0x41, 0xc8, 0x4b, 0x57, 0xdc, 0x35, 0x70, 0xbb, 0x7c, - 0x76, 0x74, 0x32, 0xb9, 0x74, 0x93, 0x46, 0xd2, 0xc6, 0xc8, 0xe4, 0x8c, 0x1b, 0xb0, 0x10, 0xec, - 0xef, 0x7b, 0xae, 0xcf, 0x76, 0xd3, 0xf8, 0x00, 0x3f, 0x68, 0xcf, 0x61, 0xb0, 0x9b, 0x75, 0x05, - 0x5f, 0x1d, 0x69, 0x95, 0x45, 0x79, 0x97, 0x66, 0x27, 0xf4, 0x41, 0x82, 0xc9, 0xe8, 0x3c, 0x26, - 0x23, 0x85, 0xb7, 0xf2, 0x0a, 0xcc, 0xca, 0xa6, 0xd4, 0x6c, 0xbb, 0xf3, 0xf2, 0xb6, 0x9b, 0x91, - 0x77, 0xd5, 0x8f, 0x34, 0x58, 0x28, 0x19, 0xc1, 0x47, 0x27, 0x6e, 0xe2, 0x31, 0xa1, 0x81, 0x08, - 0xfe, 0xcd, 0xe1, 0xb0, 0xb8, 0x2f, 0xc2, 0x1c, 0xff, 0x16, 0xdd, 0x5b, 0x23, 0x3f, 0x49, 0x32, - 0x61, 0xd6, 0xbd, 0xd9, 0xe3, 0x8a, 0x7a, 0x41, 0xea, 0x3b, 0xf9, 0x69, 0xb0, 0xc4, 0xe3, 0x61, - 0xe6, 0xde, 0xec, 0x6d, 0xd8, 0xce, 0x80, 0xd1, 0x99, 0x6d, 0x13, 0x6d, 0x52, 0x99, 0xa6, 0x03, - 0x33, 0xb7, 0xdc, 0x30, 0xde, 0x0c, 0x86, 0x43, 0x0e, 0x96, 0xc3, 0x12, 0xde, 0x1d, 0x6b, 0x18, - 0x13, 0x82, 0xe2, 0xe1, 0xe4, 0xb0, 0x7d, 0x3b, 0xf5, 0x12, 0x3e, 0x34, 0xdb, 0xdc, 0x12, 0x0b, - 0x4f, 0x2b, 0xe3, 0xc0, 0xdf, 0x22, 0x69, 0xb2, 0x53, 0xe2, 0x98, 0x7f, 0xd2, 0x61, 0x11, 0x73, - 0xd7, 0x26, 0x86, 0x86, 0x83, 0x42, 0x2f, 0x42, 0x13, 0xb7, 0xaa, 0xe8, 0xd3, 0x4e, 0x3e, 0x87, - 0xa0, 0xa1, 0xc6, 0x65, 0x68, 0x05, 0x21, 0x36, 0x77, 0x94, 0xd8, 0x9e, 0x19, 0x25, 0xa4, 0x1e, - 0x0c, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0x7a, 0x39, 0xca, 0xd4, 0xe3, 0xea, 0x90, 0x24, - 0xb9, 0x73, 0xf3, 0xee, 0x2b, 0x3f, 0x1d, 0x6e, 0x58, 0x2a, 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, - 0x66, 0x76, 0x20, 0x85, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, 0xfc, 0xb9, 0x26, 0xdc, 0xc8, 0x7f, - 0xed, 0x31, 0xf2, 0x7d, 0xe1, 0x12, 0x6d, 0x22, 0x97, 0xac, 0xc0, 0xcc, 0x30, 0x95, 0xce, 0xc7, - 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, - 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x57, 0x18, 0x13, 0x63, 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, - 0x4f, 0x04, 0xec, 0x63, 0x9c, 0x79, 0x15, 0x32, 0xd2, 0xf1, 0x45, 0x43, 0x3e, 0xbe, 0x30, 0x3f, - 0xd0, 0x60, 0x9e, 0x9c, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, - 0x4c, 0x10, 0x95, 0xb9, 0x5c, 0x35, 0x9e, 0x1a, 0x35, 0xf1, 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0xb2, - 0x5b, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x2d, 0xa5, 0x1c, 0xdf, 0x4c, 0x95, 0x8e, 0x6f, 0x6a, - 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, 0x0e, 0x9f, 0xbc, 0x9a, 0x6f, 0xbc, - 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, - 0x9b, 0xc4, 0x76, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0x5e, 0xee, 0x32, 0xff, 0xa3, 0xc1, 0x22, 0xe9, - 0x79, 0xcb, 0xed, 0x1f, 0x3e, 0xc4, 0xc5, 0xef, 0xc0, 0xfc, 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xd2, - 0x76, 0x49, 0x7a, 0xcc, 0xe5, 0xff, 0x57, 0x83, 0x25, 0x52, 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, - 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0xe8, 0x80, 0xb2, 0xf8, 0x98, 0x1e, 0xf8, 0xad, 0x06, - 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xeb, 0xbf, 0x06, 0x1d, 0xe6, 0x27, 0x91, 0xed, - 0x4f, 0x92, 0x21, 0x65, 0xd1, 0x31, 0x93, 0xe4, 0x07, 0x1a, 0x18, 0xa8, 0x6a, 0xcb, 0x8d, 0x87, - 0x6e, 0x1c, 0x3f, 0x44, 0xe8, 0xc6, 0x33, 0xf8, 0xa7, 0x3a, 0x9c, 0x97, 0xb4, 0x6c, 0xa7, 0xc9, - 0xa3, 0x6e, 0xb2, 0xb1, 0x05, 0x6d, 0xde, 0x23, 0xc8, 0xf7, 0x82, 0xe3, 0x4e, 0x54, 0x08, 0xf2, - 0x2e, 0x16, 0x89, 0x1e, 0xeb, 0x07, 0xbe, 0x13, 0x63, 0x73, 0x34, 0x67, 0x29, 0x3c, 0x9e, 0x86, - 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0xd3, - 0x90, 0x47, 0x7f, 0xc9, 0xbc, 0xd6, 0x53, 0x20, 0x7f, 0x6c, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, - 0x91, 0xfb, 0xea, 0x47, 0x37, 0xb4, 0xae, 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, - 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x0a, 0xdf, 0xa4, 0x9f, 0x70, 0xf9, 0x2f, 0x95, 0x96, 0x72, - 0xe2, 0xbd, 0xff, 0x83, 0x39, 0xfd, 0x10, 0x96, 0xe8, 0xfe, 0x55, 0xea, 0x09, 0x8d, 0x2e, 0x4c, - 0xdb, 0x0e, 0x1d, 0x32, 0x68, 0x28, 0x94, 0x91, 0xea, 0xcd, 0xba, 0x78, 0x3c, 0x55, 0xdc, 0xac, - 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, - 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x26, 0xf5, 0xc4, 0xbb, 0x5e, 0xf9, 0x16, 0x56, 0x57, - 0x6f, 0x61, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x41, 0x9c, 0x4d, 0x22, - 0x42, 0xa6, 0xee, 0xd4, 0x4d, 0xb6, 0xc5, 0x52, 0x84, 0xcc, 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, - 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, - 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, - 0x97, 0xa1, 0x45, 0x8f, 0x4b, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, 0x98, 0x3d, 0x8a, 0xb1, 0xc4, 0xe0, - 0x6a, 0x44, 0xea, 0x75, 0x3b, 0xea, 0x2b, 0x79, 0xb0, 0x8f, 0xfd, 0xfc, 0x43, 0x08, 0x98, 0x5f, - 0xcf, 0x82, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x7d, 0x64, 0xde, 0x86, 0x79, 0x7c, 0xe9, 0x52, 0xf8, - 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, 0xcd, 0x77, 0x07, 0xf7, 0x8f, 0x9c, +var fileDescriptor_ws_5ad487361de288a1 = []byte{ + // 3252 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, + 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, + 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, + 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, + 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, 0x28, 0x8a, 0x10, + 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x1c, 0x11, 0x17, 0xc4, 0x99, 0x2b, 0x07, 0x24, 0x24, + 0xd0, 0xab, 0x7a, 0xdd, 0xfd, 0x5e, 0x77, 0x8f, 0x3d, 0x3b, 0xb2, 0xb2, 0x1b, 0x2d, 0xb7, 0xa9, + 0xea, 0x57, 0xf5, 0xea, 0xd5, 0x57, 0xef, 0x55, 0xbd, 0x9f, 0x81, 0x85, 0xd8, 0x39, 0x7c, 0xef, + 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, + 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, + 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, + 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x9f, 0x3b, 0xf6, 0x90, 0x75, 0x75, 0xfc, 0x56, 0x30, + 0x0c, 0x13, 0x66, 0xfd, 0x20, 0x71, 0xf7, 0xdd, 0xbe, 0x9d, 0xb8, 0x81, 0xdf, 0x6d, 0x60, 0x03, + 0x85, 0xc7, 0xdb, 0xb8, 0x7e, 0x12, 0x05, 0x4e, 0xda, 0xc7, 0x36, 0x53, 0xd4, 0x46, 0xe6, 0xf1, + 0xfe, 0xf7, 0xed, 0x3e, 0xbb, 0x6d, 0xdd, 0xe8, 0x36, 0xa9, 0x7f, 0x41, 0x1a, 0xab, 0xd0, 0x09, + 0xee, 0xfa, 0x2c, 0xba, 0x1d, 0xb3, 0xe8, 0xfa, 0x56, 0xb7, 0x85, 0x5f, 0x65, 0x96, 0x71, 0x11, + 0xa0, 0x1f, 0x31, 0x3b, 0x61, 0xb7, 0xdc, 0x21, 0xeb, 0x4e, 0xaf, 0x6a, 0xcf, 0xce, 0x59, 0x12, + 0x87, 0x6b, 0x18, 0xb2, 0xe1, 0x1e, 0x8b, 0x36, 0x83, 0xd4, 0x4f, 0xba, 0x33, 0xd8, 0x40, 0x66, + 0x19, 0xf3, 0xa0, 0xb3, 0x7b, 0xdd, 0x36, 0xaa, 0xd6, 0xd9, 0x3d, 0x63, 0x19, 0x5a, 0x71, 0x62, + 0x27, 0x69, 0xdc, 0x85, 0x55, 0xed, 0xd9, 0xa6, 0x25, 0x28, 0x63, 0x0d, 0xe6, 0x50, 0x6f, 0x90, + 0x59, 0xd3, 0x41, 0x11, 0x95, 0x99, 0x7b, 0xec, 0xd6, 0xfd, 0x90, 0x75, 0x67, 0x51, 0x41, 0xc1, + 0x30, 0xff, 0xaa, 0xc3, 0x39, 0xf4, 0xfb, 0x36, 0x1a, 0x70, 0x25, 0xf5, 0xbc, 0x53, 0x10, 0x58, + 0x86, 0x56, 0x4a, 0xdd, 0x91, 0xfb, 0x05, 0xc5, 0xfb, 0x89, 0x02, 0x8f, 0xdd, 0x60, 0xc7, 0xcc, + 0x43, 0xc7, 0x37, 0xad, 0x82, 0x61, 0xac, 0xc0, 0xcc, 0x9d, 0xc0, 0xf5, 0xd1, 0x27, 0x53, 0xf8, + 0x31, 0xa7, 0xf9, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, 0xb4, + 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0xea, 0x74, 0x1a, 0xf5, + 0x96, 0xb8, 0x1c, 0x0f, 0xde, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, 0xc3, + 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, 0x1c, + 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0x38, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, 0x7e, + 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, + 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, 0x28, + 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, 0x0f, + 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, 0x4a, + 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, 0x62, + 0x40, 0x33, 0xb9, 0xef, 0xd5, 0x39, 0xd6, 0xae, 0xcc, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, 0x98, + 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x72, 0x6b, 0xd5, 0xc9, 0xbd, + 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, 0xbd, + 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x59, 0x06, 0x2f, + 0x65, 0x28, 0x59, 0x52, 0x73, 0x3e, 0xb3, 0x6c, 0xc7, 0x11, 0x01, 0xdc, 0xa4, 0x99, 0x95, 0x33, + 0x6a, 0xe2, 0xb7, 0x75, 0x42, 0xfc, 0x4e, 0xe7, 0x41, 0xf1, 0x4f, 0x0d, 0xda, 0x1b, 0x9e, 0xdd, + 0x3f, 0x1c, 0x73, 0xe8, 0xea, 0x10, 0xf5, 0xca, 0x10, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0x0d, + 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x33, 0x35, 0xa3, 0x54, 0x27, 0x85, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, + 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, 0x87, 0xfb, 0x17, 0x1d, 0x66, 0x71, 0xa1, 0xb3, + 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, 0xd2, 0xcc, 0x54, 0x6d, 0x5c, 0x53, 0x73, 0x11, + 0xe3, 0x15, 0xb1, 0xac, 0xa2, 0xbc, 0x8e, 0xf2, 0x17, 0x6a, 0xe4, 0xf3, 0x9c, 0x66, 0x15, 0xcd, + 0x79, 0x0a, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, 0x8b, 0x53, 0x2f, 0x11, 0xab, 0xa5, 0xc2, 0xa3, + 0x48, 0x3b, 0xda, 0x8e, 0x07, 0x22, 0x41, 0x09, 0x8a, 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, + 0x82, 0xc1, 0x27, 0x6a, 0xc4, 0x8e, 0x10, 0x21, 0x9a, 0x56, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, + 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, 0x4c, 0x12, 0xa7, 0x9c, 0x98, 0xcc, 0xbf, + 0x35, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0x8b, 0x3c, 0xce, 0x83, 0xa1, 0x12, 0x45, 0x12, 0x87, + 0x5b, 0xc1, 0xa9, 0x1d, 0x75, 0xa1, 0x51, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x45, 0x59, 0x70, 0x64, + 0x56, 0xd6, 0xcb, 0x55, 0x79, 0xe1, 0x91, 0x38, 0x7c, 0x29, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, + 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, + 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x25, 0x39, 0x5d, 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, + 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0x52, 0xbd, + 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, 0xba, 0xf3, 0x23, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, + 0x95, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x86, 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, + 0x55, 0x78, 0x72, 0x9e, 0xd0, 0xd5, 0x3c, 0x61, 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, + 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, 0xe6, 0x79, 0x20, 0x88, 0x1c, 0x91, 0x39, 0x9a, + 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0x41, 0xd3, 0xa2, 0x75, 0x5d, 0xe5, 0x9e, 0x5a, 0x83, + 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x27, 0x1d, 0x8a, 0x70, 0xaf, 0xf0, 0xb9, 0x53, + 0xa9, 0x38, 0xe3, 0x8d, 0x28, 0xd5, 0x14, 0x8c, 0x72, 0x55, 0x60, 0xbe, 0xaf, 0xc3, 0xe2, 0xcd, + 0x68, 0x60, 0xfb, 0xee, 0xb7, 0xb1, 0xdc, 0xc4, 0x05, 0x7c, 0x92, 0x94, 0xbb, 0x0a, 0x1d, 0xe6, + 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x4a, 0xca, 0x4d, + 0x25, 0x29, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, + 0xc3, 0xec, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x12, 0xf5, 0x4c, 0x6d, 0xa2, 0x6e, 0xcb, 0x89, 0x5a, + 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0x83, 0x06, 0x8b, 0x85, 0xbb, 0xa9, + 0x06, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, + 0x69, 0x41, 0xec, 0x4a, 0xf5, 0x7e, 0x4e, 0xf3, 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, + 0xba, 0x5b, 0x4a, 0xd5, 0x5d, 0xce, 0xa3, 0xbf, 0xd5, 0xe0, 0x3c, 0x47, 0xb9, 0x32, 0x8c, 0x9b, + 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, + 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x4e, + 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x9e, 0x6f, 0xb8, + 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, + 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x1f, 0x2c, 0x76, 0x34, 0x32, + 0x86, 0x78, 0x9d, 0x83, 0x85, 0x82, 0x1b, 0xf8, 0x79, 0x08, 0xc9, 0x2c, 0x3e, 0xad, 0x62, 0xd2, + 0xd3, 0x6d, 0xac, 0x36, 0x78, 0x0a, 0x15, 0xa4, 0xf1, 0x2d, 0x98, 0xc5, 0x1c, 0x2e, 0xba, 0xe9, + 0x4e, 0xe1, 0x00, 0x5e, 0xab, 0xad, 0x1a, 0x6a, 0xad, 0xa2, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x49, + 0x74, 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x26, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, + 0x31, 0x0e, 0xfe, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, + 0xc2, 0x66, 0x8b, 0x1a, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x07, 0x26, 0x8f, 0x51, 0x53, + 0xc6, 0x68, 0xbe, 0x05, 0x9d, 0xed, 0x78, 0xb0, 0x65, 0x27, 0x36, 0x36, 0x7c, 0x0d, 0x3a, 0xc3, + 0x82, 0xc4, 0xc6, 0xf5, 0xfd, 0x09, 0x21, 0x4b, 0x6e, 0x6e, 0xfe, 0x59, 0x87, 0x6e, 0xbd, 0x2b, + 0xe2, 0x90, 0xdb, 0xc0, 0xa2, 0x68, 0x33, 0x70, 0x18, 0x0e, 0xad, 0x69, 0x65, 0x24, 0xc7, 0x8e, + 0x45, 0x11, 0xcf, 0x61, 0xa2, 0xc8, 0x26, 0xca, 0xb8, 0x04, 0x53, 0x5e, 0x06, 0xcb, 0xc9, 0x56, + 0x60, 0x3b, 0x63, 0x08, 0x8b, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xf5, 0xb1, 0x31, 0x8b, 0x43, + 0x02, 0x4d, 0xd2, 0x41, 0xc0, 0x55, 0x54, 0xaf, 0xf4, 0xe1, 0x89, 0xda, 0xa6, 0x35, 0x00, 0x7e, + 0x49, 0x05, 0xf0, 0xe2, 0xe8, 0xa1, 0x94, 0x41, 0x0c, 0xc1, 0xb8, 0xca, 0x92, 0x6d, 0xfb, 0xde, + 0xba, 0xef, 0x6c, 0xbb, 0x7e, 0x8f, 0x1d, 0xf1, 0x68, 0x5f, 0x85, 0x8e, 0xd8, 0x9e, 0xe7, 0x30, + 0xb5, 0x2d, 0x99, 0x35, 0x72, 0xd7, 0x5e, 0x9a, 0x0f, 0x8d, 0xca, 0x7c, 0x30, 0x2f, 0xc3, 0xac, + 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x5e, 0x8f, 0x1d, 0xe1, 0x80, 0xe6, 0x2c, 0x41, 0x21, 0x1f, 0x5b, + 0x88, 0xbd, 0x81, 0xa0, 0xcc, 0x3f, 0xe9, 0x70, 0xae, 0x62, 0x72, 0x1c, 0x3e, 0xa8, 0x1e, 0x39, + 0x5e, 0x1a, 0xa3, 0xe2, 0x65, 0x4a, 0x89, 0x97, 0x43, 0x58, 0x22, 0x90, 0xa4, 0xae, 0xbb, 0x4d, + 0x0c, 0x80, 0xd7, 0xeb, 0x4a, 0xf5, 0xaa, 0x91, 0x02, 0x7b, 0x89, 0x4b, 0xe0, 0x57, 0xf5, 0xae, + 0x30, 0x58, 0xae, 0x6f, 0x5c, 0x03, 0xff, 0xcb, 0x2a, 0xfc, 0x9f, 0xae, 0x83, 0x5f, 0xb6, 0x44, + 0xc2, 0xff, 0x08, 0x16, 0xf8, 0xa2, 0xda, 0x63, 0xbe, 0xb3, 0x1d, 0x0f, 0xd0, 0x91, 0xab, 0xd0, + 0x21, 0xf9, 0xed, 0x78, 0x50, 0x6c, 0xdd, 0x24, 0x16, 0x6f, 0xd1, 0xf7, 0x5c, 0xbe, 0x78, 0x62, + 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x9e, 0x20, 0x63, 0x26, 0x4e, 0x32, 0xb8, 0x77, 0x1b, 0x56, 0x4e, + 0x9b, 0x7f, 0x6f, 0xc2, 0xb4, 0x88, 0x46, 0x4c, 0x8a, 0x7c, 0xb7, 0x9c, 0x2f, 0xab, 0x44, 0x51, + 0x5d, 0xdb, 0x3f, 0x2e, 0xc2, 0x8b, 0x28, 0xf9, 0x18, 0xa9, 0xa1, 0x1e, 0x23, 0x95, 0x6c, 0x9a, + 0xaa, 0xda, 0x54, 0x1a, 0x57, 0xb3, 0x3a, 0x2e, 0x5e, 0xc6, 0x61, 0x65, 0xb3, 0xeb, 0xd9, 0xc9, + 0x7e, 0x10, 0x0d, 0xc5, 0xe6, 0xb7, 0x69, 0x55, 0xf8, 0xbc, 0x74, 0x24, 0x5e, 0x5e, 0xfb, 0x53, + 0x0a, 0x2f, 0x71, 0x79, 0xa5, 0x4d, 0x9c, 0x6c, 0x0f, 0x40, 0xa7, 0x0e, 0x2a, 0x93, 0x6c, 0x8b, + 0x63, 0x37, 0xf0, 0xb1, 0x0a, 0xa5, 0x52, 0x5f, 0x66, 0xf1, 0x91, 0x0f, 0xe3, 0xc1, 0x95, 0x28, + 0x18, 0x8a, 0xb3, 0x87, 0x8c, 0xc4, 0x91, 0x07, 0x7e, 0x92, 0x55, 0xb0, 0x1d, 0x92, 0x95, 0x58, + 0x5c, 0x56, 0x90, 0x58, 0xe7, 0xcf, 0x5a, 0x19, 0xc9, 0x63, 0x29, 0x66, 0x47, 0xa2, 0x78, 0xe7, + 0x3f, 0x15, 0xe4, 0x16, 0x54, 0xe4, 0x4a, 0xd5, 0xd8, 0x22, 0x7e, 0x95, 0xab, 0xb1, 0xa2, 0xc4, + 0x59, 0x52, 0x4a, 0x9c, 0x75, 0x98, 0x0e, 0x42, 0x3e, 0xfd, 0xe3, 0xae, 0x81, 0xd3, 0xe5, 0xb3, + 0xa3, 0x17, 0xa8, 0x4b, 0x37, 0xa9, 0x25, 0x4d, 0x8c, 0x4c, 0xce, 0xb8, 0x01, 0x0b, 0xc1, 0xfe, + 0xbe, 0xe7, 0xfa, 0x6c, 0x37, 0x8d, 0x0f, 0x70, 0x93, 0x7c, 0x0e, 0x83, 0xdd, 0xac, 0x2b, 0x22, + 0xd4, 0x96, 0x56, 0x59, 0x94, 0x57, 0x7e, 0x76, 0x42, 0x9b, 0x1c, 0x5c, 0xe0, 0xce, 0xe3, 0x02, + 0xa7, 0xf0, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0x94, 0x9a, 0x69, 0x77, 0x5e, 0x9e, 0x76, 0x33, 0xf2, + 0xac, 0xfa, 0x91, 0x06, 0x0b, 0x25, 0x23, 0x78, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, + 0xf7, 0x31, 0x0e, 0x8b, 0xfb, 0x22, 0xcc, 0xf1, 0xb7, 0xa8, 0x08, 0x1b, 0xf9, 0xe9, 0x94, 0x09, + 0xb3, 0xee, 0xcd, 0x1e, 0x57, 0xd4, 0x0b, 0x52, 0xdf, 0xc9, 0x4f, 0x98, 0x25, 0x1e, 0x0f, 0x33, + 0xf7, 0x66, 0x6f, 0xc3, 0x76, 0x06, 0x8c, 0xce, 0x81, 0x9b, 0x68, 0x93, 0xca, 0x34, 0x1d, 0x98, + 0xb9, 0xe5, 0x86, 0xf1, 0x66, 0x30, 0x1c, 0x72, 0xb0, 0x1c, 0x96, 0xf0, 0x8a, 0x5b, 0xc3, 0x98, + 0x10, 0x14, 0x0f, 0x27, 0x87, 0xed, 0xdb, 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xe4, 0x96, 0x58, 0x78, + 0x02, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, 0x9d, 0x12, 0xc7, 0xfc, 0xa3, 0x0e, 0x8b, 0xb8, 0x76, + 0x6d, 0x62, 0x68, 0x38, 0x28, 0xf4, 0x22, 0x34, 0x71, 0xaa, 0x8a, 0xda, 0xef, 0xe4, 0xb3, 0x0d, + 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, 0xc1, 0x48, 0x0b, 0xdb, 0x33, 0xa3, 0x84, 0xd4, 0xc3, + 0x66, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, 0x45, 0x7d, 0x48, 0x69, 0x7e, 0x5c, 0x1d, 0x92, 0x24, + 0x77, 0x6e, 0x9e, 0xc1, 0xf2, 0x13, 0xe7, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, + 0x66, 0x87, 0x5c, 0x88, 0xc1, 0xf8, 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x69, 0xc2, 0x8d, 0xfc, 0x6b, + 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0xe6, 0xd6, + 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, 0x36, 0x44, 0xe6, 0xcf, 0x35, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, + 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, 0x8b, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, + 0x11, 0xb0, 0x8f, 0x71, 0x8e, 0x56, 0xc8, 0x48, 0x47, 0x22, 0x0d, 0xf9, 0x48, 0xc4, 0xfc, 0x40, + 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, + 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0xa1, 0x06, 0x17, 0xca, 0x6e, + 0x5d, 0xef, 0xf7, 0x59, 0xf8, 0x30, 0xa7, 0x94, 0x72, 0x24, 0x34, 0x55, 0x3a, 0x12, 0xaa, 0x35, + 0xd9, 0x62, 0x77, 0x58, 0xff, 0xd1, 0x35, 0xf9, 0x7b, 0x3a, 0x7c, 0xf2, 0x6a, 0x3e, 0xf1, 0x6e, + 0x45, 0xb6, 0x1f, 0xef, 0xb3, 0x28, 0x7a, 0x88, 0xf6, 0xde, 0x80, 0x39, 0x9f, 0xdd, 0x2d, 0x6c, + 0x12, 0xd3, 0x71, 0x5c, 0x35, 0xaa, 0xf0, 0x78, 0x6b, 0x97, 0xf9, 0x1f, 0x0d, 0x16, 0x49, 0xcf, + 0x5b, 0x6e, 0xff, 0xf0, 0x21, 0x0e, 0x7e, 0x07, 0xe6, 0x0f, 0xd1, 0x02, 0x4e, 0x4d, 0xb0, 0x6c, + 0x97, 0xa4, 0xc7, 0x1c, 0xfe, 0x7f, 0x35, 0x58, 0x22, 0x45, 0xd7, 0xfd, 0x63, 0xf7, 0x61, 0x06, + 0xeb, 0x2e, 0x2c, 0xb8, 0x64, 0xc2, 0x84, 0x0e, 0x28, 0x8b, 0x8f, 0xe9, 0x81, 0xdf, 0x68, 0xb0, + 0x40, 0x9a, 0xde, 0xf0, 0x13, 0x16, 0x4d, 0x3c, 0xfe, 0x6b, 0xd0, 0x61, 0x7e, 0x12, 0xd9, 0xfe, + 0x24, 0x2b, 0xa4, 0x2c, 0x3a, 0xe6, 0x22, 0xf9, 0x81, 0x06, 0x06, 0xaa, 0xda, 0x72, 0xe3, 0xa1, + 0x1b, 0xc7, 0x0f, 0x11, 0xba, 0xf1, 0x0c, 0xfe, 0x89, 0x0e, 0xe7, 0x25, 0x2d, 0xdb, 0x69, 0xf2, + 0xa8, 0x9b, 0x6c, 0x6c, 0x41, 0x9b, 0xd7, 0x08, 0xf2, 0x5d, 0xe3, 0xb8, 0x1d, 0x15, 0x82, 0xbc, + 0x8a, 0x45, 0xa2, 0xc7, 0xfa, 0x81, 0xef, 0xc4, 0x58, 0x1c, 0xcd, 0x59, 0x0a, 0x8f, 0x2f, 0x43, + 0x2b, 0x92, 0x9a, 0x4d, 0xdb, 0xef, 0x33, 0xef, 0xb1, 0x71, 0x91, 0xf9, 0x4b, 0x0d, 0xe6, 0xa9, + 0xc9, 0xa3, 0x3f, 0x64, 0x9e, 0xeb, 0x29, 0x90, 0x3f, 0x36, 0x28, 0xf1, 0xf0, 0x5a, 0x96, 0xb4, + 0xc8, 0x75, 0xf5, 0xa3, 0x1b, 0x5a, 0xd7, 0xa0, 0xd3, 0x3f, 0xb0, 0xfd, 0xc1, 0x44, 0xc1, 0x25, + 0x8b, 0x9a, 0x09, 0x3c, 0x29, 0x1f, 0xaf, 0x6f, 0xd2, 0x27, 0x1c, 0xfe, 0x4b, 0xa5, 0xa1, 0x9c, + 0xf8, 0x96, 0xe0, 0xc1, 0x9c, 0x7e, 0x08, 0x4b, 0x74, 0xa7, 0x2b, 0xd5, 0x84, 0x46, 0x17, 0xa6, + 0x6d, 0x87, 0x0e, 0x19, 0x34, 0x14, 0xca, 0x48, 0xf5, 0xb6, 0x5e, 0x3c, 0xc8, 0x2a, 0x6e, 0xeb, + 0x2f, 0x02, 0xd8, 0x8e, 0xf3, 0x4e, 0x10, 0x39, 0xae, 0x9f, 0x15, 0xf8, 0x12, 0xc7, 0x7c, 0x13, + 0x66, 0xaf, 0x44, 0xc1, 0xf0, 0x96, 0x74, 0x3b, 0x7b, 0xe2, 0xfd, 0xb1, 0x7c, 0xb3, 0xab, 0xab, + 0x37, 0xbb, 0xe6, 0x37, 0xe1, 0x89, 0x8a, 0xe1, 0xe8, 0xac, 0x4d, 0xba, 0x74, 0xce, 0x3a, 0x11, + 0x21, 0x53, 0x77, 0xea, 0x26, 0xdb, 0x62, 0x29, 0x42, 0xe6, 0x77, 0x35, 0x78, 0xaa, 0xa2, 0x7e, + 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, + 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, 0x88, 0x5f, 0x68, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, + 0xcb, 0xd0, 0xa2, 0x07, 0x2b, 0xa2, 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x1e, 0xda, 0x58, 0xa2, 0x71, + 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x52, 0x22, 0x04, 0xcc, 0xaf, + 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0x9e, 0x29, 0x7c, + 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, - 0x31, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0x57, 0x7a, 0x28, 0x92, 0x49, - 0x28, 0x9b, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, + 0x85, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0xd7, 0x84, 0x28, 0x92, 0x49, + 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, - 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xea, 0x06, - 0xa7, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0x7c, 0x92, 0x9c, 0x1e, 0xf9, 0x7c, 0x71, 0xe4, 0xb5, 0x9f, - 0xd9, 0x83, 0x25, 0xf1, 0xbc, 0x65, 0xd7, 0x1e, 0xb8, 0x3e, 0x25, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, - 0xc8, 0x9e, 0xb7, 0xd1, 0x05, 0x96, 0xc4, 0xe1, 0xbf, 0xc7, 0x07, 0xc1, 0x5d, 0xf1, 0xbb, 0x4e, - 0xbf, 0x17, 0x1c, 0xf3, 0x6b, 0x60, 0x58, 0x2c, 0x0e, 0x03, 0x3f, 0x66, 0x92, 0xd6, 0x55, 0xe8, - 0x6c, 0xa6, 0x51, 0xc4, 0x7c, 0x3e, 0x55, 0xf6, 0xd6, 0x4b, 0x66, 0x71, 0xbd, 0xbd, 0x42, 0x2f, - 0x1d, 0xa0, 0x4b, 0x1c, 0xf3, 0x67, 0x0d, 0x68, 0xf7, 0xdc, 0x81, 0x6f, 0x7b, 0x16, 0x3b, 0x32, - 0x5e, 0x83, 0x16, 0x7d, 0xb2, 0x88, 0x48, 0xa9, 0x3b, 0xd0, 0xa5, 0xd1, 0xf4, 0x6d, 0x66, 0xb1, - 0xa3, 0x6b, 0x9f, 0xb0, 0x84, 0x8c, 0xf1, 0x36, 0xcc, 0xd1, 0x5f, 0xd7, 0xe9, 0x08, 0x4a, 0xd4, - 0xaf, 0xcf, 0x9d, 0xa2, 0x44, 0x8c, 0x26, 0x5d, 0xaa, 0x06, 0x6e, 0x50, 0x1f, 0x5b, 0x1a, 0x91, - 0x1e, 0x46, 0x1b, 0x44, 0x9d, 0x8f, 0x30, 0x88, 0x64, 0xb8, 0xb4, 0x8d, 0x87, 0x34, 0xa2, 0x52, - 0x8f, 0x96, 0xa6, 0xb3, 0x1c, 0x21, 0x4d, 0x32, 0x5c, 0xfa, 0x20, 0xf5, 0x07, 0xb7, 0x43, 0x71, - 0x76, 0x38, 0x5a, 0xfa, 0x1a, 0x0e, 0x13, 0xd2, 0x24, 0xc3, 0xa5, 0x23, 0x4c, 0xde, 0xe8, 0xf4, - 0x93, 0xa4, 0x29, 0xc7, 0x0b, 0x69, 0x92, 0xd9, 0x68, 0xc3, 0x74, 0x68, 0xdf, 0xf7, 0x02, 0xdb, - 0x31, 0xdf, 0x6f, 0x00, 0x64, 0x03, 0x63, 0x6c, 0x74, 0x14, 0x88, 0xd6, 0x4e, 0x85, 0x28, 0xf4, - 0xee, 0x4b, 0x20, 0xf5, 0xea, 0x41, 0xfa, 0xfc, 0xb8, 0x20, 0x91, 0xb6, 0x12, 0x4c, 0x97, 0x4b, - 0x30, 0xad, 0x9d, 0x0a, 0x93, 0x30, 0x4a, 0x00, 0x75, 0xb9, 0x04, 0xd4, 0xda, 0xa9, 0x40, 0x09, - 0x79, 0x01, 0xd5, 0xe5, 0x12, 0x54, 0x6b, 0xa7, 0x42, 0x25, 0xe4, 0x05, 0x58, 0x97, 0x4b, 0x60, - 0xad, 0x9d, 0x0a, 0x96, 0x90, 0xaf, 0xc2, 0xf5, 0xa1, 0x0e, 0xf3, 0xe8, 0x32, 0x7a, 0x1f, 0xe0, - 0xef, 0x07, 0x78, 0x1f, 0x80, 0xee, 0x52, 0x5f, 0x4b, 0xaa, 0x4c, 0xe3, 0x0b, 0xb0, 0x44, 0x0c, - 0x26, 0x5d, 0x86, 0xe8, 0x78, 0x19, 0x52, 0xfd, 0x01, 0xaf, 0x7f, 0xd2, 0x38, 0x09, 0x86, 0x5b, - 0x76, 0x62, 0x67, 0xcd, 0x57, 0xc1, 0x91, 0x2f, 0xe7, 0xa6, 0x2a, 0xef, 0xb1, 0xa3, 0x20, 0x18, - 0xe6, 0xb7, 0x6e, 0x82, 0xe2, 0x12, 0x89, 0x3b, 0x64, 0x41, 0x9a, 0x88, 0x34, 0x91, 0x91, 0xf4, - 0xa2, 0xc9, 0x71, 0x6d, 0xbc, 0xd2, 0x12, 0xcf, 0x7d, 0x72, 0x06, 0x66, 0xb6, 0xe2, 0x8a, 0x4e, - 0xbc, 0x97, 0x2e, 0x38, 0xa7, 0x5f, 0xa7, 0x99, 0xff, 0xd0, 0xe0, 0xdc, 0xae, 0x1d, 0x25, 0x6e, - 0xdf, 0x0d, 0x6d, 0x3f, 0xd9, 0x66, 0x89, 0x8d, 0x6b, 0x50, 0x9e, 0x4c, 0x6a, 0x0f, 0xf6, 0x64, - 0x72, 0x17, 0x16, 0x06, 0xea, 0xd7, 0xc5, 0x03, 0x7e, 0x18, 0x94, 0xc5, 0x95, 0xf7, 0x9f, 0x8d, - 0x07, 0x7e, 0xff, 0x69, 0xfe, 0x40, 0x87, 0x85, 0x52, 0xea, 0x3c, 0xb1, 0xee, 0xac, 0x03, 0xb8, - 0x79, 0x18, 0x9d, 0x70, 0xf8, 0xae, 0xc6, 0x9a, 0x25, 0x09, 0xd5, 0xdd, 0xd3, 0x35, 0x26, 0xbf, - 0xa7, 0xbb, 0x06, 0x9d, 0xb0, 0x00, 0xe9, 0x84, 0x6f, 0x9f, 0x1a, 0x28, 0x2d, 0x59, 0xd4, 0x7c, - 0x17, 0x96, 0x2a, 0x19, 0x0a, 0xaf, 0xe4, 0x82, 0x43, 0xe6, 0xe7, 0x57, 0x72, 0x9c, 0x90, 0x82, - 0x55, 0x2f, 0x07, 0xab, 0xe7, 0x1e, 0xcb, 0x0f, 0xcc, 0x05, 0x69, 0xfe, 0x50, 0x87, 0xe5, 0xfa, - 0xea, 0xf2, 0xb8, 0xba, 0x7b, 0x0f, 0xba, 0xa3, 0x32, 0xf9, 0x99, 0x79, 0xbd, 0x88, 0xee, 0xbc, - 0x0e, 0x3f, 0xae, 0xee, 0x3e, 0x97, 0x45, 0xb7, 0x54, 0xea, 0xcc, 0xdf, 0xe4, 0xfe, 0xc9, 0x3b, - 0x8d, 0xc7, 0xd4, 0x3f, 0xc6, 0x73, 0xb0, 0x48, 0xcb, 0x94, 0x1e, 0x76, 0x50, 0xe3, 0x5a, 0xe1, - 0x17, 0x99, 0x42, 0x2a, 0xfb, 0x67, 0x16, 0xb3, 0x7f, 0xd0, 0x32, 0x4c, 0xf2, 0xfe, 0xed, 0x63, - 0x85, 0x49, 0x11, 0x69, 0x52, 0x53, 0x23, 0x45, 0x5a, 0xde, 0x57, 0xfe, 0x3f, 0xd2, 0x4e, 0x8f, - 0xb4, 0xdc, 0x97, 0x52, 0x83, 0x67, 0x7e, 0x07, 0xe6, 0xb6, 0x98, 0xb7, 0x1d, 0x0f, 0xb2, 0x57, - 0xa2, 0x67, 0xfa, 0xa1, 0x58, 0x7e, 0x5b, 0x3a, 0x55, 0x79, 0x5b, 0x6a, 0x6e, 0xc0, 0xbc, 0x6c, - 0xc0, 0x24, 0xaf, 0x20, 0x37, 0x2e, 0x7c, 0x63, 0xe5, 0xd2, 0xf3, 0xf4, 0x1f, 0x95, 0xaf, 0x56, - 0x9c, 0xb8, 0xd7, 0xc2, 0xff, 0xb0, 0x7c, 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x96, - 0xc4, 0xbf, 0x74, 0x39, 0x00, 0x00, + 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0x3a, 0x08, + 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xb9, 0x32, 0xf2, 0x2a, 0xd1, + 0xec, 0xc1, 0x92, 0x78, 0x32, 0xb3, 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, + 0xc8, 0x9e, 0xcc, 0xd1, 0xa5, 0x98, 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, + 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, + 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, 0xde, 0x8f, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, + 0x03, 0x74, 0x89, 0x63, 0xfe, 0xb4, 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, + 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, 0xba, 0x03, 0x5d, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, + 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, + 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, + 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, + 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, + 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, + 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, + 0xe6, 0xfb, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, + 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, + 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, + 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, + 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd4, 0x61, 0x1e, 0x5d, 0x46, 0x77, 0xac, 0xfe, + 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x05, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, 0x60, + 0xd2, 0x65, 0x88, 0x8e, 0x97, 0x21, 0xd5, 0x0f, 0x78, 0xfd, 0x93, 0xc6, 0x49, 0x30, 0xdc, 0xb2, + 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x39, 0x37, 0x55, 0x79, 0xe3, 0x1d, 0x05, 0xc1, 0x30, + 0xbf, 0x75, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xaf, + 0xa4, 0x1c, 0xd7, 0xc6, 0x2b, 0x2d, 0xf1, 0x84, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xd1, 0x89, + 0x37, 0xd8, 0x05, 0xe7, 0xf4, 0xeb, 0x34, 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, + 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0x71, 0x0c, 0xca, 0x33, 0x4c, 0xed, 0xc1, 0x9e, 0x61, + 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x29, 0x6d, 0x3c, + 0xf0, 0x9b, 0x52, 0xf3, 0x07, 0x3a, 0x2c, 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, + 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, 0x59, 0x92, 0x50, 0xdd, 0x3d, 0x5d, 0x63, 0xf2, 0x7b, + 0xba, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, + 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, + 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x68, 0x5d, 0x90, 0xe6, 0x0f, 0x75, 0x58, 0xae, 0xcf, + 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, + 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xeb, 0xdc, 0x3f, 0x79, 0xa5, + 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xc3, 0x0e, 0x2a, 0x5c, 0x2b, 0xfc, + 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, 0xec, 0xef, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x58, + 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, + 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0xe5, + 0xe9, 0x99, 0x6e, 0x14, 0xcb, 0xef, 0xf3, 0xa6, 0xaa, 0xef, 0xf3, 0x36, 0x60, 0x5e, 0x36, 0x60, + 0x92, 0x97, 0x95, 0x1b, 0x17, 0xbe, 0xb1, 0x72, 0xe9, 0x79, 0xfa, 0x97, 0xe6, 0xab, 0x15, 0x27, + 0xee, 0xb5, 0xf0, 0x5f, 0x9b, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x59, 0x84, 0xce, + 0xc8, 0x39, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 43112b919..7c24f3078 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -198,6 +198,7 @@ message PullMessageBySeqListResp { message GetMaxAndMinSeqReq { repeated string groupIDList = 1; string userID = 2; + string operationID =3; } message MaxAndMinSeq{ uint32 maxSeq = 1; @@ -206,7 +207,9 @@ message MaxAndMinSeq{ message GetMaxAndMinSeqResp { uint32 maxSeq = 1; uint32 minSeq = 2; - map groupMaxAndMinSeq = 3; + int32 errCode = 3; + string errMsg = 4; + map groupMaxAndMinSeq = 5; } message UserSendMsgResp { From 7285e2b2c988aad062ff91ab74d07fe5473012cc Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 28 May 2022 18:10:08 +0800 Subject: [PATCH 264/752] add super group --- internal/msg_gateway/gate/logic.go | 48 +-- internal/msg_gateway/gate/validate.go | 12 + internal/msg_transfer/logic/init.go | 3 +- .../logic/offline_history_msg_handler.go | 313 ------------------ .../logic/online_history_msg_handler.go | 61 ++-- internal/rpc/msg/pull_message.go | 40 ++- internal/rpc/msg/send_msg.go | 87 +++-- pkg/common/constant/constant.go | 6 +- pkg/common/db/mongoModel.go | 7 + 9 files changed, 179 insertions(+), 398 deletions(-) delete mode 100644 internal/msg_transfer/logic/offline_history_msg_handler.go diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 884f5f842..af6fa025d 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -64,28 +64,37 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { } func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier, m.Data) - rpcReq := pbChat.GetMaxAndMinSeqReq{} - nReply := new(pbChat.GetMaxAndMinSeqResp) - rpcReq.UserID = m.SendID - rpcReq.OperationID = m.OperationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) - rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) - if err != nil { - log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err, rpcReq.String()) - nReply.ErrCode = 500 - nReply.ErrMsg = err.Error() - ws.getSeqResp(conn, m, nReply) + nReply := new(sdk_ws.GetMaxAndMinSeqResp) + isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq) + if isPass { + rpcReq := sdk_ws.GetMaxAndMinSeqReq{} + rpcReq.GroupIDList = data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList + rpcReq.UserID = m.SendID + rpcReq.OperationID = m.OperationID + log.Debug(m.OperationID, "Ws call success to getMaxAndMinSeq", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + msgClient := pbChat.NewChatClient(grpcConn) + rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) + if err != nil { + log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err.Error(), rpcReq.String()) + nReply.ErrCode = 500 + nReply.ErrMsg = err.Error() + ws.getSeqResp(conn, m, nReply) + } else { + log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) + ws.getSeqResp(conn, m, rpcReply) + } } else { - log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) - ws.getSeqResp(conn, m, rpcReply) + nReply.ErrCode = errCode + nReply.ErrMsg = errMsg + ws.getSeqResp(conn, m, nReply) + } + } -func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *pbChat.GetMaxAndMinSeqResp) { - var mReplyData sdk_ws.GetMaxAndMinSeqResp - mReplyData.MaxSeq = pb.GetMaxSeq() - mReplyData.MinSeq = pb.GetMinSeq() - b, _ := proto.Marshal(&mReplyData) +func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeqResp) { + log.Debug(m.OperationID, "getSeqResp come here ", pb.String()) + b, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, MsgIncr: m.MsgIncr, @@ -146,6 +155,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { sendMsgAllCountLock.Lock() sendMsgAllCount++ sendMsgAllCountLock.Unlock() + //stat.GaugeVecApiMethod.WithLabelValues("ws_send_message_count").Inc() log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) diff --git a/internal/msg_gateway/gate/validate.go b/internal/msg_gateway/gate/validate.go index 31198a918..0f4950728 100644 --- a/internal/msg_gateway/gate/validate.go +++ b/internal/msg_gateway/gate/validate.go @@ -59,6 +59,18 @@ type SeqListData struct { func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, errMsg string, returnData interface{}) { switch r { + case constant.WSGetNewestSeq: + data := open_im_sdk.GetMaxAndMinSeqReq{} + if err := proto.Unmarshal(m.Data, &data); err != nil { + log.Error("", "Decode Data struct err", err.Error(), r) + return false, 203, err.Error(), nil + } + if err := validate.Struct(data); err != nil { + log.Error("", "data args validate err", err.Error(), r) + return false, 204, err.Error(), nil + + } + return true, 0, "", data case constant.WSSendMsg: data := open_im_sdk.MsgData{} if err := proto.Unmarshal(m.Data, &data); err != nil { diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index f8c424dcc..8829906e4 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -14,14 +14,13 @@ const OnlineTopicBusy = 1 const OnlineTopicVacancy = 0 const Msg = 2 const ConsumerMsgs = 3 -const UserMessages = 4 +const AggregationMessages = 4 const MongoMessages = 5 const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler historyCH OnlineHistoryConsumerHandler - offlineHistoryCH OfflineHistoryConsumerHandler producer *kafka.Producer cmdCh chan Cmd2Value onlineTopicStatus int diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go deleted file mode 100644 index b7ee3b2e3..000000000 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ /dev/null @@ -1,313 +0,0 @@ -package logic - -import ( - "Open_IM/pkg/common/config" - "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" - kfk "Open_IM/pkg/common/kafka" - "Open_IM/pkg/common/log" - pbMsg "Open_IM/pkg/proto/chat" - "Open_IM/pkg/utils" - "github.com/Shopify/sarama" - "github.com/golang/protobuf/proto" - "time" -) - -type OfflineHistoryConsumerHandler struct { - msgHandle map[string]fcb - historyConsumerGroup *kfk.MConsumerGroup - cmdCh chan Cmd2Value - msgCh chan Cmd2Value - chArrays [ChannelNum]chan Cmd2Value - msgDistributionCh chan Cmd2Value -} - -func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { - mc.msgHandle = make(map[string]fcb) - mc.msgDistributionCh = make(chan Cmd2Value) //no buffer channel - go mc.MessagesDistributionHandle() - mc.cmdCh = cmdCh - mc.msgCh = make(chan Cmd2Value, 1000) - for i := 0; i < ChannelNum; i++ { - mc.chArrays[i] = make(chan Cmd2Value, 1000) - go mc.Run(i) - } - if config.Config.ReliableStorage { - mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2Mongo - } else { - mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2MongoLowReliability - - } - mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, - OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschatOffline.Topic}, - config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline) - -} -func (och *OfflineHistoryConsumerHandler) Run(channelID int) { - for { - select { - case cmd := <-och.chArrays[channelID]: - switch cmd.Cmd { - case UserMessages: - msgChannelValue := cmd.Value.(MsgChannelValue) - msgList := msgChannelValue.msgList - triggerID := msgChannelValue.triggerID - storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - pushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) - for _, v := range msgList { - log.Debug(triggerID, "msg come to storage center", v.String()) - isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) - isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) - if isHistory { - storageMsgList = append(storageMsgList, v) - } - if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - pushMsgList = append(pushMsgList, v) - } - } - - //switch msgChannelValue.msg.MsgData.SessionType { - //case constant.SingleChatType: - //case constant.GroupChatType: - //case constant.NotificationChatType: - //default: - // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - // return - //} - - err, _ := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) - if err != nil { - singleMsgFailedCount += uint64(len(storageMsgList)) - log.NewError(triggerID, "single data insert to mongo err", err.Error(), storageMsgList) - } else { - singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount += uint64(len(storageMsgList)) - singleMsgSuccessCountMutex.Unlock() - for _, v := range pushMsgList { - sendMessageToPush(v, msgChannelValue.userID) - } - - } - } - } - } -} -func (och *OfflineHistoryConsumerHandler) MessagesDistributionHandle() { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) - for { - select { - case cmd := <-och.msgDistributionCh: - switch cmd.Cmd { - case ConsumerMsgs: - triggerChannelValue := cmd.Value.(TriggerChannelValue) - triggerID := triggerChannelValue.triggerID - consumerMessages := triggerChannelValue.cmsgList - //Aggregation map[userid]message list - log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) - for i := 0; i < len(consumerMessages); i++ { - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) - if err != nil { - log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) - return - } - log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String()) - if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { - oldM = append(oldM, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM - } else { - m := make([]*pbMsg.MsgDataToMQ, 0, 100) - m = append(m, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = m - } - } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) - for userID, v := range UserAggregationMsgs { - if len(v) >= 0 { - channelID := getHashCode(userID) % ChannelNum - go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} - }(channelID, userID, v) - } - } - } - } - } - -} -func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { - msg := cMsg.Value - now := time.Now() - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(msg, &msgFromMQ) - if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) - return - } - operationID := msgFromMQ.OperationID - log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) - //Control whether to store offline messages (mongo) - isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - //Control whether to store history messages (mysql) - isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) - isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - switch msgFromMQ.MsgData.SessionType { - case constant.SingleChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgKey, &msgFromMQ) - if err != nil { - singleMsgFailedCount++ - log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - return - } - singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount++ - singleMsgSuccessCountMutex.Unlock() - log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveSingleMsg cost time ", time.Since(now)) - case constant.GroupChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) - if err != nil { - log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) - return - } - groupMsgCount++ - } - go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) - log.NewDebug(operationID, "saveGroupMsg cost time ", time.Since(now)) - - case constant.NotificationChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgKey, &msgFromMQ) - if err != nil { - log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - return - } - log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) - default: - log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - return - } - sess.MarkMessage(cMsg, "") - log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) -} -func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { - msg := cMsg.Value - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(msg, &msgFromMQ) - if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) - return - } - operationID := msgFromMQ.OperationID - log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) - //Control whether to store offline messages (mongo) - isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - //mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} - //err := saveUserChat(msgKey, &msgFromMQ) - //if err != nil { - // singleMsgFailedCount++ - // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - // return - //} - //singleMsgSuccessCountMutex.Lock() - //singleMsgSuccessCount++ - //singleMsgSuccessCountMutex.Unlock() - //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } else { - if !(!isSenderSync && msgKey == msgFromMQ.MsgData.SendID) { - go sendMessageToPush(&msgFromMQ, msgKey) - } - } -} - -func (OfflineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } -func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } - -//func (mc *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, -// claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group -// //log.NewDebug("", "offline new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) -// //for msg := range claim.Messages() { -// // log.NewDebug("", "kafka get info to delay mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "offline") -// // //mc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) -// //} -// for msg := range claim.Messages() { -// if GetOnlineTopicStatus() == OnlineTopicVacancy { -// log.NewDebug("", "vacancy offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) -// } else { -// select { -// case <-mc.cmdCh: -// log.NewDebug("", "cmd offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// case <-time.After(time.Millisecond * time.Duration(100)): -// log.NewDebug("", "timeout offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// } -// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) -// } -// } -// -// return nil -//} -func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, - claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group - log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 0, 500) - t := time.NewTicker(time.Duration(500) * time.Millisecond) - var triggerID string - for msg := range claim.Messages() { - //och.TriggerCmd(OnlineTopicBusy) - cMsg = append(cMsg, msg) - select { - case <-t.C: - if len(cMsg) >= 0 { - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(cMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} - sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] - log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) - } - default: - if len(cMsg) >= 500 { - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "length trigger msg consumer start", len(cMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} - sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) - } - - } - log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) - - } - return nil -} diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index fb5b33ce9..62f0ea0e8 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -22,10 +22,10 @@ import ( ) type MsgChannelValue struct { - userID string - triggerID string - msgList []*pbMsg.MsgDataToMQ - lastSeq uint64 + aggregationID string //maybe userID or super groupID + triggerID string + msgList []*pbMsg.MsgDataToMQ + lastSeq uint64 } type TriggerChannelValue struct { triggerID string @@ -98,13 +98,13 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { select { case cmd := <-och.chArrays[channelID]: switch cmd.Cmd { - case UserMessages: + case AggregationMessages: msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - notStoragepushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) + notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) @@ -113,9 +113,10 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { storageMsgList = append(storageMsgList, v) //log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) } else { - if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - notStoragepushMsgList = append(notStoragepushMsgList, v) + if !(!isSenderSync && msgChannelValue.aggregationID == v.MsgData.SendID) { + notStoragePushMsgList = append(notStoragePushMsgList, v) } + } } @@ -128,8 +129,8 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) // return //} - log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragepushMsgList)) - err, lastSeq := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) + log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragePushMsgList)) + err, lastSeq := saveUserChatList(msgChannelValue.aggregationID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) log.NewError(triggerID, "single data insert to redis err", err.Error(), storageMsgList) @@ -137,28 +138,28 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) + och.SendMessageToMongoCH(msgChannelValue.aggregationID, triggerID, storageMsgList, lastSeq) go func(push, storage []*pbMsg.MsgDataToMQ) { for _, v := range storage { - sendMessageToPush(v, msgChannelValue.userID) + sendMessageToPush(v, msgChannelValue.aggregationID) } for _, x := range push { - sendMessageToPush(x, msgChannelValue.userID) + sendMessageToPush(x, msgChannelValue.aggregationID) } - }(notStoragepushMsgList, storageMsgList) + }(notStoragePushMsgList, storageMsgList) } } } } } -func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { - hashCode := getHashCode(userID) +func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { + hashCode := getHashCode(aggregationID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} + och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { for { @@ -169,9 +170,9 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID - userID := msgChannelValue.userID + aggregationID := msgChannelValue.aggregationID lastSeq := msgChannelValue.lastSeq - err := db.DB.BatchInsertChat2DB(userID, msgList, triggerID, lastSeq) + err := db.DB.BatchInsertChat2DB(aggregationID, msgList, triggerID, lastSeq) if err != nil { log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) } @@ -202,7 +203,7 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { for { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) + aggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) select { case cmd := <-och.msgDistributionCh: switch cmd.Cmd { @@ -220,23 +221,23 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { return } log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) - if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + if oldM, ok := aggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + aggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { m := make([]*pbMsg.MsgDataToMQ, 0, 100) m = append(m, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = m + aggregationMsgs[string(consumerMessages[i].Key)] = m } } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) - for userID, v := range UserAggregationMsgs { + log.Debug(triggerID, "generate map list users len", len(aggregationMsgs)) + for aggregationID, v := range aggregationMsgs { if len(v) >= 0 { - hashCode := getHashCode(userID) + hashCode := getHashCode(aggregationID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} + och.chArrays[channelID] <- Cmd2Value{Cmd: AggregationMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: v, triggerID: triggerID}} //}(channelID, userID, v) } } diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 1811d3847..d9bb49344 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -6,18 +6,25 @@ import ( commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" - pbMsg "Open_IM/pkg/proto/chat" open_im_sdk "Open_IM/pkg/proto/sdk_ws" ) -func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeqReq) (*pbMsg.GetMaxAndMinSeqResp, error) { +func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAndMinSeqReq) (*open_im_sdk.GetMaxAndMinSeqResp, error) { log.NewInfo(in.OperationID, "rpc getMaxAndMinSeq is arriving", in.String()) + resp := new(open_im_sdk.GetMaxAndMinSeqResp) + m := make(map[string]*open_im_sdk.MaxAndMinSeq) //seq, err := model.GetBiggestSeqFromReceive(in.UserID) maxSeq, err1 := commonDB.DB.GetUserMaxSeq(in.UserID) minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) - resp := new(pbMsg.GetMaxAndMinSeqResp) if err1 == nil { resp.MaxSeq = uint32(maxSeq) + for _, v := range in.GroupIDList { + x := new(open_im_sdk.MaxAndMinSeq) + maxSeq, _ := commonDB.DB.GetUserMaxSeq(v) + x.MaxSeq = uint32(maxSeq) + m[v] = x + } + resp.GroupMaxAndMinSeq = m } else if err1 == redis.ErrNil { resp.MaxSeq = 0 } else { @@ -39,6 +46,7 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) { log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String()) resp := new(open_im_sdk.PullMessageBySeqListResp) + m := make(map[string]*open_im_sdk.MsgDataList) //msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID) if err != nil { @@ -60,6 +68,32 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull } else { resp.List = redisMsgList } + for k, v := range in.GroupSeqList { + x := new(open_im_sdk.MsgDataList) + redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(k, v.SeqList, in.OperationID) + if err != nil { + if err != redis.ErrNil { + log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) + } else { + log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) + } + msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(k, failedSeqList, in.OperationID) + if err1 != nil { + log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) + resp.ErrCode = 201 + resp.ErrMsg = err.Error() + return resp, nil + } else { + redisMsgList = append(redisMsgList, msgList...) + x.MsgDataList = redisMsgList + m[k] = x + } + } else { + x.MsgDataList = redisMsgList + m[k] = x + } + } + resp.GroupMsgDataList = m //respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID) //respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat) return resp, nil diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index a97dd84ed..00a20ae13 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -50,46 +50,49 @@ type MsgCallBackResp struct { } func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { - if data.MsgData.SessionType == constant.GroupChatType { - return true, 0, "" - } - log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) - reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) - cacheClient := cacheRpc.NewCacheClient(etcdConn) - cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) - if err != nil { - log.NewError(data.OperationID, "GetBlackIDListFromCache rpc call failed ", err.Error()) - } else { - if cacheResp.CommonResp.ErrCode != 0 { - log.NewError(data.OperationID, "GetBlackIDListFromCache rpc logic call failed ", cacheResp.String()) - } else { - if utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { - return false, 600, "in black list" - } - } - } - log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) - if config.Config.MessageVerify.FriendVerify { - reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} + if data.MsgData.SessionType == constant.SingleChatType { + log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) + reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) cacheClient := cacheRpc.NewCacheClient(etcdConn) - cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) + cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) if err != nil { - log.NewError(data.OperationID, "GetFriendIDListFromCache rpc call failed ", err.Error()) + log.NewError(data.OperationID, "GetBlackIDListFromCache rpc call failed ", err.Error()) } else { if cacheResp.CommonResp.ErrCode != 0 { - log.NewError(data.OperationID, "GetFriendIDListFromCache rpc logic call failed ", cacheResp.String()) + log.NewError(data.OperationID, "GetBlackIDListFromCache rpc logic call failed ", cacheResp.String()) } else { - if !utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { - return false, 601, "not friend" + if utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { + return false, 600, "in black list" } } } - return true, 0, "" + log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) + if config.Config.MessageVerify.FriendVerify { + reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + cacheClient := cacheRpc.NewCacheClient(etcdConn) + cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) + if err != nil { + log.NewError(data.OperationID, "GetFriendIDListFromCache rpc call failed ", err.Error()) + } else { + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(data.OperationID, "GetFriendIDListFromCache rpc logic call failed ", cacheResp.String()) + } else { + if !utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { + return false, 601, "not friend" + } + } + } + return true, 0, "" + } else { + return true, 0, "" + } + } else { return true, 0, "" } + } func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { msg.ServerMsgID = GetMsgID(msg.SendID) @@ -368,6 +371,34 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.Debug(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) + case constant.SuperGroupChatType: + // callback + callbackResp := callbackBeforeSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSuperGroupMsg resp: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + if callbackResp.ErrCode == 0 { + callbackResp.ErrCode = 201 + } + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSuperGroupMsg result", "end rpc and return", callbackResp) + return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) + } + msgToMQSingle.MsgData = pb.MsgData + log.NewInfo(msgToMQSingle.OperationID, msgToMQSingle) + err1 := rpc.sendMsgToKafka(&msgToMQSingle, msgToMQSingle.MsgData.GroupID, constant.OnlineStatus) + if err1 != nil { + log.NewError(msgToMQSingle.OperationID, "kafka send msg err:RecvID", msgToMQSingle.MsgData.RecvID, msgToMQSingle.String()) + return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) + } + + // callback + callbackResp = callbackAfterSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendSuperGroupMsg resp: ", callbackResp) + } + return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) + default: return returnMsg(&replay, pb, 203, "unknown sessionType", "", 0) } diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 5878c3851..05906924a 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -105,9 +105,9 @@ const ( SysMsgType = 200 //SessionType - SingleChatType = 1 - GroupChatType = 2 - + SingleChatType = 1 + GroupChatType = 2 + SuperGroupChatType = 3 NotificationChatType = 4 //token NormalToken = 0 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index fb87df4e0..97d8885a6 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -949,6 +949,10 @@ func getSeqUid(uid string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return indexGen(uid, seqSuffix) } +func getSeqSuperGroupID(groupID string, seq uint32) string { + seqSuffix := seq / singleGocMsgNum + return superGroupIndexGen(groupID, seqSuffix) +} func GetSeqUid(uid string, seq uint32) string { return getSeqUid(uid, seq) @@ -986,3 +990,6 @@ func isNotContainInt32(target uint32, List []uint32) bool { func indexGen(uid string, seqSuffix uint32) string { return uid + ":" + strconv.FormatInt(int64(seqSuffix), 10) } +func superGroupIndexGen(groupID string, seqSuffix uint32) string { + return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) +} From c0a3bdcf990ab67051cb004dade0803dae5dcf55 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Sun, 29 May 2022 19:44:22 +0800 Subject: [PATCH 265/752] k8s --- internal/rpc/admin_cms/admin_cms.go | 4 +++- internal/rpc/auth/auth.go | 2 +- internal/rpc/cache/cache.go | 5 +++-- internal/rpc/conversation/conversaion.go | 1 + internal/rpc/friend/firend.go | 5 +++-- internal/rpc/group/group.go | 1 + internal/rpc/message_cms/message_cms.go | 1 + internal/rpc/office/office.go | 5 +++-- internal/rpc/organization/organization.go | 6 ++++-- 9 files changed, 20 insertions(+), 10 deletions(-) diff --git a/internal/rpc/admin_cms/admin_cms.go b/internal/rpc/admin_cms/admin_cms.go index e8084836f..ed744b312 100644 --- a/internal/rpc/admin_cms/admin_cms.go +++ b/internal/rpc/admin_cms/admin_cms.go @@ -10,10 +10,11 @@ import ( pbAdminCMS "Open_IM/pkg/proto/admin_cms" "Open_IM/pkg/utils" "context" - "google.golang.org/grpc" "net" "strconv" "strings" + + "google.golang.org/grpc" ) type adminCMSServer struct { @@ -62,6 +63,7 @@ func (s *adminCMSServer) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 09b903c68..44c7ab82d 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -104,7 +104,7 @@ func (rpc *rpcAuth) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } - + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10) if err != nil { log.NewError(operationID, "RegisterEtcd failed ", err.Error(), diff --git a/internal/rpc/cache/cache.go b/internal/rpc/cache/cache.go index e42ab22e7..2d58d190a 100644 --- a/internal/rpc/cache/cache.go +++ b/internal/rpc/cache/cache.go @@ -11,11 +11,12 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "google.golang.org/grpc" "net" "strconv" "strings" "sync" + + "google.golang.org/grpc" ) type cacheServer struct { @@ -71,7 +72,7 @@ func (s *cacheServer) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } - + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index 84e0b302a..3c68e5c46 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -164,6 +164,7 @@ func (rpc *rpcConversation) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error(), diff --git a/internal/rpc/friend/firend.go b/internal/rpc/friend/firend.go index d85ccbc55..313b2becf 100644 --- a/internal/rpc/friend/firend.go +++ b/internal/rpc/friend/firend.go @@ -15,11 +15,12 @@ import ( sdkws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "google.golang.org/grpc" "net" "strconv" "strings" "time" + + "google.golang.org/grpc" ) type friendServer struct { @@ -69,7 +70,7 @@ func (s *friendServer) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } - + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error(), s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 57faf3fe2..05c226378 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -71,6 +71,7 @@ func (s *groupServer) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("", "RegisterEtcd failed ", err.Error()) diff --git a/internal/rpc/message_cms/message_cms.go b/internal/rpc/message_cms/message_cms.go index e35755ef2..4f983e787 100644 --- a/internal/rpc/message_cms/message_cms.go +++ b/internal/rpc/message_cms/message_cms.go @@ -70,6 +70,7 @@ func (s *messageCMSServer) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 753fca492..b75c97edd 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -14,13 +14,14 @@ import ( pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "google.golang.org/grpc" "net" "strconv" "strings" "sync" "time" "unsafe" + + "google.golang.org/grpc" ) type officeServer struct { @@ -77,7 +78,7 @@ func (s *officeServer) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } - + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error()) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 35a67b04c..e952c6894 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -9,17 +9,18 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" - "Open_IM/pkg/proto/auth" + pbAuth "Open_IM/pkg/proto/auth" groupRpc "Open_IM/pkg/proto/group" rpc "Open_IM/pkg/proto/organization" open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "google.golang.org/grpc" "net" "strconv" "strings" "time" + + "google.golang.org/grpc" ) type organizationServer struct { @@ -67,6 +68,7 @@ func (s *organizationServer) Run() { log.Error("", "GetLocalIP failed ", err.Error()) } } + log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10) if err != nil { log.NewError("", "RegisterEtcd failed ", err.Error()) From fe9f86b432357492fcb17e43ab3ac56445b2d42f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 11:55:27 +0800 Subject: [PATCH 266/752] superGroup --- cmd/open_im_api/main.go | 12 +- internal/api/group/super_group.go | 38 +++ internal/rpc/group/group.go | 14 - internal/rpc/group/super_group.go | 20 ++ pkg/base_info/super_group.go | 9 + pkg/common/db/mongoModel.go | 101 +++++- pkg/proto/group/group.pb.go | 542 +++++++++++++++++++----------- pkg/proto/group/group.proto | 11 +- 8 files changed, 516 insertions(+), 231 deletions(-) create mode 100644 internal/api/group/super_group.go create mode 100644 internal/rpc/group/super_group.go create mode 100644 pkg/base_info/super_group.go diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 84ea9b705..cd9cf707b 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -70,7 +70,7 @@ func main() { { groupRouterGroup.POST("/create_group", group.CreateGroup) //1 groupRouterGroup.POST("/set_group_info", group.SetGroupInfo) //1 - groupRouterGroup.POST("join_group", group.JoinGroup) //1 + groupRouterGroup.POST("/join_group", group.JoinGroup) //1 groupRouterGroup.POST("/quit_group", group.QuitGroup) //1 groupRouterGroup.POST("/group_application_response", group.ApplicationGroupResponse) //1 groupRouterGroup.POST("/transfer_group", group.TransferGroupOwner) //1 @@ -82,15 +82,17 @@ func main() { groupRouterGroup.POST("/get_group_all_member_list", group.GetGroupAllMemberList) //1 groupRouterGroup.POST("/get_group_members_info", group.GetGroupMembersInfo) //1 groupRouterGroup.POST("/invite_user_to_group", group.InviteUserToGroup) //1 - groupRouterGroup.POST("/get_joined_group_list", group.GetJoinedGroupList) //1 - groupRouterGroup.POST("/dismiss_group", group.DismissGroup) // + groupRouterGroup.POST("/get_joined_group_list", group.GetJoinedGroupList) + groupRouterGroup.POST("/dismiss_group", group.DismissGroup) // groupRouterGroup.POST("/mute_group_member", group.MuteGroupMember) groupRouterGroup.POST("/cancel_mute_group_member", group.CancelMuteGroupMember) //MuteGroup groupRouterGroup.POST("/mute_group", group.MuteGroup) groupRouterGroup.POST("/cancel_mute_group", group.CancelMuteGroup) - groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname) - + } + superGroupRouterGroup := r.Group("/super_group") + { + superGroupRouterGroup.POST("/get_joined_super_group_list", group.GetJoinedSuperGroupList) } //certificate authRouterGroup := r.Group("/auth") diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go new file mode 100644 index 000000000..55f058d8c --- /dev/null +++ b/internal/api/group/super_group.go @@ -0,0 +1,38 @@ +package group + +import ( + jsonData "Open_IM/internal/utils" + api "Open_IM/pkg/base_info" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/log" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + rpc "Open_IM/pkg/proto/group" + "Open_IM/pkg/utils" + "context" + "github.com/gin-gonic/gin" + "net/http" + "strings" +) + +func GetJoinedSuperGroupList(c *gin.Context) { + req := api.GetJoinedSuperGroupReq{} + if err := c.BindJSON(&req); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + client := rpc.NewGroupClient(etcdConn) + rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), reqPb.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + return + } + GroupListResp := api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList} + GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList) + log.NewInfo(req.OperationID, "GetJoinedGroupList api return ", GroupListResp) + c.JSON(http.StatusOK, GroupListResp) +} diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 2fe567b4e..46792cb93 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -410,21 +410,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro //log.Debug(req.OperationID, "cp value: ", node) resp.MemberList = append(resp.MemberList, &node) } - } else { - groupInfo, err := db.DB.GetSuperGroup(req.GroupID) - if err != nil { - resp.ErrCode = constant.ErrDB.ErrCode - resp.ErrMsg = constant.ErrDB.ErrMsg - log.NewError(req.OperationID, "GetSuperGroup failed,", err.Error(), req.GroupID) - return &resp, nil - } - for _, userID := range groupInfo.MemberIDList { - var node open_im_sdk.GroupMemberFullInfo - node.UserID = userID - resp.MemberList = append(resp.MemberList, &node) - } } - log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String()) return &resp, nil } diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go new file mode 100644 index 000000000..9819664ef --- /dev/null +++ b/internal/rpc/group/super_group.go @@ -0,0 +1,20 @@ +package group + +import ( + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + pbGroup "Open_IM/pkg/proto/group" + "Open_IM/pkg/utils" + "context" +) + +func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup.GetJoinedSuperGroupListReq) (*pbGroup.GetJoinedSuperGroupListResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbGroup.GetJoinedSuperGroupListResp{} + _, err := db.DB.GetSuperGroupByUserID(req.UserID) + if err != nil { + return resp, nil + } + log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return resp, nil +} diff --git a/pkg/base_info/super_group.go b/pkg/base_info/super_group.go new file mode 100644 index 000000000..4c01789cf --- /dev/null +++ b/pkg/base_info/super_group.go @@ -0,0 +1,9 @@ +package base_info + +type GetJoinedSuperGroupReq struct { + GetJoinedGroupListReq +} + +type GetJoinedSuperGroupResp struct { + GetJoinedGroupListResp +} diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index fb87df4e0..6784012a9 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -11,6 +11,7 @@ import ( "errors" "fmt" "github.com/gogo/protobuf/sortkeys" + "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "math/rand" "sync" @@ -30,6 +31,7 @@ const cSendLog = "send_log" const cWorkMoment = "work_moment" const cCommentMsg = "comment_msg" const cSuperGroup = "super_group" +const cUserToSuperGroup = "user_to_super_group" const singleGocMsgNum = 5000 func GetSingleGocMsgNum() int { @@ -880,18 +882,22 @@ func (d *DataBases) GetUserFriendWorkMoments(showNumber, pageNumber int32, userI } type SuperGroup struct { - GroupID string `bson:"group_id"` - MemberNumCount int `bson:"member_num_count"` - MemberIDList []string `bson:"member_id_list"` + GroupID string `bson:"group_id"` + //MemberNumCount int `bson:"member_num_count"` + MemberIDList []string `bson:"member_id_list"` +} + +type UserToSuperGroup struct { + UserID string `bson:"user_id"` + GroupIDList []string `bson:"group_id_list"` } func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, memberNumCount int) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) superGroup := SuperGroup{ - GroupID: groupID, - MemberNumCount: memberNumCount, - MemberIDList: initMemberIDList, + GroupID: groupID, + MemberIDList: initMemberIDList, } _, err := c.InsertOne(ctx, superGroup) return err @@ -908,21 +914,98 @@ func (d *DataBases) GetSuperGroup(groupID string) (SuperGroup, error) { func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": bson.M{"$each": userIDList}}}) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + if err != nil { + return utils.Wrap(err, "start transaction failed") + } + _, err = c.UpdateOne(sCtx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": bson.M{"$each": userIDList}}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) + var users []UserToSuperGroup + for _, v := range userIDList { + users = append(users, UserToSuperGroup{ + UserID: v, + }) + } + _, err = c.UpdateMany(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) return err } func (d *DataBases) RemoverUserFromSuperGroup(groupID string, userIDList []string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + _, err = c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + err = d.RemoveGroupFromUser(ctx, sCtx, groupID, userIDList) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) return err } +func (d *DataBases) GetSuperGroupByUserID(userID string) (UserToSuperGroup, error) { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) + var user UserToSuperGroup + return user, c.FindOne(ctx, bson.M{"user_id": userID}).Decode(&user) +} + func (d *DataBases) DeleteSuperGroup(groupID string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.DeleteOne(ctx, bson.M{"group_id": groupID}) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + superGroup := &SuperGroup{} + result := c.FindOneAndDelete(sCtx, bson.M{"group_id": groupID}) + err = result.Decode(superGroup) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + if err = d.RemoveGroupFromUser(ctx, sCtx, groupID, superGroup.MemberIDList); err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) + return nil +} + +func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID string, userID []string) error { + var users []UserToSuperGroup + for _, v := range userID { + users = append(users, UserToSuperGroup{ + UserID: v, + }) + } + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": groupID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + if err != nil { + return utils.Wrap(err, "UpdateOne transaction failed") + } return err } diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index db8bb328b..80ef2dfc4 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{0} + return fileDescriptor_group_d7fc3287ce9ff601, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +82,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{1} + return fileDescriptor_group_d7fc3287ce9ff601, []int{1} } func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) @@ -131,7 +131,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{2} + return fileDescriptor_group_d7fc3287ce9ff601, []int{2} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -199,7 +199,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{3} + return fileDescriptor_group_d7fc3287ce9ff601, []int{3} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -253,7 +253,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{4} + return fileDescriptor_group_d7fc3287ce9ff601, []int{4} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -307,7 +307,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{5} + return fileDescriptor_group_d7fc3287ce9ff601, []int{5} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -361,7 +361,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{6} + return fileDescriptor_group_d7fc3287ce9ff601, []int{6} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -413,7 +413,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{7} + return fileDescriptor_group_d7fc3287ce9ff601, []int{7} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -453,7 +453,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{8} + return fileDescriptor_group_d7fc3287ce9ff601, []int{8} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -507,7 +507,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{9} + return fileDescriptor_group_d7fc3287ce9ff601, []int{9} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -561,7 +561,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{10} + return fileDescriptor_group_d7fc3287ce9ff601, []int{10} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -614,7 +614,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{11} + return fileDescriptor_group_d7fc3287ce9ff601, []int{11} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -663,7 +663,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{12} + return fileDescriptor_group_d7fc3287ce9ff601, []int{12} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -729,7 +729,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{13} + return fileDescriptor_group_d7fc3287ce9ff601, []int{13} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -770,7 +770,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{14} + return fileDescriptor_group_d7fc3287ce9ff601, []int{14} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -829,7 +829,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{15} + return fileDescriptor_group_d7fc3287ce9ff601, []int{15} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -872,7 +872,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{16} + return fileDescriptor_group_d7fc3287ce9ff601, []int{16} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -945,7 +945,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{17} + return fileDescriptor_group_d7fc3287ce9ff601, []int{17} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -985,7 +985,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{18} + return fileDescriptor_group_d7fc3287ce9ff601, []int{18} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -1037,7 +1037,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{19} + return fileDescriptor_group_d7fc3287ce9ff601, []int{19} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -1079,7 +1079,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{20} + return fileDescriptor_group_d7fc3287ce9ff601, []int{20} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -1148,7 +1148,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{} func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{21} + return fileDescriptor_group_d7fc3287ce9ff601, []int{21} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -1210,7 +1210,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{} func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{22} + return fileDescriptor_group_d7fc3287ce9ff601, []int{22} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -1271,7 +1271,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{23} + return fileDescriptor_group_d7fc3287ce9ff601, []int{23} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -1327,7 +1327,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{24} + return fileDescriptor_group_d7fc3287ce9ff601, []int{24} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1394,7 +1394,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} } func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (*Id2Result) ProtoMessage() {} func (*Id2Result) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{25} + return fileDescriptor_group_d7fc3287ce9ff601, []int{25} } func (m *Id2Result) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Id2Result.Unmarshal(m, b) @@ -1441,7 +1441,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{26} + return fileDescriptor_group_d7fc3287ce9ff601, []int{26} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1495,7 +1495,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{27} + return fileDescriptor_group_d7fc3287ce9ff601, []int{27} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1549,7 +1549,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{} func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{28} + return fileDescriptor_group_d7fc3287ce9ff601, []int{28} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1605,7 +1605,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{29} + return fileDescriptor_group_d7fc3287ce9ff601, []int{29} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1673,7 +1673,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{30} + return fileDescriptor_group_d7fc3287ce9ff601, []int{30} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1727,7 +1727,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{31} + return fileDescriptor_group_d7fc3287ce9ff601, []int{31} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1781,7 +1781,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{32} + return fileDescriptor_group_d7fc3287ce9ff601, []int{32} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1835,7 +1835,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{33} + return fileDescriptor_group_d7fc3287ce9ff601, []int{33} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1889,7 +1889,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{34} + return fileDescriptor_group_d7fc3287ce9ff601, []int{34} } func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) @@ -1943,7 +1943,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{35} + return fileDescriptor_group_d7fc3287ce9ff601, []int{35} } func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) @@ -1996,7 +1996,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{36} + return fileDescriptor_group_d7fc3287ce9ff601, []int{36} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -2043,7 +2043,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{37} + return fileDescriptor_group_d7fc3287ce9ff601, []int{37} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -2096,7 +2096,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{38} + return fileDescriptor_group_d7fc3287ce9ff601, []int{38} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -2143,7 +2143,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{39} + return fileDescriptor_group_d7fc3287ce9ff601, []int{39} } func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) @@ -2194,7 +2194,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{} func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{40} + return fileDescriptor_group_d7fc3287ce9ff601, []int{40} } func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) @@ -2228,7 +2228,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{41} + return fileDescriptor_group_d7fc3287ce9ff601, []int{41} } func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) @@ -2286,7 +2286,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{42} + return fileDescriptor_group_d7fc3287ce9ff601, []int{42} } func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) @@ -2318,7 +2318,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{43} + return fileDescriptor_group_d7fc3287ce9ff601, []int{43} } func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) @@ -2362,7 +2362,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{44} + return fileDescriptor_group_d7fc3287ce9ff601, []int{44} } func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) @@ -2394,7 +2394,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{45} + return fileDescriptor_group_d7fc3287ce9ff601, []int{45} } func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) @@ -2439,7 +2439,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{46} + return fileDescriptor_group_d7fc3287ce9ff601, []int{46} } func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) @@ -2480,7 +2480,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{47} + return fileDescriptor_group_d7fc3287ce9ff601, []int{47} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -2541,7 +2541,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{48} + return fileDescriptor_group_d7fc3287ce9ff601, []int{48} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -2596,7 +2596,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{49} + return fileDescriptor_group_d7fc3287ce9ff601, []int{49} } func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) @@ -2656,7 +2656,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{50} + return fileDescriptor_group_d7fc3287ce9ff601, []int{50} } func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) @@ -2704,7 +2704,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{51} + return fileDescriptor_group_d7fc3287ce9ff601, []int{51} } func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) @@ -2764,7 +2764,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{} func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{52} + return fileDescriptor_group_d7fc3287ce9ff601, []int{52} } func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) @@ -2811,7 +2811,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{53} + return fileDescriptor_group_d7fc3287ce9ff601, []int{53} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -2863,7 +2863,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{54} + return fileDescriptor_group_d7fc3287ce9ff601, []int{54} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -2905,7 +2905,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{55} + return fileDescriptor_group_d7fc3287ce9ff601, []int{55} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -2971,7 +2971,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{56} + return fileDescriptor_group_d7fc3287ce9ff601, []int{56} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -3012,7 +3012,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{57} + return fileDescriptor_group_d7fc3287ce9ff601, []int{57} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -3071,7 +3071,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{58} + return fileDescriptor_group_d7fc3287ce9ff601, []int{58} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -3111,7 +3111,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{59} + return fileDescriptor_group_d7fc3287ce9ff601, []int{59} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -3163,7 +3163,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{60} + return fileDescriptor_group_d7fc3287ce9ff601, []int{60} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -3203,7 +3203,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{61} + return fileDescriptor_group_d7fc3287ce9ff601, []int{61} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -3255,7 +3255,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{62} + return fileDescriptor_group_d7fc3287ce9ff601, []int{62} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -3297,7 +3297,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{63} + return fileDescriptor_group_d7fc3287ce9ff601, []int{63} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -3363,7 +3363,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{64} + return fileDescriptor_group_d7fc3287ce9ff601, []int{64} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -3390,6 +3390,106 @@ func (m *SetGroupMemberNicknameResp) GetCommonResp() *CommonResp { return nil } +type GetJoinedSuperGroupListReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=opUserID" json:"opUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupListReq{} } +func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } +func (*GetJoinedSuperGroupListReq) ProtoMessage() {} +func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { + return fileDescriptor_group_d7fc3287ce9ff601, []int{65} +} +func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) +} +func (m *GetJoinedSuperGroupListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetJoinedSuperGroupListReq.Marshal(b, m, deterministic) +} +func (dst *GetJoinedSuperGroupListReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetJoinedSuperGroupListReq.Merge(dst, src) +} +func (m *GetJoinedSuperGroupListReq) XXX_Size() int { + return xxx_messageInfo_GetJoinedSuperGroupListReq.Size(m) +} +func (m *GetJoinedSuperGroupListReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetJoinedSuperGroupListReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetJoinedSuperGroupListReq proto.InternalMessageInfo + +func (m *GetJoinedSuperGroupListReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *GetJoinedSuperGroupListReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *GetJoinedSuperGroupListReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +type GetJoinedSuperGroupListResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + GroupList []*sdk_ws.GroupInfo `protobuf:"bytes,3,rep,name=GroupList" json:"GroupList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroupListResp{} } +func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } +func (*GetJoinedSuperGroupListResp) ProtoMessage() {} +func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { + return fileDescriptor_group_d7fc3287ce9ff601, []int{66} +} +func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) +} +func (m *GetJoinedSuperGroupListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetJoinedSuperGroupListResp.Marshal(b, m, deterministic) +} +func (dst *GetJoinedSuperGroupListResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetJoinedSuperGroupListResp.Merge(dst, src) +} +func (m *GetJoinedSuperGroupListResp) XXX_Size() int { + return xxx_messageInfo_GetJoinedSuperGroupListResp.Size(m) +} +func (m *GetJoinedSuperGroupListResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetJoinedSuperGroupListResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetJoinedSuperGroupListResp proto.InternalMessageInfo + +func (m *GetJoinedSuperGroupListResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func (m *GetJoinedSuperGroupListResp) GetGroupList() []*sdk_ws.GroupInfo { + if m != nil { + return m.GroupList + } + return nil +} + func init() { proto.RegisterType((*CommonResp)(nil), "group.CommonResp") proto.RegisterType((*GroupAddMemberInfo)(nil), "group.GroupAddMemberInfo") @@ -3456,6 +3556,8 @@ func init() { proto.RegisterType((*CancelMuteGroupResp)(nil), "group.CancelMuteGroupResp") proto.RegisterType((*SetGroupMemberNicknameReq)(nil), "group.SetGroupMemberNicknameReq") proto.RegisterType((*SetGroupMemberNicknameResp)(nil), "group.SetGroupMemberNicknameResp") + proto.RegisterType((*GetJoinedSuperGroupListReq)(nil), "group.GetJoinedSuperGroupListReq") + proto.RegisterType((*GetJoinedSuperGroupListResp)(nil), "group.GetJoinedSuperGroupListResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -3499,6 +3601,7 @@ type GroupClient interface { MuteGroup(ctx context.Context, in *MuteGroupReq, opts ...grpc.CallOption) (*MuteGroupResp, error) CancelMuteGroup(ctx context.Context, in *CancelMuteGroupReq, opts ...grpc.CallOption) (*CancelMuteGroupResp, error) SetGroupMemberNickname(ctx context.Context, in *SetGroupMemberNicknameReq, opts ...grpc.CallOption) (*SetGroupMemberNicknameResp, error) + GetJoinedSuperGroupList(ctx context.Context, in *GetJoinedSuperGroupListReq, opts ...grpc.CallOption) (*GetJoinedSuperGroupListResp, error) } type groupClient struct { @@ -3779,6 +3882,15 @@ func (c *groupClient) SetGroupMemberNickname(ctx context.Context, in *SetGroupMe return out, nil } +func (c *groupClient) GetJoinedSuperGroupList(ctx context.Context, in *GetJoinedSuperGroupListReq, opts ...grpc.CallOption) (*GetJoinedSuperGroupListResp, error) { + out := new(GetJoinedSuperGroupListResp) + err := grpc.Invoke(ctx, "/group.group/GetJoinedSuperGroupList", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Group service type GroupServer interface { @@ -3812,6 +3924,7 @@ type GroupServer interface { MuteGroup(context.Context, *MuteGroupReq) (*MuteGroupResp, error) CancelMuteGroup(context.Context, *CancelMuteGroupReq) (*CancelMuteGroupResp, error) SetGroupMemberNickname(context.Context, *SetGroupMemberNicknameReq) (*SetGroupMemberNicknameResp, error) + GetJoinedSuperGroupList(context.Context, *GetJoinedSuperGroupListReq) (*GetJoinedSuperGroupListResp, error) } func RegisterGroupServer(s *grpc.Server, srv GroupServer) { @@ -4358,6 +4471,24 @@ func _Group_SetGroupMemberNickname_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Group_GetJoinedSuperGroupList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJoinedSuperGroupListReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServer).GetJoinedSuperGroupList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/group.group/GetJoinedSuperGroupList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServer).GetJoinedSuperGroupList(ctx, req.(*GetJoinedSuperGroupListReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Group_serviceDesc = grpc.ServiceDesc{ ServiceName: "group.group", HandlerType: (*GroupServer)(nil), @@ -4482,147 +4613,154 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "SetGroupMemberNickname", Handler: _Group_SetGroupMemberNickname_Handler, }, + { + MethodName: "GetJoinedSuperGroupList", + Handler: _Group_GetJoinedSuperGroupList_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_95c16320d90511af) } +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_d7fc3287ce9ff601) } -var fileDescriptor_group_95c16320d90511af = []byte{ - // 2138 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x1a, 0x4d, 0x6f, 0x1c, 0x49, - 0x55, 0xed, 0xf1, 0xd8, 0x9e, 0x67, 0x4f, 0xc6, 0x2e, 0xef, 0xd8, 0xe3, 0x5e, 0x6f, 0xd6, 0xa9, - 0x0d, 0xab, 0x88, 0x0f, 0x5b, 0x64, 0xa5, 0x1c, 0x58, 0x44, 0x88, 0x3f, 0x12, 0x4f, 0x92, 0xb1, - 0x49, 0x3b, 0x5c, 0x22, 0xa1, 0x30, 0x3b, 0x5d, 0x1e, 0x0d, 0x9e, 0xe9, 0x6e, 0x77, 0xf5, 0x38, - 0xc0, 0x65, 0xc5, 0x65, 0xa5, 0x05, 0x0e, 0x20, 0x24, 0x4e, 0x48, 0xb0, 0x27, 0x38, 0x70, 0xe0, - 0x00, 0x67, 0xc4, 0xcf, 0xe0, 0x57, 0x70, 0xe2, 0x8e, 0xba, 0xaa, 0xba, 0xba, 0xba, 0xab, 0xba, - 0x3d, 0x99, 0x49, 0xc8, 0x65, 0xa4, 0xf7, 0xea, 0x55, 0xbf, 0x8f, 0x7a, 0xef, 0xd5, 0x7b, 0xaf, - 0x06, 0xd6, 0xfa, 0xa1, 0x3f, 0x0e, 0xf6, 0xd8, 0xef, 0x6e, 0x10, 0xfa, 0x91, 0x8f, 0xaa, 0x0c, - 0xb0, 0x6f, 0x9d, 0x06, 0xc4, 0x7b, 0xd9, 0xee, 0xec, 0x05, 0x17, 0xfd, 0x3d, 0xb6, 0xb2, 0x47, - 0xdd, 0x8b, 0x97, 0xaf, 0xe8, 0xde, 0x2b, 0xca, 0x29, 0xf1, 0xf7, 0x00, 0x0e, 0xfc, 0xd1, 0xc8, - 0xf7, 0x1c, 0x42, 0x03, 0xd4, 0x82, 0xc5, 0xa3, 0x30, 0x3c, 0xf0, 0x5d, 0xd2, 0xb2, 0x76, 0xac, - 0x3b, 0x55, 0x27, 0x01, 0xd1, 0x06, 0x2c, 0x1c, 0x85, 0x61, 0x87, 0xf6, 0x5b, 0x73, 0x3b, 0xd6, - 0x9d, 0x9a, 0x23, 0x20, 0xfc, 0x18, 0xd0, 0xa3, 0x98, 0xd7, 0x03, 0xd7, 0xed, 0x90, 0xd1, 0x67, - 0x24, 0x6c, 0x7b, 0xe7, 0x7e, 0x4c, 0xfd, 0x43, 0x4a, 0xc2, 0xf6, 0x21, 0xfb, 0x4c, 0xcd, 0x11, - 0x10, 0xda, 0x86, 0x9a, 0xe3, 0x0f, 0xc9, 0x53, 0x72, 0x45, 0x86, 0xec, 0x43, 0x55, 0x27, 0x45, - 0xe0, 0xff, 0x58, 0x70, 0xe3, 0x20, 0x24, 0xdd, 0x88, 0xb0, 0x4f, 0x3a, 0xe4, 0x12, 0x3d, 0x80, - 0x1b, 0x6d, 0x6f, 0x10, 0xf1, 0x4f, 0x3f, 0x1d, 0xd0, 0xa8, 0x65, 0xed, 0x54, 0xee, 0x2c, 0xdf, - 0xdd, 0xda, 0xe5, 0xea, 0xea, 0xbc, 0x9d, 0xdc, 0x06, 0xf4, 0x1d, 0xa8, 0x31, 0xaa, 0x78, 0x91, - 0xf1, 0x5c, 0xbe, 0xbb, 0xbd, 0x4b, 0x49, 0x78, 0x45, 0xc2, 0x97, 0xdd, 0x60, 0xf0, 0x32, 0xe8, - 0x86, 0xdd, 0x11, 0xdd, 0x95, 0x34, 0x4e, 0x4a, 0x8e, 0x76, 0x60, 0xf9, 0x34, 0x20, 0x61, 0x37, - 0x1a, 0xf8, 0x5e, 0xfb, 0xb0, 0x55, 0x61, 0xca, 0xa8, 0x28, 0x64, 0xc3, 0xd2, 0x69, 0x20, 0x74, - 0x9d, 0x67, 0xcb, 0x12, 0x66, 0xbb, 0x5f, 0x79, 0x24, 0x14, 0xcb, 0x55, 0xb1, 0x3b, 0x45, 0xe1, - 0xcf, 0xa1, 0x91, 0x51, 0x78, 0x9a, 0x23, 0xc8, 0x2a, 0x58, 0x79, 0x2d, 0x05, 0x71, 0x08, 0xab, - 0x8f, 0x48, 0xc4, 0x60, 0xca, 0xd6, 0xc8, 0x65, 0x2c, 0x36, 0x27, 0x38, 0x94, 0x06, 0xaf, 0x39, - 0x2a, 0x2a, 0x6f, 0x96, 0xb9, 0x72, 0xb3, 0x54, 0xb2, 0x66, 0xc1, 0x5f, 0x5a, 0xb0, 0x96, 0x63, - 0x3a, 0x95, 0xde, 0xfb, 0x50, 0x97, 0x8a, 0x30, 0x49, 0x2b, 0xcc, 0x35, 0xca, 0x75, 0xcf, 0x6e, - 0xc1, 0xbf, 0xb2, 0xa0, 0x71, 0x26, 0x64, 0x49, 0xf4, 0xcf, 0xd8, 0xd3, 0x7a, 0x3d, 0x87, 0x51, - 0xf5, 0x9e, 0x33, 0xb8, 0x43, 0xa9, 0x33, 0xe1, 0x23, 0x58, 0xcd, 0x0a, 0x43, 0x03, 0xf4, 0x6d, - 0x35, 0x40, 0x85, 0x38, 0x6b, 0xc2, 0xfb, 0xd3, 0x05, 0x47, 0x21, 0xc2, 0x3f, 0x07, 0x3b, 0xb1, - 0xef, 0x83, 0x20, 0x18, 0x0e, 0x7a, 0xec, 0xfb, 0xb1, 0xbe, 0xb1, 0x7a, 0xaa, 0x88, 0x56, 0xb9, - 0x88, 0x86, 0x83, 0xbd, 0x09, 0xf0, 0x30, 0xf4, 0x47, 0x99, 0xa3, 0x55, 0x30, 0xf8, 0x0f, 0x16, - 0xbc, 0x5f, 0xc8, 0x7c, 0xaa, 0x63, 0x7e, 0x02, 0xab, 0x49, 0x3a, 0x18, 0x13, 0x1a, 0x29, 0x27, - 0xfd, 0x61, 0xd1, 0xa9, 0x08, 0x52, 0x47, 0xdb, 0x88, 0x23, 0xd8, 0x7e, 0x44, 0xa2, 0x58, 0x56, - 0x87, 0x5c, 0x1a, 0x8c, 0x53, 0x94, 0xb8, 0x66, 0x3b, 0xd7, 0x3f, 0x5a, 0xf0, 0x41, 0x09, 0xdb, - 0xa9, 0x4e, 0xd9, 0x68, 0x97, 0xb9, 0x69, 0xed, 0xf2, 0x4f, 0x0b, 0x9a, 0xcf, 0xc3, 0xae, 0x47, - 0xcf, 0x49, 0xc8, 0x16, 0x59, 0x96, 0x8a, 0x2d, 0xd2, 0x82, 0x45, 0x11, 0xfa, 0xc2, 0x24, 0x09, - 0x88, 0x3e, 0x86, 0x1b, 0xa7, 0x43, 0x57, 0xcd, 0x70, 0xdc, 0x32, 0x39, 0x6c, 0x4c, 0x77, 0x42, - 0x5e, 0xa9, 0x74, 0xdc, 0x44, 0x39, 0x6c, 0xde, 0x8e, 0xf3, 0xe5, 0x59, 0xa5, 0x9a, 0xcb, 0x2a, - 0x4f, 0x60, 0xc3, 0xa4, 0xc0, 0x74, 0x11, 0xf4, 0x85, 0x05, 0x2b, 0x8f, 0xfd, 0x81, 0x27, 0xef, - 0xa1, 0x62, 0x2b, 0xdc, 0x04, 0x70, 0xc8, 0x65, 0x87, 0x50, 0xda, 0xed, 0x13, 0x61, 0x01, 0x05, - 0x53, 0x96, 0x09, 0xaf, 0xd7, 0x18, 0xef, 0x43, 0x5d, 0x91, 0x63, 0x3a, 0x65, 0xfe, 0x1d, 0x87, - 0x64, 0x2e, 0x1e, 0xe3, 0x05, 0xdf, 0xa3, 0x44, 0xe4, 0x7b, 0x55, 0x0a, 0xab, 0xdc, 0xee, 0x79, - 0xef, 0x57, 0x2c, 0x53, 0xd1, 0x2c, 0xa3, 0xa4, 0x8a, 0xf9, 0x7c, 0xaa, 0x88, 0xd7, 0x8f, 0xbb, - 0x9e, 0x3b, 0x24, 0x6e, 0x1c, 0xf4, 0xfc, 0x3c, 0x15, 0x0c, 0xc2, 0xb0, 0xc2, 0x21, 0x87, 0xd0, - 0xf1, 0x30, 0x6a, 0x2d, 0xb0, 0x7c, 0x91, 0xc1, 0xe1, 0x67, 0xb0, 0x5d, 0xac, 0xda, 0x74, 0xe6, - 0x3a, 0x87, 0x95, 0x67, 0xe3, 0x41, 0x34, 0xc1, 0xd1, 0xcf, 0x76, 0x0d, 0xee, 0x43, 0x5d, 0xe1, - 0x33, 0x9d, 0xac, 0x5f, 0x59, 0xd0, 0x4c, 0xb2, 0x6d, 0x5a, 0xf2, 0x94, 0x4b, 0x3d, 0x53, 0x2a, - 0x8b, 0x13, 0xe4, 0xc3, 0xc1, 0x30, 0x22, 0x21, 0x3b, 0xd0, 0xaa, 0x23, 0xa0, 0x98, 0xdf, 0x09, - 0xf9, 0x69, 0x74, 0x46, 0x2e, 0xd9, 0x49, 0x56, 0x9d, 0x04, 0xc4, 0x7f, 0xb5, 0x60, 0xc3, 0x24, - 0xe3, 0x54, 0x97, 0xc1, 0x43, 0x80, 0x51, 0x5a, 0x0b, 0xf2, 0x6b, 0xe0, 0xe3, 0xa2, 0x74, 0xc7, - 0xb9, 0x3d, 0x1c, 0x0f, 0x87, 0xec, 0x36, 0x55, 0x76, 0xc6, 0x9c, 0x3d, 0x21, 0x2e, 0xd7, 0x23, - 0x01, 0xf1, 0x6f, 0x34, 0x71, 0x65, 0x61, 0x54, 0x9a, 0x04, 0x14, 0xb1, 0xe6, 0x58, 0xc5, 0xa4, - 0xb2, 0x9b, 0x2d, 0x09, 0xfc, 0xce, 0x82, 0x4d, 0xa3, 0x48, 0xef, 0xd2, 0x84, 0xf8, 0x6f, 0x16, - 0xa0, 0x27, 0x83, 0xde, 0x85, 0x42, 0x57, 0x6e, 0xa4, 0xaf, 0xc3, 0x6a, 0x4c, 0x4f, 0x5c, 0xae, - 0xb8, 0x62, 0x2a, 0x0d, 0x1f, 0x0b, 0xef, 0x90, 0x2e, 0xf5, 0x3d, 0x61, 0x2e, 0x01, 0xe5, 0x8d, - 0x55, 0x2d, 0x0f, 0xb9, 0x85, 0x5c, 0xc8, 0x7d, 0x0a, 0xb5, 0xb6, 0x7b, 0x97, 0xa7, 0x8e, 0xc2, - 0xab, 0x9e, 0xb1, 0x66, 0x09, 0x87, 0x37, 0x28, 0x02, 0xc2, 0x9f, 0xc3, 0xba, 0xa6, 0xee, 0x54, - 0x07, 0x70, 0x0f, 0xea, 0x52, 0x0a, 0xe5, 0x0c, 0x56, 0x45, 0xa8, 0xcb, 0x35, 0x27, 0x4b, 0x86, - 0xc7, 0x2c, 0xd6, 0xe3, 0xeb, 0x80, 0xb8, 0x4c, 0x8a, 0x24, 0xd6, 0xb3, 0x89, 0xd6, 0xd2, 0x12, - 0xed, 0x0e, 0x2c, 0xfb, 0x7a, 0x9e, 0xf2, 0x27, 0xcc, 0x53, 0x5f, 0xf0, 0x80, 0xd0, 0xf8, 0xce, - 0xd4, 0xab, 0x4c, 0x5c, 0xaf, 0xa7, 0xe4, 0xf8, 0xef, 0x16, 0xbc, 0xd7, 0xf6, 0xae, 0x06, 0x11, - 0x89, 0x25, 0x7b, 0xee, 0xcb, 0x0c, 0x7d, 0x7d, 0x1e, 0x2e, 0xbe, 0xa4, 0x52, 0x47, 0x9b, 0xcf, - 0x38, 0xda, 0x37, 0x61, 0x8d, 0xf3, 0x52, 0xbd, 0xb5, 0xca, 0xbc, 0x55, 0x5f, 0x28, 0x75, 0xba, - 0x5f, 0x58, 0xd0, 0x34, 0x88, 0xfd, 0x7f, 0x75, 0x1d, 0x0f, 0xde, 0x93, 0x45, 0xf9, 0x70, 0x38, - 0x49, 0xb0, 0xce, 0x56, 0xf0, 0xfe, 0x56, 0xb9, 0x97, 0x14, 0x86, 0xef, 0x34, 0x5f, 0xfd, 0xde, - 0x82, 0xa5, 0x83, 0xce, 0x19, 0x23, 0x9b, 0xa9, 0xc7, 0xbb, 0x03, 0x0d, 0xce, 0xab, 0x4b, 0x23, - 0x12, 0x9e, 0x74, 0x47, 0x49, 0xd9, 0x97, 0x47, 0xa3, 0xdb, 0xa2, 0x43, 0xe5, 0xa8, 0xb6, 0x2b, - 0x4c, 0x95, 0x45, 0xc6, 0xe9, 0x7d, 0x39, 0x31, 0x56, 0x7c, 0x28, 0xdb, 0x42, 0x36, 0xf6, 0x65, - 0x7e, 0x2c, 0x29, 0x02, 0x1d, 0x02, 0xfc, 0xa0, 0xdb, 0x1f, 0x78, 0xcc, 0xd4, 0x62, 0x9e, 0x71, - 0xdb, 0x20, 0xba, 0xa8, 0xee, 0x53, 0x5a, 0x47, 0xd9, 0x37, 0xc1, 0x11, 0x7e, 0x65, 0xc1, 0x4a, - 0x2a, 0x15, 0x0d, 0xd0, 0xb7, 0xa0, 0x96, 0x98, 0x8f, 0x8a, 0x29, 0x4c, 0x23, 0xa9, 0x4e, 0x04, - 0xde, 0x49, 0x29, 0xde, 0x90, 0x9c, 0xd2, 0x16, 0xe3, 0x11, 0x65, 0x52, 0x56, 0x9d, 0x14, 0x81, - 0xaf, 0x52, 0x11, 0x69, 0x6c, 0xb9, 0x2c, 0x4f, 0xeb, 0xcd, 0xd8, 0x46, 0x4f, 0x27, 0xf8, 0x4f, - 0x16, 0xd4, 0x15, 0xc6, 0xef, 0xca, 0x38, 0x36, 0x2c, 0x25, 0xb6, 0x10, 0xb6, 0x91, 0x30, 0x3e, - 0x4d, 0x67, 0x2c, 0x86, 0x70, 0x77, 0xb3, 0xe1, 0xee, 0x4e, 0xa0, 0xf3, 0x05, 0x34, 0x39, 0xc8, - 0x67, 0x55, 0x67, 0x51, 0x37, 0x1a, 0xd3, 0xf2, 0x8f, 0x6e, 0xc0, 0x02, 0x27, 0x4b, 0x6e, 0x52, - 0x0e, 0x4d, 0xe0, 0x7c, 0x2d, 0xd8, 0x30, 0x31, 0xe3, 0x9d, 0x19, 0x12, 0x4b, 0xac, 0x9d, 0xf6, - 0x87, 0xe4, 0x5a, 0x21, 0x58, 0xda, 0x72, 0x93, 0xb4, 0xc2, 0xa1, 0xec, 0x28, 0xb2, 0x92, 0x1b, - 0x45, 0x4e, 0x50, 0x94, 0x35, 0x61, 0x5d, 0x93, 0x83, 0x06, 0xf8, 0x29, 0xdc, 0x38, 0x24, 0x43, - 0xa2, 0x8c, 0x30, 0x67, 0x31, 0xfa, 0x1a, 0x34, 0x32, 0x5f, 0xa3, 0x01, 0xee, 0x40, 0x23, 0x39, - 0xd8, 0xfd, 0x9f, 0xb5, 0xdd, 0x59, 0x39, 0xdc, 0x4f, 0x07, 0x80, 0xfc, 0x73, 0x34, 0x40, 0xdf, - 0x48, 0x13, 0xa5, 0x08, 0x22, 0xcd, 0x97, 0x25, 0x01, 0xfe, 0x87, 0xd6, 0x82, 0xd0, 0x83, 0xce, - 0x59, 0xb9, 0x58, 0x36, 0x2c, 0xc5, 0x46, 0x53, 0x52, 0xa7, 0x84, 0x73, 0xa1, 0x51, 0x79, 0x33, - 0x31, 0x6c, 0x38, 0xbf, 0x7f, 0xe9, 0x75, 0x3e, 0x93, 0x9b, 0x06, 0xe8, 0xfb, 0xb0, 0xc8, 0xef, - 0x8d, 0x24, 0x94, 0x27, 0xbd, 0x6e, 0x92, 0x6d, 0xe8, 0xc8, 0x10, 0xdf, 0x5f, 0x33, 0x2a, 0xc1, - 0x7b, 0xd5, 0x02, 0x2d, 0x6e, 0x02, 0x70, 0x0e, 0x4a, 0xfa, 0x53, 0x30, 0xf8, 0xd7, 0x16, 0xb4, - 0x1c, 0x32, 0xf2, 0xaf, 0xc8, 0x6b, 0x99, 0xbf, 0x05, 0x8b, 0x3c, 0x08, 0xa8, 0xa8, 0xbf, 0x13, - 0xf0, 0xb5, 0xe6, 0xdd, 0x6e, 0x6e, 0xde, 0xed, 0xe2, 0x0e, 0x6c, 0x15, 0x48, 0xc3, 0x2f, 0x7e, - 0x3a, 0xee, 0xf5, 0x08, 0xa5, 0x62, 0xa2, 0x9c, 0x80, 0x71, 0x84, 0x9e, 0x77, 0x07, 0x43, 0xe2, - 0x0a, 0x69, 0x04, 0x84, 0xbf, 0xb4, 0xa0, 0xf9, 0xc0, 0x75, 0xdf, 0x86, 0x6a, 0xae, 0xae, 0x9a, - 0x5b, 0xaa, 0xda, 0x63, 0xd8, 0x30, 0x89, 0x32, 0x95, 0x5e, 0x03, 0x68, 0x1c, 0x0e, 0xe8, 0x68, - 0x40, 0xa9, 0xcc, 0x11, 0x36, 0x2c, 0xf9, 0xb9, 0x99, 0xac, 0x1f, 0x4c, 0x5c, 0xbd, 0xb7, 0x60, - 0xb1, 0x9f, 0xad, 0x6e, 0x05, 0x88, 0x8f, 0x60, 0x35, 0xcb, 0x8a, 0x8f, 0x19, 0x7a, 0x93, 0x8c, - 0x19, 0x52, 0x22, 0xfc, 0x17, 0x0b, 0x50, 0x67, 0x1c, 0x91, 0xdc, 0x75, 0xf2, 0x96, 0xa4, 0x8e, - 0x0d, 0x37, 0x56, 0x87, 0x46, 0x02, 0x42, 0x18, 0x56, 0x46, 0xe3, 0x88, 0xb8, 0x67, 0xa4, 0xe7, - 0x7b, 0x2e, 0x65, 0xdd, 0x5f, 0xdd, 0xc9, 0xe0, 0xf0, 0x31, 0xac, 0x6b, 0x92, 0x4e, 0xa7, 0xf4, - 0x2f, 0x2d, 0x68, 0x1d, 0x74, 0xbd, 0x1e, 0x19, 0xbe, 0x7b, 0xd5, 0xf1, 0x09, 0x6c, 0x15, 0xc8, - 0x32, 0x9d, 0x72, 0xe7, 0xb0, 0x22, 0xbf, 0xf4, 0x36, 0x1d, 0x70, 0x1f, 0xea, 0x0a, 0x9f, 0xe9, - 0x64, 0x1d, 0x02, 0xca, 0xe9, 0xfe, 0x36, 0x25, 0x3e, 0x86, 0x75, 0x8d, 0xdb, 0x74, 0x72, 0xff, - 0xd9, 0x82, 0xad, 0xb3, 0xcc, 0x0d, 0x73, 0x32, 0xe8, 0x5d, 0x78, 0xdd, 0x51, 0x52, 0xb1, 0xf4, - 0xb3, 0xad, 0x57, 0x3f, 0x6d, 0xbd, 0x3c, 0x41, 0x98, 0xdc, 0x8e, 0x09, 0x9c, 0xd1, 0xba, 0x52, - 0xae, 0xf5, 0xbc, 0xae, 0x75, 0xea, 0x5d, 0xd5, 0x8c, 0x77, 0x9d, 0x82, 0x5d, 0x24, 0xe8, 0x54, - 0x73, 0xc9, 0xbb, 0xff, 0x5d, 0x03, 0xfe, 0x04, 0x8d, 0xbe, 0x0b, 0xcb, 0xbd, 0xf4, 0x85, 0x13, - 0x35, 0x93, 0x7d, 0x99, 0x67, 0x5e, 0x7b, 0xc3, 0x84, 0xa6, 0x01, 0xba, 0x07, 0xb5, 0x9f, 0x24, - 0xe3, 0x6f, 0xb4, 0x2e, 0x88, 0xd4, 0xc1, 0xbc, 0xfd, 0x9e, 0x8e, 0xe4, 0xfb, 0x2e, 0x93, 0xd9, - 0xaa, 0xdc, 0xa7, 0x4e, 0x75, 0xe5, 0xbe, 0xec, 0x08, 0x76, 0x1f, 0xea, 0x7d, 0xf5, 0x65, 0x12, - 0x6d, 0x26, 0xef, 0xcc, 0xb9, 0x47, 0x52, 0xbb, 0x65, 0x5e, 0xa0, 0x01, 0xba, 0x0f, 0x2b, 0x54, - 0x79, 0xc4, 0x43, 0x89, 0x6e, 0xb9, 0x67, 0x46, 0x7b, 0xd3, 0x88, 0xa7, 0x01, 0xfa, 0x31, 0x6c, - 0xf6, 0xcd, 0x2f, 0x68, 0xe8, 0x56, 0x8e, 0xab, 0xfe, 0x82, 0x65, 0xe3, 0xeb, 0x48, 0x68, 0x80, - 0xce, 0x61, 0xab, 0x5f, 0xf4, 0x1c, 0x85, 0x3e, 0x4a, 0x3f, 0x50, 0xf8, 0x4e, 0x66, 0xdf, 0xbe, - 0x9e, 0x88, 0x06, 0xe8, 0x19, 0xa0, 0x48, 0x7b, 0x93, 0x41, 0xdb, 0x62, 0xaf, 0xf1, 0xbd, 0xc9, - 0xfe, 0xa0, 0x64, 0x95, 0x06, 0xa8, 0x07, 0xad, 0x7e, 0xc1, 0xc0, 0x1f, 0xe1, 0xcc, 0x9f, 0x02, - 0x8c, 0x8f, 0x1d, 0xf6, 0x47, 0xd7, 0xd2, 0x70, 0xb9, 0xfb, 0xda, 0xc4, 0x5a, 0xca, 0x6d, 0x1c, - 0xb8, 0x4b, 0xb9, 0x0b, 0x46, 0xdd, 0xcf, 0x61, 0xbd, 0xaf, 0x8f, 0x70, 0x91, 0x79, 0x97, 0xf4, - 0xb2, 0x9b, 0x65, 0xcb, 0x34, 0x40, 0xc7, 0xd0, 0xb8, 0xc8, 0xce, 0x24, 0x51, 0xf2, 0xcf, 0x08, - 0x7d, 0x34, 0x6b, 0xdb, 0x45, 0x4b, 0x52, 0xe5, 0xdc, 0x90, 0x4f, 0x55, 0x59, 0x9f, 0x3b, 0xaa, - 0x2a, 0x9b, 0xa6, 0x83, 0x27, 0xb0, 0x36, 0xc8, 0xcf, 0xbd, 0xd0, 0xfb, 0xc9, 0xa8, 0xca, 0x30, - 0xc8, 0xb3, 0xb7, 0x8b, 0x17, 0xf9, 0xf7, 0xfa, 0xf9, 0x99, 0x92, 0xfc, 0x9e, 0x69, 0xbc, 0x65, - 0x6f, 0x17, 0x2f, 0xf2, 0x40, 0x55, 0x5b, 0x1f, 0x19, 0xa8, 0xb9, 0xf6, 0xca, 0xde, 0x34, 0xe2, - 0x69, 0x80, 0x3e, 0x81, 0xa5, 0x04, 0x87, 0x50, 0x8e, 0x28, 0xde, 0xb8, 0xae, 0xe1, 0x78, 0x6a, - 0x92, 0x39, 0x03, 0xe5, 0x29, 0xa8, 0x9a, 0x9a, 0xb2, 0x13, 0x86, 0x67, 0xb2, 0xef, 0x55, 0x5a, - 0x62, 0x79, 0x40, 0xc6, 0xd6, 0x5c, 0x1e, 0x90, 0xb9, 0x97, 0x8e, 0xbd, 0x27, 0xd7, 0xc2, 0x4a, - 0xef, 0xd1, 0x5b, 0x6c, 0xe9, 0x3d, 0x86, 0xae, 0x37, 0xce, 0xf2, 0x4a, 0x9f, 0x2a, 0xb3, 0x7c, - 0xb6, 0x13, 0x96, 0x59, 0x3e, 0xd7, 0xd2, 0xc6, 0xaa, 0xe9, 0x9d, 0x58, 0x41, 0xb8, 0x89, 0x16, - 0xa0, 0x20, 0xdc, 0x64, 0x55, 0xfe, 0x02, 0x9a, 0xc6, 0x56, 0x04, 0x7d, 0x28, 0xf6, 0x15, 0xb5, - 0x4d, 0xf6, 0x4e, 0x39, 0x01, 0x17, 0x57, 0xef, 0x05, 0xa4, 0xb8, 0xc6, 0x8e, 0x45, 0x8a, 0x5b, - 0xd0, 0x44, 0xdc, 0x87, 0x15, 0xb5, 0x4e, 0x97, 0xae, 0x98, 0xeb, 0x13, 0xa4, 0x2b, 0x6a, 0x45, - 0xfd, 0x31, 0x34, 0x72, 0x95, 0xa1, 0x3c, 0x4a, 0xbd, 0x7a, 0x95, 0x47, 0x69, 0x2a, 0x26, 0x5f, - 0x40, 0xd3, 0x58, 0x69, 0x4a, 0xcb, 0x15, 0xd5, 0xc4, 0xd2, 0x72, 0xc5, 0x85, 0xea, 0x3d, 0xa8, - 0x49, 0xb4, 0xf4, 0x7d, 0xb5, 0xaa, 0x93, 0xbe, 0x9f, 0x2d, 0xbe, 0x8e, 0xa1, 0x91, 0xfb, 0xa8, - 0xd4, 0x4e, 0xaf, 0x0c, 0xa5, 0x76, 0xa6, 0x32, 0xee, 0x47, 0xb0, 0x61, 0xae, 0x74, 0xd0, 0x4e, - 0xee, 0x3a, 0xd6, 0x2a, 0x36, 0xfb, 0xd6, 0x35, 0x14, 0x34, 0xd8, 0x6f, 0xbc, 0xa8, 0xef, 0xf2, - 0x3f, 0xe2, 0x7d, 0xca, 0x7e, 0x3f, 0x5b, 0x60, 0xff, 0xb2, 0xfb, 0xe4, 0x7f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x14, 0x45, 0xba, 0x3b, 0xa4, 0x27, 0x00, 0x00, +var fileDescriptor_group_d7fc3287ce9ff601 = []byte{ + // 2190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49, + 0x15, 0x57, 0xdb, 0x19, 0xff, 0x79, 0xf6, 0x64, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7, + 0x36, 0xac, 0x22, 0xfe, 0xd8, 0x22, 0x2b, 0xe5, 0xc0, 0x22, 0x42, 0xfc, 0x27, 0xf1, 0x24, 0x19, + 0x9b, 0xb4, 0xc3, 0x25, 0x12, 0x0a, 0xb3, 0xd3, 0xe5, 0xd1, 0xe0, 0x99, 0xee, 0x76, 0x57, 0x8f, + 0x03, 0x5c, 0x56, 0x5c, 0x56, 0x5a, 0xe0, 0x00, 0x42, 0xe2, 0x84, 0x04, 0x7b, 0x82, 0x03, 0x07, + 0x0e, 0x70, 0x46, 0x7c, 0x0a, 0xc4, 0xa7, 0xe0, 0x2b, 0xa0, 0xae, 0xaa, 0xae, 0xae, 0xae, 0xae, + 0x6e, 0x4f, 0x7a, 0x12, 0x72, 0x19, 0xa9, 0x5e, 0xbd, 0xea, 0xf7, 0x7b, 0xaf, 0xea, 0xbd, 0x7a, + 0xef, 0xd5, 0xc0, 0x6a, 0x3f, 0xf4, 0xc7, 0xc1, 0x2e, 0xfb, 0xdd, 0x09, 0x42, 0x3f, 0xf2, 0x51, + 0x8d, 0x0d, 0xec, 0xdb, 0x27, 0x01, 0xf1, 0x5e, 0xb5, 0x3b, 0xbb, 0xc1, 0x79, 0x7f, 0x97, 0xcd, + 0xec, 0x52, 0xf7, 0xfc, 0xd5, 0x6b, 0xba, 0xfb, 0x9a, 0x72, 0x4e, 0xfc, 0x3d, 0x80, 0x7d, 0x7f, + 0x34, 0xf2, 0x3d, 0x87, 0xd0, 0x00, 0xb5, 0x60, 0xfe, 0x30, 0x0c, 0xf7, 0x7d, 0x97, 0xb4, 0xac, + 0x6d, 0xeb, 0x6e, 0xcd, 0x49, 0x86, 0x68, 0x1d, 0xe6, 0x0e, 0xc3, 0xb0, 0x43, 0xfb, 0xad, 0x99, + 0x6d, 0xeb, 0xee, 0xa2, 0x23, 0x46, 0xf8, 0x09, 0xa0, 0xc7, 0xb1, 0xac, 0x87, 0xae, 0xdb, 0x21, + 0xa3, 0xcf, 0x48, 0xd8, 0xf6, 0xce, 0xfc, 0x98, 0xfb, 0x87, 0x94, 0x84, 0xed, 0x03, 0xf6, 0x99, + 0x45, 0x47, 0x8c, 0xd0, 0x16, 0x2c, 0x3a, 0xfe, 0x90, 0x3c, 0x23, 0x97, 0x64, 0xc8, 0x3e, 0x54, + 0x73, 0x52, 0x02, 0xfe, 0xaf, 0x05, 0xd7, 0xf7, 0x43, 0xd2, 0x8d, 0x08, 0xfb, 0xa4, 0x43, 0x2e, + 0xd0, 0x43, 0xb8, 0xde, 0xf6, 0x06, 0x11, 0xff, 0xf4, 0xb3, 0x01, 0x8d, 0x5a, 0xd6, 0xf6, 0xec, + 0xdd, 0xa5, 0x7b, 0x9b, 0x3b, 0x5c, 0xdd, 0xbc, 0x6c, 0x47, 0x5b, 0x80, 0xbe, 0x03, 0x8b, 0x8c, + 0x2b, 0x9e, 0x64, 0x32, 0x97, 0xee, 0x6d, 0xed, 0x50, 0x12, 0x5e, 0x92, 0xf0, 0x55, 0x37, 0x18, + 0xbc, 0x0a, 0xba, 0x61, 0x77, 0x44, 0x77, 0x24, 0x8f, 0x93, 0xb2, 0xa3, 0x6d, 0x58, 0x3a, 0x09, + 0x48, 0xd8, 0x8d, 0x06, 0xbe, 0xd7, 0x3e, 0x68, 0xcd, 0x32, 0x65, 0x54, 0x12, 0xb2, 0x61, 0xe1, + 0x24, 0x10, 0xba, 0x5e, 0x63, 0xd3, 0x72, 0xcc, 0x56, 0xbf, 0xf6, 0x48, 0x28, 0xa6, 0x6b, 0x62, + 0x75, 0x4a, 0xc2, 0x9f, 0x43, 0x23, 0xa3, 0x70, 0x95, 0x2d, 0xc8, 0x2a, 0x38, 0xfb, 0x46, 0x0a, + 0xe2, 0x10, 0x56, 0x1e, 0x93, 0x88, 0x8d, 0x29, 0x9b, 0x23, 0x17, 0x31, 0x6c, 0xce, 0x70, 0x20, + 0x0d, 0xbe, 0xe8, 0xa8, 0x24, 0xdd, 0x2c, 0x33, 0xe5, 0x66, 0x99, 0xcd, 0x9a, 0x05, 0x7f, 0x69, + 0xc1, 0xaa, 0x26, 0xb4, 0x92, 0xde, 0x7b, 0x50, 0x97, 0x8a, 0x30, 0xa4, 0xb3, 0xec, 0x68, 0x94, + 0xeb, 0x9e, 0x5d, 0x82, 0x7f, 0x65, 0x41, 0xe3, 0x54, 0x60, 0x49, 0xf4, 0xcf, 0xd8, 0xd3, 0x7a, + 0xb3, 0x03, 0xa3, 0xea, 0x3d, 0x63, 0x38, 0x0e, 0xa5, 0x87, 0x09, 0x1f, 0xc2, 0x4a, 0x16, 0x0c, + 0x0d, 0xd0, 0xb7, 0x55, 0x07, 0x15, 0x70, 0x56, 0xc5, 0xe9, 0x4f, 0x27, 0x1c, 0x85, 0x09, 0xff, + 0x1c, 0xec, 0xc4, 0xbe, 0x0f, 0x83, 0x60, 0x38, 0xe8, 0xb1, 0xef, 0xc7, 0xfa, 0xc6, 0xea, 0xa9, + 0x10, 0xad, 0x72, 0x88, 0x86, 0x8d, 0xbd, 0x05, 0xf0, 0x28, 0xf4, 0x47, 0x99, 0xad, 0x55, 0x28, + 0xf8, 0x0f, 0x16, 0xdc, 0x2c, 0x14, 0x5e, 0x69, 0x9b, 0x9f, 0xc2, 0x4a, 0x12, 0x0e, 0xc6, 0x84, + 0x46, 0xca, 0x4e, 0x7f, 0x58, 0xb4, 0x2b, 0x82, 0xd5, 0xc9, 0x2d, 0xc4, 0x11, 0x6c, 0x3d, 0x26, + 0x51, 0x8c, 0xd5, 0x21, 0x17, 0x06, 0xe3, 0x14, 0x05, 0xae, 0xe9, 0xf6, 0xf5, 0x8f, 0x16, 0x7c, + 0x50, 0x22, 0xb6, 0xd2, 0x2e, 0x1b, 0xed, 0x32, 0x53, 0xd5, 0x2e, 0xff, 0xb4, 0xa0, 0xf9, 0x22, + 0xec, 0x7a, 0xf4, 0x8c, 0x84, 0x6c, 0x92, 0x45, 0xa9, 0xd8, 0x22, 0x2d, 0x98, 0x17, 0xae, 0x2f, + 0x4c, 0x92, 0x0c, 0xd1, 0xc7, 0x70, 0xfd, 0x64, 0xe8, 0xaa, 0x11, 0x8e, 0x5b, 0x46, 0xa3, 0xc6, + 0x7c, 0xc7, 0xe4, 0xb5, 0xca, 0xc7, 0x4d, 0xa4, 0x51, 0x75, 0x3b, 0x5e, 0x2b, 0x8f, 0x2a, 0x35, + 0x2d, 0xaa, 0x3c, 0x85, 0x75, 0x93, 0x02, 0xd5, 0x3c, 0xe8, 0x0b, 0x0b, 0x96, 0x9f, 0xf8, 0x03, + 0x4f, 0xde, 0x43, 0xc5, 0x56, 0xb8, 0x05, 0xe0, 0x90, 0x8b, 0x0e, 0xa1, 0xb4, 0xdb, 0x27, 0xc2, + 0x02, 0x0a, 0xa5, 0x2c, 0x12, 0x5e, 0xad, 0x31, 0xde, 0x83, 0xba, 0x82, 0xa3, 0x9a, 0x32, 0xff, + 0x89, 0x5d, 0x52, 0xf3, 0xc7, 0x78, 0xc2, 0xf7, 0x28, 0x11, 0xf1, 0x5e, 0x45, 0x61, 0x95, 0xdb, + 0x5d, 0x3f, 0xfd, 0x8a, 0x65, 0x66, 0x73, 0x96, 0x51, 0x42, 0xc5, 0x35, 0x3d, 0x54, 0xc4, 0xf3, + 0x47, 0x5d, 0xcf, 0x1d, 0x12, 0x37, 0x76, 0x7a, 0xbe, 0x9f, 0x0a, 0x05, 0x61, 0x58, 0xe6, 0x23, + 0x87, 0xd0, 0xf1, 0x30, 0x6a, 0xcd, 0xb1, 0x78, 0x91, 0xa1, 0xe1, 0xe7, 0xb0, 0x55, 0xac, 0x5a, + 0x35, 0x73, 0x9d, 0xc1, 0xf2, 0xf3, 0xf1, 0x20, 0x9a, 0x60, 0xeb, 0xa7, 0xbb, 0x06, 0xf7, 0xa0, + 0xae, 0xc8, 0xa9, 0x86, 0xf5, 0x2b, 0x0b, 0x9a, 0x49, 0xb4, 0x4d, 0x53, 0x9e, 0x72, 0xd4, 0x53, + 0x85, 0xb2, 0x38, 0x40, 0x3e, 0x1a, 0x0c, 0x23, 0x12, 0xb2, 0x0d, 0xad, 0x39, 0x62, 0x14, 0xcb, + 0x3b, 0x26, 0x3f, 0x8d, 0x4e, 0xc9, 0x05, 0xdb, 0xc9, 0x9a, 0x93, 0x0c, 0xf1, 0x5f, 0x2d, 0x58, + 0x37, 0x61, 0xac, 0x74, 0x19, 0x3c, 0x02, 0x18, 0xa5, 0xb9, 0x20, 0xbf, 0x06, 0x3e, 0x2e, 0x0a, + 0x77, 0x5c, 0xda, 0xa3, 0xf1, 0x70, 0xc8, 0x6e, 0x53, 0x65, 0x65, 0x2c, 0xd9, 0x13, 0x70, 0xb9, + 0x1e, 0xc9, 0x10, 0xff, 0x26, 0x07, 0x57, 0x26, 0x46, 0xa5, 0x41, 0x40, 0x81, 0x35, 0xc3, 0x32, + 0x26, 0x55, 0xdc, 0x74, 0x41, 0xe0, 0x77, 0x16, 0x6c, 0x18, 0x21, 0xbd, 0x4f, 0x13, 0xe2, 0xbf, + 0x59, 0x80, 0x9e, 0x0e, 0x7a, 0xe7, 0x0a, 0x5f, 0xb9, 0x91, 0xbe, 0x0e, 0x2b, 0x31, 0x3f, 0x71, + 0xb9, 0xe2, 0x8a, 0xa9, 0x72, 0xf4, 0x18, 0xbc, 0x43, 0xba, 0xd4, 0xf7, 0x84, 0xb9, 0xc4, 0x48, + 0x37, 0x56, 0xad, 0xdc, 0xe5, 0xe6, 0x34, 0x97, 0xfb, 0x14, 0x16, 0xdb, 0xee, 0x3d, 0x1e, 0x3a, + 0x0a, 0xaf, 0x7a, 0x26, 0x9a, 0x05, 0x1c, 0x5e, 0xa0, 0x88, 0x11, 0xfe, 0x1c, 0xd6, 0x72, 0xea, + 0x56, 0xda, 0x80, 0xfb, 0x50, 0x97, 0x28, 0x94, 0x3d, 0x58, 0x11, 0xae, 0x2e, 0xe7, 0x9c, 0x2c, + 0x1b, 0x1e, 0x33, 0x5f, 0x8f, 0xaf, 0x03, 0xe2, 0x32, 0x14, 0x89, 0xaf, 0x67, 0x03, 0xad, 0x95, + 0x0b, 0xb4, 0xdb, 0xb0, 0xe4, 0xe7, 0xe3, 0x94, 0x3f, 0x61, 0x9c, 0xfa, 0x82, 0x3b, 0x44, 0x4e, + 0xee, 0x54, 0xb5, 0xca, 0xc4, 0xf9, 0x7a, 0xca, 0x8e, 0xff, 0x6e, 0xc1, 0x8d, 0xb6, 0x77, 0x39, + 0x88, 0x48, 0x8c, 0xec, 0x85, 0x2f, 0x23, 0xf4, 0xd5, 0x71, 0xb8, 0xf8, 0x92, 0x4a, 0x0f, 0xda, + 0xb5, 0xcc, 0x41, 0xfb, 0x26, 0xac, 0x72, 0x59, 0xea, 0x69, 0xad, 0xb1, 0xd3, 0x9a, 0x9f, 0x28, + 0x3d, 0x74, 0xbf, 0xb0, 0xa0, 0x69, 0x80, 0xfd, 0x7f, 0x3d, 0x3a, 0x1e, 0xdc, 0x90, 0x49, 0xf9, + 0x70, 0x38, 0x89, 0xb3, 0x4e, 0x97, 0xf0, 0xfe, 0x56, 0xb9, 0x97, 0x14, 0x81, 0xef, 0x35, 0x5e, + 0xfd, 0xde, 0x82, 0x85, 0xfd, 0xce, 0x29, 0x63, 0x9b, 0xaa, 0xc6, 0xbb, 0x0b, 0x0d, 0x2e, 0xab, + 0x4b, 0x23, 0x12, 0x1e, 0x77, 0x47, 0x49, 0xda, 0xa7, 0x93, 0xd1, 0x1d, 0x51, 0xa1, 0x72, 0x52, + 0xdb, 0x15, 0xa6, 0xca, 0x12, 0xe3, 0xf0, 0xbe, 0x94, 0x18, 0x2b, 0xde, 0x94, 0x2d, 0x81, 0x8d, + 0x7d, 0x99, 0x6f, 0x4b, 0x4a, 0x40, 0x07, 0x00, 0x3f, 0xe8, 0xf6, 0x07, 0x1e, 0x33, 0xb5, 0xe8, + 0x67, 0xdc, 0x31, 0x40, 0x17, 0xd9, 0x7d, 0xca, 0xeb, 0x28, 0xeb, 0x26, 0xd8, 0xc2, 0xaf, 0x2c, + 0x58, 0x4e, 0x51, 0xd1, 0x00, 0x7d, 0x0b, 0x16, 0x13, 0xf3, 0x51, 0xd1, 0x85, 0x69, 0x24, 0xd9, + 0x89, 0xa0, 0x3b, 0x29, 0xc7, 0x5b, 0xc2, 0x29, 0x6d, 0x31, 0x1e, 0x51, 0x86, 0xb2, 0xe6, 0xa4, + 0x04, 0x7c, 0x99, 0x42, 0xa4, 0xb1, 0xe5, 0xb2, 0x32, 0xad, 0xb7, 0x63, 0x9b, 0x7c, 0x38, 0xc1, + 0x7f, 0xb2, 0xa0, 0xae, 0x08, 0x7e, 0x5f, 0xc6, 0xb1, 0x61, 0x21, 0xb1, 0x85, 0xb0, 0x8d, 0x1c, + 0xe3, 0x93, 0xb4, 0xc7, 0x62, 0x70, 0x77, 0x37, 0xeb, 0xee, 0xee, 0x04, 0x3a, 0x9f, 0x43, 0x93, + 0x0f, 0x79, 0xaf, 0xea, 0x34, 0xea, 0x46, 0x63, 0x5a, 0xfe, 0xd1, 0x75, 0x98, 0xe3, 0x6c, 0xc9, + 0x4d, 0xca, 0x47, 0x13, 0x1c, 0xbe, 0x16, 0xac, 0x9b, 0x84, 0xf1, 0xca, 0x0c, 0x89, 0x29, 0x56, + 0x4e, 0xfb, 0x43, 0x72, 0x25, 0x08, 0x16, 0xb6, 0xdc, 0x24, 0xac, 0xf0, 0x51, 0xb6, 0x15, 0x39, + 0xab, 0xb5, 0x22, 0x27, 0x48, 0xca, 0x9a, 0xb0, 0x96, 0xc3, 0x41, 0x03, 0xfc, 0x0c, 0xae, 0x1f, + 0x90, 0x21, 0x51, 0x5a, 0x98, 0xd3, 0x18, 0x7d, 0x15, 0x1a, 0x99, 0xaf, 0xd1, 0x00, 0x77, 0xa0, + 0x91, 0x6c, 0xec, 0xde, 0xcf, 0xda, 0xee, 0xb4, 0x12, 0x1e, 0xa4, 0x0d, 0x40, 0xfe, 0x39, 0x1a, + 0xa0, 0x6f, 0xa4, 0x81, 0x52, 0x38, 0x51, 0xee, 0x2c, 0x4b, 0x06, 0xfc, 0x8f, 0x5c, 0x09, 0x42, + 0xf7, 0x3b, 0xa7, 0xe5, 0xb0, 0x6c, 0x58, 0x88, 0x8d, 0xa6, 0x84, 0x4e, 0x39, 0xd6, 0x5c, 0x63, + 0xf6, 0xed, 0xf8, 0xb0, 0x61, 0xff, 0xfe, 0x95, 0xcf, 0xf3, 0x19, 0x6e, 0x1a, 0xa0, 0xef, 0xc3, + 0x3c, 0xbf, 0x37, 0x12, 0x57, 0x9e, 0xf4, 0xba, 0x49, 0x96, 0xa1, 0x43, 0x83, 0x7f, 0x7f, 0xcd, + 0xa8, 0x04, 0xaf, 0x55, 0x0b, 0xb4, 0xb8, 0x05, 0xc0, 0x25, 0x28, 0xe1, 0x4f, 0xa1, 0xe0, 0x5f, + 0x5b, 0xd0, 0x72, 0xc8, 0xc8, 0xbf, 0x24, 0x6f, 0x64, 0xfe, 0x16, 0xcc, 0x73, 0x27, 0xa0, 0x22, + 0xff, 0x4e, 0x86, 0x6f, 0xd4, 0xef, 0x76, 0xb5, 0x7e, 0xb7, 0x8b, 0x3b, 0xb0, 0x59, 0x80, 0x86, + 0x5f, 0xfc, 0x74, 0xdc, 0xeb, 0x11, 0x4a, 0x45, 0x47, 0x39, 0x19, 0xc6, 0x1e, 0x7a, 0xd6, 0x1d, + 0x0c, 0x89, 0x2b, 0xd0, 0x88, 0x11, 0xfe, 0xd2, 0x82, 0xe6, 0x43, 0xd7, 0x7d, 0x17, 0xaa, 0xb9, + 0x79, 0xd5, 0xdc, 0x52, 0xd5, 0x9e, 0xc0, 0xba, 0x09, 0x4a, 0x25, 0xbd, 0x06, 0xd0, 0x38, 0x18, + 0xd0, 0xd1, 0x80, 0x52, 0x19, 0x23, 0x6c, 0x58, 0xf0, 0xb5, 0x9e, 0xac, 0x1f, 0x4c, 0x9c, 0xbd, + 0xb7, 0x60, 0xbe, 0x9f, 0xcd, 0x6e, 0xc5, 0x10, 0x1f, 0xc2, 0x4a, 0x56, 0x14, 0x6f, 0x33, 0xf4, + 0x26, 0x69, 0x33, 0xa4, 0x4c, 0xf8, 0x2f, 0x16, 0xa0, 0xce, 0x38, 0x22, 0xda, 0x75, 0xf2, 0x8e, + 0x50, 0xc7, 0x86, 0x1b, 0xab, 0x4d, 0x23, 0x31, 0x42, 0x18, 0x96, 0x47, 0xe3, 0x88, 0xb8, 0xa7, + 0xa4, 0xe7, 0x7b, 0x2e, 0x65, 0xd5, 0x5f, 0xdd, 0xc9, 0xd0, 0xf0, 0x11, 0xac, 0xe5, 0x90, 0x56, + 0x53, 0xfa, 0x97, 0x16, 0xb4, 0xf6, 0xbb, 0x5e, 0x8f, 0x0c, 0xdf, 0xbf, 0xea, 0xf8, 0x18, 0x36, + 0x0b, 0xb0, 0x54, 0x53, 0xee, 0x0c, 0x96, 0xe5, 0x97, 0xde, 0xe5, 0x01, 0xdc, 0x83, 0xba, 0x22, + 0xa7, 0x1a, 0xd6, 0x21, 0x20, 0x4d, 0xf7, 0x77, 0x89, 0xf8, 0x08, 0xd6, 0x72, 0xd2, 0xaa, 0xe1, + 0xfe, 0xb3, 0x05, 0x9b, 0xa7, 0x99, 0x1b, 0xe6, 0x78, 0xd0, 0x3b, 0xf7, 0xba, 0xa3, 0x24, 0x63, + 0xe9, 0x67, 0x4b, 0xaf, 0x7e, 0x5a, 0x7a, 0x79, 0x82, 0x31, 0xb9, 0x1d, 0x93, 0x71, 0x46, 0xeb, + 0xd9, 0x72, 0xad, 0xaf, 0xe5, 0xb5, 0x4e, 0x4f, 0x57, 0x2d, 0x73, 0xba, 0x4e, 0xc0, 0x2e, 0x02, + 0x5a, 0xad, 0x2f, 0x19, 0xb2, 0x17, 0x28, 0xde, 0x32, 0x38, 0x1d, 0x07, 0xa2, 0x25, 0x9f, 0xf4, + 0x2b, 0x34, 0xa0, 0x56, 0x19, 0xd0, 0x99, 0x4c, 0x04, 0x28, 0x51, 0x3f, 0xbe, 0x0c, 0x6f, 0x16, + 0x0a, 0xad, 0xb4, 0x83, 0xd3, 0x74, 0x2b, 0xee, 0xfd, 0x1b, 0x01, 0x7f, 0x85, 0x47, 0xdf, 0x85, + 0xa5, 0x5e, 0xfa, 0xc8, 0x8b, 0x9a, 0x89, 0xcc, 0xcc, 0x4b, 0xb7, 0xbd, 0x6e, 0x22, 0xd3, 0x00, + 0xdd, 0x87, 0xc5, 0x9f, 0x24, 0x2f, 0x00, 0x68, 0x4d, 0x30, 0xa9, 0x6f, 0x13, 0xf6, 0x8d, 0x3c, + 0x91, 0xaf, 0xbb, 0x48, 0xda, 0xcb, 0x72, 0x9d, 0xda, 0xd8, 0x96, 0xeb, 0xb2, 0x5d, 0xe8, 0x3d, + 0xa8, 0xf7, 0xd5, 0xc7, 0x59, 0xb4, 0x91, 0x3c, 0xb5, 0x6b, 0xef, 0xc4, 0x76, 0xcb, 0x3c, 0x41, + 0x03, 0xf4, 0x00, 0x96, 0xa9, 0xf2, 0x8e, 0x89, 0x12, 0xdd, 0xb4, 0x97, 0x56, 0x7b, 0xc3, 0x48, + 0xa7, 0x01, 0xfa, 0x31, 0x6c, 0xf4, 0xcd, 0x8f, 0x88, 0xe8, 0xb6, 0x26, 0x35, 0xff, 0x88, 0x67, + 0xe3, 0xab, 0x58, 0x68, 0x80, 0xce, 0x60, 0xb3, 0x5f, 0xf4, 0x22, 0x87, 0x3e, 0x4a, 0x3f, 0x50, + 0xf8, 0x54, 0x68, 0xdf, 0xb9, 0x9a, 0x89, 0x06, 0xe8, 0x39, 0xa0, 0x28, 0xf7, 0x2c, 0x85, 0xb6, + 0xc4, 0x5a, 0xe3, 0x93, 0x9b, 0xfd, 0x41, 0xc9, 0x2c, 0x0d, 0x50, 0x0f, 0x5a, 0xfd, 0x82, 0x37, + 0x0f, 0x84, 0x33, 0xff, 0x8b, 0x30, 0xbe, 0xf7, 0xd8, 0x1f, 0x5d, 0xc9, 0xc3, 0x71, 0xf7, 0x73, + 0x4d, 0x7b, 0x89, 0xdb, 0xf8, 0xe6, 0x20, 0x71, 0x17, 0x74, 0xfb, 0x5f, 0xc0, 0x5a, 0x3f, 0xdf, + 0xc5, 0x46, 0xe6, 0x55, 0xf2, 0x94, 0xdd, 0x2a, 0x9b, 0xa6, 0x01, 0x3a, 0x82, 0xc6, 0x79, 0xb6, + 0x2d, 0x8b, 0x92, 0x3f, 0x87, 0xe4, 0xbb, 0xd3, 0xb6, 0x5d, 0x34, 0x25, 0x55, 0xd6, 0xfa, 0x9c, + 0xaa, 0xca, 0xf9, 0xd6, 0xab, 0xaa, 0xb2, 0xa9, 0x41, 0x7a, 0x0c, 0xab, 0x03, 0xbd, 0xf5, 0x87, + 0x6e, 0x26, 0xdd, 0x3a, 0x43, 0x2f, 0xd3, 0xde, 0x2a, 0x9e, 0xe4, 0xdf, 0xeb, 0xeb, 0x6d, 0x35, + 0xf9, 0x3d, 0x53, 0x87, 0xcf, 0xde, 0x2a, 0x9e, 0xe4, 0x8e, 0xaa, 0x56, 0x7f, 0xd2, 0x51, 0xb5, + 0x0a, 0xd3, 0xde, 0x30, 0xd2, 0x69, 0x80, 0x3e, 0x81, 0x85, 0x84, 0x86, 0x90, 0xc6, 0x14, 0x2f, + 0x5c, 0xcb, 0xd1, 0x78, 0x68, 0x92, 0x31, 0x03, 0xe9, 0x1c, 0x54, 0x0d, 0x4d, 0xd9, 0x26, 0xcb, + 0x73, 0x59, 0xfa, 0x2b, 0x5d, 0x01, 0xb9, 0x41, 0xc6, 0xee, 0x84, 0xdc, 0x20, 0x73, 0x3b, 0x21, + 0x3e, 0x3d, 0x5a, 0x15, 0x2f, 0x4f, 0x4f, 0xbe, 0xcb, 0x20, 0x4f, 0x8f, 0xa1, 0xf0, 0x8f, 0xa3, + 0xbc, 0x52, 0xaa, 0xcb, 0x28, 0x9f, 0x6d, 0x06, 0xc8, 0x28, 0xaf, 0x55, 0xf5, 0xb1, 0x6a, 0xf9, + 0x62, 0xb4, 0xc0, 0xdd, 0x44, 0x15, 0x54, 0xe0, 0x6e, 0xb2, 0x30, 0x79, 0x09, 0x4d, 0x63, 0x35, + 0x86, 0x3e, 0x14, 0xeb, 0x8a, 0x2a, 0x47, 0x7b, 0xbb, 0x9c, 0x81, 0xc3, 0xcd, 0x97, 0x43, 0x12, + 0xae, 0xb1, 0x68, 0x93, 0x70, 0x0b, 0xea, 0xa8, 0x07, 0xb0, 0xac, 0x96, 0x2a, 0xf2, 0x28, 0x6a, + 0xa5, 0x92, 0x3c, 0x8a, 0xb9, 0xba, 0xe6, 0x08, 0x1a, 0x5a, 0x72, 0x2c, 0xb7, 0x32, 0x9f, 0xc0, + 0xcb, 0xad, 0x34, 0xe5, 0xd3, 0x2f, 0xa1, 0x69, 0x4c, 0xb6, 0xa5, 0xe5, 0x8a, 0xca, 0x02, 0x69, + 0xb9, 0xe2, 0x5c, 0xfd, 0x3e, 0x2c, 0x4a, 0xb2, 0x3c, 0xfb, 0x6a, 0x62, 0x2b, 0xcf, 0x7e, 0x36, + 0xff, 0x3c, 0x82, 0x86, 0xf6, 0x51, 0xa9, 0x5d, 0x3e, 0x39, 0x96, 0xda, 0x99, 0x32, 0xd9, 0x1f, + 0xc1, 0xba, 0x39, 0xd9, 0x43, 0xdb, 0xda, 0x75, 0x9c, 0x4b, 0x5a, 0xed, 0xdb, 0x57, 0x70, 0xf0, + 0xab, 0xbb, 0x20, 0x0b, 0x53, 0xaf, 0xee, 0x82, 0xd4, 0x50, 0xbd, 0xba, 0x8b, 0x12, 0xb9, 0xbd, + 0xc6, 0xcb, 0xfa, 0x0e, 0xff, 0xb7, 0xe3, 0xa7, 0xec, 0xf7, 0xb3, 0x39, 0xf6, 0x57, 0xc6, 0x4f, + 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x96, 0x91, 0x7b, 0xd5, 0x09, 0x29, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index f0db47bad..6f6af9aa9 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -13,7 +13,6 @@ message GroupAddMemberInfo{ int32 RoleLevel = 2; } - message CreateGroupReq{ repeated GroupAddMemberInfo InitMemberList = 1; server_api_params.GroupInfo GroupInfo = 2; @@ -391,7 +390,16 @@ message SetGroupMemberNicknameResp{ CommonResp CommonResp = 1; } +message GetJoinedSuperGroupListReq { + string operationID = 1; + string userID = 2; + string opUserID = 3; +} +message GetJoinedSuperGroupListResp { + CommonResp commonResp = 1; + repeated server_api_params.GroupInfo GroupList = 3; +} service group{ @@ -429,6 +437,7 @@ service group{ rpc SetGroupMemberNickname(SetGroupMemberNicknameReq) returns (SetGroupMemberNicknameResp); + rpc GetJoinedSuperGroupList(GetJoinedSuperGroupListReq) returns (GetJoinedSuperGroupListResp); } From 839f3e52ef47503fb7a3f7d7fa7320a10a4e3d82 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 11:56:32 +0800 Subject: [PATCH 267/752] pull message update --- internal/rpc/msg/pull_message.go | 2 +- pkg/common/db/mongoModel.go | 62 ++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index d9bb49344..1736baf83 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -77,7 +77,7 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull } else { log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) } - msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(k, failedSeqList, in.OperationID) + msgList, err1 := commonDB.DB.GetSuperGroupMsgBySeqListMongo(k, failedSeqList, in.OperationID) if err1 != nil { log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) resp.ErrCode = 201 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 97d8885a6..db6406d1f 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -306,6 +306,57 @@ func (d *DataBases) GetMsgBySeqListMongo2(uid string, seqList []uint32, operatio } return seqMsg, nil } +func (d *DataBases) GetSuperGroupMsgBySeqListMongo(groupID string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) { + var hasSeqList []uint32 + singleCount := 0 + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + + m := func(uid string, seqList []uint32) map[string][]uint32 { + t := make(map[string][]uint32) + for i := 0; i < len(seqList); i++ { + seqUid := getSeqUid(uid, seqList[i]) + if value, ok := t[seqUid]; !ok { + var temp []uint32 + t[seqUid] = append(temp, seqList[i]) + } else { + t[seqUid] = append(value, seqList[i]) + } + } + return t + }(groupID, seqList) + sChat := UserChat{} + for seqUid, value := range m { + if err = c.FindOne(ctx, bson.M{"uid": seqUid}).Decode(&sChat); err != nil { + log.NewError(operationID, "not find seqGroupID", seqUid, value, groupID, seqList, err.Error()) + continue + } + singleCount = 0 + for i := 0; i < len(sChat.Msg); i++ { + msg := new(open_im_sdk.MsgData) + if err = proto.Unmarshal(sChat.Msg[i].Msg, msg); err != nil { + log.NewError(operationID, "Unmarshal err", seqUid, value, groupID, seqList, err.Error()) + return nil, err + } + if isContainInt32(msg.Seq, value) { + seqMsg = append(seqMsg, msg) + hasSeqList = append(hasSeqList, msg.Seq) + singleCount++ + if singleCount == len(value) { + break + } + } + } + } + if len(hasSeqList) != len(seqList) { + var diff []uint32 + diff = utils.Difference(hasSeqList, seqList) + exceptionMSg := genExceptionSuperGroupMessageBySeqList(diff, groupID) + seqMsg = append(seqMsg, exceptionMSg...) + + } + return seqMsg, nil +} func (d *DataBases) GetMsgAndIndexBySeqListInOneMongo2(suffixUserID string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, indexList []int, unexistSeqList []uint32, err error) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) @@ -351,6 +402,17 @@ func genExceptionMessageBySeqList(seqList []uint32) (exceptionMsg []*open_im_sdk return exceptionMsg } +func genExceptionSuperGroupMessageBySeqList(seqList []uint32, groupID string) (exceptionMsg []*open_im_sdk.MsgData) { + for _, v := range seqList { + msg := new(open_im_sdk.MsgData) + msg.Seq = v + msg.GroupID = groupID + msg.SessionType = constant.SuperGroupChatType + exceptionMsg = append(exceptionMsg, msg) + } + return exceptionMsg +} + func (d *DataBases) SaveUserChatMongo2(uid string, sendTime int64, m *pbMsg.MsgDataToDB) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) From ae30b4359f0cda33071466593488ddccd8569309 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 30 May 2022 12:12:09 +0800 Subject: [PATCH 268/752] super group --- pkg/common/constant/constant.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 05906924a..6469356f3 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -85,7 +85,11 @@ const ( SignalingNotificationBegin = 1600 SignalingNotification = 1601 - SignalingNotificationEnd = 1699 + SignalingNotificationEnd = 1649 + + SuperGroupNotificationBegin = 1650 + SuperGroupUpdateNotification = 1621 + SuperGroupNotificationEnd = 1699 ConversationPrivateChatNotification = 1701 From d3fe5cdf34863851e7ab0b6f96e161da579e02df Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:10:26 +0800 Subject: [PATCH 269/752] superGroup --- internal/rpc/group/group.go | 13 +++++++ internal/rpc/group/super_group.go | 22 ++++++++++-- internal/rpc/msg/super_group_notification.go | 36 ++++++++++++++++++++ pkg/common/constant/constant.go | 5 ++- pkg/common/db/mongoModel.go | 31 ++++++++++++++++- 5 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 internal/rpc/msg/super_group_notification.go diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 46792cb93..192939c59 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -197,6 +197,11 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String()) if req.GroupInfo.GroupType != constant.SuperGroup { chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) + } else { + for _, userID := range okUserIDList { + chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) + } + } return resp, nil } else { @@ -377,6 +382,10 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite if groupInfo.GroupType != constant.SuperGroup { chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) + } else { + for _, userID := range okUserIDList { + chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) + } } log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") @@ -562,6 +571,10 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou } if groupInfo.GroupType != constant.SuperGroup { chat.MemberKickedNotification(req, okUserIDList) + } else { + for _, userID := range okUserIDList { + chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) + } } log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String()) return &resp, nil diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 9819664ef..675c14fd6 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -1,20 +1,38 @@ package group import ( + "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" + imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" pbGroup "Open_IM/pkg/proto/group" + commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" ) func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup.GetJoinedSuperGroupListReq) (*pbGroup.GetJoinedSuperGroupListResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) - resp := &pbGroup.GetJoinedSuperGroupListResp{} - _, err := db.DB.GetSuperGroupByUserID(req.UserID) + resp := &pbGroup.GetJoinedSuperGroupListResp{CommonResp: &pbGroup.CommonResp{}} + userToSuperGroup, err := db.DB.GetSuperGroupByUserID(req.UserID) if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSuperGroupByUserID failed", err.Error()) + resp.CommonResp.ErrCode = constant.ErrDB.ErrCode + resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg return resp, nil } + for _, groupID := range userToSuperGroup.GroupIDList { + groupInfoDB, err := imdb.GetGroupInfoByGroupID(groupID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupInfoByGroupID failed", groupID, err.Error()) + continue + } + groupInfo := &commonPb.GroupInfo{} + if err := utils.CopyStructFields(groupInfo, groupInfoDB); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + } + resp.GroupList = append(resp.GroupList, groupInfo) + } log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/internal/rpc/msg/super_group_notification.go b/internal/rpc/msg/super_group_notification.go new file mode 100644 index 000000000..56fad1ebd --- /dev/null +++ b/internal/rpc/msg/super_group_notification.go @@ -0,0 +1,36 @@ +package msg + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/log" + sdk "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" +) + +func SuperGroupNotification(operationID, sendID, recvID string) { + //var tips sdk.TipsComm + //var err error + //marshaler := jsonpb.Marshaler{ + // OrigName: true, + // EnumsAsInts: false, + // EmitDefaults: false, + //} + //tips.JsonDetail, _ = marshaler.MarshalToString(m) + n := &NotificationMsg{ + SendID: sendID, + RecvID: recvID, + MsgFrom: constant.UserMsgType, + ContentType: constant.SuperGroupUpdateNotification, + SessionType: constant.SingleChatType, + OperationID: operationID, + } + //n.Content, err = proto.Marshal(&tips) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), "proto.Marshal failed") + // return + //} + log.NewInfo(operationID, utils.GetSelfFuncName(), string(n.Content)) + Notification(n) +} diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 05906924a..ea650cb4c 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -94,7 +94,10 @@ const ( WorkMomentNotificationBegin = 1900 WorkMomentNotification = 1901 - NotificationEnd = 2000 + SuperGroupUpdateNotificationBegin = 2000 + SuperGroupUpdateNotification = 2001 + + NotificationEnd = 3000 //status MsgNormal = 1 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index d96c1494a..5915e42af 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -895,11 +895,36 @@ type UserToSuperGroup struct { func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, memberNumCount int) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + if err != nil { + return utils.Wrap(err, "start transaction failed") + } superGroup := SuperGroup{ GroupID: groupID, MemberIDList: initMemberIDList, } - _, err := c.InsertOne(ctx, superGroup) + _, err = c.InsertOne(sCtx, superGroup) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + var users []UserToSuperGroup + for _, v := range initMemberIDList { + users = append(users, UserToSuperGroup{ + UserID: v, + }) + } + _, err = c.UpdateOne(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) return err } @@ -954,6 +979,10 @@ func (d *DataBases) RemoverUserFromSuperGroup(groupID string, userIDList []strin defer session.EndSession(ctx) sCtx := mongo.NewSessionContext(ctx, session) _, err = c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } err = d.RemoveGroupFromUser(ctx, sCtx, groupID, userIDList) if err != nil { session.AbortTransaction(ctx) From 0b9e6d52b403542aa86c0e51bdbdeb8a8d44b0c8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:11:13 +0800 Subject: [PATCH 270/752] superGroup --- pkg/common/constant/constant.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index b89c117f7..760afb7c7 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -98,9 +98,6 @@ const ( WorkMomentNotificationBegin = 1900 WorkMomentNotification = 1901 - SuperGroupUpdateNotificationBegin = 2000 - SuperGroupUpdateNotification = 2001 - NotificationEnd = 3000 //status From 08a7dbe319caedbf4129055092fe6480060f80ee Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 15:15:46 +0800 Subject: [PATCH 271/752] message update --- internal/api/chat/get_max_min_seq.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/api/chat/get_max_min_seq.go b/internal/api/chat/get_max_min_seq.go index 38379d4cc..5cca7c775 100644 --- a/internal/api/chat/get_max_min_seq.go +++ b/internal/api/chat/get_max_min_seq.go @@ -5,7 +5,8 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" - pbMsg "Open_IM/pkg/proto/chat" + pbChat "Open_IM/pkg/proto/chat" + sdk_ws "Open_IM/pkg/proto/sdk_ws" "context" "github.com/gin-gonic/gin" "net/http" @@ -31,11 +32,11 @@ func GetSeq(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "token validate err" + err.Error()}) return } - pbData := pbMsg.GetMaxAndMinSeqReq{} + pbData := sdk_ws.GetMaxAndMinSeqReq{} pbData.UserID = params.SendID pbData.OperationID = params.OperationID grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbMsg.NewChatClient(grpcConn) + msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.GetMaxAndMinSeq(context.Background(), &pbData) if err != nil { log.NewError(params.OperationID, "UserGetSeq rpc failed, ", params, err.Error()) From 110f5e02f4a9c2eb982b6a14f24cb6f18dcf7f52 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:27:23 +0800 Subject: [PATCH 272/752] superGroup --- internal/rpc/group/super_group.go | 6 ++++++ internal/rpc/msg/super_group_notification.go | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 675c14fd6..22952cd87 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -31,6 +31,12 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. if err := utils.CopyStructFields(groupInfo, groupInfoDB); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) } + group, err := db.DB.GetSuperGroup(groupID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSuperGroup failed", groupID, err.Error()) + continue + } + groupInfo.MemberCount = uint32(len(group.MemberIDList)) resp.GroupList = append(resp.GroupList, groupInfo) } log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) diff --git a/internal/rpc/msg/super_group_notification.go b/internal/rpc/msg/super_group_notification.go index 56fad1ebd..32e86e167 100644 --- a/internal/rpc/msg/super_group_notification.go +++ b/internal/rpc/msg/super_group_notification.go @@ -3,10 +3,10 @@ package msg import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" - sdk "Open_IM/pkg/proto/sdk_ws" + //sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" + //"github.com/golang/protobuf/jsonpb" + //"github.com/golang/protobuf/proto" ) func SuperGroupNotification(operationID, sendID, recvID string) { From edb5cb4ee585eb77169002281238841878442d51 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:45:19 +0800 Subject: [PATCH 273/752] superGroup --- pkg/common/db/mongoModel.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 29e7e10d1..3fc7aa041 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -981,7 +981,11 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, UserID: v, }) } - _, err = c.UpdateOne(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + upsert := true + opts := &options.UpdateOptions{ + Upsert: &upsert, + } + _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") From 5e5597ef19355002c3a105ea9ead8bbdfd69f30d Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 30 May 2022 15:49:35 +0800 Subject: [PATCH 274/752] super group --- pkg/base_info/super_group.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/base_info/super_group.go b/pkg/base_info/super_group.go index 4c01789cf..10c70293b 100644 --- a/pkg/base_info/super_group.go +++ b/pkg/base_info/super_group.go @@ -7,3 +7,11 @@ type GetJoinedSuperGroupReq struct { type GetJoinedSuperGroupResp struct { GetJoinedGroupListResp } + +type GetSuperGroupsInfoReq struct { + GetGroupInfoReq +} + +type GetSuperGroupsInfoResp struct { + GetGroupInfoResp +} From 653c0faa18613d00a8df17d8307d60d62dcaaf7d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 16:23:15 +0800 Subject: [PATCH 275/752] superGroup --- cmd/open_im_api/main.go | 1 + internal/api/group/super_group.go | 35 +- internal/rpc/group/super_group.go | 20 ++ pkg/base_info/super_group.go | 12 +- pkg/common/db/mongoModel.go | 6 +- pkg/proto/group/group.pb.go | 552 +++++++++++++++++++----------- pkg/proto/group/group.proto | 11 + 7 files changed, 425 insertions(+), 212 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index cd9cf707b..17400d1cd 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -93,6 +93,7 @@ func main() { superGroupRouterGroup := r.Group("/super_group") { superGroupRouterGroup.POST("/get_joined_super_group_list", group.GetJoinedSuperGroupList) + superGroupRouterGroup.POST("/get_super_groups_info", group.GetSuperGroupsInfo) } //certificate authRouterGroup := r.Group("/auth") diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index 55f058d8c..35fd88f7a 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -5,6 +5,7 @@ import ( api "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" rpc "Open_IM/pkg/proto/group" "Open_IM/pkg/utils" @@ -15,7 +16,7 @@ import ( ) func GetJoinedSuperGroupList(c *gin.Context) { - req := api.GetJoinedSuperGroupReq{} + req := api.GetJoinedSuperGroupListReq{} if err := c.BindJSON(&req); err != nil { log.NewError("0", "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) @@ -31,8 +32,38 @@ func GetJoinedSuperGroupList(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) return } - GroupListResp := api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList} + GroupListResp := api.GetJoinedSuperGroupListResp{GetJoinedGroupListResp: api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList}} GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList) log.NewInfo(req.OperationID, "GetJoinedGroupList api return ", GroupListResp) c.JSON(http.StatusOK, GroupListResp) } + +func GetSuperGroupsInfo(c *gin.Context) { + req := api.GetSuperGroupsInfoReq{} + if err := c.BindJSON(&req); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + reqPb := rpc.GetSuperGroupsInfoReq{OperationID: req.OperationID, OpUserID: opUserID, GroupIDList: req.GroupIDList} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + client := rpc.NewGroupClient(etcdConn) + rpcResp, err := client.GetSuperGroupsInfo(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), reqPb.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + return + } + resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupInfoList}} + resp.Data = jsonData.JsonDataList(resp.GroupInfoList) + log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) + c.JSON(http.StatusOK, resp) +} diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 22952cd87..384ec8a23 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -5,6 +5,7 @@ import ( "Open_IM/pkg/common/db" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" + cp "Open_IM/pkg/common/utils" pbGroup "Open_IM/pkg/proto/group" commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" @@ -42,3 +43,22 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } + +func (s *groupServer) GetSuperGroupsInfo(_ context.Context, req *pbGroup.GetSuperGroupsInfoReq) (resp *pbGroup.GetSuperGroupsInfoResp, err error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp = &pbGroup.GetSuperGroupsInfoResp{} + groupsInfoList := make([]*commonPb.GroupInfo, 0) + for _, groupID := range req.GroupIDList { + groupInfoFromMysql, err := imdb.GetGroupInfoByGroupID(groupID) + if err != nil { + log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupID) + continue + } + var groupInfo commonPb.GroupInfo + cp.GroupDBCopyOpenIM(&groupInfo, groupInfoFromMysql) + groupsInfoList = append(groupsInfoList, &groupInfo) + } + resp.GroupInfoList = groupsInfoList + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return resp, nil +} diff --git a/pkg/base_info/super_group.go b/pkg/base_info/super_group.go index 4c01789cf..8ea24e014 100644 --- a/pkg/base_info/super_group.go +++ b/pkg/base_info/super_group.go @@ -1,9 +1,17 @@ package base_info -type GetJoinedSuperGroupReq struct { +type GetJoinedSuperGroupListReq struct { GetJoinedGroupListReq } -type GetJoinedSuperGroupResp struct { +type GetJoinedSuperGroupListResp struct { GetJoinedGroupListResp } + +type GetSuperGroupsInfoReq struct { + GetGroupInfoReq +} + +type GetSuperGroupsInfoResp struct { + GetGroupInfoResp +} diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 3fc7aa041..0e849290d 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1026,7 +1026,11 @@ func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) err UserID: v, }) } - _, err = c.UpdateMany(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + upsert := true + opts := &options.UpdateOptions{ + Upsert: &upsert, + } + _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": userIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index 80ef2dfc4..4dcf62098 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{0} + return fileDescriptor_group_befc34d716b1ae6c, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +82,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{1} + return fileDescriptor_group_befc34d716b1ae6c, []int{1} } func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) @@ -131,7 +131,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{2} + return fileDescriptor_group_befc34d716b1ae6c, []int{2} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -199,7 +199,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{3} + return fileDescriptor_group_befc34d716b1ae6c, []int{3} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -253,7 +253,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{4} + return fileDescriptor_group_befc34d716b1ae6c, []int{4} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -307,7 +307,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{5} + return fileDescriptor_group_befc34d716b1ae6c, []int{5} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -361,7 +361,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{6} + return fileDescriptor_group_befc34d716b1ae6c, []int{6} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -413,7 +413,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{7} + return fileDescriptor_group_befc34d716b1ae6c, []int{7} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -453,7 +453,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{8} + return fileDescriptor_group_befc34d716b1ae6c, []int{8} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -507,7 +507,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{9} + return fileDescriptor_group_befc34d716b1ae6c, []int{9} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -561,7 +561,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{10} + return fileDescriptor_group_befc34d716b1ae6c, []int{10} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -614,7 +614,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{11} + return fileDescriptor_group_befc34d716b1ae6c, []int{11} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -663,7 +663,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{12} + return fileDescriptor_group_befc34d716b1ae6c, []int{12} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -729,7 +729,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{13} + return fileDescriptor_group_befc34d716b1ae6c, []int{13} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -770,7 +770,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{14} + return fileDescriptor_group_befc34d716b1ae6c, []int{14} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -829,7 +829,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{15} + return fileDescriptor_group_befc34d716b1ae6c, []int{15} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -872,7 +872,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{16} + return fileDescriptor_group_befc34d716b1ae6c, []int{16} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -945,7 +945,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{17} + return fileDescriptor_group_befc34d716b1ae6c, []int{17} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -985,7 +985,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{18} + return fileDescriptor_group_befc34d716b1ae6c, []int{18} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -1037,7 +1037,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{19} + return fileDescriptor_group_befc34d716b1ae6c, []int{19} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -1079,7 +1079,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{20} + return fileDescriptor_group_befc34d716b1ae6c, []int{20} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -1148,7 +1148,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{} func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{21} + return fileDescriptor_group_befc34d716b1ae6c, []int{21} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -1210,7 +1210,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{} func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{22} + return fileDescriptor_group_befc34d716b1ae6c, []int{22} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -1271,7 +1271,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{23} + return fileDescriptor_group_befc34d716b1ae6c, []int{23} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -1327,7 +1327,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{24} + return fileDescriptor_group_befc34d716b1ae6c, []int{24} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1394,7 +1394,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} } func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (*Id2Result) ProtoMessage() {} func (*Id2Result) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{25} + return fileDescriptor_group_befc34d716b1ae6c, []int{25} } func (m *Id2Result) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Id2Result.Unmarshal(m, b) @@ -1441,7 +1441,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{26} + return fileDescriptor_group_befc34d716b1ae6c, []int{26} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1495,7 +1495,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{27} + return fileDescriptor_group_befc34d716b1ae6c, []int{27} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1549,7 +1549,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{} func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{28} + return fileDescriptor_group_befc34d716b1ae6c, []int{28} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1605,7 +1605,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{29} + return fileDescriptor_group_befc34d716b1ae6c, []int{29} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1673,7 +1673,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{30} + return fileDescriptor_group_befc34d716b1ae6c, []int{30} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1727,7 +1727,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{31} + return fileDescriptor_group_befc34d716b1ae6c, []int{31} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1781,7 +1781,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{32} + return fileDescriptor_group_befc34d716b1ae6c, []int{32} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1835,7 +1835,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{33} + return fileDescriptor_group_befc34d716b1ae6c, []int{33} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1889,7 +1889,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{34} + return fileDescriptor_group_befc34d716b1ae6c, []int{34} } func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) @@ -1943,7 +1943,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{35} + return fileDescriptor_group_befc34d716b1ae6c, []int{35} } func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) @@ -1996,7 +1996,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{36} + return fileDescriptor_group_befc34d716b1ae6c, []int{36} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -2043,7 +2043,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{37} + return fileDescriptor_group_befc34d716b1ae6c, []int{37} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -2096,7 +2096,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{38} + return fileDescriptor_group_befc34d716b1ae6c, []int{38} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -2143,7 +2143,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{39} + return fileDescriptor_group_befc34d716b1ae6c, []int{39} } func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) @@ -2194,7 +2194,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{} func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{40} + return fileDescriptor_group_befc34d716b1ae6c, []int{40} } func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) @@ -2228,7 +2228,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{41} + return fileDescriptor_group_befc34d716b1ae6c, []int{41} } func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) @@ -2286,7 +2286,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{42} + return fileDescriptor_group_befc34d716b1ae6c, []int{42} } func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) @@ -2318,7 +2318,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{43} + return fileDescriptor_group_befc34d716b1ae6c, []int{43} } func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) @@ -2362,7 +2362,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{44} + return fileDescriptor_group_befc34d716b1ae6c, []int{44} } func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) @@ -2394,7 +2394,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{45} + return fileDescriptor_group_befc34d716b1ae6c, []int{45} } func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) @@ -2439,7 +2439,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{46} + return fileDescriptor_group_befc34d716b1ae6c, []int{46} } func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) @@ -2480,7 +2480,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{47} + return fileDescriptor_group_befc34d716b1ae6c, []int{47} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -2541,7 +2541,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{48} + return fileDescriptor_group_befc34d716b1ae6c, []int{48} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -2596,7 +2596,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{49} + return fileDescriptor_group_befc34d716b1ae6c, []int{49} } func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) @@ -2656,7 +2656,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{50} + return fileDescriptor_group_befc34d716b1ae6c, []int{50} } func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) @@ -2704,7 +2704,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{51} + return fileDescriptor_group_befc34d716b1ae6c, []int{51} } func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) @@ -2764,7 +2764,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{} func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{52} + return fileDescriptor_group_befc34d716b1ae6c, []int{52} } func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) @@ -2811,7 +2811,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{53} + return fileDescriptor_group_befc34d716b1ae6c, []int{53} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -2863,7 +2863,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{54} + return fileDescriptor_group_befc34d716b1ae6c, []int{54} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -2905,7 +2905,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{55} + return fileDescriptor_group_befc34d716b1ae6c, []int{55} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -2971,7 +2971,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{56} + return fileDescriptor_group_befc34d716b1ae6c, []int{56} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -3012,7 +3012,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{57} + return fileDescriptor_group_befc34d716b1ae6c, []int{57} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -3071,7 +3071,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{58} + return fileDescriptor_group_befc34d716b1ae6c, []int{58} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -3111,7 +3111,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{59} + return fileDescriptor_group_befc34d716b1ae6c, []int{59} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -3163,7 +3163,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{60} + return fileDescriptor_group_befc34d716b1ae6c, []int{60} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -3203,7 +3203,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{61} + return fileDescriptor_group_befc34d716b1ae6c, []int{61} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -3255,7 +3255,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{62} + return fileDescriptor_group_befc34d716b1ae6c, []int{62} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -3297,7 +3297,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{63} + return fileDescriptor_group_befc34d716b1ae6c, []int{63} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -3363,7 +3363,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{64} + return fileDescriptor_group_befc34d716b1ae6c, []int{64} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -3403,7 +3403,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListReq) ProtoMessage() {} func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{65} + return fileDescriptor_group_befc34d716b1ae6c, []int{65} } func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) @@ -3456,7 +3456,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListResp) ProtoMessage() {} func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{66} + return fileDescriptor_group_befc34d716b1ae6c, []int{66} } func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) @@ -3490,6 +3490,106 @@ func (m *GetJoinedSuperGroupListResp) GetGroupList() []*sdk_ws.GroupInfo { return nil } +type GetSuperGroupsInfoReq struct { + GroupIDList []string `protobuf:"bytes,1,rep,name=GroupIDList" json:"GroupIDList,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} } +func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) } +func (*GetSuperGroupsInfoReq) ProtoMessage() {} +func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) { + return fileDescriptor_group_befc34d716b1ae6c, []int{67} +} +func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b) +} +func (m *GetSuperGroupsInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetSuperGroupsInfoReq.Marshal(b, m, deterministic) +} +func (dst *GetSuperGroupsInfoReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetSuperGroupsInfoReq.Merge(dst, src) +} +func (m *GetSuperGroupsInfoReq) XXX_Size() int { + return xxx_messageInfo_GetSuperGroupsInfoReq.Size(m) +} +func (m *GetSuperGroupsInfoReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetSuperGroupsInfoReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetSuperGroupsInfoReq proto.InternalMessageInfo + +func (m *GetSuperGroupsInfoReq) GetGroupIDList() []string { + if m != nil { + return m.GroupIDList + } + return nil +} + +func (m *GetSuperGroupsInfoReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *GetSuperGroupsInfoReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +type GetSuperGroupsInfoResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + GroupInfoList []*sdk_ws.GroupInfo `protobuf:"bytes,3,rep,name=GroupInfoList" json:"GroupInfoList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{} } +func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) } +func (*GetSuperGroupsInfoResp) ProtoMessage() {} +func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) { + return fileDescriptor_group_befc34d716b1ae6c, []int{68} +} +func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b) +} +func (m *GetSuperGroupsInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetSuperGroupsInfoResp.Marshal(b, m, deterministic) +} +func (dst *GetSuperGroupsInfoResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetSuperGroupsInfoResp.Merge(dst, src) +} +func (m *GetSuperGroupsInfoResp) XXX_Size() int { + return xxx_messageInfo_GetSuperGroupsInfoResp.Size(m) +} +func (m *GetSuperGroupsInfoResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetSuperGroupsInfoResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetSuperGroupsInfoResp proto.InternalMessageInfo + +func (m *GetSuperGroupsInfoResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func (m *GetSuperGroupsInfoResp) GetGroupInfoList() []*sdk_ws.GroupInfo { + if m != nil { + return m.GroupInfoList + } + return nil +} + func init() { proto.RegisterType((*CommonResp)(nil), "group.CommonResp") proto.RegisterType((*GroupAddMemberInfo)(nil), "group.GroupAddMemberInfo") @@ -3558,6 +3658,8 @@ func init() { proto.RegisterType((*SetGroupMemberNicknameResp)(nil), "group.SetGroupMemberNicknameResp") proto.RegisterType((*GetJoinedSuperGroupListReq)(nil), "group.GetJoinedSuperGroupListReq") proto.RegisterType((*GetJoinedSuperGroupListResp)(nil), "group.GetJoinedSuperGroupListResp") + proto.RegisterType((*GetSuperGroupsInfoReq)(nil), "group.GetSuperGroupsInfoReq") + proto.RegisterType((*GetSuperGroupsInfoResp)(nil), "group.GetSuperGroupsInfoResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -3602,6 +3704,7 @@ type GroupClient interface { CancelMuteGroup(ctx context.Context, in *CancelMuteGroupReq, opts ...grpc.CallOption) (*CancelMuteGroupResp, error) SetGroupMemberNickname(ctx context.Context, in *SetGroupMemberNicknameReq, opts ...grpc.CallOption) (*SetGroupMemberNicknameResp, error) GetJoinedSuperGroupList(ctx context.Context, in *GetJoinedSuperGroupListReq, opts ...grpc.CallOption) (*GetJoinedSuperGroupListResp, error) + GetSuperGroupsInfo(ctx context.Context, in *GetSuperGroupsInfoReq, opts ...grpc.CallOption) (*GetSuperGroupsInfoResp, error) } type groupClient struct { @@ -3891,6 +3994,15 @@ func (c *groupClient) GetJoinedSuperGroupList(ctx context.Context, in *GetJoined return out, nil } +func (c *groupClient) GetSuperGroupsInfo(ctx context.Context, in *GetSuperGroupsInfoReq, opts ...grpc.CallOption) (*GetSuperGroupsInfoResp, error) { + out := new(GetSuperGroupsInfoResp) + err := grpc.Invoke(ctx, "/group.group/GetSuperGroupsInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Group service type GroupServer interface { @@ -3925,6 +4037,7 @@ type GroupServer interface { CancelMuteGroup(context.Context, *CancelMuteGroupReq) (*CancelMuteGroupResp, error) SetGroupMemberNickname(context.Context, *SetGroupMemberNicknameReq) (*SetGroupMemberNicknameResp, error) GetJoinedSuperGroupList(context.Context, *GetJoinedSuperGroupListReq) (*GetJoinedSuperGroupListResp, error) + GetSuperGroupsInfo(context.Context, *GetSuperGroupsInfoReq) (*GetSuperGroupsInfoResp, error) } func RegisterGroupServer(s *grpc.Server, srv GroupServer) { @@ -4489,6 +4602,24 @@ func _Group_GetJoinedSuperGroupList_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _Group_GetSuperGroupsInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSuperGroupsInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServer).GetSuperGroupsInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/group.group/GetSuperGroupsInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServer).GetSuperGroupsInfo(ctx, req.(*GetSuperGroupsInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Group_serviceDesc = grpc.ServiceDesc{ ServiceName: "group.group", HandlerType: (*GroupServer)(nil), @@ -4617,150 +4748,157 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "GetJoinedSuperGroupList", Handler: _Group_GetJoinedSuperGroupList_Handler, }, + { + MethodName: "GetSuperGroupsInfo", + Handler: _Group_GetSuperGroupsInfo_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_d7fc3287ce9ff601) } +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_befc34d716b1ae6c) } -var fileDescriptor_group_d7fc3287ce9ff601 = []byte{ - // 2190 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49, - 0x15, 0x57, 0xdb, 0x19, 0xff, 0x79, 0xf6, 0x64, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7, - 0x36, 0xac, 0x22, 0xfe, 0xd8, 0x22, 0x2b, 0xe5, 0xc0, 0x22, 0x42, 0xfc, 0x27, 0xf1, 0x24, 0x19, - 0x9b, 0xb4, 0xc3, 0x25, 0x12, 0x0a, 0xb3, 0xd3, 0xe5, 0xd1, 0xe0, 0x99, 0xee, 0x76, 0x57, 0x8f, - 0x03, 0x5c, 0x56, 0x5c, 0x56, 0x5a, 0xe0, 0x00, 0x42, 0xe2, 0x84, 0x04, 0x7b, 0x82, 0x03, 0x07, - 0x0e, 0x70, 0x46, 0x7c, 0x0a, 0xc4, 0xa7, 0xe0, 0x2b, 0xa0, 0xae, 0xaa, 0xae, 0xae, 0xae, 0xae, - 0x6e, 0x4f, 0x7a, 0x12, 0x72, 0x19, 0xa9, 0x5e, 0xbd, 0xea, 0xf7, 0x7b, 0xaf, 0xea, 0xbd, 0x7a, - 0xef, 0xd5, 0xc0, 0x6a, 0x3f, 0xf4, 0xc7, 0xc1, 0x2e, 0xfb, 0xdd, 0x09, 0x42, 0x3f, 0xf2, 0x51, - 0x8d, 0x0d, 0xec, 0xdb, 0x27, 0x01, 0xf1, 0x5e, 0xb5, 0x3b, 0xbb, 0xc1, 0x79, 0x7f, 0x97, 0xcd, - 0xec, 0x52, 0xf7, 0xfc, 0xd5, 0x6b, 0xba, 0xfb, 0x9a, 0x72, 0x4e, 0xfc, 0x3d, 0x80, 0x7d, 0x7f, - 0x34, 0xf2, 0x3d, 0x87, 0xd0, 0x00, 0xb5, 0x60, 0xfe, 0x30, 0x0c, 0xf7, 0x7d, 0x97, 0xb4, 0xac, - 0x6d, 0xeb, 0x6e, 0xcd, 0x49, 0x86, 0x68, 0x1d, 0xe6, 0x0e, 0xc3, 0xb0, 0x43, 0xfb, 0xad, 0x99, - 0x6d, 0xeb, 0xee, 0xa2, 0x23, 0x46, 0xf8, 0x09, 0xa0, 0xc7, 0xb1, 0xac, 0x87, 0xae, 0xdb, 0x21, - 0xa3, 0xcf, 0x48, 0xd8, 0xf6, 0xce, 0xfc, 0x98, 0xfb, 0x87, 0x94, 0x84, 0xed, 0x03, 0xf6, 0x99, - 0x45, 0x47, 0x8c, 0xd0, 0x16, 0x2c, 0x3a, 0xfe, 0x90, 0x3c, 0x23, 0x97, 0x64, 0xc8, 0x3e, 0x54, - 0x73, 0x52, 0x02, 0xfe, 0xaf, 0x05, 0xd7, 0xf7, 0x43, 0xd2, 0x8d, 0x08, 0xfb, 0xa4, 0x43, 0x2e, - 0xd0, 0x43, 0xb8, 0xde, 0xf6, 0x06, 0x11, 0xff, 0xf4, 0xb3, 0x01, 0x8d, 0x5a, 0xd6, 0xf6, 0xec, - 0xdd, 0xa5, 0x7b, 0x9b, 0x3b, 0x5c, 0xdd, 0xbc, 0x6c, 0x47, 0x5b, 0x80, 0xbe, 0x03, 0x8b, 0x8c, - 0x2b, 0x9e, 0x64, 0x32, 0x97, 0xee, 0x6d, 0xed, 0x50, 0x12, 0x5e, 0x92, 0xf0, 0x55, 0x37, 0x18, - 0xbc, 0x0a, 0xba, 0x61, 0x77, 0x44, 0x77, 0x24, 0x8f, 0x93, 0xb2, 0xa3, 0x6d, 0x58, 0x3a, 0x09, - 0x48, 0xd8, 0x8d, 0x06, 0xbe, 0xd7, 0x3e, 0x68, 0xcd, 0x32, 0x65, 0x54, 0x12, 0xb2, 0x61, 0xe1, - 0x24, 0x10, 0xba, 0x5e, 0x63, 0xd3, 0x72, 0xcc, 0x56, 0xbf, 0xf6, 0x48, 0x28, 0xa6, 0x6b, 0x62, - 0x75, 0x4a, 0xc2, 0x9f, 0x43, 0x23, 0xa3, 0x70, 0x95, 0x2d, 0xc8, 0x2a, 0x38, 0xfb, 0x46, 0x0a, - 0xe2, 0x10, 0x56, 0x1e, 0x93, 0x88, 0x8d, 0x29, 0x9b, 0x23, 0x17, 0x31, 0x6c, 0xce, 0x70, 0x20, - 0x0d, 0xbe, 0xe8, 0xa8, 0x24, 0xdd, 0x2c, 0x33, 0xe5, 0x66, 0x99, 0xcd, 0x9a, 0x05, 0x7f, 0x69, - 0xc1, 0xaa, 0x26, 0xb4, 0x92, 0xde, 0x7b, 0x50, 0x97, 0x8a, 0x30, 0xa4, 0xb3, 0xec, 0x68, 0x94, - 0xeb, 0x9e, 0x5d, 0x82, 0x7f, 0x65, 0x41, 0xe3, 0x54, 0x60, 0x49, 0xf4, 0xcf, 0xd8, 0xd3, 0x7a, - 0xb3, 0x03, 0xa3, 0xea, 0x3d, 0x63, 0x38, 0x0e, 0xa5, 0x87, 0x09, 0x1f, 0xc2, 0x4a, 0x16, 0x0c, - 0x0d, 0xd0, 0xb7, 0x55, 0x07, 0x15, 0x70, 0x56, 0xc5, 0xe9, 0x4f, 0x27, 0x1c, 0x85, 0x09, 0xff, - 0x1c, 0xec, 0xc4, 0xbe, 0x0f, 0x83, 0x60, 0x38, 0xe8, 0xb1, 0xef, 0xc7, 0xfa, 0xc6, 0xea, 0xa9, - 0x10, 0xad, 0x72, 0x88, 0x86, 0x8d, 0xbd, 0x05, 0xf0, 0x28, 0xf4, 0x47, 0x99, 0xad, 0x55, 0x28, - 0xf8, 0x0f, 0x16, 0xdc, 0x2c, 0x14, 0x5e, 0x69, 0x9b, 0x9f, 0xc2, 0x4a, 0x12, 0x0e, 0xc6, 0x84, - 0x46, 0xca, 0x4e, 0x7f, 0x58, 0xb4, 0x2b, 0x82, 0xd5, 0xc9, 0x2d, 0xc4, 0x11, 0x6c, 0x3d, 0x26, - 0x51, 0x8c, 0xd5, 0x21, 0x17, 0x06, 0xe3, 0x14, 0x05, 0xae, 0xe9, 0xf6, 0xf5, 0x8f, 0x16, 0x7c, - 0x50, 0x22, 0xb6, 0xd2, 0x2e, 0x1b, 0xed, 0x32, 0x53, 0xd5, 0x2e, 0xff, 0xb4, 0xa0, 0xf9, 0x22, - 0xec, 0x7a, 0xf4, 0x8c, 0x84, 0x6c, 0x92, 0x45, 0xa9, 0xd8, 0x22, 0x2d, 0x98, 0x17, 0xae, 0x2f, - 0x4c, 0x92, 0x0c, 0xd1, 0xc7, 0x70, 0xfd, 0x64, 0xe8, 0xaa, 0x11, 0x8e, 0x5b, 0x46, 0xa3, 0xc6, - 0x7c, 0xc7, 0xe4, 0xb5, 0xca, 0xc7, 0x4d, 0xa4, 0x51, 0x75, 0x3b, 0x5e, 0x2b, 0x8f, 0x2a, 0x35, - 0x2d, 0xaa, 0x3c, 0x85, 0x75, 0x93, 0x02, 0xd5, 0x3c, 0xe8, 0x0b, 0x0b, 0x96, 0x9f, 0xf8, 0x03, - 0x4f, 0xde, 0x43, 0xc5, 0x56, 0xb8, 0x05, 0xe0, 0x90, 0x8b, 0x0e, 0xa1, 0xb4, 0xdb, 0x27, 0xc2, - 0x02, 0x0a, 0xa5, 0x2c, 0x12, 0x5e, 0xad, 0x31, 0xde, 0x83, 0xba, 0x82, 0xa3, 0x9a, 0x32, 0xff, - 0x89, 0x5d, 0x52, 0xf3, 0xc7, 0x78, 0xc2, 0xf7, 0x28, 0x11, 0xf1, 0x5e, 0x45, 0x61, 0x95, 0xdb, - 0x5d, 0x3f, 0xfd, 0x8a, 0x65, 0x66, 0x73, 0x96, 0x51, 0x42, 0xc5, 0x35, 0x3d, 0x54, 0xc4, 0xf3, - 0x47, 0x5d, 0xcf, 0x1d, 0x12, 0x37, 0x76, 0x7a, 0xbe, 0x9f, 0x0a, 0x05, 0x61, 0x58, 0xe6, 0x23, - 0x87, 0xd0, 0xf1, 0x30, 0x6a, 0xcd, 0xb1, 0x78, 0x91, 0xa1, 0xe1, 0xe7, 0xb0, 0x55, 0xac, 0x5a, - 0x35, 0x73, 0x9d, 0xc1, 0xf2, 0xf3, 0xf1, 0x20, 0x9a, 0x60, 0xeb, 0xa7, 0xbb, 0x06, 0xf7, 0xa0, - 0xae, 0xc8, 0xa9, 0x86, 0xf5, 0x2b, 0x0b, 0x9a, 0x49, 0xb4, 0x4d, 0x53, 0x9e, 0x72, 0xd4, 0x53, - 0x85, 0xb2, 0x38, 0x40, 0x3e, 0x1a, 0x0c, 0x23, 0x12, 0xb2, 0x0d, 0xad, 0x39, 0x62, 0x14, 0xcb, - 0x3b, 0x26, 0x3f, 0x8d, 0x4e, 0xc9, 0x05, 0xdb, 0xc9, 0x9a, 0x93, 0x0c, 0xf1, 0x5f, 0x2d, 0x58, - 0x37, 0x61, 0xac, 0x74, 0x19, 0x3c, 0x02, 0x18, 0xa5, 0xb9, 0x20, 0xbf, 0x06, 0x3e, 0x2e, 0x0a, - 0x77, 0x5c, 0xda, 0xa3, 0xf1, 0x70, 0xc8, 0x6e, 0x53, 0x65, 0x65, 0x2c, 0xd9, 0x13, 0x70, 0xb9, - 0x1e, 0xc9, 0x10, 0xff, 0x26, 0x07, 0x57, 0x26, 0x46, 0xa5, 0x41, 0x40, 0x81, 0x35, 0xc3, 0x32, - 0x26, 0x55, 0xdc, 0x74, 0x41, 0xe0, 0x77, 0x16, 0x6c, 0x18, 0x21, 0xbd, 0x4f, 0x13, 0xe2, 0xbf, - 0x59, 0x80, 0x9e, 0x0e, 0x7a, 0xe7, 0x0a, 0x5f, 0xb9, 0x91, 0xbe, 0x0e, 0x2b, 0x31, 0x3f, 0x71, - 0xb9, 0xe2, 0x8a, 0xa9, 0x72, 0xf4, 0x18, 0xbc, 0x43, 0xba, 0xd4, 0xf7, 0x84, 0xb9, 0xc4, 0x48, - 0x37, 0x56, 0xad, 0xdc, 0xe5, 0xe6, 0x34, 0x97, 0xfb, 0x14, 0x16, 0xdb, 0xee, 0x3d, 0x1e, 0x3a, - 0x0a, 0xaf, 0x7a, 0x26, 0x9a, 0x05, 0x1c, 0x5e, 0xa0, 0x88, 0x11, 0xfe, 0x1c, 0xd6, 0x72, 0xea, - 0x56, 0xda, 0x80, 0xfb, 0x50, 0x97, 0x28, 0x94, 0x3d, 0x58, 0x11, 0xae, 0x2e, 0xe7, 0x9c, 0x2c, - 0x1b, 0x1e, 0x33, 0x5f, 0x8f, 0xaf, 0x03, 0xe2, 0x32, 0x14, 0x89, 0xaf, 0x67, 0x03, 0xad, 0x95, - 0x0b, 0xb4, 0xdb, 0xb0, 0xe4, 0xe7, 0xe3, 0x94, 0x3f, 0x61, 0x9c, 0xfa, 0x82, 0x3b, 0x44, 0x4e, - 0xee, 0x54, 0xb5, 0xca, 0xc4, 0xf9, 0x7a, 0xca, 0x8e, 0xff, 0x6e, 0xc1, 0x8d, 0xb6, 0x77, 0x39, - 0x88, 0x48, 0x8c, 0xec, 0x85, 0x2f, 0x23, 0xf4, 0xd5, 0x71, 0xb8, 0xf8, 0x92, 0x4a, 0x0f, 0xda, - 0xb5, 0xcc, 0x41, 0xfb, 0x26, 0xac, 0x72, 0x59, 0xea, 0x69, 0xad, 0xb1, 0xd3, 0x9a, 0x9f, 0x28, - 0x3d, 0x74, 0xbf, 0xb0, 0xa0, 0x69, 0x80, 0xfd, 0x7f, 0x3d, 0x3a, 0x1e, 0xdc, 0x90, 0x49, 0xf9, - 0x70, 0x38, 0x89, 0xb3, 0x4e, 0x97, 0xf0, 0xfe, 0x56, 0xb9, 0x97, 0x14, 0x81, 0xef, 0x35, 0x5e, - 0xfd, 0xde, 0x82, 0x85, 0xfd, 0xce, 0x29, 0x63, 0x9b, 0xaa, 0xc6, 0xbb, 0x0b, 0x0d, 0x2e, 0xab, - 0x4b, 0x23, 0x12, 0x1e, 0x77, 0x47, 0x49, 0xda, 0xa7, 0x93, 0xd1, 0x1d, 0x51, 0xa1, 0x72, 0x52, - 0xdb, 0x15, 0xa6, 0xca, 0x12, 0xe3, 0xf0, 0xbe, 0x94, 0x18, 0x2b, 0xde, 0x94, 0x2d, 0x81, 0x8d, - 0x7d, 0x99, 0x6f, 0x4b, 0x4a, 0x40, 0x07, 0x00, 0x3f, 0xe8, 0xf6, 0x07, 0x1e, 0x33, 0xb5, 0xe8, - 0x67, 0xdc, 0x31, 0x40, 0x17, 0xd9, 0x7d, 0xca, 0xeb, 0x28, 0xeb, 0x26, 0xd8, 0xc2, 0xaf, 0x2c, - 0x58, 0x4e, 0x51, 0xd1, 0x00, 0x7d, 0x0b, 0x16, 0x13, 0xf3, 0x51, 0xd1, 0x85, 0x69, 0x24, 0xd9, - 0x89, 0xa0, 0x3b, 0x29, 0xc7, 0x5b, 0xc2, 0x29, 0x6d, 0x31, 0x1e, 0x51, 0x86, 0xb2, 0xe6, 0xa4, - 0x04, 0x7c, 0x99, 0x42, 0xa4, 0xb1, 0xe5, 0xb2, 0x32, 0xad, 0xb7, 0x63, 0x9b, 0x7c, 0x38, 0xc1, - 0x7f, 0xb2, 0xa0, 0xae, 0x08, 0x7e, 0x5f, 0xc6, 0xb1, 0x61, 0x21, 0xb1, 0x85, 0xb0, 0x8d, 0x1c, - 0xe3, 0x93, 0xb4, 0xc7, 0x62, 0x70, 0x77, 0x37, 0xeb, 0xee, 0xee, 0x04, 0x3a, 0x9f, 0x43, 0x93, - 0x0f, 0x79, 0xaf, 0xea, 0x34, 0xea, 0x46, 0x63, 0x5a, 0xfe, 0xd1, 0x75, 0x98, 0xe3, 0x6c, 0xc9, - 0x4d, 0xca, 0x47, 0x13, 0x1c, 0xbe, 0x16, 0xac, 0x9b, 0x84, 0xf1, 0xca, 0x0c, 0x89, 0x29, 0x56, - 0x4e, 0xfb, 0x43, 0x72, 0x25, 0x08, 0x16, 0xb6, 0xdc, 0x24, 0xac, 0xf0, 0x51, 0xb6, 0x15, 0x39, - 0xab, 0xb5, 0x22, 0x27, 0x48, 0xca, 0x9a, 0xb0, 0x96, 0xc3, 0x41, 0x03, 0xfc, 0x0c, 0xae, 0x1f, - 0x90, 0x21, 0x51, 0x5a, 0x98, 0xd3, 0x18, 0x7d, 0x15, 0x1a, 0x99, 0xaf, 0xd1, 0x00, 0x77, 0xa0, - 0x91, 0x6c, 0xec, 0xde, 0xcf, 0xda, 0xee, 0xb4, 0x12, 0x1e, 0xa4, 0x0d, 0x40, 0xfe, 0x39, 0x1a, - 0xa0, 0x6f, 0xa4, 0x81, 0x52, 0x38, 0x51, 0xee, 0x2c, 0x4b, 0x06, 0xfc, 0x8f, 0x5c, 0x09, 0x42, - 0xf7, 0x3b, 0xa7, 0xe5, 0xb0, 0x6c, 0x58, 0x88, 0x8d, 0xa6, 0x84, 0x4e, 0x39, 0xd6, 0x5c, 0x63, - 0xf6, 0xed, 0xf8, 0xb0, 0x61, 0xff, 0xfe, 0x95, 0xcf, 0xf3, 0x19, 0x6e, 0x1a, 0xa0, 0xef, 0xc3, - 0x3c, 0xbf, 0x37, 0x12, 0x57, 0x9e, 0xf4, 0xba, 0x49, 0x96, 0xa1, 0x43, 0x83, 0x7f, 0x7f, 0xcd, - 0xa8, 0x04, 0xaf, 0x55, 0x0b, 0xb4, 0xb8, 0x05, 0xc0, 0x25, 0x28, 0xe1, 0x4f, 0xa1, 0xe0, 0x5f, - 0x5b, 0xd0, 0x72, 0xc8, 0xc8, 0xbf, 0x24, 0x6f, 0x64, 0xfe, 0x16, 0xcc, 0x73, 0x27, 0xa0, 0x22, - 0xff, 0x4e, 0x86, 0x6f, 0xd4, 0xef, 0x76, 0xb5, 0x7e, 0xb7, 0x8b, 0x3b, 0xb0, 0x59, 0x80, 0x86, - 0x5f, 0xfc, 0x74, 0xdc, 0xeb, 0x11, 0x4a, 0x45, 0x47, 0x39, 0x19, 0xc6, 0x1e, 0x7a, 0xd6, 0x1d, - 0x0c, 0x89, 0x2b, 0xd0, 0x88, 0x11, 0xfe, 0xd2, 0x82, 0xe6, 0x43, 0xd7, 0x7d, 0x17, 0xaa, 0xb9, - 0x79, 0xd5, 0xdc, 0x52, 0xd5, 0x9e, 0xc0, 0xba, 0x09, 0x4a, 0x25, 0xbd, 0x06, 0xd0, 0x38, 0x18, - 0xd0, 0xd1, 0x80, 0x52, 0x19, 0x23, 0x6c, 0x58, 0xf0, 0xb5, 0x9e, 0xac, 0x1f, 0x4c, 0x9c, 0xbd, - 0xb7, 0x60, 0xbe, 0x9f, 0xcd, 0x6e, 0xc5, 0x10, 0x1f, 0xc2, 0x4a, 0x56, 0x14, 0x6f, 0x33, 0xf4, - 0x26, 0x69, 0x33, 0xa4, 0x4c, 0xf8, 0x2f, 0x16, 0xa0, 0xce, 0x38, 0x22, 0xda, 0x75, 0xf2, 0x8e, - 0x50, 0xc7, 0x86, 0x1b, 0xab, 0x4d, 0x23, 0x31, 0x42, 0x18, 0x96, 0x47, 0xe3, 0x88, 0xb8, 0xa7, - 0xa4, 0xe7, 0x7b, 0x2e, 0x65, 0xd5, 0x5f, 0xdd, 0xc9, 0xd0, 0xf0, 0x11, 0xac, 0xe5, 0x90, 0x56, - 0x53, 0xfa, 0x97, 0x16, 0xb4, 0xf6, 0xbb, 0x5e, 0x8f, 0x0c, 0xdf, 0xbf, 0xea, 0xf8, 0x18, 0x36, - 0x0b, 0xb0, 0x54, 0x53, 0xee, 0x0c, 0x96, 0xe5, 0x97, 0xde, 0xe5, 0x01, 0xdc, 0x83, 0xba, 0x22, - 0xa7, 0x1a, 0xd6, 0x21, 0x20, 0x4d, 0xf7, 0x77, 0x89, 0xf8, 0x08, 0xd6, 0x72, 0xd2, 0xaa, 0xe1, - 0xfe, 0xb3, 0x05, 0x9b, 0xa7, 0x99, 0x1b, 0xe6, 0x78, 0xd0, 0x3b, 0xf7, 0xba, 0xa3, 0x24, 0x63, - 0xe9, 0x67, 0x4b, 0xaf, 0x7e, 0x5a, 0x7a, 0x79, 0x82, 0x31, 0xb9, 0x1d, 0x93, 0x71, 0x46, 0xeb, - 0xd9, 0x72, 0xad, 0xaf, 0xe5, 0xb5, 0x4e, 0x4f, 0x57, 0x2d, 0x73, 0xba, 0x4e, 0xc0, 0x2e, 0x02, - 0x5a, 0xad, 0x2f, 0x19, 0xb2, 0x17, 0x28, 0xde, 0x32, 0x38, 0x1d, 0x07, 0xa2, 0x25, 0x9f, 0xf4, - 0x2b, 0x34, 0xa0, 0x56, 0x19, 0xd0, 0x99, 0x4c, 0x04, 0x28, 0x51, 0x3f, 0xbe, 0x0c, 0x6f, 0x16, - 0x0a, 0xad, 0xb4, 0x83, 0xd3, 0x74, 0x2b, 0xee, 0xfd, 0x1b, 0x01, 0x7f, 0x85, 0x47, 0xdf, 0x85, - 0xa5, 0x5e, 0xfa, 0xc8, 0x8b, 0x9a, 0x89, 0xcc, 0xcc, 0x4b, 0xb7, 0xbd, 0x6e, 0x22, 0xd3, 0x00, - 0xdd, 0x87, 0xc5, 0x9f, 0x24, 0x2f, 0x00, 0x68, 0x4d, 0x30, 0xa9, 0x6f, 0x13, 0xf6, 0x8d, 0x3c, - 0x91, 0xaf, 0xbb, 0x48, 0xda, 0xcb, 0x72, 0x9d, 0xda, 0xd8, 0x96, 0xeb, 0xb2, 0x5d, 0xe8, 0x3d, - 0xa8, 0xf7, 0xd5, 0xc7, 0x59, 0xb4, 0x91, 0x3c, 0xb5, 0x6b, 0xef, 0xc4, 0x76, 0xcb, 0x3c, 0x41, - 0x03, 0xf4, 0x00, 0x96, 0xa9, 0xf2, 0x8e, 0x89, 0x12, 0xdd, 0xb4, 0x97, 0x56, 0x7b, 0xc3, 0x48, - 0xa7, 0x01, 0xfa, 0x31, 0x6c, 0xf4, 0xcd, 0x8f, 0x88, 0xe8, 0xb6, 0x26, 0x35, 0xff, 0x88, 0x67, - 0xe3, 0xab, 0x58, 0x68, 0x80, 0xce, 0x60, 0xb3, 0x5f, 0xf4, 0x22, 0x87, 0x3e, 0x4a, 0x3f, 0x50, - 0xf8, 0x54, 0x68, 0xdf, 0xb9, 0x9a, 0x89, 0x06, 0xe8, 0x39, 0xa0, 0x28, 0xf7, 0x2c, 0x85, 0xb6, - 0xc4, 0x5a, 0xe3, 0x93, 0x9b, 0xfd, 0x41, 0xc9, 0x2c, 0x0d, 0x50, 0x0f, 0x5a, 0xfd, 0x82, 0x37, - 0x0f, 0x84, 0x33, 0xff, 0x8b, 0x30, 0xbe, 0xf7, 0xd8, 0x1f, 0x5d, 0xc9, 0xc3, 0x71, 0xf7, 0x73, - 0x4d, 0x7b, 0x89, 0xdb, 0xf8, 0xe6, 0x20, 0x71, 0x17, 0x74, 0xfb, 0x5f, 0xc0, 0x5a, 0x3f, 0xdf, - 0xc5, 0x46, 0xe6, 0x55, 0xf2, 0x94, 0xdd, 0x2a, 0x9b, 0xa6, 0x01, 0x3a, 0x82, 0xc6, 0x79, 0xb6, - 0x2d, 0x8b, 0x92, 0x3f, 0x87, 0xe4, 0xbb, 0xd3, 0xb6, 0x5d, 0x34, 0x25, 0x55, 0xd6, 0xfa, 0x9c, - 0xaa, 0xca, 0xf9, 0xd6, 0xab, 0xaa, 0xb2, 0xa9, 0x41, 0x7a, 0x0c, 0xab, 0x03, 0xbd, 0xf5, 0x87, - 0x6e, 0x26, 0xdd, 0x3a, 0x43, 0x2f, 0xd3, 0xde, 0x2a, 0x9e, 0xe4, 0xdf, 0xeb, 0xeb, 0x6d, 0x35, - 0xf9, 0x3d, 0x53, 0x87, 0xcf, 0xde, 0x2a, 0x9e, 0xe4, 0x8e, 0xaa, 0x56, 0x7f, 0xd2, 0x51, 0xb5, - 0x0a, 0xd3, 0xde, 0x30, 0xd2, 0x69, 0x80, 0x3e, 0x81, 0x85, 0x84, 0x86, 0x90, 0xc6, 0x14, 0x2f, - 0x5c, 0xcb, 0xd1, 0x78, 0x68, 0x92, 0x31, 0x03, 0xe9, 0x1c, 0x54, 0x0d, 0x4d, 0xd9, 0x26, 0xcb, - 0x73, 0x59, 0xfa, 0x2b, 0x5d, 0x01, 0xb9, 0x41, 0xc6, 0xee, 0x84, 0xdc, 0x20, 0x73, 0x3b, 0x21, - 0x3e, 0x3d, 0x5a, 0x15, 0x2f, 0x4f, 0x4f, 0xbe, 0xcb, 0x20, 0x4f, 0x8f, 0xa1, 0xf0, 0x8f, 0xa3, - 0xbc, 0x52, 0xaa, 0xcb, 0x28, 0x9f, 0x6d, 0x06, 0xc8, 0x28, 0xaf, 0x55, 0xf5, 0xb1, 0x6a, 0xf9, - 0x62, 0xb4, 0xc0, 0xdd, 0x44, 0x15, 0x54, 0xe0, 0x6e, 0xb2, 0x30, 0x79, 0x09, 0x4d, 0x63, 0x35, - 0x86, 0x3e, 0x14, 0xeb, 0x8a, 0x2a, 0x47, 0x7b, 0xbb, 0x9c, 0x81, 0xc3, 0xcd, 0x97, 0x43, 0x12, - 0xae, 0xb1, 0x68, 0x93, 0x70, 0x0b, 0xea, 0xa8, 0x07, 0xb0, 0xac, 0x96, 0x2a, 0xf2, 0x28, 0x6a, - 0xa5, 0x92, 0x3c, 0x8a, 0xb9, 0xba, 0xe6, 0x08, 0x1a, 0x5a, 0x72, 0x2c, 0xb7, 0x32, 0x9f, 0xc0, - 0xcb, 0xad, 0x34, 0xe5, 0xd3, 0x2f, 0xa1, 0x69, 0x4c, 0xb6, 0xa5, 0xe5, 0x8a, 0xca, 0x02, 0x69, - 0xb9, 0xe2, 0x5c, 0xfd, 0x3e, 0x2c, 0x4a, 0xb2, 0x3c, 0xfb, 0x6a, 0x62, 0x2b, 0xcf, 0x7e, 0x36, - 0xff, 0x3c, 0x82, 0x86, 0xf6, 0x51, 0xa9, 0x5d, 0x3e, 0x39, 0x96, 0xda, 0x99, 0x32, 0xd9, 0x1f, - 0xc1, 0xba, 0x39, 0xd9, 0x43, 0xdb, 0xda, 0x75, 0x9c, 0x4b, 0x5a, 0xed, 0xdb, 0x57, 0x70, 0xf0, - 0xab, 0xbb, 0x20, 0x0b, 0x53, 0xaf, 0xee, 0x82, 0xd4, 0x50, 0xbd, 0xba, 0x8b, 0x12, 0xb9, 0xbd, - 0xc6, 0xcb, 0xfa, 0x0e, 0xff, 0xb7, 0xe3, 0xa7, 0xec, 0xf7, 0xb3, 0x39, 0xf6, 0x57, 0xc6, 0x4f, - 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x96, 0x91, 0x7b, 0xd5, 0x09, 0x29, 0x00, 0x00, +var fileDescriptor_group_befc34d716b1ae6c = []byte{ + // 2228 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5f, 0x6f, 0x1c, 0x49, + 0x11, 0xd7, 0xd8, 0x5e, 0xff, 0x29, 0xdb, 0x59, 0xbb, 0x7d, 0x6b, 0xaf, 0x27, 0xbe, 0x9c, 0x33, + 0x17, 0x4e, 0x11, 0x7f, 0x6c, 0x91, 0x93, 0xf2, 0xc0, 0x21, 0x42, 0xfc, 0x27, 0xf1, 0x26, 0x59, + 0x9b, 0x8c, 0xc3, 0x4b, 0x24, 0x14, 0xf6, 0x76, 0xda, 0xab, 0xc5, 0xbb, 0x33, 0xe3, 0xe9, 0x59, + 0x1b, 0x78, 0x39, 0xf1, 0x72, 0xd2, 0x01, 0x12, 0x20, 0x24, 0x9e, 0x90, 0xe0, 0x9e, 0x40, 0x88, + 0x07, 0x1e, 0xe0, 0x19, 0xf1, 0x31, 0xf8, 0x14, 0x7c, 0x05, 0x34, 0xdd, 0x3d, 0x3d, 0x3d, 0xdd, + 0x3d, 0xe3, 0xcd, 0x6c, 0x72, 0x79, 0x59, 0xa9, 0xab, 0xab, 0xa7, 0x7e, 0x55, 0xdd, 0x55, 0x5d, + 0x55, 0xbd, 0xb0, 0xda, 0x8b, 0x82, 0x51, 0xb8, 0x4b, 0x7f, 0x77, 0xc2, 0x28, 0x88, 0x03, 0x54, + 0xa3, 0x03, 0xfb, 0xf6, 0x49, 0x88, 0xfd, 0x57, 0xad, 0xf6, 0x6e, 0x78, 0xde, 0xdb, 0xa5, 0x33, + 0xbb, 0xc4, 0x3b, 0x7f, 0x75, 0x45, 0x76, 0xaf, 0x08, 0xe3, 0x74, 0xbe, 0x07, 0xb0, 0x1f, 0x0c, + 0x87, 0x81, 0xef, 0x62, 0x12, 0xa2, 0x26, 0xcc, 0x1d, 0x46, 0xd1, 0x7e, 0xe0, 0xe1, 0xa6, 0xb5, + 0x6d, 0xdd, 0xad, 0xb9, 0xe9, 0x10, 0xad, 0xc3, 0xec, 0x61, 0x14, 0xb5, 0x49, 0xaf, 0x39, 0xb5, + 0x6d, 0xdd, 0x5d, 0x70, 0xf9, 0xc8, 0x79, 0x02, 0xe8, 0x71, 0x22, 0xeb, 0xa1, 0xe7, 0xb5, 0xf1, + 0xf0, 0x53, 0x1c, 0xb5, 0xfc, 0xb3, 0x20, 0xe1, 0xfe, 0x21, 0xc1, 0x51, 0xeb, 0x80, 0x7e, 0x66, + 0xc1, 0xe5, 0x23, 0xb4, 0x05, 0x0b, 0x6e, 0x30, 0xc0, 0xcf, 0xf0, 0x25, 0x1e, 0xd0, 0x0f, 0xd5, + 0xdc, 0x8c, 0xe0, 0xfc, 0xcf, 0x82, 0x1b, 0xfb, 0x11, 0xee, 0xc4, 0x98, 0x7e, 0xd2, 0xc5, 0x17, + 0xe8, 0x21, 0xdc, 0x68, 0xf9, 0xfd, 0x98, 0x7d, 0xfa, 0x59, 0x9f, 0xc4, 0x4d, 0x6b, 0x7b, 0xfa, + 0xee, 0xe2, 0xbd, 0xcd, 0x1d, 0xa6, 0xae, 0x2e, 0xdb, 0x55, 0x16, 0xa0, 0xef, 0xc0, 0x02, 0xe5, + 0x4a, 0x26, 0xa9, 0xcc, 0xc5, 0x7b, 0x5b, 0x3b, 0x04, 0x47, 0x97, 0x38, 0x7a, 0xd5, 0x09, 0xfb, + 0xaf, 0xc2, 0x4e, 0xd4, 0x19, 0x92, 0x1d, 0xc1, 0xe3, 0x66, 0xec, 0x68, 0x1b, 0x16, 0x4f, 0x42, + 0x1c, 0x75, 0xe2, 0x7e, 0xe0, 0xb7, 0x0e, 0x9a, 0xd3, 0x54, 0x19, 0x99, 0x84, 0x6c, 0x98, 0x3f, + 0x09, 0xb9, 0xae, 0x33, 0x74, 0x5a, 0x8c, 0xe9, 0xea, 0x2b, 0x1f, 0x47, 0x7c, 0xba, 0xc6, 0x57, + 0x67, 0x24, 0xe7, 0x33, 0xa8, 0xe7, 0x14, 0xae, 0xb2, 0x05, 0x79, 0x05, 0xa7, 0x5f, 0x4b, 0x41, + 0x27, 0x82, 0x95, 0xc7, 0x38, 0xa6, 0x63, 0x42, 0xe7, 0xf0, 0x45, 0x02, 0x9b, 0x31, 0x1c, 0x08, + 0x83, 0x2f, 0xb8, 0x32, 0x49, 0x35, 0xcb, 0x54, 0xb9, 0x59, 0xa6, 0xf3, 0x66, 0x71, 0xbe, 0xb0, + 0x60, 0x55, 0x11, 0x5a, 0x49, 0xef, 0x3d, 0x58, 0x16, 0x8a, 0x50, 0xa4, 0xd3, 0xf4, 0x68, 0x94, + 0xeb, 0x9e, 0x5f, 0xe2, 0xfc, 0xca, 0x82, 0xfa, 0x29, 0xc7, 0x92, 0xea, 0x9f, 0xb3, 0xa7, 0xf5, + 0x7a, 0x07, 0x46, 0xd6, 0x7b, 0xca, 0x70, 0x1c, 0x4a, 0x0f, 0x93, 0x73, 0x08, 0x2b, 0x79, 0x30, + 0x24, 0x44, 0xdf, 0x96, 0x1d, 0x94, 0xc3, 0x59, 0xe5, 0xa7, 0x3f, 0x9b, 0x70, 0x25, 0x26, 0xe7, + 0xe7, 0x60, 0xa7, 0xf6, 0x7d, 0x18, 0x86, 0x83, 0x7e, 0x97, 0x7e, 0x3f, 0xd1, 0x37, 0x51, 0x4f, + 0x86, 0x68, 0x95, 0x43, 0x34, 0x6c, 0xec, 0x2d, 0x80, 0x47, 0x51, 0x30, 0xcc, 0x6d, 0xad, 0x44, + 0x71, 0xfe, 0x68, 0xc1, 0xcd, 0x42, 0xe1, 0x95, 0xb6, 0xf9, 0x29, 0xac, 0xa4, 0xe1, 0x60, 0x84, + 0x49, 0x2c, 0xed, 0xf4, 0x07, 0x45, 0xbb, 0xc2, 0x59, 0x5d, 0x6d, 0xa1, 0x13, 0xc3, 0xd6, 0x63, + 0x1c, 0x27, 0x58, 0x5d, 0x7c, 0x61, 0x30, 0x4e, 0x51, 0xe0, 0x9a, 0x6c, 0x5f, 0xff, 0x64, 0xc1, + 0xfb, 0x25, 0x62, 0x2b, 0xed, 0xb2, 0xd1, 0x2e, 0x53, 0x55, 0xed, 0xf2, 0x6f, 0x0b, 0x1a, 0x2f, + 0xa2, 0x8e, 0x4f, 0xce, 0x70, 0x44, 0x27, 0x69, 0x94, 0x4a, 0x2c, 0xd2, 0x84, 0x39, 0xee, 0xfa, + 0xdc, 0x24, 0xe9, 0x10, 0x7d, 0x04, 0x37, 0x4e, 0x06, 0x9e, 0x1c, 0xe1, 0x98, 0x65, 0x14, 0x6a, + 0xc2, 0x77, 0x8c, 0xaf, 0x64, 0x3e, 0x66, 0x22, 0x85, 0xaa, 0xda, 0x71, 0xa6, 0x3c, 0xaa, 0xd4, + 0x94, 0xa8, 0xf2, 0x14, 0xd6, 0x4d, 0x0a, 0x54, 0xf3, 0xa0, 0xcf, 0x2d, 0x58, 0x7a, 0x12, 0xf4, + 0x7d, 0x71, 0x0f, 0x15, 0x5b, 0xe1, 0x16, 0x80, 0x8b, 0x2f, 0xda, 0x98, 0x90, 0x4e, 0x0f, 0x73, + 0x0b, 0x48, 0x94, 0xb2, 0x48, 0x78, 0xbd, 0xc6, 0xce, 0x1e, 0x2c, 0x4b, 0x38, 0xaa, 0x29, 0xf3, + 0xdf, 0xc4, 0x25, 0x15, 0x7f, 0x4c, 0x26, 0x02, 0x9f, 0x60, 0x1e, 0xef, 0x65, 0x14, 0x56, 0xb9, + 0xdd, 0xd5, 0xd3, 0x2f, 0x59, 0x66, 0x5a, 0xb3, 0x8c, 0x14, 0x2a, 0x66, 0xd4, 0x50, 0x91, 0xcc, + 0x1f, 0x75, 0x7c, 0x6f, 0x80, 0xbd, 0xc4, 0xe9, 0xd9, 0x7e, 0x4a, 0x14, 0xe4, 0xc0, 0x12, 0x1b, + 0xb9, 0x98, 0x8c, 0x06, 0x71, 0x73, 0x96, 0xc6, 0x8b, 0x1c, 0xcd, 0x79, 0x0e, 0x5b, 0xc5, 0xaa, + 0x55, 0x33, 0xd7, 0x19, 0x2c, 0x3d, 0x1f, 0xf5, 0xe3, 0x31, 0xb6, 0x7e, 0xb2, 0x6b, 0x70, 0x0f, + 0x96, 0x25, 0x39, 0xd5, 0xb0, 0x7e, 0x69, 0x41, 0x23, 0x8d, 0xb6, 0x59, 0xca, 0x53, 0x8e, 0x7a, + 0xa2, 0x50, 0x96, 0x04, 0xc8, 0x47, 0xfd, 0x41, 0x8c, 0x23, 0xba, 0xa1, 0x35, 0x97, 0x8f, 0x12, + 0x79, 0xc7, 0xf8, 0xa7, 0xf1, 0x29, 0xbe, 0xa0, 0x3b, 0x59, 0x73, 0xd3, 0xa1, 0xf3, 0x77, 0x0b, + 0xd6, 0x4d, 0x18, 0x2b, 0x5d, 0x06, 0x8f, 0x00, 0x86, 0x59, 0x2e, 0xc8, 0xae, 0x81, 0x8f, 0x8a, + 0xc2, 0x1d, 0x93, 0xf6, 0x68, 0x34, 0x18, 0xd0, 0xdb, 0x54, 0x5a, 0x99, 0x48, 0xf6, 0x39, 0x5c, + 0xa6, 0x47, 0x3a, 0x74, 0x7e, 0xab, 0xc1, 0x15, 0x89, 0x51, 0x69, 0x10, 0x90, 0x60, 0x4d, 0xd1, + 0x8c, 0x49, 0x16, 0x37, 0x59, 0x10, 0xf8, 0xbd, 0x05, 0x1b, 0x46, 0x48, 0xef, 0xd2, 0x84, 0xce, + 0x3f, 0x2c, 0x40, 0x4f, 0xfb, 0xdd, 0x73, 0x89, 0xaf, 0xdc, 0x48, 0x5f, 0x87, 0x95, 0x84, 0x1f, + 0x7b, 0x4c, 0x71, 0xc9, 0x54, 0x1a, 0x3d, 0x01, 0xef, 0xe2, 0x0e, 0x09, 0x7c, 0x6e, 0x2e, 0x3e, + 0x52, 0x8d, 0x55, 0x2b, 0x77, 0xb9, 0x59, 0xc5, 0xe5, 0x3e, 0x81, 0x85, 0x96, 0x77, 0x8f, 0x85, + 0x8e, 0xc2, 0xab, 0x9e, 0x8a, 0xa6, 0x01, 0x87, 0x15, 0x28, 0x7c, 0xe4, 0x7c, 0x06, 0x6b, 0x9a, + 0xba, 0x95, 0x36, 0xe0, 0x3e, 0x2c, 0x0b, 0x14, 0xd2, 0x1e, 0xac, 0x70, 0x57, 0x17, 0x73, 0x6e, + 0x9e, 0xcd, 0x19, 0x51, 0x5f, 0x4f, 0xae, 0x03, 0xec, 0x51, 0x14, 0xa9, 0xaf, 0xe7, 0x03, 0xad, + 0xa5, 0x05, 0xda, 0x6d, 0x58, 0x0c, 0xf4, 0x38, 0x15, 0x8c, 0x19, 0xa7, 0x3e, 0x67, 0x0e, 0xa1, + 0xc9, 0x9d, 0xa8, 0x56, 0x19, 0x3b, 0x5f, 0xcf, 0xd8, 0x9d, 0x7f, 0x5a, 0xf0, 0x5e, 0xcb, 0xbf, + 0xec, 0xc7, 0x38, 0x41, 0xf6, 0x22, 0x10, 0x11, 0xfa, 0xfa, 0x38, 0x5c, 0x7c, 0x49, 0x65, 0x07, + 0x6d, 0x26, 0x77, 0xd0, 0xbe, 0x09, 0xab, 0x4c, 0x96, 0x7c, 0x5a, 0x6b, 0xf4, 0xb4, 0xea, 0x13, + 0xa5, 0x87, 0xee, 0x17, 0x16, 0x34, 0x0c, 0xb0, 0xbf, 0xd2, 0xa3, 0xe3, 0xc3, 0x7b, 0x22, 0x29, + 0x1f, 0x0c, 0xc6, 0x71, 0xd6, 0xc9, 0x12, 0xde, 0xdf, 0x49, 0xf7, 0x92, 0x24, 0xf0, 0x9d, 0xc6, + 0xab, 0x3f, 0x58, 0x30, 0xbf, 0xdf, 0x3e, 0xa5, 0x6c, 0x13, 0xd5, 0x78, 0x77, 0xa1, 0xce, 0x64, + 0x75, 0x48, 0x8c, 0xa3, 0xe3, 0xce, 0x30, 0x4d, 0xfb, 0x54, 0x32, 0xba, 0xc3, 0x2b, 0x54, 0x46, + 0x6a, 0x79, 0xdc, 0x54, 0x79, 0x62, 0x12, 0xde, 0x17, 0x53, 0x63, 0x25, 0x9b, 0xb2, 0xc5, 0xb1, + 0xd1, 0x2f, 0xb3, 0x6d, 0xc9, 0x08, 0xe8, 0x00, 0xe0, 0x07, 0x9d, 0x5e, 0xdf, 0xa7, 0xa6, 0xe6, + 0xfd, 0x8c, 0x3b, 0x06, 0xe8, 0x3c, 0xbb, 0xcf, 0x78, 0x5d, 0x69, 0xdd, 0x18, 0x5b, 0xf8, 0xa5, + 0x05, 0x4b, 0x19, 0x2a, 0x12, 0xa2, 0x6f, 0xc1, 0x42, 0x6a, 0x3e, 0xc2, 0xbb, 0x30, 0xf5, 0x34, + 0x3b, 0xe1, 0x74, 0x37, 0xe3, 0x78, 0x43, 0x38, 0x85, 0x2d, 0x46, 0x43, 0x42, 0x51, 0xd6, 0xdc, + 0x8c, 0xe0, 0x5c, 0x66, 0x10, 0x49, 0x62, 0xb9, 0xbc, 0x4c, 0xeb, 0xcd, 0xd8, 0x46, 0x0f, 0x27, + 0xce, 0x9f, 0x2d, 0x58, 0x96, 0x04, 0xbf, 0x2b, 0xe3, 0xd8, 0x30, 0x9f, 0xda, 0x82, 0xdb, 0x46, + 0x8c, 0x9d, 0x93, 0xac, 0xc7, 0x62, 0x70, 0x77, 0x2f, 0xef, 0xee, 0xde, 0x18, 0x3a, 0x9f, 0x43, + 0x83, 0x0d, 0x59, 0xaf, 0xea, 0x34, 0xee, 0xc4, 0x23, 0x52, 0xfe, 0xd1, 0x75, 0x98, 0x65, 0x6c, + 0xe9, 0x4d, 0xca, 0x46, 0x63, 0x1c, 0xbe, 0x26, 0xac, 0x9b, 0x84, 0xb1, 0xca, 0x0c, 0xf1, 0x29, + 0x5a, 0x4e, 0x07, 0x03, 0x7c, 0x2d, 0x08, 0x1a, 0xb6, 0xbc, 0x34, 0xac, 0xb0, 0x51, 0xbe, 0x15, + 0x39, 0xad, 0xb4, 0x22, 0xc7, 0x48, 0xca, 0x1a, 0xb0, 0xa6, 0xe1, 0x20, 0xa1, 0xf3, 0x0c, 0x6e, + 0x1c, 0xe0, 0x01, 0x96, 0x5a, 0x98, 0x93, 0x18, 0x7d, 0x15, 0xea, 0xb9, 0xaf, 0x91, 0xd0, 0x69, + 0x43, 0x3d, 0xdd, 0xd8, 0xbd, 0x9f, 0xb5, 0xbc, 0x49, 0x25, 0x3c, 0xc8, 0x1a, 0x80, 0xec, 0x73, + 0x24, 0x44, 0xdf, 0xc8, 0x02, 0x25, 0x77, 0x22, 0xed, 0x2c, 0x0b, 0x06, 0xe7, 0x5f, 0x5a, 0x09, + 0x42, 0xf6, 0xdb, 0xa7, 0xe5, 0xb0, 0x6c, 0x98, 0x4f, 0x8c, 0x26, 0x85, 0x4e, 0x31, 0x56, 0x5c, + 0x63, 0xfa, 0xcd, 0xf8, 0xb0, 0x61, 0xff, 0xfe, 0xa3, 0xe7, 0xf9, 0x14, 0x37, 0x09, 0xd1, 0xf7, + 0x61, 0x8e, 0xdd, 0x1b, 0xa9, 0x2b, 0x8f, 0x7b, 0xdd, 0xa4, 0xcb, 0xd0, 0xa1, 0xc1, 0xbf, 0xbf, + 0x66, 0x54, 0x82, 0xd5, 0xaa, 0x05, 0x5a, 0xdc, 0x02, 0x60, 0x12, 0xa4, 0xf0, 0x27, 0x51, 0x9c, + 0x5f, 0x5b, 0xd0, 0x74, 0xf1, 0x30, 0xb8, 0xc4, 0xaf, 0x65, 0xfe, 0x26, 0xcc, 0x31, 0x27, 0x20, + 0x3c, 0xff, 0x4e, 0x87, 0xaf, 0xd5, 0xef, 0xf6, 0x94, 0x7e, 0xb7, 0xe7, 0xb4, 0x61, 0xb3, 0x00, + 0x0d, 0xbb, 0xf8, 0xc9, 0xa8, 0xdb, 0xc5, 0x84, 0xf0, 0x8e, 0x72, 0x3a, 0x4c, 0x3c, 0xf4, 0xac, + 0xd3, 0x1f, 0x60, 0x8f, 0xa3, 0xe1, 0x23, 0xe7, 0x0b, 0x0b, 0x1a, 0x0f, 0x3d, 0xef, 0x6d, 0xa8, + 0xe6, 0xe9, 0xaa, 0x79, 0xa5, 0xaa, 0x3d, 0x81, 0x75, 0x13, 0x94, 0x4a, 0x7a, 0xf5, 0xa1, 0x7e, + 0xd0, 0x27, 0xc3, 0x3e, 0x21, 0x22, 0x46, 0xd8, 0x30, 0x1f, 0x28, 0x3d, 0xd9, 0x20, 0x1c, 0x3b, + 0x7b, 0x6f, 0xc2, 0x5c, 0x2f, 0x9f, 0xdd, 0xf2, 0xa1, 0x73, 0x08, 0x2b, 0x79, 0x51, 0xac, 0xcd, + 0xd0, 0x1d, 0xa7, 0xcd, 0x90, 0x31, 0x39, 0x7f, 0xb5, 0x00, 0xb5, 0x47, 0x31, 0x56, 0xae, 0x93, + 0xb7, 0x84, 0x3a, 0x31, 0xdc, 0x48, 0x6e, 0x1a, 0xf1, 0x11, 0x72, 0x60, 0x69, 0x38, 0x8a, 0xb1, + 0x77, 0x8a, 0xbb, 0x81, 0xef, 0x11, 0x5a, 0xfd, 0x2d, 0xbb, 0x39, 0x9a, 0x73, 0x04, 0x6b, 0x1a, + 0xd2, 0x6a, 0x4a, 0xff, 0xd2, 0x82, 0xe6, 0x7e, 0xc7, 0xef, 0xe2, 0xc1, 0xbb, 0x57, 0xdd, 0x39, + 0x86, 0xcd, 0x02, 0x2c, 0xd5, 0x94, 0x3b, 0x83, 0x25, 0xf1, 0xa5, 0xb7, 0x79, 0x00, 0xf7, 0x60, + 0x59, 0x92, 0x53, 0x0d, 0xeb, 0x00, 0x90, 0xa2, 0xfb, 0xdb, 0x44, 0x7c, 0x04, 0x6b, 0x9a, 0xb4, + 0x6a, 0xb8, 0xff, 0x62, 0xc1, 0xe6, 0x69, 0xee, 0x86, 0x39, 0xee, 0x77, 0xcf, 0xfd, 0xce, 0x30, + 0xcd, 0x58, 0x7a, 0xf9, 0xd2, 0xab, 0x97, 0x95, 0x5e, 0x3e, 0x67, 0x4c, 0x6f, 0xc7, 0x74, 0x9c, + 0xd3, 0x7a, 0xba, 0x5c, 0xeb, 0x19, 0x5d, 0xeb, 0xec, 0x74, 0xd5, 0x72, 0xa7, 0xeb, 0x04, 0xec, + 0x22, 0xa0, 0xd5, 0xfa, 0x92, 0x11, 0x7d, 0x81, 0x62, 0x2d, 0x83, 0xd3, 0x51, 0xc8, 0x5b, 0xf2, + 0x69, 0xbf, 0x42, 0x01, 0x6a, 0x95, 0x01, 0x9d, 0xca, 0x45, 0x80, 0x12, 0xf5, 0x93, 0xcb, 0xf0, + 0x66, 0xa1, 0xd0, 0x4a, 0x3b, 0x38, 0x51, 0xb7, 0xe2, 0x8a, 0xa6, 0x45, 0x19, 0x8e, 0xaf, 0xec, + 0x79, 0xf5, 0x37, 0x2c, 0xb1, 0xd1, 0x24, 0x57, 0x33, 0xc1, 0x1b, 0x78, 0x64, 0xbd, 0xf7, 0xb7, + 0x35, 0x60, 0x7f, 0x48, 0x40, 0xdf, 0x85, 0xc5, 0x6e, 0xf6, 0xde, 0x8d, 0x1a, 0xa9, 0xec, 0xdc, + 0xa3, 0xbf, 0xbd, 0x6e, 0x22, 0x93, 0x10, 0xdd, 0x87, 0x85, 0x9f, 0xa4, 0x8f, 0x21, 0x68, 0x8d, + 0x33, 0xc9, 0xcf, 0x34, 0xf6, 0x7b, 0x3a, 0x91, 0xad, 0xbb, 0x48, 0x3b, 0xed, 0x62, 0x9d, 0xdc, + 0xe3, 0x17, 0xeb, 0xf2, 0x0d, 0xf9, 0x3d, 0x58, 0xee, 0xc9, 0xef, 0xd4, 0x68, 0x23, 0xfd, 0xd7, + 0x81, 0xf2, 0x64, 0x6e, 0x37, 0xcd, 0x13, 0x24, 0x44, 0x0f, 0x60, 0x89, 0x48, 0x4f, 0xba, 0x28, + 0xd5, 0x4d, 0x79, 0x74, 0xb6, 0x37, 0x8c, 0x74, 0x12, 0xa2, 0x1f, 0xc3, 0x46, 0xcf, 0xfc, 0x9e, + 0x8a, 0x6e, 0x2b, 0x52, 0xf5, 0xf7, 0x4c, 0xdb, 0xb9, 0x8e, 0x85, 0x84, 0xe8, 0x0c, 0x36, 0x7b, + 0x45, 0x8f, 0x93, 0xe8, 0xc3, 0xec, 0x03, 0x85, 0xaf, 0xa6, 0xf6, 0x9d, 0xeb, 0x99, 0x48, 0x88, + 0x9e, 0x03, 0x8a, 0xb5, 0x17, 0x3a, 0xb4, 0xc5, 0xd7, 0x1a, 0x5f, 0x1f, 0xed, 0xf7, 0x4b, 0x66, + 0x49, 0x88, 0xba, 0xd0, 0xec, 0x15, 0x3c, 0xff, 0x20, 0x27, 0xf7, 0x17, 0x11, 0xe3, 0xd3, 0x97, + 0xfd, 0xe1, 0xb5, 0x3c, 0x0c, 0x77, 0x4f, 0x7b, 0xbf, 0x10, 0xb8, 0x8d, 0xcf, 0x2f, 0x02, 0x77, + 0xc1, 0xc3, 0xc7, 0x0b, 0x58, 0xeb, 0xe9, 0x0d, 0x7d, 0x64, 0x5e, 0x25, 0x4e, 0xd9, 0xad, 0xb2, + 0x69, 0x12, 0xa2, 0x23, 0xa8, 0x9f, 0xe7, 0x3b, 0xd4, 0x28, 0xfd, 0x9f, 0x8c, 0xde, 0xa8, 0xb7, + 0xed, 0xa2, 0x29, 0xa1, 0xb2, 0xd2, 0xf2, 0x95, 0x55, 0xd6, 0xbb, 0xd0, 0xb2, 0xca, 0xa6, 0x5e, + 0xf1, 0x31, 0xac, 0xf6, 0xd5, 0x2e, 0x28, 0xba, 0x99, 0x36, 0x2e, 0x0d, 0x6d, 0x5d, 0x7b, 0xab, + 0x78, 0x92, 0x7d, 0xaf, 0xa7, 0x76, 0x18, 0xc5, 0xf7, 0x4c, 0xcd, 0x4e, 0x7b, 0xab, 0x78, 0x92, + 0x39, 0xaa, 0x5c, 0x08, 0x0b, 0x47, 0x55, 0x8a, 0x6d, 0x7b, 0xc3, 0x48, 0x27, 0x21, 0xfa, 0x18, + 0xe6, 0x53, 0x1a, 0x42, 0x0a, 0x53, 0xb2, 0x70, 0x4d, 0xa3, 0xb1, 0xd0, 0x24, 0x62, 0x06, 0x52, + 0x39, 0x88, 0x1c, 0x9a, 0xf2, 0xfd, 0xa6, 0xe7, 0xa2, 0x0b, 0x22, 0x35, 0x48, 0xc4, 0x06, 0x19, + 0x1b, 0x35, 0x62, 0x83, 0xcc, 0x9d, 0x95, 0xe4, 0xf4, 0x28, 0x0d, 0x0d, 0x71, 0x7a, 0xf4, 0x86, + 0x8b, 0x38, 0x3d, 0x86, 0x1e, 0x48, 0x12, 0xe5, 0xa5, 0xae, 0x85, 0x88, 0xf2, 0xf9, 0xbe, 0x88, + 0x88, 0xf2, 0x4a, 0x83, 0x23, 0x51, 0x4d, 0xaf, 0xcb, 0x0b, 0xdc, 0x8d, 0x17, 0x84, 0x05, 0xee, + 0x26, 0x6a, 0xb4, 0x97, 0xd0, 0x30, 0x16, 0xa6, 0xe8, 0x03, 0xbe, 0xae, 0xa8, 0x88, 0xb6, 0xb7, + 0xcb, 0x19, 0x18, 0x5c, 0xbd, 0x32, 0x14, 0x70, 0x8d, 0xf5, 0xab, 0x80, 0x5b, 0x50, 0x52, 0x3e, + 0x80, 0x25, 0xb9, 0x6a, 0x13, 0x47, 0x51, 0xa9, 0x1a, 0xc5, 0x51, 0xd4, 0x4a, 0xbc, 0x23, 0xa8, + 0x2b, 0x75, 0x82, 0xd8, 0x4a, 0xbd, 0x96, 0x11, 0x5b, 0x69, 0x2a, 0x2d, 0x5e, 0x42, 0xc3, 0x58, + 0x77, 0x08, 0xcb, 0x15, 0x55, 0x48, 0xc2, 0x72, 0xc5, 0x65, 0xcb, 0x7d, 0x58, 0x10, 0x64, 0x71, + 0xf6, 0xe5, 0x1c, 0x5f, 0x9c, 0xfd, 0x7c, 0x2a, 0x7e, 0x04, 0x75, 0xe5, 0xa3, 0x42, 0x3b, 0xbd, + 0x4e, 0x10, 0xda, 0x99, 0x92, 0xfa, 0x1f, 0xc1, 0xba, 0x39, 0xef, 0x45, 0xdb, 0xca, 0x75, 0xac, + 0xe5, 0xef, 0xf6, 0xed, 0x6b, 0x38, 0xd8, 0xd5, 0x5d, 0x90, 0x90, 0xca, 0x57, 0x77, 0x41, 0x96, + 0x2c, 0x5f, 0xdd, 0x85, 0x39, 0x2d, 0xf3, 0x15, 0x25, 0xd5, 0x93, 0x7d, 0x45, 0xcf, 0x3f, 0x65, + 0x5f, 0x31, 0xe4, 0x88, 0x7b, 0xf5, 0x97, 0xcb, 0x3b, 0xec, 0xbf, 0xa4, 0x9f, 0xd0, 0xdf, 0x4f, + 0x67, 0xe9, 0x1f, 0x45, 0x3f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x52, 0x12, 0xd4, 0x5c, + 0x67, 0x2a, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index 6f6af9aa9..146852752 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -401,6 +401,16 @@ message GetJoinedSuperGroupListResp { repeated server_api_params.GroupInfo GroupList = 3; } +message GetSuperGroupsInfoReq { + repeated string GroupIDList = 1; + string OperationID = 2; + string OpUserID = 3; //No verification permission +} + +message GetSuperGroupsInfoResp { + CommonResp commonResp = 1; + repeated server_api_params.GroupInfo GroupInfoList = 3; +} service group{ rpc createGroup(CreateGroupReq) returns(CreateGroupResp); @@ -438,6 +448,7 @@ service group{ rpc SetGroupMemberNickname(SetGroupMemberNicknameReq) returns (SetGroupMemberNicknameResp); rpc GetJoinedSuperGroupList(GetJoinedSuperGroupListReq) returns (GetJoinedSuperGroupListResp); + rpc GetSuperGroupsInfo(GetSuperGroupsInfoReq) returns (GetSuperGroupsInfoResp); } From 23c6c8b331aca6ef1e699331b5dbcf0b2b677dd3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 16:29:37 +0800 Subject: [PATCH 276/752] superGroup --- pkg/common/db/mongoModel.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 0e849290d..0a3ef7994 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -985,6 +985,7 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, opts := &options.UpdateOptions{ Upsert: &upsert, } + c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) From 10881c8f5b3dd2b35a2169eb10e5b3b4b720df10 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:12:08 +0800 Subject: [PATCH 277/752] superGroup --- cmd/open_im_api/main.go | 4 ++-- internal/api/group/super_group.go | 9 ++++++++- pkg/common/db/mongoModel.go | 22 +++++++++++++--------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 17400d1cd..cb3fcd9ae 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -92,8 +92,8 @@ func main() { } superGroupRouterGroup := r.Group("/super_group") { - superGroupRouterGroup.POST("/get_joined_super_group_list", group.GetJoinedSuperGroupList) - superGroupRouterGroup.POST("/get_super_groups_info", group.GetSuperGroupsInfo) + superGroupRouterGroup.POST("/get_joined_group_list", group.GetJoinedSuperGroupList) + superGroupRouterGroup.POST("/get_groups_info", group.GetSuperGroupsInfo) } //certificate authRouterGroup := r.Group("/auth") diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index 35fd88f7a..c3b177dae 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -23,7 +23,14 @@ func GetJoinedSuperGroupList(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID} + ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID, OpUserID: opUserID, UserID: req.FromUserID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := rpc.NewGroupClient(etcdConn) rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 0a3ef7994..367502d11 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -986,10 +986,12 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, Upsert: &upsert, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") + for _, userID := range initMemberIDList { + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } } session.CommitTransaction(ctx) return err @@ -1031,10 +1033,12 @@ func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) err opts := &options.UpdateOptions{ Upsert: &upsert, } - _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": userIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") + for _, userID := range userIDList { + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } } session.CommitTransaction(ctx) return err @@ -1102,7 +1106,7 @@ func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID strin }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": groupID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": groupID}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From cf094a2048f277f69f50d0808d14d1cf159d9922 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:30:55 +0800 Subject: [PATCH 278/752] superGroup --- internal/rpc/group/super_group.go | 2 +- pkg/common/db/mongoModel.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 384ec8a23..949e92a91 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -46,7 +46,7 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. func (s *groupServer) GetSuperGroupsInfo(_ context.Context, req *pbGroup.GetSuperGroupsInfoReq) (resp *pbGroup.GetSuperGroupsInfoResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) - resp = &pbGroup.GetSuperGroupsInfoResp{} + resp = &pbGroup.GetSuperGroupsInfoResp{CommonResp: &pbGroup.CommonResp{}} groupsInfoList := make([]*commonPb.GroupInfo, 0) for _, groupID := range req.GroupIDList { groupInfoFromMysql, err := imdb.GetGroupInfoByGroupID(groupID) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 367502d11..8ec3cb952 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -987,7 +987,7 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) for _, userID := range initMemberIDList { - _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") @@ -1034,7 +1034,7 @@ func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) err Upsert: &upsert, } for _, userID := range userIDList { - _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") From 8cc6b048fdc940f9a5256cd9f56310a55b17f24c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:39:52 +0800 Subject: [PATCH 279/752] superGroup --- pkg/common/db/mongoModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 8ec3cb952..4325ce02a 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1106,7 +1106,7 @@ func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID strin }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": groupID}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From 25450a41828983df69999943ed8799ef10bb7fe7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 17:46:06 +0800 Subject: [PATCH 280/752] message update --- internal/push/logic/push_rpc_server.go | 8 ++- internal/push/logic/push_to_client.go | 98 ++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/internal/push/logic/push_rpc_server.go b/internal/push/logic/push_rpc_server.go index ba656a7d0..8fbf4e7d1 100644 --- a/internal/push/logic/push_rpc_server.go +++ b/internal/push/logic/push_rpc_server.go @@ -2,6 +2,7 @@ package logic import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" "Open_IM/pkg/proto/push" @@ -63,7 +64,12 @@ func (r *RPCServer) run() { } func (r *RPCServer) PushMsg(_ context.Context, pbData *pbPush.PushMsgReq) (*pbPush.PushMsgResp, error) { //Call push module to send message to the user - MsgToUser(pbData) + switch pbData.MsgData.SessionType { + case constant.SuperGroupChatType: + MsgToSuperGroupUser(pbData) + default: + MsgToUser(pbData) + } return &pbPush.PushMsgResp{ ResultCode: 0, }, nil diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 35618013a..cd72059dc 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -132,6 +132,104 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } +func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { + return + var wsResult []*pbRelay.SingleMsgToUser + isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) + log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) + if len(grpcCons) == 0 { + log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") + grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + } + //Online push message + log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + for _, v := range grpcCons { + msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) + reply, err := msgClient.OnlinePushMsg(context.Background(), &pbRelay.OnlinePushMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserID: pushMsg.PushToUserID}) + if err != nil { + log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + continue + } + if reply != nil && reply.Resp != nil { + wsResult = append(wsResult, reply.Resp...) + } + } + log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + successCount++ + if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { + for _, v := range wsResult { + if v.ResultCode == 0 { + if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + break + } + continue + } + if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + //Use offline push messaging + var UIDList []string + UIDList = append(UIDList, v.RecvID) + customContent := OpenIMContent{ + SessionType: int(pushMsg.MsgData.SessionType), + From: pushMsg.MsgData.SendID, + To: pushMsg.MsgData.RecvID, + Seq: pushMsg.MsgData.Seq, + } + bCustomContent, _ := json.Marshal(customContent) + jsonCustomContent := string(bCustomContent) + var content string + if pushMsg.MsgData.OfflinePushInfo != nil { + content = pushMsg.MsgData.OfflinePushInfo.Title + + } else { + switch pushMsg.MsgData.ContentType { + case constant.Text: + content = constant.ContentType2PushContent[constant.Text] + case constant.Picture: + content = constant.ContentType2PushContent[constant.Picture] + case constant.Voice: + content = constant.ContentType2PushContent[constant.Voice] + case constant.Video: + content = constant.ContentType2PushContent[constant.Video] + case constant.File: + content = constant.ContentType2PushContent[constant.File] + case constant.AtText: + a := AtContent{} + _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + if utils.IsContain(v.RecvID, a.AtUserList) { + content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] + } else { + content = constant.ContentType2PushContent[constant.GroupMsg] + } + default: + content = constant.ContentType2PushContent[constant.Common] + } + } + callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + if callbackResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + break + } + + if offlinePusher == nil { + offlinePusher = jpush.JPushClient + } + pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) + if err != nil { + log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + } else { + log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) + } + break + } + + } + + } +} //func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { // m.MsgID = rpcChat.GetMsgID(m.SendID) From 0168ef40146c6dbef1db56dc2df35963e4c7bc00 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:46:11 +0800 Subject: [PATCH 281/752] superGroup --- pkg/common/db/mongoModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 4325ce02a..81844b9f9 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1106,7 +1106,7 @@ func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID strin }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": bson.M{"$in": userID}}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From 591b292fbf09986d03b358d8e37c1e9caa98fa4b Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 30 May 2022 18:23:12 +0800 Subject: [PATCH 282/752] super group --- pkg/common/constant/constant.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 760afb7c7..895d3c2b6 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -88,7 +88,7 @@ const ( SignalingNotificationEnd = 1649 SuperGroupNotificationBegin = 1650 - SuperGroupUpdateNotification = 1621 + SuperGroupUpdateNotification = 1651 SuperGroupNotificationEnd = 1699 ConversationPrivateChatNotification = 1701 From 5392c9fd388a496c4fd13cb7e457f5a58e64a10a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 19:31:09 +0800 Subject: [PATCH 283/752] log --- internal/msg_gateway/gate/logic.go | 2 +- internal/msg_transfer/logic/persistent_msg_handler.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index af6fa025d..088b5228a 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -115,7 +115,7 @@ func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { rpcReq.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList rpcReq.UserID = m.SendID rpcReq.OperationID = m.OperationID - log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList) + log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList, data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList) grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index 245634d84..6b6955ee2 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -55,6 +55,8 @@ func (pc *PersistentConsumerHandler) handleChatWs2Mysql(cMsg *sarama.ConsumerMes if msgKey == msgFromMQ.MsgData.SendID { tag = true } + case constant.SuperGroupChatType: + tag = true } if tag { log.NewInfo(msgFromMQ.OperationID, "msg_transfer msg persisting", string(msg)) From 05b4ddfd461e833aeb5d85c132ee258c190fd6ed Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 19:37:32 +0800 Subject: [PATCH 284/752] k8s --- deploy_k8s/admin_cms/admin_cms.Dockerfile | 8 ++++---- deploy_k8s/api/api.Dockerfile | 8 ++++---- deploy_k8s/auth/auth.Dockerfile | 8 ++++---- deploy_k8s/cache/cache.Dockerfile | 8 ++++---- deploy_k8s/cms_api/cms_api.Dockerfile | 9 ++++----- deploy_k8s/conversation/conversation.Dockerfile | 9 ++++----- deploy_k8s/demo/demo.Dockerfile | 8 ++++---- deploy_k8s/friend/friend.Dockerfile | 9 ++++----- deploy_k8s/group/group.Dockerfile | 8 ++++---- deploy_k8s/message_cms/message_cms.Dockerfile | 8 ++++---- deploy_k8s/msg/msg.Dockerfile | 8 ++++---- deploy_k8s/msg_gateway/msg_gateway.Dockerfile | 8 ++++---- deploy_k8s/msg_transfer/msg_transfer.Dockerfile | 9 +++++---- deploy_k8s/office/office.Dockerfile | 9 +++++---- deploy_k8s/organization/organization.Dockerfile | 9 +++++---- deploy_k8s/push/push.Dockerfile | 9 +++++---- deploy_k8s/sdk_server/sdk_server.Dockerfile | 4 ++-- deploy_k8s/statistics/statistics.Dockerfile | 9 +++++---- deploy_k8s/user/user.Dockerfile | 9 +++++---- 19 files changed, 80 insertions(+), 77 deletions(-) diff --git a/deploy_k8s/admin_cms/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile index bf310981c..993e2e655 100644 --- a/deploy_k8s/admin_cms/admin_cms.Dockerfile +++ b/deploy_k8s/admin_cms/admin_cms.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_admin_cms $WORKDIR/main +ADD ./open_im_admin_cms $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config", "/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main diff --git a/deploy_k8s/api/api.Dockerfile b/deploy_k8s/api/api.Dockerfile index 346045b7c..92f824f33 100644 --- a/deploy_k8s/api/api.Dockerfile +++ b/deploy_k8s/api/api.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_api $WORKDIR/main +ADD ./open_im_api $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main diff --git a/deploy_k8s/auth/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile index f757d5801..acf750a8d 100644 --- a/deploy_k8s/auth/auth.Dockerfile +++ b/deploy_k8s/auth/auth.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_auth $WORKDIR/main +ADD ./open_im_auth $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/cache/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile index c040f622a..f9bf81738 100644 --- a/deploy_k8s/cache/cache.Dockerfile +++ b/deploy_k8s/cache/cache.Dockerfile @@ -5,13 +5,13 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_cache $WORKDIR/main +ADD ./open_im_cache $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/cms_api/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile index 1fcc67afc..3bcd7bc17 100644 --- a/deploy_k8s/cms_api/cms_api.Dockerfile +++ b/deploy_k8s/cms_api/cms_api.Dockerfile @@ -5,14 +5,13 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_cms_api $WORKDIR/main +ADD ./open_im_cms_api $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] - +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/conversation/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile index 443734175..c45528d8e 100644 --- a/deploy_k8s/conversation/conversation.Dockerfile +++ b/deploy_k8s/conversation/conversation.Dockerfile @@ -5,14 +5,13 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_conversation $WORKDIR/main +ADD ./open_im_conversation $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] - +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/demo/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile index 61ffbe566..afb3f8e7b 100644 --- a/deploy_k8s/demo/demo.Dockerfile +++ b/deploy_k8s/demo/demo.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_demo $WORKDIR/main +ADD ./open_im_demo $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/friend/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile index 80a3580b3..2ca3461e9 100644 --- a/deploy_k8s/friend/friend.Dockerfile +++ b/deploy_k8s/friend/friend.Dockerfile @@ -5,14 +5,13 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_friend $WORKDIR/main +ADD ./open_im_friend $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] - +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/group/group.Dockerfile b/deploy_k8s/group/group.Dockerfile index 159db839f..065b38497 100644 --- a/deploy_k8s/group/group.Dockerfile +++ b/deploy_k8s/group/group.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_group $WORKDIR/main +ADD ./open_im_group $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/message_cms/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile index 0ae1a6abf..a737ee34c 100644 --- a/deploy_k8s/message_cms/message_cms.Dockerfile +++ b/deploy_k8s/message_cms/message_cms.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_message_cms $WORKDIR/main +ADD ./open_im_message_cms $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/msg/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile index 32f094ed9..c22a45fa4 100644 --- a/deploy_k8s/msg/msg.Dockerfile +++ b/deploy_k8s/msg/msg.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_msg $WORKDIR/main +ADD ./open_im_msg $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile index 552ee3b1e..1f976c3b0 100644 --- a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile +++ b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile @@ -5,14 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_msg_gateway $WORKDIR/main +ADD ./open_im_msg_gateway $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile index 9ff56c71a..d3ed37644 100644 --- a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile +++ b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile @@ -5,13 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_msg_transfer $WORKDIR/main +ADD ./open_im_msg_transfer $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] + WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/office/office.Dockerfile b/deploy_k8s/office/office.Dockerfile index bdb509abc..ecbb34907 100644 --- a/deploy_k8s/office/office.Dockerfile +++ b/deploy_k8s/office/office.Dockerfile @@ -5,13 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_office $WORKDIR/main +ADD ./open_im_office $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] + WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/organization/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile index 0fccb1c47..aa23865fb 100644 --- a/deploy_k8s/organization/organization.Dockerfile +++ b/deploy_k8s/organization/organization.Dockerfile @@ -5,13 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_organization $WORKDIR/main +ADD ./open_im_organization $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] + WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/push/push.Dockerfile b/deploy_k8s/push/push.Dockerfile index 6b12925d8..c92afb967 100644 --- a/deploy_k8s/push/push.Dockerfile +++ b/deploy_k8s/push/push.Dockerfile @@ -5,13 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_push $WORKDIR/main +ADD ./open_im_push $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] + WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index 6e8ec93cc..456cd0ace 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -5,7 +5,7 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_sdk_server $WORKDIR/main +ADD ./open_im_sdk_server $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ @@ -14,4 +14,4 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main diff --git a/deploy_k8s/statistics/statistics.Dockerfile b/deploy_k8s/statistics/statistics.Dockerfile index 1b33f1732..ba05f7c57 100644 --- a/deploy_k8s/statistics/statistics.Dockerfile +++ b/deploy_k8s/statistics/statistics.Dockerfile @@ -5,13 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_statistics $WORKDIR/main +ADD ./open_im_statistics $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] + WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file diff --git a/deploy_k8s/user/user.Dockerfile b/deploy_k8s/user/user.Dockerfile index bafd9215f..88b6e6f55 100644 --- a/deploy_k8s/user/user.Dockerfile +++ b/deploy_k8s/user/user.Dockerfile @@ -5,13 +5,14 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_user $WORKDIR/main +ADD ./open_im_user $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 -RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ +RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/main -VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] +VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] + WORKDIR $WORKDIR -CMD ./main +CMD ./cmd/main \ No newline at end of file From 0aefab34f18ff17f58ba5c9bc84caae837905096 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 19:37:54 +0800 Subject: [PATCH 285/752] log --- internal/msg_gateway/gate/logic.go | 3 ++- pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 088b5228a..5a2b26fae 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -107,7 +107,7 @@ func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeq } func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr, m.Data) + log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr) nReply := new(sdk_ws.PullMessageBySeqListResp) isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsgBySeqList) if isPass { @@ -115,6 +115,7 @@ func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { rpcReq.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList rpcReq.UserID = m.SendID rpcReq.OperationID = m.OperationID + rpcReq.GroupSeqList = data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList, data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList) grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) msgClient := pbChat.NewChatClient(grpcConn) diff --git a/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go b/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go index 99c099ac4..5f7ef59f7 100644 --- a/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go +++ b/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go @@ -26,7 +26,7 @@ func InsertMessageToChatLog(msg pbMsg.MsgDataToMQ) error { chatLog := new(db.ChatLog) copier.Copy(chatLog, msg.MsgData) switch msg.MsgData.SessionType { - case constant.GroupChatType: + case constant.GroupChatType, constant.SuperGroupChatType: chatLog.RecvID = msg.MsgData.GroupID case constant.SingleChatType: chatLog.RecvID = msg.MsgData.RecvID From 9e16629d6910eee19333584d6b08f7202888ba96 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 19:41:28 +0800 Subject: [PATCH 286/752] k8s --- deploy_k8s/admin_cms/admin_cms.Dockerfile | 2 +- deploy_k8s/api/api.Dockerfile | 2 +- deploy_k8s/auth/auth.Dockerfile | 2 +- deploy_k8s/cache/cache.Dockerfile | 2 +- deploy_k8s/cms_api/cms_api.Dockerfile | 2 +- deploy_k8s/conversation/conversation.Dockerfile | 2 +- deploy_k8s/demo/demo.Dockerfile | 2 +- deploy_k8s/friend/friend.Dockerfile | 2 +- deploy_k8s/group/group.Dockerfile | 2 +- deploy_k8s/message_cms/message_cms.Dockerfile | 2 +- deploy_k8s/msg/msg.Dockerfile | 2 +- deploy_k8s/msg_gateway/msg_gateway.Dockerfile | 2 +- deploy_k8s/msg_transfer/msg_transfer.Dockerfile | 2 +- deploy_k8s/office/office.Dockerfile | 2 +- deploy_k8s/organization/organization.Dockerfile | 2 +- deploy_k8s/push/push.Dockerfile | 2 +- deploy_k8s/sdk_server/sdk_server.Dockerfile | 2 +- deploy_k8s/statistics/statistics.Dockerfile | 2 +- deploy_k8s/user/user.Dockerfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/deploy_k8s/admin_cms/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile index 993e2e655..e9edc9a6f 100644 --- a/deploy_k8s/admin_cms/admin_cms.Dockerfile +++ b/deploy_k8s/admin_cms/admin_cms.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_admin_cms $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config", "/Open-IM-Server/script"] diff --git a/deploy_k8s/api/api.Dockerfile b/deploy_k8s/api/api.Dockerfile index 92f824f33..f1dd4c748 100644 --- a/deploy_k8s/api/api.Dockerfile +++ b/deploy_k8s/api/api.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_api $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/auth/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile index acf750a8d..04fbdf32a 100644 --- a/deploy_k8s/auth/auth.Dockerfile +++ b/deploy_k8s/auth/auth.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_auth $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/cache/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile index f9bf81738..82f661df7 100644 --- a/deploy_k8s/cache/cache.Dockerfile +++ b/deploy_k8s/cache/cache.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_cache $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/cms_api/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile index 3bcd7bc17..64c4ae25a 100644 --- a/deploy_k8s/cms_api/cms_api.Dockerfile +++ b/deploy_k8s/cms_api/cms_api.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_cms_api $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/conversation/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile index c45528d8e..4518627d3 100644 --- a/deploy_k8s/conversation/conversation.Dockerfile +++ b/deploy_k8s/conversation/conversation.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_conversation $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/demo/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile index afb3f8e7b..05b532fd4 100644 --- a/deploy_k8s/demo/demo.Dockerfile +++ b/deploy_k8s/demo/demo.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_demo $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/friend/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile index 2ca3461e9..1bdfe7c63 100644 --- a/deploy_k8s/friend/friend.Dockerfile +++ b/deploy_k8s/friend/friend.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_friend $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/group/group.Dockerfile b/deploy_k8s/group/group.Dockerfile index 065b38497..7b902ee67 100644 --- a/deploy_k8s/group/group.Dockerfile +++ b/deploy_k8s/group/group.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_group $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/message_cms/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile index a737ee34c..f77ebc3c2 100644 --- a/deploy_k8s/message_cms/message_cms.Dockerfile +++ b/deploy_k8s/message_cms/message_cms.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_message_cms $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/msg/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile index c22a45fa4..29ac3c0d4 100644 --- a/deploy_k8s/msg/msg.Dockerfile +++ b/deploy_k8s/msg/msg.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_msg $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile index 1f976c3b0..48441eb56 100644 --- a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile +++ b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_msg_gateway $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile index d3ed37644..68c3f3819 100644 --- a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile +++ b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_msg_transfer $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/office/office.Dockerfile b/deploy_k8s/office/office.Dockerfile index ecbb34907..c6db928fa 100644 --- a/deploy_k8s/office/office.Dockerfile +++ b/deploy_k8s/office/office.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_office $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/organization/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile index aa23865fb..b492e8300 100644 --- a/deploy_k8s/organization/organization.Dockerfile +++ b/deploy_k8s/organization/organization.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_organization $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/push/push.Dockerfile b/deploy_k8s/push/push.Dockerfile index c92afb967..2ac18c56d 100644 --- a/deploy_k8s/push/push.Dockerfile +++ b/deploy_k8s/push/push.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_push $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index 456cd0ace..b56b852a4 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_sdk_server $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] diff --git a/deploy_k8s/statistics/statistics.Dockerfile b/deploy_k8s/statistics/statistics.Dockerfile index ba05f7c57..44e8f2fe1 100644 --- a/deploy_k8s/statistics/statistics.Dockerfile +++ b/deploy_k8s/statistics/statistics.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_statistics $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] diff --git a/deploy_k8s/user/user.Dockerfile b/deploy_k8s/user/user.Dockerfile index 88b6e6f55..3218949d4 100644 --- a/deploy_k8s/user/user.Dockerfile +++ b/deploy_k8s/user/user.Dockerfile @@ -9,7 +9,7 @@ ADD ./open_im_user $WORKDIR/cmd/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ - chmod +x $WORKDIR/main + chmod +x $WORKDIR/cmd/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] From da4ac6d70982b88667071be1d7183b71a7d59698 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:07:01 +0800 Subject: [PATCH 287/752] k8s --- deploy_k8s/ingress.yaml | 7 ++++--- deploy_k8s/msg_gateway/deployment.yaml | 10 ++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 4b3a81aa9..26c424822 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -33,8 +33,8 @@ metadata: nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # 使用重写后的路径进行路由 - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" +# nginx.ingress.kubernetes.io/use-regex: "true" +# nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: msg-gateway-ingress spec: rules: @@ -46,7 +46,8 @@ spec: name: msg-gateway port: number: 10001 - path: /msg-gateway/(.*) +# path: /msg-gateway/(.*) + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index b927717c9..7829fc77f 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -1,4 +1,4 @@ ---- + --- apiVersion: apps/v1 kind: Deployment metadata: @@ -17,8 +17,10 @@ spec: - name: msg-gateway image: openim/msg_gateway:v2.0.10 ports: - - containerPort: 10140 - - containerPort: 10001 + - name: rpc-port + containerPort: 10140 + - name: ws-port + containerPort: 10001 volumeMounts: - name: config mountPath: /Open-IM-Server/config @@ -39,7 +41,7 @@ spec: - name: msg-gateway-port protocol: TCP port: 10001 - targetPort: 10001 + targetPort: ws-port selector: app: msg-gateway From 38bd2bd011a1d04c3c07ddeefc183a2904dcaa71 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:10:01 +0800 Subject: [PATCH 288/752] k8s --- deploy_k8s/msg_gateway/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index 7829fc77f..23b67b988 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -1,4 +1,4 @@ - --- +--- apiVersion: apps/v1 kind: Deployment metadata: From 1edaf152203a11cc40adac32bb8a0ce588a0c898 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:15:17 +0800 Subject: [PATCH 289/752] k8s --- deploy_k8s/admin_cms/admin_cms.Dockerfile | 3 +++ deploy_k8s/api/api.Dockerfile | 2 ++ deploy_k8s/auth/auth.Dockerfile | 2 ++ deploy_k8s/cache/cache.Dockerfile | 3 +++ deploy_k8s/cms_api/cms_api.Dockerfile | 2 ++ deploy_k8s/conversation/conversation.Dockerfile | 1 + deploy_k8s/demo/demo.Dockerfile | 2 ++ deploy_k8s/friend/friend.Dockerfile | 2 ++ deploy_k8s/group/group.Dockerfile | 2 ++ deploy_k8s/message_cms/message_cms.Dockerfile | 2 ++ deploy_k8s/msg/msg.Dockerfile | 2 ++ deploy_k8s/msg_gateway/msg_gateway.Dockerfile | 2 ++ deploy_k8s/msg_transfer/msg_transfer.Dockerfile | 2 ++ deploy_k8s/office/office.Dockerfile | 2 ++ deploy_k8s/organization/organization.Dockerfile | 3 +++ deploy_k8s/push/push.Dockerfile | 2 ++ deploy_k8s/sdk_server/sdk_server.Dockerfile | 2 ++ deploy_k8s/statistics/statistics.Dockerfile | 2 ++ deploy_k8s/user/user.Dockerfile | 2 ++ 19 files changed, 40 insertions(+) diff --git a/deploy_k8s/admin_cms/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile index e9edc9a6f..d373741d3 100644 --- a/deploy_k8s/admin_cms/admin_cms.Dockerfile +++ b/deploy_k8s/admin_cms/admin_cms.Dockerfile @@ -4,6 +4,9 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + + # 将可执行文件复制到目标目录 ADD ./open_im_admin_cms $WORKDIR/cmd/main diff --git a/deploy_k8s/api/api.Dockerfile b/deploy_k8s/api/api.Dockerfile index f1dd4c748..c6f287fee 100644 --- a/deploy_k8s/api/api.Dockerfile +++ b/deploy_k8s/api/api.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_api $WORKDIR/cmd/main diff --git a/deploy_k8s/auth/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile index 04fbdf32a..6ddc5967c 100644 --- a/deploy_k8s/auth/auth.Dockerfile +++ b/deploy_k8s/auth/auth.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_auth $WORKDIR/cmd/main diff --git a/deploy_k8s/cache/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile index 82f661df7..0ee6ed1bd 100644 --- a/deploy_k8s/cache/cache.Dockerfile +++ b/deploy_k8s/cache/cache.Dockerfile @@ -4,6 +4,9 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + + # 将可执行文件复制到目标目录 ADD ./open_im_cache $WORKDIR/cmd/main diff --git a/deploy_k8s/cms_api/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile index 64c4ae25a..7921dfc4c 100644 --- a/deploy_k8s/cms_api/cms_api.Dockerfile +++ b/deploy_k8s/cms_api/cms_api.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_cms_api $WORKDIR/cmd/main diff --git a/deploy_k8s/conversation/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile index 4518627d3..9f92c8dea 100644 --- a/deploy_k8s/conversation/conversation.Dockerfile +++ b/deploy_k8s/conversation/conversation.Dockerfile @@ -4,6 +4,7 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd # 将可执行文件复制到目标目录 ADD ./open_im_conversation $WORKDIR/cmd/main diff --git a/deploy_k8s/demo/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile index 05b532fd4..bccc97561 100644 --- a/deploy_k8s/demo/demo.Dockerfile +++ b/deploy_k8s/demo/demo.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_demo $WORKDIR/cmd/main diff --git a/deploy_k8s/friend/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile index 1bdfe7c63..a545a5425 100644 --- a/deploy_k8s/friend/friend.Dockerfile +++ b/deploy_k8s/friend/friend.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_friend $WORKDIR/cmd/main diff --git a/deploy_k8s/group/group.Dockerfile b/deploy_k8s/group/group.Dockerfile index 7b902ee67..167214960 100644 --- a/deploy_k8s/group/group.Dockerfile +++ b/deploy_k8s/group/group.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_group $WORKDIR/cmd/main diff --git a/deploy_k8s/message_cms/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile index f77ebc3c2..95edd64b9 100644 --- a/deploy_k8s/message_cms/message_cms.Dockerfile +++ b/deploy_k8s/message_cms/message_cms.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_message_cms $WORKDIR/cmd/main diff --git a/deploy_k8s/msg/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile index 29ac3c0d4..668587bf1 100644 --- a/deploy_k8s/msg/msg.Dockerfile +++ b/deploy_k8s/msg/msg.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_msg $WORKDIR/cmd/main diff --git a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile index 48441eb56..a88280fe3 100644 --- a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile +++ b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_msg_gateway $WORKDIR/cmd/main diff --git a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile index 68c3f3819..be9bab452 100644 --- a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile +++ b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_msg_transfer $WORKDIR/cmd/main diff --git a/deploy_k8s/office/office.Dockerfile b/deploy_k8s/office/office.Dockerfile index c6db928fa..373611bc3 100644 --- a/deploy_k8s/office/office.Dockerfile +++ b/deploy_k8s/office/office.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_office $WORKDIR/cmd/main diff --git a/deploy_k8s/organization/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile index b492e8300..eac9d114e 100644 --- a/deploy_k8s/organization/organization.Dockerfile +++ b/deploy_k8s/organization/organization.Dockerfile @@ -4,9 +4,12 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_organization $WORKDIR/cmd/main + # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ chmod +x $WORKDIR/cmd/main diff --git a/deploy_k8s/push/push.Dockerfile b/deploy_k8s/push/push.Dockerfile index 2ac18c56d..a690ccd27 100644 --- a/deploy_k8s/push/push.Dockerfile +++ b/deploy_k8s/push/push.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_push $WORKDIR/cmd/main diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index b56b852a4..985878620 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_sdk_server $WORKDIR/cmd/main diff --git a/deploy_k8s/statistics/statistics.Dockerfile b/deploy_k8s/statistics/statistics.Dockerfile index 44e8f2fe1..1e615b416 100644 --- a/deploy_k8s/statistics/statistics.Dockerfile +++ b/deploy_k8s/statistics/statistics.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_statistics $WORKDIR/cmd/main diff --git a/deploy_k8s/user/user.Dockerfile b/deploy_k8s/user/user.Dockerfile index 3218949d4..096ae62dd 100644 --- a/deploy_k8s/user/user.Dockerfile +++ b/deploy_k8s/user/user.Dockerfile @@ -4,6 +4,8 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml +RUN mkdir $WORKDIR/cmd + # 将可执行文件复制到目标目录 ADD ./open_im_user $WORKDIR/cmd/main From d67fdbc24eee46d0c58ef8ababa2a5e98904c431 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:17:10 +0800 Subject: [PATCH 290/752] k8s --- deploy_k8s/ingress.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 26c424822..4b3a81aa9 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -33,8 +33,8 @@ metadata: nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # 使用重写后的路径进行路由 -# nginx.ingress.kubernetes.io/use-regex: "true" -# nginx.ingress.kubernetes.io/rewrite-target: "/$1" + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: msg-gateway-ingress spec: rules: @@ -46,8 +46,7 @@ spec: name: msg-gateway port: number: 10001 -# path: /msg-gateway/(.*) - path: / + path: /msg-gateway/(.*) pathType: Prefix --- apiVersion: networking.k8s.io/v1 From d7283b92acb4d1ae5c219fe7894815efae393300 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:19:56 +0800 Subject: [PATCH 291/752] k8s --- deploy_k8s/admin_cms/admin_cms.Dockerfile | 2 -- deploy_k8s/api/api.Dockerfile | 2 -- deploy_k8s/auth/auth.Dockerfile | 2 -- deploy_k8s/cache/cache.Dockerfile | 2 -- deploy_k8s/cms_api/cms_api.Dockerfile | 2 -- deploy_k8s/conversation/conversation.Dockerfile | 1 - deploy_k8s/demo/demo.Dockerfile | 2 -- deploy_k8s/friend/friend.Dockerfile | 1 - deploy_k8s/group/group.Dockerfile | 2 -- deploy_k8s/message_cms/message_cms.Dockerfile | 2 -- deploy_k8s/msg/msg.Dockerfile | 1 - deploy_k8s/msg_gateway/msg_gateway.Dockerfile | 2 -- deploy_k8s/msg_transfer/msg_transfer.Dockerfile | 2 -- deploy_k8s/office/office.Dockerfile | 2 -- deploy_k8s/organization/organization.Dockerfile | 2 -- deploy_k8s/push/push.Dockerfile | 1 - deploy_k8s/sdk_server/sdk_server.Dockerfile | 2 -- deploy_k8s/statistics/statistics.Dockerfile | 2 -- deploy_k8s/user/user.Dockerfile | 2 -- 19 files changed, 34 deletions(-) diff --git a/deploy_k8s/admin_cms/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile index d373741d3..1144ef09d 100644 --- a/deploy_k8s/admin_cms/admin_cms.Dockerfile +++ b/deploy_k8s/admin_cms/admin_cms.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_admin_cms $WORKDIR/cmd/main diff --git a/deploy_k8s/api/api.Dockerfile b/deploy_k8s/api/api.Dockerfile index c6f287fee..f1dd4c748 100644 --- a/deploy_k8s/api/api.Dockerfile +++ b/deploy_k8s/api/api.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_api $WORKDIR/cmd/main diff --git a/deploy_k8s/auth/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile index 6ddc5967c..04fbdf32a 100644 --- a/deploy_k8s/auth/auth.Dockerfile +++ b/deploy_k8s/auth/auth.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_auth $WORKDIR/cmd/main diff --git a/deploy_k8s/cache/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile index 0ee6ed1bd..e69d131ab 100644 --- a/deploy_k8s/cache/cache.Dockerfile +++ b/deploy_k8s/cache/cache.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_cache $WORKDIR/cmd/main diff --git a/deploy_k8s/cms_api/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile index 7921dfc4c..64c4ae25a 100644 --- a/deploy_k8s/cms_api/cms_api.Dockerfile +++ b/deploy_k8s/cms_api/cms_api.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_cms_api $WORKDIR/cmd/main diff --git a/deploy_k8s/conversation/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile index 9f92c8dea..4518627d3 100644 --- a/deploy_k8s/conversation/conversation.Dockerfile +++ b/deploy_k8s/conversation/conversation.Dockerfile @@ -4,7 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd # 将可执行文件复制到目标目录 ADD ./open_im_conversation $WORKDIR/cmd/main diff --git a/deploy_k8s/demo/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile index bccc97561..05b532fd4 100644 --- a/deploy_k8s/demo/demo.Dockerfile +++ b/deploy_k8s/demo/demo.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_demo $WORKDIR/cmd/main diff --git a/deploy_k8s/friend/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile index a545a5425..3741a7c89 100644 --- a/deploy_k8s/friend/friend.Dockerfile +++ b/deploy_k8s/friend/friend.Dockerfile @@ -4,7 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd # 将可执行文件复制到目标目录 ADD ./open_im_friend $WORKDIR/cmd/main diff --git a/deploy_k8s/group/group.Dockerfile b/deploy_k8s/group/group.Dockerfile index 167214960..7b902ee67 100644 --- a/deploy_k8s/group/group.Dockerfile +++ b/deploy_k8s/group/group.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_group $WORKDIR/cmd/main diff --git a/deploy_k8s/message_cms/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile index 95edd64b9..f77ebc3c2 100644 --- a/deploy_k8s/message_cms/message_cms.Dockerfile +++ b/deploy_k8s/message_cms/message_cms.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_message_cms $WORKDIR/cmd/main diff --git a/deploy_k8s/msg/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile index 668587bf1..50299b41d 100644 --- a/deploy_k8s/msg/msg.Dockerfile +++ b/deploy_k8s/msg/msg.Dockerfile @@ -4,7 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd # 将可执行文件复制到目标目录 ADD ./open_im_msg $WORKDIR/cmd/main diff --git a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile index a88280fe3..48441eb56 100644 --- a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile +++ b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_msg_gateway $WORKDIR/cmd/main diff --git a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile index be9bab452..68c3f3819 100644 --- a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile +++ b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_msg_transfer $WORKDIR/cmd/main diff --git a/deploy_k8s/office/office.Dockerfile b/deploy_k8s/office/office.Dockerfile index 373611bc3..c6db928fa 100644 --- a/deploy_k8s/office/office.Dockerfile +++ b/deploy_k8s/office/office.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_office $WORKDIR/cmd/main diff --git a/deploy_k8s/organization/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile index eac9d114e..345ee9692 100644 --- a/deploy_k8s/organization/organization.Dockerfile +++ b/deploy_k8s/organization/organization.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_organization $WORKDIR/cmd/main diff --git a/deploy_k8s/push/push.Dockerfile b/deploy_k8s/push/push.Dockerfile index a690ccd27..2904ce56f 100644 --- a/deploy_k8s/push/push.Dockerfile +++ b/deploy_k8s/push/push.Dockerfile @@ -4,7 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd # 将可执行文件复制到目标目录 ADD ./open_im_push $WORKDIR/cmd/main diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index 985878620..b56b852a4 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_sdk_server $WORKDIR/cmd/main diff --git a/deploy_k8s/statistics/statistics.Dockerfile b/deploy_k8s/statistics/statistics.Dockerfile index 1e615b416..44e8f2fe1 100644 --- a/deploy_k8s/statistics/statistics.Dockerfile +++ b/deploy_k8s/statistics/statistics.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_statistics $WORKDIR/cmd/main diff --git a/deploy_k8s/user/user.Dockerfile b/deploy_k8s/user/user.Dockerfile index 096ae62dd..3218949d4 100644 --- a/deploy_k8s/user/user.Dockerfile +++ b/deploy_k8s/user/user.Dockerfile @@ -4,8 +4,6 @@ FROM ubuntu ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml -RUN mkdir $WORKDIR/cmd - # 将可执行文件复制到目标目录 ADD ./open_im_user $WORKDIR/cmd/main From 6c324414b1507d8bc3d4540d0a4f952a491808a6 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:26:11 +0800 Subject: [PATCH 292/752] k8s --- deploy_k8s/ingress.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 4b3a81aa9..7d8b88c60 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -32,6 +32,17 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" + nginx.ingress.kubernetes.io/server-snippets: | + location / { + proxy_set_header Upgrade $http_upgrade; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header Host $host; + proxy_set_header Connection "upgrade"; + proxy_cache_bypass $http_upgrade; + } # 使用重写后的路径进行路由 nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: "/$1" @@ -43,9 +54,8 @@ spec: paths: - backend: service: - name: msg-gateway - port: - number: 10001 + serviceName: msg-gateway + servicePort: 10001 path: /msg-gateway/(.*) pathType: Prefix --- From fc71a757dd84f2bc609c32f4dc670c2208a15614 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:29:22 +0800 Subject: [PATCH 293/752] k8s --- deploy_k8s/admin_cms/deployment.yaml | 2 +- deploy_k8s/api/deployment.yaml | 2 +- deploy_k8s/auth/deployment.yaml | 2 +- deploy_k8s/build_push_all_images.sh | 2 +- deploy_k8s/cache/deployment.yaml | 2 +- deploy_k8s/cms_api/deployment.yaml | 2 +- deploy_k8s/conversation/deployment.yaml | 2 +- deploy_k8s/demo/deployment.yaml | 2 +- deploy_k8s/friend/deployment.yaml | 2 +- deploy_k8s/group/deployment.yaml | 2 +- deploy_k8s/message_cms/deployment.yaml | 2 +- deploy_k8s/msg/deployment.yaml | 2 +- deploy_k8s/msg_gateway/deployment.yaml | 2 +- deploy_k8s/msg_transfer/deployment.yaml | 2 +- deploy_k8s/office/deployment.yaml | 2 +- deploy_k8s/organization/deployment.yaml | 2 +- deploy_k8s/push/deployment.yaml | 2 +- deploy_k8s/sdk_server/deployment.yaml | 2 +- deploy_k8s/statistics/deployment.yaml | 2 +- deploy_k8s/user/deployment.yaml | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml index 437b1ffc5..88e260740 100644 --- a/deploy_k8s/admin_cms/deployment.yaml +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: admin-cms - image: openim/admin_cms:v2.0.10 + image: openim/admin_cms:v2.0.10k ports: - containerPort: 10200 volumeMounts: diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 870423066..a699d3a10 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: api - image: openim/api:v2.0.10 + image: openim/api:v2.0.10k ports: - containerPort: 10002 volumeMounts: diff --git a/deploy_k8s/auth/deployment.yaml b/deploy_k8s/auth/deployment.yaml index 89428d08c..4367f6d1f 100644 --- a/deploy_k8s/auth/deployment.yaml +++ b/deploy_k8s/auth/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: auth - image: openim/auth:v2.0.10 + image: openim/auth:v2.0.10k ports: - containerPort: 10160 volumeMounts: diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index 4d083e241..756add942 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -2,7 +2,7 @@ source ./path_info.cfg # images version -version=v2.0.10 +version=v2.0.10k cd ../script/; ./build_all_service.sh cd ../deploy_k8s/ diff --git a/deploy_k8s/cache/deployment.yaml b/deploy_k8s/cache/deployment.yaml index f957a8ef5..f92ceece0 100644 --- a/deploy_k8s/cache/deployment.yaml +++ b/deploy_k8s/cache/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: cache - image: openim/cache:v2.0.10 + image: openim/cache:v2.0.10k ports: - containerPort: 10240 volumeMounts: diff --git a/deploy_k8s/cms_api/deployment.yaml b/deploy_k8s/cms_api/deployment.yaml index 7cffa4c2b..d584cfb5f 100644 --- a/deploy_k8s/cms_api/deployment.yaml +++ b/deploy_k8s/cms_api/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: cms-api - image: openim/cms_api:v2.0.10 + image: openim/cms_api:v2.0.10k ports: - containerPort: 10006 volumeMounts: diff --git a/deploy_k8s/conversation/deployment.yaml b/deploy_k8s/conversation/deployment.yaml index 1e14e794a..fa897e104 100644 --- a/deploy_k8s/conversation/deployment.yaml +++ b/deploy_k8s/conversation/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: conversation - image: openim/conversation:v2.0.10 + image: openim/conversation:v2.0.10k ports: - containerPort: 10230 volumeMounts: diff --git a/deploy_k8s/demo/deployment.yaml b/deploy_k8s/demo/deployment.yaml index edaaf1d03..6eab5fa7b 100644 --- a/deploy_k8s/demo/deployment.yaml +++ b/deploy_k8s/demo/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: demo - image: openim/demo:v2.0.10 + image: openim/demo:v2.0.10k ports: - containerPort: 10004 volumeMounts: diff --git a/deploy_k8s/friend/deployment.yaml b/deploy_k8s/friend/deployment.yaml index 79070b768..ee3a025ac 100644 --- a/deploy_k8s/friend/deployment.yaml +++ b/deploy_k8s/friend/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: friend - image: openim/friend:v2.0.10 + image: openim/friend:v2.0.10k ports: - containerPort: 10120 volumeMounts: diff --git a/deploy_k8s/group/deployment.yaml b/deploy_k8s/group/deployment.yaml index 47acea4a8..9f9e75ee7 100644 --- a/deploy_k8s/group/deployment.yaml +++ b/deploy_k8s/group/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: group - image: openim/group:v2.0.10 + image: openim/group:v2.0.10k ports: - containerPort: 10150 volumeMounts: diff --git a/deploy_k8s/message_cms/deployment.yaml b/deploy_k8s/message_cms/deployment.yaml index 3792e4da4..0e3a33894 100644 --- a/deploy_k8s/message_cms/deployment.yaml +++ b/deploy_k8s/message_cms/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: message-cms - image: openim/message_cms:v2.0.10 + image: openim/message_cms:v2.0.10k ports: - containerPort: 10190 volumeMounts: diff --git a/deploy_k8s/msg/deployment.yaml b/deploy_k8s/msg/deployment.yaml index 4ab52e999..a4959004d 100644 --- a/deploy_k8s/msg/deployment.yaml +++ b/deploy_k8s/msg/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: msg - image: openim/msg:v2.0.10 + image: openim/msg:v2.0.10k ports: - containerPort: 10130 volumeMounts: diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index 23b67b988..ff3b3c1b1 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: msg-gateway - image: openim/msg_gateway:v2.0.10 + image: openim/msg_gateway:v2.0.10k ports: - name: rpc-port containerPort: 10140 diff --git a/deploy_k8s/msg_transfer/deployment.yaml b/deploy_k8s/msg_transfer/deployment.yaml index 24ff62289..fc2537ef2 100644 --- a/deploy_k8s/msg_transfer/deployment.yaml +++ b/deploy_k8s/msg_transfer/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: msg-transfer - image: openim/msg_transfer:v2.0.10 + image: openim/msg_transfer:v2.0.10k volumeMounts: - name: config mountPath: /Open-IM-Server/config diff --git a/deploy_k8s/office/deployment.yaml b/deploy_k8s/office/deployment.yaml index 5fec3450a..b9e20fa84 100644 --- a/deploy_k8s/office/deployment.yaml +++ b/deploy_k8s/office/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: office - image: openim/office:v2.0.10 + image: openim/office:v2.0.10k ports: - containerPort: 10210 volumeMounts: diff --git a/deploy_k8s/organization/deployment.yaml b/deploy_k8s/organization/deployment.yaml index 7d5318c64..29da1b05f 100644 --- a/deploy_k8s/organization/deployment.yaml +++ b/deploy_k8s/organization/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: organization - image: openim/organization:v2.0.10 + image: openim/organization:v2.0.10k ports: - containerPort: 10220 volumeMounts: diff --git a/deploy_k8s/push/deployment.yaml b/deploy_k8s/push/deployment.yaml index 61c9929fc..8cb712598 100644 --- a/deploy_k8s/push/deployment.yaml +++ b/deploy_k8s/push/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: push - image: openim/push:v2.0.10 + image: openim/push:v2.0.10k ports: - containerPort: 10170 volumeMounts: diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 7bec639b5..73a28ad2b 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: sdk-server - image: openim/sdk_server:v2.0.10 + image: openim/sdk_server:v2.0.10k ports: - containerPort: 10003 volumeMounts: diff --git a/deploy_k8s/statistics/deployment.yaml b/deploy_k8s/statistics/deployment.yaml index a517caf7d..4265317fc 100644 --- a/deploy_k8s/statistics/deployment.yaml +++ b/deploy_k8s/statistics/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: statistics - image: openim/statistics:v2.0.10 + image: openim/statistics:v2.0.10k ports: - containerPort: 10180 volumeMounts: diff --git a/deploy_k8s/user/deployment.yaml b/deploy_k8s/user/deployment.yaml index 8ad91a526..05b0e60b8 100644 --- a/deploy_k8s/user/deployment.yaml +++ b/deploy_k8s/user/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: user - image: openim/user:v2.0.10 + image: openim/user:v2.0.10k volumeMounts: - name: config mountPath: /Open-IM-Server/config From 810b08c50db86b1ab90959c23bca812e00618733 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:43:19 +0800 Subject: [PATCH 294/752] k8s --- deploy_k8s/ingress.yaml | 8 +++++--- deploy_k8s/kubectl_start_all.sh | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 7d8b88c60..4a961f897 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -54,9 +54,11 @@ spec: paths: - backend: service: - serviceName: msg-gateway - servicePort: 10001 - path: /msg-gateway/(.*) + name: msg-gateway + port: + number: 10001 +# path: /msg-gateway/(.*) + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 diff --git a/deploy_k8s/kubectl_start_all.sh b/deploy_k8s/kubectl_start_all.sh index ddb7743f1..b1c11b0bd 100755 --- a/deploy_k8s/kubectl_start_all.sh +++ b/deploy_k8s/kubectl_start_all.sh @@ -2,7 +2,7 @@ source ./path_info.cfg -mkdir -p /db/sdk #path for jssdk sqlite +#mkdir -p /db/sdk #path for jssdk sqlite for i in ${service[*]} do From b892749c7591a3403e554091181664141451080b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:46:53 +0800 Subject: [PATCH 295/752] k8s --- deploy_k8s/ingress.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 4a961f897..28d62b9b1 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -44,8 +44,8 @@ metadata: proxy_cache_bypass $http_upgrade; } # 使用重写后的路径进行路由 - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" +# nginx.ingress.kubernetes.io/use-regex: "true" +# nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: msg-gateway-ingress spec: rules: From 26f11fabb7376847a16fc5596fdc6d330e84269a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:47:49 +0800 Subject: [PATCH 296/752] k8s --- deploy_k8s/ingress.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 28d62b9b1..7684797c7 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -43,7 +43,6 @@ metadata: proxy_set_header Connection "upgrade"; proxy_cache_bypass $http_upgrade; } - # 使用重写后的路径进行路由 # nginx.ingress.kubernetes.io/use-regex: "true" # nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: msg-gateway-ingress From 17bab31b183e0a981d6662f65e69fae071f971e6 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:49:51 +0800 Subject: [PATCH 297/752] k8s --- deploy_k8s/ingress.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 7684797c7..f6e1d16b6 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -27,6 +27,7 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: + name: msg-gateway-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/proxy-http-version: "1.1" @@ -43,9 +44,8 @@ metadata: proxy_set_header Connection "upgrade"; proxy_cache_bypass $http_upgrade; } -# nginx.ingress.kubernetes.io/use-regex: "true" -# nginx.ingress.kubernetes.io/rewrite-target: "/$1" - name: msg-gateway-ingress + + spec: rules: - host: k8s.open-im-test.rentsoft.cn From 13e9c20be0a7b594bd25c5b0582b851756f86932 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:50:32 +0800 Subject: [PATCH 298/752] k8s --- deploy_k8s/ingress.yaml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index f6e1d16b6..ad5609610 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -33,18 +33,19 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" - nginx.ingress.kubernetes.io/server-snippets: | - location / { - proxy_set_header Upgrade $http_upgrade; - proxy_http_version 1.1; - proxy_set_header X-Forwarded-Host $http_host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_set_header Host $host; - proxy_set_header Connection "upgrade"; - proxy_cache_bypass $http_upgrade; - } - +# nginx.ingress.kubernetes.io/server-snippets: | +# location / { +# proxy_set_header Upgrade $http_upgrade; +# proxy_http_version 1.1; +# proxy_set_header X-Forwarded-Host $http_host; +# proxy_set_header X-Forwarded-Proto $scheme; +# proxy_set_header X-Forwarded-For $remote_addr; +# proxy_set_header Host $host; +# proxy_set_header Connection "upgrade"; +# proxy_cache_bypass $http_upgrade; +# } + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" spec: rules: From 0f40bc4ccef46970e9070976cd157a0747db7f79 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:52:39 +0800 Subject: [PATCH 299/752] k8s --- deploy_k8s/ingress.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index ad5609610..f49b09f57 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -33,17 +33,17 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" -# nginx.ingress.kubernetes.io/server-snippets: | -# location / { -# proxy_set_header Upgrade $http_upgrade; -# proxy_http_version 1.1; -# proxy_set_header X-Forwarded-Host $http_host; -# proxy_set_header X-Forwarded-Proto $scheme; -# proxy_set_header X-Forwarded-For $remote_addr; -# proxy_set_header Host $host; -# proxy_set_header Connection "upgrade"; -# proxy_cache_bypass $http_upgrade; -# } + nginx.ingress.kubernetes.io/server-snippets: | + location / { + proxy_set_header Upgrade $http_upgrade; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header Host $host; + proxy_set_header Connection "upgrade"; + proxy_cache_bypass $http_upgrade; + } nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: "/$1" From 0441662e0c0cab3cb7c50fb177886c4b44fc2f35 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:53:54 +0800 Subject: [PATCH 300/752] k8s --- deploy_k8s/ingress.yaml | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index f49b09f57..0279ba607 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -33,19 +33,8 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" - nginx.ingress.kubernetes.io/server-snippets: | - location / { - proxy_set_header Upgrade $http_upgrade; - proxy_http_version 1.1; - proxy_set_header X-Forwarded-Host $http_host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_set_header Host $host; - proxy_set_header Connection "upgrade"; - proxy_cache_bypass $http_upgrade; - } - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" +# nginx.ingress.kubernetes.io/use-regex: "true" +# nginx.ingress.kubernetes.io/rewrite-target: "/$1" spec: rules: From fe25d52082dca5d042c80c6142defc8f30d4b52b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 20:56:32 +0800 Subject: [PATCH 301/752] k8s --- deploy_k8s/ingress.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 0279ba607..20f361244 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -35,7 +35,6 @@ metadata: nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # nginx.ingress.kubernetes.io/use-regex: "true" # nginx.ingress.kubernetes.io/rewrite-target: "/$1" - spec: rules: - host: k8s.open-im-test.rentsoft.cn @@ -46,7 +45,6 @@ spec: name: msg-gateway port: number: 10001 -# path: /msg-gateway/(.*) path: / pathType: Prefix --- From d71536ab86d9aa85d6e7141a0064f5e3cd884452 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:01:35 +0800 Subject: [PATCH 302/752] k8s --- deploy_k8s/ingress.yaml | 2 -- deploy_k8s/k8s_openim_deploy.md | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 20f361244..4080a286d 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -33,8 +33,6 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" -# nginx.ingress.kubernetes.io/use-regex: "true" -# nginx.ingress.kubernetes.io/rewrite-target: "/$1" spec: rules: - host: k8s.open-im-test.rentsoft.cn diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 017fb0e85..6eca21618 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -1,6 +1,7 @@ #### openIM k8s部署文档 ### 1. 修改配置文件 在Open-IM-SERVER目录下修改config/config.yaml配置文件, 将MySQL, Kafka, MongoDB等配置修改。 +使用demo需要修改demo/imAPIURL地址 ### 2. 项目根目录创建im configMap到k8s openim namespace kubectl create namespace openim From aad4482a78fd3e3e1874d3ed75016e05f9aa0e47 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:02:42 +0800 Subject: [PATCH 303/752] k8s --- deploy_k8s/ingress.yaml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 4080a286d..ef68fc8fc 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -27,12 +27,15 @@ spec: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: msg-gateway-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" + # 使用重写后的路径进行路由 + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: "/$1" + name: msg-gateway-ingress spec: rules: - host: k8s.open-im-test.rentsoft.cn @@ -41,9 +44,9 @@ spec: - backend: service: name: msg-gateway - port: - number: 10001 - path: / + port: + number: 10001 + path: /msg-gateway/(.*) pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -51,7 +54,7 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" - # 使用重写后的路径进行路由 + # 使用重写后的路径进行路由 nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: api-ingress @@ -73,7 +76,7 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" - # 使用重写后的路径进行路由 + # 使用重写后的路径进行路由 nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: demo-ingress @@ -95,7 +98,7 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" - # 使用重写后的路径进行路由 + # 使用重写后的路径进行路由 nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: cms-api-ingress @@ -110,4 +113,4 @@ spec: port: number: 10006 path: /cms-api/(.*) - pathType: Prefix + pathType: Prefix \ No newline at end of file From 2d055c8d8d323967177b3a53022b9094183f067d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:03:29 +0800 Subject: [PATCH 304/752] k8s --- deploy_k8s/ingress.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index ef68fc8fc..1e4e10b15 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -33,8 +33,8 @@ metadata: nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # 使用重写后的路径进行路由 - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" +# nginx.ingress.kubernetes.io/use-regex: "true" +# nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: msg-gateway-ingress spec: rules: @@ -46,7 +46,7 @@ spec: name: msg-gateway port: number: 10001 - path: /msg-gateway/(.*) + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 From f0dd3aada3ab212b18f36feeb670906632912b6b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:10:24 +0800 Subject: [PATCH 305/752] k8s --- deploy_k8s/ingress.yaml | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 1e4e10b15..847ea78a3 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -7,13 +7,10 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" - # 使用重写后的路径进行路由 - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: sdk-server-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: sdk-server.open-im-test.rentsoft.cn http: paths: - backend: @@ -21,7 +18,7 @@ spec: name: sdk-server port: number: 10003 - path: /sdk-server/(.*) + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -32,13 +29,10 @@ metadata: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" - # 使用重写后的路径进行路由 -# nginx.ingress.kubernetes.io/use-regex: "true" -# nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: msg-gateway-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: msg-gateway.open-im-test.rentsoft.cn http: paths: - backend: @@ -54,13 +48,10 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" - # 使用重写后的路径进行路由 - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: api-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: api.open-im-test.rentsoft.cn http: paths: - backend: @@ -68,7 +59,7 @@ spec: name: api port: number: 10002 - path: /api/(.*) + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -76,13 +67,10 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" - # 使用重写后的路径进行路由 - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: demo-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: demo.open-im-test.rentsoft.cn http: paths: - backend: @@ -90,7 +78,7 @@ spec: name: demo port: number: 10004 - path: /demo/(.*) + path: / pathType: Prefix --- apiVersion: networking.k8s.io/v1 @@ -98,13 +86,10 @@ kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" - # 使用重写后的路径进行路由 - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: cms-api-ingress spec: rules: - - host: k8s.open-im-test.rentsoft.cn + - host: cms-api.open-im-test.rentsoft.cn http: paths: - backend: @@ -112,5 +97,5 @@ spec: name: cms-api port: number: 10006 - path: /cms-api/(.*) + path: / pathType: Prefix \ No newline at end of file From cb895d17ff741318b79ac02f2c76160324c9ffc2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:12:53 +0800 Subject: [PATCH 306/752] k8s --- deploy_k8s/ingress.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index 847ea78a3..f2d247d0f 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -10,7 +10,7 @@ metadata: name: sdk-server-ingress spec: rules: - - host: sdk-server.open-im-test.rentsoft.cn + - host: sdk-server.openim.xxx.com http: paths: - backend: @@ -32,7 +32,7 @@ metadata: name: msg-gateway-ingress spec: rules: - - host: msg-gateway.open-im-test.rentsoft.cn + - host: msg-gateway.openim.xxx.com http: paths: - backend: @@ -51,7 +51,7 @@ metadata: name: api-ingress spec: rules: - - host: api.open-im-test.rentsoft.cn + - host: api.openim.xxx.com http: paths: - backend: @@ -70,7 +70,7 @@ metadata: name: demo-ingress spec: rules: - - host: demo.open-im-test.rentsoft.cn + - host: demo.openim.xxx.com http: paths: - backend: @@ -89,7 +89,7 @@ metadata: name: cms-api-ingress spec: rules: - - host: cms-api.open-im-test.rentsoft.cn + - host: cms-api.openim.xxx.com http: paths: - backend: From b304c130349ae37bf0efae9321182c6068a903c2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:15:59 +0800 Subject: [PATCH 307/752] k8s --- deploy_k8s/k8s_openim_deploy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 6eca21618..010a8d09e 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -1,7 +1,7 @@ #### openIM k8s部署文档 ### 1. 修改配置文件 在Open-IM-SERVER目录下修改config/config.yaml配置文件, 将MySQL, Kafka, MongoDB等配置修改。 -使用demo需要修改demo/imAPIURL地址 +使用demo需要修改demo/imAPIURL地址 让demo能请求到im的api ### 2. 项目根目录创建im configMap到k8s openim namespace kubectl create namespace openim From 53c40a87b2f43221f42123c9c847c8a405d02e24 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:17:57 +0800 Subject: [PATCH 308/752] k8s --- deploy_k8s/sdk_server/sdk_server.Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index b56b852a4..6e8ec93cc 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -5,13 +5,13 @@ ENV WORKDIR /Open-IM-Server ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 -ADD ./open_im_sdk_server $WORKDIR/cmd/main +ADD ./open_im_sdk_server $WORKDIR/main # 创建用于挂载的几个目录,添加可执行权限 RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ - chmod +x $WORKDIR/cmd/main + chmod +x $WORKDIR/main VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] WORKDIR $WORKDIR -CMD ./cmd/main +CMD ./main From 197be510478a9994f28059d6ee1773e6408a66ff Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 21:19:05 +0800 Subject: [PATCH 309/752] k8s --- deploy_k8s/sdk_server/sdk_server.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index 6e8ec93cc..e38369bcb 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -14,4 +14,4 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] WORKDIR $WORKDIR -CMD ./main +CMD ./main \ No newline at end of file From d00641a73c9caebd8df3268738d3b1e138812b4e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 11:47:35 +0800 Subject: [PATCH 310/752] redis replace go redis --- pkg/common/db/model.go | 15 ++++++++++- pkg/common/db/newRedisModel.go | 44 ++++++++++++++++++++++++++++++++ pkg/common/db/redisModel_test.go | 29 +++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 pkg/common/db/newRedisModel.go diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index f8aaca54a..6e2c9614a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -8,8 +8,8 @@ import ( //"Open_IM/pkg/common/log" "Open_IM/pkg/utils" "fmt" + go_redis "github.com/go-redis/redis/v8" "go.mongodb.org/mongo-driver/mongo/options" - // "context" // "fmt" "github.com/garyburd/redigo/redis" @@ -30,6 +30,7 @@ type DataBases struct { mgoSession *mgo.Session redisPool *redis.Pool mongoClient *mongo.Client + rdb *go_redis.ClusterClient } func key(dbAddress, dbName string) string { @@ -113,6 +114,18 @@ func init() { ) }, } + + DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + Addrs: []string{config.Config.Redis.DBAddress}, + PoolSize: 100, + Password: config.Config.Redis.DBPassWord, + }) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } } func createMongoIndex(client *mongo.Client, collection string, isUnique bool, keys ...string) error { diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go new file mode 100644 index 000000000..f2b5f8930 --- /dev/null +++ b/pkg/common/db/newRedisModel.go @@ -0,0 +1,44 @@ +package db + +import ( + "Open_IM/pkg/common/config" + log2 "Open_IM/pkg/common/log" + pbChat "Open_IM/pkg/proto/chat" + "Open_IM/pkg/utils" + "context" + "errors" + "fmt" + "strconv" + "time" +) + +//func (d * DataBases)pubMessage(channel, msg string) { +// d.rdb.Publish(context.Background(),channel,msg) +//} +//func (d * DataBases)pubMessage(channel, msg string) { +// d.rdb.Publish(context.Background(),channel,msg) +//} + +func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { + ctx := context.Background() + var failedList []pbChat.MsgDataToMQ + for _, msg := range msgList { + key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) + s, err := utils.Pb2Map(msg.MsgData) + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2Map failed", msg.MsgData.String(), uid, err.Error()) + continue + } + log2.NewDebug(operationID, "convert map is ", s) + val, err := d.rdb.HMSet(ctx, key, s).Result() + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val) + failedList = append(failedList, *msg) + } + d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) + } + if len(failedList) != 0 { + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) + } + return nil +} diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 1d9d254b7..f6f940209 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,6 +1,9 @@ package db import ( + pbChat "Open_IM/pkg/proto/chat" + "context" + "flag" "fmt" "github.com/stretchr/testify/assert" "testing" @@ -25,3 +28,29 @@ func TestDataBases_GetMultiConversationMsgOpt(t *testing.T) { assert.Nil(t, err) fmt.Println(m) } +func Test_GetKeyTTL(t *testing.T) { + ctx := context.Background() + key := flag.String("key", "key", "key value") + flag.Parse() + ttl, err := DB.rdb.TTL(ctx, *key).Result() + assert.Nil(t, err) + fmt.Println(ttl) +} +func Test_HGetAll(t *testing.T) { + ctx := context.Background() + key := flag.String("key", "key", "key value") + flag.Parse() + ttl, err := DB.rdb.TTL(ctx, *key).Result() + assert.Nil(t, err) + fmt.Println(ttl) +} +func Test_NewSetMessageToCache(t *testing.T) { + var msg pbChat.MsgDataToMQ + uid := "test_uid" + msg.MsgData.Seq = 11 + msg.MsgData.ClientMsgID = "23jwhjsdf" + messageList := []*pbChat.MsgDataToMQ{&msg} + err := DB.NewSetMessageToCache(messageList, uid, "test") + assert.Nil(t, err) + +} From ad8086d2b65cf1d654d3205cfc79f938c9868b4f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 11:57:22 +0800 Subject: [PATCH 311/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- pkg/common/db/redisModel.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index f2b5f8930..fd720a45b 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -38,7 +38,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) } return nil } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 92b27c614..da5a79492 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -309,7 +309,7 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, } } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) } return nil } From 136cb43cd1f718512201d47330f391ad83f6dbb5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:07:06 +0800 Subject: [PATCH 312/752] redis replace go redis --- pkg/common/db/model.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 6e2c9614a..6d1660807 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -30,7 +30,7 @@ type DataBases struct { mgoSession *mgo.Session redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.ClusterClient + rdb *go_redis.Client } func key(dbAddress, dbName string) string { @@ -114,12 +114,17 @@ func init() { ) }, } - - DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - Addrs: []string{config.Config.Redis.DBAddress}, - PoolSize: 100, - Password: config.Config.Redis.DBPassWord, + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 }) + //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + // Addrs: []string{config.Config.Redis.DBAddress}, + // PoolSize: 100, + // Password: config.Config.Redis.DBPassWord, + //}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() _, err = DB.rdb.Ping(ctx).Result() From 122a3ab4ce938feb3acf3f63bb2f04172d98b83b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:10:24 +0800 Subject: [PATCH 313/752] redis replace go redis --- pkg/common/db/redisModel_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index f6f940209..a7314dce9 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -2,6 +2,7 @@ package db import ( pbChat "Open_IM/pkg/proto/chat" + "Open_IM/pkg/proto/sdk_ws" "context" "flag" "fmt" @@ -46,9 +47,11 @@ func Test_HGetAll(t *testing.T) { } func Test_NewSetMessageToCache(t *testing.T) { var msg pbChat.MsgDataToMQ + var data server_api_params.MsgData uid := "test_uid" - msg.MsgData.Seq = 11 - msg.MsgData.ClientMsgID = "23jwhjsdf" + data.Seq = 11 + data.ClientMsgID = "23jwhjsdf" + msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} err := DB.NewSetMessageToCache(messageList, uid, "test") assert.Nil(t, err) From 1257e96d5ee45895d835234451dcad43475bc79b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:13:12 +0800 Subject: [PATCH 314/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index fd720a45b..3e0ae1664 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -32,13 +32,13 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri log2.NewDebug(operationID, "convert map is ", s) val, err := d.rdb.HMSet(ctx, key, s).Result() if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) failedList = append(failedList, *msg) } d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) } return nil } From 4e609ebc330be3df16281b8c94e1e4c0714a7ef1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:14:40 +0800 Subject: [PATCH 315/752] redis replace go redis --- pkg/common/db/redisModel_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index a7314dce9..c665ac884 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -53,7 +53,7 @@ func Test_NewSetMessageToCache(t *testing.T) { data.ClientMsgID = "23jwhjsdf" msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} - err := DB.NewSetMessageToCache(messageList, uid, "test") + err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") assert.Nil(t, err) } From c28801ff27f2a3ddfa2cad3077d6eb18c0511cb2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:20:40 +0800 Subject: [PATCH 316/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 3e0ae1664..344befcd5 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -22,6 +22,7 @@ import ( func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ + var err error for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) s, err := utils.Pb2Map(msg.MsgData) @@ -38,7 +39,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID) + err.Error()) } return nil } From dda453975bf844360929bd29c384721b5d0919c6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:32:26 +0800 Subject: [PATCH 317/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 344befcd5..f8ff63ed2 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -22,7 +22,6 @@ import ( func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ - var err error for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) s, err := utils.Pb2Map(msg.MsgData) @@ -33,13 +32,14 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri log2.NewDebug(operationID, "convert map is ", s) val, err := d.rdb.HMSet(ctx, key, s).Result() if err != nil { + return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) failedList = append(failedList, *msg) } d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID) + err.Error()) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) } return nil } From d4c587c66867f9075add019db45b03c364e037c6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:09:33 +0800 Subject: [PATCH 318/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index f8ff63ed2..8db19df2a 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -30,7 +30,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri continue } log2.NewDebug(operationID, "convert map is ", s) - val, err := d.rdb.HMSet(ctx, key, s).Result() + val, err := d.rdb.HSet(ctx, key, s).Result() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) From 47af0d03560b5b6a2ca72af9e7bd684a940ff508 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:20:51 +0800 Subject: [PATCH 319/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 8db19df2a..f00121003 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -30,6 +30,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri continue } log2.NewDebug(operationID, "convert map is ", s) + fmt.Println("ts", s) val, err := d.rdb.HSet(ctx, key, s).Result() if err != nil { return err From f36b2433a038f0c971dbe6f97eb938d1d544cd94 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:24:18 +0800 Subject: [PATCH 320/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index f00121003..57fdb139d 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,7 +31,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - val, err := d.rdb.HSet(ctx, key, s).Result() + val, err := d.rdb.HMSet(ctx, key, s).Result() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) From e693b908be0bb2cece37c6d55c9732d0f09f5f4b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:41:06 +0800 Subject: [PATCH 321/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 57fdb139d..1cbceac01 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,10 +31,10 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - val, err := d.rdb.HMSet(ctx, key, s).Result() + err = d.rdb.HMSet(ctx, key, s).Err() if err != nil { return err - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) failedList = append(failedList, *msg) } d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) From a630653d88897f3f64133573f4dfacd1fb35b26e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:22:42 +0800 Subject: [PATCH 322/752] redis replace go redis --- pkg/common/db/redisModel_test.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index c665ac884..a11f96bcd 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,8 +1,6 @@ package db import ( - pbChat "Open_IM/pkg/proto/chat" - "Open_IM/pkg/proto/sdk_ws" "context" "flag" "fmt" @@ -45,15 +43,17 @@ func Test_HGetAll(t *testing.T) { assert.Nil(t, err) fmt.Println(ttl) } + func Test_NewSetMessageToCache(t *testing.T) { - var msg pbChat.MsgDataToMQ - var data server_api_params.MsgData - uid := "test_uid" - data.Seq = 11 - data.ClientMsgID = "23jwhjsdf" - msg.MsgData = &data - messageList := []*pbChat.MsgDataToMQ{&msg} - err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + //var msg pbChat.MsgDataToMQ + //var data server_api_params.MsgData + //uid := "test_uid" + //data.Seq = 11 + //data.ClientMsgID = "23jwhjsdf" + //msg.MsgData = &data + //messageList := []*pbChat.MsgDataToMQ{&msg} + //err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() assert.Nil(t, err) } From 628984c09d27bf03a7bc1dbd886ec617f84daf13 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:25:52 +0800 Subject: [PATCH 323/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- pkg/common/db/redisModel_test.go | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 1cbceac01..9aab4ea14 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,7 +31,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - err = d.rdb.HMSet(ctx, key, s).Err() + err = d.rdb.HMSet(context.Background(), key, s).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index a11f96bcd..4832dbb09 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,6 +1,8 @@ package db import ( + pbChat "Open_IM/pkg/proto/chat" + server_api_params "Open_IM/pkg/proto/sdk_ws" "context" "flag" "fmt" @@ -45,15 +47,15 @@ func Test_HGetAll(t *testing.T) { } func Test_NewSetMessageToCache(t *testing.T) { - //var msg pbChat.MsgDataToMQ - //var data server_api_params.MsgData - //uid := "test_uid" - //data.Seq = 11 - //data.ClientMsgID = "23jwhjsdf" - //msg.MsgData = &data - //messageList := []*pbChat.MsgDataToMQ{&msg} - //err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") - err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() + var msg pbChat.MsgDataToMQ + var data server_api_params.MsgData + uid := "test_uid" + data.Seq = 11 + data.ClientMsgID = "23jwhjsdf" + msg.MsgData = &data + messageList := []*pbChat.MsgDataToMQ{&msg} + err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + //err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() assert.Nil(t, err) } From 3765661a4e330dc28ca93b4ead5dd9ce4e43820f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:29:16 +0800 Subject: [PATCH 324/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 9aab4ea14..e54eebbdd 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,7 +31,11 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - err = d.rdb.HMSet(context.Background(), key, s).Err() + m := make(map[string]interface{}) + for k, v := range s { + m[k] = v + } + err = d.rdb.HMSet(context.Background(), key, m).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) From 29e75a48519970f06bf65601f825b0d46e6e74af Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 31 May 2022 14:30:14 +0800 Subject: [PATCH 325/752] organization --- .../im_mysql_model/organization_model.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index be06f7f38..525ebf59d 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -256,19 +256,19 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, return &department, err } -func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList []string) (*db.Department, error) { +func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]string) error { department, err := getDepartmentParent(departmentID, dbConn) if err != nil { - return nil, err + return err } if department.ParentID != "" { - parentIDList = append(parentIDList, department.ParentID) - _, err = GetDepartmentParent(departmentID, dbConn, parentIDList) + *parentIDList = append(*parentIDList, department.ParentID) + err = GetDepartmentParent(departmentID, dbConn, parentIDList) if err != nil { - return nil, nil + return err } } - return nil, nil + return nil } func GetDepartmentParentIDList(departmentID string) ([]string, error) { @@ -277,6 +277,6 @@ func GetDepartmentParentIDList(departmentID string) ([]string, error) { return nil, err } var parentIDList []string - _, err = GetDepartmentParent(departmentID, dbConn, parentIDList) + err = GetDepartmentParent(departmentID, dbConn, &parentIDList) return parentIDList, err } From 1c2ebb8c5d0edb190cc31b4f9be4fcf7fbf17b23 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:37:47 +0800 Subject: [PATCH 326/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index e54eebbdd..a62f14cc7 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -35,7 +35,8 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri for k, v := range s { m[k] = v } - err = d.rdb.HMSet(context.Background(), key, m).Err() + //err = d.rdb.HMSet(context.Background(), key, m).Err() + err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) From 31e923fc6724984dff4f6fe675fdc52e44b26d19 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:51:25 +0800 Subject: [PATCH 327/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 8 ++------ pkg/common/db/redisModel_test.go | 1 - 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index a62f14cc7..9ef4f1ec4 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,12 +31,8 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - m := make(map[string]interface{}) - for k, v := range s { - m[k] = v - } - //err = d.rdb.HMSet(context.Background(), key, m).Err() - err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() + err = d.rdb.HMSet(context.Background(), key, s).Err() + //err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 4832dbb09..4e3b0213d 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -55,7 +55,6 @@ func Test_NewSetMessageToCache(t *testing.T) { msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") - //err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() assert.Nil(t, err) } From fcf2427878087a8896ad27d5d6fbc2ca6ce2b8a7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:51:37 +0800 Subject: [PATCH 328/752] redis replace go redis --- pkg/utils/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 5346292ac..8626f13cb 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -165,7 +165,7 @@ func Pb2Map(pb proto.Message) (map[string]interface{}, error) { jsonbMarshaller := &jsonpb.Marshaler{ OrigName: true, EnumsAsInts: true, - EmitDefaults: true, + EmitDefaults: false, } _ = jsonbMarshaller.Marshal(&_buffer, pb) jsonCnt := _buffer.Bytes() From 5c979a532f6983d27bb8714fa9882196d8b54732 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 15:13:59 +0800 Subject: [PATCH 329/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 43 ++++++++++++++++++++++++++++++++ pkg/common/db/redisModel_test.go | 13 ++++++++++ 2 files changed, 56 insertions(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 9ef4f1ec4..912902b1e 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -4,10 +4,13 @@ import ( "Open_IM/pkg/common/config" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" + pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "encoding/json" "errors" "fmt" + "github.com/golang/protobuf/proto" "strconv" "time" ) @@ -19,6 +22,46 @@ import ( // d.rdb.Publish(context.Background(),channel,msg) //} +func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { + for _, v := range seqList { + //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 + key := messageCache + userID + "_" + strconv.Itoa(int(v)) + + result, err := d.rdb.HGetAll(context.Background(), key).Result() + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "redis get message error:", err.Error(), v) + } else { + msg, err := Map2Pb(result) + //msg := pbCommon.MsgData{} + //err = jsonpb.UnmarshalString(result, &msg) + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) + } else { + log2.NewDebug(operationID, "redis get msg is ", msg.String()) + seqMsg = append(seqMsg, msg) + } + + } + } + return seqMsg, failedSeqList, errResult +} +func Map2Pb(m map[string]string) (*pbCommon.MsgData, error) { + var data pbCommon.MsgData + b, err := json.Marshal(m) + if err != nil { + return nil, err + } + err = proto.Unmarshal(b, &data) + if err != nil { + return nil, err + } + return &data, nil +} + func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 4e3b0213d..4efc75957 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -58,3 +58,16 @@ func Test_NewSetMessageToCache(t *testing.T) { assert.Nil(t, err) } +func Test_NewGetMessageListBySeq(t *testing.T) { + var msg pbChat.MsgDataToMQ + var data server_api_params.MsgData + uid := "test_uid" + data.Seq = 11 + data.ClientMsgID = "23jwhjsdf" + msg.MsgData = &data + + seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{11}, "cacheTest") + assert.Nil(t, err) + fmt.Println(seqMsg, failedSeqList) + +} From 4c305b7cc0378dd96dec9dca96ea7011db28adbc Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 15:18:54 +0800 Subject: [PATCH 330/752] redis replace go redis --- pkg/common/db/newRedisModel.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 912902b1e..deb932a0f 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -7,10 +7,9 @@ import ( pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "encoding/json" "errors" "fmt" - "github.com/golang/protobuf/proto" + "github.com/mitchellh/mapstructure" "strconv" "time" ) @@ -51,11 +50,7 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper } func Map2Pb(m map[string]string) (*pbCommon.MsgData, error) { var data pbCommon.MsgData - b, err := json.Marshal(m) - if err != nil { - return nil, err - } - err = proto.Unmarshal(b, &data) + err := mapstructure.Decode(m, &data) if err != nil { return nil, err } From f98da25fda07e644b145b23484dc66697d263807 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 31 May 2022 19:14:00 +0800 Subject: [PATCH 331/752] organization --- deploy_k8s/admin_cms/deployment.yaml | 1 + deploy_k8s/api/deployment.yaml | 1 + deploy_k8s/auth/deployment.yaml | 1 + deploy_k8s/cache/deployment.yaml | 1 + deploy_k8s/cms_api/deployment.yaml | 1 + deploy_k8s/conversation/deployment.yaml | 1 + deploy_k8s/demo/deployment.yaml | 1 + deploy_k8s/friend/deployment.yaml | 1 + deploy_k8s/group/deployment.yaml | 1 + deploy_k8s/message_cms/deployment.yaml | 1 + deploy_k8s/msg/deployment.yaml | 1 + deploy_k8s/msg_gateway/deployment.yaml | 1 + deploy_k8s/msg_transfer/deployment.yaml | 1 + deploy_k8s/office/deployment.yaml | 1 + deploy_k8s/organization/deployment.yaml | 1 + deploy_k8s/push/deployment.yaml | 1 + deploy_k8s/sdk_server/deployment.yaml | 1 + internal/demo/register/onboarding_process.go | 1 + internal/rpc/organization/organization.go | 2 +- .../db/mysql_model/im_mysql_model/organization_model.go | 5 +++-- 20 files changed, 22 insertions(+), 3 deletions(-) diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml index 88e260740..518655965 100644 --- a/deploy_k8s/admin_cms/deployment.yaml +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: admin-cms image: openim/admin_cms:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10200 volumeMounts: diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index a699d3a10..5c5bfb72f 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: api image: openim/api:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10002 volumeMounts: diff --git a/deploy_k8s/auth/deployment.yaml b/deploy_k8s/auth/deployment.yaml index 4367f6d1f..ef1aef5ab 100644 --- a/deploy_k8s/auth/deployment.yaml +++ b/deploy_k8s/auth/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: auth image: openim/auth:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10160 volumeMounts: diff --git a/deploy_k8s/cache/deployment.yaml b/deploy_k8s/cache/deployment.yaml index f92ceece0..fd29244f0 100644 --- a/deploy_k8s/cache/deployment.yaml +++ b/deploy_k8s/cache/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: cache image: openim/cache:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10240 volumeMounts: diff --git a/deploy_k8s/cms_api/deployment.yaml b/deploy_k8s/cms_api/deployment.yaml index d584cfb5f..1218316e9 100644 --- a/deploy_k8s/cms_api/deployment.yaml +++ b/deploy_k8s/cms_api/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: cms-api image: openim/cms_api:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10006 volumeMounts: diff --git a/deploy_k8s/conversation/deployment.yaml b/deploy_k8s/conversation/deployment.yaml index fa897e104..b982faf98 100644 --- a/deploy_k8s/conversation/deployment.yaml +++ b/deploy_k8s/conversation/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: conversation image: openim/conversation:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10230 volumeMounts: diff --git a/deploy_k8s/demo/deployment.yaml b/deploy_k8s/demo/deployment.yaml index 6eab5fa7b..d12f902b9 100644 --- a/deploy_k8s/demo/deployment.yaml +++ b/deploy_k8s/demo/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: demo image: openim/demo:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10004 volumeMounts: diff --git a/deploy_k8s/friend/deployment.yaml b/deploy_k8s/friend/deployment.yaml index ee3a025ac..171849e7e 100644 --- a/deploy_k8s/friend/deployment.yaml +++ b/deploy_k8s/friend/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: friend image: openim/friend:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10120 volumeMounts: diff --git a/deploy_k8s/group/deployment.yaml b/deploy_k8s/group/deployment.yaml index 9f9e75ee7..3938cec84 100644 --- a/deploy_k8s/group/deployment.yaml +++ b/deploy_k8s/group/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: group image: openim/group:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10150 volumeMounts: diff --git a/deploy_k8s/message_cms/deployment.yaml b/deploy_k8s/message_cms/deployment.yaml index 0e3a33894..c321ac382 100644 --- a/deploy_k8s/message_cms/deployment.yaml +++ b/deploy_k8s/message_cms/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: message-cms image: openim/message_cms:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10190 volumeMounts: diff --git a/deploy_k8s/msg/deployment.yaml b/deploy_k8s/msg/deployment.yaml index a4959004d..25912cc60 100644 --- a/deploy_k8s/msg/deployment.yaml +++ b/deploy_k8s/msg/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: msg image: openim/msg:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10130 volumeMounts: diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index ff3b3c1b1..06570d76e 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: msg-gateway image: openim/msg_gateway:v2.0.10k + imagePullPolicy: Always ports: - name: rpc-port containerPort: 10140 diff --git a/deploy_k8s/msg_transfer/deployment.yaml b/deploy_k8s/msg_transfer/deployment.yaml index fc2537ef2..98410331e 100644 --- a/deploy_k8s/msg_transfer/deployment.yaml +++ b/deploy_k8s/msg_transfer/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: msg-transfer image: openim/msg_transfer:v2.0.10k + imagePullPolicy: Always volumeMounts: - name: config mountPath: /Open-IM-Server/config diff --git a/deploy_k8s/office/deployment.yaml b/deploy_k8s/office/deployment.yaml index b9e20fa84..4a035db57 100644 --- a/deploy_k8s/office/deployment.yaml +++ b/deploy_k8s/office/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: office image: openim/office:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10210 volumeMounts: diff --git a/deploy_k8s/organization/deployment.yaml b/deploy_k8s/organization/deployment.yaml index 29da1b05f..ec727ff53 100644 --- a/deploy_k8s/organization/deployment.yaml +++ b/deploy_k8s/organization/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: organization image: openim/organization:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10220 volumeMounts: diff --git a/deploy_k8s/push/deployment.yaml b/deploy_k8s/push/deployment.yaml index 8cb712598..2b463f838 100644 --- a/deploy_k8s/push/deployment.yaml +++ b/deploy_k8s/push/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: push image: openim/push:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10170 volumeMounts: diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 73a28ad2b..50127015d 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: sdk-server image: openim/sdk_server:v2.0.10k + imagePullPolicy: Always ports: - containerPort: 10003 volumeMounts: diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 28d4d9140..8c43bc221 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -161,6 +161,7 @@ func onboardingProcessNotification(operationID, userID, groupID string) { }() var tips commonPb.TipsComm tips.DefaultTips = config.Config.Notification.JoinDepartmentNotification.DefaultTips.Tips + tips.JsonDetail = "" content, err := proto.Marshal(&tips) if err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), "proto marshal failed") diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index e952c6894..02523c35e 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -154,7 +154,6 @@ func (s *organizationServer) UpdateDepartment(ctx context.Context, req *rpc.Upda department := db.Department{} utils.CopyStructFields(&department, req.DepartmentInfo) - log.Debug(req.OperationID, "dst ", department, "src ", req.DepartmentInfo) if err := imdb.UpdateDepartment(&department, nil); err != nil { errMsg := req.OperationID + " " + "UpdateDepartment failed " + err.Error() @@ -343,6 +342,7 @@ func (s *organizationServer) GetDepartmentParentIDList(_ context.Context, req *r resp = &rpc.GetDepartmentParentIDListResp{} resp.ParentIDList, err = imdb.GetDepartmentParentIDList(req.DepartmentID) if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetDepartmentParentIDList failed", err.Error()) resp.ErrMsg = constant.ErrDB.ErrMsg + ": " + err.Error() resp.ErrCode = constant.ErrDB.ErrCode return resp, nil diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 525ebf59d..17a6c938f 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -249,10 +249,11 @@ func GetDepartmentRelatedGroupIDList(departmentIDList []string) ([]string, error func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, error) { var department db.Department - var parentID string + //var parentID string dbConn.LogMode(true) // select * from departments where department_id = (select parent_id from departments where department_id= zx234fd); - err := dbConn.Table("departments").Where("department_id=?", dbConn.Table("departments").Where("department_id=?", departmentID).Pluck("parent_id", parentID)).Find(&department).Error + //dbConn.Table("departments").Where("department_id=?", departmentID).Pluck("parent_id", parentID).Error + err := dbConn.Table("departments").Where("department_id=?").Find(&department).Error return &department, err } From 2b4df5be16e4b8622cc097ff676ebe4a9b20b23f Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 31 May 2022 19:16:29 +0800 Subject: [PATCH 332/752] Clear personal chat history --- cmd/open_im_api/main.go | 1 + internal/api/chat/del_msg.go | 43 +++++- internal/rpc/msg/chat.go | 38 ++++++ pkg/base_info/msg.go | 9 ++ pkg/common/constant/constant.go | 2 +- pkg/common/db/mongoModel.go | 32 +++++ pkg/common/db/newRedisModel.go | 13 ++ pkg/proto/chat/chat.pb.go | 223 ++++++++++++++++++++++++++------ pkg/proto/chat/chat.proto | 13 +- 9 files changed, 328 insertions(+), 46 deletions(-) create mode 100644 internal/rpc/msg/chat.go diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index cb3fcd9ae..d2a8f22ef 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -119,6 +119,7 @@ func main() { chatGroup.POST("/send_msg", apiChat.SendMsg) chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) chatGroup.POST("/del_msg", apiChat.DelMsg) + chatGroup.POST("/clean_up_msg", apiChat.ClearMsg) } //Manager managementGroup := r.Group("/manager") diff --git a/internal/api/chat/del_msg.go b/internal/api/chat/del_msg.go index d883f095c..bad553938 100644 --- a/internal/api/chat/del_msg.go +++ b/internal/api/chat/del_msg.go @@ -5,8 +5,9 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" - pbChat "Open_IM/pkg/proto/chat" + rpc "Open_IM/pkg/proto/chat" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" @@ -30,7 +31,7 @@ func DelMsg(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) } grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) + msgClient := rpc.NewChatClient(grpcConn) respPb, err := msgClient.DelMsgList(context.Background(), &reqPb) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsgList failed", err.Error(), reqPb) @@ -42,3 +43,41 @@ func DelMsg(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp) c.JSON(http.StatusOK, resp) } + +func ClearMsg(c *gin.Context) { + params := api.CleanUpMsgReq{} + if err := c.BindJSON(¶ms); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + // + req := &rpc.ClearMsgReq{} + utils.CopyStructFields(req, ¶ms) + + var ok bool + var errInfo string + ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) + + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + client := rpc.NewChatClient(etcdConn) + RpcResp, err := client.ClearMsg(context.Background(), req) + if err != nil { + log.NewError(req.OperationID, " CleanUpMsg failed ", err.Error(), req.String(), RpcResp.ErrMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": RpcResp.ErrMsg}) + return + } + + resp := api.CleanUpMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}} + + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp) + c.JSON(http.StatusOK, resp) +} diff --git a/internal/rpc/msg/chat.go b/internal/rpc/msg/chat.go new file mode 100644 index 000000000..40c91c2e9 --- /dev/null +++ b/internal/rpc/msg/chat.go @@ -0,0 +1,38 @@ +package msg + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" + "Open_IM/pkg/proto/chat" + "Open_IM/pkg/utils" + "context" +) + +func (rpc *rpcChat) ClearMsg(_ context.Context, req *pbChat.ClearMsgReq) (*pbChat.ClearMsgResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc req: ", req.String()) + if req.OpUserID != req.UserID && !token_verify.IsManagerUserID(req.UserID) { + errMsg := "No permission" + req.OpUserID + req.UserID + log.Error(req.OperationID, errMsg) + return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + log.Debug(req.OperationID, "CleanUpOneUserAllMsgFromRedis args", req.UserID) + err := db.DB.CleanUpOneUserAllMsgFromRedis(req.UserID) + if err != nil { + errMsg := "CleanUpOneUserAllMsgFromRedis failed " + err.Error() + req.OperationID + req.UserID + log.Error(req.OperationID, errMsg) + return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + log.Debug(req.OperationID, "CleanUpUserMsgFromMongo args", req.UserID) + err = db.DB.CleanUpUserMsgFromMongo(req.UserID) + if err != nil { + errMsg := "CleanUpUserMsgFromMongo failed " + err.Error() + req.OperationID + req.UserID + log.Error(req.OperationID, errMsg) + return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + + resp := pbChat.ClearMsgResp{ErrCode: 0} + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return &resp, nil +} diff --git a/pkg/base_info/msg.go b/pkg/base_info/msg.go index bc80cf304..15941f340 100644 --- a/pkg/base_info/msg.go +++ b/pkg/base_info/msg.go @@ -10,3 +10,12 @@ type DelMsgReq struct { type DelMsgResp struct { CommResp } + +type CleanUpMsgReq struct { + UserID string `json:"userID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` +} + +type CleanUpMsgResp struct { + CommResp +} diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 895d3c2b6..6ab990cb7 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -277,7 +277,7 @@ func GroupIsBanPrivateChat(status int32) bool { return true } -const BigVersion = "v3" +const BigVersion = "v2" const LogFileName = "OpenIM.log" diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 81844b9f9..c46019ab4 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -10,6 +10,7 @@ import ( "context" "errors" "fmt" + "github.com/go-redis/redis/v8" "github.com/gogo/protobuf/sortkeys" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -1136,6 +1137,17 @@ func getSeqUid(uid string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return indexGen(uid, seqSuffix) } + +func getSeqUserIDList(userID string, maxSeq uint32) []string { + seqMaxSuffix := maxSeq / singleGocMsgNum + var seqUserIDList []string + for i := 0; i <= int(seqMaxSuffix); i++ { + seqUserID := indexGen(userID, uint32(i)) + seqUserIDList = append(seqUserIDList, seqUserID) + } + return seqUserIDList +} + func getSeqSuperGroupID(groupID string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return superGroupIndexGen(groupID, seqSuffix) @@ -1180,3 +1192,23 @@ func indexGen(uid string, seqSuffix uint32) string { func superGroupIndexGen(groupID string, seqSuffix uint32) string { return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) } + +func (d *DataBases) CleanUpUserMsgFromMongo(userID string) error { + ctx := context.Background() + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + maxSeq, err := d.GetUserMaxSeq(userID) + if err == redis.Nil { + return nil + } + if err != nil { + return utils.Wrap(err, "") + } + + seqUsers := getSeqUserIDList(userID, uint32(maxSeq)) + //bson.M{"id":bson.M{"$in":list}} + _, err = c.DeleteMany(ctx, bson.M{"uid": bson.M{"$in": seqUsers}}) + if err == mongo.ErrNoDocuments { + return nil + } + return utils.Wrap(err, "") +} diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index deb932a0f..4bc71e47e 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -83,3 +83,16 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } return nil } + +func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string) error { + ctx := context.Background() + key := messageCache + userID + "_" + "*" + vals, err := d.rdb.Keys(ctx, key).Result() + if err != nil { + return utils.Wrap(err, "") + } + if err = d.rdb.Del(ctx, vals...).Err(); err != nil { + return utils.Wrap(err, "") + } + return nil +} diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index 092fff9ca..b3d53675f 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -37,7 +37,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{0} + return fileDescriptor_chat_9735d58eeaab60cd, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{1} + return fileDescriptor_chat_9735d58eeaab60cd, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{2} + return fileDescriptor_chat_9735d58eeaab60cd, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -210,7 +210,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{3} + return fileDescriptor_chat_9735d58eeaab60cd, []int{3} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -258,7 +258,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{4} + return fileDescriptor_chat_9735d58eeaab60cd, []int{4} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -319,7 +319,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{5} + return fileDescriptor_chat_9735d58eeaab60cd, []int{5} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{6} + return fileDescriptor_chat_9735d58eeaab60cd, []int{6} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -430,6 +430,106 @@ func (m *SendMsgResp) GetSendTime() int64 { return 0 } +type ClearMsgReq struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=opUserID" json:"opUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClearMsgReq) Reset() { *m = ClearMsgReq{} } +func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) } +func (*ClearMsgReq) ProtoMessage() {} +func (*ClearMsgReq) Descriptor() ([]byte, []int) { + return fileDescriptor_chat_9735d58eeaab60cd, []int{7} +} +func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b) +} +func (m *ClearMsgReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClearMsgReq.Marshal(b, m, deterministic) +} +func (dst *ClearMsgReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClearMsgReq.Merge(dst, src) +} +func (m *ClearMsgReq) XXX_Size() int { + return xxx_messageInfo_ClearMsgReq.Size(m) +} +func (m *ClearMsgReq) XXX_DiscardUnknown() { + xxx_messageInfo_ClearMsgReq.DiscardUnknown(m) +} + +var xxx_messageInfo_ClearMsgReq proto.InternalMessageInfo + +func (m *ClearMsgReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *ClearMsgReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *ClearMsgReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type ClearMsgResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClearMsgResp) Reset() { *m = ClearMsgResp{} } +func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) } +func (*ClearMsgResp) ProtoMessage() {} +func (*ClearMsgResp) Descriptor() ([]byte, []int) { + return fileDescriptor_chat_9735d58eeaab60cd, []int{8} +} +func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b) +} +func (m *ClearMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClearMsgResp.Marshal(b, m, deterministic) +} +func (dst *ClearMsgResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClearMsgResp.Merge(dst, src) +} +func (m *ClearMsgResp) XXX_Size() int { + return xxx_messageInfo_ClearMsgResp.Size(m) +} +func (m *ClearMsgResp) XXX_DiscardUnknown() { + xxx_messageInfo_ClearMsgResp.DiscardUnknown(m) +} + +var xxx_messageInfo_ClearMsgResp proto.InternalMessageInfo + +func (m *ClearMsgResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *ClearMsgResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + func init() { proto.RegisterType((*MsgDataToMQ)(nil), "pbChat.MsgDataToMQ") proto.RegisterType((*MsgDataToDB)(nil), "pbChat.MsgDataToDB") @@ -438,6 +538,8 @@ func init() { proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "pbChat.GetMaxAndMinSeqResp") proto.RegisterType((*SendMsgReq)(nil), "pbChat.SendMsgReq") proto.RegisterType((*SendMsgResp)(nil), "pbChat.SendMsgResp") + proto.RegisterType((*ClearMsgReq)(nil), "pbChat.ClearMsgReq") + proto.RegisterType((*ClearMsgResp)(nil), "pbChat.ClearMsgResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -455,6 +557,7 @@ type ChatClient interface { PullMessageBySeqList(ctx context.Context, in *sdk_ws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, opts ...grpc.CallOption) (*sdk_ws.DelMsgListResp, error) + ClearMsg(ctx context.Context, in *ClearMsgReq, opts ...grpc.CallOption) (*ClearMsgResp, error) } type chatClient struct { @@ -501,6 +604,15 @@ func (c *chatClient) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, o return out, nil } +func (c *chatClient) ClearMsg(ctx context.Context, in *ClearMsgReq, opts ...grpc.CallOption) (*ClearMsgResp, error) { + out := new(ClearMsgResp) + err := grpc.Invoke(ctx, "/pbChat.Chat/ClearMsg", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Chat service type ChatServer interface { @@ -508,6 +620,7 @@ type ChatServer interface { PullMessageBySeqList(context.Context, *sdk_ws.PullMessageBySeqListReq) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error) DelMsgList(context.Context, *sdk_ws.DelMsgListReq) (*sdk_ws.DelMsgListResp, error) + ClearMsg(context.Context, *ClearMsgReq) (*ClearMsgResp, error) } func RegisterChatServer(s *grpc.Server, srv ChatServer) { @@ -586,6 +699,24 @@ func _Chat_DelMsgList_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _Chat_ClearMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClearMsgReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).ClearMsg(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pbChat.Chat/ClearMsg", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).ClearMsg(ctx, req.(*ClearMsgReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Chat_serviceDesc = grpc.ServiceDesc{ ServiceName: "pbChat.Chat", HandlerType: (*ChatServer)(nil), @@ -606,45 +737,53 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ MethodName: "DelMsgList", Handler: _Chat_DelMsgList_Handler, }, + { + MethodName: "ClearMsg", + Handler: _Chat_ClearMsg_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_732204f30d7bcb33) } +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_9735d58eeaab60cd) } -var fileDescriptor_chat_732204f30d7bcb33 = []byte{ - // 508 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xdd, 0x6e, 0xda, 0x30, - 0x14, 0x56, 0x68, 0x0b, 0xe3, 0xb0, 0x0a, 0xc9, 0xad, 0xa6, 0x88, 0xab, 0x34, 0xd2, 0x26, 0xb4, - 0x49, 0x89, 0xc4, 0x76, 0xb7, 0xab, 0xd1, 0x54, 0x13, 0xd2, 0xbc, 0xb6, 0x81, 0xdd, 0xec, 0x86, - 0xb9, 0xcd, 0x51, 0x88, 0x80, 0xc4, 0xf8, 0x84, 0xd1, 0x6d, 0xcf, 0xb0, 0x67, 0xd8, 0xab, 0xed, - 0x51, 0xa6, 0xd8, 0x69, 0x09, 0x05, 0xa9, 0x5c, 0xed, 0x06, 0xe9, 0x7c, 0xfe, 0xfc, 0xfd, 0x18, - 0xc7, 0xd0, 0xbe, 0x9d, 0x88, 0xdc, 0x2f, 0x7e, 0x3c, 0xa9, 0xb2, 0x3c, 0x63, 0x75, 0x79, 0x73, - 0x3e, 0x11, 0x79, 0xe7, 0xec, 0x52, 0x62, 0x3a, 0x1e, 0x70, 0x5f, 0x4e, 0x63, 0x5f, 0x2f, 0xf9, - 0x14, 0x4d, 0xc7, 0x2b, 0xf2, 0x57, 0x64, 0xa8, 0xee, 0x2f, 0x68, 0x71, 0x8a, 0x03, 0x91, 0x8b, - 0x51, 0xc6, 0xaf, 0xd9, 0x29, 0x1c, 0xe5, 0xd9, 0x14, 0x53, 0xdb, 0x72, 0xac, 0x6e, 0x33, 0x34, - 0x03, 0x73, 0xa0, 0x95, 0x49, 0x54, 0x22, 0x4f, 0xb2, 0x74, 0x10, 0xd8, 0x35, 0xbd, 0x56, 0x85, - 0xd8, 0x3b, 0x68, 0xcc, 0x8d, 0x8c, 0x7d, 0xe0, 0x58, 0xdd, 0x56, 0xaf, 0xe3, 0x11, 0xaa, 0xef, - 0xa8, 0xc6, 0x42, 0x26, 0x63, 0x29, 0x94, 0x98, 0x93, 0x57, 0x1a, 0x85, 0xf7, 0x54, 0x17, 0x2b, - 0xe6, 0x41, 0xbf, 0x2a, 0x62, 0xed, 0x2d, 0xf2, 0x74, 0x38, 0xf7, 0xb7, 0x05, 0xed, 0xab, 0x25, - 0x4d, 0xaa, 0x45, 0x1d, 0x68, 0x5d, 0x56, 0x76, 0x99, 0xba, 0x55, 0xa8, 0x9a, 0xa6, 0xb6, 0x7f, - 0x1a, 0x17, 0x9e, 0xcb, 0x25, 0x4d, 0x46, 0xd9, 0x17, 0x42, 0x35, 0x08, 0xf4, 0x69, 0x34, 0xc3, - 0x0d, 0xcc, 0xfd, 0x0c, 0xec, 0x23, 0xe6, 0x5c, 0xdc, 0x7d, 0x48, 0x23, 0x9e, 0xa4, 0x43, 0x5c, - 0x84, 0xb8, 0x60, 0x2f, 0xa0, 0x5e, 0xee, 0x31, 0x61, 0xca, 0xe9, 0x71, 0xd2, 0xda, 0x56, 0x52, - 0x77, 0x05, 0x27, 0x5b, 0x7a, 0x24, 0x99, 0x0d, 0x8d, 0x0b, 0xa5, 0xce, 0xb3, 0x08, 0xb5, 0xe2, - 0x51, 0x78, 0x3f, 0x16, 0x56, 0x17, 0x4a, 0x71, 0x8a, 0x4b, 0xb5, 0x72, 0x2a, 0x70, 0x2e, 0xee, - 0x86, 0xb8, 0xd0, 0xb1, 0x8f, 0xc3, 0x72, 0xd2, 0xb8, 0xd6, 0xb5, 0x0f, 0x4b, 0x5c, 0x4f, 0xee, - 0x4f, 0x80, 0x21, 0xa6, 0x11, 0xa7, 0xb8, 0x28, 0xf0, 0x7f, 0xef, 0xce, 0x1f, 0x0b, 0x5a, 0x0f, - 0xe6, 0xa6, 0x2d, 0x6e, 0xb6, 0xc5, 0x75, 0x5b, 0xdc, 0x68, 0x6b, 0xa6, 0x22, 0x99, 0xf1, 0xe1, - 0x14, 0x0f, 0x02, 0x5d, 0xad, 0x19, 0x56, 0xa1, 0x82, 0x71, 0x3b, 0x4b, 0x30, 0xcd, 0x0d, 0xe3, - 0xc8, 0x30, 0x2a, 0x10, 0xeb, 0xc0, 0x33, 0xc2, 0x34, 0x1a, 0x25, 0x73, 0xb4, 0xeb, 0x8e, 0xd5, - 0x3d, 0x08, 0x1f, 0xe6, 0xde, 0xdf, 0x1a, 0x1c, 0x16, 0x9f, 0x21, 0xfb, 0x06, 0xed, 0x47, 0xff, - 0x0f, 0x7b, 0xb9, 0xa3, 0xe2, 0xf6, 0x9d, 0xe8, 0xbc, 0xda, 0x87, 0x46, 0x92, 0x65, 0x70, 0x7a, - 0xb5, 0x9c, 0xcd, 0x38, 0x12, 0x89, 0x18, 0xfb, 0x3f, 0x86, 0xb8, 0xf8, 0x94, 0x50, 0xce, 0x5e, - 0xef, 0xd8, 0xbf, 0x8b, 0x58, 0x78, 0xbd, 0xd9, 0x9b, 0x4b, 0x92, 0xf5, 0xa0, 0x51, 0x1e, 0x3e, - 0x63, 0x9e, 0x79, 0x6d, 0xbc, 0xf5, 0x55, 0xe8, 0x9c, 0x6c, 0x61, 0x24, 0xd9, 0x35, 0x40, 0x80, - 0x33, 0x4e, 0xb1, 0x8e, 0xe6, 0xec, 0xb0, 0x5b, 0x2f, 0x17, 0x22, 0x67, 0x4f, 0x30, 0x48, 0xf6, - 0xdb, 0x5f, 0x8f, 0x3d, 0xfd, 0xf0, 0xbd, 0x37, 0x7e, 0x37, 0x75, 0xfd, 0xaa, 0xbd, 0xfd, 0x17, - 0x00, 0x00, 0xff, 0xff, 0x9f, 0xc6, 0xef, 0x8e, 0x13, 0x05, 0x00, 0x00, +var fileDescriptor_chat_9735d58eeaab60cd = []byte{ + // 563 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xc1, 0x6e, 0xda, 0x40, + 0x10, 0x95, 0x43, 0x42, 0x92, 0x71, 0x22, 0xa4, 0x4d, 0x14, 0x59, 0x3e, 0x39, 0x96, 0x5a, 0xa1, + 0x56, 0x32, 0x12, 0x6d, 0x4f, 0xbd, 0xb4, 0xe0, 0xa8, 0x42, 0xaa, 0x9b, 0xc4, 0xd0, 0x4b, 0x2f, + 0x74, 0x03, 0x23, 0x63, 0x01, 0xf6, 0xe2, 0x31, 0x25, 0x6d, 0xbf, 0xa1, 0xe7, 0x1e, 0xfb, 0xab, + 0x95, 0x77, 0x0d, 0x18, 0x8c, 0x14, 0xd4, 0x43, 0x2f, 0x96, 0xde, 0xdb, 0xf1, 0x7b, 0x6f, 0x76, + 0x47, 0x03, 0xb5, 0xc1, 0x88, 0xa7, 0x8d, 0xec, 0xe3, 0x88, 0x24, 0x4e, 0x63, 0x56, 0x15, 0x0f, + 0xed, 0x11, 0x4f, 0xcd, 0xeb, 0x5b, 0x81, 0x51, 0xbf, 0xe3, 0x35, 0xc4, 0x38, 0x68, 0xc8, 0xa3, + 0x06, 0x0d, 0xc7, 0xfd, 0x05, 0x35, 0x16, 0xa4, 0x4a, 0xed, 0x9f, 0xa0, 0x7b, 0x14, 0xb8, 0x3c, + 0xe5, 0xbd, 0xd8, 0xbb, 0x67, 0x97, 0x70, 0x94, 0xc6, 0x63, 0x8c, 0x0c, 0xcd, 0xd2, 0xea, 0xa7, + 0xbe, 0x02, 0xcc, 0x02, 0x3d, 0x16, 0x98, 0xf0, 0x34, 0x8c, 0xa3, 0x8e, 0x6b, 0x1c, 0xc8, 0xb3, + 0x22, 0xc5, 0x5e, 0xc3, 0xf1, 0x54, 0xc9, 0x18, 0x15, 0x4b, 0xab, 0xeb, 0x4d, 0xd3, 0x21, 0x4c, + 0xbe, 0x61, 0xd2, 0xe7, 0x22, 0xec, 0x0b, 0x9e, 0xf0, 0x29, 0x39, 0xb9, 0x91, 0xbf, 0x2c, 0xb5, + 0xb1, 0x60, 0xee, 0xb6, 0x8a, 0x22, 0xda, 0xde, 0x22, 0x4f, 0x87, 0xb3, 0x7f, 0x69, 0x50, 0xbb, + 0x9b, 0xd3, 0xa8, 0xd8, 0xa8, 0x05, 0xfa, 0x6d, 0xe1, 0x2f, 0xd5, 0x6e, 0x91, 0x2a, 0xa6, 0x39, + 0xd8, 0x3f, 0x8d, 0x0d, 0x67, 0x62, 0x4e, 0xa3, 0x5e, 0xfc, 0x99, 0x30, 0xe9, 0xb8, 0xf2, 0x36, + 0x4e, 0xfd, 0x0d, 0xce, 0xfe, 0x04, 0xec, 0x03, 0xa6, 0x1e, 0x7f, 0x7c, 0x1f, 0x0d, 0xbd, 0x30, + 0xea, 0xe2, 0xcc, 0xc7, 0x19, 0xbb, 0x82, 0x6a, 0xfe, 0x8f, 0x0a, 0x93, 0xa3, 0xed, 0xa4, 0x07, + 0xa5, 0xa4, 0xf6, 0x02, 0x2e, 0x4a, 0x7a, 0x24, 0x98, 0x01, 0xc7, 0x37, 0x49, 0xd2, 0x8e, 0x87, + 0x28, 0x15, 0x8f, 0xfc, 0x25, 0xcc, 0xac, 0x6e, 0x92, 0xc4, 0xa3, 0x20, 0x57, 0xcb, 0x51, 0xc6, + 0x7b, 0xfc, 0xb1, 0x8b, 0x33, 0x19, 0xfb, 0xdc, 0xcf, 0x91, 0xe4, 0xa5, 0xae, 0x71, 0x98, 0xf3, + 0x12, 0xd9, 0x3f, 0x00, 0xba, 0x18, 0x0d, 0x3d, 0x0a, 0xb2, 0x06, 0xfe, 0xef, 0xec, 0xfc, 0xd1, + 0x40, 0x5f, 0x99, 0xab, 0x6e, 0x71, 0xb3, 0x5b, 0x5c, 0x77, 0x8b, 0x1b, 0xdd, 0x2a, 0x94, 0x25, + 0x53, 0x3e, 0x1e, 0x05, 0x1d, 0x57, 0xb6, 0x76, 0xea, 0x17, 0xa9, 0xac, 0x62, 0x30, 0x09, 0x31, + 0x4a, 0x55, 0xc5, 0x91, 0xaa, 0x28, 0x50, 0xcc, 0x84, 0x13, 0xc2, 0x68, 0xd8, 0x0b, 0xa7, 0x68, + 0x54, 0x2d, 0xad, 0x5e, 0xf1, 0x57, 0xd8, 0x1e, 0x80, 0xde, 0x9e, 0x20, 0x4f, 0xf2, 0xeb, 0xb9, + 0x82, 0xea, 0x7c, 0xe3, 0x7d, 0x15, 0xca, 0x24, 0x62, 0x91, 0xbf, 0xbc, 0x0a, 0xb8, 0xc2, 0xdb, + 0x97, 0x57, 0x29, 0xcf, 0xf6, 0x3b, 0x38, 0x5b, 0x9b, 0xfc, 0xcb, 0x35, 0x34, 0x7f, 0x57, 0xe0, + 0x30, 0xdb, 0x16, 0xec, 0x2b, 0xd4, 0xb6, 0xc6, 0x88, 0x3d, 0xdb, 0xf1, 0x12, 0xe5, 0xd1, 0x35, + 0x9f, 0xef, 0x53, 0x46, 0x82, 0xc5, 0x70, 0x79, 0x37, 0x9f, 0x4c, 0x3c, 0x24, 0xe2, 0x01, 0xb6, + 0xbe, 0x77, 0x71, 0xf6, 0x31, 0xa4, 0x94, 0xbd, 0xd8, 0xf1, 0xff, 0xae, 0xc2, 0xcc, 0xeb, 0xe5, + 0xde, 0xb5, 0x24, 0x58, 0x13, 0x8e, 0xf3, 0x19, 0x61, 0xcc, 0x51, 0x4b, 0xd1, 0x59, 0x4f, 0xac, + 0x79, 0x51, 0xe2, 0x48, 0xb0, 0x7b, 0x00, 0x17, 0x27, 0x1e, 0x05, 0x32, 0x9a, 0xb5, 0xc3, 0x6e, + 0x7d, 0x9c, 0x89, 0x5c, 0x3f, 0x51, 0x41, 0x82, 0xbd, 0x81, 0x93, 0xe5, 0x23, 0xb1, 0x95, 0x67, + 0x61, 0x36, 0xcc, 0xcb, 0x32, 0x49, 0xa2, 0x55, 0xfb, 0x72, 0xee, 0xc8, 0xb5, 0xfe, 0x56, 0x9d, + 0x3e, 0x54, 0xe5, 0xce, 0x7e, 0xf5, 0x37, 0x00, 0x00, 0xff, 0xff, 0xee, 0x03, 0xc5, 0x33, 0xf1, + 0x05, 0x00, 0x00, } diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index d30010db2..5fd88be5c 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -69,14 +69,25 @@ message SendMsgResp { string serverMsgID = 4; string clientMsgID = 5; int64 sendTime = 6; - } +message ClearMsgReq{ + string userID = 1; + string opUserID = 2; + string operationID = 3; +} + + +message ClearMsgResp{ + int32 errCode = 1; + string errMsg = 2; +} service Chat { rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc SendMsg(SendMsgReq) returns(SendMsgResp); rpc DelMsgList(server_api_params.DelMsgListReq) returns(server_api_params.DelMsgListResp); + rpc ClearMsg(ClearMsgReq) returns(ClearMsgResp); } From ab914f46210004d3dcd1c633fb08b5de5dd7f0f1 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 11:18:28 +0800 Subject: [PATCH 333/752] tools --- test/mongo/mongo_utils.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 591143d90..f53a6384c 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -48,7 +48,12 @@ func GetUserAllChat(uid string) { fmt.Println(err.Error(), msg) continue } - fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status, "sendID: ", msgData.SendID, "recvID: ", msgData.RecvID, "sendTime: ", msgData.SendTime) + fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status, + "sendID: ", msgData.SendID, "recvID: ", msgData.RecvID, + "sendTime: ", msgData.SendTime, + "clientMsgID: ", msgData.ClientMsgID, + "serverMsgID: ", msgData.ServerMsgID, + "content: ", string(msgData.Content)) } } } From 1ff7ebb04a88af6af755ffbf7ec9782704654aa2 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:09:20 +0800 Subject: [PATCH 334/752] tools --- cmd/open_im_api/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index d2a8f22ef..8fbc78576 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -119,7 +119,7 @@ func main() { chatGroup.POST("/send_msg", apiChat.SendMsg) chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) chatGroup.POST("/del_msg", apiChat.DelMsg) - chatGroup.POST("/clean_up_msg", apiChat.ClearMsg) + chatGroup.POST("/clear_msg", apiChat.ClearMsg) } //Manager managementGroup := r.Group("/manager") From 8315c61240f7c919e44241c95999e1cd8b4d62b9 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:25:22 +0800 Subject: [PATCH 335/752] Clear msg --- pkg/common/db/newRedisModel.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 4bc71e47e..02c7dd5b5 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -9,6 +9,7 @@ import ( "context" "errors" "fmt" + "github.com/garyburd/redigo/redis" "github.com/mitchellh/mapstructure" "strconv" "time" @@ -88,6 +89,9 @@ func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string) error { ctx := context.Background() key := messageCache + userID + "_" + "*" vals, err := d.rdb.Keys(ctx, key).Result() + if err == redis.ErrNil { + return nil + } if err != nil { return utils.Wrap(err, "") } From b2df6e6d4105ff226f486a2f6e1394181dfc53d7 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:53:14 +0800 Subject: [PATCH 336/752] Clear msg --- internal/rpc/msg/chat.go | 2 +- pkg/common/db/mongoModel.go | 4 ++-- pkg/common/db/newRedisModel.go | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/internal/rpc/msg/chat.go b/internal/rpc/msg/chat.go index 40c91c2e9..559a88681 100644 --- a/internal/rpc/msg/chat.go +++ b/internal/rpc/msg/chat.go @@ -18,7 +18,7 @@ func (rpc *rpcChat) ClearMsg(_ context.Context, req *pbChat.ClearMsgReq) (*pbCha return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } log.Debug(req.OperationID, "CleanUpOneUserAllMsgFromRedis args", req.UserID) - err := db.DB.CleanUpOneUserAllMsgFromRedis(req.UserID) + err := db.DB.CleanUpOneUserAllMsgFromRedis(req.UserID, req.OperationID) if err != nil { errMsg := "CleanUpOneUserAllMsgFromRedis failed " + err.Error() + req.OperationID + req.UserID log.Error(req.OperationID, errMsg) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index c46019ab4..e57b291d4 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1193,7 +1193,7 @@ func superGroupIndexGen(groupID string, seqSuffix uint32) string { return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) } -func (d *DataBases) CleanUpUserMsgFromMongo(userID string) error { +func (d *DataBases) CleanUpUserMsgFromMongo(userID string, operationID string) error { ctx := context.Background() c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) maxSeq, err := d.GetUserMaxSeq(userID) @@ -1205,7 +1205,7 @@ func (d *DataBases) CleanUpUserMsgFromMongo(userID string) error { } seqUsers := getSeqUserIDList(userID, uint32(maxSeq)) - //bson.M{"id":bson.M{"$in":list}} + log.Error(operationID, "getSeqUserIDList", seqUsers) _, err = c.DeleteMany(ctx, bson.M{"uid": bson.M{"$in": seqUsers}}) if err == mongo.ErrNoDocuments { return nil diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 02c7dd5b5..763409228 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -85,10 +85,11 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri return nil } -func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string) error { +func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID string) error { ctx := context.Background() key := messageCache + userID + "_" + "*" vals, err := d.rdb.Keys(ctx, key).Result() + log2.Debug(operationID, "vals: ", vals) if err == redis.ErrNil { return nil } From da1df91f49ed4951f60b01f2df64a98929b2286d Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:54:40 +0800 Subject: [PATCH 337/752] Clear msg --- internal/rpc/msg/chat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/chat.go b/internal/rpc/msg/chat.go index 559a88681..bb83dc055 100644 --- a/internal/rpc/msg/chat.go +++ b/internal/rpc/msg/chat.go @@ -25,7 +25,7 @@ func (rpc *rpcChat) ClearMsg(_ context.Context, req *pbChat.ClearMsgReq) (*pbCha return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } log.Debug(req.OperationID, "CleanUpUserMsgFromMongo args", req.UserID) - err = db.DB.CleanUpUserMsgFromMongo(req.UserID) + err = db.DB.CleanUpUserMsgFromMongo(req.UserID, req.OperationID) if err != nil { errMsg := "CleanUpUserMsgFromMongo failed " + err.Error() + req.OperationID + req.UserID log.Error(req.OperationID, errMsg) From 48410c428a4600fede140790f13c9734048b2c4d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 14:28:00 +0800 Subject: [PATCH 338/752] redis update --- pkg/common/db/redisModel_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 4efc75957..2d6fb5544 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,6 +1,7 @@ package db import ( + "Open_IM/pkg/common/constant" pbChat "Open_IM/pkg/proto/chat" server_api_params "Open_IM/pkg/proto/sdk_ws" "context" @@ -48,10 +49,25 @@ func Test_HGetAll(t *testing.T) { func Test_NewSetMessageToCache(t *testing.T) { var msg pbChat.MsgDataToMQ + m := make(map[string]bool) + var offlinePush server_api_params.OfflinePushInfo + offlinePush.Title = "3" + offlinePush.Ex = "34" + offlinePush.IOSPushSound = "+1" + offlinePush.IOSBadgeCount = true + m[constant.IsPersistent] = true + m[constant.IsHistory] = true var data server_api_params.MsgData uid := "test_uid" data.Seq = 11 data.ClientMsgID = "23jwhjsdf" + data.SendID = "111" + data.RecvID = "222" + data.Content = []byte{1, 2, 3, 4, 5, 6, 7} + data.Seq = 1212 + data.Options = m + data.OfflinePushInfo = &offlinePush + data.AtUserIDList = []string{"1212", "23232"} msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") From a18dcfce9e1d80d094b2047df6cd59ef81340890 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:44:55 +0800 Subject: [PATCH 339/752] ws and push update --- internal/msg_gateway/gate/callback.go | 10 +- internal/msg_gateway/gate/rpc_server.go | 114 +++++++++++++++--- internal/msg_gateway/gate/ws_server.go | 47 ++++---- internal/rpc/auth/auth.go | 2 +- .../constant/platform_number_id_to_name.go | 8 +- pkg/common/db/redisModel.go | 6 +- pkg/common/token_verify/jwt_token.go | 4 +- pkg/proto/relay/relay.proto | 21 +++- pkg/utils/strings.go | 9 +- pkg/utils/utils.go | 2 +- 10 files changed, 163 insertions(+), 60 deletions(-) diff --git a/internal/msg_gateway/gate/callback.go b/internal/msg_gateway/gate/callback.go index 58d3a98b2..f005f26a2 100644 --- a/internal/msg_gateway/gate/callback.go +++ b/internal/msg_gateway/gate/callback.go @@ -8,7 +8,7 @@ import ( http2 "net/http" ) -func callbackUserOnline(operationID, userID string, platformID int32, token string) cbApi.CommonCallbackResp { +func callbackUserOnline(operationID, userID string, platformID int, token string) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackUserOnline.Enable { return callbackResp @@ -19,7 +19,7 @@ func callbackUserOnline(operationID, userID string, platformID int32, token stri CallbackCommand: constant.CallbackUserOnlineCommand, OperationID: operationID, UserID: userID, - PlatformID: platformID, + PlatformID: int32(platformID), Platform: constant.PlatformIDToName(platformID), }} callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: callbackResp} @@ -30,7 +30,7 @@ func callbackUserOnline(operationID, userID string, platformID int32, token stri return callbackResp } -func callbackUserOffline(operationID, userID string, platform string) cbApi.CommonCallbackResp { +func callbackUserOffline(operationID, userID string, platformID int) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackUserOffline.Enable { return callbackResp @@ -39,8 +39,8 @@ func callbackUserOffline(operationID, userID string, platform string) cbApi.Comm CallbackCommand: constant.CallbackUserOfflineCommand, OperationID: operationID, UserID: userID, - PlatformID: constant.PlatformNameToID(platform), - Platform: platform, + PlatformID: int32(platformID), + Platform: constant.PlatformIDToName(platformID), }} callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil { diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 555015bb7..5249bdce8 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -25,6 +25,8 @@ type RPCServer struct { rpcRegisterName string etcdSchema string etcdAddr []string + platformList []int + pushTerminal []int } func (r *RPCServer) onInit(rpcPort int) { @@ -32,6 +34,8 @@ func (r *RPCServer) onInit(rpcPort int) { r.rpcRegisterName = config.Config.RpcRegisterName.OpenImOnlineMessageRelayName r.etcdSchema = config.Config.Etcd.EtcdSchema r.etcdAddr = config.Config.Etcd.EtcdAddr + r.platformList = genPlatformArray() + r.pushTerminal = []int{constant.IOSPlatformID, constant.AndroidPlatformID} } func (r *RPCServer) run() { listenIP := "" @@ -69,7 +73,7 @@ func (r *RPCServer) run() { } func (r *RPCServer) OnlinePushMsg(_ context.Context, in *pbRelay.OnlinePushMsgReq) (*pbRelay.OnlinePushMsgResp, error) { log.NewInfo(in.OperationID, "PushMsgToUser is arriving", in.String()) - var resp []*pbRelay.SingleMsgToUser + var resp []*pbRelay.SingleMsgToUserPlatform msgBytes, _ := proto.Marshal(in.MsgData) mReply := Resp{ ReqIdentifier: constant.WSPushMsg, @@ -84,22 +88,21 @@ func (r *RPCServer) OnlinePushMsg(_ context.Context, in *pbRelay.OnlinePushMsgRe } var tag bool recvID := in.PushToUserID - platformList := genPlatformArray() - for _, v := range platformList { + for _, v := range r.platformList { if conn := ws.getUserConn(recvID, v); conn != nil { tag = true resultCode := sendMsgToUser(conn, replyBytes.Bytes(), in, v, recvID) - temp := &pbRelay.SingleMsgToUser{ + temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: resultCode, RecvID: recvID, - RecvPlatFormID: constant.PlatformNameToID(v), + RecvPlatFormID: int32(v), } resp = append(resp, temp) } else { - temp := &pbRelay.SingleMsgToUser{ + temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: -1, RecvID: recvID, - RecvPlatFormID: constant.PlatformNameToID(v), + RecvPlatFormID: int32(v), } resp = append(resp, temp) } @@ -119,19 +122,19 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser } var resp pbRelay.GetUsersOnlineStatusResp for _, userID := range req.UserIDList { - platformList := genPlatformArray() temp := new(pbRelay.GetUsersOnlineStatusResp_SuccessResult) temp.UserID = userID - for _, platform := range platformList { - if conn := ws.getUserConn(userID, platform); conn != nil { + userConnMap := ws.getUserAllCons(userID) + for platform, userConn := range userConnMap { + if userConn != nil { ps := new(pbRelay.GetUsersOnlineStatusResp_SuccessDetail) - ps.Platform = platform + ps.Platform = constant.PlatformIDToName(platform) ps.Status = constant.OnlineStatus temp.Status = constant.OnlineStatus temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, ps) - } } + if temp.Status == constant.OnlineStatus { resp.SuccessResult = append(resp.SuccessResult, temp) } @@ -139,11 +142,76 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser log.NewInfo(req.OperationID, "GetUsersOnlineStatus rpc return ", resp.String()) return &resp, nil } -func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm, RecvID string) (ResultCode int64) { +func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { + log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) + var singleUserResult []*pbRelay.SingelMsgToUserResultList + msgBytes, _ := proto.Marshal(req.MsgData) + mReply := Resp{ + ReqIdentifier: constant.WSPushMsg, + OperationID: req.OperationID, + Data: msgBytes, + } + var replyBytes bytes.Buffer + enc := gob.NewEncoder(&replyBytes) + err := enc.Encode(mReply) + if err != nil { + log.NewError(req.OperationID, "data encode err", err.Error()) + } + for _, v := range req.PushToUserIDList { + var resp []*pbRelay.SingleMsgToUserPlatform + userConnMap := ws.getUserAllCons(v) + for platform, userConn := range userConnMap { + if userConn != nil { + resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) + if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { //仅仅记录推送成功的平台端 + temp := &pbRelay.SingleMsgToUserPlatform{ + ResultCode: resultCode, + RecvID: v, + RecvPlatFormID: int32(platform), + } + resp = append(resp, temp) + } + + } + } + //for _, x := range r.platformList { + // if conn := ws.getUserConn(v, x); conn != nil { + // resultCode := sendMsgBatchToUser(conn, replyBytes.Bytes(), req, x, v) + // temp := &pbRelay.SingleMsgToUserPlatform{ + // ResultCode: resultCode, + // RecvID: v, + // RecvPlatFormID: constant.PlatformNameToID(x), + // } + // resp = append(resp, temp) + // } else { + // if utils.IsContain(x,r.pushTerminal) { + // temp := &pbRelay.SingleMsgToUserPlatform{ + // ResultCode: -1, + // RecvID: v, + // RecvPlatFormID: constant.PlatformNameToID(x), + // } + // resp = append(resp, temp) + // } + // + // } + //} + tempT := &pbRelay.SingelMsgToUserResultList{ + UserID: v, + Resp: resp, + } + singleUserResult = append(singleUserResult, tempT) + + } + + return &pbRelay.OnlineBatchPushOneMsgResp{ + SinglePushResult: singleUserResult, + }, nil +} +func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) if err != nil { log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), - "error", err, "senderPlatform", constant.PlatformIDToName(in.MsgData.SenderPlatformID), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) + "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) ResultCode = -2 return ResultCode } else { @@ -153,9 +221,23 @@ func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, Re } } -func genPlatformArray() (array []string) { +func sendMsgBatchToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlineBatchPushOneMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { + err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) + if err != nil { + log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), + "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) + ResultCode = -2 + return ResultCode + } else { + log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recvPlatForm", RecvPlatForm, "recvID", RecvID) + ResultCode = 0 + return ResultCode + } + +} +func genPlatformArray() (array []int) { for i := 1; i <= constant.LinuxPlatformID; i++ { - array = append(array, constant.PlatformIDToName(int32(i))) + array = append(array, i) } return array } diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 360b82926..e43a81f5a 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -25,15 +25,15 @@ type WServer struct { wsAddr string wsMaxConnNum int wsUpGrader *websocket.Upgrader - wsConnToUser map[*UserConn]map[string]string - wsUserToConn map[string]map[string]*UserConn + wsConnToUser map[*UserConn]map[int]string + wsUserToConn map[string]map[int]*UserConn } func (ws *WServer) onInit(wsPort int) { ws.wsAddr = ":" + utils.IntToString(wsPort) ws.wsMaxConnNum = config.Config.LongConnSvr.WebsocketMaxConnNum - ws.wsConnToUser = make(map[*UserConn]map[string]string) - ws.wsUserToConn = make(map[string]map[string]*UserConn) + ws.wsConnToUser = make(map[*UserConn]map[int]string) + ws.wsUserToConn = make(map[string]map[int]*UserConn) ws.wsUpGrader = &websocket.Upgrader{ HandshakeTimeout: time.Duration(config.Config.LongConnSvr.WebsocketTimeOut) * time.Second, ReadBufferSize: config.Config.LongConnSvr.WebsocketMaxMsgLen, @@ -62,7 +62,7 @@ func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { //Initialize a lock for each user newConn := &UserConn{conn, new(sync.Mutex)} userCount++ - ws.addUserConn(query["sendID"][0], int32(utils.StringToInt64(query["platformID"][0])), newConn, query["token"][0]) + ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0]) go ws.readMsg(newConn) } } @@ -94,11 +94,11 @@ func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { return conn.WriteMessage(a, msg) } -func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newConn *UserConn, token string, operationID string) { +func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn *UserConn, token string, operationID string) { switch config.Config.MultiLoginPolicy { case constant.AllLoginButSameTermKick: if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] - if oldConn, ok := oldConnMap[constant.PlatformIDToName(platformID)]; ok { + if oldConn, ok := oldConnMap[platformID]; ok { log.NewDebug(operationID, uid, platformID, "kick old conn") ws.sendKickMsg(oldConn, newConn) m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) @@ -122,7 +122,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo return } err = oldConn.Close() - delete(oldConnMap, constant.PlatformIDToName(platformID)) + delete(oldConnMap, platformID) ws.wsUserToConn[uid] = oldConnMap if len(oldConnMap) == 0 { delete(ws.wsUserToConn, uid) @@ -133,7 +133,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo } } else { - log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[constant.PlatformIDToName(platformID)]) + log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[platformID]) } } else { @@ -162,7 +162,7 @@ func (ws *WServer) sendKickMsg(oldConn, newConn *UserConn) { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) } } -func (ws *WServer) addUserConn(uid string, platformID int32, conn *UserConn, token string) { +func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token string) { rwLock.Lock() defer rwLock.Unlock() operationID := utils.OperationIDGenerator() @@ -172,21 +172,21 @@ func (ws *WServer) addUserConn(uid string, platformID int32, conn *UserConn, tok } ws.MultiTerminalLoginChecker(uid, platformID, conn, token, operationID) if oldConnMap, ok := ws.wsUserToConn[uid]; ok { - oldConnMap[constant.PlatformIDToName(platformID)] = conn + oldConnMap[platformID] = conn ws.wsUserToConn[uid] = oldConnMap log.Debug(operationID, "user not first come in, add conn ", uid, platformID, conn, oldConnMap) } else { - i := make(map[string]*UserConn) - i[constant.PlatformIDToName(platformID)] = conn + i := make(map[int]*UserConn) + i[platformID] = conn ws.wsUserToConn[uid] = i log.Debug(operationID, "user first come in, new user, conn", uid, platformID, conn, ws.wsUserToConn[uid]) } if oldStringMap, ok := ws.wsConnToUser[conn]; ok { - oldStringMap[constant.PlatformIDToName(platformID)] = uid + oldStringMap[platformID] = uid ws.wsConnToUser[conn] = oldStringMap } else { - i := make(map[string]string) - i[constant.PlatformIDToName(platformID)] = uid + i := make(map[int]string) + i[platformID] = uid ws.wsConnToUser[conn] = i } count := 0 @@ -200,7 +200,8 @@ func (ws *WServer) delUserConn(conn *UserConn) { rwLock.Lock() defer rwLock.Unlock() operationID := utils.OperationIDGenerator() - var platform, uid string + var uid string + var platform int if oldStringMap, ok := ws.wsConnToUser[conn]; ok { for k, v := range oldStringMap { platform = k @@ -233,7 +234,7 @@ func (ws *WServer) delUserConn(conn *UserConn) { } } -func (ws *WServer) getUserConn(uid string, platform string) *UserConn { +func (ws *WServer) getUserConn(uid string, platform int) *UserConn { rwLock.RLock() defer rwLock.RUnlock() if connMap, ok := ws.wsUserToConn[uid]; ok { @@ -243,7 +244,7 @@ func (ws *WServer) getUserConn(uid string, platform string) *UserConn { } return nil } -func (ws *WServer) getSingleUserAllConn(uid string) map[string]*UserConn { +func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn { rwLock.RLock() defer rwLock.RUnlock() if connMap, ok := ws.wsUserToConn[uid]; ok { @@ -251,7 +252,8 @@ func (ws *WServer) getSingleUserAllConn(uid string) map[string]*UserConn { } return nil } -func (ws *WServer) getUserUid(conn *UserConn) (uid, platform string) { + +func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { rwLock.RLock() defer rwLock.RUnlock() @@ -262,7 +264,7 @@ func (ws *WServer) getUserUid(conn *UserConn) (uid, platform string) { } return uid, platform } - return "", "" + return "", 0 } func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request) bool { status := http.StatusUnauthorized @@ -291,6 +293,3 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request) bool { return false } } -func genMapKey(uid string, platformID int32) string { - return uid + " " + constant.PlatformIDToName(platformID) -} diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 09b903c68..0066fc8d4 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -47,7 +47,7 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil } - tokens, expTime, err := token_verify.CreateToken(req.FromUserID, req.Platform) + tokens, expTime, err := token_verify.CreateToken(req.FromUserID, int(req.Platform)) if err != nil { errMsg := req.OperationID + " token_verify.CreateToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) log.NewError(req.OperationID, errMsg) diff --git a/pkg/common/constant/platform_number_id_to_name.go b/pkg/common/constant/platform_number_id_to_name.go index c3a970b69..cac93dea8 100644 --- a/pkg/common/constant/platform_number_id_to_name.go +++ b/pkg/common/constant/platform_number_id_to_name.go @@ -27,7 +27,7 @@ const ( TerminalMobile = "Mobile" ) -var PlatformID2Name = map[int32]string{ +var PlatformID2Name = map[int]string{ IOSPlatformID: IOSPlatformStr, AndroidPlatformID: AndroidPlatformStr, WindowsPlatformID: WindowsPlatformStr, @@ -36,7 +36,7 @@ var PlatformID2Name = map[int32]string{ MiniWebPlatformID: MiniWebPlatformStr, LinuxPlatformID: LinuxPlatformStr, } -var PlatformName2ID = map[string]int32{ +var PlatformName2ID = map[string]int{ IOSPlatformStr: IOSPlatformID, AndroidPlatformStr: AndroidPlatformID, WindowsPlatformStr: WindowsPlatformID, @@ -55,10 +55,10 @@ var Platform2class = map[string]string{ LinuxPlatformStr: TerminalPC, } -func PlatformIDToName(num int32) string { +func PlatformIDToName(num int) string { return PlatformID2Name[num] } -func PlatformNameToID(name string) int32 { +func PlatformNameToID(name string) int { return PlatformName2ID[name] } func PlatformNameToClass(name string) string { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index da5a79492..8f978dc3e 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -111,7 +111,7 @@ func (d *DataBases) DelAppleDeviceToken(accountAddress string) (err error) { } //Store userid and platform class to redis -func (d *DataBases) AddTokenFlag(userID string, platformID int32, token string, flag int) error { +func (d *DataBases) AddTokenFlag(userID string, platformID int, token string, flag int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) log2.NewDebug("", "add token key is ", key) _, err1 := d.Exec("HSet", key, token, flag) @@ -123,12 +123,12 @@ func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]i log2.NewDebug("", "get token key is ", key) return redis.IntMap(d.Exec("HGETALL", key)) } -func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int32, m map[string]int) error { +func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) return err } -func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int32, fields []string) error { +func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) return err diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 363feeedc..08ff786aa 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -37,7 +37,7 @@ func BuildClaims(uid, platform string, ttl int64) Claims { }} } -func CreateToken(userID string, platformID int32) (string, int64, error) { +func CreateToken(userID string, platformID int) (string, int64, error) { claims := BuildClaims(userID, constant.PlatformIDToName(platformID), config.Config.TokenPolicy.AccessExpire) token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString([]byte(config.Config.TokenPolicy.AccessSecret)) @@ -233,7 +233,7 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo if claims.UID != uid { return false, utils.Wrap(&constant.ErrTokenUnknown, "uid is not same to token uid"), "uid is not same to token uid" } - if claims.Platform != constant.PlatformIDToName(utils.StringToInt32(platformID)) { + if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { return false, utils.Wrap(&constant.ErrTokenUnknown, "platform is not same to token platform"), "platform is not same to token platform" } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index d8c5f1b7e..b02edfa2c 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -9,8 +9,22 @@ message OnlinePushMsgReq { string pushToUserID = 3; } message OnlinePushMsgResp{ -repeated SingleMsgToUser resp = 1; -}//message SendMsgByWSReq{ +repeated SingleMsgToUserPlatform resp = 1; +} +message SingelMsgToUserResultList{ + string userID =1; + repeated SingleMsgToUserPlatform resp = 2; + +} +message OnlineBatchPushOneMsgReq{ + string OperationID = 1; + server_api_params.MsgData msgData = 2; + repeated string pushToUserIDList = 3; +} +message OnlineBatchPushOneMsgResp{ + repeated SingelMsgToUserResultList singlePushResult= 1; +} +//message SendMsgByWSReq{ // string SendID = 1; // string RecvID = 2; // string Content = 3; @@ -22,7 +36,7 @@ repeated SingleMsgToUser resp = 1; // int64 PlatformID = 9; //} -message SingleMsgToUser{ +message SingleMsgToUserPlatform{ int64 ResultCode = 1; string RecvID = 2; int32 RecvPlatFormID = 3; @@ -56,6 +70,7 @@ message GetUsersOnlineStatusResp{ service OnlineMessageRelayService { rpc OnlinePushMsg(OnlinePushMsgReq) returns(OnlinePushMsgResp); rpc GetUsersOnlineStatus(GetUsersOnlineStatusReq)returns(GetUsersOnlineStatusResp); + rpc OnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); // rpc SendMsgByWS(SendMsgByWSReq) returns(MsgToUserResp); } diff --git a/pkg/utils/strings.go b/pkg/utils/strings.go index a05ba927a..0e7c16106 100644 --- a/pkg/utils/strings.go +++ b/pkg/utils/strings.go @@ -51,7 +51,14 @@ func IsContainInt32(target int32, List []int32) bool { } return false } - +func IsContainInt(target int, List []int) bool { + for _, element := range List { + if target == element { + return true + } + } + return false +} func InterfaceArrayToStringArray(data []interface{}) (i []string) { for _, param := range data { i = append(i, param.(string)) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 8626f13cb..8d144c7e8 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -149,7 +149,7 @@ func String2Pb(s string, pb proto.Message) error { return proto.Unmarshal([]byte(s), pb) } -func Map2Pb(m map[string]interface{}) (pb proto.Message, err error) { +func Map2Pb(m map[string]string) (pb proto.Message, err error) { b, err := json.Marshal(m) if err != nil { return nil, err From febc672e6eab2a2cc4b0f7d3acededdb3eaca78d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:45:48 +0800 Subject: [PATCH 340/752] ws and push update --- internal/push/logic/push_to_client.go | 196 +++++++++++++------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index cd72059dc..91a8478d9 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -36,7 +36,7 @@ type AtContent struct { var grpcCons []*grpc.ClientConn func MsgToUser(pushMsg *pbPush.PushMsgReq) { - var wsResult []*pbRelay.SingleMsgToUser + var wsResult []*pbRelay.SingleMsgToUserPlatform isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) if len(grpcCons) == 0 { @@ -132,104 +132,104 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } -func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { - return - var wsResult []*pbRelay.SingleMsgToUser - isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) - log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) - if len(grpcCons) == 0 { - log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") - grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) - } - //Online push message - log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) - for _, v := range grpcCons { - msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlinePushMsg(context.Background(), &pbRelay.OnlinePushMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserID: pushMsg.PushToUserID}) - if err != nil { - log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) - continue - } - if reply != nil && reply.Resp != nil { - wsResult = append(wsResult, reply.Resp...) - } - } - log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) - successCount++ - if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { - for _, v := range wsResult { - if v.ResultCode == 0 { - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - break - } - continue - } - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - //Use offline push messaging - var UIDList []string - UIDList = append(UIDList, v.RecvID) - customContent := OpenIMContent{ - SessionType: int(pushMsg.MsgData.SessionType), - From: pushMsg.MsgData.SendID, - To: pushMsg.MsgData.RecvID, - Seq: pushMsg.MsgData.Seq, - } - bCustomContent, _ := json.Marshal(customContent) - jsonCustomContent := string(bCustomContent) - var content string - if pushMsg.MsgData.OfflinePushInfo != nil { - content = pushMsg.MsgData.OfflinePushInfo.Title - } else { - switch pushMsg.MsgData.ContentType { - case constant.Text: - content = constant.ContentType2PushContent[constant.Text] - case constant.Picture: - content = constant.ContentType2PushContent[constant.Picture] - case constant.Voice: - content = constant.ContentType2PushContent[constant.Voice] - case constant.Video: - content = constant.ContentType2PushContent[constant.Video] - case constant.File: - content = constant.ContentType2PushContent[constant.File] - case constant.AtText: - a := AtContent{} - _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) - if utils.IsContain(v.RecvID, a.AtUserList) { - content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] - } else { - content = constant.ContentType2PushContent[constant.GroupMsg] - } - default: - content = constant.ContentType2PushContent[constant.Common] - } - } - callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") - if callbackResp.ErrCode != 0 { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) - } - if callbackResp.ActionCode != constant.ActionAllow { - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") - break - } - - if offlinePusher == nil { - offlinePusher = jpush.JPushClient - } - pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) - if err != nil { - log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) - } else { - log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) - } - break - } - - } - - } -} +//func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { +// var wsResult []*pbRelay.SingelMsgToUserResultList +// isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) +// log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) +// if len(grpcCons) == 0 { +// log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") +// grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) +// } +// //Online push message +// log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) +// for _, v := range grpcCons { +// msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) +// reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) +// if err != nil { +// log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) +// continue +// } +// if reply != nil && reply.SinglePushResult != nil { +// wsResult = append(wsResult, reply.SinglePushResult...) +// } +// } +// log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) +// successCount++ +// if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { +// for _, v := range wsResult { +// if v.ResultCode == 0 { +// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { +// break +// } +// continue +// } +// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { +// //Use offline push messaging +// var UIDList []string +// UIDList = append(UIDList, v.RecvID) +// customContent := OpenIMContent{ +// SessionType: int(pushMsg.MsgData.SessionType), +// From: pushMsg.MsgData.SendID, +// To: pushMsg.MsgData.RecvID, +// Seq: pushMsg.MsgData.Seq, +// } +// bCustomContent, _ := json.Marshal(customContent) +// jsonCustomContent := string(bCustomContent) +// var content string +// if pushMsg.MsgData.OfflinePushInfo != nil { +// content = pushMsg.MsgData.OfflinePushInfo.Title +// +// } else { +// switch pushMsg.MsgData.ContentType { +// case constant.Text: +// content = constant.ContentType2PushContent[constant.Text] +// case constant.Picture: +// content = constant.ContentType2PushContent[constant.Picture] +// case constant.Voice: +// content = constant.ContentType2PushContent[constant.Voice] +// case constant.Video: +// content = constant.ContentType2PushContent[constant.Video] +// case constant.File: +// content = constant.ContentType2PushContent[constant.File] +// case constant.AtText: +// a := AtContent{} +// _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) +// if utils.IsContain(v.RecvID, a.AtUserList) { +// content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] +// } else { +// content = constant.ContentType2PushContent[constant.GroupMsg] +// } +// default: +// content = constant.ContentType2PushContent[constant.Common] +// } +// } +// callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) +// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") +// if callbackResp.ErrCode != 0 { +// log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) +// } +// if callbackResp.ActionCode != constant.ActionAllow { +// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") +// break +// } +// +// if offlinePusher == nil { +// offlinePusher = jpush.JPushClient +// } +// pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) +// if err != nil { +// log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) +// } else { +// log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) +// } +// break +// } +// +// } +// +// } +//} //func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { // m.MsgID = rpcChat.GetMsgID(m.SendID) From 14bfd78f63e1e07ea321399a98cd72153a7cf483 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:47:48 +0800 Subject: [PATCH 341/752] ws and push update --- pkg/proto/relay/relay.pb.go | 322 ++++++++++++++++++++++++++++-------- 1 file changed, 251 insertions(+), 71 deletions(-) diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 37334a8b2..122ae56f9 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{0} + return fileDescriptor_relay_72b82cfd7861903a, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -79,17 +79,17 @@ func (m *OnlinePushMsgReq) GetPushToUserID() string { } type OnlinePushMsgResp struct { - Resp []*SingleMsgToUser `protobuf:"bytes,1,rep,name=resp" json:"resp,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Resp []*SingleMsgToUserPlatform `protobuf:"bytes,1,rep,name=resp" json:"resp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{1} + return fileDescriptor_relay_72b82cfd7861903a, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -109,14 +109,152 @@ func (m *OnlinePushMsgResp) XXX_DiscardUnknown() { var xxx_messageInfo_OnlinePushMsgResp proto.InternalMessageInfo -func (m *OnlinePushMsgResp) GetResp() []*SingleMsgToUser { +func (m *OnlinePushMsgResp) GetResp() []*SingleMsgToUserPlatform { if m != nil { return m.Resp } return nil } -type SingleMsgToUser struct { +type SingelMsgToUserResultList struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + Resp []*SingleMsgToUserPlatform `protobuf:"bytes,2,rep,name=resp" json:"resp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResultList{} } +func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } +func (*SingelMsgToUserResultList) ProtoMessage() {} +func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{2} +} +func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) +} +func (m *SingelMsgToUserResultList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SingelMsgToUserResultList.Marshal(b, m, deterministic) +} +func (dst *SingelMsgToUserResultList) XXX_Merge(src proto.Message) { + xxx_messageInfo_SingelMsgToUserResultList.Merge(dst, src) +} +func (m *SingelMsgToUserResultList) XXX_Size() int { + return xxx_messageInfo_SingelMsgToUserResultList.Size(m) +} +func (m *SingelMsgToUserResultList) XXX_DiscardUnknown() { + xxx_messageInfo_SingelMsgToUserResultList.DiscardUnknown(m) +} + +var xxx_messageInfo_SingelMsgToUserResultList proto.InternalMessageInfo + +func (m *SingelMsgToUserResultList) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *SingelMsgToUserResultList) GetResp() []*SingleMsgToUserPlatform { + if m != nil { + return m.Resp + } + return nil +} + +type OnlineBatchPushOneMsgReq struct { + OperationID string `protobuf:"bytes,1,opt,name=OperationID" json:"OperationID,omitempty"` + MsgData *sdk_ws.MsgData `protobuf:"bytes,2,opt,name=msgData" json:"msgData,omitempty"` + PushToUserIDList []string `protobuf:"bytes,3,rep,name=pushToUserIDList" json:"pushToUserIDList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgReq{} } +func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } +func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} +func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{3} +} +func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) +} +func (m *OnlineBatchPushOneMsgReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OnlineBatchPushOneMsgReq.Marshal(b, m, deterministic) +} +func (dst *OnlineBatchPushOneMsgReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_OnlineBatchPushOneMsgReq.Merge(dst, src) +} +func (m *OnlineBatchPushOneMsgReq) XXX_Size() int { + return xxx_messageInfo_OnlineBatchPushOneMsgReq.Size(m) +} +func (m *OnlineBatchPushOneMsgReq) XXX_DiscardUnknown() { + xxx_messageInfo_OnlineBatchPushOneMsgReq.DiscardUnknown(m) +} + +var xxx_messageInfo_OnlineBatchPushOneMsgReq proto.InternalMessageInfo + +func (m *OnlineBatchPushOneMsgReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *OnlineBatchPushOneMsgReq) GetMsgData() *sdk_ws.MsgData { + if m != nil { + return m.MsgData + } + return nil +} + +func (m *OnlineBatchPushOneMsgReq) GetPushToUserIDList() []string { + if m != nil { + return m.PushToUserIDList + } + return nil +} + +type OnlineBatchPushOneMsgResp struct { + SinglePushResult []*SingelMsgToUserResultList `protobuf:"bytes,1,rep,name=singlePushResult" json:"singlePushResult,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsgResp{} } +func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } +func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} +func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{4} +} +func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) +} +func (m *OnlineBatchPushOneMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OnlineBatchPushOneMsgResp.Marshal(b, m, deterministic) +} +func (dst *OnlineBatchPushOneMsgResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_OnlineBatchPushOneMsgResp.Merge(dst, src) +} +func (m *OnlineBatchPushOneMsgResp) XXX_Size() int { + return xxx_messageInfo_OnlineBatchPushOneMsgResp.Size(m) +} +func (m *OnlineBatchPushOneMsgResp) XXX_DiscardUnknown() { + xxx_messageInfo_OnlineBatchPushOneMsgResp.DiscardUnknown(m) +} + +var xxx_messageInfo_OnlineBatchPushOneMsgResp proto.InternalMessageInfo + +func (m *OnlineBatchPushOneMsgResp) GetSinglePushResult() []*SingelMsgToUserResultList { + if m != nil { + return m.SinglePushResult + } + return nil +} + +type SingleMsgToUserPlatform struct { ResultCode int64 `protobuf:"varint,1,opt,name=ResultCode" json:"ResultCode,omitempty"` RecvID string `protobuf:"bytes,2,opt,name=RecvID" json:"RecvID,omitempty"` RecvPlatFormID int32 `protobuf:"varint,3,opt,name=RecvPlatFormID" json:"RecvPlatFormID,omitempty"` @@ -125,45 +263,45 @@ type SingleMsgToUser struct { XXX_sizecache int32 `json:"-"` } -func (m *SingleMsgToUser) Reset() { *m = SingleMsgToUser{} } -func (m *SingleMsgToUser) String() string { return proto.CompactTextString(m) } -func (*SingleMsgToUser) ProtoMessage() {} -func (*SingleMsgToUser) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{2} +func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform{} } +func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } +func (*SingleMsgToUserPlatform) ProtoMessage() {} +func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{5} } -func (m *SingleMsgToUser) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SingleMsgToUser.Unmarshal(m, b) +func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) } -func (m *SingleMsgToUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SingleMsgToUser.Marshal(b, m, deterministic) +func (m *SingleMsgToUserPlatform) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SingleMsgToUserPlatform.Marshal(b, m, deterministic) } -func (dst *SingleMsgToUser) XXX_Merge(src proto.Message) { - xxx_messageInfo_SingleMsgToUser.Merge(dst, src) +func (dst *SingleMsgToUserPlatform) XXX_Merge(src proto.Message) { + xxx_messageInfo_SingleMsgToUserPlatform.Merge(dst, src) } -func (m *SingleMsgToUser) XXX_Size() int { - return xxx_messageInfo_SingleMsgToUser.Size(m) +func (m *SingleMsgToUserPlatform) XXX_Size() int { + return xxx_messageInfo_SingleMsgToUserPlatform.Size(m) } -func (m *SingleMsgToUser) XXX_DiscardUnknown() { - xxx_messageInfo_SingleMsgToUser.DiscardUnknown(m) +func (m *SingleMsgToUserPlatform) XXX_DiscardUnknown() { + xxx_messageInfo_SingleMsgToUserPlatform.DiscardUnknown(m) } -var xxx_messageInfo_SingleMsgToUser proto.InternalMessageInfo +var xxx_messageInfo_SingleMsgToUserPlatform proto.InternalMessageInfo -func (m *SingleMsgToUser) GetResultCode() int64 { +func (m *SingleMsgToUserPlatform) GetResultCode() int64 { if m != nil { return m.ResultCode } return 0 } -func (m *SingleMsgToUser) GetRecvID() string { +func (m *SingleMsgToUserPlatform) GetRecvID() string { if m != nil { return m.RecvID } return "" } -func (m *SingleMsgToUser) GetRecvPlatFormID() int32 { +func (m *SingleMsgToUserPlatform) GetRecvPlatFormID() int32 { if m != nil { return m.RecvPlatFormID } @@ -183,7 +321,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{3} + return fileDescriptor_relay_72b82cfd7861903a, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -238,7 +376,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4} + return fileDescriptor_relay_72b82cfd7861903a, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -300,7 +438,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4, 0} + return fileDescriptor_relay_72b82cfd7861903a, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -347,7 +485,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4, 1} + return fileDescriptor_relay_72b82cfd7861903a, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -403,7 +541,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4, 2} + return fileDescriptor_relay_72b82cfd7861903a, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -447,7 +585,10 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) GetDetailPlatformStatus() []*Ge func init() { proto.RegisterType((*OnlinePushMsgReq)(nil), "relay.OnlinePushMsgReq") proto.RegisterType((*OnlinePushMsgResp)(nil), "relay.OnlinePushMsgResp") - proto.RegisterType((*SingleMsgToUser)(nil), "relay.SingleMsgToUser") + proto.RegisterType((*SingelMsgToUserResultList)(nil), "relay.SingelMsgToUserResultList") + proto.RegisterType((*OnlineBatchPushOneMsgReq)(nil), "relay.OnlineBatchPushOneMsgReq") + proto.RegisterType((*OnlineBatchPushOneMsgResp)(nil), "relay.OnlineBatchPushOneMsgResp") + proto.RegisterType((*SingleMsgToUserPlatform)(nil), "relay.SingleMsgToUserPlatform") proto.RegisterType((*GetUsersOnlineStatusReq)(nil), "relay.GetUsersOnlineStatusReq") proto.RegisterType((*GetUsersOnlineStatusResp)(nil), "relay.GetUsersOnlineStatusResp") proto.RegisterType((*GetUsersOnlineStatusResp_SuccessDetail)(nil), "relay.GetUsersOnlineStatusResp.SuccessDetail") @@ -468,6 +609,7 @@ const _ = grpc.SupportPackageIsVersion4 type OnlineMessageRelayServiceClient interface { OnlinePushMsg(ctx context.Context, in *OnlinePushMsgReq, opts ...grpc.CallOption) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error) + OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) } type onlineMessageRelayServiceClient struct { @@ -496,11 +638,21 @@ func (c *onlineMessageRelayServiceClient) GetUsersOnlineStatus(ctx context.Conte return out, nil } +func (c *onlineMessageRelayServiceClient) OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) { + out := new(OnlineBatchPushOneMsgResp) + err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/OnlineBatchPushOneMsg", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for OnlineMessageRelayService service type OnlineMessageRelayServiceServer interface { OnlinePushMsg(context.Context, *OnlinePushMsgReq) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(context.Context, *GetUsersOnlineStatusReq) (*GetUsersOnlineStatusResp, error) + OnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) } func RegisterOnlineMessageRelayServiceServer(s *grpc.Server, srv OnlineMessageRelayServiceServer) { @@ -543,6 +695,24 @@ func _OnlineMessageRelayService_GetUsersOnlineStatus_Handler(srv interface{}, ct return interceptor(ctx, in, info, handler) } +func _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OnlineBatchPushOneMsgReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlineMessageRelayServiceServer).OnlineBatchPushOneMsg(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/relay.OnlineMessageRelayService/OnlineBatchPushOneMsg", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlineMessageRelayServiceServer).OnlineBatchPushOneMsg(ctx, req.(*OnlineBatchPushOneMsgReq)) + } + return interceptor(ctx, in, info, handler) +} + var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ ServiceName: "relay.OnlineMessageRelayService", HandlerType: (*OnlineMessageRelayServiceServer)(nil), @@ -555,48 +725,58 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ MethodName: "GetUsersOnlineStatus", Handler: _OnlineMessageRelayService_GetUsersOnlineStatus_Handler, }, + { + MethodName: "OnlineBatchPushOneMsg", + Handler: _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_34094e5333f6005a) } +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_72b82cfd7861903a) } -var fileDescriptor_relay_34094e5333f6005a = []byte{ - // 554 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x5d, 0x8f, 0xd2, 0x40, - 0x14, 0x4d, 0x65, 0x3f, 0xdc, 0x0b, 0xb8, 0x32, 0xd9, 0xec, 0xd6, 0x3e, 0x20, 0xf6, 0xc1, 0x10, - 0xa3, 0x25, 0x41, 0xdf, 0x7c, 0x30, 0xd9, 0x25, 0x6b, 0x48, 0x6c, 0x20, 0x83, 0x46, 0xe3, 0x0b, - 0x99, 0x85, 0xbb, 0xdd, 0x66, 0x0b, 0x1d, 0xe6, 0xb6, 0x10, 0xff, 0x84, 0x3f, 0xc2, 0x3f, 0xa1, - 0x3f, 0xcf, 0x74, 0xa6, 0x60, 0x4b, 0x58, 0x37, 0xfb, 0x42, 0x38, 0x77, 0xee, 0x3d, 0xf7, 0x9c, - 0xd3, 0x76, 0xa0, 0xa1, 0x30, 0x12, 0x3f, 0x3a, 0xfa, 0xd7, 0x93, 0x2a, 0x4e, 0x62, 0xb6, 0xaf, - 0x81, 0xf3, 0x62, 0x20, 0x71, 0x3e, 0xee, 0xfb, 0x1d, 0x79, 0x1b, 0x74, 0xf4, 0x49, 0x87, 0xa6, - 0xb7, 0xe3, 0x15, 0x75, 0x56, 0x64, 0x3a, 0xdd, 0x9f, 0x16, 0x3c, 0x1d, 0xcc, 0xa3, 0x70, 0x8e, - 0xc3, 0x94, 0x6e, 0x7c, 0x0a, 0x38, 0x2e, 0x58, 0x0b, 0xaa, 0x03, 0x89, 0x4a, 0x24, 0x61, 0x3c, - 0xef, 0xf7, 0x6c, 0xab, 0x65, 0xb5, 0x8f, 0x78, 0xb1, 0xc4, 0xde, 0xc1, 0xe1, 0x8c, 0x82, 0x9e, - 0x48, 0x84, 0xfd, 0xa8, 0x65, 0xb5, 0xab, 0x5d, 0xc7, 0x23, 0x54, 0x4b, 0x54, 0x63, 0x21, 0xc3, - 0xb1, 0x14, 0x4a, 0xcc, 0xc8, 0xf3, 0x4d, 0x07, 0x5f, 0xb7, 0x32, 0x17, 0x6a, 0x32, 0xa5, 0x9b, - 0xcf, 0xf1, 0x17, 0x42, 0xd5, 0xef, 0xd9, 0x15, 0x4d, 0x5c, 0xaa, 0xb9, 0x1f, 0xa0, 0xb1, 0xa5, - 0x87, 0x24, 0x7b, 0x05, 0x7b, 0x0a, 0x49, 0xda, 0x56, 0xab, 0xd2, 0xae, 0x76, 0x4f, 0x3d, 0xe3, - 0x75, 0x14, 0xce, 0x83, 0x08, 0x7d, 0x0a, 0xcc, 0x30, 0xd7, 0x3d, 0xee, 0x02, 0x8e, 0xb7, 0x0e, - 0x58, 0x13, 0x80, 0x23, 0xa5, 0x51, 0x72, 0x11, 0x4f, 0x51, 0xdb, 0xa9, 0xf0, 0x42, 0x85, 0x9d, - 0xc2, 0x01, 0xc7, 0xc9, 0xb2, 0xdf, 0xd3, 0x66, 0x8e, 0x78, 0x8e, 0xd8, 0x4b, 0x78, 0x92, 0xfd, - 0x1b, 0x46, 0x22, 0xb9, 0x8c, 0xd5, 0x2c, 0x57, 0xbc, 0xcf, 0xb7, 0xaa, 0xee, 0x0a, 0xce, 0x3e, - 0x62, 0x92, 0xad, 0x22, 0xa3, 0x7d, 0x94, 0x88, 0x24, 0xa5, 0x2c, 0xca, 0x26, 0x40, 0xaa, 0x8d, - 0x7d, 0x0a, 0x29, 0xd1, 0xfa, 0x8f, 0x78, 0xa1, 0x92, 0x45, 0x1d, 0x17, 0xa2, 0x36, 0xfb, 0x8b, - 0x25, 0xe6, 0xc0, 0xe3, 0x58, 0x96, 0x02, 0xdb, 0x60, 0xf7, 0xf7, 0x1e, 0xd8, 0xbb, 0x37, 0x93, - 0x64, 0x36, 0x1c, 0xa2, 0x52, 0x1b, 0xcb, 0xfb, 0x7c, 0x0d, 0x33, 0xbf, 0xa8, 0x94, 0x4f, 0xc1, - 0xda, 0xaf, 0x41, 0x6c, 0x04, 0x75, 0x4a, 0x27, 0x13, 0x24, 0x32, 0xe1, 0xd8, 0x15, 0x9d, 0xf7, - 0x9b, 0x3c, 0xef, 0xbb, 0x36, 0x79, 0xa3, 0xe2, 0x10, 0x2f, 0x73, 0xb0, 0x21, 0xd4, 0xae, 0x45, - 0x18, 0xe1, 0x34, 0xe7, 0xdc, 0xd3, 0x9c, 0xaf, 0xef, 0xe3, 0xbc, 0xd4, 0x33, 0x3d, 0x4c, 0x44, - 0x18, 0xf1, 0x12, 0x83, 0x73, 0x01, 0xf5, 0x7c, 0xa3, 0x39, 0xce, 0x22, 0x92, 0x91, 0x48, 0xae, - 0x63, 0x35, 0xcb, 0x5f, 0xd6, 0x0d, 0xce, 0xbc, 0x92, 0x66, 0x5d, 0x7b, 0x35, 0xc8, 0xf9, 0x06, - 0xb5, 0xe2, 0x8a, 0xac, 0x2f, 0x2d, 0x86, 0x9c, 0xa3, 0x87, 0xa7, 0xe8, 0xfc, 0xb2, 0x36, 0xfa, - 0xf2, 0x08, 0xfe, 0x71, 0x5b, 0x25, 0xee, 0x3b, 0xb4, 0x31, 0x01, 0x27, 0x53, 0xad, 0x6a, 0x98, - 0xbb, 0x30, 0xb9, 0x3c, 0xf0, 0x71, 0xe4, 0xd9, 0xed, 0xa4, 0xea, 0xfe, 0xb1, 0xe0, 0x99, 0x19, - 0xf4, 0x91, 0x48, 0x04, 0xc8, 0x33, 0xce, 0x11, 0xaa, 0x65, 0x38, 0x41, 0x76, 0x0e, 0xf5, 0xd2, - 0x47, 0xc8, 0xce, 0xf2, 0x9d, 0xdb, 0x57, 0x85, 0x63, 0xef, 0x3e, 0x20, 0xc9, 0xbe, 0xc2, 0xc9, - 0x2e, 0x85, 0xac, 0xf9, 0x5f, 0xf9, 0x0b, 0xe7, 0xf9, 0x3d, 0xf6, 0xce, 0x1b, 0xdf, 0x8f, 0x3d, - 0x73, 0xdb, 0xbd, 0x97, 0x57, 0x5a, 0xf6, 0xd5, 0x81, 0xbe, 0xcc, 0xde, 0xfe, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0x8e, 0xdc, 0xcc, 0x70, 0x0b, 0x05, 0x00, 0x00, +var fileDescriptor_relay_72b82cfd7861903a = []byte{ + // 656 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4e, + 0x10, 0x95, 0x31, 0x7f, 0x7e, 0x0c, 0xf0, 0x2b, 0xac, 0x68, 0x31, 0x3e, 0x04, 0xd7, 0x87, 0x2a, + 0xaa, 0xda, 0x44, 0x4a, 0x7b, 0xeb, 0x0d, 0x22, 0x50, 0x24, 0xa2, 0xa0, 0x4d, 0xab, 0x56, 0x5c, + 0xa2, 0x25, 0x59, 0x8c, 0x85, 0x13, 0x2f, 0x3b, 0x36, 0x88, 0x2f, 0xd1, 0x53, 0xcf, 0x3d, 0xf4, + 0x4b, 0xf4, 0xeb, 0x55, 0xfb, 0x27, 0xa9, 0x0d, 0x0e, 0x28, 0x87, 0x5e, 0xa2, 0xcc, 0xec, 0xec, + 0x9b, 0xf7, 0xde, 0xec, 0xae, 0x61, 0x47, 0xf2, 0x84, 0xdd, 0x37, 0xf5, 0x6f, 0x43, 0xc8, 0x34, + 0x4b, 0xc9, 0x8a, 0x0e, 0xfc, 0xd7, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa3, 0xa6, + 0x5e, 0x69, 0xe2, 0xe8, 0x7a, 0x70, 0x87, 0xcd, 0x3b, 0x34, 0x95, 0xe1, 0x77, 0x07, 0xb6, 0x7b, + 0x93, 0x24, 0x9e, 0xf0, 0xb3, 0x1c, 0xaf, 0xba, 0x18, 0x51, 0x7e, 0x43, 0x02, 0xd8, 0xe8, 0x09, + 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x4e, 0x8b, 0x29, 0xf2, 0x11, + 0xd6, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0xa5, 0xc0, 0xa9, 0x6f, 0xb4, 0xfc, 0x06, 0x72, 0x79, + 0xcb, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, + 0x10, 0x36, 0x45, 0x8e, 0x57, 0x9f, 0xd3, 0x2f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0x1a, 0xb8, 0x94, + 0x0b, 0x4f, 0x60, 0xe7, 0x01, 0x1f, 0x14, 0xa4, 0x05, 0xcb, 0x92, 0xa3, 0xf0, 0x9c, 0xc0, 0xad, + 0x6f, 0xb4, 0x6a, 0x0d, 0xa3, 0xb5, 0x1f, 0x4f, 0xa2, 0x84, 0x77, 0x31, 0x32, 0x9b, 0xcf, 0x12, + 0x96, 0x5d, 0xa6, 0x72, 0x4c, 0x75, 0x6d, 0x18, 0xc1, 0xbe, 0x2a, 0xe0, 0xc9, 0xac, 0x80, 0x72, + 0xcc, 0x93, 0xec, 0x34, 0xc6, 0x8c, 0xbc, 0x82, 0xd5, 0xdc, 0x70, 0x30, 0xe2, 0x6c, 0x34, 0x6b, + 0xb4, 0xb4, 0x40, 0xa3, 0x9f, 0x0e, 0x78, 0x86, 0xf2, 0x21, 0xcb, 0x86, 0x57, 0x8a, 0x77, 0x6f, + 0xc2, 0xff, 0xb1, 0x95, 0x6f, 0x61, 0xbb, 0x68, 0x9b, 0x12, 0xe5, 0xb9, 0x81, 0x5b, 0x5f, 0xa7, + 0x8f, 0xf2, 0x61, 0x0c, 0xfb, 0x73, 0xf8, 0xa1, 0x20, 0xa7, 0xb0, 0x8d, 0x5a, 0x9e, 0xca, 0x1b, + 0x87, 0xac, 0xcd, 0x41, 0x41, 0x7d, 0xa5, 0x8b, 0xf4, 0xd1, 0xce, 0xf0, 0x1e, 0xf6, 0xe6, 0x98, + 0x45, 0x6a, 0x00, 0xa6, 0xe8, 0x28, 0x1d, 0x71, 0x6d, 0x84, 0x4b, 0x0b, 0x19, 0x35, 0x12, 0xca, + 0x87, 0xb7, 0x9d, 0xb6, 0xb6, 0x61, 0x9d, 0xda, 0x88, 0xbc, 0x81, 0xff, 0xd5, 0x3f, 0x85, 0x73, + 0x9c, 0xca, 0xb1, 0x3d, 0x36, 0x2b, 0xf4, 0x41, 0x36, 0xbc, 0x83, 0xbd, 0x13, 0x9e, 0xa9, 0x96, + 0x68, 0xd4, 0xf6, 0x33, 0x96, 0xe5, 0xa8, 0x86, 0x50, 0x03, 0xc8, 0xff, 0xda, 0xe4, 0x68, 0x9b, + 0x0a, 0x19, 0x35, 0xa4, 0xb4, 0x30, 0x24, 0xd3, 0xbf, 0x98, 0x22, 0x3e, 0xfc, 0x97, 0x8a, 0xd2, + 0xa9, 0x9d, 0xc5, 0xe1, 0xef, 0x65, 0xf0, 0xaa, 0x3b, 0xa3, 0x20, 0x1e, 0xac, 0x71, 0x29, 0x67, + 0x92, 0x57, 0xe8, 0x34, 0x54, 0x7a, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7a, 0x4d, 0x44, 0xfa, 0xb0, + 0x85, 0xf9, 0x70, 0xc8, 0x11, 0xed, 0x34, 0x5c, 0x3d, 0x8d, 0xf7, 0x76, 0x1a, 0xf3, 0x3a, 0x35, + 0xfa, 0xc5, 0x4d, 0xb4, 0x8c, 0x41, 0xce, 0x60, 0xf3, 0x92, 0xc5, 0x09, 0x1f, 0x59, 0xcc, 0x65, + 0x8d, 0xf9, 0xee, 0x39, 0xcc, 0x63, 0xbd, 0xa7, 0xcd, 0x33, 0x16, 0x27, 0xb4, 0x84, 0xe0, 0x1f, + 0xc1, 0x96, 0xed, 0x68, 0x96, 0x95, 0x45, 0xc2, 0xce, 0xda, 0x1e, 0xf3, 0x59, 0xac, 0xb4, 0xa2, + 0x46, 0x9d, 0x6a, 0x35, 0x91, 0xff, 0x0d, 0x36, 0x8b, 0x2d, 0x0a, 0xd7, 0xd2, 0x2d, 0x5d, 0xcb, + 0x85, 0x5d, 0xf4, 0x7f, 0x39, 0x33, 0x7e, 0xd6, 0x82, 0x79, 0x57, 0x7e, 0x0e, 0x37, 0xc2, 0x60, + 0x77, 0xa4, 0x59, 0x4d, 0x4f, 0xb0, 0xf1, 0x65, 0xc1, 0x71, 0x58, 0xef, 0x2a, 0xa1, 0x5a, 0x3f, + 0x96, 0xa6, 0x37, 0xb3, 0xcb, 0x11, 0x59, 0xc4, 0xa9, 0xc2, 0xec, 0x73, 0x79, 0x1b, 0x0f, 0x39, + 0x39, 0x84, 0xad, 0xd2, 0x4b, 0x48, 0xf6, 0x6c, 0xcf, 0x87, 0xef, 0xb5, 0xef, 0x55, 0x2f, 0xa0, + 0x20, 0x5f, 0x61, 0xb7, 0x8a, 0x21, 0xa9, 0x3d, 0x49, 0xff, 0xc6, 0x3f, 0x78, 0x46, 0x1e, 0x39, + 0x87, 0x97, 0x95, 0x6f, 0x0a, 0x39, 0x28, 0x71, 0x79, 0xfc, 0x22, 0xfa, 0xc1, 0xd3, 0x05, 0x28, + 0x0e, 0x77, 0xce, 0x5f, 0x34, 0xcc, 0xe7, 0xec, 0x93, 0xb8, 0xd0, 0x96, 0x5c, 0xac, 0xea, 0xaf, + 0xd5, 0x87, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x04, 0x75, 0xfe, 0xf6, 0xec, 0x06, 0x00, 0x00, } From 5af3ba9db6b1f32a8d2c1cd9130204e96880dfa6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:48:56 +0800 Subject: [PATCH 342/752] ws and push update --- internal/push/logic/push_to_client.go | 195 +++++++++++++------------- 1 file changed, 98 insertions(+), 97 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 91a8478d9..c1d183691 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -133,103 +133,104 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } -//func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { -// var wsResult []*pbRelay.SingelMsgToUserResultList -// isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) -// log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) -// if len(grpcCons) == 0 { -// log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") -// grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) -// } -// //Online push message -// log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) -// for _, v := range grpcCons { -// msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) -// reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) -// if err != nil { -// log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) -// continue -// } -// if reply != nil && reply.SinglePushResult != nil { -// wsResult = append(wsResult, reply.SinglePushResult...) -// } -// } -// log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) -// successCount++ -// if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { -// for _, v := range wsResult { -// if v.ResultCode == 0 { -// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { -// break -// } -// continue -// } -// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { -// //Use offline push messaging -// var UIDList []string -// UIDList = append(UIDList, v.RecvID) -// customContent := OpenIMContent{ -// SessionType: int(pushMsg.MsgData.SessionType), -// From: pushMsg.MsgData.SendID, -// To: pushMsg.MsgData.RecvID, -// Seq: pushMsg.MsgData.Seq, -// } -// bCustomContent, _ := json.Marshal(customContent) -// jsonCustomContent := string(bCustomContent) -// var content string -// if pushMsg.MsgData.OfflinePushInfo != nil { -// content = pushMsg.MsgData.OfflinePushInfo.Title -// -// } else { -// switch pushMsg.MsgData.ContentType { -// case constant.Text: -// content = constant.ContentType2PushContent[constant.Text] -// case constant.Picture: -// content = constant.ContentType2PushContent[constant.Picture] -// case constant.Voice: -// content = constant.ContentType2PushContent[constant.Voice] -// case constant.Video: -// content = constant.ContentType2PushContent[constant.Video] -// case constant.File: -// content = constant.ContentType2PushContent[constant.File] -// case constant.AtText: -// a := AtContent{} -// _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) -// if utils.IsContain(v.RecvID, a.AtUserList) { -// content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] -// } else { -// content = constant.ContentType2PushContent[constant.GroupMsg] -// } -// default: -// content = constant.ContentType2PushContent[constant.Common] -// } -// } -// callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) -// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") -// if callbackResp.ErrCode != 0 { -// log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) -// } -// if callbackResp.ActionCode != constant.ActionAllow { -// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") -// break -// } -// -// if offlinePusher == nil { -// offlinePusher = jpush.JPushClient -// } -// pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) -// if err != nil { -// log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) -// } else { -// log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) -// } -// break -// } -// -// } -// -// } -//} +func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { + return + //var wsResult []*pbRelay.SingelMsgToUserResultList + //isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) + //log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) + //if len(grpcCons) == 0 { + // log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") + // grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + //} + ////Online push message + //log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + //for _, v := range grpcCons { + // msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) + // reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) + // if err != nil { + // log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + // continue + // } + // if reply != nil && reply.SinglePushResult != nil { + // wsResult = append(wsResult, reply.SinglePushResult...) + // } + //} + //log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + //successCount++ + //if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { + // for _, v := range wsResult { + // if v.ResultCode == 0 { + // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + // break + // } + // continue + // } + // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + // //Use offline push messaging + // var UIDList []string + // UIDList = append(UIDList, v.RecvID) + // customContent := OpenIMContent{ + // SessionType: int(pushMsg.MsgData.SessionType), + // From: pushMsg.MsgData.SendID, + // To: pushMsg.MsgData.RecvID, + // Seq: pushMsg.MsgData.Seq, + // } + // bCustomContent, _ := json.Marshal(customContent) + // jsonCustomContent := string(bCustomContent) + // var content string + // if pushMsg.MsgData.OfflinePushInfo != nil { + // content = pushMsg.MsgData.OfflinePushInfo.Title + // + // } else { + // switch pushMsg.MsgData.ContentType { + // case constant.Text: + // content = constant.ContentType2PushContent[constant.Text] + // case constant.Picture: + // content = constant.ContentType2PushContent[constant.Picture] + // case constant.Voice: + // content = constant.ContentType2PushContent[constant.Voice] + // case constant.Video: + // content = constant.ContentType2PushContent[constant.Video] + // case constant.File: + // content = constant.ContentType2PushContent[constant.File] + // case constant.AtText: + // a := AtContent{} + // _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + // if utils.IsContain(v.RecvID, a.AtUserList) { + // content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] + // } else { + // content = constant.ContentType2PushContent[constant.GroupMsg] + // } + // default: + // content = constant.ContentType2PushContent[constant.Common] + // } + // } + // callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) + // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + // if callbackResp.ErrCode != 0 { + // log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + // } + // if callbackResp.ActionCode != constant.ActionAllow { + // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + // break + // } + // + // if offlinePusher == nil { + // offlinePusher = jpush.JPushClient + // } + // pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) + // if err != nil { + // log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + // } else { + // log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) + // } + // break + // } + // + // } + // + //} +} //func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { // m.MsgID = rpcChat.GetMsgID(m.SendID) From 1aacd3cb23879361dbda3ba6494fc87a3b0feb6b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:51:31 +0800 Subject: [PATCH 343/752] ws and push update --- internal/push/logic/callback.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index 655751dc2..2d445e666 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -20,7 +20,7 @@ func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushI OperationID: operationID, UserID: userID, PlatformID: platformID, - Platform: constant.PlatformIDToName(platformID), + Platform: constant.PlatformIDToName(int(platformID)), }, OfflinePushInfo: info, } From 0a260a67d5833a5d32d86a2509588df413a073a9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 17:37:00 +0800 Subject: [PATCH 344/752] ws and push update --- internal/msg_gateway/gate/rpc_server.go | 33 ++---- internal/push/logic/push_to_client.go | 129 +++++++++++------------- pkg/proto/relay/relay.pb.go | 119 ++++++++++++---------- pkg/proto/relay/relay.proto | 1 + 4 files changed, 133 insertions(+), 149 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 5249bdce8..2ee614c2d 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -159,11 +159,16 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } for _, v := range req.PushToUserIDList { var resp []*pbRelay.SingleMsgToUserPlatform + tempT := &pbRelay.SingelMsgToUserResultList{ + UserID: v, + } userConnMap := ws.getUserAllCons(v) for platform, userConn := range userConnMap { if userConn != nil { resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) - if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { //仅仅记录推送成功的平台端 + if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { + tempT.OnlinePush = true + log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: resultCode, RecvID: v, @@ -174,31 +179,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } } - //for _, x := range r.platformList { - // if conn := ws.getUserConn(v, x); conn != nil { - // resultCode := sendMsgBatchToUser(conn, replyBytes.Bytes(), req, x, v) - // temp := &pbRelay.SingleMsgToUserPlatform{ - // ResultCode: resultCode, - // RecvID: v, - // RecvPlatFormID: constant.PlatformNameToID(x), - // } - // resp = append(resp, temp) - // } else { - // if utils.IsContain(x,r.pushTerminal) { - // temp := &pbRelay.SingleMsgToUserPlatform{ - // ResultCode: -1, - // RecvID: v, - // RecvPlatFormID: constant.PlatformNameToID(x), - // } - // resp = append(resp, temp) - // } - // - // } - //} - tempT := &pbRelay.SingelMsgToUserResultList{ - UserID: v, - Resp: resp, - } + tempT.Resp = resp singleUserResult = append(singleUserResult, tempT) } diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index c1d183691..589605e02 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -36,7 +36,7 @@ type AtContent struct { var grpcCons []*grpc.ClientConn func MsgToUser(pushMsg *pbPush.PushMsgReq) { - var wsResult []*pbRelay.SingleMsgToUserPlatform + var wsResult []*pbRelay.SingelMsgToUserResultList isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) if len(grpcCons) == 0 { @@ -47,90 +47,83 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlinePushMsg(context.Background(), &pbRelay.OnlinePushMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserID: pushMsg.PushToUserID}) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue } - if reply != nil && reply.Resp != nil { - wsResult = append(wsResult, reply.Resp...) + if reply != nil && reply.SinglePushResult != nil { + wsResult = append(wsResult, reply.SinglePushResult...) } } log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) successCount++ if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { for _, v := range wsResult { - if v.ResultCode == 0 { - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - break - } - continue + if v.OnlinePush { + return } - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - //Use offline push messaging - var UIDList []string - UIDList = append(UIDList, v.RecvID) - customContent := OpenIMContent{ - SessionType: int(pushMsg.MsgData.SessionType), - From: pushMsg.MsgData.SendID, - To: pushMsg.MsgData.RecvID, - Seq: pushMsg.MsgData.Seq, - } - bCustomContent, _ := json.Marshal(customContent) - jsonCustomContent := string(bCustomContent) - var content string - if pushMsg.MsgData.OfflinePushInfo != nil { - content = pushMsg.MsgData.OfflinePushInfo.Title + } + //Use offline push messaging + var UIDList []string + UIDList = append(UIDList, pushMsg.PushToUserID) + customContent := OpenIMContent{ + SessionType: int(pushMsg.MsgData.SessionType), + From: pushMsg.MsgData.SendID, + To: pushMsg.MsgData.RecvID, + Seq: pushMsg.MsgData.Seq, + } + bCustomContent, _ := json.Marshal(customContent) + jsonCustomContent := string(bCustomContent) + var content string + if pushMsg.MsgData.OfflinePushInfo != nil { + content = pushMsg.MsgData.OfflinePushInfo.Title + } else { + switch pushMsg.MsgData.ContentType { + case constant.Text: + content = constant.ContentType2PushContent[constant.Text] + case constant.Picture: + content = constant.ContentType2PushContent[constant.Picture] + case constant.Voice: + content = constant.ContentType2PushContent[constant.Voice] + case constant.Video: + content = constant.ContentType2PushContent[constant.Video] + case constant.File: + content = constant.ContentType2PushContent[constant.File] + case constant.AtText: + a := AtContent{} + _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + if utils.IsContain(pushMsg.PushToUserID, a.AtUserList) { + content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] } else { - switch pushMsg.MsgData.ContentType { - case constant.Text: - content = constant.ContentType2PushContent[constant.Text] - case constant.Picture: - content = constant.ContentType2PushContent[constant.Picture] - case constant.Voice: - content = constant.ContentType2PushContent[constant.Voice] - case constant.Video: - content = constant.ContentType2PushContent[constant.Video] - case constant.File: - content = constant.ContentType2PushContent[constant.File] - case constant.AtText: - a := AtContent{} - _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) - if utils.IsContain(v.RecvID, a.AtUserList) { - content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] - } else { - content = constant.ContentType2PushContent[constant.GroupMsg] - } - default: - content = constant.ContentType2PushContent[constant.Common] - } + content = constant.ContentType2PushContent[constant.GroupMsg] } - callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") - if callbackResp.ErrCode != 0 { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) - } - if callbackResp.ActionCode != constant.ActionAllow { - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") - break - } - - if offlinePusher == nil { - offlinePusher = jpush.JPushClient - } - pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) - if err != nil { - log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) - } else { - log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) - } - break + default: + content = constant.ContentType2PushContent[constant.Common] } - + } + callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, constant.AndroidPlatformID) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + if callbackResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + return + } + if offlinePusher == nil { + offlinePusher = jpush.JPushClient + } + pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) + if err != nil { + log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + } else { + log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) } } + } func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { @@ -155,7 +148,7 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { // wsResult = append(wsResult, reply.SinglePushResult...) // } //} - //log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + //log.Debug(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) //successCount++ //if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { // for _, v := range wsResult { diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 122ae56f9..5fecfadd6 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{0} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{1} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -119,6 +119,7 @@ func (m *OnlinePushMsgResp) GetResp() []*SingleMsgToUserPlatform { type SingelMsgToUserResultList struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` Resp []*SingleMsgToUserPlatform `protobuf:"bytes,2,rep,name=resp" json:"resp,omitempty"` + OnlinePush bool `protobuf:"varint,3,opt,name=onlinePush" json:"onlinePush,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -128,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{2} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -162,6 +163,13 @@ func (m *SingelMsgToUserResultList) GetResp() []*SingleMsgToUserPlatform { return nil } +func (m *SingelMsgToUserResultList) GetOnlinePush() bool { + if m != nil { + return m.OnlinePush + } + return false +} + type OnlineBatchPushOneMsgReq struct { OperationID string `protobuf:"bytes,1,opt,name=OperationID" json:"OperationID,omitempty"` MsgData *sdk_ws.MsgData `protobuf:"bytes,2,opt,name=msgData" json:"msgData,omitempty"` @@ -175,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{3} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -227,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{4} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -267,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{5} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -321,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{6} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -376,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -438,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7, 0} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -485,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7, 1} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -541,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7, 2} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -734,49 +742,50 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_72b82cfd7861903a) } +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_77ab6a9fe292f32a) } -var fileDescriptor_relay_72b82cfd7861903a = []byte{ - // 656 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4e, - 0x10, 0x95, 0x31, 0x7f, 0x7e, 0x0c, 0xf0, 0x2b, 0xac, 0x68, 0x31, 0x3e, 0x04, 0xd7, 0x87, 0x2a, - 0xaa, 0xda, 0x44, 0x4a, 0x7b, 0xeb, 0x0d, 0x22, 0x50, 0x24, 0xa2, 0xa0, 0x4d, 0xab, 0x56, 0x5c, - 0xa2, 0x25, 0x59, 0x8c, 0x85, 0x13, 0x2f, 0x3b, 0x36, 0x88, 0x2f, 0xd1, 0x53, 0xcf, 0x3d, 0xf4, - 0x4b, 0xf4, 0xeb, 0x55, 0xfb, 0x27, 0xa9, 0x0d, 0x0e, 0x28, 0x87, 0x5e, 0xa2, 0xcc, 0xec, 0xec, - 0x9b, 0xf7, 0xde, 0xec, 0xae, 0x61, 0x47, 0xf2, 0x84, 0xdd, 0x37, 0xf5, 0x6f, 0x43, 0xc8, 0x34, - 0x4b, 0xc9, 0x8a, 0x0e, 0xfc, 0xd7, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa3, 0xa6, - 0x5e, 0x69, 0xe2, 0xe8, 0x7a, 0x70, 0x87, 0xcd, 0x3b, 0x34, 0x95, 0xe1, 0x77, 0x07, 0xb6, 0x7b, - 0x93, 0x24, 0x9e, 0xf0, 0xb3, 0x1c, 0xaf, 0xba, 0x18, 0x51, 0x7e, 0x43, 0x02, 0xd8, 0xe8, 0x09, - 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x4e, 0x8b, 0x29, 0xf2, 0x11, - 0xd6, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0xa5, 0xc0, 0xa9, 0x6f, 0xb4, 0xfc, 0x06, 0x72, 0x79, - 0xcb, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, - 0x10, 0x36, 0x45, 0x8e, 0x57, 0x9f, 0xd3, 0x2f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0x1a, 0xb8, 0x94, - 0x0b, 0x4f, 0x60, 0xe7, 0x01, 0x1f, 0x14, 0xa4, 0x05, 0xcb, 0x92, 0xa3, 0xf0, 0x9c, 0xc0, 0xad, - 0x6f, 0xb4, 0x6a, 0x0d, 0xa3, 0xb5, 0x1f, 0x4f, 0xa2, 0x84, 0x77, 0x31, 0x32, 0x9b, 0xcf, 0x12, - 0x96, 0x5d, 0xa6, 0x72, 0x4c, 0x75, 0x6d, 0x18, 0xc1, 0xbe, 0x2a, 0xe0, 0xc9, 0xac, 0x80, 0x72, - 0xcc, 0x93, 0xec, 0x34, 0xc6, 0x8c, 0xbc, 0x82, 0xd5, 0xdc, 0x70, 0x30, 0xe2, 0x6c, 0x34, 0x6b, - 0xb4, 0xb4, 0x40, 0xa3, 0x9f, 0x0e, 0x78, 0x86, 0xf2, 0x21, 0xcb, 0x86, 0x57, 0x8a, 0x77, 0x6f, - 0xc2, 0xff, 0xb1, 0x95, 0x6f, 0x61, 0xbb, 0x68, 0x9b, 0x12, 0xe5, 0xb9, 0x81, 0x5b, 0x5f, 0xa7, - 0x8f, 0xf2, 0x61, 0x0c, 0xfb, 0x73, 0xf8, 0xa1, 0x20, 0xa7, 0xb0, 0x8d, 0x5a, 0x9e, 0xca, 0x1b, - 0x87, 0xac, 0xcd, 0x41, 0x41, 0x7d, 0xa5, 0x8b, 0xf4, 0xd1, 0xce, 0xf0, 0x1e, 0xf6, 0xe6, 0x98, - 0x45, 0x6a, 0x00, 0xa6, 0xe8, 0x28, 0x1d, 0x71, 0x6d, 0x84, 0x4b, 0x0b, 0x19, 0x35, 0x12, 0xca, - 0x87, 0xb7, 0x9d, 0xb6, 0xb6, 0x61, 0x9d, 0xda, 0x88, 0xbc, 0x81, 0xff, 0xd5, 0x3f, 0x85, 0x73, - 0x9c, 0xca, 0xb1, 0x3d, 0x36, 0x2b, 0xf4, 0x41, 0x36, 0xbc, 0x83, 0xbd, 0x13, 0x9e, 0xa9, 0x96, - 0x68, 0xd4, 0xf6, 0x33, 0x96, 0xe5, 0xa8, 0x86, 0x50, 0x03, 0xc8, 0xff, 0xda, 0xe4, 0x68, 0x9b, - 0x0a, 0x19, 0x35, 0xa4, 0xb4, 0x30, 0x24, 0xd3, 0xbf, 0x98, 0x22, 0x3e, 0xfc, 0x97, 0x8a, 0xd2, - 0xa9, 0x9d, 0xc5, 0xe1, 0xef, 0x65, 0xf0, 0xaa, 0x3b, 0xa3, 0x20, 0x1e, 0xac, 0x71, 0x29, 0x67, - 0x92, 0x57, 0xe8, 0x34, 0x54, 0x7a, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7a, 0x4d, 0x44, 0xfa, 0xb0, - 0x85, 0xf9, 0x70, 0xc8, 0x11, 0xed, 0x34, 0x5c, 0x3d, 0x8d, 0xf7, 0x76, 0x1a, 0xf3, 0x3a, 0x35, - 0xfa, 0xc5, 0x4d, 0xb4, 0x8c, 0x41, 0xce, 0x60, 0xf3, 0x92, 0xc5, 0x09, 0x1f, 0x59, 0xcc, 0x65, - 0x8d, 0xf9, 0xee, 0x39, 0xcc, 0x63, 0xbd, 0xa7, 0xcd, 0x33, 0x16, 0x27, 0xb4, 0x84, 0xe0, 0x1f, - 0xc1, 0x96, 0xed, 0x68, 0x96, 0x95, 0x45, 0xc2, 0xce, 0xda, 0x1e, 0xf3, 0x59, 0xac, 0xb4, 0xa2, - 0x46, 0x9d, 0x6a, 0x35, 0x91, 0xff, 0x0d, 0x36, 0x8b, 0x2d, 0x0a, 0xd7, 0xd2, 0x2d, 0x5d, 0xcb, - 0x85, 0x5d, 0xf4, 0x7f, 0x39, 0x33, 0x7e, 0xd6, 0x82, 0x79, 0x57, 0x7e, 0x0e, 0x37, 0xc2, 0x60, - 0x77, 0xa4, 0x59, 0x4d, 0x4f, 0xb0, 0xf1, 0x65, 0xc1, 0x71, 0x58, 0xef, 0x2a, 0xa1, 0x5a, 0x3f, - 0x96, 0xa6, 0x37, 0xb3, 0xcb, 0x11, 0x59, 0xc4, 0xa9, 0xc2, 0xec, 0x73, 0x79, 0x1b, 0x0f, 0x39, - 0x39, 0x84, 0xad, 0xd2, 0x4b, 0x48, 0xf6, 0x6c, 0xcf, 0x87, 0xef, 0xb5, 0xef, 0x55, 0x2f, 0xa0, - 0x20, 0x5f, 0x61, 0xb7, 0x8a, 0x21, 0xa9, 0x3d, 0x49, 0xff, 0xc6, 0x3f, 0x78, 0x46, 0x1e, 0x39, - 0x87, 0x97, 0x95, 0x6f, 0x0a, 0x39, 0x28, 0x71, 0x79, 0xfc, 0x22, 0xfa, 0xc1, 0xd3, 0x05, 0x28, - 0x0e, 0x77, 0xce, 0x5f, 0x34, 0xcc, 0xe7, 0xec, 0x93, 0xb8, 0xd0, 0x96, 0x5c, 0xac, 0xea, 0xaf, - 0xd5, 0x87, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x04, 0x75, 0xfe, 0xf6, 0xec, 0x06, 0x00, 0x00, +var fileDescriptor_relay_77ab6a9fe292f32a = []byte{ + // 668 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4a, + 0x10, 0x97, 0x31, 0x7f, 0x07, 0x78, 0x0f, 0x56, 0xbc, 0x87, 0xf1, 0x21, 0xb8, 0x3e, 0x54, 0x51, + 0xd5, 0x26, 0x52, 0xda, 0x5b, 0x6f, 0x10, 0x81, 0x22, 0x11, 0x05, 0x6d, 0x5a, 0xb5, 0xe2, 0x12, + 0x2d, 0xc9, 0x62, 0x2c, 0x9c, 0x78, 0xd9, 0xb1, 0x41, 0x7c, 0x82, 0xde, 0x7a, 0xea, 0xb9, 0x87, + 0x7e, 0x89, 0x7e, 0xbd, 0x6a, 0xff, 0xc4, 0xb5, 0x21, 0x81, 0x72, 0xe8, 0x25, 0xca, 0xcc, 0xce, + 0xce, 0xfc, 0xfe, 0xec, 0xae, 0x61, 0x5b, 0xf2, 0x84, 0xdd, 0x35, 0xf5, 0x6f, 0x43, 0xc8, 0x34, + 0x4b, 0xc9, 0x92, 0x0e, 0xfc, 0x17, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa2, 0xa6, + 0x5e, 0x69, 0xe2, 0xe8, 0x6a, 0x70, 0x8b, 0xcd, 0x5b, 0x34, 0x95, 0xe1, 0x57, 0x07, 0xb6, 0x7a, + 0x93, 0x24, 0x9e, 0xf0, 0xd3, 0x1c, 0x2f, 0xbb, 0x18, 0x51, 0x7e, 0x4d, 0x02, 0x58, 0xef, 0x09, + 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x46, 0xcb, 0x29, 0xf2, 0x0e, + 0x56, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0x85, 0xc0, 0xa9, 0xaf, 0xb7, 0xfc, 0x06, 0x72, 0x79, + 0xc3, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, + 0x10, 0x36, 0x44, 0x8e, 0x97, 0x1f, 0xd2, 0x8f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0xba, 0x71, 0x25, + 0x17, 0x1e, 0xc3, 0xf6, 0x3d, 0x3c, 0x28, 0x48, 0x0b, 0x16, 0x25, 0x47, 0xe1, 0x39, 0x81, 0x5b, + 0x5f, 0x6f, 0xd5, 0x1a, 0x86, 0x6b, 0x3f, 0x9e, 0x44, 0x09, 0xef, 0x62, 0x64, 0x36, 0x9f, 0x26, + 0x2c, 0xbb, 0x48, 0xe5, 0x98, 0xea, 0xda, 0xf0, 0x8b, 0x03, 0x7b, 0xaa, 0x82, 0x27, 0x45, 0x05, + 0xe5, 0x98, 0x27, 0xd9, 0x49, 0x8c, 0x19, 0xf9, 0x1f, 0x96, 0x73, 0x03, 0xc2, 0xb0, 0xb3, 0x51, + 0x31, 0x69, 0xe1, 0xcf, 0x27, 0x91, 0x1a, 0x40, 0x5a, 0x40, 0xd6, 0xa4, 0x56, 0x69, 0x29, 0x13, + 0x7e, 0x77, 0xc0, 0x33, 0x9c, 0x0e, 0x58, 0x36, 0xbc, 0x54, 0xb9, 0xde, 0x84, 0xff, 0x65, 0xad, + 0x5f, 0xc1, 0x56, 0x59, 0x57, 0x45, 0xda, 0x73, 0x03, 0xb7, 0xbe, 0x46, 0x1f, 0xe4, 0xc3, 0x18, + 0xf6, 0xe6, 0xe0, 0x43, 0x41, 0x4e, 0x60, 0x0b, 0x35, 0x7d, 0x95, 0x37, 0x0a, 0x5a, 0x1f, 0x82, + 0x92, 0x3a, 0x33, 0x55, 0xa6, 0x0f, 0x76, 0x86, 0x77, 0xb0, 0x3b, 0x47, 0x4c, 0x25, 0xa3, 0x29, + 0x3a, 0x4c, 0x47, 0x5c, 0x0b, 0xe1, 0xd2, 0x52, 0x46, 0x59, 0x46, 0xf9, 0xf0, 0xa6, 0xd3, 0xd6, + 0x32, 0xac, 0x51, 0x1b, 0x91, 0x97, 0xf0, 0x8f, 0xfa, 0xa7, 0xfa, 0x1c, 0xa5, 0x72, 0x6c, 0xcf, + 0xd5, 0x12, 0xbd, 0x97, 0x0d, 0x6f, 0x61, 0xf7, 0x98, 0x67, 0x6a, 0x24, 0x1a, 0xb6, 0xfd, 0x8c, + 0x65, 0x39, 0x2a, 0x13, 0x6a, 0x00, 0xf9, 0x6f, 0x99, 0x1c, 0x2d, 0x53, 0x29, 0xa3, 0x4c, 0x4a, + 0x4b, 0x26, 0x99, 0xf9, 0xe5, 0x14, 0xf1, 0x61, 0x35, 0x15, 0x95, 0x63, 0x5d, 0xc4, 0xe1, 0xcf, + 0x45, 0xf0, 0x66, 0x4f, 0x46, 0x41, 0x3c, 0x58, 0xe1, 0x52, 0x16, 0x94, 0x97, 0xe8, 0x34, 0x54, + 0x7c, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7c, 0x4d, 0x44, 0xfa, 0xb0, 0x89, 0xf9, 0x70, 0xc8, 0x11, + 0xad, 0x1b, 0xae, 0x76, 0xe3, 0x8d, 0x75, 0x63, 0xde, 0xa4, 0x46, 0xbf, 0xbc, 0x89, 0x56, 0x7b, + 0x90, 0x53, 0xd8, 0xb8, 0x60, 0x71, 0xc2, 0x47, 0xb6, 0xe7, 0xa2, 0xee, 0xf9, 0xfa, 0xa9, 0x9e, + 0x47, 0x7a, 0x4f, 0x9b, 0x67, 0x2c, 0x4e, 0x68, 0xa5, 0x83, 0x7f, 0x08, 0x9b, 0x76, 0xa2, 0x59, + 0x56, 0x12, 0x09, 0xeb, 0xb5, 0x3d, 0xe6, 0x45, 0xac, 0xb8, 0xa2, 0xee, 0x3a, 0xe5, 0x6a, 0x22, + 0xff, 0x33, 0x6c, 0x94, 0x47, 0x94, 0xae, 0xad, 0x5b, 0xb9, 0xb6, 0xcf, 0x56, 0xd1, 0xff, 0xe1, + 0x14, 0xf8, 0xac, 0x04, 0xf3, 0x9e, 0x84, 0x39, 0xd8, 0x08, 0x83, 0x9d, 0x91, 0x46, 0x35, 0x3d, + 0xc1, 0x46, 0x97, 0x67, 0xda, 0x61, 0xb5, 0x9b, 0xd9, 0xaa, 0xf5, 0x6d, 0x61, 0x7a, 0x33, 0xbb, + 0x1c, 0x91, 0x45, 0x9c, 0xaa, 0x9e, 0x7d, 0x2e, 0x6f, 0xe2, 0x21, 0x27, 0x07, 0xb0, 0x59, 0x79, + 0x2a, 0xc9, 0xae, 0x9d, 0x79, 0xff, 0x41, 0xf7, 0xbd, 0xd9, 0x0b, 0x28, 0xc8, 0x27, 0xd8, 0x99, + 0x85, 0x90, 0xd4, 0x1e, 0x85, 0x7f, 0xed, 0xef, 0x3f, 0x41, 0x8f, 0x9c, 0xc1, 0x7f, 0x33, 0xdf, + 0x14, 0xb2, 0x5f, 0xc1, 0xf2, 0xf0, 0x45, 0xf4, 0x83, 0xc7, 0x0b, 0x50, 0x1c, 0x6c, 0x9f, 0xfd, + 0xdb, 0x30, 0xdf, 0xbb, 0xf7, 0xe2, 0x5c, 0x4b, 0x72, 0xbe, 0xac, 0x3f, 0x67, 0x6f, 0x7f, 0x05, + 0x00, 0x00, 0xff, 0xff, 0x30, 0xa9, 0x4c, 0xde, 0x0d, 0x07, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index b02edfa2c..cee15887c 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -14,6 +14,7 @@ repeated SingleMsgToUserPlatform resp = 1; message SingelMsgToUserResultList{ string userID =1; repeated SingleMsgToUserPlatform resp = 2; + bool onlinePush = 3; } message OnlineBatchPushOneMsgReq{ From 16d33b1c1fa64617c94a2fc08a0555ba0f35b678 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 18:17:11 +0800 Subject: [PATCH 345/752] singal offline push --- cmd/open_im_api/main.go | 4 +- config/config.yaml | 4 +- deploy_k8s/admin_cms/deployment.yaml | 2 +- internal/api/group/group.go | 24 +- internal/api/third/rtc.go | 49 ++ internal/msg_gateway/gate/logic.go | 9 +- internal/push/getui/push.go | 3 +- internal/push/jpush/push.go | 9 +- .../push/jpush/requestBody/notification.go | 19 +- internal/push/logic/push_to_client.go | 34 +- internal/push/push_interface.go | 4 +- internal/rpc/group/group.go | 5 + pkg/base_info/group_api_struct.go | 14 + ...inio_api_struct.go => third_api_struct.go} | 22 + pkg/common/config/config.go | 3 +- pkg/common/db/redisModel.go | 25 + pkg/proto/group/group.pb.go | 573 ++++++++++++------ pkg/proto/group/group.proto | 16 +- pkg/proto/sdk_ws/wrappers.proto | 123 ++++ 19 files changed, 718 insertions(+), 224 deletions(-) create mode 100644 internal/api/third/rtc.go rename pkg/base_info/{minio_api_struct.go => third_api_struct.go} (72%) create mode 100644 pkg/proto/sdk_ws/wrappers.proto diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 84ea9b705..294f79d9c 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -88,9 +88,8 @@ func main() { groupRouterGroup.POST("/cancel_mute_group_member", group.CancelMuteGroupMember) //MuteGroup groupRouterGroup.POST("/mute_group", group.MuteGroup) groupRouterGroup.POST("/cancel_mute_group", group.CancelMuteGroup) - groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname) - + groupRouterGroup.POST("/set_group_member_info", group.SetGroupMemberInfo) } //certificate authRouterGroup := r.Group("/auth") @@ -108,6 +107,7 @@ func main() { thirdGroup.POST("/minio_upload", apiThird.MinioUploadFile) thirdGroup.POST("/upload_update_app", apiThird.UploadUpdateApp) thirdGroup.POST("/get_download_url", apiThird.GetDownloadURL) + thirdGroup.POST("/get_rtc_invitation_info", apiThird.GetRTCInvitationInfo) } //Message chatGroup := r.Group("/msg") diff --git a/config/config.yaml b/config/config.yaml index 481bbc103..bfccb0eec 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,4 +1,5 @@ # The class cannot be named by Pascal or camel case. +# The class cannot be named by Pascal or camel case. # If it is not used, the corresponding structure will not be set, # and it will not be read naturally. serverversion: 2.0.0 @@ -697,5 +698,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - port: 11300 - address: 127.0.0.1 + signalTimeout: 300 diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml index 518655965..8ed81cc05 100644 --- a/deploy_k8s/admin_cms/deployment.yaml +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: admin-cms image: openim/admin_cms:v2.0.10k - imagePullPolicy: Always + imagePullPolicy: Always #每次启动都重新拉取镜像 ports: - containerPort: 10200 volumeMounts: diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 08ee1f274..a7e3c8244 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -806,6 +806,26 @@ func SetGroupMemberNickname(c *gin.Context) { c.JSON(http.StatusOK, resp) } -func GetGroupMemberIDListFromCache(c *gin.Context) { - +func SetGroupMemberInfo(c *gin.Context) { + //var ( + // req api.SetGroupMemberInfoReq + // resp api.SetGroupMemberInfoResp + //) + //if err := c.BindJSON(&req); err != nil { + // log.NewError("0", "BindJSON failed ", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + // return + //} + // + //var ok bool + //var errInfo string + //ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + //if !ok { + // errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + // log.NewError(req.OperationID, errMsg) + // c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + // return + //} + // + //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) } diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go new file mode 100644 index 000000000..4522c4e2c --- /dev/null +++ b/internal/api/third/rtc.go @@ -0,0 +1,49 @@ +package apiThird + +import ( + api "Open_IM/pkg/base_info" + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" + "Open_IM/pkg/utils" + "github.com/gin-gonic/gin" + "net/http" +) + +func GetRTCInvitationInfo(c *gin.Context) { + var ( + req api.GetRTCInvitationInfoReq + resp api.GetRTCInvitationInfoResp + ) + if err := c.Bind(&req); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + var ok bool + var errInfo string + ok, _, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + var err error + invitationInfo, err := db.DB.GetSignalInfoFromCache(req.ClientMsgID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSignalInfoFromCache", err.Error(), req) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + return + } + resp.Data.OpUserID = invitationInfo.OpUserID + resp.Data.Invitation.RoomID = invitationInfo.Invitation.RoomID + resp.Data.Invitation.SessionType = invitationInfo.Invitation.SessionType + resp.Data.Invitation.GroupID = invitationInfo.Invitation.GroupID + resp.Data.Invitation.InviterUserID = invitationInfo.Invitation.InviterUserID + resp.Data.Invitation.InviteeUserIDList = invitationInfo.Invitation.InviteeUserIDList + resp.Data.Invitation.MediaType = invitationInfo.Invitation.MediaType + resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout + c.JSON(http.StatusInternalServerError, resp) +} diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 884f5f842..ccb1cd6eb 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -3,6 +3,7 @@ package gate import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" @@ -237,7 +238,13 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { ws.sendSignalMsgResp(conn, 200, err.Error(), m, &signalResp) } else { log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String()) - ws.sendSignalMsgResp(conn, 0, "", m, &signalResp) + // save invitation info for offline push + if err := db.DB.CacheSignalInfo(pbData.MsgData); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), m, &signalResp) + ws.sendSignalMsgResp(conn, 200, err.Error(), m, &signalResp) + } else { + ws.sendSignalMsgResp(conn, 0, "", m, &signalResp) + } } } else { log.NewError(m.OperationID, utils.GetSelfFuncName(), respPb.IsPass, respPb.CommonResp.ErrCode, respPb.CommonResp.ErrMsg) diff --git a/internal/push/getui/push.go b/internal/push/getui/push.go index b91b51fc2..fd4efaaa8 100644 --- a/internal/push/getui/push.go +++ b/internal/push/getui/push.go @@ -1,6 +1,7 @@ package getui import ( + "Open_IM/internal/push/logic" "Open_IM/pkg/common/config" "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" @@ -98,7 +99,7 @@ func newGetuiClient() *Getui { return &Getui{} } -func (g *Getui) Push(userIDList []string, alert, detailContent, operationID string) (resp string, err error) { +func (g *Getui) Push(userIDList []string, alert, detailContent, operationID string, opts logic.PushOpts) (resp string, err error) { token, err := db.DB.GetGetuiToken() log.NewDebug(operationID, utils.GetSelfFuncName(), "token:", token) if err != nil { diff --git a/internal/push/jpush/push.go b/internal/push/jpush/push.go index aaaee306d..e1f2ea12f 100644 --- a/internal/push/jpush/push.go +++ b/internal/push/jpush/push.go @@ -3,6 +3,7 @@ package push import ( "Open_IM/internal/push/jpush/common" "Open_IM/internal/push/jpush/requestBody" + "Open_IM/internal/push/logic" "Open_IM/pkg/common/config" "bytes" "encoding/json" @@ -32,13 +33,19 @@ func (j *JPush) SetAlias(cid, alias string) (resp string, err error) { return resp, nil } -func (j *JPush) Push(accounts []string, alert, detailContent, operationID string) (string, error) { +func (j *JPush) Push(accounts []string, alert, detailContent, operationID string, opts logic.PushOpts) (string, error) { var pf requestBody.Platform pf.SetAll() var au requestBody.Audience au.SetAlias(accounts) var no requestBody.Notification no.SetAlert(alert) + + var extras requestBody.Extras + if opts.Signal.ClientMsgID != "" { + extras.ClientMsgID = opts.Signal.ClientMsgID + } + no.SetExtras(extras) var me requestBody.Message me.SetMsgContent(detailContent) var o requestBody.Options diff --git a/internal/push/jpush/requestBody/notification.go b/internal/push/jpush/requestBody/notification.go index 9ff49a439..9dd878147 100644 --- a/internal/push/jpush/requestBody/notification.go +++ b/internal/push/jpush/requestBody/notification.go @@ -15,11 +15,17 @@ type Android struct { Intent struct { URL string `json:"url,omitempty"` } `json:"intent,omitempty"` + Extras Extras `json:"extras"` } type Ios struct { - Alert string `json:"alert,omitempty"` - Sound string `json:"sound,omitempty"` - Badge string `json:"badge,omitempty"` + Alert string `json:"alert,omitempty"` + Sound string `json:"sound,omitempty"` + Badge string `json:"badge,omitempty"` + Extras Extras `json:"extras"` +} + +type Extras struct { + ClientMsgID string `json:"clientMsgID"` } func (n *Notification) SetAlert(alert string) { @@ -29,8 +35,13 @@ func (n *Notification) SetAlert(alert string) { n.IOS.Alert = alert n.IOS.Sound = "default" n.IOS.Badge = "+1" - } + +func (n *Notification) SetExtras(extras Extras) { + n.IOS.Extras = extras + n.Android.Extras = extras +} + func (n *Notification) SetAndroidIntent() { n.Android.Intent.URL = config.Config.Push.Jpns.PushIntent } diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index ba657aff1..5584c8d21 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -7,16 +7,17 @@ package logic import ( - jpush "Open_IM/internal/push/jpush" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbPush "Open_IM/pkg/proto/push" pbRelay "Open_IM/pkg/proto/relay" + pbRtc "Open_IM/pkg/proto/rtc" "Open_IM/pkg/utils" "context" "encoding/json" + "github.com/golang/protobuf/proto" "google.golang.org/grpc" "strings" ) @@ -35,6 +36,14 @@ type AtContent struct { var grpcCons []*grpc.ClientConn +type PushOpts struct { + Signal Signal +} + +type Signal struct { + ClientMsgID string +} + func MsgToUser(pushMsg *pbPush.PushMsgReq) { var wsResult []*pbRelay.SingleMsgToUser isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) @@ -117,9 +126,13 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } if offlinePusher == nil { - offlinePusher = jpush.JPushClient + break } - pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) + opts, err := GetOfflinePushOpts(pushMsg) + if err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) + } + pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID, opts) if err != nil { log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) } else { @@ -133,6 +146,21 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } +func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts PushOpts, err error) { + if pushMsg.MsgData.ContentType < constant.SignalingNotificationEnd && pushMsg.MsgData.ContentType > constant.SignalingNotification { + req := &pbRtc.SignalMessageAssembleReq{} + if err := proto.Unmarshal(pushMsg.MsgData.Content, req); err != nil { + return opts, err + } + switch req.SignalReq.Payload.(type) { + case *pbRtc.SignalReq_Invite, *pbRtc.SignalReq_InviteInGroup: + opts.Signal.ClientMsgID = pushMsg.MsgData.ClientMsgID + } + + } + return opts, nil +} + //func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { // m.MsgID = rpcChat.GetMsgID(m.SendID) // m.ClientMsgID = m.MsgID diff --git a/internal/push/push_interface.go b/internal/push/push_interface.go index 59b4764b4..cc6e25271 100644 --- a/internal/push/push_interface.go +++ b/internal/push/push_interface.go @@ -1,5 +1,7 @@ package push +import "Open_IM/internal/push/logic" + type OfflinePusher interface { - Push(userIDList []string, alert, detailContent, operationID string) (resp string, err error) + Push(userIDList []string, alert, detailContent, operationID string, opts logic.PushOpts) (resp string, err error) } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 05c226378..699e9b395 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1405,3 +1405,8 @@ func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.S log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}) return &pbGroup.SetGroupMemberNicknameResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil } + +func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfoReq) (resp *pbGroup.SetGroupMemberInfoResp, err error) { + resp = &pbGroup.SetGroupMemberInfoResp{} + return resp, nil +} diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index 169cb0b6e..3e021fdb4 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -232,3 +232,17 @@ type SetGroupMemberNicknameReq struct { type SetGroupMemberNicknameResp struct { CommResp } + +type SetGroupMemberInfoReq struct { + OperationID string `json:"operationID" binding:"required"` + GroupID string `json:"groupID" binding:"required"` + UserID string `json:"userID" binding:"required"` + Nickname string `json:"nickname"` + FaceURL string `json:"user_group_face_url"` + RoleLevel string `json:"role_level"` + Ex string `json:"ex"` +} + +type SetGroupMemberInfoResp struct { + CommResp +} diff --git a/pkg/base_info/minio_api_struct.go b/pkg/base_info/third_api_struct.go similarity index 72% rename from pkg/base_info/minio_api_struct.go rename to pkg/base_info/third_api_struct.go index b553e22c7..8cfb1cfaf 100644 --- a/pkg/base_info/minio_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -57,3 +57,25 @@ type GetDownloadURLResp struct { UpdateLog string `json:"update_log"` } `json:"data"` } + +type GetRTCInvitationInfoReq struct { + OperationID string `json:"operationID" binding:"required"` + ClientMsgID string `json:"clientMsgID"` +} + +type GetRTCInvitationInfoResp struct { + CommResp + Data struct { + OpUserID string `json:"opUserID"` + Invitation struct { + InviterUserID string `json:"InviterUserID"` + InviteeUserIDList []string `json:"InviteeUserIDList"` + GroupID string `json:"groupID"` + RoomID string `json:"roomID"` + Timeout int32 `json:"timeout"` + MediaType string `json:"mediaType"` + SessionType int32 `json:"sessionType"` + } `json:"invitation"` + OfflinePushInfo struct{} `json:"offlinePushInfo"` + } +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 53ac8023e..d17677781 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -442,8 +442,7 @@ type config struct { ImAPIURL string `yaml:"imAPIURL"` } Rtc struct { - Port int `yaml:"port"` - Address string `yaml:"address"` + SignalTimeout string `yaml:"signalTimeout"` } `yaml:"rtc"` } type PConversation struct { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 92b27c614..3a4fbd5cb 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -5,6 +5,7 @@ import ( "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" + pbRtc "Open_IM/pkg/proto/rtc" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "encoding/json" @@ -12,6 +13,8 @@ import ( "fmt" "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" + osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" "strconv" ) @@ -29,6 +32,7 @@ const ( blackListCache = "BLACK_LIST_CACHE:" groupCache = "GROUP_CACHE:" messageCache = "MESSAGE_CACHE:" + SignalCache = "Signal_CACHE:" ) func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { @@ -342,3 +346,24 @@ func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID st } } } + +func (d *DataBases) CacheSignalInfo(msg *pbCommon.MsgData) error { + key := SignalCache + msg.ClientMsgID + _, err := d.Exec("SET", key, msg.Content, "ex", config.Config.Rtc.SignalTimeout) + return err +} + +func (d *DataBases) GetSignalInfoFromCache(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { + key := SignalCache + clientMsgID + result, err := redis.Bytes(d.Exec("GET", key)) + log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result) + if err != nil { + invitationInfo := &pbRtc.SignalInviteReq{} + return invitationInfo, err + } + req := &pbRtc.SignalMessageAssembleReq{} + err = proto.Unmarshal(result, req) + req2 := req.SignalReq.Payload.(*pbRtc.SignalReq_Invite) + invitationInfo = req2.Invite + return invitationInfo, err +} diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index db8bb328b..f46f9f6d6 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -7,6 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import sdk_ws "Open_IM/pkg/proto/sdk_ws" +import wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" import ( context "golang.org/x/net/context" @@ -36,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{0} + return fileDescriptor_group_e5947a1008c7a757, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +83,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{1} + return fileDescriptor_group_e5947a1008c7a757, []int{1} } func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) @@ -131,7 +132,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{2} + return fileDescriptor_group_e5947a1008c7a757, []int{2} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -199,7 +200,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{3} + return fileDescriptor_group_e5947a1008c7a757, []int{3} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -253,7 +254,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{4} + return fileDescriptor_group_e5947a1008c7a757, []int{4} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -307,7 +308,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{5} + return fileDescriptor_group_e5947a1008c7a757, []int{5} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -361,7 +362,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{6} + return fileDescriptor_group_e5947a1008c7a757, []int{6} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -413,7 +414,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{7} + return fileDescriptor_group_e5947a1008c7a757, []int{7} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -453,7 +454,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{8} + return fileDescriptor_group_e5947a1008c7a757, []int{8} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -507,7 +508,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{9} + return fileDescriptor_group_e5947a1008c7a757, []int{9} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -561,7 +562,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{10} + return fileDescriptor_group_e5947a1008c7a757, []int{10} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -614,7 +615,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{11} + return fileDescriptor_group_e5947a1008c7a757, []int{11} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -663,7 +664,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{12} + return fileDescriptor_group_e5947a1008c7a757, []int{12} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -729,7 +730,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{13} + return fileDescriptor_group_e5947a1008c7a757, []int{13} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -770,7 +771,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{14} + return fileDescriptor_group_e5947a1008c7a757, []int{14} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -829,7 +830,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{15} + return fileDescriptor_group_e5947a1008c7a757, []int{15} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -872,7 +873,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{16} + return fileDescriptor_group_e5947a1008c7a757, []int{16} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -945,7 +946,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{17} + return fileDescriptor_group_e5947a1008c7a757, []int{17} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -985,7 +986,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{18} + return fileDescriptor_group_e5947a1008c7a757, []int{18} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -1037,7 +1038,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{19} + return fileDescriptor_group_e5947a1008c7a757, []int{19} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -1079,7 +1080,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{20} + return fileDescriptor_group_e5947a1008c7a757, []int{20} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -1148,7 +1149,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{} func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{21} + return fileDescriptor_group_e5947a1008c7a757, []int{21} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -1210,7 +1211,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{} func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{22} + return fileDescriptor_group_e5947a1008c7a757, []int{22} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -1271,7 +1272,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{23} + return fileDescriptor_group_e5947a1008c7a757, []int{23} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -1327,7 +1328,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{24} + return fileDescriptor_group_e5947a1008c7a757, []int{24} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1394,7 +1395,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} } func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (*Id2Result) ProtoMessage() {} func (*Id2Result) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{25} + return fileDescriptor_group_e5947a1008c7a757, []int{25} } func (m *Id2Result) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Id2Result.Unmarshal(m, b) @@ -1441,7 +1442,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{26} + return fileDescriptor_group_e5947a1008c7a757, []int{26} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1495,7 +1496,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{27} + return fileDescriptor_group_e5947a1008c7a757, []int{27} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1549,7 +1550,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{} func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{28} + return fileDescriptor_group_e5947a1008c7a757, []int{28} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1605,7 +1606,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{29} + return fileDescriptor_group_e5947a1008c7a757, []int{29} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1673,7 +1674,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{30} + return fileDescriptor_group_e5947a1008c7a757, []int{30} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1727,7 +1728,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{31} + return fileDescriptor_group_e5947a1008c7a757, []int{31} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1781,7 +1782,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{32} + return fileDescriptor_group_e5947a1008c7a757, []int{32} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1835,7 +1836,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{33} + return fileDescriptor_group_e5947a1008c7a757, []int{33} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1889,7 +1890,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{34} + return fileDescriptor_group_e5947a1008c7a757, []int{34} } func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) @@ -1943,7 +1944,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{35} + return fileDescriptor_group_e5947a1008c7a757, []int{35} } func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) @@ -1996,7 +1997,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{36} + return fileDescriptor_group_e5947a1008c7a757, []int{36} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -2043,7 +2044,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{37} + return fileDescriptor_group_e5947a1008c7a757, []int{37} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -2096,7 +2097,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{38} + return fileDescriptor_group_e5947a1008c7a757, []int{38} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -2143,7 +2144,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{39} + return fileDescriptor_group_e5947a1008c7a757, []int{39} } func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) @@ -2194,7 +2195,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{} func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{40} + return fileDescriptor_group_e5947a1008c7a757, []int{40} } func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) @@ -2228,7 +2229,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{41} + return fileDescriptor_group_e5947a1008c7a757, []int{41} } func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) @@ -2286,7 +2287,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{42} + return fileDescriptor_group_e5947a1008c7a757, []int{42} } func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) @@ -2318,7 +2319,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{43} + return fileDescriptor_group_e5947a1008c7a757, []int{43} } func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) @@ -2362,7 +2363,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{44} + return fileDescriptor_group_e5947a1008c7a757, []int{44} } func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) @@ -2394,7 +2395,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{45} + return fileDescriptor_group_e5947a1008c7a757, []int{45} } func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) @@ -2439,7 +2440,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{46} + return fileDescriptor_group_e5947a1008c7a757, []int{46} } func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) @@ -2480,7 +2481,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{47} + return fileDescriptor_group_e5947a1008c7a757, []int{47} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -2541,7 +2542,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{48} + return fileDescriptor_group_e5947a1008c7a757, []int{48} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -2596,7 +2597,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{49} + return fileDescriptor_group_e5947a1008c7a757, []int{49} } func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) @@ -2656,7 +2657,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{50} + return fileDescriptor_group_e5947a1008c7a757, []int{50} } func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) @@ -2704,7 +2705,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{51} + return fileDescriptor_group_e5947a1008c7a757, []int{51} } func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) @@ -2764,7 +2765,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{} func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{52} + return fileDescriptor_group_e5947a1008c7a757, []int{52} } func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) @@ -2811,7 +2812,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{53} + return fileDescriptor_group_e5947a1008c7a757, []int{53} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -2863,7 +2864,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{54} + return fileDescriptor_group_e5947a1008c7a757, []int{54} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -2905,7 +2906,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{55} + return fileDescriptor_group_e5947a1008c7a757, []int{55} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -2971,7 +2972,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{56} + return fileDescriptor_group_e5947a1008c7a757, []int{56} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -3012,7 +3013,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{57} + return fileDescriptor_group_e5947a1008c7a757, []int{57} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -3071,7 +3072,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{58} + return fileDescriptor_group_e5947a1008c7a757, []int{58} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -3111,7 +3112,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{59} + return fileDescriptor_group_e5947a1008c7a757, []int{59} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -3163,7 +3164,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{60} + return fileDescriptor_group_e5947a1008c7a757, []int{60} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -3203,7 +3204,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{61} + return fileDescriptor_group_e5947a1008c7a757, []int{61} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -3255,7 +3256,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{62} + return fileDescriptor_group_e5947a1008c7a757, []int{62} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -3297,7 +3298,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{63} + return fileDescriptor_group_e5947a1008c7a757, []int{63} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -3363,7 +3364,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{64} + return fileDescriptor_group_e5947a1008c7a757, []int{64} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -3390,6 +3391,130 @@ func (m *SetGroupMemberNicknameResp) GetCommonResp() *CommonResp { return nil } +type SetGroupMemberInfoReq struct { + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + Nickname *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=nickname" json:"nickname,omitempty"` + FaceURL *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` + RoleLevel *wrapperspb.Int32Value `protobuf:"bytes,6,opt,name=roleLevel" json:"roleLevel,omitempty"` + Ex *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} } +func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } +func (*SetGroupMemberInfoReq) ProtoMessage() {} +func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { + return fileDescriptor_group_e5947a1008c7a757, []int{65} +} +func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) +} +func (m *SetGroupMemberInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGroupMemberInfoReq.Marshal(b, m, deterministic) +} +func (dst *SetGroupMemberInfoReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGroupMemberInfoReq.Merge(dst, src) +} +func (m *SetGroupMemberInfoReq) XXX_Size() int { + return xxx_messageInfo_SetGroupMemberInfoReq.Size(m) +} +func (m *SetGroupMemberInfoReq) XXX_DiscardUnknown() { + xxx_messageInfo_SetGroupMemberInfoReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGroupMemberInfoReq proto.InternalMessageInfo + +func (m *SetGroupMemberInfoReq) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *SetGroupMemberInfoReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *SetGroupMemberInfoReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *SetGroupMemberInfoReq) GetNickname() *wrapperspb.StringValue { + if m != nil { + return m.Nickname + } + return nil +} + +func (m *SetGroupMemberInfoReq) GetFaceURL() *wrapperspb.StringValue { + if m != nil { + return m.FaceURL + } + return nil +} + +func (m *SetGroupMemberInfoReq) GetRoleLevel() *wrapperspb.Int32Value { + if m != nil { + return m.RoleLevel + } + return nil +} + +func (m *SetGroupMemberInfoReq) GetEx() *wrapperspb.StringValue { + if m != nil { + return m.Ex + } + return nil +} + +type SetGroupMemberInfoResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{} } +func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) } +func (*SetGroupMemberInfoResp) ProtoMessage() {} +func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) { + return fileDescriptor_group_e5947a1008c7a757, []int{66} +} +func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b) +} +func (m *SetGroupMemberInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGroupMemberInfoResp.Marshal(b, m, deterministic) +} +func (dst *SetGroupMemberInfoResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGroupMemberInfoResp.Merge(dst, src) +} +func (m *SetGroupMemberInfoResp) XXX_Size() int { + return xxx_messageInfo_SetGroupMemberInfoResp.Size(m) +} +func (m *SetGroupMemberInfoResp) XXX_DiscardUnknown() { + xxx_messageInfo_SetGroupMemberInfoResp.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGroupMemberInfoResp proto.InternalMessageInfo + +func (m *SetGroupMemberInfoResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + func init() { proto.RegisterType((*CommonResp)(nil), "group.CommonResp") proto.RegisterType((*GroupAddMemberInfo)(nil), "group.GroupAddMemberInfo") @@ -3456,6 +3581,8 @@ func init() { proto.RegisterType((*CancelMuteGroupResp)(nil), "group.CancelMuteGroupResp") proto.RegisterType((*SetGroupMemberNicknameReq)(nil), "group.SetGroupMemberNicknameReq") proto.RegisterType((*SetGroupMemberNicknameResp)(nil), "group.SetGroupMemberNicknameResp") + proto.RegisterType((*SetGroupMemberInfoReq)(nil), "group.SetGroupMemberInfoReq") + proto.RegisterType((*SetGroupMemberInfoResp)(nil), "group.SetGroupMemberInfoResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -3499,6 +3626,7 @@ type GroupClient interface { MuteGroup(ctx context.Context, in *MuteGroupReq, opts ...grpc.CallOption) (*MuteGroupResp, error) CancelMuteGroup(ctx context.Context, in *CancelMuteGroupReq, opts ...grpc.CallOption) (*CancelMuteGroupResp, error) SetGroupMemberNickname(ctx context.Context, in *SetGroupMemberNicknameReq, opts ...grpc.CallOption) (*SetGroupMemberNicknameResp, error) + SetGroupMemberInfo(ctx context.Context, in *SetGroupMemberInfoReq, opts ...grpc.CallOption) (*SetGroupMemberInfoResp, error) } type groupClient struct { @@ -3779,6 +3907,15 @@ func (c *groupClient) SetGroupMemberNickname(ctx context.Context, in *SetGroupMe return out, nil } +func (c *groupClient) SetGroupMemberInfo(ctx context.Context, in *SetGroupMemberInfoReq, opts ...grpc.CallOption) (*SetGroupMemberInfoResp, error) { + out := new(SetGroupMemberInfoResp) + err := grpc.Invoke(ctx, "/group.group/SetGroupMemberInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Group service type GroupServer interface { @@ -3812,6 +3949,7 @@ type GroupServer interface { MuteGroup(context.Context, *MuteGroupReq) (*MuteGroupResp, error) CancelMuteGroup(context.Context, *CancelMuteGroupReq) (*CancelMuteGroupResp, error) SetGroupMemberNickname(context.Context, *SetGroupMemberNicknameReq) (*SetGroupMemberNicknameResp, error) + SetGroupMemberInfo(context.Context, *SetGroupMemberInfoReq) (*SetGroupMemberInfoResp, error) } func RegisterGroupServer(s *grpc.Server, srv GroupServer) { @@ -4358,6 +4496,24 @@ func _Group_SetGroupMemberNickname_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Group_SetGroupMemberInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetGroupMemberInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServer).SetGroupMemberInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/group.group/SetGroupMemberInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServer).SetGroupMemberInfo(ctx, req.(*SetGroupMemberInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Group_serviceDesc = grpc.ServiceDesc{ ServiceName: "group.group", HandlerType: (*GroupServer)(nil), @@ -4482,147 +4638,160 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "SetGroupMemberNickname", Handler: _Group_SetGroupMemberNickname_Handler, }, + { + MethodName: "SetGroupMemberInfo", + Handler: _Group_SetGroupMemberInfo_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_95c16320d90511af) } +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_e5947a1008c7a757) } -var fileDescriptor_group_95c16320d90511af = []byte{ - // 2138 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x1a, 0x4d, 0x6f, 0x1c, 0x49, - 0x55, 0xed, 0xf1, 0xd8, 0x9e, 0x67, 0x4f, 0xc6, 0x2e, 0xef, 0xd8, 0xe3, 0x5e, 0x6f, 0xd6, 0xa9, - 0x0d, 0xab, 0x88, 0x0f, 0x5b, 0x64, 0xa5, 0x1c, 0x58, 0x44, 0x88, 0x3f, 0x12, 0x4f, 0x92, 0xb1, - 0x49, 0x3b, 0x5c, 0x22, 0xa1, 0x30, 0x3b, 0x5d, 0x1e, 0x0d, 0x9e, 0xe9, 0x6e, 0x77, 0xf5, 0x38, - 0xc0, 0x65, 0xc5, 0x65, 0xa5, 0x05, 0x0e, 0x20, 0x24, 0x4e, 0x48, 0xb0, 0x27, 0x38, 0x70, 0xe0, - 0x00, 0x67, 0xc4, 0xcf, 0xe0, 0x57, 0x70, 0xe2, 0x8e, 0xba, 0xaa, 0xba, 0xba, 0xba, 0xab, 0xba, - 0x3d, 0x99, 0x49, 0xc8, 0x65, 0xa4, 0xf7, 0xea, 0x55, 0xbf, 0x8f, 0x7a, 0xef, 0xd5, 0x7b, 0xaf, - 0x06, 0xd6, 0xfa, 0xa1, 0x3f, 0x0e, 0xf6, 0xd8, 0xef, 0x6e, 0x10, 0xfa, 0x91, 0x8f, 0xaa, 0x0c, - 0xb0, 0x6f, 0x9d, 0x06, 0xc4, 0x7b, 0xd9, 0xee, 0xec, 0x05, 0x17, 0xfd, 0x3d, 0xb6, 0xb2, 0x47, - 0xdd, 0x8b, 0x97, 0xaf, 0xe8, 0xde, 0x2b, 0xca, 0x29, 0xf1, 0xf7, 0x00, 0x0e, 0xfc, 0xd1, 0xc8, - 0xf7, 0x1c, 0x42, 0x03, 0xd4, 0x82, 0xc5, 0xa3, 0x30, 0x3c, 0xf0, 0x5d, 0xd2, 0xb2, 0x76, 0xac, - 0x3b, 0x55, 0x27, 0x01, 0xd1, 0x06, 0x2c, 0x1c, 0x85, 0x61, 0x87, 0xf6, 0x5b, 0x73, 0x3b, 0xd6, - 0x9d, 0x9a, 0x23, 0x20, 0xfc, 0x18, 0xd0, 0xa3, 0x98, 0xd7, 0x03, 0xd7, 0xed, 0x90, 0xd1, 0x67, - 0x24, 0x6c, 0x7b, 0xe7, 0x7e, 0x4c, 0xfd, 0x43, 0x4a, 0xc2, 0xf6, 0x21, 0xfb, 0x4c, 0xcd, 0x11, - 0x10, 0xda, 0x86, 0x9a, 0xe3, 0x0f, 0xc9, 0x53, 0x72, 0x45, 0x86, 0xec, 0x43, 0x55, 0x27, 0x45, - 0xe0, 0xff, 0x58, 0x70, 0xe3, 0x20, 0x24, 0xdd, 0x88, 0xb0, 0x4f, 0x3a, 0xe4, 0x12, 0x3d, 0x80, - 0x1b, 0x6d, 0x6f, 0x10, 0xf1, 0x4f, 0x3f, 0x1d, 0xd0, 0xa8, 0x65, 0xed, 0x54, 0xee, 0x2c, 0xdf, - 0xdd, 0xda, 0xe5, 0xea, 0xea, 0xbc, 0x9d, 0xdc, 0x06, 0xf4, 0x1d, 0xa8, 0x31, 0xaa, 0x78, 0x91, - 0xf1, 0x5c, 0xbe, 0xbb, 0xbd, 0x4b, 0x49, 0x78, 0x45, 0xc2, 0x97, 0xdd, 0x60, 0xf0, 0x32, 0xe8, - 0x86, 0xdd, 0x11, 0xdd, 0x95, 0x34, 0x4e, 0x4a, 0x8e, 0x76, 0x60, 0xf9, 0x34, 0x20, 0x61, 0x37, - 0x1a, 0xf8, 0x5e, 0xfb, 0xb0, 0x55, 0x61, 0xca, 0xa8, 0x28, 0x64, 0xc3, 0xd2, 0x69, 0x20, 0x74, - 0x9d, 0x67, 0xcb, 0x12, 0x66, 0xbb, 0x5f, 0x79, 0x24, 0x14, 0xcb, 0x55, 0xb1, 0x3b, 0x45, 0xe1, - 0xcf, 0xa1, 0x91, 0x51, 0x78, 0x9a, 0x23, 0xc8, 0x2a, 0x58, 0x79, 0x2d, 0x05, 0x71, 0x08, 0xab, - 0x8f, 0x48, 0xc4, 0x60, 0xca, 0xd6, 0xc8, 0x65, 0x2c, 0x36, 0x27, 0x38, 0x94, 0x06, 0xaf, 0x39, - 0x2a, 0x2a, 0x6f, 0x96, 0xb9, 0x72, 0xb3, 0x54, 0xb2, 0x66, 0xc1, 0x5f, 0x5a, 0xb0, 0x96, 0x63, - 0x3a, 0x95, 0xde, 0xfb, 0x50, 0x97, 0x8a, 0x30, 0x49, 0x2b, 0xcc, 0x35, 0xca, 0x75, 0xcf, 0x6e, - 0xc1, 0xbf, 0xb2, 0xa0, 0x71, 0x26, 0x64, 0x49, 0xf4, 0xcf, 0xd8, 0xd3, 0x7a, 0x3d, 0x87, 0x51, - 0xf5, 0x9e, 0x33, 0xb8, 0x43, 0xa9, 0x33, 0xe1, 0x23, 0x58, 0xcd, 0x0a, 0x43, 0x03, 0xf4, 0x6d, - 0x35, 0x40, 0x85, 0x38, 0x6b, 0xc2, 0xfb, 0xd3, 0x05, 0x47, 0x21, 0xc2, 0x3f, 0x07, 0x3b, 0xb1, - 0xef, 0x83, 0x20, 0x18, 0x0e, 0x7a, 0xec, 0xfb, 0xb1, 0xbe, 0xb1, 0x7a, 0xaa, 0x88, 0x56, 0xb9, - 0x88, 0x86, 0x83, 0xbd, 0x09, 0xf0, 0x30, 0xf4, 0x47, 0x99, 0xa3, 0x55, 0x30, 0xf8, 0x0f, 0x16, - 0xbc, 0x5f, 0xc8, 0x7c, 0xaa, 0x63, 0x7e, 0x02, 0xab, 0x49, 0x3a, 0x18, 0x13, 0x1a, 0x29, 0x27, - 0xfd, 0x61, 0xd1, 0xa9, 0x08, 0x52, 0x47, 0xdb, 0x88, 0x23, 0xd8, 0x7e, 0x44, 0xa2, 0x58, 0x56, - 0x87, 0x5c, 0x1a, 0x8c, 0x53, 0x94, 0xb8, 0x66, 0x3b, 0xd7, 0x3f, 0x5a, 0xf0, 0x41, 0x09, 0xdb, - 0xa9, 0x4e, 0xd9, 0x68, 0x97, 0xb9, 0x69, 0xed, 0xf2, 0x4f, 0x0b, 0x9a, 0xcf, 0xc3, 0xae, 0x47, - 0xcf, 0x49, 0xc8, 0x16, 0x59, 0x96, 0x8a, 0x2d, 0xd2, 0x82, 0x45, 0x11, 0xfa, 0xc2, 0x24, 0x09, - 0x88, 0x3e, 0x86, 0x1b, 0xa7, 0x43, 0x57, 0xcd, 0x70, 0xdc, 0x32, 0x39, 0x6c, 0x4c, 0x77, 0x42, - 0x5e, 0xa9, 0x74, 0xdc, 0x44, 0x39, 0x6c, 0xde, 0x8e, 0xf3, 0xe5, 0x59, 0xa5, 0x9a, 0xcb, 0x2a, - 0x4f, 0x60, 0xc3, 0xa4, 0xc0, 0x74, 0x11, 0xf4, 0x85, 0x05, 0x2b, 0x8f, 0xfd, 0x81, 0x27, 0xef, - 0xa1, 0x62, 0x2b, 0xdc, 0x04, 0x70, 0xc8, 0x65, 0x87, 0x50, 0xda, 0xed, 0x13, 0x61, 0x01, 0x05, - 0x53, 0x96, 0x09, 0xaf, 0xd7, 0x18, 0xef, 0x43, 0x5d, 0x91, 0x63, 0x3a, 0x65, 0xfe, 0x1d, 0x87, - 0x64, 0x2e, 0x1e, 0xe3, 0x05, 0xdf, 0xa3, 0x44, 0xe4, 0x7b, 0x55, 0x0a, 0xab, 0xdc, 0xee, 0x79, - 0xef, 0x57, 0x2c, 0x53, 0xd1, 0x2c, 0xa3, 0xa4, 0x8a, 0xf9, 0x7c, 0xaa, 0x88, 0xd7, 0x8f, 0xbb, - 0x9e, 0x3b, 0x24, 0x6e, 0x1c, 0xf4, 0xfc, 0x3c, 0x15, 0x0c, 0xc2, 0xb0, 0xc2, 0x21, 0x87, 0xd0, - 0xf1, 0x30, 0x6a, 0x2d, 0xb0, 0x7c, 0x91, 0xc1, 0xe1, 0x67, 0xb0, 0x5d, 0xac, 0xda, 0x74, 0xe6, - 0x3a, 0x87, 0x95, 0x67, 0xe3, 0x41, 0x34, 0xc1, 0xd1, 0xcf, 0x76, 0x0d, 0xee, 0x43, 0x5d, 0xe1, - 0x33, 0x9d, 0xac, 0x5f, 0x59, 0xd0, 0x4c, 0xb2, 0x6d, 0x5a, 0xf2, 0x94, 0x4b, 0x3d, 0x53, 0x2a, - 0x8b, 0x13, 0xe4, 0xc3, 0xc1, 0x30, 0x22, 0x21, 0x3b, 0xd0, 0xaa, 0x23, 0xa0, 0x98, 0xdf, 0x09, - 0xf9, 0x69, 0x74, 0x46, 0x2e, 0xd9, 0x49, 0x56, 0x9d, 0x04, 0xc4, 0x7f, 0xb5, 0x60, 0xc3, 0x24, - 0xe3, 0x54, 0x97, 0xc1, 0x43, 0x80, 0x51, 0x5a, 0x0b, 0xf2, 0x6b, 0xe0, 0xe3, 0xa2, 0x74, 0xc7, - 0xb9, 0x3d, 0x1c, 0x0f, 0x87, 0xec, 0x36, 0x55, 0x76, 0xc6, 0x9c, 0x3d, 0x21, 0x2e, 0xd7, 0x23, - 0x01, 0xf1, 0x6f, 0x34, 0x71, 0x65, 0x61, 0x54, 0x9a, 0x04, 0x14, 0xb1, 0xe6, 0x58, 0xc5, 0xa4, - 0xb2, 0x9b, 0x2d, 0x09, 0xfc, 0xce, 0x82, 0x4d, 0xa3, 0x48, 0xef, 0xd2, 0x84, 0xf8, 0x6f, 0x16, - 0xa0, 0x27, 0x83, 0xde, 0x85, 0x42, 0x57, 0x6e, 0xa4, 0xaf, 0xc3, 0x6a, 0x4c, 0x4f, 0x5c, 0xae, - 0xb8, 0x62, 0x2a, 0x0d, 0x1f, 0x0b, 0xef, 0x90, 0x2e, 0xf5, 0x3d, 0x61, 0x2e, 0x01, 0xe5, 0x8d, - 0x55, 0x2d, 0x0f, 0xb9, 0x85, 0x5c, 0xc8, 0x7d, 0x0a, 0xb5, 0xb6, 0x7b, 0x97, 0xa7, 0x8e, 0xc2, - 0xab, 0x9e, 0xb1, 0x66, 0x09, 0x87, 0x37, 0x28, 0x02, 0xc2, 0x9f, 0xc3, 0xba, 0xa6, 0xee, 0x54, - 0x07, 0x70, 0x0f, 0xea, 0x52, 0x0a, 0xe5, 0x0c, 0x56, 0x45, 0xa8, 0xcb, 0x35, 0x27, 0x4b, 0x86, - 0xc7, 0x2c, 0xd6, 0xe3, 0xeb, 0x80, 0xb8, 0x4c, 0x8a, 0x24, 0xd6, 0xb3, 0x89, 0xd6, 0xd2, 0x12, - 0xed, 0x0e, 0x2c, 0xfb, 0x7a, 0x9e, 0xf2, 0x27, 0xcc, 0x53, 0x5f, 0xf0, 0x80, 0xd0, 0xf8, 0xce, - 0xd4, 0xab, 0x4c, 0x5c, 0xaf, 0xa7, 0xe4, 0xf8, 0xef, 0x16, 0xbc, 0xd7, 0xf6, 0xae, 0x06, 0x11, - 0x89, 0x25, 0x7b, 0xee, 0xcb, 0x0c, 0x7d, 0x7d, 0x1e, 0x2e, 0xbe, 0xa4, 0x52, 0x47, 0x9b, 0xcf, - 0x38, 0xda, 0x37, 0x61, 0x8d, 0xf3, 0x52, 0xbd, 0xb5, 0xca, 0xbc, 0x55, 0x5f, 0x28, 0x75, 0xba, - 0x5f, 0x58, 0xd0, 0x34, 0x88, 0xfd, 0x7f, 0x75, 0x1d, 0x0f, 0xde, 0x93, 0x45, 0xf9, 0x70, 0x38, - 0x49, 0xb0, 0xce, 0x56, 0xf0, 0xfe, 0x56, 0xb9, 0x97, 0x14, 0x86, 0xef, 0x34, 0x5f, 0xfd, 0xde, - 0x82, 0xa5, 0x83, 0xce, 0x19, 0x23, 0x9b, 0xa9, 0xc7, 0xbb, 0x03, 0x0d, 0xce, 0xab, 0x4b, 0x23, - 0x12, 0x9e, 0x74, 0x47, 0x49, 0xd9, 0x97, 0x47, 0xa3, 0xdb, 0xa2, 0x43, 0xe5, 0xa8, 0xb6, 0x2b, - 0x4c, 0x95, 0x45, 0xc6, 0xe9, 0x7d, 0x39, 0x31, 0x56, 0x7c, 0x28, 0xdb, 0x42, 0x36, 0xf6, 0x65, - 0x7e, 0x2c, 0x29, 0x02, 0x1d, 0x02, 0xfc, 0xa0, 0xdb, 0x1f, 0x78, 0xcc, 0xd4, 0x62, 0x9e, 0x71, - 0xdb, 0x20, 0xba, 0xa8, 0xee, 0x53, 0x5a, 0x47, 0xd9, 0x37, 0xc1, 0x11, 0x7e, 0x65, 0xc1, 0x4a, - 0x2a, 0x15, 0x0d, 0xd0, 0xb7, 0xa0, 0x96, 0x98, 0x8f, 0x8a, 0x29, 0x4c, 0x23, 0xa9, 0x4e, 0x04, - 0xde, 0x49, 0x29, 0xde, 0x90, 0x9c, 0xd2, 0x16, 0xe3, 0x11, 0x65, 0x52, 0x56, 0x9d, 0x14, 0x81, - 0xaf, 0x52, 0x11, 0x69, 0x6c, 0xb9, 0x2c, 0x4f, 0xeb, 0xcd, 0xd8, 0x46, 0x4f, 0x27, 0xf8, 0x4f, - 0x16, 0xd4, 0x15, 0xc6, 0xef, 0xca, 0x38, 0x36, 0x2c, 0x25, 0xb6, 0x10, 0xb6, 0x91, 0x30, 0x3e, - 0x4d, 0x67, 0x2c, 0x86, 0x70, 0x77, 0xb3, 0xe1, 0xee, 0x4e, 0xa0, 0xf3, 0x05, 0x34, 0x39, 0xc8, - 0x67, 0x55, 0x67, 0x51, 0x37, 0x1a, 0xd3, 0xf2, 0x8f, 0x6e, 0xc0, 0x02, 0x27, 0x4b, 0x6e, 0x52, - 0x0e, 0x4d, 0xe0, 0x7c, 0x2d, 0xd8, 0x30, 0x31, 0xe3, 0x9d, 0x19, 0x12, 0x4b, 0xac, 0x9d, 0xf6, - 0x87, 0xe4, 0x5a, 0x21, 0x58, 0xda, 0x72, 0x93, 0xb4, 0xc2, 0xa1, 0xec, 0x28, 0xb2, 0x92, 0x1b, - 0x45, 0x4e, 0x50, 0x94, 0x35, 0x61, 0x5d, 0x93, 0x83, 0x06, 0xf8, 0x29, 0xdc, 0x38, 0x24, 0x43, - 0xa2, 0x8c, 0x30, 0x67, 0x31, 0xfa, 0x1a, 0x34, 0x32, 0x5f, 0xa3, 0x01, 0xee, 0x40, 0x23, 0x39, - 0xd8, 0xfd, 0x9f, 0xb5, 0xdd, 0x59, 0x39, 0xdc, 0x4f, 0x07, 0x80, 0xfc, 0x73, 0x34, 0x40, 0xdf, - 0x48, 0x13, 0xa5, 0x08, 0x22, 0xcd, 0x97, 0x25, 0x01, 0xfe, 0x87, 0xd6, 0x82, 0xd0, 0x83, 0xce, - 0x59, 0xb9, 0x58, 0x36, 0x2c, 0xc5, 0x46, 0x53, 0x52, 0xa7, 0x84, 0x73, 0xa1, 0x51, 0x79, 0x33, - 0x31, 0x6c, 0x38, 0xbf, 0x7f, 0xe9, 0x75, 0x3e, 0x93, 0x9b, 0x06, 0xe8, 0xfb, 0xb0, 0xc8, 0xef, - 0x8d, 0x24, 0x94, 0x27, 0xbd, 0x6e, 0x92, 0x6d, 0xe8, 0xc8, 0x10, 0xdf, 0x5f, 0x33, 0x2a, 0xc1, - 0x7b, 0xd5, 0x02, 0x2d, 0x6e, 0x02, 0x70, 0x0e, 0x4a, 0xfa, 0x53, 0x30, 0xf8, 0xd7, 0x16, 0xb4, - 0x1c, 0x32, 0xf2, 0xaf, 0xc8, 0x6b, 0x99, 0xbf, 0x05, 0x8b, 0x3c, 0x08, 0xa8, 0xa8, 0xbf, 0x13, - 0xf0, 0xb5, 0xe6, 0xdd, 0x6e, 0x6e, 0xde, 0xed, 0xe2, 0x0e, 0x6c, 0x15, 0x48, 0xc3, 0x2f, 0x7e, - 0x3a, 0xee, 0xf5, 0x08, 0xa5, 0x62, 0xa2, 0x9c, 0x80, 0x71, 0x84, 0x9e, 0x77, 0x07, 0x43, 0xe2, - 0x0a, 0x69, 0x04, 0x84, 0xbf, 0xb4, 0xa0, 0xf9, 0xc0, 0x75, 0xdf, 0x86, 0x6a, 0xae, 0xae, 0x9a, - 0x5b, 0xaa, 0xda, 0x63, 0xd8, 0x30, 0x89, 0x32, 0x95, 0x5e, 0x03, 0x68, 0x1c, 0x0e, 0xe8, 0x68, - 0x40, 0xa9, 0xcc, 0x11, 0x36, 0x2c, 0xf9, 0xb9, 0x99, 0xac, 0x1f, 0x4c, 0x5c, 0xbd, 0xb7, 0x60, - 0xb1, 0x9f, 0xad, 0x6e, 0x05, 0x88, 0x8f, 0x60, 0x35, 0xcb, 0x8a, 0x8f, 0x19, 0x7a, 0x93, 0x8c, - 0x19, 0x52, 0x22, 0xfc, 0x17, 0x0b, 0x50, 0x67, 0x1c, 0x91, 0xdc, 0x75, 0xf2, 0x96, 0xa4, 0x8e, - 0x0d, 0x37, 0x56, 0x87, 0x46, 0x02, 0x42, 0x18, 0x56, 0x46, 0xe3, 0x88, 0xb8, 0x67, 0xa4, 0xe7, - 0x7b, 0x2e, 0x65, 0xdd, 0x5f, 0xdd, 0xc9, 0xe0, 0xf0, 0x31, 0xac, 0x6b, 0x92, 0x4e, 0xa7, 0xf4, - 0x2f, 0x2d, 0x68, 0x1d, 0x74, 0xbd, 0x1e, 0x19, 0xbe, 0x7b, 0xd5, 0xf1, 0x09, 0x6c, 0x15, 0xc8, - 0x32, 0x9d, 0x72, 0xe7, 0xb0, 0x22, 0xbf, 0xf4, 0x36, 0x1d, 0x70, 0x1f, 0xea, 0x0a, 0x9f, 0xe9, - 0x64, 0x1d, 0x02, 0xca, 0xe9, 0xfe, 0x36, 0x25, 0x3e, 0x86, 0x75, 0x8d, 0xdb, 0x74, 0x72, 0xff, - 0xd9, 0x82, 0xad, 0xb3, 0xcc, 0x0d, 0x73, 0x32, 0xe8, 0x5d, 0x78, 0xdd, 0x51, 0x52, 0xb1, 0xf4, - 0xb3, 0xad, 0x57, 0x3f, 0x6d, 0xbd, 0x3c, 0x41, 0x98, 0xdc, 0x8e, 0x09, 0x9c, 0xd1, 0xba, 0x52, - 0xae, 0xf5, 0xbc, 0xae, 0x75, 0xea, 0x5d, 0xd5, 0x8c, 0x77, 0x9d, 0x82, 0x5d, 0x24, 0xe8, 0x54, - 0x73, 0xc9, 0xbb, 0xff, 0x5d, 0x03, 0xfe, 0x04, 0x8d, 0xbe, 0x0b, 0xcb, 0xbd, 0xf4, 0x85, 0x13, - 0x35, 0x93, 0x7d, 0x99, 0x67, 0x5e, 0x7b, 0xc3, 0x84, 0xa6, 0x01, 0xba, 0x07, 0xb5, 0x9f, 0x24, - 0xe3, 0x6f, 0xb4, 0x2e, 0x88, 0xd4, 0xc1, 0xbc, 0xfd, 0x9e, 0x8e, 0xe4, 0xfb, 0x2e, 0x93, 0xd9, - 0xaa, 0xdc, 0xa7, 0x4e, 0x75, 0xe5, 0xbe, 0xec, 0x08, 0x76, 0x1f, 0xea, 0x7d, 0xf5, 0x65, 0x12, - 0x6d, 0x26, 0xef, 0xcc, 0xb9, 0x47, 0x52, 0xbb, 0x65, 0x5e, 0xa0, 0x01, 0xba, 0x0f, 0x2b, 0x54, - 0x79, 0xc4, 0x43, 0x89, 0x6e, 0xb9, 0x67, 0x46, 0x7b, 0xd3, 0x88, 0xa7, 0x01, 0xfa, 0x31, 0x6c, - 0xf6, 0xcd, 0x2f, 0x68, 0xe8, 0x56, 0x8e, 0xab, 0xfe, 0x82, 0x65, 0xe3, 0xeb, 0x48, 0x68, 0x80, - 0xce, 0x61, 0xab, 0x5f, 0xf4, 0x1c, 0x85, 0x3e, 0x4a, 0x3f, 0x50, 0xf8, 0x4e, 0x66, 0xdf, 0xbe, - 0x9e, 0x88, 0x06, 0xe8, 0x19, 0xa0, 0x48, 0x7b, 0x93, 0x41, 0xdb, 0x62, 0xaf, 0xf1, 0xbd, 0xc9, - 0xfe, 0xa0, 0x64, 0x95, 0x06, 0xa8, 0x07, 0xad, 0x7e, 0xc1, 0xc0, 0x1f, 0xe1, 0xcc, 0x9f, 0x02, - 0x8c, 0x8f, 0x1d, 0xf6, 0x47, 0xd7, 0xd2, 0x70, 0xb9, 0xfb, 0xda, 0xc4, 0x5a, 0xca, 0x6d, 0x1c, - 0xb8, 0x4b, 0xb9, 0x0b, 0x46, 0xdd, 0xcf, 0x61, 0xbd, 0xaf, 0x8f, 0x70, 0x91, 0x79, 0x97, 0xf4, - 0xb2, 0x9b, 0x65, 0xcb, 0x34, 0x40, 0xc7, 0xd0, 0xb8, 0xc8, 0xce, 0x24, 0x51, 0xf2, 0xcf, 0x08, - 0x7d, 0x34, 0x6b, 0xdb, 0x45, 0x4b, 0x52, 0xe5, 0xdc, 0x90, 0x4f, 0x55, 0x59, 0x9f, 0x3b, 0xaa, - 0x2a, 0x9b, 0xa6, 0x83, 0x27, 0xb0, 0x36, 0xc8, 0xcf, 0xbd, 0xd0, 0xfb, 0xc9, 0xa8, 0xca, 0x30, - 0xc8, 0xb3, 0xb7, 0x8b, 0x17, 0xf9, 0xf7, 0xfa, 0xf9, 0x99, 0x92, 0xfc, 0x9e, 0x69, 0xbc, 0x65, - 0x6f, 0x17, 0x2f, 0xf2, 0x40, 0x55, 0x5b, 0x1f, 0x19, 0xa8, 0xb9, 0xf6, 0xca, 0xde, 0x34, 0xe2, - 0x69, 0x80, 0x3e, 0x81, 0xa5, 0x04, 0x87, 0x50, 0x8e, 0x28, 0xde, 0xb8, 0xae, 0xe1, 0x78, 0x6a, - 0x92, 0x39, 0x03, 0xe5, 0x29, 0xa8, 0x9a, 0x9a, 0xb2, 0x13, 0x86, 0x67, 0xb2, 0xef, 0x55, 0x5a, - 0x62, 0x79, 0x40, 0xc6, 0xd6, 0x5c, 0x1e, 0x90, 0xb9, 0x97, 0x8e, 0xbd, 0x27, 0xd7, 0xc2, 0x4a, - 0xef, 0xd1, 0x5b, 0x6c, 0xe9, 0x3d, 0x86, 0xae, 0x37, 0xce, 0xf2, 0x4a, 0x9f, 0x2a, 0xb3, 0x7c, - 0xb6, 0x13, 0x96, 0x59, 0x3e, 0xd7, 0xd2, 0xc6, 0xaa, 0xe9, 0x9d, 0x58, 0x41, 0xb8, 0x89, 0x16, - 0xa0, 0x20, 0xdc, 0x64, 0x55, 0xfe, 0x02, 0x9a, 0xc6, 0x56, 0x04, 0x7d, 0x28, 0xf6, 0x15, 0xb5, - 0x4d, 0xf6, 0x4e, 0x39, 0x01, 0x17, 0x57, 0xef, 0x05, 0xa4, 0xb8, 0xc6, 0x8e, 0x45, 0x8a, 0x5b, - 0xd0, 0x44, 0xdc, 0x87, 0x15, 0xb5, 0x4e, 0x97, 0xae, 0x98, 0xeb, 0x13, 0xa4, 0x2b, 0x6a, 0x45, - 0xfd, 0x31, 0x34, 0x72, 0x95, 0xa1, 0x3c, 0x4a, 0xbd, 0x7a, 0x95, 0x47, 0x69, 0x2a, 0x26, 0x5f, - 0x40, 0xd3, 0x58, 0x69, 0x4a, 0xcb, 0x15, 0xd5, 0xc4, 0xd2, 0x72, 0xc5, 0x85, 0xea, 0x3d, 0xa8, - 0x49, 0xb4, 0xf4, 0x7d, 0xb5, 0xaa, 0x93, 0xbe, 0x9f, 0x2d, 0xbe, 0x8e, 0xa1, 0x91, 0xfb, 0xa8, - 0xd4, 0x4e, 0xaf, 0x0c, 0xa5, 0x76, 0xa6, 0x32, 0xee, 0x47, 0xb0, 0x61, 0xae, 0x74, 0xd0, 0x4e, - 0xee, 0x3a, 0xd6, 0x2a, 0x36, 0xfb, 0xd6, 0x35, 0x14, 0x34, 0xd8, 0x6f, 0xbc, 0xa8, 0xef, 0xf2, - 0x3f, 0xe2, 0x7d, 0xca, 0x7e, 0x3f, 0x5b, 0x60, 0xff, 0xb2, 0xfb, 0xe4, 0x7f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x14, 0x45, 0xba, 0x3b, 0xa4, 0x27, 0x00, 0x00, +var fileDescriptor_group_e5947a1008c7a757 = []byte{ + // 2274 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x4b, + 0x11, 0xd7, 0x78, 0xbd, 0xb6, 0xb7, 0x6c, 0x67, 0xed, 0x76, 0xd6, 0x5e, 0x4f, 0xfc, 0xf2, 0x9c, + 0x7e, 0xe1, 0x11, 0xc1, 0xc3, 0x16, 0x8e, 0x14, 0x01, 0x0f, 0x11, 0xe2, 0x3f, 0x89, 0x37, 0x89, + 0x6d, 0x32, 0xce, 0xe3, 0x10, 0x09, 0x85, 0xcd, 0x4e, 0x7b, 0xb5, 0x78, 0x77, 0x66, 0x3c, 0x3d, + 0xeb, 0x04, 0x2e, 0x4f, 0x5c, 0x9e, 0xf4, 0x80, 0x03, 0x08, 0x89, 0x13, 0x12, 0xe4, 0x04, 0x07, + 0x0e, 0x1c, 0xe0, 0x8c, 0xb8, 0x20, 0xbe, 0x02, 0x9f, 0x82, 0xaf, 0x80, 0xa6, 0xbb, 0xa7, 0xa7, + 0x67, 0xba, 0x67, 0xbc, 0x59, 0x27, 0xe4, 0xb2, 0x52, 0x57, 0x57, 0x4f, 0xff, 0xaa, 0xba, 0xaa, + 0xba, 0xaa, 0x7a, 0x61, 0xb1, 0x1b, 0xfa, 0xc3, 0x60, 0x93, 0xfd, 0x6e, 0x04, 0xa1, 0x1f, 0xf9, + 0xa8, 0xca, 0x06, 0xf6, 0x8d, 0xa3, 0x80, 0x78, 0xcf, 0x5b, 0x07, 0x9b, 0xc1, 0x69, 0x77, 0x93, + 0xcd, 0x6c, 0x52, 0xf7, 0xf4, 0xf9, 0x4b, 0xba, 0xf9, 0x92, 0x72, 0x4e, 0xfb, 0xab, 0xc5, 0x2c, + 0x61, 0x3b, 0x08, 0x48, 0x28, 0x18, 0xf1, 0xf7, 0x00, 0x76, 0xfc, 0xc1, 0xc0, 0xf7, 0x1c, 0x42, + 0x03, 0xd4, 0x84, 0xe9, 0xbd, 0x30, 0xdc, 0xf1, 0x5d, 0xd2, 0xb4, 0xd6, 0xad, 0x5b, 0x55, 0x27, + 0x19, 0xa2, 0x65, 0x98, 0xda, 0x0b, 0xc3, 0x03, 0xda, 0x6d, 0x4e, 0xac, 0x5b, 0xb7, 0x6a, 0x8e, + 0x18, 0xe1, 0x87, 0x80, 0x1e, 0xc4, 0xa0, 0xee, 0xb9, 0xee, 0x01, 0x19, 0xbc, 0x20, 0x61, 0xcb, + 0x3b, 0xf1, 0x63, 0xee, 0xcf, 0x28, 0x09, 0x5b, 0xbb, 0xec, 0x33, 0x35, 0x47, 0x8c, 0xd0, 0x1a, + 0xd4, 0x1c, 0xbf, 0x4f, 0x1e, 0x93, 0x73, 0xd2, 0x67, 0x1f, 0xaa, 0x3a, 0x29, 0x01, 0xff, 0xd7, + 0x82, 0x2b, 0x3b, 0x21, 0x69, 0x47, 0x84, 0x7d, 0xd2, 0x21, 0x67, 0xe8, 0x1e, 0x5c, 0x69, 0x79, + 0xbd, 0x88, 0x7f, 0xfa, 0x71, 0x8f, 0x46, 0x4d, 0x6b, 0xbd, 0x72, 0x6b, 0x76, 0x6b, 0x75, 0x83, + 0xeb, 0x45, 0xdf, 0xdb, 0xc9, 0x2d, 0x40, 0xdf, 0x81, 0x1a, 0xe3, 0x8a, 0x27, 0xd9, 0x9e, 0xb3, + 0x5b, 0x6b, 0x1b, 0x94, 0x84, 0xe7, 0x24, 0x7c, 0xde, 0x0e, 0x7a, 0xcf, 0x83, 0x76, 0xd8, 0x1e, + 0xd0, 0x0d, 0xc9, 0xe3, 0xa4, 0xec, 0x68, 0x1d, 0x66, 0x8f, 0x02, 0x12, 0xb6, 0xa3, 0x9e, 0xef, + 0xb5, 0x76, 0x9b, 0x15, 0x26, 0x8c, 0x4a, 0x42, 0x36, 0xcc, 0x1c, 0x05, 0x42, 0xd6, 0x49, 0x36, + 0x2d, 0xc7, 0x6c, 0xf5, 0x4b, 0x8f, 0x84, 0x62, 0xba, 0x2a, 0x56, 0xa7, 0x24, 0xfc, 0x39, 0xd4, + 0x33, 0x02, 0x8f, 0x73, 0x04, 0x59, 0x01, 0x2b, 0x6f, 0x24, 0x20, 0x0e, 0x61, 0xe1, 0x01, 0x89, + 0xd8, 0x98, 0xb2, 0x39, 0x72, 0x16, 0xc3, 0xe6, 0x0c, 0xbb, 0x52, 0xe1, 0x35, 0x47, 0x25, 0xe5, + 0xd5, 0x32, 0x51, 0xae, 0x96, 0x4a, 0x56, 0x2d, 0xf8, 0x4b, 0x0b, 0x16, 0x73, 0x9b, 0x8e, 0x25, + 0xf7, 0x36, 0xcc, 0x4b, 0x41, 0x18, 0xd2, 0x0a, 0x33, 0x8d, 0x72, 0xd9, 0xb3, 0x4b, 0xf0, 0x2f, + 0x2d, 0xa8, 0x1f, 0x0b, 0x2c, 0x89, 0xfc, 0x19, 0x7d, 0x5a, 0x6f, 0x66, 0x30, 0xaa, 0xdc, 0x13, + 0x06, 0x73, 0x28, 0x35, 0x26, 0xbc, 0x07, 0x0b, 0x59, 0x30, 0x34, 0x40, 0xdf, 0x54, 0x1d, 0x54, + 0xc0, 0x59, 0x14, 0xd6, 0x9f, 0x4e, 0x38, 0x0a, 0x13, 0xfe, 0x19, 0xd8, 0x89, 0x7e, 0xef, 0x05, + 0x41, 0xbf, 0xd7, 0x61, 0xdf, 0x8f, 0xe5, 0x8d, 0xc5, 0x53, 0x21, 0x5a, 0xe5, 0x10, 0x0d, 0x07, + 0x7b, 0x1d, 0xe0, 0x7e, 0xe8, 0x0f, 0x32, 0x47, 0xab, 0x50, 0xf0, 0xef, 0x2d, 0xb8, 0x56, 0xb8, + 0xf9, 0x58, 0xc7, 0xfc, 0x08, 0x16, 0x92, 0x70, 0x30, 0x24, 0x34, 0x52, 0x4e, 0xfa, 0xc3, 0xa2, + 0x53, 0x11, 0xac, 0x8e, 0xb6, 0x10, 0x47, 0xb0, 0xf6, 0x80, 0x44, 0x31, 0x56, 0x87, 0x9c, 0x19, + 0x94, 0x53, 0x14, 0xb8, 0x2e, 0x77, 0xae, 0x7f, 0xb0, 0xe0, 0x83, 0x92, 0x6d, 0xc7, 0x3a, 0x65, + 0xa3, 0x5e, 0x26, 0xc6, 0xd5, 0xcb, 0x3f, 0x2c, 0x68, 0x3c, 0x0d, 0xdb, 0x1e, 0x3d, 0x21, 0x21, + 0x9b, 0x64, 0x51, 0x2a, 0xd6, 0x48, 0x13, 0xa6, 0x85, 0xeb, 0x0b, 0x95, 0x24, 0x43, 0xf4, 0x31, + 0x5c, 0x39, 0xea, 0xbb, 0x6a, 0x84, 0xe3, 0x9a, 0xc9, 0x51, 0x63, 0xbe, 0x43, 0xf2, 0x52, 0xe5, + 0xe3, 0x2a, 0xca, 0x51, 0xf3, 0x7a, 0x9c, 0x2c, 0x8f, 0x2a, 0xd5, 0x5c, 0x54, 0x79, 0x04, 0xcb, + 0x26, 0x01, 0xc6, 0xf3, 0xa0, 0x2f, 0x2c, 0x98, 0x7b, 0xe8, 0xf7, 0x3c, 0x79, 0x0f, 0x15, 0x6b, + 0xe1, 0x3a, 0x80, 0x43, 0xce, 0x0e, 0x08, 0xa5, 0xed, 0x2e, 0x11, 0x1a, 0x50, 0x28, 0x65, 0x91, + 0xf0, 0x62, 0x89, 0xf1, 0x36, 0xcc, 0x2b, 0x38, 0xc6, 0x13, 0xe6, 0x3f, 0xb1, 0x4b, 0xe6, 0xfc, + 0x31, 0x9e, 0xf0, 0x3d, 0x4a, 0x44, 0xbc, 0x57, 0x51, 0x58, 0xe5, 0x7a, 0xcf, 0x5b, 0xbf, 0xa2, + 0x99, 0x8a, 0xa6, 0x19, 0x25, 0x54, 0x4c, 0xe6, 0x43, 0x45, 0x3c, 0xbf, 0xdf, 0xf6, 0xdc, 0x3e, + 0x71, 0x63, 0xa7, 0xe7, 0xe7, 0xa9, 0x50, 0x10, 0x86, 0x39, 0x3e, 0x72, 0x08, 0x1d, 0xf6, 0xa3, + 0xe6, 0x14, 0x8b, 0x17, 0x19, 0x1a, 0x7e, 0x02, 0x6b, 0xc5, 0xa2, 0x8d, 0xa7, 0xae, 0x13, 0x98, + 0x7b, 0x32, 0xec, 0x45, 0x23, 0x1c, 0xfd, 0xe5, 0xae, 0xc1, 0x6d, 0x98, 0x57, 0xf6, 0x19, 0x0f, + 0xeb, 0x6b, 0x0b, 0x1a, 0x49, 0xb4, 0x4d, 0x53, 0x9e, 0x72, 0xd4, 0x97, 0x0a, 0x65, 0x71, 0x80, + 0xbc, 0xdf, 0xeb, 0x47, 0x24, 0x64, 0x07, 0x5a, 0x75, 0xc4, 0x28, 0xde, 0xef, 0x90, 0xbc, 0x8a, + 0x8e, 0xc9, 0x19, 0x3b, 0xc9, 0xaa, 0x93, 0x0c, 0xf1, 0x5f, 0x2c, 0x58, 0x36, 0x61, 0x1c, 0xeb, + 0x32, 0xb8, 0x0f, 0x30, 0x48, 0x73, 0x41, 0x7e, 0x0d, 0x7c, 0x5c, 0x14, 0xee, 0xf8, 0x6e, 0xf7, + 0x87, 0xfd, 0x3e, 0xbb, 0x4d, 0x95, 0x95, 0xf1, 0xce, 0x9e, 0x80, 0xcb, 0xe5, 0x48, 0x86, 0xf8, + 0xd7, 0x1a, 0x5c, 0x99, 0x18, 0x95, 0x06, 0x01, 0x05, 0xd6, 0x04, 0xcb, 0x98, 0xd4, 0xed, 0x2e, + 0x17, 0x04, 0x7e, 0x6b, 0xc1, 0x8a, 0x11, 0xd2, 0xfb, 0x54, 0x21, 0xfe, 0xab, 0x05, 0xe8, 0x51, + 0xaf, 0x73, 0xaa, 0xf0, 0x95, 0x2b, 0xe9, 0x6b, 0xb0, 0x10, 0xf3, 0x13, 0x97, 0x0b, 0xae, 0xa8, + 0x4a, 0xa3, 0xc7, 0xe0, 0x1d, 0xd2, 0xa6, 0xbe, 0x27, 0xd4, 0x25, 0x46, 0x79, 0x65, 0x55, 0xcb, + 0x5d, 0x6e, 0x2a, 0xe7, 0x72, 0x9f, 0x42, 0xad, 0xe5, 0x6e, 0xf1, 0xd0, 0x51, 0x78, 0xd5, 0xb3, + 0xad, 0x59, 0xc0, 0xe1, 0x05, 0x8a, 0x18, 0xe1, 0xcf, 0x61, 0x49, 0x13, 0x77, 0xac, 0x03, 0xb8, + 0x03, 0xf3, 0x12, 0x85, 0x72, 0x06, 0x0b, 0xc2, 0xd5, 0xe5, 0x9c, 0x93, 0x65, 0xc3, 0x43, 0xe6, + 0xeb, 0xf1, 0x75, 0x40, 0x5c, 0x86, 0x22, 0xf1, 0xf5, 0x6c, 0xa0, 0xb5, 0xb4, 0x40, 0xbb, 0x0e, + 0xb3, 0xbe, 0x1e, 0xa7, 0xfc, 0x11, 0xe3, 0xd4, 0x17, 0xdc, 0x21, 0xb4, 0x7d, 0x2f, 0x55, 0xab, + 0x8c, 0x9c, 0xaf, 0xa7, 0xec, 0xf8, 0x6f, 0x16, 0x5c, 0x6d, 0x79, 0xe7, 0xbd, 0x88, 0xc4, 0xc8, + 0x9e, 0xfa, 0x32, 0x42, 0x5f, 0x1c, 0x87, 0x8b, 0x2f, 0xa9, 0xd4, 0xd0, 0x26, 0x33, 0x86, 0xf6, + 0x09, 0x2c, 0xf2, 0xbd, 0x54, 0x6b, 0xad, 0x32, 0x6b, 0xd5, 0x27, 0x4a, 0x8d, 0xee, 0xe7, 0x16, + 0x34, 0x0c, 0xb0, 0xff, 0xaf, 0xa6, 0xe3, 0xc1, 0x55, 0x99, 0x94, 0xf7, 0xfb, 0xa3, 0x38, 0xeb, + 0xe5, 0x12, 0xde, 0xdf, 0x28, 0xf7, 0x92, 0xb2, 0xe1, 0x7b, 0x8d, 0x57, 0xbf, 0xb3, 0x60, 0x66, + 0xe7, 0xe0, 0x98, 0xb1, 0x5d, 0xaa, 0xc6, 0xbb, 0x05, 0x75, 0xbe, 0x57, 0x9b, 0x46, 0x24, 0x3c, + 0x6c, 0x0f, 0x92, 0xb4, 0x2f, 0x4f, 0x46, 0x37, 0x45, 0x85, 0xca, 0x49, 0x2d, 0x57, 0xa8, 0x2a, + 0x4b, 0x8c, 0xc3, 0xfb, 0x6c, 0xa2, 0xac, 0xf8, 0x50, 0xd6, 0x04, 0x36, 0xf6, 0x65, 0x7e, 0x2c, + 0x29, 0x01, 0xed, 0x02, 0xfc, 0xa0, 0xdd, 0xed, 0x79, 0x4c, 0xd5, 0xa2, 0x9f, 0x71, 0xd3, 0x00, + 0x5d, 0x64, 0xf7, 0x29, 0xaf, 0xa3, 0xac, 0x1b, 0xe1, 0x08, 0x5f, 0x5b, 0x30, 0x97, 0xa2, 0xa2, + 0x01, 0xfa, 0x06, 0xd4, 0x12, 0xf5, 0x51, 0xd1, 0x85, 0xa9, 0x27, 0xd9, 0x89, 0xa0, 0x3b, 0x29, + 0xc7, 0x5b, 0xc2, 0x29, 0x75, 0x31, 0x1c, 0x50, 0x86, 0xb2, 0xea, 0xa4, 0x04, 0x7c, 0x9e, 0x42, + 0xa4, 0xb1, 0xe6, 0xb2, 0x7b, 0x5a, 0x6f, 0x47, 0x37, 0x7a, 0x38, 0xc1, 0x7f, 0xb4, 0x60, 0x5e, + 0xd9, 0xf8, 0x7d, 0x29, 0xc7, 0x86, 0x99, 0x44, 0x17, 0x42, 0x37, 0x72, 0x8c, 0x8f, 0xd2, 0x1e, + 0x8b, 0xc1, 0xdd, 0xdd, 0xac, 0xbb, 0xbb, 0x23, 0xc8, 0x7c, 0x0a, 0x0d, 0x3e, 0xe4, 0xbd, 0xaa, + 0xe3, 0xa8, 0x1d, 0x0d, 0x69, 0xf9, 0x47, 0x97, 0x61, 0x8a, 0xb3, 0x25, 0x37, 0x29, 0x1f, 0x8d, + 0x60, 0x7c, 0x4d, 0x58, 0x36, 0x6d, 0xc6, 0x2b, 0x33, 0x24, 0xa6, 0x58, 0x39, 0xed, 0xf7, 0xc9, + 0x85, 0x20, 0x58, 0xd8, 0x72, 0x93, 0xb0, 0xc2, 0x47, 0xd9, 0x56, 0x64, 0x25, 0xd7, 0x8a, 0x1c, + 0x21, 0x29, 0x6b, 0xc0, 0x92, 0x86, 0x83, 0x06, 0xf8, 0x31, 0x5c, 0xd9, 0x25, 0x7d, 0xa2, 0xb4, + 0x30, 0x2f, 0xa3, 0xf4, 0x45, 0xa8, 0x67, 0xbe, 0x46, 0x03, 0x7c, 0x00, 0xf5, 0xe4, 0x60, 0xb7, + 0x7f, 0xda, 0x72, 0x2f, 0xbb, 0xc3, 0xdd, 0xb4, 0x01, 0xc8, 0x3f, 0x47, 0x03, 0xf4, 0xf5, 0x34, + 0x50, 0x0a, 0x27, 0xd2, 0x6c, 0x59, 0x32, 0xe0, 0xbf, 0x6b, 0x25, 0x08, 0xdd, 0x39, 0x38, 0x2e, + 0x87, 0x65, 0xc3, 0x4c, 0xac, 0x34, 0x25, 0x74, 0xca, 0x71, 0xce, 0x35, 0x2a, 0x6f, 0xc7, 0x87, + 0x0d, 0xe7, 0xf7, 0x4f, 0x3d, 0xcf, 0x67, 0xb8, 0x69, 0x80, 0xbe, 0x0f, 0xd3, 0xfc, 0xde, 0x48, + 0x5c, 0x79, 0xd4, 0xeb, 0x26, 0x59, 0x86, 0xf6, 0x0c, 0xfe, 0xfd, 0x15, 0xa3, 0x10, 0xbc, 0x56, + 0x2d, 0x90, 0xe2, 0x3a, 0x00, 0xdf, 0x41, 0x09, 0x7f, 0x0a, 0x05, 0xff, 0xca, 0x82, 0xa6, 0x43, + 0x06, 0xfe, 0x39, 0x79, 0x23, 0xf5, 0x37, 0x61, 0x9a, 0x3b, 0x01, 0x15, 0xf9, 0x77, 0x32, 0x7c, + 0xa3, 0x7e, 0xb7, 0x9b, 0xeb, 0x77, 0xbb, 0xf8, 0x00, 0x56, 0x0b, 0xd0, 0xf0, 0x8b, 0x9f, 0x0e, + 0x3b, 0x1d, 0x42, 0xa9, 0xe8, 0x28, 0x27, 0xc3, 0xd8, 0x43, 0x4f, 0xda, 0xbd, 0x3e, 0x71, 0x05, + 0x1a, 0x31, 0xc2, 0x5f, 0x5a, 0xd0, 0xb8, 0xe7, 0xba, 0xef, 0x42, 0x34, 0x57, 0x17, 0xcd, 0x2d, + 0x15, 0xed, 0x21, 0x2c, 0x9b, 0xa0, 0x8c, 0x25, 0x57, 0x0f, 0xea, 0xbb, 0x3d, 0x3a, 0xe8, 0x51, + 0x2a, 0x63, 0x84, 0x0d, 0x33, 0x7e, 0xae, 0x27, 0xeb, 0x07, 0x23, 0x67, 0xef, 0x4d, 0x98, 0xee, + 0x66, 0xb3, 0x5b, 0x31, 0xc4, 0x7b, 0xb0, 0x90, 0xdd, 0x8a, 0xb7, 0x19, 0x3a, 0xa3, 0xb4, 0x19, + 0x52, 0x26, 0xfc, 0x67, 0x0b, 0xd0, 0xc1, 0x30, 0x22, 0xb9, 0xeb, 0xe4, 0x1d, 0xa1, 0x8e, 0x15, + 0x37, 0x54, 0x9b, 0x46, 0x62, 0x84, 0x30, 0xcc, 0x0d, 0x86, 0x11, 0x71, 0x8f, 0x49, 0xc7, 0xf7, + 0x5c, 0xca, 0xaa, 0xbf, 0x79, 0x27, 0x43, 0xc3, 0xfb, 0xb0, 0xa4, 0x21, 0x1d, 0x4f, 0xe8, 0x5f, + 0x58, 0xd0, 0xdc, 0x69, 0x7b, 0x1d, 0xd2, 0x7f, 0xff, 0xa2, 0xe3, 0x43, 0x58, 0x2d, 0xc0, 0x32, + 0x9e, 0x70, 0x27, 0x30, 0x27, 0xbf, 0xf4, 0x2e, 0x0d, 0x70, 0x1b, 0xe6, 0x95, 0x7d, 0xc6, 0xc3, + 0xda, 0x07, 0x94, 0x93, 0xfd, 0x5d, 0x22, 0xde, 0x87, 0x25, 0x6d, 0xb7, 0xf1, 0x70, 0xff, 0xc9, + 0x82, 0xd5, 0xe3, 0xcc, 0x0d, 0x73, 0xd8, 0xeb, 0x9c, 0x7a, 0xed, 0x41, 0x92, 0xb1, 0x74, 0xb3, + 0xa5, 0x57, 0x37, 0x2d, 0xbd, 0x3c, 0xc1, 0x98, 0xdc, 0x8e, 0xc9, 0x38, 0x23, 0x75, 0xa5, 0x5c, + 0xea, 0x49, 0x5d, 0xea, 0xd4, 0xba, 0xaa, 0x19, 0xeb, 0x3a, 0x02, 0xbb, 0x08, 0xe8, 0x78, 0x7d, + 0xc9, 0x7f, 0x4d, 0x40, 0x23, 0xfb, 0x45, 0xa5, 0x87, 0x56, 0x20, 0x76, 0x0a, 0x6e, 0x22, 0xe3, + 0xf5, 0x39, 0xb1, 0x2a, 0xba, 0x58, 0xdf, 0x52, 0x14, 0x36, 0x29, 0x6a, 0xb9, 0xae, 0xef, 0x77, + 0xfb, 0x84, 0x3f, 0x72, 0xbf, 0x18, 0x9e, 0x6c, 0x1c, 0x47, 0x61, 0xcf, 0xeb, 0xfe, 0xb0, 0xdd, + 0x1f, 0x12, 0x45, 0x9d, 0x77, 0x60, 0xfa, 0xa4, 0xdd, 0x21, 0x9f, 0x39, 0x8f, 0x99, 0x46, 0x2e, + 0x5a, 0x98, 0x30, 0xa3, 0x6f, 0x43, 0x2d, 0x94, 0xc9, 0xe3, 0x14, 0x5b, 0x79, 0x4d, 0x5b, 0xd9, + 0xf2, 0xa2, 0xdb, 0x5b, 0x7c, 0x61, 0xca, 0x8d, 0x3e, 0x81, 0x09, 0xf2, 0xaa, 0x39, 0x3d, 0xc2, + 0x6e, 0x13, 0xe4, 0x15, 0x7e, 0x04, 0xcb, 0x26, 0x3d, 0x8e, 0x75, 0x2a, 0x5b, 0xff, 0x46, 0xc0, + 0xff, 0x41, 0x80, 0xbe, 0x0b, 0xb3, 0x9d, 0xf4, 0xdd, 0x19, 0x35, 0x92, 0x75, 0x99, 0xc7, 0x77, + 0x7b, 0xd9, 0x44, 0xa6, 0x01, 0xba, 0x03, 0xb5, 0x9f, 0x24, 0x8f, 0x12, 0x68, 0x49, 0x30, 0xa9, + 0xcf, 0x25, 0xf6, 0x55, 0x9d, 0xc8, 0xd7, 0x9d, 0x25, 0x1d, 0x6f, 0xb9, 0x4e, 0xed, 0xb5, 0xcb, + 0x75, 0xd9, 0xc6, 0xf8, 0x36, 0xcc, 0x77, 0xd5, 0xf7, 0x62, 0xb4, 0x92, 0xbc, 0xfe, 0xe7, 0x9e, + 0xae, 0xed, 0xa6, 0x79, 0x82, 0x06, 0xe8, 0x2e, 0xcc, 0x51, 0xe5, 0x69, 0x15, 0x25, 0xb2, 0xe5, + 0x1e, 0x7f, 0xed, 0x15, 0x23, 0x9d, 0x06, 0xe8, 0xc7, 0xb0, 0xd2, 0x35, 0xbf, 0x6b, 0xa2, 0x1b, + 0xb9, 0x5d, 0xf5, 0x77, 0x45, 0x1b, 0x5f, 0xc4, 0x42, 0x03, 0x74, 0x02, 0xab, 0xdd, 0xa2, 0x47, + 0x42, 0xf4, 0x51, 0xfa, 0x81, 0xc2, 0xd7, 0x4b, 0xfb, 0xe6, 0xc5, 0x4c, 0x34, 0x40, 0x4f, 0x00, + 0x45, 0xda, 0x4b, 0x19, 0x5a, 0x13, 0x6b, 0x8d, 0xaf, 0x80, 0xf6, 0x07, 0x25, 0xb3, 0x34, 0x40, + 0x1d, 0x68, 0x76, 0x0b, 0x9e, 0x61, 0x10, 0xce, 0xfc, 0x55, 0xc3, 0xf8, 0x04, 0x65, 0x7f, 0x74, + 0x21, 0x0f, 0xc7, 0xdd, 0xd5, 0xde, 0x11, 0x24, 0x6e, 0xe3, 0x33, 0x88, 0xc4, 0x5d, 0xf0, 0x00, + 0xf1, 0x14, 0x96, 0xba, 0x7a, 0x63, 0x1d, 0x99, 0x57, 0x49, 0x2b, 0xbb, 0x5e, 0x36, 0x4d, 0x03, + 0xb4, 0x0f, 0xf5, 0xd3, 0x6c, 0xa7, 0x18, 0x25, 0xff, 0x57, 0xd1, 0x1b, 0xe6, 0xb6, 0x5d, 0x34, + 0x25, 0x45, 0xce, 0xb5, 0x5e, 0x55, 0x91, 0xf5, 0x6e, 0xb0, 0x2a, 0xb2, 0xa9, 0x67, 0x7b, 0x08, + 0x8b, 0xbd, 0x7c, 0x37, 0x12, 0x5d, 0x4b, 0x1a, 0x88, 0x86, 0xf6, 0xaa, 0xbd, 0x56, 0x3c, 0xc9, + 0xbf, 0xd7, 0xcd, 0x77, 0xfa, 0xe4, 0xf7, 0x4c, 0x4d, 0x47, 0x7b, 0xad, 0x78, 0x92, 0x3b, 0xaa, + 0x5a, 0x90, 0x4a, 0x47, 0xcd, 0x15, 0xbd, 0xf6, 0x8a, 0x91, 0x4e, 0x03, 0x74, 0x1b, 0x66, 0x12, + 0x1a, 0x42, 0x39, 0xa6, 0x78, 0xe1, 0x92, 0x46, 0xe3, 0xa1, 0x49, 0xc6, 0x0c, 0x94, 0xe7, 0xa0, + 0x6a, 0x68, 0xca, 0xf6, 0x7d, 0x9e, 0xc8, 0x6e, 0x84, 0xd2, 0xa8, 0x90, 0x07, 0x64, 0x6c, 0x98, + 0xc8, 0x03, 0x32, 0x77, 0x38, 0x62, 0xeb, 0xc9, 0x35, 0x16, 0xa4, 0xf5, 0xe8, 0x8d, 0x0f, 0x69, + 0x3d, 0x86, 0x5e, 0x44, 0x1c, 0xe5, 0x95, 0xee, 0x81, 0x8c, 0xf2, 0xd9, 0xfe, 0x84, 0x8c, 0xf2, + 0xb9, 0x46, 0x43, 0x2c, 0x9a, 0x5e, 0x1f, 0x17, 0xb8, 0x9b, 0x28, 0xcc, 0x0a, 0xdc, 0x4d, 0xd6, + 0x4a, 0xcf, 0xa0, 0x61, 0x2c, 0x10, 0xd1, 0x87, 0x62, 0x5d, 0x51, 0x31, 0x6b, 0xaf, 0x97, 0x33, + 0x70, 0xb8, 0x7a, 0x85, 0x26, 0xe1, 0x1a, 0xeb, 0x48, 0x09, 0xb7, 0xa0, 0xb4, 0xbb, 0x0b, 0x73, + 0x6a, 0xf5, 0x24, 0x4d, 0x31, 0x57, 0xbd, 0x49, 0x53, 0xd4, 0x4a, 0xad, 0x7d, 0xa8, 0xe7, 0xf2, + 0x75, 0x79, 0x94, 0x7a, 0x4d, 0x21, 0x8f, 0xd2, 0x94, 0xe2, 0x3f, 0x83, 0x86, 0x31, 0xff, 0x97, + 0x9a, 0x2b, 0xaa, 0x54, 0xa4, 0xe6, 0x8a, 0xcb, 0x87, 0x3b, 0x50, 0x93, 0x64, 0x69, 0xfb, 0x6a, + 0xae, 0x2d, 0x6d, 0x3f, 0x9b, 0x12, 0xef, 0x43, 0x3d, 0xf7, 0x51, 0x29, 0x9d, 0x9e, 0xaf, 0x4b, + 0xe9, 0x4c, 0xc9, 0xf5, 0x8f, 0xf2, 0x59, 0x4e, 0x92, 0x7f, 0xa2, 0xf5, 0xdc, 0x75, 0xac, 0xe5, + 0xd1, 0xf6, 0x8d, 0x0b, 0x38, 0xb8, 0x69, 0xe8, 0x49, 0x94, 0x34, 0x0d, 0x63, 0x9e, 0x2a, 0x4d, + 0xc3, 0x9c, 0x7d, 0x6d, 0xd7, 0x9f, 0xcd, 0x6f, 0xf0, 0xbf, 0x66, 0x7e, 0xca, 0x7e, 0x5f, 0x4c, + 0xb1, 0x14, 0xee, 0xf6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x20, 0x7b, 0x1e, 0x22, 0xb6, 0x29, + 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index f0db47bad..be76b2f9d 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -1,5 +1,6 @@ syntax = "proto3"; import "Open_IM/pkg/proto/sdk_ws/ws.proto"; +import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; option go_package = "./group;group"; package group; @@ -391,8 +392,19 @@ message SetGroupMemberNicknameResp{ CommonResp CommonResp = 1; } +message SetGroupMemberInfoReq{ + string groupID = 1; + string userID = 2; + string operationID = 3; + google.protobuf.StringValue nickname = 4; + google.protobuf.StringValue faceURL = 5; + google.protobuf.Int32Value roleLevel = 6; + google.protobuf.StringValue ex = 7; +} - +message SetGroupMemberInfoResp{ + CommonResp CommonResp = 1; +} service group{ rpc createGroup(CreateGroupReq) returns(CreateGroupResp); @@ -428,7 +440,7 @@ service group{ rpc CancelMuteGroup(CancelMuteGroupReq) returns(CancelMuteGroupResp); rpc SetGroupMemberNickname(SetGroupMemberNicknameReq) returns (SetGroupMemberNicknameResp); - + rpc SetGroupMemberInfo(SetGroupMemberInfoReq) returns (SetGroupMemberInfoResp); } diff --git a/pkg/proto/sdk_ws/wrappers.proto b/pkg/proto/sdk_ws/wrappers.proto new file mode 100644 index 000000000..c571f0968 --- /dev/null +++ b/pkg/proto/sdk_ws/wrappers.proto @@ -0,0 +1,123 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Wrappers for primitive (non-message) types. These types are useful +// for embedding primitives in the `google.protobuf.Any` type and for places +// where we need to distinguish between the absence of a primitive +// typed field and its default value. +// +// These wrappers have no meaningful use within repeated fields as they lack +// the ability to detect presence on individual elements. +// These wrappers have no meaningful use within a map or a oneof since +// individual entries of a map or fields of a oneof can already detect presence. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/wrapperspb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "WrappersProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// Wrapper message for `double`. +// +// The JSON representation for `DoubleValue` is JSON number. +message DoubleValue { + // The double value. + double value = 1; +} + +// Wrapper message for `float`. +// +// The JSON representation for `FloatValue` is JSON number. +message FloatValue { + // The float value. + float value = 1; +} + +// Wrapper message for `int64`. +// +// The JSON representation for `Int64Value` is JSON string. +message Int64Value { + // The int64 value. + int64 value = 1; +} + +// Wrapper message for `uint64`. +// +// The JSON representation for `UInt64Value` is JSON string. +message UInt64Value { + // The uint64 value. + uint64 value = 1; +} + +// Wrapper message for `int32`. +// +// The JSON representation for `Int32Value` is JSON number. +message Int32Value { + // The int32 value. + int32 value = 1; +} + +// Wrapper message for `uint32`. +// +// The JSON representation for `UInt32Value` is JSON number. +message UInt32Value { + // The uint32 value. + uint32 value = 1; +} + +// Wrapper message for `bool`. +// +// The JSON representation for `BoolValue` is JSON `true` and `false`. +message BoolValue { + // The bool value. + bool value = 1; +} + +// Wrapper message for `string`. +// +// The JSON representation for `StringValue` is JSON string. +message StringValue { + // The string value. + string value = 1; +} + +// Wrapper message for `bytes`. +// +// The JSON representation for `BytesValue` is JSON string. +message BytesValue { + // The bytes value. + bytes value = 1; +} \ No newline at end of file From 64fa52452ce9ec172fff61539498d6e0cf2a02fa Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 18:19:20 +0800 Subject: [PATCH 346/752] singal offline push --- pkg/common/db/redisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 3a4fbd5cb..2e7904e7b 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -14,7 +14,7 @@ import ( "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" - osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" + //osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" "strconv" ) From 6996c008d08d9bfcb6c4ecb6f6c337fe5b1dec33 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 18:36:42 +0800 Subject: [PATCH 347/752] singal offline push --- internal/push/jpush/push.go | 1 + internal/push/jpush/requestBody/notification.go | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/internal/push/jpush/push.go b/internal/push/jpush/push.go index e1f2ea12f..8868c9616 100644 --- a/internal/push/jpush/push.go +++ b/internal/push/jpush/push.go @@ -45,6 +45,7 @@ func (j *JPush) Push(accounts []string, alert, detailContent, operationID string if opts.Signal.ClientMsgID != "" { extras.ClientMsgID = opts.Signal.ClientMsgID } + no.IOSEnableMutableContent() no.SetExtras(extras) var me requestBody.Message me.SetMsgContent(detailContent) diff --git a/internal/push/jpush/requestBody/notification.go b/internal/push/jpush/requestBody/notification.go index 9dd878147..56ada1551 100644 --- a/internal/push/jpush/requestBody/notification.go +++ b/internal/push/jpush/requestBody/notification.go @@ -18,10 +18,11 @@ type Android struct { Extras Extras `json:"extras"` } type Ios struct { - Alert string `json:"alert,omitempty"` - Sound string `json:"sound,omitempty"` - Badge string `json:"badge,omitempty"` - Extras Extras `json:"extras"` + Alert string `json:"alert,omitempty"` + Sound string `json:"sound,omitempty"` + Badge string `json:"badge,omitempty"` + Extras Extras `json:"extras"` + MutableContent bool `json:"mutable-content"` } type Extras struct { @@ -45,3 +46,7 @@ func (n *Notification) SetExtras(extras Extras) { func (n *Notification) SetAndroidIntent() { n.Android.Intent.URL = config.Config.Push.Jpns.PushIntent } + +func (n *Notification) IOSEnableMutableContent() { + n.IOS.MutableContent = true +} From 409a8311b1fe693f459732eed46afd14559f9260 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 19:14:11 +0800 Subject: [PATCH 348/752] singal offline push --- internal/push/getui/push.go | 4 ++-- internal/push/jpush/push.go | 4 ++-- internal/push/logic/push_to_client.go | 11 ++--------- internal/push/push_interface.go | 12 +++++++++--- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/internal/push/getui/push.go b/internal/push/getui/push.go index fd4efaaa8..03d3346ce 100644 --- a/internal/push/getui/push.go +++ b/internal/push/getui/push.go @@ -1,7 +1,7 @@ package getui import ( - "Open_IM/internal/push/logic" + "Open_IM/internal/push" "Open_IM/pkg/common/config" "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" @@ -99,7 +99,7 @@ func newGetuiClient() *Getui { return &Getui{} } -func (g *Getui) Push(userIDList []string, alert, detailContent, operationID string, opts logic.PushOpts) (resp string, err error) { +func (g *Getui) Push(userIDList []string, alert, detailContent, operationID string, opts push.PushOpts) (resp string, err error) { token, err := db.DB.GetGetuiToken() log.NewDebug(operationID, utils.GetSelfFuncName(), "token:", token) if err != nil { diff --git a/internal/push/jpush/push.go b/internal/push/jpush/push.go index 8868c9616..01f827753 100644 --- a/internal/push/jpush/push.go +++ b/internal/push/jpush/push.go @@ -1,9 +1,9 @@ package push import ( + "Open_IM/internal/push" "Open_IM/internal/push/jpush/common" "Open_IM/internal/push/jpush/requestBody" - "Open_IM/internal/push/logic" "Open_IM/pkg/common/config" "bytes" "encoding/json" @@ -33,7 +33,7 @@ func (j *JPush) SetAlias(cid, alias string) (resp string, err error) { return resp, nil } -func (j *JPush) Push(accounts []string, alert, detailContent, operationID string, opts logic.PushOpts) (string, error) { +func (j *JPush) Push(accounts []string, alert, detailContent, operationID string, opts push.PushOpts) (string, error) { var pf requestBody.Platform pf.SetAll() var au requestBody.Audience diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 5584c8d21..1085208d8 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -7,6 +7,7 @@ package logic import ( + "Open_IM/internal/push" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" @@ -36,14 +37,6 @@ type AtContent struct { var grpcCons []*grpc.ClientConn -type PushOpts struct { - Signal Signal -} - -type Signal struct { - ClientMsgID string -} - func MsgToUser(pushMsg *pbPush.PushMsgReq) { var wsResult []*pbRelay.SingleMsgToUser isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) @@ -146,7 +139,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } -func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts PushOpts, err error) { +func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err error) { if pushMsg.MsgData.ContentType < constant.SignalingNotificationEnd && pushMsg.MsgData.ContentType > constant.SignalingNotification { req := &pbRtc.SignalMessageAssembleReq{} if err := proto.Unmarshal(pushMsg.MsgData.Content, req); err != nil { diff --git a/internal/push/push_interface.go b/internal/push/push_interface.go index cc6e25271..a1d45d7b7 100644 --- a/internal/push/push_interface.go +++ b/internal/push/push_interface.go @@ -1,7 +1,13 @@ package push -import "Open_IM/internal/push/logic" - type OfflinePusher interface { - Push(userIDList []string, alert, detailContent, operationID string, opts logic.PushOpts) (resp string, err error) + Push(userIDList []string, alert, detailContent, operationID string, opts PushOpts) (resp string, err error) +} + +type PushOpts struct { + Signal Signal +} + +type Signal struct { + ClientMsgID string } From 2b25fea86cdd62afc49587758481b3833b8003b8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 19:52:29 +0800 Subject: [PATCH 349/752] singal offline push --- internal/push/logic/push_to_client.go | 5 +++-- pkg/common/db/redisModel.go | 13 +++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 1085208d8..b079c439e 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -125,6 +125,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { if err != nil { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) } + log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), "opts:", opts) pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID, opts) if err != nil { log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) @@ -141,11 +142,11 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err error) { if pushMsg.MsgData.ContentType < constant.SignalingNotificationEnd && pushMsg.MsgData.ContentType > constant.SignalingNotification { - req := &pbRtc.SignalMessageAssembleReq{} + req := &pbRtc.SignalReq{} if err := proto.Unmarshal(pushMsg.MsgData.Content, req); err != nil { return opts, err } - switch req.SignalReq.Payload.(type) { + switch req.Payload.(type) { case *pbRtc.SignalReq_Invite, *pbRtc.SignalReq_InviteInGroup: opts.Signal.ClientMsgID = pushMsg.MsgData.ClientMsgID } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 2e7904e7b..b1c72e12a 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -356,14 +356,15 @@ func (d *DataBases) CacheSignalInfo(msg *pbCommon.MsgData) error { func (d *DataBases) GetSignalInfoFromCache(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { key := SignalCache + clientMsgID result, err := redis.Bytes(d.Exec("GET", key)) - log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result) + log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result, string(result)) if err != nil { - invitationInfo := &pbRtc.SignalInviteReq{} - return invitationInfo, err + return nil, err } - req := &pbRtc.SignalMessageAssembleReq{} - err = proto.Unmarshal(result, req) - req2 := req.SignalReq.Payload.(*pbRtc.SignalReq_Invite) + req := &pbRtc.SignalReq{} + if err = proto.Unmarshal(result, req); err != nil { + return nil, err + } + req2 := req.Payload.(*pbRtc.SignalReq_Invite) invitationInfo = req2.Invite return invitationInfo, err } From 1fffd360547d0d678643c71866b0d1acd4ba16be Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 20:06:14 +0800 Subject: [PATCH 350/752] singal offline push --- internal/push/jpush/push.go | 3 ++- internal/push/logic/push_to_client.go | 2 ++ pkg/common/config/config.go | 5 +++++ pkg/common/constant/constant.go | 18 ++++++++++-------- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/internal/push/jpush/push.go b/internal/push/jpush/push.go index 01f827753..833174de5 100644 --- a/internal/push/jpush/push.go +++ b/internal/push/jpush/push.go @@ -34,12 +34,12 @@ func (j *JPush) SetAlias(cid, alias string) (resp string, err error) { } func (j *JPush) Push(accounts []string, alert, detailContent, operationID string, opts push.PushOpts) (string, error) { + var pf requestBody.Platform pf.SetAll() var au requestBody.Audience au.SetAlias(accounts) var no requestBody.Notification - no.SetAlert(alert) var extras requestBody.Extras if opts.Signal.ClientMsgID != "" { @@ -47,6 +47,7 @@ func (j *JPush) Push(accounts []string, alert, detailContent, operationID string } no.IOSEnableMutableContent() no.SetExtras(extras) + no.SetAlert(alert) var me requestBody.Message me.SetMsgContent(detailContent) var o requestBody.Options diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index b079c439e..d3d9ab068 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -104,6 +104,8 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } else { content = constant.ContentType2PushContent[constant.GroupMsg] } + case constant.SignalingNotification: + content = constant.ContentType2PushContent[constant.SignalMsg] default: content = constant.ContentType2PushContent[constant.Common] } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index d17677781..2b9a4d891 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -419,6 +419,11 @@ type config struct { OfflinePush POfflinePush `yaml:"offlinePush"` DefaultTips PDefaultTips `yaml:"defaultTips"` } `yaml:"joinDepartmentNotification"` + Signal struct { + OfflinePush struct { + Title string `yaml:"title"` + } `yaml:"offlinePush"` + } `yaml:"signal"` } Demo struct { Port []int `yaml:"openImDemoPort"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index e27be4d8e..53a4cce38 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -44,6 +44,7 @@ const ( Quote = 114 Common = 200 GroupMsg = 201 + SignalMsg = 202 //SysRelated NotificationBegin = 1000 @@ -212,14 +213,15 @@ const ( ) var ContentType2PushContent = map[int64]string{ - Picture: "[图片]", - Voice: "[语音]", - Video: "[视频]", - File: "[文件]", - Text: "你收到了一条文本消息", - AtText: "[有人@你]", - GroupMsg: "你收到一条群聊消息", - Common: "你收到一条新消息", + Picture: "[图片]", + Voice: "[语音]", + Video: "[视频]", + File: "[文件]", + Text: "你收到了一条文本消息", + AtText: "[有人@你]", + GroupMsg: "你收到一条群聊消息", + Common: "你收到一条新消息", + SignalMsg: "音視頻通話邀請", } const ( From 6b8ebe11de1f7a67ddf2ab752b871d738bf45edd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 20:17:12 +0800 Subject: [PATCH 351/752] singal offline push --- internal/push/logic/push_to_client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index d3d9ab068..692df1be1 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -148,6 +148,7 @@ func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err err if err := proto.Unmarshal(pushMsg.MsgData.Content, req); err != nil { return opts, err } + log.NewInfo("", utils.GetSelfFuncName(), "SignalReq: ", req.String()) switch req.Payload.(type) { case *pbRtc.SignalReq_Invite, *pbRtc.SignalReq_InviteInGroup: opts.Signal.ClientMsgID = pushMsg.MsgData.ClientMsgID From 2e3b55d9e83f5ae0105d8678c3bf2cefd1dcd5ad Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 20:19:24 +0800 Subject: [PATCH 352/752] singal offline push --- internal/push/logic/push_to_client.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 692df1be1..78ecbf93a 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -143,15 +143,16 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err error) { - if pushMsg.MsgData.ContentType < constant.SignalingNotificationEnd && pushMsg.MsgData.ContentType > constant.SignalingNotification { + if pushMsg.MsgData.ContentType < constant.SignalingNotificationEnd && pushMsg.MsgData.ContentType > constant.SignalingNotificationBegin { req := &pbRtc.SignalReq{} if err := proto.Unmarshal(pushMsg.MsgData.Content, req); err != nil { return opts, err } - log.NewInfo("", utils.GetSelfFuncName(), "SignalReq: ", req.String()) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "SignalReq: ", req.String()) switch req.Payload.(type) { case *pbRtc.SignalReq_Invite, *pbRtc.SignalReq_InviteInGroup: opts.Signal.ClientMsgID = pushMsg.MsgData.ClientMsgID + log.NewDebug(pushMsg.OperationID, opts) } } From cfe0272022fa6b4f4d6d15e34bcd263a8d100c1e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 2 Jun 2022 20:53:50 +0800 Subject: [PATCH 353/752] singal offline push --- internal/api/third/rtc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index 4522c4e2c..9014b6c44 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -45,5 +45,5 @@ func GetRTCInvitationInfo(c *gin.Context) { resp.Data.Invitation.InviteeUserIDList = invitationInfo.Invitation.InviteeUserIDList resp.Data.Invitation.MediaType = invitationInfo.Invitation.MediaType resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout - c.JSON(http.StatusInternalServerError, resp) + c.JSON(http.StatusOK, resp) } From e04a4908cf29c19181b5ae1d1a59a9ab5658c545 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Sun, 5 Jun 2022 23:42:27 +0800 Subject: [PATCH 354/752] k8s --- deploy_k8s/admin_cms/deployment.yaml | 2 +- deploy_k8s/api/deployment.yaml | 2 +- deploy_k8s/auth/deployment.yaml | 2 +- deploy_k8s/cache/deployment.yaml | 2 +- deploy_k8s/cms_api/deployment.yaml | 2 +- deploy_k8s/conversation/deployment.yaml | 2 +- deploy_k8s/friend/deployment.yaml | 2 +- deploy_k8s/group/deployment.yaml | 2 +- deploy_k8s/message_cms/deployment.yaml | 2 +- deploy_k8s/msg/deployment.yaml | 2 +- deploy_k8s/msg_gateway/deployment.yaml | 2 +- deploy_k8s/msg_transfer/deployment.yaml | 2 +- deploy_k8s/office/deployment.yaml | 2 +- deploy_k8s/organization/deployment.yaml | 2 +- deploy_k8s/push/deployment.yaml | 2 +- deploy_k8s/sdk_server/deployment.yaml | 2 +- deploy_k8s/statistics/deployment.yaml | 1 + deploy_k8s/user/deployment.yaml | 1 + 18 files changed, 18 insertions(+), 16 deletions(-) diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml index 8ed81cc05..39ad73a06 100644 --- a/deploy_k8s/admin_cms/deployment.yaml +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: admin-cms image: openim/admin_cms:v2.0.10k - imagePullPolicy: Always #每次启动都重新拉取镜像 + # imagePullPolicy: Always #每次启动都重新拉取镜像 ports: - containerPort: 10200 volumeMounts: diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 5c5bfb72f..52990ca2f 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: api image: openim/api:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10002 volumeMounts: diff --git a/deploy_k8s/auth/deployment.yaml b/deploy_k8s/auth/deployment.yaml index ef1aef5ab..d6b2e91d8 100644 --- a/deploy_k8s/auth/deployment.yaml +++ b/deploy_k8s/auth/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: auth image: openim/auth:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10160 volumeMounts: diff --git a/deploy_k8s/cache/deployment.yaml b/deploy_k8s/cache/deployment.yaml index fd29244f0..5de56fcf0 100644 --- a/deploy_k8s/cache/deployment.yaml +++ b/deploy_k8s/cache/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: cache image: openim/cache:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10240 volumeMounts: diff --git a/deploy_k8s/cms_api/deployment.yaml b/deploy_k8s/cms_api/deployment.yaml index 1218316e9..4dd0626ac 100644 --- a/deploy_k8s/cms_api/deployment.yaml +++ b/deploy_k8s/cms_api/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: cms-api image: openim/cms_api:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10006 volumeMounts: diff --git a/deploy_k8s/conversation/deployment.yaml b/deploy_k8s/conversation/deployment.yaml index b982faf98..7da7aad7a 100644 --- a/deploy_k8s/conversation/deployment.yaml +++ b/deploy_k8s/conversation/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: conversation image: openim/conversation:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10230 volumeMounts: diff --git a/deploy_k8s/friend/deployment.yaml b/deploy_k8s/friend/deployment.yaml index 171849e7e..a03ca12c7 100644 --- a/deploy_k8s/friend/deployment.yaml +++ b/deploy_k8s/friend/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: friend image: openim/friend:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10120 volumeMounts: diff --git a/deploy_k8s/group/deployment.yaml b/deploy_k8s/group/deployment.yaml index 3938cec84..74aaa0d5a 100644 --- a/deploy_k8s/group/deployment.yaml +++ b/deploy_k8s/group/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: group image: openim/group:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10150 volumeMounts: diff --git a/deploy_k8s/message_cms/deployment.yaml b/deploy_k8s/message_cms/deployment.yaml index c321ac382..148316e5b 100644 --- a/deploy_k8s/message_cms/deployment.yaml +++ b/deploy_k8s/message_cms/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: message-cms image: openim/message_cms:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10190 volumeMounts: diff --git a/deploy_k8s/msg/deployment.yaml b/deploy_k8s/msg/deployment.yaml index 25912cc60..a4697c631 100644 --- a/deploy_k8s/msg/deployment.yaml +++ b/deploy_k8s/msg/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: msg image: openim/msg:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10130 volumeMounts: diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index 06570d76e..0eec0f5f5 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: msg-gateway image: openim/msg_gateway:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - name: rpc-port containerPort: 10140 diff --git a/deploy_k8s/msg_transfer/deployment.yaml b/deploy_k8s/msg_transfer/deployment.yaml index 98410331e..cbb44717e 100644 --- a/deploy_k8s/msg_transfer/deployment.yaml +++ b/deploy_k8s/msg_transfer/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: msg-transfer image: openim/msg_transfer:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always volumeMounts: - name: config mountPath: /Open-IM-Server/config diff --git a/deploy_k8s/office/deployment.yaml b/deploy_k8s/office/deployment.yaml index 4a035db57..333a11aba 100644 --- a/deploy_k8s/office/deployment.yaml +++ b/deploy_k8s/office/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: office image: openim/office:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10210 volumeMounts: diff --git a/deploy_k8s/organization/deployment.yaml b/deploy_k8s/organization/deployment.yaml index ec727ff53..a32488d44 100644 --- a/deploy_k8s/organization/deployment.yaml +++ b/deploy_k8s/organization/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: organization image: openim/organization:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10220 volumeMounts: diff --git a/deploy_k8s/push/deployment.yaml b/deploy_k8s/push/deployment.yaml index 2b463f838..c1a8d0299 100644 --- a/deploy_k8s/push/deployment.yaml +++ b/deploy_k8s/push/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: push image: openim/push:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10170 volumeMounts: diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 50127015d..57cb0c412 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: sdk-server image: openim/sdk_server:v2.0.10k - imagePullPolicy: Always + # imagePullPolicy: Always ports: - containerPort: 10003 volumeMounts: diff --git a/deploy_k8s/statistics/deployment.yaml b/deploy_k8s/statistics/deployment.yaml index 4265317fc..3743d7e6b 100644 --- a/deploy_k8s/statistics/deployment.yaml +++ b/deploy_k8s/statistics/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: statistics image: openim/statistics:v2.0.10k + # imagePullPolicy: Always ports: - containerPort: 10180 volumeMounts: diff --git a/deploy_k8s/user/deployment.yaml b/deploy_k8s/user/deployment.yaml index 05b0e60b8..1ad605d14 100644 --- a/deploy_k8s/user/deployment.yaml +++ b/deploy_k8s/user/deployment.yaml @@ -16,6 +16,7 @@ spec: containers: - name: user image: openim/user:v2.0.10k + # imagePullPolicy: Always volumeMounts: - name: config mountPath: /Open-IM-Server/config From a647007a0fc0f1430621176d4f42c7c1a5774b05 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 10:22:42 +0800 Subject: [PATCH 355/752] singal offline push --- internal/push/logic/push_to_client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 78ecbf93a..5b5f66bae 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -129,6 +129,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), "opts:", opts) pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID, opts) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline pushResult: ", pushResult) if err != nil { log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) } else { From e5a314bb3a026267285192bce1f9dd13eb5a433d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 10:29:21 +0800 Subject: [PATCH 356/752] singal offline push --- config/config.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index bfccb0eec..e11407c5c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -671,7 +671,6 @@ notification: defaultTips: tips: "welcome user join department" - #---------------demo configuration---------------------# #The following configuration items are applied to openIM Demo configuration #是否启动demo,如果自身没有账号体系,设置为true @@ -698,4 +697,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - signalTimeout: 300 + signalTimeout: 3000 From 5e2e8f91c7f0e476a25fbaf12ed1e9cb194fc665 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 10:42:23 +0800 Subject: [PATCH 357/752] singal offline push --- pkg/base_info/third_api_struct.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/base_info/third_api_struct.go b/pkg/base_info/third_api_struct.go index 8cfb1cfaf..d03e9f505 100644 --- a/pkg/base_info/third_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -77,5 +77,5 @@ type GetRTCInvitationInfoResp struct { SessionType int32 `json:"sessionType"` } `json:"invitation"` OfflinePushInfo struct{} `json:"offlinePushInfo"` - } + } `json:"data"` } From dc7c10014dca4a793e41804b24af0ebdd13b0661 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 10:45:04 +0800 Subject: [PATCH 358/752] singal offline push --- pkg/base_info/third_api_struct.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/base_info/third_api_struct.go b/pkg/base_info/third_api_struct.go index d03e9f505..39dff1bb1 100644 --- a/pkg/base_info/third_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -68,8 +68,8 @@ type GetRTCInvitationInfoResp struct { Data struct { OpUserID string `json:"opUserID"` Invitation struct { - InviterUserID string `json:"InviterUserID"` - InviteeUserIDList []string `json:"InviteeUserIDList"` + InviterUserID string `json:"inviterUserID"` + InviteeUserIDList []string `json:"inviteeUserIDList"` GroupID string `json:"groupID"` RoomID string `json:"roomID"` Timeout int32 `json:"timeout"` From d3abc4497675b2dc73bcc6d6c945703849ca90d0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 18:15:32 +0800 Subject: [PATCH 359/752] singal offline push --- cmd/open_im_api/main.go | 1 + internal/api/third/rtc.go | 41 ++++++- internal/msg_gateway/gate/logic.go | 2 +- internal/push/logic/push_to_client.go | 1 - pkg/base_info/third_api_struct.go | 10 +- pkg/common/db/model.go | 8 ++ pkg/common/db/newRedisModel.go | 157 ++++++++++++++++++++++++++ pkg/common/db/redisModel.go | 3 +- 8 files changed, 218 insertions(+), 5 deletions(-) create mode 100644 pkg/common/db/newRedisModel.go diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 294f79d9c..61d3e127e 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -108,6 +108,7 @@ func main() { thirdGroup.POST("/upload_update_app", apiThird.UploadUpdateApp) thirdGroup.POST("/get_download_url", apiThird.GetDownloadURL) thirdGroup.POST("/get_rtc_invitation_info", apiThird.GetRTCInvitationInfo) + thirdGroup.POST("/get_rtc_invitation_start_app", apiThird.GetRTCInvitationInfoStartApp) } //Message chatGroup := r.Group("/msg") diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index 9014b6c44..30fd5be7b 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -31,7 +31,7 @@ func GetRTCInvitationInfo(c *gin.Context) { return } var err error - invitationInfo, err := db.DB.GetSignalInfoFromCache(req.ClientMsgID) + invitationInfo, err := db.DB.GetSignalInfoFromCacheByClientMsgID(req.ClientMsgID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSignalInfoFromCache", err.Error(), req) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) @@ -47,3 +47,42 @@ func GetRTCInvitationInfo(c *gin.Context) { resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout c.JSON(http.StatusOK, resp) } + +func GetRTCInvitationInfoStartApp(c *gin.Context) { + var ( + req api.GetRTCInvitationInfoStartAppReq + resp api.GetRTCInvitationInfoStartAppResp + ) + if err := c.Bind(&req); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + var ok bool + var errInfo string + ok, userID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + invitationInfo, err := db.DB.GetAvailableSignalInvitationInfo(userID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSignalInfoFromCache", err.Error(), req) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + return + } + resp.Data.OpUserID = invitationInfo.OpUserID + resp.Data.Invitation.RoomID = invitationInfo.Invitation.RoomID + resp.Data.Invitation.SessionType = invitationInfo.Invitation.SessionType + resp.Data.Invitation.GroupID = invitationInfo.Invitation.GroupID + resp.Data.Invitation.InviterUserID = invitationInfo.Invitation.InviterUserID + resp.Data.Invitation.InviteeUserIDList = invitationInfo.Invitation.InviteeUserIDList + resp.Data.Invitation.MediaType = invitationInfo.Invitation.MediaType + resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout + c.JSON(http.StatusOK, resp) + +} diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index ccb1cd6eb..47b58cde2 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -239,7 +239,7 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { } else { log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String()) // save invitation info for offline push - if err := db.DB.CacheSignalInfo(pbData.MsgData); err != nil { + if err := db.DB.NewCacheSignalInfo(pbData.MsgData); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), m, &signalResp) ws.sendSignalMsgResp(conn, 200, err.Error(), m, &signalResp) } else { diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 5b5f66bae..3ba1e58fb 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -119,7 +119,6 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") break } - if offlinePusher == nil { break } diff --git a/pkg/base_info/third_api_struct.go b/pkg/base_info/third_api_struct.go index 39dff1bb1..758c3494c 100644 --- a/pkg/base_info/third_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -60,7 +60,7 @@ type GetDownloadURLResp struct { type GetRTCInvitationInfoReq struct { OperationID string `json:"operationID" binding:"required"` - ClientMsgID string `json:"clientMsgID"` + ClientMsgID string `json:"clientMsgID" binding:"required"` } type GetRTCInvitationInfoResp struct { @@ -79,3 +79,11 @@ type GetRTCInvitationInfoResp struct { OfflinePushInfo struct{} `json:"offlinePushInfo"` } `json:"data"` } + +type GetRTCInvitationInfoStartAppReq struct { + OperationID string `json:"operationID" binding:"required"` +} + +type GetRTCInvitationInfoStartAppResp struct { + GetRTCInvitationInfoResp +} diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index f8aaca54a..e7282e596 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -8,6 +8,7 @@ import ( //"Open_IM/pkg/common/log" "Open_IM/pkg/utils" "fmt" + go_redis "github.com/go-redis/redis/v8" "go.mongodb.org/mongo-driver/mongo/options" // "context" @@ -30,6 +31,7 @@ type DataBases struct { mgoSession *mgo.Session redisPool *redis.Pool mongoClient *mongo.Client + rdb *go_redis.Client } func key(dbAddress, dbName string) string { @@ -113,6 +115,12 @@ func init() { ) }, } + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 + }) } func createMongoIndex(client *mongo.Client, collection string, isUnique bool, keys ...string) error { diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go new file mode 100644 index 000000000..b477c20ea --- /dev/null +++ b/pkg/common/db/newRedisModel.go @@ -0,0 +1,157 @@ +package db + +import ( + "Open_IM/pkg/common/config" + log2 "Open_IM/pkg/common/log" + pbChat "Open_IM/pkg/proto/chat" + pbRtc "Open_IM/pkg/proto/rtc" + pbCommon "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "context" + "errors" + "fmt" + "github.com/garyburd/redigo/redis" + goRedis "github.com/go-redis/redis/v8" + "github.com/golang/protobuf/proto" + "github.com/mitchellh/mapstructure" + "strconv" + "time" +) + +//func (d * DataBases)pubMessage(channel, msg string) { +// d.rdb.Publish(context.Background(),channel,msg) +//} +//func (d * DataBases)pubMessage(channel, msg string) { +// d.rdb.Publish(context.Background(),channel,msg) +//} + +func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { + for _, v := range seqList { + //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 + key := messageCache + userID + "_" + strconv.Itoa(int(v)) + + result, err := d.rdb.HGetAll(context.Background(), key).Result() + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "redis get message error:", err.Error(), v) + } else { + msg, err := Map2Pb(result) + //msg := pbCommon.MsgData{} + //err = jsonpb.UnmarshalString(result, &msg) + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) + } else { + log2.NewDebug(operationID, "redis get msg is ", msg.String()) + seqMsg = append(seqMsg, msg) + } + + } + } + return seqMsg, failedSeqList, errResult +} +func Map2Pb(m map[string]string) (*pbCommon.MsgData, error) { + var data pbCommon.MsgData + err := mapstructure.Decode(m, &data) + if err != nil { + return nil, err + } + return &data, nil +} + +func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { + ctx := context.Background() + var failedList []pbChat.MsgDataToMQ + for _, msg := range msgList { + key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) + s, err := utils.Pb2Map(msg.MsgData) + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2Map failed", msg.MsgData.String(), uid, err.Error()) + continue + } + log2.NewDebug(operationID, "convert map is ", s) + fmt.Println("ts", s) + err = d.rdb.HMSet(context.Background(), key, s).Err() + //err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() + if err != nil { + return err + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) + failedList = append(failedList, *msg) + } + d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) + } + if len(failedList) != 0 { + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) + } + return nil +} + +func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID string) error { + ctx := context.Background() + key := messageCache + userID + "_" + "*" + vals, err := d.rdb.Keys(ctx, key).Result() + log2.Debug(operationID, "vals: ", vals) + if err == redis.ErrNil { + return nil + } + if err != nil { + return utils.Wrap(err, "") + } + if err = d.rdb.Del(ctx, vals...).Err(); err != nil { + return utils.Wrap(err, "") + } + return nil +} + +func (d *DataBases) NewCacheSignalInfo(msg *pbCommon.MsgData) error { + keyList := SignalListCache + msg.RecvID + timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) + if err != nil { + return err + } + err = d.rdb.LPush(context.Background(), keyList, msg.ClientMsgID).Err() + if err != nil { + return err + } + err = d.rdb.Expire(context.Background(), keyList, time.Duration(timeout)*time.Second).Err() + if err != nil { + return err + } + key := SignalCache + msg.ClientMsgID + err = d.rdb.Set(context.Background(), key, msg.Content, time.Duration(timeout)*time.Second).Err() + if err != nil { + return err + } + err = d.rdb.Expire(context.Background(), key, time.Duration(timeout)*time.Second).Err() + if err != nil { + return err + } + return err +} + +func (d *DataBases) GetSignalInfoFromCacheByClientMsgID(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { + key := SignalCache + clientMsgID + bytes, err := d.rdb.Get(context.Background(), key).Bytes() + if err != nil { + return nil, err + } + req := &pbRtc.SignalReq{} + if err = proto.Unmarshal(bytes, req); err != nil { + return nil, err + } + req2 := req.Payload.(*pbRtc.SignalReq_Invite) + invitationInfo = req2.Invite + return invitationInfo, err +} + +func (d *DataBases) GetAvailableSignalInvitationInfo(userID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { + keyList := SignalListCache + userID + result := d.rdb.RPop(context.Background(), keyList) + if err = result.Err(); err != nil { + return nil, err + } + invitationInfo, err = d.GetSignalInfoFromCacheByClientMsgID(result.String()) + return invitationInfo, err +} diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index b1c72e12a..4e360802f 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -32,7 +32,8 @@ const ( blackListCache = "BLACK_LIST_CACHE:" groupCache = "GROUP_CACHE:" messageCache = "MESSAGE_CACHE:" - SignalCache = "Signal_CACHE:" + SignalCache = "SIGNAL_CACHE:" + SignalListCache = "SIGNAL_ZSET_CACHE:" ) func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { From ebf07eddfb6f5419b17d518f653ace34f6fcf78f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 18:18:30 +0800 Subject: [PATCH 360/752] singal offline push --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index b477c20ea..7fd979f39 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -11,7 +11,7 @@ import ( "errors" "fmt" "github.com/garyburd/redigo/redis" - goRedis "github.com/go-redis/redis/v8" + //goRedis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "github.com/mitchellh/mapstructure" "strconv" From e428e186f0d4c36196f0bd5d938d250eb11499ce Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 18:23:08 +0800 Subject: [PATCH 361/752] singal offline push --- internal/api/third/rtc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index 30fd5be7b..4986558d7 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -72,7 +72,7 @@ func GetRTCInvitationInfoStartApp(c *gin.Context) { invitationInfo, err := db.DB.GetAvailableSignalInvitationInfo(userID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSignalInfoFromCache", err.Error(), req) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": err.Error(), "data": struct{}{}}) return } resp.Data.OpUserID = invitationInfo.OpUserID From 78dfba8771cfeb18879dc731725316a323308b94 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 18:52:17 +0800 Subject: [PATCH 362/752] singal offline push --- pkg/common/db/newRedisModel.go | 43 +++++++++++++++++++--------------- pkg/common/db/redisModel.go | 2 +- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 7fd979f39..e966b5aa5 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -106,29 +106,34 @@ func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID str } func (d *DataBases) NewCacheSignalInfo(msg *pbCommon.MsgData) error { - keyList := SignalListCache + msg.RecvID - timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) - if err != nil { + req := &pbRtc.SignalReq{} + if err := proto.Unmarshal(msg.Content, req); err != nil { return err } - err = d.rdb.LPush(context.Background(), keyList, msg.ClientMsgID).Err() - if err != nil { + //log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "SignalReq: ", req.String()) + switch req.Payload.(type) { + case *pbRtc.SignalReq_Invite, *pbRtc.SignalReq_InviteInGroup: + keyList := SignalListCache + msg.RecvID + timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) + if err != nil { + return err + } + err = d.rdb.LPush(context.Background(), keyList, msg.ClientMsgID).Err() + if err != nil { + return err + } + err = d.rdb.Expire(context.Background(), keyList, time.Duration(timeout)*time.Second).Err() + if err != nil { + return err + } + key := SignalCache + msg.ClientMsgID + err = d.rdb.Set(context.Background(), key, msg.Content, time.Duration(timeout)*time.Second).Err() + if err != nil { + return err + } return err } - err = d.rdb.Expire(context.Background(), keyList, time.Duration(timeout)*time.Second).Err() - if err != nil { - return err - } - key := SignalCache + msg.ClientMsgID - err = d.rdb.Set(context.Background(), key, msg.Content, time.Duration(timeout)*time.Second).Err() - if err != nil { - return err - } - err = d.rdb.Expire(context.Background(), key, time.Duration(timeout)*time.Second).Err() - if err != nil { - return err - } - return err + return nil } func (d *DataBases) GetSignalInfoFromCacheByClientMsgID(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 4e360802f..6d54974ed 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -33,7 +33,7 @@ const ( groupCache = "GROUP_CACHE:" messageCache = "MESSAGE_CACHE:" SignalCache = "SIGNAL_CACHE:" - SignalListCache = "SIGNAL_ZSET_CACHE:" + SignalListCache = "SIGNAL_LIST_CACHE:" ) func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { From f15684a562a72d57c5dee0c8cbf1508adb91ca68 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 19:02:35 +0800 Subject: [PATCH 363/752] singal offline push --- pkg/common/db/newRedisModel.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index e966b5aa5..14a137009 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -132,6 +132,8 @@ func (d *DataBases) NewCacheSignalInfo(msg *pbCommon.MsgData) error { return err } return err + default: + log2.NewDebug("", utils.GetSelfFuncName(), "req type not invite", string(msg.Content)) } return nil } From 4efdd342d6b2344b42b97676804c949abd2fe5de Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 19:20:12 +0800 Subject: [PATCH 364/752] singal offline push --- pkg/common/db/newRedisModel.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 14a137009..f8808e4fd 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -157,8 +157,13 @@ func (d *DataBases) GetAvailableSignalInvitationInfo(userID string) (invitationI keyList := SignalListCache + userID result := d.rdb.RPop(context.Background(), keyList) if err = result.Err(); err != nil { - return nil, err + return nil, utils.Wrap(err, "GetAvailableSignalInvitationInfo failed") } - invitationInfo, err = d.GetSignalInfoFromCacheByClientMsgID(result.String()) - return invitationInfo, err + key, err := result.Result() + if err != nil { + return nil, utils.Wrap(err, "GetAvailableSignalInvitationInfo failed") + } + log2.NewDebug("", utils.GetSelfFuncName(), result, result.String()) + invitationInfo, err = d.GetSignalInfoFromCacheByClientMsgID(key) + return invitationInfo, utils.Wrap(err, "GetSignalInfoFromCacheByClientMsgID") } From 1a42f6dded3b8da24ea97b2dfd6746ec9651b9bb Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 19:36:25 +0800 Subject: [PATCH 365/752] singal offline push --- pkg/common/db/newRedisModel.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index f8808e4fd..04bcd28c7 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -140,6 +140,7 @@ func (d *DataBases) NewCacheSignalInfo(msg *pbCommon.MsgData) error { func (d *DataBases) GetSignalInfoFromCacheByClientMsgID(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { key := SignalCache + clientMsgID + invitationInfo = &pbRtc.SignalInviteReq{} bytes, err := d.rdb.Get(context.Background(), key).Bytes() if err != nil { return nil, err @@ -148,8 +149,12 @@ func (d *DataBases) GetSignalInfoFromCacheByClientMsgID(clientMsgID string) (inv if err = proto.Unmarshal(bytes, req); err != nil { return nil, err } - req2 := req.Payload.(*pbRtc.SignalReq_Invite) - invitationInfo = req2.Invite + switch req2 := req.Payload.(type) { + case *pbRtc.SignalReq_Invite: + invitationInfo.Invitation = req2.Invite.Invitation + case *pbRtc.SignalReq_InviteInGroup: + invitationInfo.Invitation = req2.InviteInGroup.Invitation + } return invitationInfo, err } From 0f66fa528dfac6c5e85b436c1b13a9b9bc7e54da Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 19:48:59 +0800 Subject: [PATCH 366/752] singal offline push --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 3ba1e58fb..bba61244a 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -126,7 +126,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { if err != nil { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) } - log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), "opts:", opts) + log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), UIDList, content, jsonCustomContent, "opts:", opts) pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID, opts) log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline pushResult: ", pushResult) if err != nil { From 538656fcc7e170d276cdc433bea6adabd968c07a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 19:58:31 +0800 Subject: [PATCH 367/752] singal offline push --- internal/push/logic/push_to_client.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index bba61244a..8aeb6b82c 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -83,8 +83,9 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { var content string if pushMsg.MsgData.OfflinePushInfo != nil { content = pushMsg.MsgData.OfflinePushInfo.Title - + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "xxxx OfflinePushInfo", content) } else { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "xxxx2222 OfflinePushInfo", content) switch pushMsg.MsgData.ContentType { case constant.Text: content = constant.ContentType2PushContent[constant.Text] From 797e2fea1ea2f55d00e1d30e9ba2d0bf71f390ed Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 6 Jun 2022 20:39:45 +0800 Subject: [PATCH 368/752] group info set --- internal/api/auth/auth.go | 26 ++++ internal/rpc/auth/auth.go | 14 ++ internal/rpc/group/group.go | 10 +- internal/rpc/msg/group_notification.go | 10 +- pkg/base_info/auth_api_struct.go | 11 ++ pkg/proto/auth/auth.pb.go | 200 +++++++++++++++++++++---- pkg/proto/auth/auth.proto | 16 ++ 7 files changed, 254 insertions(+), 33 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 59ad579ca..826374188 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -124,3 +124,29 @@ func ParseToken(c *gin.Context) { log.NewInfo(params.OperationID, "ParseToken return ", resp) c.JSON(http.StatusOK, resp) } + +func ForceLogout(c *gin.Context) { + params := api.ForceLogoutReq{} + if err := c.BindJSON(¶ms); err != nil { + errMsg := " BindJSON failed " + err.Error() + log.NewError("0", errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) + return + } + + var ok bool + var errInfo string + var expireTime int64 + ok, _, errInfo, expireTime = token_verify.GetUserIDFromTokenExpireTime(c.Request.Header.Get("token"), params.OperationID) + if !ok { + errMsg := params.OperationID + " " + "GetUserIDFromTokenExpireTime failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(params.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: uint32(expireTime)}} + resp.Data = structs.Map(&resp.ExpireTime) + log.NewInfo(params.OperationID, "ParseToken return ", resp) + c.JSON(http.StatusOK, resp) +} diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 0066fc8d4..02f246004 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -58,6 +58,20 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil } +func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) { + //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) + //err := token_verify.DeleteToken(req.FromUserID, int(req.Platform)) + //if err != nil { + // errMsg := req.OperationID + " imdb.DeleteToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) + // log.NewError(req.OperationID, errMsg) + // return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil + //} + // + //return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil + return nil, nil + +} + type rpcAuth struct { rpcPort int rpcRegisterName string diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 192939c59..3e9b49190 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -887,17 +887,25 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf ////bitwise operators: 0001:groupName; 0010:Notification 0100:Introduction; 1000:FaceUrl; 10000:owner var changedType int32 + groupName := "" + notification := "" + introduction := "" + faceURL := "" if group.GroupName != req.GroupInfo.GroupName && req.GroupInfo.GroupName != "" { changedType = 1 + groupName = req.GroupInfo.GroupName } if group.Notification != req.GroupInfo.Notification && req.GroupInfo.Notification != "" { changedType = changedType | (1 << 1) + notification = req.GroupInfo.Notification } if group.Introduction != req.GroupInfo.Introduction && req.GroupInfo.Introduction != "" { changedType = changedType | (1 << 2) + introduction = req.GroupInfo.Introduction } if group.FaceURL != req.GroupInfo.FaceURL && req.GroupInfo.FaceURL != "" { changedType = changedType | (1 << 3) + faceURL = req.GroupInfo.FaceURL } //only administrators can set group information var groupInfo db.Group @@ -909,7 +917,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf } log.NewInfo(req.OperationID, "SetGroupInfo rpc return ", pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}) if changedType != 0 { - chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID) + chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL) } return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil } diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 5ba2400dd..e8a29b117 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -225,12 +225,20 @@ func GroupCreatedNotification(operationID, opUserID, groupID string, initMemberL } //群信息改变后掉用 -func GroupInfoSetNotification(operationID, opUserID, groupID string) { +//groupName := "" +// notification := "" +// introduction := "" +// faceURL := "" +func GroupInfoSetNotification(operationID, opUserID, groupID string, groupName, notification, introduction, faceURL string) { GroupInfoChangedTips := open_im_sdk.GroupInfoSetTips{Group: &open_im_sdk.GroupInfo{}, OpUser: &open_im_sdk.GroupMemberFullInfo{}} if err := setGroupInfo(groupID, GroupInfoChangedTips.Group); err != nil { log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID) return } + GroupInfoChangedTips.Group.GroupName = groupName + GroupInfoChangedTips.Group.Notification = notification + GroupInfoChangedTips.Group.Introduction = introduction + GroupInfoChangedTips.Group.FaceURL = faceURL if err := setOpUserInfo(opUserID, groupID, GroupInfoChangedTips.OpUser); err != nil { log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID) return diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 431a00c2c..9e46a92d7 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -38,6 +38,17 @@ type UserTokenResp struct { UserToken UserTokenInfo `json:"data"` } +type ForceLogoutReq struct { + Secret string `json:"secret" binding:"required,max=32"` + Platform int32 `json:"platform" binding:"required,min=1,max=8"` + UserID string `json:"userID" binding:"required,min=1,max=64"` + OperationID string `json:"operationID" binding:"required"` +} + +type ForceLogoutResp struct { + CommResp +} + type ParseTokenReq struct { OperationID string `json:"operationID" binding:"required"` } diff --git a/pkg/proto/auth/auth.pb.go b/pkg/proto/auth/auth.pb.go index 3941570ee..09f54b1f9 100644 --- a/pkg/proto/auth/auth.pb.go +++ b/pkg/proto/auth/auth.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{0} + return fileDescriptor_auth_68293efd650e0000, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +82,7 @@ func (m *UserRegisterReq) Reset() { *m = UserRegisterReq{} } func (m *UserRegisterReq) String() string { return proto.CompactTextString(m) } func (*UserRegisterReq) ProtoMessage() {} func (*UserRegisterReq) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{1} + return fileDescriptor_auth_68293efd650e0000, []int{1} } func (m *UserRegisterReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserRegisterReq.Unmarshal(m, b) @@ -127,7 +127,7 @@ func (m *UserRegisterResp) Reset() { *m = UserRegisterResp{} } func (m *UserRegisterResp) String() string { return proto.CompactTextString(m) } func (*UserRegisterResp) ProtoMessage() {} func (*UserRegisterResp) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{2} + return fileDescriptor_auth_68293efd650e0000, []int{2} } func (m *UserRegisterResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserRegisterResp.Unmarshal(m, b) @@ -168,7 +168,7 @@ func (m *UserTokenReq) Reset() { *m = UserTokenReq{} } func (m *UserTokenReq) String() string { return proto.CompactTextString(m) } func (*UserTokenReq) ProtoMessage() {} func (*UserTokenReq) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{3} + return fileDescriptor_auth_68293efd650e0000, []int{3} } func (m *UserTokenReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserTokenReq.Unmarshal(m, b) @@ -229,7 +229,7 @@ func (m *UserTokenResp) Reset() { *m = UserTokenResp{} } func (m *UserTokenResp) String() string { return proto.CompactTextString(m) } func (*UserTokenResp) ProtoMessage() {} func (*UserTokenResp) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{4} + return fileDescriptor_auth_68293efd650e0000, []int{4} } func (m *UserTokenResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserTokenResp.Unmarshal(m, b) @@ -270,12 +270,114 @@ func (m *UserTokenResp) GetExpiredTime() int64 { return 0 } +type ForceLogoutReq struct { + Platform int32 `protobuf:"varint,1,opt,name=Platform" json:"Platform,omitempty"` + FromUserID string `protobuf:"bytes,2,opt,name=FromUserID" json:"FromUserID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"` + OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ForceLogoutReq) Reset() { *m = ForceLogoutReq{} } +func (m *ForceLogoutReq) String() string { return proto.CompactTextString(m) } +func (*ForceLogoutReq) ProtoMessage() {} +func (*ForceLogoutReq) Descriptor() ([]byte, []int) { + return fileDescriptor_auth_68293efd650e0000, []int{5} +} +func (m *ForceLogoutReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ForceLogoutReq.Unmarshal(m, b) +} +func (m *ForceLogoutReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ForceLogoutReq.Marshal(b, m, deterministic) +} +func (dst *ForceLogoutReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForceLogoutReq.Merge(dst, src) +} +func (m *ForceLogoutReq) XXX_Size() int { + return xxx_messageInfo_ForceLogoutReq.Size(m) +} +func (m *ForceLogoutReq) XXX_DiscardUnknown() { + xxx_messageInfo_ForceLogoutReq.DiscardUnknown(m) +} + +var xxx_messageInfo_ForceLogoutReq proto.InternalMessageInfo + +func (m *ForceLogoutReq) GetPlatform() int32 { + if m != nil { + return m.Platform + } + return 0 +} + +func (m *ForceLogoutReq) GetFromUserID() string { + if m != nil { + return m.FromUserID + } + return "" +} + +func (m *ForceLogoutReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *ForceLogoutReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type ForceLogoutResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ForceLogoutResp) Reset() { *m = ForceLogoutResp{} } +func (m *ForceLogoutResp) String() string { return proto.CompactTextString(m) } +func (*ForceLogoutResp) ProtoMessage() {} +func (*ForceLogoutResp) Descriptor() ([]byte, []int) { + return fileDescriptor_auth_68293efd650e0000, []int{6} +} +func (m *ForceLogoutResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ForceLogoutResp.Unmarshal(m, b) +} +func (m *ForceLogoutResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ForceLogoutResp.Marshal(b, m, deterministic) +} +func (dst *ForceLogoutResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForceLogoutResp.Merge(dst, src) +} +func (m *ForceLogoutResp) XXX_Size() int { + return xxx_messageInfo_ForceLogoutResp.Size(m) +} +func (m *ForceLogoutResp) XXX_DiscardUnknown() { + xxx_messageInfo_ForceLogoutResp.DiscardUnknown(m) +} + +var xxx_messageInfo_ForceLogoutResp proto.InternalMessageInfo + +func (m *ForceLogoutResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + func init() { proto.RegisterType((*CommonResp)(nil), "pbAuth.CommonResp") proto.RegisterType((*UserRegisterReq)(nil), "pbAuth.UserRegisterReq") proto.RegisterType((*UserRegisterResp)(nil), "pbAuth.UserRegisterResp") proto.RegisterType((*UserTokenReq)(nil), "pbAuth.UserTokenReq") proto.RegisterType((*UserTokenResp)(nil), "pbAuth.UserTokenResp") + proto.RegisterType((*ForceLogoutReq)(nil), "pbAuth.ForceLogoutReq") + proto.RegisterType((*ForceLogoutResp)(nil), "pbAuth.ForceLogoutResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -291,6 +393,7 @@ const _ = grpc.SupportPackageIsVersion4 type AuthClient interface { UserRegister(ctx context.Context, in *UserRegisterReq, opts ...grpc.CallOption) (*UserRegisterResp, error) UserToken(ctx context.Context, in *UserTokenReq, opts ...grpc.CallOption) (*UserTokenResp, error) + ForceLogout(ctx context.Context, in *ForceLogoutReq, opts ...grpc.CallOption) (*ForceLogoutResp, error) } type authClient struct { @@ -319,11 +422,21 @@ func (c *authClient) UserToken(ctx context.Context, in *UserTokenReq, opts ...gr return out, nil } +func (c *authClient) ForceLogout(ctx context.Context, in *ForceLogoutReq, opts ...grpc.CallOption) (*ForceLogoutResp, error) { + out := new(ForceLogoutResp) + err := grpc.Invoke(ctx, "/pbAuth.Auth/ForceLogout", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Auth service type AuthServer interface { UserRegister(context.Context, *UserRegisterReq) (*UserRegisterResp, error) UserToken(context.Context, *UserTokenReq) (*UserTokenResp, error) + ForceLogout(context.Context, *ForceLogoutReq) (*ForceLogoutResp, error) } func RegisterAuthServer(s *grpc.Server, srv AuthServer) { @@ -366,6 +479,24 @@ func _Auth_UserToken_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } +func _Auth_ForceLogout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ForceLogoutReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).ForceLogout(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pbAuth.Auth/ForceLogout", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).ForceLogout(ctx, req.(*ForceLogoutReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Auth_serviceDesc = grpc.ServiceDesc{ ServiceName: "pbAuth.Auth", HandlerType: (*AuthServer)(nil), @@ -378,37 +509,44 @@ var _Auth_serviceDesc = grpc.ServiceDesc{ MethodName: "UserToken", Handler: _Auth_UserToken_Handler, }, + { + MethodName: "ForceLogout", + Handler: _Auth_ForceLogout_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "auth/auth.proto", } -func init() { proto.RegisterFile("auth/auth.proto", fileDescriptor_auth_88965eda3ab7f34d) } +func init() { proto.RegisterFile("auth/auth.proto", fileDescriptor_auth_68293efd650e0000) } -var fileDescriptor_auth_88965eda3ab7f34d = []byte{ - // 369 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x52, 0x4d, 0x4b, 0xc3, 0x40, - 0x10, 0x25, 0xf6, 0xc3, 0x76, 0x6a, 0xa9, 0x2c, 0x55, 0x43, 0x04, 0xa9, 0x39, 0xf5, 0x94, 0x40, - 0x3d, 0x28, 0x08, 0x42, 0xad, 0x16, 0x7a, 0x28, 0x95, 0xa5, 0x5e, 0xbc, 0x84, 0x94, 0x6e, 0xdb, - 0x90, 0x26, 0xbb, 0xee, 0xa6, 0x56, 0xf0, 0xe8, 0xc5, 0x9f, 0x2d, 0xbb, 0xf9, 0x70, 0xad, 0x3d, - 0x79, 0x49, 0x98, 0x79, 0x2f, 0xf3, 0xde, 0x9b, 0x0c, 0xb4, 0xfc, 0x4d, 0xb2, 0x72, 0xe5, 0xc3, - 0x61, 0x9c, 0x26, 0x14, 0x55, 0xd9, 0xac, 0xbf, 0x49, 0x56, 0xd6, 0xe5, 0x84, 0x91, 0xd8, 0x1b, - 0x8d, 0x5d, 0x16, 0x2e, 0x5d, 0x05, 0xb9, 0x62, 0x1e, 0x7a, 0x5b, 0xe1, 0x6e, 0x45, 0x4a, 0xb5, - 0xef, 0x00, 0x06, 0x34, 0x8a, 0x68, 0x8c, 0x89, 0x60, 0xc8, 0x84, 0x43, 0xc2, 0xf9, 0x80, 0xce, - 0x89, 0x69, 0x74, 0x8c, 0x6e, 0x05, 0xe7, 0x25, 0x3a, 0x85, 0x2a, 0xe1, 0x7c, 0x2c, 0x96, 0xe6, - 0x41, 0xc7, 0xe8, 0xd6, 0x71, 0x56, 0xd9, 0x6b, 0x68, 0x3d, 0x0b, 0xc2, 0x31, 0x59, 0x06, 0x22, - 0x91, 0xef, 0x57, 0x74, 0x0d, 0x35, 0xd9, 0x1a, 0xc5, 0x0b, 0xaa, 0xa6, 0x34, 0x7a, 0xe7, 0x8e, - 0x20, 0xfc, 0x8d, 0x70, 0xcf, 0x67, 0x81, 0xc7, 0x7c, 0xee, 0x47, 0xc2, 0xc9, 0x29, 0xb8, 0x20, - 0xa3, 0x0e, 0x34, 0x26, 0x8c, 0x70, 0x3f, 0x09, 0x68, 0x3c, 0x7a, 0xc8, 0x84, 0xf4, 0x96, 0x3d, - 0x84, 0xe3, 0xdf, 0x6a, 0x82, 0xa1, 0x9e, 0x9e, 0x20, 0x13, 0x44, 0x4e, 0xba, 0x01, 0xe7, 0x07, - 0xc1, 0x1a, 0xcb, 0xfe, 0x32, 0xe0, 0x48, 0x0e, 0x9a, 0xd2, 0x90, 0xc4, 0xd2, 0xb3, 0x05, 0xb5, - 0xa7, 0xb5, 0x9f, 0x2c, 0x28, 0x8f, 0xb2, 0xe4, 0x45, 0x8d, 0x2e, 0x00, 0x86, 0x9c, 0x46, 0xca, - 0x66, 0xee, 0x4a, 0xeb, 0xc8, 0x6f, 0x27, 0x2c, 0x43, 0x4b, 0x0a, 0x2d, 0xea, 0xdd, 0x48, 0xe5, - 0xbf, 0x91, 0x3e, 0xa0, 0xa9, 0x39, 0xf9, 0x5f, 0x1e, 0xd4, 0x86, 0x8a, 0x1a, 0x90, 0xb9, 0x4b, - 0x0b, 0x29, 0xfe, 0xf8, 0xce, 0x02, 0x4e, 0xe6, 0xd3, 0x20, 0x22, 0xca, 0x5b, 0x09, 0xeb, 0xad, - 0xde, 0xa7, 0x01, 0x65, 0x39, 0x17, 0xf5, 0xd3, 0x7d, 0xe4, 0x8b, 0x45, 0x67, 0xb9, 0xe0, 0xce, - 0xcf, 0xb5, 0xcc, 0xfd, 0x80, 0x60, 0xe8, 0x06, 0xea, 0x45, 0x10, 0xd4, 0xd6, 0x69, 0xf9, 0x96, - 0xad, 0x93, 0x3d, 0x5d, 0xc1, 0xee, 0x5b, 0x2f, 0x4d, 0x47, 0x9d, 0xef, 0x6d, 0x0a, 0xcf, 0xaa, - 0xea, 0x36, 0xaf, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x20, 0x74, 0x9f, 0xd9, 0x02, 0x00, +var fileDescriptor_auth_68293efd650e0000 = []byte{ + // 417 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x53, 0x5d, 0x8b, 0xda, 0x40, + 0x14, 0x25, 0xf5, 0xa3, 0x7a, 0xad, 0x4d, 0x19, 0xac, 0x86, 0x14, 0x8a, 0xcd, 0x93, 0x4f, 0x09, + 0xd8, 0x87, 0x16, 0x0a, 0x82, 0xb5, 0x0a, 0x42, 0xc5, 0x12, 0xec, 0xcb, 0xbe, 0x84, 0xb8, 0x8e, + 0x31, 0x68, 0x32, 0xb3, 0x33, 0x71, 0x5d, 0xd8, 0x3f, 0xb0, 0xec, 0xdf, 0xda, 0x3f, 0xb6, 0xcc, + 0xe4, 0x63, 0x47, 0xd7, 0x27, 0x5f, 0xf6, 0x25, 0xe1, 0x9e, 0x73, 0x66, 0xee, 0x39, 0x77, 0x66, + 0x40, 0xf7, 0xf7, 0xc9, 0xc6, 0x11, 0x1f, 0x9b, 0x32, 0x92, 0x10, 0x54, 0xa5, 0xcb, 0xe1, 0x3e, + 0xd9, 0x98, 0xdf, 0xe6, 0x14, 0xc7, 0xde, 0x74, 0xe6, 0xd0, 0x6d, 0xe0, 0x48, 0xca, 0xe1, 0xab, + 0xad, 0x77, 0xe0, 0xce, 0x81, 0xa7, 0x52, 0x6b, 0x00, 0x30, 0x22, 0x51, 0x44, 0x62, 0x17, 0x73, + 0x8a, 0x0c, 0x78, 0x8f, 0x19, 0x1b, 0x91, 0x15, 0x36, 0xb4, 0xae, 0xd6, 0xab, 0xb8, 0x79, 0x89, + 0xda, 0x50, 0xc5, 0x8c, 0xcd, 0x78, 0x60, 0xbc, 0xeb, 0x6a, 0xbd, 0xba, 0x9b, 0x55, 0xd6, 0x0e, + 0xf4, 0xff, 0x1c, 0x33, 0x17, 0x07, 0x21, 0x4f, 0xc4, 0xff, 0x06, 0xfd, 0x80, 0x9a, 0x80, 0xa6, + 0xf1, 0x9a, 0xc8, 0x5d, 0x1a, 0xfd, 0x2f, 0x36, 0xc7, 0xec, 0x16, 0x33, 0xcf, 0xa7, 0xa1, 0x47, + 0x7d, 0xe6, 0x47, 0xdc, 0xce, 0x25, 0x6e, 0x21, 0x46, 0x5d, 0x68, 0xcc, 0x29, 0x66, 0x7e, 0x12, + 0x92, 0x78, 0xfa, 0x27, 0x6b, 0xa4, 0x42, 0xd6, 0x04, 0x3e, 0x1d, 0x77, 0xe3, 0x14, 0xf5, 0xd5, + 0x04, 0x59, 0x43, 0x64, 0xa7, 0x13, 0xb0, 0x5f, 0x18, 0x57, 0x51, 0x59, 0x0f, 0x1a, 0x7c, 0x10, + 0x1b, 0x2d, 0xc8, 0x16, 0xc7, 0xc2, 0xb3, 0x09, 0xb5, 0x7f, 0x3b, 0x3f, 0x59, 0x13, 0x16, 0x65, + 0xc9, 0x8b, 0x1a, 0x7d, 0x05, 0x98, 0x30, 0x12, 0x49, 0x9b, 0xb9, 0x2b, 0x05, 0x11, 0x6b, 0xe7, + 0x34, 0x63, 0x4b, 0x92, 0x2d, 0xea, 0xd3, 0x48, 0xe5, 0xd7, 0x91, 0xee, 0xa1, 0xa9, 0x38, 0xb9, + 0x2c, 0x0f, 0x6a, 0x41, 0x45, 0x6e, 0x90, 0xb9, 0x4b, 0x0b, 0xd1, 0x7c, 0x7c, 0x47, 0x43, 0x86, + 0x57, 0x8b, 0x30, 0xc2, 0xd2, 0x5b, 0xc9, 0x55, 0x21, 0xeb, 0x51, 0x83, 0x8f, 0x13, 0xc2, 0xae, + 0xf1, 0x5f, 0x12, 0x90, 0x7d, 0xf2, 0xb6, 0x93, 0x18, 0x83, 0x7e, 0xe4, 0xe5, 0xb2, 0x59, 0xf4, + 0x9f, 0x34, 0x28, 0x0b, 0x1e, 0x0d, 0xd3, 0x33, 0xce, 0x2f, 0x0b, 0xea, 0xe4, 0x0b, 0x4f, 0x2e, + 0xac, 0x69, 0x9c, 0x27, 0x38, 0x45, 0x3f, 0xa1, 0x5e, 0x1c, 0x0e, 0x6a, 0xa9, 0xb2, 0xfc, 0xe6, + 0x98, 0x9f, 0xcf, 0xa0, 0x9c, 0xa2, 0x01, 0x34, 0x94, 0x30, 0xa8, 0x9d, 0xab, 0x8e, 0xa7, 0x6d, + 0x76, 0xce, 0xe2, 0x9c, 0xfe, 0xd6, 0xaf, 0x9a, 0xb6, 0x7c, 0xd2, 0xbf, 0x52, 0xc1, 0xb2, 0x2a, + 0xdf, 0xeb, 0xf7, 0xe7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xed, 0x61, 0xac, 0x2b, 0xed, 0x03, 0x00, 0x00, } diff --git a/pkg/proto/auth/auth.proto b/pkg/proto/auth/auth.proto index c91921fe9..53a14d760 100644 --- a/pkg/proto/auth/auth.proto +++ b/pkg/proto/auth/auth.proto @@ -30,7 +30,23 @@ message UserTokenResp { } + +message ForceLogoutReq { + int32 Platform = 1; + string FromUserID = 2; + string OpUserID = 3; + string OperationID = 4; +} +message ForceLogoutResp { + CommonResp CommonResp = 1; +} + + + + + service Auth { rpc UserRegister(UserRegisterReq) returns(UserRegisterResp); rpc UserToken(UserTokenReq) returns(UserTokenResp); + rpc ForceLogout(ForceLogoutReq) returns(ForceLogoutResp); } From 8bd5db431b938f82323b277ad5aa67b09aee3f7c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 6 Jun 2022 20:54:53 +0800 Subject: [PATCH 369/752] add function --- internal/msg_gateway/gate/rpc_server.go | 4 + pkg/proto/relay/relay.pb.go | 227 ++++++++++++++++++------ pkg/proto/relay/relay.proto | 8 + 3 files changed, 183 insertions(+), 56 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 2ee614c2d..4ad615415 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -29,6 +29,10 @@ type RPCServer struct { pushTerminal []int } +func (r *RPCServer) KickUserOffline(c context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { + panic("implement me") +} + func (r *RPCServer) onInit(rpcPort int) { r.rpcPort = rpcPort r.rpcRegisterName = config.Config.RpcRegisterName.OpenImOnlineMessageRelayName diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 5fecfadd6..810e14a92 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{0} + return fileDescriptor_relay_335282936f1b89e7, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{1} + return fileDescriptor_relay_335282936f1b89e7, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -129,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{2} + return fileDescriptor_relay_335282936f1b89e7, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{3} + return fileDescriptor_relay_335282936f1b89e7, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -235,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{4} + return fileDescriptor_relay_335282936f1b89e7, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{5} + return fileDescriptor_relay_335282936f1b89e7, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{6} + return fileDescriptor_relay_335282936f1b89e7, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -384,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7} + return fileDescriptor_relay_335282936f1b89e7, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -446,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 0} + return fileDescriptor_relay_335282936f1b89e7, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -493,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 1} + return fileDescriptor_relay_335282936f1b89e7, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -549,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 2} + return fileDescriptor_relay_335282936f1b89e7, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -590,6 +590,82 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) GetDetailPlatformStatus() []*Ge return nil } +type KickUserOfflineReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + KickUserIDList []string `protobuf:"bytes,3,rep,name=kickUserIDList" json:"kickUserIDList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KickUserOfflineReq) Reset() { *m = KickUserOfflineReq{} } +func (m *KickUserOfflineReq) String() string { return proto.CompactTextString(m) } +func (*KickUserOfflineReq) ProtoMessage() {} +func (*KickUserOfflineReq) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_335282936f1b89e7, []int{8} +} +func (m *KickUserOfflineReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KickUserOfflineReq.Unmarshal(m, b) +} +func (m *KickUserOfflineReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KickUserOfflineReq.Marshal(b, m, deterministic) +} +func (dst *KickUserOfflineReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_KickUserOfflineReq.Merge(dst, src) +} +func (m *KickUserOfflineReq) XXX_Size() int { + return xxx_messageInfo_KickUserOfflineReq.Size(m) +} +func (m *KickUserOfflineReq) XXX_DiscardUnknown() { + xxx_messageInfo_KickUserOfflineReq.DiscardUnknown(m) +} + +var xxx_messageInfo_KickUserOfflineReq proto.InternalMessageInfo + +func (m *KickUserOfflineReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *KickUserOfflineReq) GetKickUserIDList() []string { + if m != nil { + return m.KickUserIDList + } + return nil +} + +type KickUserOfflineResp struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KickUserOfflineResp) Reset() { *m = KickUserOfflineResp{} } +func (m *KickUserOfflineResp) String() string { return proto.CompactTextString(m) } +func (*KickUserOfflineResp) ProtoMessage() {} +func (*KickUserOfflineResp) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_335282936f1b89e7, []int{9} +} +func (m *KickUserOfflineResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KickUserOfflineResp.Unmarshal(m, b) +} +func (m *KickUserOfflineResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KickUserOfflineResp.Marshal(b, m, deterministic) +} +func (dst *KickUserOfflineResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_KickUserOfflineResp.Merge(dst, src) +} +func (m *KickUserOfflineResp) XXX_Size() int { + return xxx_messageInfo_KickUserOfflineResp.Size(m) +} +func (m *KickUserOfflineResp) XXX_DiscardUnknown() { + xxx_messageInfo_KickUserOfflineResp.DiscardUnknown(m) +} + +var xxx_messageInfo_KickUserOfflineResp proto.InternalMessageInfo + func init() { proto.RegisterType((*OnlinePushMsgReq)(nil), "relay.OnlinePushMsgReq") proto.RegisterType((*OnlinePushMsgResp)(nil), "relay.OnlinePushMsgResp") @@ -602,6 +678,8 @@ func init() { proto.RegisterType((*GetUsersOnlineStatusResp_SuccessDetail)(nil), "relay.GetUsersOnlineStatusResp.SuccessDetail") proto.RegisterType((*GetUsersOnlineStatusResp_FailedDetail)(nil), "relay.GetUsersOnlineStatusResp.FailedDetail") proto.RegisterType((*GetUsersOnlineStatusResp_SuccessResult)(nil), "relay.GetUsersOnlineStatusResp.SuccessResult") + proto.RegisterType((*KickUserOfflineReq)(nil), "relay.KickUserOfflineReq") + proto.RegisterType((*KickUserOfflineResp)(nil), "relay.KickUserOfflineResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -618,6 +696,7 @@ type OnlineMessageRelayServiceClient interface { OnlinePushMsg(ctx context.Context, in *OnlinePushMsgReq, opts ...grpc.CallOption) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) + KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) } type onlineMessageRelayServiceClient struct { @@ -655,12 +734,22 @@ func (c *onlineMessageRelayServiceClient) OnlineBatchPushOneMsg(ctx context.Cont return out, nil } +func (c *onlineMessageRelayServiceClient) KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) { + out := new(KickUserOfflineResp) + err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/KickUserOffline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for OnlineMessageRelayService service type OnlineMessageRelayServiceServer interface { OnlinePushMsg(context.Context, *OnlinePushMsgReq) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(context.Context, *GetUsersOnlineStatusReq) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) + KickUserOffline(context.Context, *KickUserOfflineReq) (*KickUserOfflineResp, error) } func RegisterOnlineMessageRelayServiceServer(s *grpc.Server, srv OnlineMessageRelayServiceServer) { @@ -721,6 +810,24 @@ func _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler(srv interface{}, c return interceptor(ctx, in, info, handler) } +func _OnlineMessageRelayService_KickUserOffline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(KickUserOfflineReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlineMessageRelayServiceServer).KickUserOffline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/relay.OnlineMessageRelayService/KickUserOffline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlineMessageRelayServiceServer).KickUserOffline(ctx, req.(*KickUserOfflineReq)) + } + return interceptor(ctx, in, info, handler) +} + var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ ServiceName: "relay.OnlineMessageRelayService", HandlerType: (*OnlineMessageRelayServiceServer)(nil), @@ -737,55 +844,63 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ MethodName: "OnlineBatchPushOneMsg", Handler: _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler, }, + { + MethodName: "KickUserOffline", + Handler: _OnlineMessageRelayService_KickUserOffline_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_77ab6a9fe292f32a) } +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_335282936f1b89e7) } -var fileDescriptor_relay_77ab6a9fe292f32a = []byte{ - // 668 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4a, - 0x10, 0x97, 0x31, 0x7f, 0x07, 0x78, 0x0f, 0x56, 0xbc, 0x87, 0xf1, 0x21, 0xb8, 0x3e, 0x54, 0x51, - 0xd5, 0x26, 0x52, 0xda, 0x5b, 0x6f, 0x10, 0x81, 0x22, 0x11, 0x05, 0x6d, 0x5a, 0xb5, 0xe2, 0x12, - 0x2d, 0xc9, 0x62, 0x2c, 0x9c, 0x78, 0xd9, 0xb1, 0x41, 0x7c, 0x82, 0xde, 0x7a, 0xea, 0xb9, 0x87, - 0x7e, 0x89, 0x7e, 0xbd, 0x6a, 0xff, 0xc4, 0xb5, 0x21, 0x81, 0x72, 0xe8, 0x25, 0xca, 0xcc, 0xce, - 0xce, 0xfc, 0xfe, 0xec, 0xae, 0x61, 0x5b, 0xf2, 0x84, 0xdd, 0x35, 0xf5, 0x6f, 0x43, 0xc8, 0x34, - 0x4b, 0xc9, 0x92, 0x0e, 0xfc, 0x17, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa2, 0xa6, - 0x5e, 0x69, 0xe2, 0xe8, 0x6a, 0x70, 0x8b, 0xcd, 0x5b, 0x34, 0x95, 0xe1, 0x57, 0x07, 0xb6, 0x7a, - 0x93, 0x24, 0x9e, 0xf0, 0xd3, 0x1c, 0x2f, 0xbb, 0x18, 0x51, 0x7e, 0x4d, 0x02, 0x58, 0xef, 0x09, - 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x46, 0xcb, 0x29, 0xf2, 0x0e, - 0x56, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0x85, 0xc0, 0xa9, 0xaf, 0xb7, 0xfc, 0x06, 0x72, 0x79, - 0xc3, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, - 0x10, 0x36, 0x44, 0x8e, 0x97, 0x1f, 0xd2, 0x8f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0xba, 0x71, 0x25, - 0x17, 0x1e, 0xc3, 0xf6, 0x3d, 0x3c, 0x28, 0x48, 0x0b, 0x16, 0x25, 0x47, 0xe1, 0x39, 0x81, 0x5b, - 0x5f, 0x6f, 0xd5, 0x1a, 0x86, 0x6b, 0x3f, 0x9e, 0x44, 0x09, 0xef, 0x62, 0x64, 0x36, 0x9f, 0x26, - 0x2c, 0xbb, 0x48, 0xe5, 0x98, 0xea, 0xda, 0xf0, 0x8b, 0x03, 0x7b, 0xaa, 0x82, 0x27, 0x45, 0x05, - 0xe5, 0x98, 0x27, 0xd9, 0x49, 0x8c, 0x19, 0xf9, 0x1f, 0x96, 0x73, 0x03, 0xc2, 0xb0, 0xb3, 0x51, - 0x31, 0x69, 0xe1, 0xcf, 0x27, 0x91, 0x1a, 0x40, 0x5a, 0x40, 0xd6, 0xa4, 0x56, 0x69, 0x29, 0x13, - 0x7e, 0x77, 0xc0, 0x33, 0x9c, 0x0e, 0x58, 0x36, 0xbc, 0x54, 0xb9, 0xde, 0x84, 0xff, 0x65, 0xad, - 0x5f, 0xc1, 0x56, 0x59, 0x57, 0x45, 0xda, 0x73, 0x03, 0xb7, 0xbe, 0x46, 0x1f, 0xe4, 0xc3, 0x18, - 0xf6, 0xe6, 0xe0, 0x43, 0x41, 0x4e, 0x60, 0x0b, 0x35, 0x7d, 0x95, 0x37, 0x0a, 0x5a, 0x1f, 0x82, - 0x92, 0x3a, 0x33, 0x55, 0xa6, 0x0f, 0x76, 0x86, 0x77, 0xb0, 0x3b, 0x47, 0x4c, 0x25, 0xa3, 0x29, - 0x3a, 0x4c, 0x47, 0x5c, 0x0b, 0xe1, 0xd2, 0x52, 0x46, 0x59, 0x46, 0xf9, 0xf0, 0xa6, 0xd3, 0xd6, - 0x32, 0xac, 0x51, 0x1b, 0x91, 0x97, 0xf0, 0x8f, 0xfa, 0xa7, 0xfa, 0x1c, 0xa5, 0x72, 0x6c, 0xcf, - 0xd5, 0x12, 0xbd, 0x97, 0x0d, 0x6f, 0x61, 0xf7, 0x98, 0x67, 0x6a, 0x24, 0x1a, 0xb6, 0xfd, 0x8c, - 0x65, 0x39, 0x2a, 0x13, 0x6a, 0x00, 0xf9, 0x6f, 0x99, 0x1c, 0x2d, 0x53, 0x29, 0xa3, 0x4c, 0x4a, - 0x4b, 0x26, 0x99, 0xf9, 0xe5, 0x14, 0xf1, 0x61, 0x35, 0x15, 0x95, 0x63, 0x5d, 0xc4, 0xe1, 0xcf, - 0x45, 0xf0, 0x66, 0x4f, 0x46, 0x41, 0x3c, 0x58, 0xe1, 0x52, 0x16, 0x94, 0x97, 0xe8, 0x34, 0x54, - 0x7c, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7c, 0x4d, 0x44, 0xfa, 0xb0, 0x89, 0xf9, 0x70, 0xc8, 0x11, - 0xad, 0x1b, 0xae, 0x76, 0xe3, 0x8d, 0x75, 0x63, 0xde, 0xa4, 0x46, 0xbf, 0xbc, 0x89, 0x56, 0x7b, - 0x90, 0x53, 0xd8, 0xb8, 0x60, 0x71, 0xc2, 0x47, 0xb6, 0xe7, 0xa2, 0xee, 0xf9, 0xfa, 0xa9, 0x9e, - 0x47, 0x7a, 0x4f, 0x9b, 0x67, 0x2c, 0x4e, 0x68, 0xa5, 0x83, 0x7f, 0x08, 0x9b, 0x76, 0xa2, 0x59, - 0x56, 0x12, 0x09, 0xeb, 0xb5, 0x3d, 0xe6, 0x45, 0xac, 0xb8, 0xa2, 0xee, 0x3a, 0xe5, 0x6a, 0x22, - 0xff, 0x33, 0x6c, 0x94, 0x47, 0x94, 0xae, 0xad, 0x5b, 0xb9, 0xb6, 0xcf, 0x56, 0xd1, 0xff, 0xe1, - 0x14, 0xf8, 0xac, 0x04, 0xf3, 0x9e, 0x84, 0x39, 0xd8, 0x08, 0x83, 0x9d, 0x91, 0x46, 0x35, 0x3d, - 0xc1, 0x46, 0x97, 0x67, 0xda, 0x61, 0xb5, 0x9b, 0xd9, 0xaa, 0xf5, 0x6d, 0x61, 0x7a, 0x33, 0xbb, - 0x1c, 0x91, 0x45, 0x9c, 0xaa, 0x9e, 0x7d, 0x2e, 0x6f, 0xe2, 0x21, 0x27, 0x07, 0xb0, 0x59, 0x79, - 0x2a, 0xc9, 0xae, 0x9d, 0x79, 0xff, 0x41, 0xf7, 0xbd, 0xd9, 0x0b, 0x28, 0xc8, 0x27, 0xd8, 0x99, - 0x85, 0x90, 0xd4, 0x1e, 0x85, 0x7f, 0xed, 0xef, 0x3f, 0x41, 0x8f, 0x9c, 0xc1, 0x7f, 0x33, 0xdf, - 0x14, 0xb2, 0x5f, 0xc1, 0xf2, 0xf0, 0x45, 0xf4, 0x83, 0xc7, 0x0b, 0x50, 0x1c, 0x6c, 0x9f, 0xfd, - 0xdb, 0x30, 0xdf, 0xbb, 0xf7, 0xe2, 0x5c, 0x4b, 0x72, 0xbe, 0xac, 0x3f, 0x67, 0x6f, 0x7f, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x30, 0xa9, 0x4c, 0xde, 0x0d, 0x07, 0x00, 0x00, +var fileDescriptor_relay_335282936f1b89e7 = []byte{ + // 725 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x4e, 0x1b, 0x4b, + 0x10, 0xd5, 0x60, 0x9e, 0xc5, 0xbb, 0x2f, 0x5c, 0x86, 0x59, 0x18, 0xdf, 0x59, 0x20, 0xeb, 0x2a, + 0xb1, 0x25, 0x27, 0xbb, 0xec, 0xc0, 0x82, 0x58, 0xc1, 0x32, 0x6a, 0x27, 0x4a, 0xc4, 0x22, 0x56, + 0x63, 0xb7, 0xcd, 0xc8, 0x63, 0x4f, 0xd3, 0x35, 0x06, 0xf1, 0x05, 0xd9, 0xe5, 0x13, 0xb2, 0xc8, + 0x4f, 0xe4, 0x6f, 0xf2, 0x2d, 0x51, 0x3f, 0x3c, 0x99, 0xf1, 0x03, 0xc2, 0x22, 0x1b, 0xcb, 0x55, + 0x5d, 0x75, 0xaa, 0xce, 0xa9, 0x9e, 0x6a, 0xd8, 0x95, 0x3c, 0x64, 0x0f, 0x65, 0xfd, 0x5b, 0x12, + 0x32, 0x8a, 0x23, 0xb2, 0xa4, 0x0d, 0xef, 0xbf, 0x86, 0xe0, 0xc3, 0x56, 0xad, 0x5e, 0x16, 0xfd, + 0x5e, 0x59, 0x9f, 0x94, 0xb1, 0xd3, 0x6f, 0xdd, 0x63, 0xf9, 0x1e, 0x4d, 0xa4, 0xff, 0xd5, 0x81, + 0x9d, 0xc6, 0x30, 0x0c, 0x86, 0xfc, 0x72, 0x84, 0x37, 0x75, 0xec, 0x51, 0x7e, 0x4b, 0x0a, 0xb0, + 0xde, 0x10, 0x5c, 0xb2, 0x38, 0x88, 0x86, 0xb5, 0xaa, 0xeb, 0x14, 0x9c, 0xe2, 0x1a, 0x4d, 0xbb, + 0xc8, 0x6b, 0x58, 0x19, 0x60, 0xaf, 0xca, 0x62, 0xe6, 0x2e, 0x14, 0x9c, 0xe2, 0x7a, 0xc5, 0x2b, + 0x21, 0x97, 0x77, 0x5c, 0xb6, 0x98, 0x08, 0x5a, 0x82, 0x49, 0x36, 0xc0, 0x52, 0xdd, 0x44, 0xd0, + 0x71, 0x28, 0xf1, 0x61, 0x43, 0x8c, 0xf0, 0xe6, 0x7d, 0xf4, 0x01, 0xb9, 0xac, 0x55, 0xdd, 0x9c, + 0x06, 0xce, 0xf8, 0xfc, 0x73, 0xd8, 0x9d, 0xe8, 0x07, 0x05, 0xa9, 0xc0, 0xa2, 0xe4, 0x28, 0x5c, + 0xa7, 0x90, 0x2b, 0xae, 0x57, 0xf2, 0x25, 0xc3, 0xb5, 0x19, 0x0c, 0x7b, 0x21, 0xaf, 0x63, 0xcf, + 0x24, 0x5f, 0x86, 0x2c, 0xee, 0x46, 0x72, 0x40, 0x75, 0xac, 0xff, 0xc5, 0x81, 0x43, 0x15, 0xc1, + 0xc3, 0x24, 0x82, 0x72, 0x1c, 0x85, 0xf1, 0x45, 0x80, 0x31, 0xf9, 0x17, 0x96, 0x47, 0xa6, 0x09, + 0xc3, 0xce, 0x5a, 0x49, 0xa5, 0x85, 0x3f, 0xaf, 0x44, 0xf2, 0x00, 0x51, 0xd2, 0xb2, 0x26, 0xb5, + 0x4a, 0x53, 0x1e, 0xff, 0x9b, 0x03, 0xae, 0xe1, 0x74, 0xc2, 0xe2, 0xf6, 0x8d, 0xf2, 0x35, 0x86, + 0xfc, 0x2f, 0x6b, 0xfd, 0x3f, 0xec, 0xa4, 0x75, 0x55, 0xa4, 0xdd, 0x5c, 0x21, 0x57, 0x5c, 0xa3, + 0x53, 0x7e, 0x3f, 0x80, 0xc3, 0x39, 0xfd, 0xa1, 0x20, 0x17, 0xb0, 0x83, 0x9a, 0xbe, 0xf2, 0x1b, + 0x05, 0xed, 0x1c, 0x0a, 0x29, 0x75, 0x66, 0xaa, 0x4c, 0xa7, 0x32, 0xfd, 0x07, 0x38, 0x98, 0x23, + 0xa6, 0x92, 0xd1, 0x04, 0x9d, 0x46, 0x1d, 0xae, 0x85, 0xc8, 0xd1, 0x94, 0x47, 0x8d, 0x8c, 0xf2, + 0xf6, 0x5d, 0xad, 0xaa, 0x65, 0x58, 0xa3, 0xd6, 0x22, 0xc7, 0xb0, 0xa5, 0xfe, 0x29, 0x9c, 0xb3, + 0x48, 0x0e, 0xec, 0xbd, 0x5a, 0xa2, 0x13, 0x5e, 0xff, 0x1e, 0x0e, 0xce, 0x79, 0xac, 0x4a, 0xa2, + 0x61, 0xdb, 0x8c, 0x59, 0x3c, 0x42, 0x35, 0x84, 0x3c, 0xc0, 0xe8, 0xb7, 0x4c, 0x8e, 0x96, 0x29, + 0xe5, 0x51, 0x43, 0x8a, 0x52, 0x43, 0x32, 0xf5, 0xd3, 0x2e, 0xe2, 0xc1, 0x6a, 0x24, 0x32, 0xd7, + 0x3a, 0xb1, 0xfd, 0x1f, 0x8b, 0xe0, 0xce, 0xae, 0x8c, 0x82, 0xb8, 0xb0, 0xc2, 0xa5, 0x4c, 0x28, + 0x2f, 0xd1, 0xb1, 0xa9, 0xf8, 0x72, 0x29, 0xeb, 0xd8, 0x1b, 0xf3, 0x35, 0x16, 0x69, 0xc2, 0x26, + 0x8e, 0xda, 0x6d, 0x8e, 0x68, 0xa7, 0x91, 0xd3, 0xd3, 0x78, 0x69, 0xa7, 0x31, 0xaf, 0x52, 0xa9, + 0x99, 0x4e, 0xa2, 0x59, 0x0c, 0x72, 0x09, 0x1b, 0x5d, 0x16, 0x84, 0xbc, 0x63, 0x31, 0x17, 0x35, + 0xe6, 0x8b, 0xa7, 0x30, 0xcf, 0x74, 0x4e, 0x95, 0xc7, 0x2c, 0x08, 0x69, 0x06, 0xc1, 0x3b, 0x85, + 0x4d, 0x5b, 0xd1, 0x1c, 0x2b, 0x89, 0x84, 0x9d, 0xb5, 0xbd, 0xe6, 0x89, 0xad, 0xb8, 0xa2, 0x46, + 0x1d, 0x73, 0x35, 0x96, 0xf7, 0x09, 0x36, 0xd2, 0x25, 0x52, 0x9f, 0x6d, 0x2e, 0xf3, 0xd9, 0x3e, + 0x5b, 0x45, 0xef, 0xbb, 0x93, 0xf4, 0x67, 0x25, 0x98, 0xb7, 0x12, 0xe6, 0xf4, 0x46, 0x18, 0xec, + 0x75, 0x74, 0x57, 0xe3, 0x1b, 0x6c, 0x74, 0x79, 0xe6, 0x38, 0xac, 0x76, 0x33, 0xa1, 0xfc, 0xcf, + 0x40, 0xde, 0x05, 0xed, 0xbe, 0x02, 0x68, 0x74, 0xbb, 0x0a, 0xc0, 0xae, 0x8c, 0x68, 0x7a, 0x65, + 0xa4, 0x6f, 0xe3, 0x31, 0x6c, 0xf5, 0x6d, 0x5e, 0xe6, 0xd3, 0x9f, 0xf0, 0xfa, 0xfb, 0xf0, 0xcf, + 0x14, 0x3e, 0x8a, 0xca, 0xcf, 0x85, 0xf1, 0x42, 0xa8, 0x73, 0x44, 0xd6, 0xe3, 0x54, 0x51, 0x69, + 0x72, 0x79, 0x17, 0xb4, 0x39, 0x39, 0x81, 0xcd, 0xcc, 0x86, 0x26, 0x07, 0x96, 0xea, 0xe4, 0x3b, + 0xe2, 0xb9, 0xb3, 0x0f, 0x50, 0x90, 0x8f, 0xb0, 0x37, 0x4b, 0x18, 0x92, 0x7f, 0x54, 0xb5, 0x5b, + 0xef, 0xe8, 0x09, 0x55, 0xc9, 0x15, 0xec, 0xcf, 0x5c, 0x65, 0xe4, 0x28, 0xd3, 0xcb, 0xf4, 0x22, + 0xf6, 0x0a, 0x8f, 0x07, 0xa0, 0x20, 0x6f, 0x61, 0x7b, 0x42, 0x2d, 0x72, 0x68, 0x93, 0xa6, 0xa7, + 0xe4, 0x79, 0xf3, 0x8e, 0x50, 0x9c, 0xec, 0x5e, 0x6d, 0x97, 0xcc, 0x83, 0xfd, 0x46, 0x5c, 0x6b, + 0x71, 0xaf, 0x97, 0xf5, 0x7b, 0xfc, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0x04, 0x58, + 0xb0, 0xce, 0x07, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index cee15887c..b5e1bfe11 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -67,11 +67,19 @@ message GetUsersOnlineStatusResp{ repeated SuccessDetail detailPlatformStatus = 3; } +} +message KickUserOfflineReq{ + string operationID = 1; + repeated string kickUserIDList = 3; +} +message KickUserOfflineResp{ + } service OnlineMessageRelayService { rpc OnlinePushMsg(OnlinePushMsgReq) returns(OnlinePushMsgResp); rpc GetUsersOnlineStatus(GetUsersOnlineStatusReq)returns(GetUsersOnlineStatusResp); rpc OnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); + rpc KickUserOffline(KickUserOfflineReq) returns(KickUserOfflineResp); // rpc SendMsgByWS(SendMsgByWSReq) returns(MsgToUserResp); } From f8b4cbcc132a1f2b2937e25ce2e49273779a8d6b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 21:04:11 +0800 Subject: [PATCH 370/752] singal offline push --- internal/push/logic/push_to_client.go | 1 - pkg/common/db/newRedisModel.go | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 8aeb6b82c..90e56c1f7 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -85,7 +85,6 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { content = pushMsg.MsgData.OfflinePushInfo.Title log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "xxxx OfflinePushInfo", content) } else { - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "xxxx2222 OfflinePushInfo", content) switch pushMsg.MsgData.ContentType { case constant.Text: content = constant.ContentType2PushContent[constant.Text] diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 04bcd28c7..254a06975 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -111,13 +111,22 @@ func (d *DataBases) NewCacheSignalInfo(msg *pbCommon.MsgData) error { return err } //log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "SignalReq: ", req.String()) - switch req.Payload.(type) { - case *pbRtc.SignalReq_Invite, *pbRtc.SignalReq_InviteInGroup: - keyList := SignalListCache + msg.RecvID + var inviteeUserIDList []string + switch invitationInfo := req.Payload.(type) { + case *pbRtc.SignalReq_Invite: + inviteeUserIDList = invitationInfo.Invite.Invitation.InviteeUserIDList + case *pbRtc.SignalReq_InviteInGroup: + inviteeUserIDList = invitationInfo.InviteInGroup.Invitation.InviteeUserIDList + default: + log2.NewDebug("", utils.GetSelfFuncName(), "req type not invite", string(msg.Content)) + return nil + } + for _, userID := range inviteeUserIDList { timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) if err != nil { return err } + keyList := SignalListCache + userID err = d.rdb.LPush(context.Background(), keyList, msg.ClientMsgID).Err() if err != nil { return err @@ -132,8 +141,6 @@ func (d *DataBases) NewCacheSignalInfo(msg *pbCommon.MsgData) error { return err } return err - default: - log2.NewDebug("", utils.GetSelfFuncName(), "req type not invite", string(msg.Content)) } return nil } From 064b650fac16d184f4b63d13383649eb7509d013 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 6 Jun 2022 23:19:07 +0800 Subject: [PATCH 371/752] group administrator access --- internal/rpc/auth/auth.go | 40 ++++-- internal/rpc/group/group.go | 221 +++++++++++++++++++++++-------- pkg/base_info/auth_api_struct.go | 1 - 3 files changed, 193 insertions(+), 69 deletions(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 02f246004..c9665ead2 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -8,6 +8,7 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbAuth "Open_IM/pkg/proto/auth" + pbRelay "Open_IM/pkg/proto/relay" "Open_IM/pkg/utils" "context" "net" @@ -59,17 +60,36 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA } func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) { - //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) - //err := token_verify.DeleteToken(req.FromUserID, int(req.Platform)) - //if err != nil { - // errMsg := req.OperationID + " imdb.DeleteToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) - // log.NewError(req.OperationID, errMsg) - // return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil - //} - // - //return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil - return nil, nil + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) + if !token_verify.IsManagerUserID(req.OpUserID) { + errMsg := req.OperationID + " IsManagerUserID false " + req.OpUserID + log.NewError(req.OperationID, errMsg) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if err := token_verify.DeleteToken(req.FromUserID, int(req.Platform)); err != nil { + errMsg := req.OperationID + " DeleteToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) + log.NewError(req.OperationID, errMsg) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil + } + if err := rpc.forceKickOff(req.FromUserID, req.Platform, req.OperationID); err != nil { + errMsg := req.OperationID + " forceKickOff failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) + log.NewError(req.OperationID, errMsg) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}}) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{}}, nil +} +func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID string) error { + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) + + kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}} + _, err := client.KickUserOffline(context.Background(), kickReq) + if err != nil { + return utils.Wrap(err, "") + } + return nil } type rpcAuth struct { diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 3e9b49190..398d5982c 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -452,8 +452,28 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr return &resp, nil } +func (s *groupServer) getGroupUserLevel(groupID, userID string) (int, error) { + opFlag := 0 + if !token_verify.IsManagerUserID(userID) { + opInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID) + if err != nil { + return opFlag, utils.Wrap(err, "") + } + if opInfo.RoleLevel == constant.GroupOrdinaryUsers { + opFlag = 0 + } else if opInfo.RoleLevel == constant.GroupOwner { + opFlag = 2 //owner + } else { + opFlag = 3 //admin + } + } else { + opFlag = 1 //app manager + } + return opFlag, nil +} + func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) { - log.NewInfo(req.OperationID, "KickGroupMember args ", req.String()) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupInfoByGroupID", req.GroupID, err.Error()) @@ -462,54 +482,54 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou var okUserIDList []string var resp pbGroup.KickGroupMemberResp if groupInfo.GroupType != constant.SuperGroup { - ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID) - if err != nil { - log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID) - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil + opFlag := 0 + if !token_verify.IsManagerUserID(req.OpUserID) { + opInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + err.Error() + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + if opInfo.RoleLevel == constant.GroupOrdinaryUsers { + errMsg := req.OperationID + " opInfo.RoleLevel == constant.GroupOrdinaryUsers " + opInfo.UserID + opInfo.GroupID + log.Error(req.OperationID, errMsg) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } else if opInfo.RoleLevel == constant.GroupOwner { + opFlag = 2 //owner + } else { + opFlag = 3 //admin + } + } else { + opFlag = 1 //app manager } + //op is group owner? - var flag = 0 - for _, v := range ownerList { - if v.UserID == req.OpUserID { - flag = 1 - log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID) - break - } - } - - //op is app manager - if flag != 1 { - if token_verify.IsManagerUserID(req.OpUserID) { - flag = 1 - log.NewDebug(req.OperationID, "is app manager ", req.OpUserID) - } - } - - if flag != 1 { - log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID) - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil - } - if len(req.KickedUserIDList) == 0 { log.NewError(req.OperationID, "failed, kick list 0") return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil } - groupOwnerUserID := "" - for _, v := range ownerList { - if v.RoleLevel == constant.GroupOwner { - groupOwnerUserID = v.UserID - } - } //remove for _, v := range req.KickedUserIDList { - //owner can‘t kicked - if v == groupOwnerUserID { - log.NewError(req.OperationID, "failed, can't kick owner ", v) + kickedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, v) + if err != nil { + log.NewError(req.OperationID, " GetGroupMemberInfoByGroupIDAndUserID failed ", req.GroupID, v, err.Error()) resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) continue } - err := imdb.RemoveGroupMember(req.GroupID, v) + + if kickedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + log.Error(req.OperationID, "is constant.GroupAdmin, can't kicked ", v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + continue + } + if kickedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + log.NewDebug(req.OperationID, "is constant.GroupOwner, can't kicked ", v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + continue + } + + err = imdb.RemoveGroupMember(req.GroupID, v) if err != nil { log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v) resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) @@ -518,11 +538,6 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0}) okUserIDList = append(okUserIDList, v) } - - //err = db.DB.DelGroupMember(req.GroupID, v) - //if err != nil { - // log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v) - //} } var reqPb pbUser.SetConversationReq var c pbUser.Conversation @@ -1377,14 +1392,36 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.GroupID, req.UserID) - return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.UserID} groupMemberInfo.MuteEndTime = time.Unix(int64(time.Now().Second())+int64(req.MutedSeconds), time.Now().UnixNano()) - err := imdb.UpdateGroupMemberInfo(groupMemberInfo) + err = imdb.UpdateGroupMemberInfo(groupMemberInfo) if err != nil { log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo) return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil @@ -1396,13 +1433,36 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.CancelMuteGroupMemberReq) (*pbGroup.CancelMuteGroupMemberResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.OpUserID, req.GroupID) - return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.UserID} groupMemberInfo.MuteEndTime = time.Unix(0, 0) - err := imdb.UpdateGroupMemberInfo(groupMemberInfo) + err = imdb.UpdateGroupMemberInfo(groupMemberInfo) if err != nil { log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo) return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil @@ -1414,11 +1474,34 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) (*pbGroup.MuteGroupResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.GroupID, req.GroupID) - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - err := imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusMuted) + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + err = imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusMuted) if err != nil { log.Error(req.OperationID, "OperateGroupStatus failed ", err.Error(), req.GroupID, constant.GroupStatusMuted) return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil @@ -1430,12 +1513,34 @@ func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMuteGroupReq) (*pbGroup.CancelMuteGroupResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.OpUserID, req.GroupID) - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - err := imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + err = imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) if err != nil { log.Error(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), req.GroupID) return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 9e46a92d7..bfd7b5e56 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -39,7 +39,6 @@ type UserTokenResp struct { } type ForceLogoutReq struct { - Secret string `json:"secret" binding:"required,max=32"` Platform int32 `json:"platform" binding:"required,min=1,max=8"` UserID string `json:"userID" binding:"required,min=1,max=64"` OperationID string `json:"operationID" binding:"required"` From 34c091f232e510ed95dd6e827f9a555cd6e5691b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 6 Jun 2022 23:27:16 +0800 Subject: [PATCH 372/752] signal --- pkg/common/db/newRedisModel.go | 22 +++++++++++++++++++--- pkg/common/db/redisModel.go | 2 ++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 254a06975..ab7a28d8c 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -10,12 +10,15 @@ import ( "context" "errors" "fmt" + "github.com/garyburd/redigo/redis" + //goRedis "github.com/go-redis/redis/v8" - "github.com/golang/protobuf/proto" - "github.com/mitchellh/mapstructure" "strconv" "time" + + "github.com/golang/protobuf/proto" + "github.com/mitchellh/mapstructure" ) //func (d * DataBases)pubMessage(channel, msg string) { @@ -177,5 +180,18 @@ func (d *DataBases) GetAvailableSignalInvitationInfo(userID string) (invitationI } log2.NewDebug("", utils.GetSelfFuncName(), result, result.String()) invitationInfo, err = d.GetSignalInfoFromCacheByClientMsgID(key) - return invitationInfo, utils.Wrap(err, "GetSignalInfoFromCacheByClientMsgID") + if err != nil { + return nil, utils.Wrap(err, "GetSignalInfoFromCacheByClientMsgID") + } + err = d.delUserSingalList(userID) + if err != nil { + return nil, utils.Wrap(err, "GetSignalInfoFromCacheByClientMsgID") + } + return invitationInfo, nil +} + +func (d *DataBases) delUserSingalList(userID string) error { + keyList := SignalListCache + userID + err := d.rdb.Del(context.Background(), keyList).Err() + return err } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 6d54974ed..364b386ce 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -11,9 +11,11 @@ import ( "encoding/json" "errors" "fmt" + "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" + //osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" "strconv" ) From 78298e1284f58036ab392cd5b5ae2ce94d1cd161 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 10:11:49 +0800 Subject: [PATCH 373/752] pb file --- pkg/proto/relay/relay.pb.go | 130 +++++++++++++++++++----------------- pkg/proto/relay/relay.proto | 1 + 2 files changed, 70 insertions(+), 61 deletions(-) diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 810e14a92..8a45ede9b 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{0} + return fileDescriptor_relay_022e07b962c41b1c, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{1} + return fileDescriptor_relay_022e07b962c41b1c, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -129,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{2} + return fileDescriptor_relay_022e07b962c41b1c, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{3} + return fileDescriptor_relay_022e07b962c41b1c, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -235,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{4} + return fileDescriptor_relay_022e07b962c41b1c, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{5} + return fileDescriptor_relay_022e07b962c41b1c, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{6} + return fileDescriptor_relay_022e07b962c41b1c, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -384,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7} + return fileDescriptor_relay_022e07b962c41b1c, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -446,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7, 0} + return fileDescriptor_relay_022e07b962c41b1c, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -493,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7, 1} + return fileDescriptor_relay_022e07b962c41b1c, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -549,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7, 2} + return fileDescriptor_relay_022e07b962c41b1c, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -592,6 +592,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) GetDetailPlatformStatus() []*Ge type KickUserOfflineReq struct { OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + PlatformID int32 `protobuf:"varint,2,opt,name=platformID" json:"platformID,omitempty"` KickUserIDList []string `protobuf:"bytes,3,rep,name=kickUserIDList" json:"kickUserIDList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -602,7 +603,7 @@ func (m *KickUserOfflineReq) Reset() { *m = KickUserOfflineReq{} } func (m *KickUserOfflineReq) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineReq) ProtoMessage() {} func (*KickUserOfflineReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{8} + return fileDescriptor_relay_022e07b962c41b1c, []int{8} } func (m *KickUserOfflineReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineReq.Unmarshal(m, b) @@ -629,6 +630,13 @@ func (m *KickUserOfflineReq) GetOperationID() string { return "" } +func (m *KickUserOfflineReq) GetPlatformID() int32 { + if m != nil { + return m.PlatformID + } + return 0 +} + func (m *KickUserOfflineReq) GetKickUserIDList() []string { if m != nil { return m.KickUserIDList @@ -646,7 +654,7 @@ func (m *KickUserOfflineResp) Reset() { *m = KickUserOfflineResp{} } func (m *KickUserOfflineResp) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineResp) ProtoMessage() {} func (*KickUserOfflineResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{9} + return fileDescriptor_relay_022e07b962c41b1c, []int{9} } func (m *KickUserOfflineResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineResp.Unmarshal(m, b) @@ -853,54 +861,54 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_335282936f1b89e7) } +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_022e07b962c41b1c) } -var fileDescriptor_relay_335282936f1b89e7 = []byte{ - // 725 bytes of a gzipped FileDescriptorProto +var fileDescriptor_relay_022e07b962c41b1c = []byte{ + // 736 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x4e, 0x1b, 0x4b, - 0x10, 0xd5, 0x60, 0x9e, 0xc5, 0xbb, 0x2f, 0x5c, 0x86, 0x59, 0x18, 0xdf, 0x59, 0x20, 0xeb, 0x2a, - 0xb1, 0x25, 0x27, 0xbb, 0xec, 0xc0, 0x82, 0x58, 0xc1, 0x32, 0x6a, 0x27, 0x4a, 0xc4, 0x22, 0x56, - 0x63, 0xb7, 0xcd, 0xc8, 0x63, 0x4f, 0xd3, 0x35, 0x06, 0xf1, 0x05, 0xd9, 0xe5, 0x13, 0xb2, 0xc8, - 0x4f, 0xe4, 0x6f, 0xf2, 0x2d, 0x51, 0x3f, 0x3c, 0x99, 0xf1, 0x03, 0xc2, 0x22, 0x1b, 0xcb, 0x55, - 0x5d, 0x75, 0xaa, 0xce, 0xa9, 0x9e, 0x6a, 0xd8, 0x95, 0x3c, 0x64, 0x0f, 0x65, 0xfd, 0x5b, 0x12, - 0x32, 0x8a, 0x23, 0xb2, 0xa4, 0x0d, 0xef, 0xbf, 0x86, 0xe0, 0xc3, 0x56, 0xad, 0x5e, 0x16, 0xfd, - 0x5e, 0x59, 0x9f, 0x94, 0xb1, 0xd3, 0x6f, 0xdd, 0x63, 0xf9, 0x1e, 0x4d, 0xa4, 0xff, 0xd5, 0x81, - 0x9d, 0xc6, 0x30, 0x0c, 0x86, 0xfc, 0x72, 0x84, 0x37, 0x75, 0xec, 0x51, 0x7e, 0x4b, 0x0a, 0xb0, - 0xde, 0x10, 0x5c, 0xb2, 0x38, 0x88, 0x86, 0xb5, 0xaa, 0xeb, 0x14, 0x9c, 0xe2, 0x1a, 0x4d, 0xbb, - 0xc8, 0x6b, 0x58, 0x19, 0x60, 0xaf, 0xca, 0x62, 0xe6, 0x2e, 0x14, 0x9c, 0xe2, 0x7a, 0xc5, 0x2b, - 0x21, 0x97, 0x77, 0x5c, 0xb6, 0x98, 0x08, 0x5a, 0x82, 0x49, 0x36, 0xc0, 0x52, 0xdd, 0x44, 0xd0, - 0x71, 0x28, 0xf1, 0x61, 0x43, 0x8c, 0xf0, 0xe6, 0x7d, 0xf4, 0x01, 0xb9, 0xac, 0x55, 0xdd, 0x9c, - 0x06, 0xce, 0xf8, 0xfc, 0x73, 0xd8, 0x9d, 0xe8, 0x07, 0x05, 0xa9, 0xc0, 0xa2, 0xe4, 0x28, 0x5c, - 0xa7, 0x90, 0x2b, 0xae, 0x57, 0xf2, 0x25, 0xc3, 0xb5, 0x19, 0x0c, 0x7b, 0x21, 0xaf, 0x63, 0xcf, - 0x24, 0x5f, 0x86, 0x2c, 0xee, 0x46, 0x72, 0x40, 0x75, 0xac, 0xff, 0xc5, 0x81, 0x43, 0x15, 0xc1, - 0xc3, 0x24, 0x82, 0x72, 0x1c, 0x85, 0xf1, 0x45, 0x80, 0x31, 0xf9, 0x17, 0x96, 0x47, 0xa6, 0x09, - 0xc3, 0xce, 0x5a, 0x49, 0xa5, 0x85, 0x3f, 0xaf, 0x44, 0xf2, 0x00, 0x51, 0xd2, 0xb2, 0x26, 0xb5, - 0x4a, 0x53, 0x1e, 0xff, 0x9b, 0x03, 0xae, 0xe1, 0x74, 0xc2, 0xe2, 0xf6, 0x8d, 0xf2, 0x35, 0x86, - 0xfc, 0x2f, 0x6b, 0xfd, 0x3f, 0xec, 0xa4, 0x75, 0x55, 0xa4, 0xdd, 0x5c, 0x21, 0x57, 0x5c, 0xa3, - 0x53, 0x7e, 0x3f, 0x80, 0xc3, 0x39, 0xfd, 0xa1, 0x20, 0x17, 0xb0, 0x83, 0x9a, 0xbe, 0xf2, 0x1b, - 0x05, 0xed, 0x1c, 0x0a, 0x29, 0x75, 0x66, 0xaa, 0x4c, 0xa7, 0x32, 0xfd, 0x07, 0x38, 0x98, 0x23, - 0xa6, 0x92, 0xd1, 0x04, 0x9d, 0x46, 0x1d, 0xae, 0x85, 0xc8, 0xd1, 0x94, 0x47, 0x8d, 0x8c, 0xf2, - 0xf6, 0x5d, 0xad, 0xaa, 0x65, 0x58, 0xa3, 0xd6, 0x22, 0xc7, 0xb0, 0xa5, 0xfe, 0x29, 0x9c, 0xb3, - 0x48, 0x0e, 0xec, 0xbd, 0x5a, 0xa2, 0x13, 0x5e, 0xff, 0x1e, 0x0e, 0xce, 0x79, 0xac, 0x4a, 0xa2, - 0x61, 0xdb, 0x8c, 0x59, 0x3c, 0x42, 0x35, 0x84, 0x3c, 0xc0, 0xe8, 0xb7, 0x4c, 0x8e, 0x96, 0x29, - 0xe5, 0x51, 0x43, 0x8a, 0x52, 0x43, 0x32, 0xf5, 0xd3, 0x2e, 0xe2, 0xc1, 0x6a, 0x24, 0x32, 0xd7, - 0x3a, 0xb1, 0xfd, 0x1f, 0x8b, 0xe0, 0xce, 0xae, 0x8c, 0x82, 0xb8, 0xb0, 0xc2, 0xa5, 0x4c, 0x28, - 0x2f, 0xd1, 0xb1, 0xa9, 0xf8, 0x72, 0x29, 0xeb, 0xd8, 0x1b, 0xf3, 0x35, 0x16, 0x69, 0xc2, 0x26, - 0x8e, 0xda, 0x6d, 0x8e, 0x68, 0xa7, 0x91, 0xd3, 0xd3, 0x78, 0x69, 0xa7, 0x31, 0xaf, 0x52, 0xa9, - 0x99, 0x4e, 0xa2, 0x59, 0x0c, 0x72, 0x09, 0x1b, 0x5d, 0x16, 0x84, 0xbc, 0x63, 0x31, 0x17, 0x35, - 0xe6, 0x8b, 0xa7, 0x30, 0xcf, 0x74, 0x4e, 0x95, 0xc7, 0x2c, 0x08, 0x69, 0x06, 0xc1, 0x3b, 0x85, - 0x4d, 0x5b, 0xd1, 0x1c, 0x2b, 0x89, 0x84, 0x9d, 0xb5, 0xbd, 0xe6, 0x89, 0xad, 0xb8, 0xa2, 0x46, - 0x1d, 0x73, 0x35, 0x96, 0xf7, 0x09, 0x36, 0xd2, 0x25, 0x52, 0x9f, 0x6d, 0x2e, 0xf3, 0xd9, 0x3e, - 0x5b, 0x45, 0xef, 0xbb, 0x93, 0xf4, 0x67, 0x25, 0x98, 0xb7, 0x12, 0xe6, 0xf4, 0x46, 0x18, 0xec, - 0x75, 0x74, 0x57, 0xe3, 0x1b, 0x6c, 0x74, 0x79, 0xe6, 0x38, 0xac, 0x76, 0x33, 0xa1, 0xfc, 0xcf, - 0x40, 0xde, 0x05, 0xed, 0xbe, 0x02, 0x68, 0x74, 0xbb, 0x0a, 0xc0, 0xae, 0x8c, 0x68, 0x7a, 0x65, - 0xa4, 0x6f, 0xe3, 0x31, 0x6c, 0xf5, 0x6d, 0x5e, 0xe6, 0xd3, 0x9f, 0xf0, 0xfa, 0xfb, 0xf0, 0xcf, - 0x14, 0x3e, 0x8a, 0xca, 0xcf, 0x85, 0xf1, 0x42, 0xa8, 0x73, 0x44, 0xd6, 0xe3, 0x54, 0x51, 0x69, - 0x72, 0x79, 0x17, 0xb4, 0x39, 0x39, 0x81, 0xcd, 0xcc, 0x86, 0x26, 0x07, 0x96, 0xea, 0xe4, 0x3b, - 0xe2, 0xb9, 0xb3, 0x0f, 0x50, 0x90, 0x8f, 0xb0, 0x37, 0x4b, 0x18, 0x92, 0x7f, 0x54, 0xb5, 0x5b, - 0xef, 0xe8, 0x09, 0x55, 0xc9, 0x15, 0xec, 0xcf, 0x5c, 0x65, 0xe4, 0x28, 0xd3, 0xcb, 0xf4, 0x22, - 0xf6, 0x0a, 0x8f, 0x07, 0xa0, 0x20, 0x6f, 0x61, 0x7b, 0x42, 0x2d, 0x72, 0x68, 0x93, 0xa6, 0xa7, - 0xe4, 0x79, 0xf3, 0x8e, 0x50, 0x9c, 0xec, 0x5e, 0x6d, 0x97, 0xcc, 0x83, 0xfd, 0x46, 0x5c, 0x6b, - 0x71, 0xaf, 0x97, 0xf5, 0x7b, 0xfc, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0x04, 0x58, - 0xb0, 0xce, 0x07, 0x00, 0x00, + 0x10, 0xd5, 0x60, 0xcc, 0xa3, 0x80, 0x0b, 0xf4, 0x85, 0xcb, 0x30, 0x0b, 0xe3, 0x3b, 0x8b, 0xc8, + 0x8a, 0x12, 0x5b, 0x72, 0xb2, 0xcb, 0x0e, 0x2c, 0x88, 0x15, 0x2c, 0xa3, 0x76, 0xa2, 0x44, 0x6c, + 0xac, 0xc6, 0x6e, 0x9b, 0x91, 0xc7, 0x9e, 0xa6, 0x6b, 0x0c, 0x62, 0x93, 0x6d, 0x76, 0xf9, 0x84, + 0x2c, 0xf2, 0x13, 0xf9, 0x9b, 0x7c, 0x4b, 0xd4, 0x0f, 0x4f, 0x66, 0xfc, 0x80, 0xb0, 0xc8, 0xc6, + 0x72, 0x55, 0x57, 0x9f, 0xaa, 0x73, 0xaa, 0xa6, 0x1a, 0x76, 0x25, 0x0f, 0xd9, 0x7d, 0x45, 0xff, + 0x96, 0x85, 0x8c, 0xe2, 0x88, 0xe4, 0xb5, 0xe1, 0xfd, 0xdf, 0x14, 0x7c, 0xd4, 0xae, 0x37, 0x2a, + 0x62, 0xd0, 0xaf, 0xe8, 0x93, 0x0a, 0x76, 0x07, 0xed, 0x3b, 0xac, 0xdc, 0xa1, 0x89, 0xf4, 0xbf, + 0x3a, 0xb0, 0xd3, 0x1c, 0x85, 0xc1, 0x88, 0x5f, 0x8c, 0xf1, 0xba, 0x81, 0x7d, 0xca, 0x6f, 0x48, + 0x11, 0x36, 0x9a, 0x82, 0x4b, 0x16, 0x07, 0xd1, 0xa8, 0x5e, 0x73, 0x9d, 0xa2, 0x53, 0x5a, 0xa7, + 0x69, 0x17, 0x79, 0x0d, 0xab, 0x43, 0xec, 0xd7, 0x58, 0xcc, 0xdc, 0xa5, 0xa2, 0x53, 0xda, 0xa8, + 0x7a, 0x65, 0xe4, 0xf2, 0x96, 0xcb, 0x36, 0x13, 0x41, 0x5b, 0x30, 0xc9, 0x86, 0x58, 0x6e, 0x98, + 0x08, 0x3a, 0x09, 0x25, 0x3e, 0x6c, 0x8a, 0x31, 0x5e, 0xbf, 0x8f, 0x3e, 0x20, 0x97, 0xf5, 0x9a, + 0x9b, 0xd3, 0xc0, 0x19, 0x9f, 0x7f, 0x06, 0xbb, 0x53, 0xf5, 0xa0, 0x20, 0x55, 0x58, 0x96, 0x1c, + 0x85, 0xeb, 0x14, 0x73, 0xa5, 0x8d, 0x6a, 0xa1, 0x6c, 0xb8, 0xb6, 0x82, 0x51, 0x3f, 0xe4, 0x0d, + 0xec, 0x9b, 0xcb, 0x17, 0x21, 0x8b, 0x7b, 0x91, 0x1c, 0x52, 0x1d, 0xeb, 0x7f, 0x71, 0xe0, 0x50, + 0x45, 0xf0, 0x30, 0x89, 0xa0, 0x1c, 0xc7, 0x61, 0x7c, 0x1e, 0x60, 0x4c, 0xfe, 0x83, 0x95, 0xb1, + 0x29, 0xc2, 0xb0, 0xb3, 0x56, 0x92, 0x69, 0xe9, 0xcf, 0x33, 0x91, 0x02, 0x40, 0x94, 0x94, 0xac, + 0x49, 0xad, 0xd1, 0x94, 0xc7, 0xff, 0xe6, 0x80, 0x6b, 0x38, 0x1d, 0xb3, 0xb8, 0x73, 0xad, 0x7c, + 0xcd, 0x11, 0xff, 0xcb, 0x5a, 0x3f, 0x87, 0x9d, 0xb4, 0xae, 0x8a, 0xb4, 0x9b, 0x2b, 0xe6, 0x4a, + 0xeb, 0x74, 0xc6, 0xef, 0x07, 0x70, 0xb8, 0xa0, 0x3e, 0x14, 0xe4, 0x1c, 0x76, 0x50, 0xd3, 0x57, + 0x7e, 0xa3, 0xa0, 0xed, 0x43, 0x31, 0xa5, 0xce, 0x5c, 0x95, 0xe9, 0xcc, 0x4d, 0xff, 0x1e, 0x0e, + 0x16, 0x88, 0xa9, 0x64, 0x34, 0x41, 0x27, 0x51, 0x97, 0x6b, 0x21, 0x72, 0x34, 0xe5, 0x51, 0x2d, + 0xa3, 0xbc, 0x73, 0x5b, 0xaf, 0x69, 0x19, 0xd6, 0xa9, 0xb5, 0xc8, 0x33, 0xf8, 0x47, 0xfd, 0x53, + 0x38, 0xa7, 0x91, 0x1c, 0xda, 0xb9, 0xca, 0xd3, 0x29, 0xaf, 0x7f, 0x07, 0x07, 0x67, 0x3c, 0x56, + 0x29, 0xd1, 0xb0, 0x6d, 0xc5, 0x2c, 0x1e, 0xa3, 0x6a, 0x42, 0x01, 0x60, 0xfc, 0x5b, 0x26, 0x47, + 0xcb, 0x94, 0xf2, 0xa8, 0x26, 0x45, 0xa9, 0x26, 0x99, 0xfc, 0x69, 0x17, 0xf1, 0x60, 0x2d, 0x12, + 0x99, 0xb1, 0x4e, 0x6c, 0xff, 0xc7, 0x32, 0xb8, 0xf3, 0x33, 0xa3, 0x20, 0x2e, 0xac, 0x72, 0x29, + 0x13, 0xca, 0x79, 0x3a, 0x31, 0x15, 0x5f, 0x2e, 0x65, 0x03, 0xfb, 0x13, 0xbe, 0xc6, 0x22, 0x2d, + 0xd8, 0xc2, 0x71, 0xa7, 0xc3, 0x11, 0x6d, 0x37, 0x72, 0xba, 0x1b, 0x2f, 0x6d, 0x37, 0x16, 0x65, + 0x2a, 0xb7, 0xd2, 0x97, 0x68, 0x16, 0x83, 0x5c, 0xc0, 0x66, 0x8f, 0x05, 0x21, 0xef, 0x5a, 0xcc, + 0x65, 0x8d, 0xf9, 0xe2, 0x31, 0xcc, 0x53, 0x7d, 0xa7, 0xc6, 0x63, 0x16, 0x84, 0x34, 0x83, 0xe0, + 0x9d, 0xc0, 0x96, 0xcd, 0x68, 0x8e, 0x95, 0x44, 0xc2, 0xf6, 0xda, 0x8e, 0x79, 0x62, 0x2b, 0xae, + 0xa8, 0x51, 0x27, 0x5c, 0x8d, 0xe5, 0x7d, 0x82, 0xcd, 0x74, 0x8a, 0xd4, 0x67, 0x9b, 0xcb, 0x7c, + 0xb6, 0x4f, 0x56, 0xd1, 0xfb, 0xee, 0x24, 0xf5, 0x59, 0x09, 0x16, 0xad, 0x84, 0x05, 0xb5, 0x11, + 0x06, 0x7b, 0x5d, 0x5d, 0xd5, 0x64, 0x82, 0x8d, 0x2e, 0x4f, 0x6c, 0x87, 0xd5, 0x6e, 0x2e, 0x94, + 0xff, 0x19, 0xc8, 0xbb, 0xa0, 0x33, 0x50, 0x00, 0xcd, 0x5e, 0x4f, 0x01, 0xd8, 0x95, 0x11, 0xcd, + 0xae, 0x8c, 0xf4, 0x34, 0x16, 0x00, 0x26, 0xd2, 0xda, 0x71, 0xcd, 0xd3, 0x94, 0x47, 0x7d, 0x32, + 0x03, 0x8b, 0x9b, 0x59, 0x0d, 0x53, 0x5e, 0x7f, 0x1f, 0xfe, 0x9d, 0xc9, 0x8f, 0xa2, 0xfa, 0x73, + 0x69, 0xb2, 0x30, 0x1a, 0x1c, 0x91, 0xf5, 0x39, 0x55, 0x54, 0x5b, 0x5c, 0xde, 0x06, 0x1d, 0x4e, + 0x8e, 0x61, 0x2b, 0xb3, 0xc1, 0xc9, 0x81, 0x95, 0x62, 0xfa, 0x9d, 0xf1, 0xdc, 0xf9, 0x07, 0x28, + 0xc8, 0x47, 0xd8, 0x9b, 0x27, 0x1c, 0x29, 0x3c, 0xa8, 0xea, 0x8d, 0x77, 0xf4, 0x88, 0xea, 0xe4, + 0x12, 0xf6, 0xe7, 0xae, 0x3a, 0x72, 0x94, 0xa9, 0x65, 0x76, 0x51, 0x7b, 0xc5, 0x87, 0x03, 0x50, + 0x90, 0xb7, 0xb0, 0x3d, 0xa5, 0x16, 0x39, 0xb4, 0x97, 0x66, 0xbb, 0xe8, 0x79, 0x8b, 0x8e, 0x50, + 0x1c, 0xef, 0x5e, 0x6e, 0x97, 0xcd, 0x83, 0xfe, 0x46, 0x5c, 0x69, 0x71, 0xaf, 0x56, 0xf4, 0x7b, + 0xfd, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xfe, 0xd8, 0xc1, 0xee, 0x07, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index b5e1bfe11..3074fea68 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -70,6 +70,7 @@ message GetUsersOnlineStatusResp{ } message KickUserOfflineReq{ string operationID = 1; +int32 platformID = 2; repeated string kickUserIDList = 3; } message KickUserOfflineResp{ From 4678189ed473a883198d440e5e8a709616b0bc3a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 10:12:15 +0800 Subject: [PATCH 374/752] pb file --- internal/rpc/auth/auth.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index c9665ead2..425df49ff 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -84,7 +84,7 @@ func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID st etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) - kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}} + kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} _, err := client.KickUserOffline(context.Background(), kickReq) if err != nil { return utils.Wrap(err, "") From 9106e70b375452f871ae81c958924285e911b36e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 10:13:19 +0800 Subject: [PATCH 375/752] group administrator access --- cmd/open_im_api/main.go | 3 ++- internal/rpc/group/group.go | 26 +++++++++++++------------- pkg/common/token_verify/jwt_token.go | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 8fbc78576..af2bab6dc 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -89,6 +89,7 @@ func main() { groupRouterGroup.POST("/mute_group", group.MuteGroup) groupRouterGroup.POST("/cancel_mute_group", group.CancelMuteGroup) groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname) + } superGroupRouterGroup := r.Group("/super_group") { @@ -101,6 +102,7 @@ func main() { authRouterGroup.POST("/user_register", apiAuth.UserRegister) //1 authRouterGroup.POST("/user_token", apiAuth.UserToken) //1 authRouterGroup.POST("/parse_token", apiAuth.ParseToken) //1 + authRouterGroup.POST("/force_logout", apiAuth.ForceLogout) //1 } //Third service thirdGroup := r.Group("/third") @@ -130,7 +132,6 @@ func main() { managementGroup.POST("/get_all_users_uid", manage.GetAllUsersUid) //1 managementGroup.POST("/account_check", manage.AccountCheck) //1 managementGroup.POST("/get_users_online_status", manage.GetUsersOnlineStatus) //1 - } //Conversation conversationGroup := r.Group("/conversation") diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 398d5982c..d544cb04f 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1526,19 +1526,19 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) - if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } + //mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.) + //if err != nil { + // errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} err = imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) if err != nil { diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 08ff786aa..f1e95bba7 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -37,6 +37,25 @@ func BuildClaims(uid, platform string, ttl int64) Claims { }} } +func DeleteToken(userID string, platformID int) error { + m, err := commonDB.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) + if err != nil && err != redis.ErrNil { + return utils.Wrap(err, "") + } + var deleteTokenKey []string + for k, v := range m { + _, err = GetClaimFromToken(k) + if err != nil || v != constant.NormalToken { + deleteTokenKey = append(deleteTokenKey, k) + } + } + if len(deleteTokenKey) != 0 { + err = commonDB.DB.DeleteTokenByUidPid(userID, platformID, deleteTokenKey) + return utils.Wrap(err, "") + } + return nil +} + func CreateToken(userID string, platformID int) (string, int64, error) { claims := BuildClaims(userID, constant.PlatformIDToName(platformID), config.Config.TokenPolicy.AccessExpire) token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) From 3639f943bfe879ae33562cd275e9d95a34cb6df4 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 10:20:56 +0800 Subject: [PATCH 376/752] group administrator access --- internal/rpc/group/group.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index d544cb04f..e9452a813 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1487,19 +1487,19 @@ func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) - if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } + //mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + //if err != nil { + // errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} err = imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusMuted) if err != nil { From 34e8b79e7e421d80af3374bb3797f7a2333a4479 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 10:38:01 +0800 Subject: [PATCH 377/752] pb file --- internal/msg_gateway/gate/rpc_server.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 4ad615415..94195449a 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -29,10 +29,6 @@ type RPCServer struct { pushTerminal []int } -func (r *RPCServer) KickUserOffline(c context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { - panic("implement me") -} - func (r *RPCServer) onInit(rpcPort int) { r.rpcPort = rpcPort r.rpcRegisterName = config.Config.RpcRegisterName.OpenImOnlineMessageRelayName @@ -192,6 +188,9 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online SinglePushResult: singleUserResult, }, nil } +func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { + panic("implement me") +} func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) if err != nil { From 6efb1a670597d34c3db12e389f18b27aee4f0008 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 10:40:19 +0800 Subject: [PATCH 378/752] fix bug: v.MsgData == nil --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index fb5b33ce9..e42bbf22a 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -107,6 +107,10 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) + if v.MsgData == nil { + log.NewWarn(triggerID, "msg come to storage center nil", v.String()) + continue + } isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) if isHistory { From 385f371c063cb1a70157011cb0dd8e3567c3df0a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 10:52:52 +0800 Subject: [PATCH 379/752] fix bug: v.MsgData == nil --- internal/msg_transfer/logic/online_history_msg_handler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index e42bbf22a..60b54e65d 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -109,6 +109,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { log.Debug(triggerID, "msg come to storage center", v.String()) if v.MsgData == nil { log.NewWarn(triggerID, "msg come to storage center nil", v.String()) + panic(v.String()) continue } isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) From fcda79eb3c221baf89332883fd5ffc00cd632047 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 11:10:49 +0800 Subject: [PATCH 380/752] fix bug: v.MsgData == nil --- internal/msg_transfer/logic/online_history_msg_handler.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 60b54e65d..e42bbf22a 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -109,7 +109,6 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { log.Debug(triggerID, "msg come to storage center", v.String()) if v.MsgData == nil { log.NewWarn(triggerID, "msg come to storage center nil", v.String()) - panic(v.String()) continue } isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) From ae52f85502580f9dc4426ea8418c1a0f2df7bf82 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 11:24:27 +0800 Subject: [PATCH 381/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index e42bbf22a..5e0b9a520 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -108,7 +108,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) if v.MsgData == nil { - log.NewWarn(triggerID, "msg come to storage center nil", v.String()) + log.NewWarn(triggerID, "msg come to storage center nil", v.String(), v.OperationID) continue } isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) From 290ae774e049ee77012a86c922c01de421806552 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 11:42:15 +0800 Subject: [PATCH 382/752] ForceLogout --- internal/api/auth/auth.go | 27 +++++++++++++++++++-------- internal/rpc/auth/auth.go | 6 +----- pkg/base_info/auth_api_struct.go | 2 +- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 826374188..5441cc2ea 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -134,19 +134,30 @@ func ForceLogout(c *gin.Context) { return } + req := &rpc.ForceLogoutReq{} + utils.CopyStructFields(req, ¶ms) + var ok bool var errInfo string - var expireTime int64 - ok, _, errInfo, expireTime = token_verify.GetUserIDFromTokenExpireTime(c.Request.Header.Get("token"), params.OperationID) + ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) if !ok { - errMsg := params.OperationID + " " + "GetUserIDFromTokenExpireTime failed " + errInfo + " token:" + c.Request.Header.Get("token") - log.NewError(params.OperationID, errMsg) + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: uint32(expireTime)}} - resp.Data = structs.Map(&resp.ExpireTime) - log.NewInfo(params.OperationID, "ParseToken return ", resp) - c.JSON(http.StatusOK, resp) + log.NewInfo(req.OperationID, "ForceLogout args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + client := rpc.NewAuthClient(etcdConn) + reply, err := client.ForceLogout(context.Background(), req) + if err != nil { + errMsg := req.OperationID + " UserToken failed " + err.Error() + req.String() + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + log.NewInfo(params.OperationID, utils.GetSelfFuncName(), " return ", reply) + c.JSON(http.StatusOK, reply) } diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 425df49ff..be8c30e86 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -83,13 +83,9 @@ func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) ( func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID string) error { etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) - kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} _, err := client.KickUserOffline(context.Background(), kickReq) - if err != nil { - return utils.Wrap(err, "") - } - return nil + return utils.Wrap(err, "") } type rpcAuth struct { diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index bfd7b5e56..70f0f86c9 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -40,7 +40,7 @@ type UserTokenResp struct { type ForceLogoutReq struct { Platform int32 `json:"platform" binding:"required,min=1,max=8"` - UserID string `json:"userID" binding:"required,min=1,max=64"` + FromUserID string `json:"fromUserID" binding:"required,min=1,max=64"` OperationID string `json:"operationID" binding:"required"` } From 6ec65965a45ab0df3cf9262a935d246a41aa667f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 11:50:05 +0800 Subject: [PATCH 383/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 5e0b9a520..5c2668976 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -108,7 +108,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) if v.MsgData == nil { - log.NewWarn(triggerID, "msg come to storage center nil", v.String(), v.OperationID) + log.NewWarn(triggerID, "msg come to storage center nil", v.String(), v.OperationID, msgChannelValue.userID) continue } isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) @@ -238,7 +238,10 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { if len(v) >= 0 { hashCode := getHashCode(userID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + log.Debug(triggerID, "generate channelID", hashCode, channelID, userID, len(v)) + for _, y := range v { + log.Debug(triggerID, "single user slice is ", y.String()) + } //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} //}(channelID, userID, v) From eac137a9a9236e96f7c82735c60d2576b23278fa Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 11:50:37 +0800 Subject: [PATCH 384/752] ForceLogout --- internal/rpc/auth/auth.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index be8c30e86..c145f4499 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -11,6 +11,7 @@ import ( pbRelay "Open_IM/pkg/proto/relay" "Open_IM/pkg/utils" "context" + "errors" "net" "strconv" "strings" @@ -81,11 +82,16 @@ func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) ( } func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID string) error { - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) - client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) - kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} - _, err := client.KickUserOffline(context.Background(), kickReq) - return utils.Wrap(err, "") + + grpcCons := getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + for _, v := range grpcCons { + client := pbRelay.NewOnlineMessageRelayServiceClient(v) + kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} + _, err := client.KickUserOffline(context.Background(), kickReq) + return utils.Wrap(err, "") + } + + return errors.New("no rpc node ") } type rpcAuth struct { From 07b652c1d4ff94956844a9b77a123cf44c052517 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 7 Jun 2022 12:08:53 +0800 Subject: [PATCH 385/752] singal offline push --- deploy_k8s/build_push_all_images.sh | 2 +- internal/push/logic/push_to_client.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index 756add942..b6333a8bd 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -3,7 +3,7 @@ source ./path_info.cfg # images version version=v2.0.10k - +git pull cd ../script/; ./build_all_service.sh cd ../deploy_k8s/ diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 90e56c1f7..da5e680ec 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -146,7 +146,7 @@ func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err err if pushMsg.MsgData.ContentType < constant.SignalingNotificationEnd && pushMsg.MsgData.ContentType > constant.SignalingNotificationBegin { req := &pbRtc.SignalReq{} if err := proto.Unmarshal(pushMsg.MsgData.Content, req); err != nil { - return opts, err + return opts, utils.Wrap(err, "") } log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "SignalReq: ", req.String()) switch req.Payload.(type) { From 95705cc95a69fa74189f4a76f12d2a872330f0ce Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 12:28:36 +0800 Subject: [PATCH 386/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 5c2668976..7baccf176 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -223,7 +223,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) return } - log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) + log.Debug(triggerID, "single msg come to distribution center", string(consumerMessages[i].Key)) if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM @@ -233,7 +233,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { UserAggregationMsgs[string(consumerMessages[i].Key)] = m } } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) + log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs), UserAggregationMsgs) for userID, v := range UserAggregationMsgs { if len(v) >= 0 { hashCode := getHashCode(userID) From 3adcb9f164e1f269a2fe1658ffe007fa478fad39 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 13:44:52 +0800 Subject: [PATCH 387/752] debug userid == "" --- internal/msg_transfer/logic/online_history_msg_handler.go | 1 + internal/rpc/msg/send_msg.go | 3 +++ 2 files changed, 4 insertions(+) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index e42bbf22a..ac7a7abed 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -109,6 +109,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { log.Debug(triggerID, "msg come to storage center", v.String()) if v.MsgData == nil { log.NewWarn(triggerID, "msg come to storage center nil", v.String()) + continue } isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index a97dd84ed..a2a037cd8 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -830,6 +830,9 @@ func (rpc *rpcChat) sendMsgToGroupOptimization(list []string, groupPB *pbChat.Se groupPB.MsgData.RecvID = v isSend := modifyMessageByUserMessageReceiveOpt(v, groupPB.MsgData.GroupID, constant.GroupChatType, groupPB) if isSend { + if v == "" || groupPB.MsgData.SendID == "" { + panic(groupPB.OperationID) + } err := rpc.sendMsgToKafka(&msgToMQGroup, v, status) if err != nil { log.NewError(msgToMQGroup.OperationID, "kafka send msg err:UserId", v, msgToMQGroup.String()) From dd76c268c520aefeffb6d8f6e92a9349e3714758 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 13:50:35 +0800 Subject: [PATCH 388/752] debug userid == "" --- internal/rpc/msg/send_msg.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index a2a037cd8..5f86c39d5 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -228,7 +228,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S return returnMsg(&replay, pb, 201, "GetGroupMemberIDListFromCache logic failed", "", 0) } memberUserIDList := cacheResp.UserIDList - log.Debug(pb.OperationID, "GetGroupAllMember userID list", cacheResp.UserIDList) + log.Debug(pb.OperationID, "GetGroupAllMember userID list", cacheResp.UserIDList, "len: ", len(cacheResp.UserIDList)) var addUidList []string switch pb.MsgData.ContentType { case constant.MemberKickedNotification: From dae1569f0ee449fb466463ff9b6c4695b3dea714 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 14:02:11 +0800 Subject: [PATCH 389/752] debug userid == "" --- internal/rpc/msg/send_msg.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 5f86c39d5..7897d3f3d 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -831,7 +831,8 @@ func (rpc *rpcChat) sendMsgToGroupOptimization(list []string, groupPB *pbChat.Se isSend := modifyMessageByUserMessageReceiveOpt(v, groupPB.MsgData.GroupID, constant.GroupChatType, groupPB) if isSend { if v == "" || groupPB.MsgData.SendID == "" { - panic(groupPB.OperationID) + log.Error(msgToMQGroup.OperationID, "sendMsgToGroupOptimization userID nil ", msgToMQGroup.String()) + continue } err := rpc.sendMsgToKafka(&msgToMQGroup, v, status) if err != nil { From f8962beca656a05f4456c0f7eae5498da9e3d933 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 16:05:59 +0800 Subject: [PATCH 390/752] kick --- internal/msg_gateway/gate/rpc_server.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 94195449a..3ac358ec9 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -189,7 +189,14 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online }, nil } func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { - panic("implement me") + for _, v := range req.KickUserIDList { + oldConnMap := ws.getUserAllCons(v) + if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] + ws.sendKickMsg(conn, &UserConn{}) + } + } + return nil, nil + } func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) From 89f40fe3dec39f67df5292f745860f09a649d38f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 16:17:08 +0800 Subject: [PATCH 391/752] kick --- internal/msg_gateway/gate/rpc_server.go | 1 + pkg/common/constant/constant.go | 1 + 2 files changed, 2 insertions(+) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 3ac358ec9..788f82956 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -189,6 +189,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online }, nil } func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { + log.NewInfo(req.OperationID, "KickUserOffline is arriving", req.String()) for _, v := range req.KickUserIDList { oldConnMap := ws.getUserAllCons(v) if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 6ab990cb7..fd13886d2 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -214,6 +214,7 @@ const ( AtMe = 1 AtAll = 2 AtAllAtMe = 3 + GroupAnnouncement ) var ContentType2PushContent = map[int64]string{ From f3fc452904c045ed2d21b477f24de09088c0029e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 7 Jun 2022 16:18:18 +0800 Subject: [PATCH 392/752] group set memberInfo --- internal/api/group/group.go | 73 ++- internal/rpc/group/group.go | 29 +- pkg/base_info/group_api_struct.go | 14 +- .../im_mysql_model/group_member_model.go | 12 + pkg/proto/group/group.pb.go | 441 +++++++++--------- pkg/proto/group/group.proto | 11 +- 6 files changed, 329 insertions(+), 251 deletions(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index a7e3c8244..7d8a89564 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -10,6 +10,7 @@ import ( open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "github.com/golang/protobuf/ptypes/wrappers" "github.com/gin-gonic/gin" @@ -807,25 +808,55 @@ func SetGroupMemberNickname(c *gin.Context) { } func SetGroupMemberInfo(c *gin.Context) { - //var ( - // req api.SetGroupMemberInfoReq - // resp api.SetGroupMemberInfoResp - //) - //if err := c.BindJSON(&req); err != nil { - // log.NewError("0", "BindJSON failed ", err.Error()) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) - // return - //} - // - //var ok bool - //var errInfo string - //ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) - //if !ok { - // errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") - // log.NewError(req.OperationID, errMsg) - // c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) - // return - //} - // - //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) + var ( + req api.SetGroupMemberInfoReq + resp api.SetGroupMemberInfoResp + ) + if err := c.BindJSON(&req); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req) + var opUserID string + ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + reqPb := &rpc.SetGroupMemberInfoReq{ + GroupID: req.GroupID, + UserID: req.UserID, + OperationID: req.OperationID, + OpUserID: opUserID, + } + if req.Nickname != nil { + reqPb.Nickname = &wrappers.StringValue{Value: *req.Nickname} + } + if req.FaceURL != nil { + reqPb.FaceURL = &wrappers.StringValue{Value: *req.FaceURL} + } + if req.Ex != nil { + reqPb.Ex = &wrappers.StringValue{Value: *req.Ex} + } + if req.RoleLevel != nil { + reqPb.RoleLevel = &wrappers.Int32Value{Value: *req.RoleLevel} + } + + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + client := rpc.NewGroupClient(etcdConn) + respPb, err := client.SetGroupMemberInfo(context.Background(), reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", err.Error()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + return + } + + resp.ErrMsg = respPb.CommonResp.ErrMsg + resp.ErrCode = respPb.CommonResp.ErrCode + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", resp) + c.JSON(http.StatusInternalServerError, resp) } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 699e9b395..bd7aa3264 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1407,6 +1407,33 @@ func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.S } func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfoReq) (resp *pbGroup.SetGroupMemberInfoResp, err error) { - resp = &pbGroup.SetGroupMemberInfoResp{} + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp = &pbGroup.SetGroupMemberInfoResp{CommonResp: &pbGroup.CommonResp{}} + groupMember := db.GroupMember{ + GroupID: req.GroupID, + UserID: req.UserID, + } + m := make(map[string]interface{}) + if req.RoleLevel != nil { + m["role_level"] = req.RoleLevel.Value + } + if req.FaceURL != nil { + m["user_group_face_url"] = req.FaceURL.Value + } + if req.Nickname != nil { + m["nickname"] = req.Nickname.Value + } + if req.Ex != nil { + m["ex"] = req.Ex.Value + } + + err = imdb.UpdateGroupMemberInfoByMap(groupMember, m) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetGroupMemberInfo failed", err.Error()) + resp.CommonResp.ErrCode = constant.ErrDB.ErrCode + resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg + ":" + err.Error() + } + chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index 3e021fdb4..e00f6daf0 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -234,13 +234,13 @@ type SetGroupMemberNicknameResp struct { } type SetGroupMemberInfoReq struct { - OperationID string `json:"operationID" binding:"required"` - GroupID string `json:"groupID" binding:"required"` - UserID string `json:"userID" binding:"required"` - Nickname string `json:"nickname"` - FaceURL string `json:"user_group_face_url"` - RoleLevel string `json:"role_level"` - Ex string `json:"ex"` + OperationID string `json:"operationID" binding:"required"` + GroupID string `json:"groupID" binding:"required"` + UserID string `json:"userID" binding:"required"` + Nickname *string `json:"nickname"` + FaceURL *string `json:"userGroupFaceUrl"` + RoleLevel *int32 `json:"roleLevel" validate:"gte=1,lte=3"` + Ex *string `json:"ex"` } type SetGroupMemberInfoResp struct { diff --git a/pkg/common/db/mysql_model/im_mysql_model/group_member_model.go b/pkg/common/db/mysql_model/im_mysql_model/group_member_model.go index b0cd34ef1..83a59e6d9 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/group_member_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/group_member_model.go @@ -142,6 +142,18 @@ func UpdateGroupMemberInfo(groupMemberInfo db.GroupMember) error { return nil } +func UpdateGroupMemberInfoByMap(groupMemberInfo db.GroupMember, m map[string]interface{}) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err + } + err = dbConn.Table("group_members").Where("group_id=? and user_id=?", groupMemberInfo.GroupID, groupMemberInfo.UserID).Updates(m).Error + if err != nil { + return err + } + return nil +} + func GetOwnerManagerByGroupID(groupID string) ([]db.GroupMember, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index f46f9f6d6..d036b6641 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -37,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{0} + return fileDescriptor_group_8c320ccb494991ed, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -83,7 +83,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{1} + return fileDescriptor_group_8c320ccb494991ed, []int{1} } func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) @@ -132,7 +132,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{2} + return fileDescriptor_group_8c320ccb494991ed, []int{2} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -200,7 +200,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{3} + return fileDescriptor_group_8c320ccb494991ed, []int{3} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -254,7 +254,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{4} + return fileDescriptor_group_8c320ccb494991ed, []int{4} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -308,7 +308,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{5} + return fileDescriptor_group_8c320ccb494991ed, []int{5} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -362,7 +362,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{6} + return fileDescriptor_group_8c320ccb494991ed, []int{6} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -414,7 +414,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{7} + return fileDescriptor_group_8c320ccb494991ed, []int{7} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -454,7 +454,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{8} + return fileDescriptor_group_8c320ccb494991ed, []int{8} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -508,7 +508,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{9} + return fileDescriptor_group_8c320ccb494991ed, []int{9} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -562,7 +562,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{10} + return fileDescriptor_group_8c320ccb494991ed, []int{10} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -615,7 +615,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{11} + return fileDescriptor_group_8c320ccb494991ed, []int{11} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -664,7 +664,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{12} + return fileDescriptor_group_8c320ccb494991ed, []int{12} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -730,7 +730,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{13} + return fileDescriptor_group_8c320ccb494991ed, []int{13} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -771,7 +771,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{14} + return fileDescriptor_group_8c320ccb494991ed, []int{14} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -830,7 +830,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{15} + return fileDescriptor_group_8c320ccb494991ed, []int{15} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -873,7 +873,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{16} + return fileDescriptor_group_8c320ccb494991ed, []int{16} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -946,7 +946,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{17} + return fileDescriptor_group_8c320ccb494991ed, []int{17} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -986,7 +986,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{18} + return fileDescriptor_group_8c320ccb494991ed, []int{18} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -1038,7 +1038,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{19} + return fileDescriptor_group_8c320ccb494991ed, []int{19} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -1080,7 +1080,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{20} + return fileDescriptor_group_8c320ccb494991ed, []int{20} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -1149,7 +1149,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{} func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{21} + return fileDescriptor_group_8c320ccb494991ed, []int{21} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -1211,7 +1211,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{} func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{22} + return fileDescriptor_group_8c320ccb494991ed, []int{22} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -1272,7 +1272,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{23} + return fileDescriptor_group_8c320ccb494991ed, []int{23} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -1328,7 +1328,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{24} + return fileDescriptor_group_8c320ccb494991ed, []int{24} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1395,7 +1395,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} } func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (*Id2Result) ProtoMessage() {} func (*Id2Result) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{25} + return fileDescriptor_group_8c320ccb494991ed, []int{25} } func (m *Id2Result) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Id2Result.Unmarshal(m, b) @@ -1442,7 +1442,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{26} + return fileDescriptor_group_8c320ccb494991ed, []int{26} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1496,7 +1496,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{27} + return fileDescriptor_group_8c320ccb494991ed, []int{27} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1550,7 +1550,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{} func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{28} + return fileDescriptor_group_8c320ccb494991ed, []int{28} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1606,7 +1606,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{29} + return fileDescriptor_group_8c320ccb494991ed, []int{29} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1674,7 +1674,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{30} + return fileDescriptor_group_8c320ccb494991ed, []int{30} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1728,7 +1728,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{31} + return fileDescriptor_group_8c320ccb494991ed, []int{31} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1782,7 +1782,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{32} + return fileDescriptor_group_8c320ccb494991ed, []int{32} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1836,7 +1836,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{33} + return fileDescriptor_group_8c320ccb494991ed, []int{33} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1890,7 +1890,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{34} + return fileDescriptor_group_8c320ccb494991ed, []int{34} } func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) @@ -1944,7 +1944,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{35} + return fileDescriptor_group_8c320ccb494991ed, []int{35} } func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) @@ -1997,7 +1997,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{36} + return fileDescriptor_group_8c320ccb494991ed, []int{36} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -2044,7 +2044,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{37} + return fileDescriptor_group_8c320ccb494991ed, []int{37} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -2097,7 +2097,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{38} + return fileDescriptor_group_8c320ccb494991ed, []int{38} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -2144,7 +2144,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{39} + return fileDescriptor_group_8c320ccb494991ed, []int{39} } func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) @@ -2195,7 +2195,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{} func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{40} + return fileDescriptor_group_8c320ccb494991ed, []int{40} } func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) @@ -2229,7 +2229,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{41} + return fileDescriptor_group_8c320ccb494991ed, []int{41} } func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) @@ -2287,7 +2287,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{42} + return fileDescriptor_group_8c320ccb494991ed, []int{42} } func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) @@ -2319,7 +2319,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{43} + return fileDescriptor_group_8c320ccb494991ed, []int{43} } func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) @@ -2363,7 +2363,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{44} + return fileDescriptor_group_8c320ccb494991ed, []int{44} } func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) @@ -2395,7 +2395,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{45} + return fileDescriptor_group_8c320ccb494991ed, []int{45} } func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) @@ -2440,7 +2440,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{46} + return fileDescriptor_group_8c320ccb494991ed, []int{46} } func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) @@ -2481,7 +2481,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{47} + return fileDescriptor_group_8c320ccb494991ed, []int{47} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -2542,7 +2542,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{48} + return fileDescriptor_group_8c320ccb494991ed, []int{48} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -2597,7 +2597,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{49} + return fileDescriptor_group_8c320ccb494991ed, []int{49} } func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) @@ -2657,7 +2657,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{50} + return fileDescriptor_group_8c320ccb494991ed, []int{50} } func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) @@ -2705,7 +2705,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{51} + return fileDescriptor_group_8c320ccb494991ed, []int{51} } func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) @@ -2765,7 +2765,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{} func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{52} + return fileDescriptor_group_8c320ccb494991ed, []int{52} } func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) @@ -2812,7 +2812,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{53} + return fileDescriptor_group_8c320ccb494991ed, []int{53} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -2864,7 +2864,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{54} + return fileDescriptor_group_8c320ccb494991ed, []int{54} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -2906,7 +2906,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{55} + return fileDescriptor_group_8c320ccb494991ed, []int{55} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -2972,7 +2972,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{56} + return fileDescriptor_group_8c320ccb494991ed, []int{56} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -3013,7 +3013,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{57} + return fileDescriptor_group_8c320ccb494991ed, []int{57} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -3072,7 +3072,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{58} + return fileDescriptor_group_8c320ccb494991ed, []int{58} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -3112,7 +3112,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{59} + return fileDescriptor_group_8c320ccb494991ed, []int{59} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -3164,7 +3164,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{60} + return fileDescriptor_group_8c320ccb494991ed, []int{60} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -3204,7 +3204,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{61} + return fileDescriptor_group_8c320ccb494991ed, []int{61} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -3256,7 +3256,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{62} + return fileDescriptor_group_8c320ccb494991ed, []int{62} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -3298,7 +3298,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{63} + return fileDescriptor_group_8c320ccb494991ed, []int{63} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -3364,7 +3364,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{64} + return fileDescriptor_group_8c320ccb494991ed, []int{64} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -3394,11 +3394,12 @@ func (m *SetGroupMemberNicknameResp) GetCommonResp() *CommonResp { type SetGroupMemberInfoReq struct { GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` - Nickname *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=nickname" json:"nickname,omitempty"` - FaceURL *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` - RoleLevel *wrapperspb.Int32Value `protobuf:"bytes,6,opt,name=roleLevel" json:"roleLevel,omitempty"` - Ex *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=opUserID" json:"opUserID,omitempty"` + OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` + Nickname *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` + FaceURL *wrapperspb.StringValue `protobuf:"bytes,6,opt,name=faceURL" json:"faceURL,omitempty"` + RoleLevel *wrapperspb.Int32Value `protobuf:"bytes,7,opt,name=roleLevel" json:"roleLevel,omitempty"` + Ex *wrapperspb.StringValue `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -3408,7 +3409,7 @@ func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} } func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberInfoReq) ProtoMessage() {} func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{65} + return fileDescriptor_group_8c320ccb494991ed, []int{65} } func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) @@ -3442,6 +3443,13 @@ func (m *SetGroupMemberInfoReq) GetUserID() string { return "" } +func (m *SetGroupMemberInfoReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + func (m *SetGroupMemberInfoReq) GetOperationID() string { if m != nil { return m.OperationID @@ -3488,7 +3496,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{} func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberInfoResp) ProtoMessage() {} func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_e5947a1008c7a757, []int{66} + return fileDescriptor_group_8c320ccb494991ed, []int{66} } func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b) @@ -4647,151 +4655,150 @@ var _Group_serviceDesc = grpc.ServiceDesc{ Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_e5947a1008c7a757) } +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_8c320ccb494991ed) } -var fileDescriptor_group_e5947a1008c7a757 = []byte{ - // 2274 bytes of a gzipped FileDescriptorProto +var fileDescriptor_group_8c320ccb494991ed = []byte{ + // 2272 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x4b, - 0x11, 0xd7, 0x78, 0xbd, 0xb6, 0xb7, 0x6c, 0x67, 0xed, 0x76, 0xd6, 0x5e, 0x4f, 0xfc, 0xf2, 0x9c, - 0x7e, 0xe1, 0x11, 0xc1, 0xc3, 0x16, 0x8e, 0x14, 0x01, 0x0f, 0x11, 0xe2, 0x3f, 0x89, 0x37, 0x89, - 0x6d, 0x32, 0xce, 0xe3, 0x10, 0x09, 0x85, 0xcd, 0x4e, 0x7b, 0xb5, 0x78, 0x77, 0x66, 0x3c, 0x3d, - 0xeb, 0x04, 0x2e, 0x4f, 0x5c, 0x9e, 0xf4, 0x80, 0x03, 0x08, 0x89, 0x13, 0x12, 0xe4, 0x04, 0x07, - 0x0e, 0x1c, 0xe0, 0x8c, 0xb8, 0x20, 0xbe, 0x02, 0x9f, 0x82, 0xaf, 0x80, 0xa6, 0xbb, 0xa7, 0xa7, - 0x67, 0xba, 0x67, 0xbc, 0x59, 0x27, 0xe4, 0xb2, 0x52, 0x57, 0x57, 0x4f, 0xff, 0xaa, 0xba, 0xaa, - 0xba, 0xaa, 0x7a, 0x61, 0xb1, 0x1b, 0xfa, 0xc3, 0x60, 0x93, 0xfd, 0x6e, 0x04, 0xa1, 0x1f, 0xf9, - 0xa8, 0xca, 0x06, 0xf6, 0x8d, 0xa3, 0x80, 0x78, 0xcf, 0x5b, 0x07, 0x9b, 0xc1, 0x69, 0x77, 0x93, - 0xcd, 0x6c, 0x52, 0xf7, 0xf4, 0xf9, 0x4b, 0xba, 0xf9, 0x92, 0x72, 0x4e, 0xfb, 0xab, 0xc5, 0x2c, - 0x61, 0x3b, 0x08, 0x48, 0x28, 0x18, 0xf1, 0xf7, 0x00, 0x76, 0xfc, 0xc1, 0xc0, 0xf7, 0x1c, 0x42, - 0x03, 0xd4, 0x84, 0xe9, 0xbd, 0x30, 0xdc, 0xf1, 0x5d, 0xd2, 0xb4, 0xd6, 0xad, 0x5b, 0x55, 0x27, - 0x19, 0xa2, 0x65, 0x98, 0xda, 0x0b, 0xc3, 0x03, 0xda, 0x6d, 0x4e, 0xac, 0x5b, 0xb7, 0x6a, 0x8e, - 0x18, 0xe1, 0x87, 0x80, 0x1e, 0xc4, 0xa0, 0xee, 0xb9, 0xee, 0x01, 0x19, 0xbc, 0x20, 0x61, 0xcb, - 0x3b, 0xf1, 0x63, 0xee, 0xcf, 0x28, 0x09, 0x5b, 0xbb, 0xec, 0x33, 0x35, 0x47, 0x8c, 0xd0, 0x1a, - 0xd4, 0x1c, 0xbf, 0x4f, 0x1e, 0x93, 0x73, 0xd2, 0x67, 0x1f, 0xaa, 0x3a, 0x29, 0x01, 0xff, 0xd7, - 0x82, 0x2b, 0x3b, 0x21, 0x69, 0x47, 0x84, 0x7d, 0xd2, 0x21, 0x67, 0xe8, 0x1e, 0x5c, 0x69, 0x79, - 0xbd, 0x88, 0x7f, 0xfa, 0x71, 0x8f, 0x46, 0x4d, 0x6b, 0xbd, 0x72, 0x6b, 0x76, 0x6b, 0x75, 0x83, - 0xeb, 0x45, 0xdf, 0xdb, 0xc9, 0x2d, 0x40, 0xdf, 0x81, 0x1a, 0xe3, 0x8a, 0x27, 0xd9, 0x9e, 0xb3, - 0x5b, 0x6b, 0x1b, 0x94, 0x84, 0xe7, 0x24, 0x7c, 0xde, 0x0e, 0x7a, 0xcf, 0x83, 0x76, 0xd8, 0x1e, - 0xd0, 0x0d, 0xc9, 0xe3, 0xa4, 0xec, 0x68, 0x1d, 0x66, 0x8f, 0x02, 0x12, 0xb6, 0xa3, 0x9e, 0xef, - 0xb5, 0x76, 0x9b, 0x15, 0x26, 0x8c, 0x4a, 0x42, 0x36, 0xcc, 0x1c, 0x05, 0x42, 0xd6, 0x49, 0x36, - 0x2d, 0xc7, 0x6c, 0xf5, 0x4b, 0x8f, 0x84, 0x62, 0xba, 0x2a, 0x56, 0xa7, 0x24, 0xfc, 0x39, 0xd4, - 0x33, 0x02, 0x8f, 0x73, 0x04, 0x59, 0x01, 0x2b, 0x6f, 0x24, 0x20, 0x0e, 0x61, 0xe1, 0x01, 0x89, - 0xd8, 0x98, 0xb2, 0x39, 0x72, 0x16, 0xc3, 0xe6, 0x0c, 0xbb, 0x52, 0xe1, 0x35, 0x47, 0x25, 0xe5, - 0xd5, 0x32, 0x51, 0xae, 0x96, 0x4a, 0x56, 0x2d, 0xf8, 0x4b, 0x0b, 0x16, 0x73, 0x9b, 0x8e, 0x25, - 0xf7, 0x36, 0xcc, 0x4b, 0x41, 0x18, 0xd2, 0x0a, 0x33, 0x8d, 0x72, 0xd9, 0xb3, 0x4b, 0xf0, 0x2f, - 0x2d, 0xa8, 0x1f, 0x0b, 0x2c, 0x89, 0xfc, 0x19, 0x7d, 0x5a, 0x6f, 0x66, 0x30, 0xaa, 0xdc, 0x13, - 0x06, 0x73, 0x28, 0x35, 0x26, 0xbc, 0x07, 0x0b, 0x59, 0x30, 0x34, 0x40, 0xdf, 0x54, 0x1d, 0x54, - 0xc0, 0x59, 0x14, 0xd6, 0x9f, 0x4e, 0x38, 0x0a, 0x13, 0xfe, 0x19, 0xd8, 0x89, 0x7e, 0xef, 0x05, - 0x41, 0xbf, 0xd7, 0x61, 0xdf, 0x8f, 0xe5, 0x8d, 0xc5, 0x53, 0x21, 0x5a, 0xe5, 0x10, 0x0d, 0x07, - 0x7b, 0x1d, 0xe0, 0x7e, 0xe8, 0x0f, 0x32, 0x47, 0xab, 0x50, 0xf0, 0xef, 0x2d, 0xb8, 0x56, 0xb8, - 0xf9, 0x58, 0xc7, 0xfc, 0x08, 0x16, 0x92, 0x70, 0x30, 0x24, 0x34, 0x52, 0x4e, 0xfa, 0xc3, 0xa2, - 0x53, 0x11, 0xac, 0x8e, 0xb6, 0x10, 0x47, 0xb0, 0xf6, 0x80, 0x44, 0x31, 0x56, 0x87, 0x9c, 0x19, - 0x94, 0x53, 0x14, 0xb8, 0x2e, 0x77, 0xae, 0x7f, 0xb0, 0xe0, 0x83, 0x92, 0x6d, 0xc7, 0x3a, 0x65, - 0xa3, 0x5e, 0x26, 0xc6, 0xd5, 0xcb, 0x3f, 0x2c, 0x68, 0x3c, 0x0d, 0xdb, 0x1e, 0x3d, 0x21, 0x21, - 0x9b, 0x64, 0x51, 0x2a, 0xd6, 0x48, 0x13, 0xa6, 0x85, 0xeb, 0x0b, 0x95, 0x24, 0x43, 0xf4, 0x31, - 0x5c, 0x39, 0xea, 0xbb, 0x6a, 0x84, 0xe3, 0x9a, 0xc9, 0x51, 0x63, 0xbe, 0x43, 0xf2, 0x52, 0xe5, - 0xe3, 0x2a, 0xca, 0x51, 0xf3, 0x7a, 0x9c, 0x2c, 0x8f, 0x2a, 0xd5, 0x5c, 0x54, 0x79, 0x04, 0xcb, - 0x26, 0x01, 0xc6, 0xf3, 0xa0, 0x2f, 0x2c, 0x98, 0x7b, 0xe8, 0xf7, 0x3c, 0x79, 0x0f, 0x15, 0x6b, - 0xe1, 0x3a, 0x80, 0x43, 0xce, 0x0e, 0x08, 0xa5, 0xed, 0x2e, 0x11, 0x1a, 0x50, 0x28, 0x65, 0x91, - 0xf0, 0x62, 0x89, 0xf1, 0x36, 0xcc, 0x2b, 0x38, 0xc6, 0x13, 0xe6, 0x3f, 0xb1, 0x4b, 0xe6, 0xfc, - 0x31, 0x9e, 0xf0, 0x3d, 0x4a, 0x44, 0xbc, 0x57, 0x51, 0x58, 0xe5, 0x7a, 0xcf, 0x5b, 0xbf, 0xa2, - 0x99, 0x8a, 0xa6, 0x19, 0x25, 0x54, 0x4c, 0xe6, 0x43, 0x45, 0x3c, 0xbf, 0xdf, 0xf6, 0xdc, 0x3e, - 0x71, 0x63, 0xa7, 0xe7, 0xe7, 0xa9, 0x50, 0x10, 0x86, 0x39, 0x3e, 0x72, 0x08, 0x1d, 0xf6, 0xa3, - 0xe6, 0x14, 0x8b, 0x17, 0x19, 0x1a, 0x7e, 0x02, 0x6b, 0xc5, 0xa2, 0x8d, 0xa7, 0xae, 0x13, 0x98, - 0x7b, 0x32, 0xec, 0x45, 0x23, 0x1c, 0xfd, 0xe5, 0xae, 0xc1, 0x6d, 0x98, 0x57, 0xf6, 0x19, 0x0f, - 0xeb, 0x6b, 0x0b, 0x1a, 0x49, 0xb4, 0x4d, 0x53, 0x9e, 0x72, 0xd4, 0x97, 0x0a, 0x65, 0x71, 0x80, - 0xbc, 0xdf, 0xeb, 0x47, 0x24, 0x64, 0x07, 0x5a, 0x75, 0xc4, 0x28, 0xde, 0xef, 0x90, 0xbc, 0x8a, - 0x8e, 0xc9, 0x19, 0x3b, 0xc9, 0xaa, 0x93, 0x0c, 0xf1, 0x5f, 0x2c, 0x58, 0x36, 0x61, 0x1c, 0xeb, - 0x32, 0xb8, 0x0f, 0x30, 0x48, 0x73, 0x41, 0x7e, 0x0d, 0x7c, 0x5c, 0x14, 0xee, 0xf8, 0x6e, 0xf7, - 0x87, 0xfd, 0x3e, 0xbb, 0x4d, 0x95, 0x95, 0xf1, 0xce, 0x9e, 0x80, 0xcb, 0xe5, 0x48, 0x86, 0xf8, - 0xd7, 0x1a, 0x5c, 0x99, 0x18, 0x95, 0x06, 0x01, 0x05, 0xd6, 0x04, 0xcb, 0x98, 0xd4, 0xed, 0x2e, - 0x17, 0x04, 0x7e, 0x6b, 0xc1, 0x8a, 0x11, 0xd2, 0xfb, 0x54, 0x21, 0xfe, 0xab, 0x05, 0xe8, 0x51, - 0xaf, 0x73, 0xaa, 0xf0, 0x95, 0x2b, 0xe9, 0x6b, 0xb0, 0x10, 0xf3, 0x13, 0x97, 0x0b, 0xae, 0xa8, - 0x4a, 0xa3, 0xc7, 0xe0, 0x1d, 0xd2, 0xa6, 0xbe, 0x27, 0xd4, 0x25, 0x46, 0x79, 0x65, 0x55, 0xcb, - 0x5d, 0x6e, 0x2a, 0xe7, 0x72, 0x9f, 0x42, 0xad, 0xe5, 0x6e, 0xf1, 0xd0, 0x51, 0x78, 0xd5, 0xb3, - 0xad, 0x59, 0xc0, 0xe1, 0x05, 0x8a, 0x18, 0xe1, 0xcf, 0x61, 0x49, 0x13, 0x77, 0xac, 0x03, 0xb8, - 0x03, 0xf3, 0x12, 0x85, 0x72, 0x06, 0x0b, 0xc2, 0xd5, 0xe5, 0x9c, 0x93, 0x65, 0xc3, 0x43, 0xe6, - 0xeb, 0xf1, 0x75, 0x40, 0x5c, 0x86, 0x22, 0xf1, 0xf5, 0x6c, 0xa0, 0xb5, 0xb4, 0x40, 0xbb, 0x0e, - 0xb3, 0xbe, 0x1e, 0xa7, 0xfc, 0x11, 0xe3, 0xd4, 0x17, 0xdc, 0x21, 0xb4, 0x7d, 0x2f, 0x55, 0xab, - 0x8c, 0x9c, 0xaf, 0xa7, 0xec, 0xf8, 0x6f, 0x16, 0x5c, 0x6d, 0x79, 0xe7, 0xbd, 0x88, 0xc4, 0xc8, - 0x9e, 0xfa, 0x32, 0x42, 0x5f, 0x1c, 0x87, 0x8b, 0x2f, 0xa9, 0xd4, 0xd0, 0x26, 0x33, 0x86, 0xf6, - 0x09, 0x2c, 0xf2, 0xbd, 0x54, 0x6b, 0xad, 0x32, 0x6b, 0xd5, 0x27, 0x4a, 0x8d, 0xee, 0xe7, 0x16, - 0x34, 0x0c, 0xb0, 0xff, 0xaf, 0xa6, 0xe3, 0xc1, 0x55, 0x99, 0x94, 0xf7, 0xfb, 0xa3, 0x38, 0xeb, - 0xe5, 0x12, 0xde, 0xdf, 0x28, 0xf7, 0x92, 0xb2, 0xe1, 0x7b, 0x8d, 0x57, 0xbf, 0xb3, 0x60, 0x66, - 0xe7, 0xe0, 0x98, 0xb1, 0x5d, 0xaa, 0xc6, 0xbb, 0x05, 0x75, 0xbe, 0x57, 0x9b, 0x46, 0x24, 0x3c, - 0x6c, 0x0f, 0x92, 0xb4, 0x2f, 0x4f, 0x46, 0x37, 0x45, 0x85, 0xca, 0x49, 0x2d, 0x57, 0xa8, 0x2a, - 0x4b, 0x8c, 0xc3, 0xfb, 0x6c, 0xa2, 0xac, 0xf8, 0x50, 0xd6, 0x04, 0x36, 0xf6, 0x65, 0x7e, 0x2c, - 0x29, 0x01, 0xed, 0x02, 0xfc, 0xa0, 0xdd, 0xed, 0x79, 0x4c, 0xd5, 0xa2, 0x9f, 0x71, 0xd3, 0x00, - 0x5d, 0x64, 0xf7, 0x29, 0xaf, 0xa3, 0xac, 0x1b, 0xe1, 0x08, 0x5f, 0x5b, 0x30, 0x97, 0xa2, 0xa2, - 0x01, 0xfa, 0x06, 0xd4, 0x12, 0xf5, 0x51, 0xd1, 0x85, 0xa9, 0x27, 0xd9, 0x89, 0xa0, 0x3b, 0x29, - 0xc7, 0x5b, 0xc2, 0x29, 0x75, 0x31, 0x1c, 0x50, 0x86, 0xb2, 0xea, 0xa4, 0x04, 0x7c, 0x9e, 0x42, - 0xa4, 0xb1, 0xe6, 0xb2, 0x7b, 0x5a, 0x6f, 0x47, 0x37, 0x7a, 0x38, 0xc1, 0x7f, 0xb4, 0x60, 0x5e, - 0xd9, 0xf8, 0x7d, 0x29, 0xc7, 0x86, 0x99, 0x44, 0x17, 0x42, 0x37, 0x72, 0x8c, 0x8f, 0xd2, 0x1e, - 0x8b, 0xc1, 0xdd, 0xdd, 0xac, 0xbb, 0xbb, 0x23, 0xc8, 0x7c, 0x0a, 0x0d, 0x3e, 0xe4, 0xbd, 0xaa, - 0xe3, 0xa8, 0x1d, 0x0d, 0x69, 0xf9, 0x47, 0x97, 0x61, 0x8a, 0xb3, 0x25, 0x37, 0x29, 0x1f, 0x8d, - 0x60, 0x7c, 0x4d, 0x58, 0x36, 0x6d, 0xc6, 0x2b, 0x33, 0x24, 0xa6, 0x58, 0x39, 0xed, 0xf7, 0xc9, - 0x85, 0x20, 0x58, 0xd8, 0x72, 0x93, 0xb0, 0xc2, 0x47, 0xd9, 0x56, 0x64, 0x25, 0xd7, 0x8a, 0x1c, - 0x21, 0x29, 0x6b, 0xc0, 0x92, 0x86, 0x83, 0x06, 0xf8, 0x31, 0x5c, 0xd9, 0x25, 0x7d, 0xa2, 0xb4, - 0x30, 0x2f, 0xa3, 0xf4, 0x45, 0xa8, 0x67, 0xbe, 0x46, 0x03, 0x7c, 0x00, 0xf5, 0xe4, 0x60, 0xb7, - 0x7f, 0xda, 0x72, 0x2f, 0xbb, 0xc3, 0xdd, 0xb4, 0x01, 0xc8, 0x3f, 0x47, 0x03, 0xf4, 0xf5, 0x34, - 0x50, 0x0a, 0x27, 0xd2, 0x6c, 0x59, 0x32, 0xe0, 0xbf, 0x6b, 0x25, 0x08, 0xdd, 0x39, 0x38, 0x2e, - 0x87, 0x65, 0xc3, 0x4c, 0xac, 0x34, 0x25, 0x74, 0xca, 0x71, 0xce, 0x35, 0x2a, 0x6f, 0xc7, 0x87, - 0x0d, 0xe7, 0xf7, 0x4f, 0x3d, 0xcf, 0x67, 0xb8, 0x69, 0x80, 0xbe, 0x0f, 0xd3, 0xfc, 0xde, 0x48, - 0x5c, 0x79, 0xd4, 0xeb, 0x26, 0x59, 0x86, 0xf6, 0x0c, 0xfe, 0xfd, 0x15, 0xa3, 0x10, 0xbc, 0x56, - 0x2d, 0x90, 0xe2, 0x3a, 0x00, 0xdf, 0x41, 0x09, 0x7f, 0x0a, 0x05, 0xff, 0xca, 0x82, 0xa6, 0x43, - 0x06, 0xfe, 0x39, 0x79, 0x23, 0xf5, 0x37, 0x61, 0x9a, 0x3b, 0x01, 0x15, 0xf9, 0x77, 0x32, 0x7c, - 0xa3, 0x7e, 0xb7, 0x9b, 0xeb, 0x77, 0xbb, 0xf8, 0x00, 0x56, 0x0b, 0xd0, 0xf0, 0x8b, 0x9f, 0x0e, - 0x3b, 0x1d, 0x42, 0xa9, 0xe8, 0x28, 0x27, 0xc3, 0xd8, 0x43, 0x4f, 0xda, 0xbd, 0x3e, 0x71, 0x05, - 0x1a, 0x31, 0xc2, 0x5f, 0x5a, 0xd0, 0xb8, 0xe7, 0xba, 0xef, 0x42, 0x34, 0x57, 0x17, 0xcd, 0x2d, - 0x15, 0xed, 0x21, 0x2c, 0x9b, 0xa0, 0x8c, 0x25, 0x57, 0x0f, 0xea, 0xbb, 0x3d, 0x3a, 0xe8, 0x51, - 0x2a, 0x63, 0x84, 0x0d, 0x33, 0x7e, 0xae, 0x27, 0xeb, 0x07, 0x23, 0x67, 0xef, 0x4d, 0x98, 0xee, - 0x66, 0xb3, 0x5b, 0x31, 0xc4, 0x7b, 0xb0, 0x90, 0xdd, 0x8a, 0xb7, 0x19, 0x3a, 0xa3, 0xb4, 0x19, - 0x52, 0x26, 0xfc, 0x67, 0x0b, 0xd0, 0xc1, 0x30, 0x22, 0xb9, 0xeb, 0xe4, 0x1d, 0xa1, 0x8e, 0x15, - 0x37, 0x54, 0x9b, 0x46, 0x62, 0x84, 0x30, 0xcc, 0x0d, 0x86, 0x11, 0x71, 0x8f, 0x49, 0xc7, 0xf7, - 0x5c, 0xca, 0xaa, 0xbf, 0x79, 0x27, 0x43, 0xc3, 0xfb, 0xb0, 0xa4, 0x21, 0x1d, 0x4f, 0xe8, 0x5f, - 0x58, 0xd0, 0xdc, 0x69, 0x7b, 0x1d, 0xd2, 0x7f, 0xff, 0xa2, 0xe3, 0x43, 0x58, 0x2d, 0xc0, 0x32, - 0x9e, 0x70, 0x27, 0x30, 0x27, 0xbf, 0xf4, 0x2e, 0x0d, 0x70, 0x1b, 0xe6, 0x95, 0x7d, 0xc6, 0xc3, - 0xda, 0x07, 0x94, 0x93, 0xfd, 0x5d, 0x22, 0xde, 0x87, 0x25, 0x6d, 0xb7, 0xf1, 0x70, 0xff, 0xc9, - 0x82, 0xd5, 0xe3, 0xcc, 0x0d, 0x73, 0xd8, 0xeb, 0x9c, 0x7a, 0xed, 0x41, 0x92, 0xb1, 0x74, 0xb3, - 0xa5, 0x57, 0x37, 0x2d, 0xbd, 0x3c, 0xc1, 0x98, 0xdc, 0x8e, 0xc9, 0x38, 0x23, 0x75, 0xa5, 0x5c, - 0xea, 0x49, 0x5d, 0xea, 0xd4, 0xba, 0xaa, 0x19, 0xeb, 0x3a, 0x02, 0xbb, 0x08, 0xe8, 0x78, 0x7d, - 0xc9, 0x7f, 0x4d, 0x40, 0x23, 0xfb, 0x45, 0xa5, 0x87, 0x56, 0x20, 0x76, 0x0a, 0x6e, 0x22, 0xe3, - 0xf5, 0x39, 0xb1, 0x2a, 0xba, 0x58, 0xdf, 0x52, 0x14, 0x36, 0x29, 0x6a, 0xb9, 0xae, 0xef, 0x77, - 0xfb, 0x84, 0x3f, 0x72, 0xbf, 0x18, 0x9e, 0x6c, 0x1c, 0x47, 0x61, 0xcf, 0xeb, 0xfe, 0xb0, 0xdd, - 0x1f, 0x12, 0x45, 0x9d, 0x77, 0x60, 0xfa, 0xa4, 0xdd, 0x21, 0x9f, 0x39, 0x8f, 0x99, 0x46, 0x2e, - 0x5a, 0x98, 0x30, 0xa3, 0x6f, 0x43, 0x2d, 0x94, 0xc9, 0xe3, 0x14, 0x5b, 0x79, 0x4d, 0x5b, 0xd9, - 0xf2, 0xa2, 0xdb, 0x5b, 0x7c, 0x61, 0xca, 0x8d, 0x3e, 0x81, 0x09, 0xf2, 0xaa, 0x39, 0x3d, 0xc2, - 0x6e, 0x13, 0xe4, 0x15, 0x7e, 0x04, 0xcb, 0x26, 0x3d, 0x8e, 0x75, 0x2a, 0x5b, 0xff, 0x46, 0xc0, - 0xff, 0x41, 0x80, 0xbe, 0x0b, 0xb3, 0x9d, 0xf4, 0xdd, 0x19, 0x35, 0x92, 0x75, 0x99, 0xc7, 0x77, - 0x7b, 0xd9, 0x44, 0xa6, 0x01, 0xba, 0x03, 0xb5, 0x9f, 0x24, 0x8f, 0x12, 0x68, 0x49, 0x30, 0xa9, - 0xcf, 0x25, 0xf6, 0x55, 0x9d, 0xc8, 0xd7, 0x9d, 0x25, 0x1d, 0x6f, 0xb9, 0x4e, 0xed, 0xb5, 0xcb, - 0x75, 0xd9, 0xc6, 0xf8, 0x36, 0xcc, 0x77, 0xd5, 0xf7, 0x62, 0xb4, 0x92, 0xbc, 0xfe, 0xe7, 0x9e, - 0xae, 0xed, 0xa6, 0x79, 0x82, 0x06, 0xe8, 0x2e, 0xcc, 0x51, 0xe5, 0x69, 0x15, 0x25, 0xb2, 0xe5, - 0x1e, 0x7f, 0xed, 0x15, 0x23, 0x9d, 0x06, 0xe8, 0xc7, 0xb0, 0xd2, 0x35, 0xbf, 0x6b, 0xa2, 0x1b, - 0xb9, 0x5d, 0xf5, 0x77, 0x45, 0x1b, 0x5f, 0xc4, 0x42, 0x03, 0x74, 0x02, 0xab, 0xdd, 0xa2, 0x47, - 0x42, 0xf4, 0x51, 0xfa, 0x81, 0xc2, 0xd7, 0x4b, 0xfb, 0xe6, 0xc5, 0x4c, 0x34, 0x40, 0x4f, 0x00, - 0x45, 0xda, 0x4b, 0x19, 0x5a, 0x13, 0x6b, 0x8d, 0xaf, 0x80, 0xf6, 0x07, 0x25, 0xb3, 0x34, 0x40, - 0x1d, 0x68, 0x76, 0x0b, 0x9e, 0x61, 0x10, 0xce, 0xfc, 0x55, 0xc3, 0xf8, 0x04, 0x65, 0x7f, 0x74, - 0x21, 0x0f, 0xc7, 0xdd, 0xd5, 0xde, 0x11, 0x24, 0x6e, 0xe3, 0x33, 0x88, 0xc4, 0x5d, 0xf0, 0x00, - 0xf1, 0x14, 0x96, 0xba, 0x7a, 0x63, 0x1d, 0x99, 0x57, 0x49, 0x2b, 0xbb, 0x5e, 0x36, 0x4d, 0x03, - 0xb4, 0x0f, 0xf5, 0xd3, 0x6c, 0xa7, 0x18, 0x25, 0xff, 0x57, 0xd1, 0x1b, 0xe6, 0xb6, 0x5d, 0x34, - 0x25, 0x45, 0xce, 0xb5, 0x5e, 0x55, 0x91, 0xf5, 0x6e, 0xb0, 0x2a, 0xb2, 0xa9, 0x67, 0x7b, 0x08, - 0x8b, 0xbd, 0x7c, 0x37, 0x12, 0x5d, 0x4b, 0x1a, 0x88, 0x86, 0xf6, 0xaa, 0xbd, 0x56, 0x3c, 0xc9, - 0xbf, 0xd7, 0xcd, 0x77, 0xfa, 0xe4, 0xf7, 0x4c, 0x4d, 0x47, 0x7b, 0xad, 0x78, 0x92, 0x3b, 0xaa, - 0x5a, 0x90, 0x4a, 0x47, 0xcd, 0x15, 0xbd, 0xf6, 0x8a, 0x91, 0x4e, 0x03, 0x74, 0x1b, 0x66, 0x12, - 0x1a, 0x42, 0x39, 0xa6, 0x78, 0xe1, 0x92, 0x46, 0xe3, 0xa1, 0x49, 0xc6, 0x0c, 0x94, 0xe7, 0xa0, - 0x6a, 0x68, 0xca, 0xf6, 0x7d, 0x9e, 0xc8, 0x6e, 0x84, 0xd2, 0xa8, 0x90, 0x07, 0x64, 0x6c, 0x98, - 0xc8, 0x03, 0x32, 0x77, 0x38, 0x62, 0xeb, 0xc9, 0x35, 0x16, 0xa4, 0xf5, 0xe8, 0x8d, 0x0f, 0x69, - 0x3d, 0x86, 0x5e, 0x44, 0x1c, 0xe5, 0x95, 0xee, 0x81, 0x8c, 0xf2, 0xd9, 0xfe, 0x84, 0x8c, 0xf2, - 0xb9, 0x46, 0x43, 0x2c, 0x9a, 0x5e, 0x1f, 0x17, 0xb8, 0x9b, 0x28, 0xcc, 0x0a, 0xdc, 0x4d, 0xd6, - 0x4a, 0xcf, 0xa0, 0x61, 0x2c, 0x10, 0xd1, 0x87, 0x62, 0x5d, 0x51, 0x31, 0x6b, 0xaf, 0x97, 0x33, - 0x70, 0xb8, 0x7a, 0x85, 0x26, 0xe1, 0x1a, 0xeb, 0x48, 0x09, 0xb7, 0xa0, 0xb4, 0xbb, 0x0b, 0x73, - 0x6a, 0xf5, 0x24, 0x4d, 0x31, 0x57, 0xbd, 0x49, 0x53, 0xd4, 0x4a, 0xad, 0x7d, 0xa8, 0xe7, 0xf2, - 0x75, 0x79, 0x94, 0x7a, 0x4d, 0x21, 0x8f, 0xd2, 0x94, 0xe2, 0x3f, 0x83, 0x86, 0x31, 0xff, 0x97, - 0x9a, 0x2b, 0xaa, 0x54, 0xa4, 0xe6, 0x8a, 0xcb, 0x87, 0x3b, 0x50, 0x93, 0x64, 0x69, 0xfb, 0x6a, - 0xae, 0x2d, 0x6d, 0x3f, 0x9b, 0x12, 0xef, 0x43, 0x3d, 0xf7, 0x51, 0x29, 0x9d, 0x9e, 0xaf, 0x4b, - 0xe9, 0x4c, 0xc9, 0xf5, 0x8f, 0xf2, 0x59, 0x4e, 0x92, 0x7f, 0xa2, 0xf5, 0xdc, 0x75, 0xac, 0xe5, - 0xd1, 0xf6, 0x8d, 0x0b, 0x38, 0xb8, 0x69, 0xe8, 0x49, 0x94, 0x34, 0x0d, 0x63, 0x9e, 0x2a, 0x4d, - 0xc3, 0x9c, 0x7d, 0x6d, 0xd7, 0x9f, 0xcd, 0x6f, 0xf0, 0xbf, 0x66, 0x7e, 0xca, 0x7e, 0x5f, 0x4c, - 0xb1, 0x14, 0xee, 0xf6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x20, 0x7b, 0x1e, 0x22, 0xb6, 0x29, - 0x00, 0x00, + 0x11, 0xd7, 0xd8, 0x5e, 0xdb, 0x5b, 0xb6, 0xb3, 0x76, 0x3b, 0x6b, 0xaf, 0x27, 0x7e, 0x79, 0x4e, + 0xbf, 0xf0, 0x88, 0xe0, 0x61, 0x0b, 0x47, 0x8a, 0x80, 0x87, 0x08, 0xf1, 0x9f, 0xc4, 0x9b, 0xc4, + 0x36, 0x19, 0xe7, 0x71, 0x88, 0x84, 0xc2, 0x64, 0xa7, 0xbd, 0x5a, 0xbc, 0x3b, 0x33, 0x9e, 0x9e, + 0x75, 0x02, 0x97, 0x27, 0x2e, 0x4f, 0x7a, 0xc0, 0x01, 0x84, 0xc4, 0x09, 0x09, 0x72, 0x82, 0x03, + 0x07, 0x0e, 0x70, 0x46, 0xdc, 0xf8, 0x0a, 0x5c, 0xf9, 0x02, 0x7c, 0x05, 0x34, 0xdd, 0x3d, 0x3d, + 0x3d, 0x33, 0x3d, 0xe3, 0xcd, 0x6c, 0x42, 0x2e, 0x2b, 0x75, 0x75, 0xf5, 0xf4, 0xaf, 0xaa, 0xab, + 0xaa, 0xab, 0xaa, 0x17, 0x96, 0xba, 0x81, 0x37, 0xf4, 0xb7, 0xd8, 0xef, 0xa6, 0x1f, 0x78, 0xa1, + 0x87, 0x6a, 0x6c, 0x60, 0xde, 0x38, 0xf6, 0x89, 0xfb, 0xbc, 0x7d, 0xb8, 0xe5, 0x9f, 0x75, 0xb7, + 0xd8, 0xcc, 0x16, 0x75, 0xce, 0x9e, 0xbf, 0xa4, 0x5b, 0x2f, 0x29, 0xe7, 0x34, 0xbf, 0x5a, 0xcc, + 0x12, 0xd8, 0xbe, 0x4f, 0x02, 0xc1, 0x88, 0xbf, 0x07, 0xb0, 0xeb, 0x0d, 0x06, 0x9e, 0x6b, 0x11, + 0xea, 0xa3, 0x16, 0xcc, 0xec, 0x07, 0xc1, 0xae, 0xe7, 0x90, 0x96, 0xb1, 0x61, 0xdc, 0xaa, 0x59, + 0xf1, 0x10, 0xad, 0xc0, 0xf4, 0x7e, 0x10, 0x1c, 0xd2, 0x6e, 0x6b, 0x62, 0xc3, 0xb8, 0x55, 0xb7, + 0xc4, 0x08, 0x3f, 0x04, 0xf4, 0x20, 0x02, 0x75, 0xcf, 0x71, 0x0e, 0xc9, 0xe0, 0x05, 0x09, 0xda, + 0xee, 0xa9, 0x17, 0x71, 0x7f, 0x46, 0x49, 0xd0, 0xde, 0x63, 0x9f, 0xa9, 0x5b, 0x62, 0x84, 0xd6, + 0xa1, 0x6e, 0x79, 0x7d, 0xf2, 0x98, 0x5c, 0x90, 0x3e, 0xfb, 0x50, 0xcd, 0x4a, 0x08, 0xf8, 0xbf, + 0x06, 0x5c, 0xd9, 0x0d, 0x88, 0x1d, 0x12, 0xf6, 0x49, 0x8b, 0x9c, 0xa3, 0x7b, 0x70, 0xa5, 0xed, + 0xf6, 0x42, 0xfe, 0xe9, 0xc7, 0x3d, 0x1a, 0xb6, 0x8c, 0x8d, 0xc9, 0x5b, 0x73, 0xdb, 0x6b, 0x9b, + 0x5c, 0x2f, 0xf9, 0xbd, 0xad, 0xcc, 0x02, 0xf4, 0x1d, 0xa8, 0x33, 0xae, 0x68, 0x92, 0xed, 0x39, + 0xb7, 0xbd, 0xbe, 0x49, 0x49, 0x70, 0x41, 0x82, 0xe7, 0xb6, 0xdf, 0x7b, 0xee, 0xdb, 0x81, 0x3d, + 0xa0, 0x9b, 0x92, 0xc7, 0x4a, 0xd8, 0xd1, 0x06, 0xcc, 0x1d, 0xfb, 0x24, 0xb0, 0xc3, 0x9e, 0xe7, + 0xb6, 0xf7, 0x5a, 0x93, 0x4c, 0x18, 0x95, 0x84, 0x4c, 0x98, 0x3d, 0xf6, 0x85, 0xac, 0x53, 0x6c, + 0x5a, 0x8e, 0xd9, 0xea, 0x97, 0x2e, 0x09, 0xc4, 0x74, 0x4d, 0xac, 0x4e, 0x48, 0xf8, 0x73, 0x68, + 0xa4, 0x04, 0xae, 0x72, 0x04, 0x69, 0x01, 0x27, 0xdf, 0x48, 0x40, 0x1c, 0xc0, 0xe2, 0x03, 0x12, + 0xb2, 0x31, 0x65, 0x73, 0xe4, 0x3c, 0x82, 0xcd, 0x19, 0xf6, 0xa4, 0xc2, 0xeb, 0x96, 0x4a, 0xca, + 0xaa, 0x65, 0xa2, 0x5c, 0x2d, 0x93, 0x69, 0xb5, 0xe0, 0x2f, 0x0d, 0x58, 0xca, 0x6c, 0x5a, 0x49, + 0xee, 0x1d, 0x58, 0x90, 0x82, 0x30, 0xa4, 0x93, 0xcc, 0x34, 0xca, 0x65, 0x4f, 0x2f, 0xc1, 0xbf, + 0x34, 0xa0, 0x71, 0x22, 0xb0, 0xc4, 0xf2, 0xa7, 0xf4, 0x69, 0xbc, 0x99, 0xc1, 0xa8, 0x72, 0x4f, + 0x68, 0xcc, 0xa1, 0xd4, 0x98, 0xf0, 0x3e, 0x2c, 0xa6, 0xc1, 0x50, 0x1f, 0x7d, 0x53, 0x75, 0x50, + 0x01, 0x67, 0x49, 0x58, 0x7f, 0x32, 0x61, 0x29, 0x4c, 0xf8, 0x67, 0x60, 0xc6, 0xfa, 0xbd, 0xe7, + 0xfb, 0xfd, 0x5e, 0x87, 0x7d, 0x3f, 0x92, 0x37, 0x12, 0x4f, 0x85, 0x68, 0x94, 0x43, 0xd4, 0x1c, + 0xec, 0x75, 0x80, 0xfb, 0x81, 0x37, 0x48, 0x1d, 0xad, 0x42, 0xc1, 0xbf, 0x37, 0xe0, 0x5a, 0xe1, + 0xe6, 0x95, 0x8e, 0xf9, 0x11, 0x2c, 0xc6, 0xe1, 0x60, 0x48, 0x68, 0xa8, 0x9c, 0xf4, 0x87, 0x45, + 0xa7, 0x22, 0x58, 0xad, 0xdc, 0x42, 0x1c, 0xc2, 0xfa, 0x03, 0x12, 0x46, 0x58, 0x2d, 0x72, 0xae, + 0x51, 0x4e, 0x51, 0xe0, 0x1a, 0xef, 0x5c, 0xff, 0x60, 0xc0, 0x07, 0x25, 0xdb, 0x56, 0x3a, 0x65, + 0xad, 0x5e, 0x26, 0xaa, 0xea, 0xe5, 0x1f, 0x06, 0x34, 0x9f, 0x06, 0xb6, 0x4b, 0x4f, 0x49, 0xc0, + 0x26, 0x59, 0x94, 0x8a, 0x34, 0xd2, 0x82, 0x19, 0xe1, 0xfa, 0x42, 0x25, 0xf1, 0x10, 0x7d, 0x0c, + 0x57, 0x8e, 0xfb, 0x8e, 0x1a, 0xe1, 0xb8, 0x66, 0x32, 0xd4, 0x88, 0xef, 0x88, 0xbc, 0x54, 0xf9, + 0xb8, 0x8a, 0x32, 0xd4, 0xac, 0x1e, 0xa7, 0xca, 0xa3, 0x4a, 0x2d, 0x13, 0x55, 0x1e, 0xc1, 0x8a, + 0x4e, 0x80, 0x6a, 0x1e, 0xf4, 0x85, 0x01, 0xf3, 0x0f, 0xbd, 0x9e, 0x2b, 0xef, 0xa1, 0x62, 0x2d, + 0x5c, 0x07, 0xb0, 0xc8, 0xf9, 0x21, 0xa1, 0xd4, 0xee, 0x12, 0xa1, 0x01, 0x85, 0x52, 0x16, 0x09, + 0x2f, 0x97, 0x18, 0xef, 0xc0, 0x82, 0x82, 0xa3, 0x9a, 0x30, 0xff, 0x8e, 0x5c, 0x32, 0xe3, 0x8f, + 0xd1, 0x84, 0xe7, 0x52, 0x22, 0xe2, 0xbd, 0x8a, 0xc2, 0x28, 0xd7, 0x7b, 0xd6, 0xfa, 0x15, 0xcd, + 0x4c, 0xe6, 0x34, 0xa3, 0x84, 0x8a, 0xa9, 0x6c, 0xa8, 0x88, 0xe6, 0x0f, 0x6c, 0xd7, 0xe9, 0x13, + 0x27, 0x72, 0x7a, 0x7e, 0x9e, 0x0a, 0x05, 0x61, 0x98, 0xe7, 0x23, 0x8b, 0xd0, 0x61, 0x3f, 0x6c, + 0x4d, 0xb3, 0x78, 0x91, 0xa2, 0xe1, 0x27, 0xb0, 0x5e, 0x2c, 0x5a, 0x35, 0x75, 0x9d, 0xc2, 0xfc, + 0x93, 0x61, 0x2f, 0x1c, 0xe1, 0xe8, 0xc7, 0xbb, 0x06, 0x77, 0x60, 0x41, 0xd9, 0xa7, 0x1a, 0xd6, + 0xd7, 0x06, 0x34, 0xe3, 0x68, 0x9b, 0xa4, 0x3c, 0xe5, 0xa8, 0xc7, 0x0a, 0x65, 0x51, 0x80, 0xbc, + 0xdf, 0xeb, 0x87, 0x24, 0x60, 0x07, 0x5a, 0xb3, 0xc4, 0x28, 0xda, 0xef, 0x88, 0xbc, 0x0a, 0x4f, + 0xc8, 0x39, 0x3b, 0xc9, 0x9a, 0x15, 0x0f, 0xf1, 0x5f, 0x0c, 0x58, 0xd1, 0x61, 0xac, 0x74, 0x19, + 0xdc, 0x07, 0x18, 0x24, 0xb9, 0x20, 0xbf, 0x06, 0x3e, 0x2e, 0x0a, 0x77, 0x7c, 0xb7, 0xfb, 0xc3, + 0x7e, 0x9f, 0xdd, 0xa6, 0xca, 0xca, 0x68, 0x67, 0x57, 0xc0, 0xe5, 0x72, 0xc4, 0x43, 0xfc, 0xeb, + 0x1c, 0x5c, 0x99, 0x18, 0x95, 0x06, 0x01, 0x05, 0xd6, 0x04, 0xcb, 0x98, 0xd4, 0xed, 0xc6, 0x0b, + 0x02, 0xbf, 0x35, 0x60, 0x55, 0x0b, 0xe9, 0x7d, 0xaa, 0x10, 0xff, 0xd5, 0x00, 0xf4, 0xa8, 0xd7, + 0x39, 0x53, 0xf8, 0xca, 0x95, 0xf4, 0x35, 0x58, 0x8c, 0xf8, 0x89, 0xc3, 0x05, 0x57, 0x54, 0x95, + 0xa3, 0x47, 0xe0, 0x2d, 0x62, 0x53, 0xcf, 0x15, 0xea, 0x12, 0xa3, 0xac, 0xb2, 0x6a, 0xe5, 0x2e, + 0x37, 0x9d, 0x71, 0xb9, 0x4f, 0xa1, 0xde, 0x76, 0xb6, 0x79, 0xe8, 0x28, 0xbc, 0xea, 0xd9, 0xd6, + 0x2c, 0xe0, 0xf0, 0x02, 0x45, 0x8c, 0xf0, 0xe7, 0xb0, 0x9c, 0x13, 0xb7, 0xd2, 0x01, 0xdc, 0x81, + 0x05, 0x89, 0x42, 0x39, 0x83, 0x45, 0xe1, 0xea, 0x72, 0xce, 0x4a, 0xb3, 0xe1, 0x21, 0xf3, 0xf5, + 0xe8, 0x3a, 0x20, 0x0e, 0x43, 0x11, 0xfb, 0x7a, 0x3a, 0xd0, 0x1a, 0xb9, 0x40, 0xbb, 0x01, 0x73, + 0x5e, 0x3e, 0x4e, 0x79, 0x23, 0xc6, 0xa9, 0x2f, 0xb8, 0x43, 0xe4, 0xf6, 0x1d, 0xab, 0x56, 0x19, + 0x39, 0x5f, 0x4f, 0xd8, 0xf1, 0xdf, 0x0c, 0xb8, 0xda, 0x76, 0x2f, 0x7a, 0x21, 0x89, 0x90, 0x3d, + 0xf5, 0x64, 0x84, 0xbe, 0x3c, 0x0e, 0x17, 0x5f, 0x52, 0x89, 0xa1, 0x4d, 0xa5, 0x0c, 0xed, 0x13, + 0x58, 0xe2, 0x7b, 0xa9, 0xd6, 0x5a, 0x63, 0xd6, 0x9a, 0x9f, 0x28, 0x35, 0xba, 0x9f, 0x1b, 0xd0, + 0xd4, 0xc0, 0xfe, 0xbf, 0x9a, 0x8e, 0x0b, 0x57, 0x65, 0x52, 0xde, 0xef, 0x8f, 0xe2, 0xac, 0xe3, + 0x25, 0xbc, 0xbf, 0x51, 0xee, 0x25, 0x65, 0xc3, 0xf7, 0x1a, 0xaf, 0x7e, 0x67, 0xc0, 0xec, 0xee, + 0xe1, 0x09, 0x63, 0x1b, 0xab, 0xc6, 0xbb, 0x05, 0x0d, 0xbe, 0x97, 0x4d, 0x43, 0x12, 0x1c, 0xd9, + 0x83, 0x38, 0xed, 0xcb, 0x92, 0xd1, 0x4d, 0x51, 0xa1, 0x72, 0x52, 0xdb, 0x11, 0xaa, 0x4a, 0x13, + 0xa3, 0xf0, 0x3e, 0x17, 0x2b, 0x2b, 0x3a, 0x94, 0x75, 0x81, 0x8d, 0x7d, 0x99, 0x1f, 0x4b, 0x42, + 0x40, 0x7b, 0x00, 0x3f, 0xb0, 0xbb, 0x3d, 0x97, 0xa9, 0x5a, 0xf4, 0x33, 0x6e, 0x6a, 0xa0, 0x8b, + 0xec, 0x3e, 0xe1, 0xb5, 0x94, 0x75, 0x23, 0x1c, 0xe1, 0x6b, 0x03, 0xe6, 0x13, 0x54, 0xd4, 0x47, + 0xdf, 0x80, 0x7a, 0xac, 0x3e, 0x2a, 0xba, 0x30, 0x8d, 0x38, 0x3b, 0x11, 0x74, 0x2b, 0xe1, 0x78, + 0x4b, 0x38, 0xa5, 0x2e, 0x86, 0x03, 0xca, 0x50, 0xd6, 0xac, 0x84, 0x80, 0x2f, 0x12, 0x88, 0x34, + 0xd2, 0x5c, 0x7a, 0x4f, 0xe3, 0xed, 0xe8, 0x26, 0x1f, 0x4e, 0xf0, 0x1f, 0x0d, 0x58, 0x50, 0x36, + 0x7e, 0x5f, 0xca, 0x31, 0x61, 0x36, 0xd6, 0x85, 0xd0, 0x8d, 0x1c, 0xe3, 0xe3, 0xa4, 0xc7, 0xa2, + 0x71, 0x77, 0x27, 0xed, 0xee, 0xce, 0x08, 0x32, 0x9f, 0x41, 0x93, 0x0f, 0x79, 0xaf, 0xea, 0x24, + 0xb4, 0xc3, 0x21, 0x2d, 0xff, 0xe8, 0x0a, 0x4c, 0x73, 0xb6, 0xf8, 0x26, 0xe5, 0xa3, 0x11, 0x8c, + 0xaf, 0x05, 0x2b, 0xba, 0xcd, 0x78, 0x65, 0x86, 0xc4, 0x14, 0x2b, 0xa7, 0xbd, 0x3e, 0xb9, 0x14, + 0x04, 0x0b, 0x5b, 0x4e, 0x1c, 0x56, 0xf8, 0x28, 0xdd, 0x8a, 0x9c, 0xcc, 0xb4, 0x22, 0x47, 0x48, + 0xca, 0x9a, 0xb0, 0x9c, 0xc3, 0x41, 0x7d, 0xfc, 0x18, 0xae, 0xec, 0x91, 0x3e, 0x51, 0x5a, 0x98, + 0xe3, 0x28, 0x7d, 0x09, 0x1a, 0xa9, 0xaf, 0x51, 0x1f, 0x1f, 0x42, 0x23, 0x3e, 0xd8, 0x9d, 0x9f, + 0xb6, 0x9d, 0x71, 0x77, 0xb8, 0x9b, 0x34, 0x00, 0xf9, 0xe7, 0xa8, 0x8f, 0xbe, 0x9e, 0x04, 0x4a, + 0xe1, 0x44, 0x39, 0x5b, 0x96, 0x0c, 0xf8, 0xef, 0xb9, 0x12, 0x84, 0xee, 0x1e, 0x9e, 0x94, 0xc3, + 0x32, 0x61, 0x36, 0x52, 0x9a, 0x12, 0x3a, 0xe5, 0x38, 0xe3, 0x1a, 0x93, 0x6f, 0xc7, 0x87, 0x35, + 0xe7, 0xf7, 0xcf, 0x7c, 0x9e, 0xcf, 0x70, 0x53, 0x1f, 0x7d, 0x1f, 0x66, 0xf8, 0xbd, 0x11, 0xbb, + 0xf2, 0xa8, 0xd7, 0x4d, 0xbc, 0x0c, 0xed, 0x6b, 0xfc, 0xfb, 0x2b, 0x5a, 0x21, 0x78, 0xad, 0x5a, + 0x20, 0xc5, 0x75, 0x00, 0xbe, 0x83, 0x12, 0xfe, 0x14, 0x0a, 0xfe, 0x95, 0x01, 0x2d, 0x8b, 0x0c, + 0xbc, 0x0b, 0xf2, 0x46, 0xea, 0x6f, 0xc1, 0x0c, 0x77, 0x02, 0x2a, 0xf2, 0xef, 0x78, 0xf8, 0x46, + 0xfd, 0x6e, 0x27, 0xd3, 0xef, 0x76, 0xf0, 0x21, 0xac, 0x15, 0xa0, 0xe1, 0x17, 0x3f, 0x1d, 0x76, + 0x3a, 0x84, 0x52, 0xd1, 0x51, 0x8e, 0x87, 0x91, 0x87, 0x9e, 0xda, 0xbd, 0x3e, 0x71, 0x04, 0x1a, + 0x31, 0xc2, 0x5f, 0x1a, 0xd0, 0xbc, 0xe7, 0x38, 0xef, 0x42, 0x34, 0x27, 0x2f, 0x9a, 0x53, 0x2a, + 0xda, 0x43, 0x58, 0xd1, 0x41, 0xa9, 0x24, 0x57, 0x0f, 0x1a, 0x7b, 0x3d, 0x3a, 0xe8, 0x51, 0x2a, + 0x63, 0x84, 0x09, 0xb3, 0x5e, 0xa6, 0x27, 0xeb, 0xf9, 0x23, 0x67, 0xef, 0x2d, 0x98, 0xe9, 0xa6, + 0xb3, 0x5b, 0x31, 0xc4, 0xfb, 0xb0, 0x98, 0xde, 0x8a, 0xb7, 0x19, 0x3a, 0xa3, 0xb4, 0x19, 0x12, + 0x26, 0xfc, 0x67, 0x03, 0xd0, 0xe1, 0x30, 0x24, 0x99, 0xeb, 0xe4, 0x1d, 0xa1, 0x8e, 0x14, 0x37, + 0x54, 0x9b, 0x46, 0x62, 0x84, 0x30, 0xcc, 0x0f, 0x86, 0x21, 0x71, 0x4e, 0x48, 0xc7, 0x73, 0x1d, + 0xca, 0xaa, 0xbf, 0x05, 0x2b, 0x45, 0xc3, 0x07, 0xb0, 0x9c, 0x43, 0x5a, 0x4d, 0xe8, 0x5f, 0x18, + 0xd0, 0xda, 0xb5, 0xdd, 0x0e, 0xe9, 0xbf, 0x7f, 0xd1, 0xf1, 0x11, 0xac, 0x15, 0x60, 0xa9, 0x26, + 0xdc, 0x29, 0xcc, 0xcb, 0x2f, 0xbd, 0x4b, 0x03, 0xdc, 0x81, 0x05, 0x65, 0x9f, 0x6a, 0x58, 0xfb, + 0x80, 0x32, 0xb2, 0xbf, 0x4b, 0xc4, 0x07, 0xb0, 0x9c, 0xdb, 0xad, 0x1a, 0xee, 0x3f, 0x19, 0xb0, + 0x76, 0x92, 0xba, 0x61, 0x8e, 0x7a, 0x9d, 0x33, 0xd7, 0x1e, 0xc4, 0x19, 0x4b, 0x37, 0x5d, 0x7a, + 0x75, 0x93, 0xd2, 0xcb, 0x15, 0x8c, 0xf1, 0xed, 0x18, 0x8f, 0x53, 0x52, 0x4f, 0x96, 0x4b, 0x3d, + 0x95, 0x97, 0x3a, 0xb1, 0xae, 0x5a, 0xca, 0xba, 0x8e, 0xc1, 0x2c, 0x02, 0x5a, 0xad, 0x2f, 0xf9, + 0x9f, 0x09, 0x68, 0xa6, 0xbf, 0xa8, 0xf4, 0xd0, 0x0a, 0xc4, 0x4e, 0xc0, 0x4d, 0xa4, 0xbc, 0x7e, + 0x3c, 0x91, 0xbf, 0xa5, 0x28, 0xb3, 0x26, 0xea, 0xbc, 0xae, 0xe7, 0x75, 0xfb, 0x84, 0x3f, 0x80, + 0xbf, 0x18, 0x9e, 0x6e, 0x9e, 0x84, 0x41, 0xcf, 0xed, 0xfe, 0xd0, 0xee, 0x0f, 0x89, 0xa2, 0xea, + 0x3b, 0x30, 0x73, 0x6a, 0x77, 0xc8, 0x67, 0xd6, 0x63, 0x56, 0xd2, 0x5f, 0xb6, 0x30, 0x66, 0x46, + 0xdf, 0x86, 0x7a, 0x20, 0x13, 0xcb, 0x19, 0xb6, 0xf2, 0x5a, 0x6e, 0x65, 0xdb, 0x0d, 0x6f, 0x6f, + 0xf3, 0x85, 0x09, 0x37, 0xfa, 0x04, 0x26, 0xc8, 0xab, 0xd6, 0xec, 0x08, 0xbb, 0x4d, 0x90, 0x57, + 0xf8, 0x11, 0xac, 0xe8, 0x74, 0x5c, 0xe9, 0xc4, 0xb6, 0xff, 0x85, 0x80, 0xff, 0xbb, 0x00, 0x7d, + 0x17, 0xe6, 0x3a, 0xc9, 0x9b, 0x34, 0x6a, 0xc6, 0xeb, 0x52, 0x0f, 0xf3, 0xe6, 0x8a, 0x8e, 0x4c, + 0x7d, 0x74, 0x07, 0xea, 0x3f, 0x89, 0x1f, 0x2c, 0xd0, 0xb2, 0x60, 0x52, 0x9f, 0x52, 0xcc, 0xab, + 0x79, 0x22, 0x5f, 0x77, 0x1e, 0x77, 0xc3, 0xe5, 0x3a, 0xb5, 0x0f, 0x2f, 0xd7, 0xa5, 0x9b, 0xe6, + 0x3b, 0xb0, 0xd0, 0x55, 0xdf, 0x92, 0xd1, 0x6a, 0xfc, 0xcf, 0x80, 0xcc, 0xb3, 0xb6, 0xd9, 0xd2, + 0x4f, 0x50, 0x1f, 0xdd, 0x85, 0x79, 0xaa, 0x3c, 0xbb, 0xa2, 0x58, 0xb6, 0xcc, 0xc3, 0xb0, 0xb9, + 0xaa, 0xa5, 0x53, 0x1f, 0xfd, 0x18, 0x56, 0xbb, 0xfa, 0x37, 0x4f, 0x74, 0x23, 0xb3, 0x6b, 0xfe, + 0xcd, 0xd1, 0xc4, 0x97, 0xb1, 0x50, 0x1f, 0x9d, 0xc2, 0x5a, 0xb7, 0xe8, 0x01, 0x11, 0x7d, 0x94, + 0x7c, 0xa0, 0xf0, 0x65, 0xd3, 0xbc, 0x79, 0x39, 0x13, 0xf5, 0xd1, 0x13, 0x40, 0x61, 0xee, 0x15, + 0x0d, 0xad, 0x8b, 0xb5, 0xda, 0x17, 0x42, 0xf3, 0x83, 0x92, 0x59, 0xea, 0xa3, 0x0e, 0xb4, 0xba, + 0x05, 0x4f, 0x34, 0x08, 0xa7, 0xfe, 0xc6, 0xa1, 0x7d, 0x9e, 0x32, 0x3f, 0xba, 0x94, 0x87, 0xe3, + 0xee, 0xe6, 0xde, 0x18, 0x24, 0x6e, 0xed, 0x13, 0x89, 0xc4, 0x5d, 0xf0, 0x38, 0xf1, 0x14, 0x96, + 0xbb, 0xf9, 0xa6, 0x3b, 0xd2, 0xaf, 0x92, 0x56, 0x76, 0xbd, 0x6c, 0x9a, 0xfa, 0xe8, 0x00, 0x1a, + 0x67, 0xe9, 0x2e, 0x32, 0x8a, 0xff, 0xcb, 0x92, 0x6f, 0xa6, 0x9b, 0x66, 0xd1, 0x94, 0x14, 0x39, + 0xd3, 0x96, 0x55, 0x45, 0xce, 0x77, 0x8a, 0x55, 0x91, 0x75, 0xfd, 0xdc, 0x23, 0x58, 0xea, 0x65, + 0x3b, 0x95, 0xe8, 0x5a, 0xdc, 0x5c, 0xd4, 0xb4, 0x5e, 0xcd, 0xf5, 0xe2, 0x49, 0xfe, 0xbd, 0x6e, + 0xb6, 0x0b, 0x28, 0xbf, 0xa7, 0x6b, 0x48, 0x9a, 0xeb, 0xc5, 0x93, 0xdc, 0x51, 0xd5, 0x62, 0x55, + 0x3a, 0x6a, 0xa6, 0x20, 0x36, 0x57, 0xb5, 0x74, 0xea, 0xa3, 0xdb, 0x30, 0x1b, 0xd3, 0x10, 0xca, + 0x30, 0x45, 0x0b, 0x97, 0x73, 0x34, 0x1e, 0x9a, 0x64, 0xcc, 0x40, 0x59, 0x0e, 0xaa, 0x86, 0xa6, + 0x74, 0x4f, 0xe8, 0x89, 0xec, 0x54, 0x28, 0x4d, 0x0c, 0x79, 0x40, 0xda, 0x66, 0x8a, 0x3c, 0x20, + 0x7d, 0xf7, 0x23, 0xb2, 0x9e, 0x4c, 0xd3, 0x41, 0x5a, 0x4f, 0xbe, 0x29, 0x22, 0xad, 0x47, 0xd3, + 0xa7, 0x88, 0xa2, 0xbc, 0xd2, 0x59, 0x90, 0x51, 0x3e, 0xdd, 0xbb, 0x90, 0x51, 0x3e, 0xd3, 0x84, + 0x88, 0x44, 0xcb, 0xd7, 0xce, 0x05, 0xee, 0x26, 0x8a, 0xb6, 0x02, 0x77, 0x93, 0x75, 0xd4, 0x33, + 0x68, 0x6a, 0x8b, 0x47, 0xf4, 0xa1, 0x58, 0x57, 0x54, 0xe8, 0x9a, 0x1b, 0xe5, 0x0c, 0x1c, 0x6e, + 0xbe, 0x7a, 0x93, 0x70, 0xb5, 0x35, 0xa6, 0x84, 0x5b, 0x50, 0xf6, 0xdd, 0x85, 0x79, 0xb5, 0xb2, + 0x92, 0xa6, 0x98, 0xa9, 0xec, 0xa4, 0x29, 0xe6, 0xca, 0xb0, 0x03, 0x68, 0x64, 0x72, 0x79, 0x79, + 0x94, 0xf9, 0x7a, 0x43, 0x1e, 0xa5, 0x2e, 0xfd, 0x7f, 0x06, 0x4d, 0x6d, 0x6d, 0x20, 0x35, 0x57, + 0x54, 0xc5, 0x48, 0xcd, 0x15, 0x97, 0x16, 0x77, 0xa0, 0x2e, 0xc9, 0xd2, 0xf6, 0xd5, 0x3c, 0x5c, + 0xda, 0x7e, 0x3a, 0x5d, 0x3e, 0x80, 0x46, 0xe6, 0xa3, 0x52, 0xba, 0x7c, 0x2e, 0x2f, 0xa5, 0xd3, + 0x25, 0xde, 0x3f, 0xca, 0x66, 0x39, 0x71, 0x6e, 0x8a, 0x36, 0x32, 0xd7, 0x71, 0x2e, 0xc7, 0x36, + 0x6f, 0x5c, 0xc2, 0xc1, 0x4d, 0x23, 0x9f, 0x44, 0x49, 0xd3, 0xd0, 0xe6, 0xb0, 0xd2, 0x34, 0xf4, + 0xd9, 0xd7, 0x4e, 0xe3, 0xd9, 0xc2, 0x26, 0xff, 0xdb, 0xe6, 0xa7, 0xec, 0xf7, 0xc5, 0x34, 0x4b, + 0xe1, 0x6e, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x53, 0x05, 0x0a, 0x0e, 0xd2, 0x29, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index be76b2f9d..b457983b5 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -395,11 +395,12 @@ message SetGroupMemberNicknameResp{ message SetGroupMemberInfoReq{ string groupID = 1; string userID = 2; - string operationID = 3; - google.protobuf.StringValue nickname = 4; - google.protobuf.StringValue faceURL = 5; - google.protobuf.Int32Value roleLevel = 6; - google.protobuf.StringValue ex = 7; + string opUserID = 3; + string operationID = 4; + google.protobuf.StringValue nickname = 5; + google.protobuf.StringValue faceURL = 6; + google.protobuf.Int32Value roleLevel = 7; + google.protobuf.StringValue ex = 8; } message SetGroupMemberInfoResp{ From 4418d031e16d500ab090e8f57268621f70d9948a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 16:18:23 +0800 Subject: [PATCH 393/752] log --- internal/rpc/auth/auth.go | 1 + internal/rpc/group/group.go | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index c145f4499..768cf980a 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -87,6 +87,7 @@ func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID st for _, v := range grpcCons { client := pbRelay.NewOnlineMessageRelayServiceClient(v) kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} + log.NewInfo(operationID, "KickUserOffline ", client, kickReq.String()) _, err := client.KickUserOffline(context.Background(), kickReq) return utils.Wrap(err, "") } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index e9452a813..c2b2d27ca 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1406,15 +1406,15 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.UserID + err.Error() return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } @@ -1448,15 +1448,15 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.UserID + err.Error() return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } From f106664952c007445eb549d757cc0909e1f20f68 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 16:27:11 +0800 Subject: [PATCH 394/752] kick --- pkg/common/constant/constant.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index fd13886d2..7be774b2f 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -209,12 +209,12 @@ const ( WorkMomentAtUserNotification = 2 ) const ( - AtAllString = "AtAllTag" - AtNormal = 0 - AtMe = 1 - AtAll = 2 - AtAllAtMe = 3 - GroupAnnouncement + AtAllString = "AtAllTag" + AtNormal = 0 + AtMe = 1 + AtAll = 2 + AtAllAtMe = 3 + GroupNotification = 4 ) var ContentType2PushContent = map[int64]string{ From 3f2638efafd5aed810c2bbbc8723ce1809bce55d Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 16:28:51 +0800 Subject: [PATCH 395/752] KickUserOffline --- internal/msg_gateway/gate/rpc_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 788f82956..b0adb5037 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -196,7 +196,7 @@ func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOffl ws.sendKickMsg(conn, &UserConn{}) } } - return nil, nil + return &pbRelay.KickUserOfflineResp{}, nil } func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { From 2b150e3c1c8fd3cd9b93ab7c3d18323c75cd2aef Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 16:38:42 +0800 Subject: [PATCH 396/752] KickUserOffline --- internal/api/auth/auth.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 5441cc2ea..66a0c3825 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -157,7 +157,7 @@ func ForceLogout(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - - log.NewInfo(params.OperationID, utils.GetSelfFuncName(), " return ", reply) - c.JSON(http.StatusOK, reply) + resp := api.ForceLogoutResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}} + log.NewInfo(params.OperationID, utils.GetSelfFuncName(), " return ", resp) + c.JSON(http.StatusOK, resp) } From c40dc64bd0c6162ecad41db73c1ae4c21dfe2b04 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 7 Jun 2022 16:59:05 +0800 Subject: [PATCH 397/752] set group memberInfo --- internal/rpc/group/group.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index bd7aa3264..551606ffe 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1432,6 +1432,7 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetGroupMemberInfo failed", err.Error()) resp.CommonResp.ErrCode = constant.ErrDB.ErrCode resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg + ":" + err.Error() + return resp, nil } chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) From 269df23851eb1f18e03fa29f6dc20af93df2e946 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 7 Jun 2022 17:06:47 +0800 Subject: [PATCH 398/752] set group memberInfo --- internal/rpc/group/group.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 551606ffe..ad98775f6 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1426,7 +1426,6 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr if req.Ex != nil { m["ex"] = req.Ex.Value } - err = imdb.UpdateGroupMemberInfoByMap(groupMember, m) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetGroupMemberInfo failed", err.Error()) From ef93a1f42e41a9eed6421d4fda0d9ae80aa1b3f0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 17:45:07 +0800 Subject: [PATCH 399/752] add conversation sync --- internal/rpc/group/group.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index c2b2d27ca..c132c9248 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -12,6 +12,7 @@ import ( cp "Open_IM/pkg/common/utils" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbCache "Open_IM/pkg/proto/cache" + pbConversation "Open_IM/pkg/proto/conversation" pbGroup "Open_IM/pkg/proto/group" open_im_sdk "Open_IM/pkg/proto/sdk_ws" pbUser "Open_IM/pkg/proto/user" @@ -934,6 +935,42 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf if changedType != 0 { chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL) } + if req.GroupInfo.Notification != "" { + //get group member user id + getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: req.OperationID, GroupID: req.GroupInfo.GroupID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + client := pbCache.NewCacheClient(etcdConn) + cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) + if err != nil { + log.NewError(req.OperationID, "GetGroupMemberIDListFromCache rpc call failed ", err.Error()) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil + } + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(req.OperationID, "GetGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String()) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil + } + var conversationReq pbConversation.ModifyConversationFieldReq + + conversation := pbConversation.Conversation{ + OwnerUserID: req.OpUserID, + ConversationID: utils.GetConversationIDBySessionType(req.GroupInfo.GroupID, constant.GroupChatType), + ConversationType: constant.GroupChatType, + GroupID: req.GroupInfo.GroupID, + } + conversationReq.Conversation = &conversation + conversationReq.OperationID = req.OperationID + conversationReq.FieldType = constant.FieldGroupAtType + conversation.GroupAtType = constant.GroupNotification + conversationReq.UserIDList = cacheResp.UserIDList + nEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + nClient := pbConversation.NewConversationClient(nEtcdConn) + conversationReply, err := nClient.ModifyConversationField(context.Background(), &conversationReq) + if err != nil { + log.NewError(conversationReq.OperationID, "ModifyConversationField rpc failed, ", conversationReq.String(), err.Error()) + } else if conversationReply.CommonResp.ErrCode != 0 { + log.NewError(conversationReq.OperationID, "ModifyConversationField rpc failed, ", conversationReq.String(), conversationReply.String()) + } + } return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil } From 6ce1d60ebb03ec6c47797fe73b1a72d80571bdb8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 18:09:11 +0800 Subject: [PATCH 400/752] log --- internal/rpc/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index c2b2d27ca..28ffa119d 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1539,7 +1539,7 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil //} - + log.Debug(req.OperationID, "UpdateGroupInfoDefaultZero ", req.GroupID, map[string]interface{}{"status": constant.GroupOk}) err = imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) if err != nil { log.Error(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), req.GroupID) From 0463f5e83d88de56cbd634f0668c9b24e0b2bebc Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 18:25:08 +0800 Subject: [PATCH 401/752] fix bug --- internal/rpc/group/group.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index fb77a2cf1..60127c425 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1448,11 +1448,11 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } @@ -1490,11 +1490,11 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } From e52639d1d4c0f2b8cbdf540566e39c8e88281db1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 7 Jun 2022 18:36:06 +0800 Subject: [PATCH 402/752] fix bug --- internal/api/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 7d8a89564..529e7494c 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -858,5 +858,5 @@ func SetGroupMemberInfo(c *gin.Context) { resp.ErrMsg = respPb.CommonResp.ErrMsg resp.ErrCode = respPb.CommonResp.ErrCode log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", resp) - c.JSON(http.StatusInternalServerError, resp) + c.JSON(http.StatusOK, resp) } From a87e41eecd704ad46408dae5a366e744362782b9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 18:39:43 +0800 Subject: [PATCH 403/752] super group push --- internal/push/logic/push_to_client.go | 207 ++++++++++++++------------ 1 file changed, 111 insertions(+), 96 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 271bb4792..386c951e8 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -12,6 +12,7 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbCache "Open_IM/pkg/proto/cache" pbPush "Open_IM/pkg/proto/push" pbRelay "Open_IM/pkg/proto/relay" pbRtc "Open_IM/pkg/proto/rtc" @@ -138,102 +139,116 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { - return - //var wsResult []*pbRelay.SingelMsgToUserResultList - //isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) - //log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) - //if len(grpcCons) == 0 { - // log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") - // grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) - //} - ////Online push message - //log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) - //for _, v := range grpcCons { - // msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - // reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) - // if err != nil { - // log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) - // continue - // } - // if reply != nil && reply.SinglePushResult != nil { - // wsResult = append(wsResult, reply.SinglePushResult...) - // } - //} - //log.Debug(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) - //successCount++ - //if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { - // for _, v := range wsResult { - // if v.ResultCode == 0 { - // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - // break - // } - // continue - // } - // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - // //Use offline push messaging - // var UIDList []string - // UIDList = append(UIDList, v.RecvID) - // customContent := OpenIMContent{ - // SessionType: int(pushMsg.MsgData.SessionType), - // From: pushMsg.MsgData.SendID, - // To: pushMsg.MsgData.RecvID, - // Seq: pushMsg.MsgData.Seq, - // } - // bCustomContent, _ := json.Marshal(customContent) - // jsonCustomContent := string(bCustomContent) - // var content string - // if pushMsg.MsgData.OfflinePushInfo != nil { - // content = pushMsg.MsgData.OfflinePushInfo.Title - // - // } else { - // switch pushMsg.MsgData.ContentType { - // case constant.Text: - // content = constant.ContentType2PushContent[constant.Text] - // case constant.Picture: - // content = constant.ContentType2PushContent[constant.Picture] - // case constant.Voice: - // content = constant.ContentType2PushContent[constant.Voice] - // case constant.Video: - // content = constant.ContentType2PushContent[constant.Video] - // case constant.File: - // content = constant.ContentType2PushContent[constant.File] - // case constant.AtText: - // a := AtContent{} - // _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) - // if utils.IsContain(v.RecvID, a.AtUserList) { - // content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] - // } else { - // content = constant.ContentType2PushContent[constant.GroupMsg] - // } - // default: - // content = constant.ContentType2PushContent[constant.Common] - // } - // } - // callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) - // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") - // if callbackResp.ErrCode != 0 { - // log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) - // } - // if callbackResp.ActionCode != constant.ActionAllow { - // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") - // break - // } - // - // if offlinePusher == nil { - // offlinePusher = jpush.JPushClient - // } - // pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) - // if err != nil { - // log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) - // } else { - // log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) - // } - // break - // } - // - // } - // - //} + var wsResult []*pbRelay.SingelMsgToUserResultList + isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) + log.Debug(pushMsg.OperationID, "Get super group msg from msg_transfer And push msg", pushMsg.String()) + getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pushMsg.OperationID, GroupID: pushMsg.MsgData.GroupID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + client := pbCache.NewCacheClient(etcdConn) + cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) + if err != nil { + log.NewError(pushMsg.OperationID, "GetGroupMemberIDListFromCache rpc call failed ", err.Error()) + return + } + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, "GetGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String()) + return + } + if len(grpcCons) == 0 { + log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") + grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + } + //Online push message + log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + for _, v := range grpcCons { + msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: cacheResp.UserIDList}) + if err != nil { + log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + continue + } + if reply != nil && reply.SinglePushResult != nil { + wsResult = append(wsResult, reply.SinglePushResult...) + } + } + log.Debug(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + successCount++ + if isOfflinePush { + var onlineSuccessUserIDList []string + onlineSuccessUserIDList = append(onlineSuccessUserIDList, pushMsg.MsgData.SendID) + for _, v := range wsResult { + if v.OnlinePush && v.UserID != pushMsg.MsgData.SendID { + onlineSuccessUserIDList = append(onlineSuccessUserIDList, v.UserID) + } + } + onlineFailedUserIDList := utils.DifferenceString(onlineSuccessUserIDList, cacheResp.UserIDList) + //Use offline push messaging + customContent := OpenIMContent{ + SessionType: int(pushMsg.MsgData.SessionType), + From: pushMsg.MsgData.SendID, + To: pushMsg.MsgData.RecvID, + Seq: pushMsg.MsgData.Seq, + } + bCustomContent, _ := json.Marshal(customContent) + jsonCustomContent := string(bCustomContent) + var content string + if pushMsg.MsgData.OfflinePushInfo != nil { + content = pushMsg.MsgData.OfflinePushInfo.Title + + } else { + switch pushMsg.MsgData.ContentType { + case constant.Text: + content = constant.ContentType2PushContent[constant.Text] + case constant.Picture: + content = constant.ContentType2PushContent[constant.Picture] + case constant.Voice: + content = constant.ContentType2PushContent[constant.Voice] + case constant.Video: + content = constant.ContentType2PushContent[constant.Video] + case constant.File: + content = constant.ContentType2PushContent[constant.File] + case constant.AtText: + a := AtContent{} + _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + if utils.IsContain(pushMsg.PushToUserID, a.AtUserList) { + content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] + } else { + content = constant.ContentType2PushContent[constant.GroupMsg] + } + case constant.SignalingNotification: + content = constant.ContentType2PushContent[constant.SignalMsg] + default: + content = constant.ContentType2PushContent[constant.Common] + + } + } + + callbackResp := callbackOfflinePush(pushMsg.OperationID, onlineFailedUserIDList[0], pushMsg.MsgData) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + if callbackResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + return + } + if offlinePusher == nil { + return + } + opts, err := GetOfflinePushOpts(pushMsg) + if err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) + } + log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), onlineFailedUserIDList, content, jsonCustomContent, "opts:", opts) + pushResult, err := offlinePusher.Push(onlineFailedUserIDList, content, jsonCustomContent, pushMsg.OperationID, opts) + if err != nil { + log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + } else { + log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) + } + + } + } func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err error) { From cfe01bb8200044dab4a1620692be856d544862f7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 18:45:00 +0800 Subject: [PATCH 404/752] super group push --- internal/push/logic/push_to_client.go | 42 --------------------------- 1 file changed, 42 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 386c951e8..896953cd2 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -267,45 +267,3 @@ func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err err } return opts, nil } - -//func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { -// m.MsgID = rpcChat.GetMsgID(m.SendID) -// m.ClientMsgID = m.MsgID -// switch m.SessionType { -// case constant.SingleChatType: -// sendMsgToKafka(m, m.SendID, "msgKey--sendID") -// sendMsgToKafka(m, m.RecvID, "msgKey--recvID") -// case constant.GroupChatType: -// etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) -// client := pbGroup.NewGroupClient(etcdConn) -// req := &pbGroup.Req{ -// GroupID: m.RecvID, -// Token: config.Config.Secret, -// OperationID: m.OperationID, -// } -// reply, err := client.(context.Background(), req) -// if err != nil { -// log.Error(m.Token, m.OperationID, "rpc getGroupInfo failed, err = %s", err.Error()) -// return -// } -// if reply.ErrorCode != 0 { -// log.Error(m.Token, m.OperationID, "rpc getGroupInfo failed, err = %s", reply.ErrorMsg) -// return -// } -// groupID := m.RecvID -// for i, v := range reply.MemberList { -// m.RecvID = v.UserId + " " + groupID -// sendMsgToKafka(m, utils.IntToString(i), "msgKey--recvID+\" \"+groupID") -// } -// default: -// -// } -//} -// -//func sendMsgToKafka(m *pbChat.WSToMsgSvrChatMsg, key string, flag string) { -// pid, offset, err := producer.SendMessage(m, key) -// if err != nil { -// log.ErrorByKv("kafka send failed", m.OperationID, "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), flag, key) -// } -// -//} From 7d0c8b0c5f9d3e4ee444998b6e8fad28cc44dd44 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 19:02:19 +0800 Subject: [PATCH 405/752] super group add notification --- internal/rpc/group/group.go | 12 +++--------- internal/rpc/msg/send_msg.go | 4 +++- internal/rpc/msg/super_group_notification.go | 9 +++++---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 60127c425..753fc856d 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -200,9 +200,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR if req.GroupInfo.GroupType != constant.SuperGroup { chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) } else { - for _, userID := range okUserIDList { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) - } + chat.SuperGroupNotification(req.OperationID, req.OpUserID, groupId) } return resp, nil @@ -385,9 +383,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite if groupInfo.GroupType != constant.SuperGroup { chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) } else { - for _, userID := range okUserIDList { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) - } + chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) } log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") @@ -589,9 +585,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou if groupInfo.GroupType != constant.SuperGroup { chat.MemberKickedNotification(req, okUserIDList) } else { - for _, userID := range okUserIDList { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) - } + chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) } log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String()) return &resp, nil diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index b38e573e2..6290168fb 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -511,7 +511,7 @@ func Notification(n *NotificationMsg) { msg.ClientMsgID = utils.GetMsgID(n.SendID) msg.Options = make(map[string]bool, 7) switch n.SessionType { - case constant.GroupChatType: + case constant.GroupChatType, constant.SuperGroupChatType: msg.RecvID = "" msg.GroupID = n.RecvID } @@ -732,6 +732,8 @@ func Notification(n *NotificationMsg) { unReadCount = config.Config.Notification.ConversationSetPrivate.Conversation.UnreadCount case constant.DeleteMessageNotification: reliabilityLevel = constant.ReliableNotificationNoMsg + case constant.SuperGroupUpdateNotification: + reliabilityLevel = constant.UnreliableNotification } switch reliabilityLevel { case constant.UnreliableNotification: diff --git a/internal/rpc/msg/super_group_notification.go b/internal/rpc/msg/super_group_notification.go index 32e86e167..52e2e17a2 100644 --- a/internal/rpc/msg/super_group_notification.go +++ b/internal/rpc/msg/super_group_notification.go @@ -9,7 +9,8 @@ import ( //"github.com/golang/protobuf/proto" ) -func SuperGroupNotification(operationID, sendID, recvID string) { +func SuperGroupNotification(operationID, sendID, groupID string) { + //var tips sdk.TipsComm //var err error //marshaler := jsonpb.Marshaler{ @@ -20,10 +21,10 @@ func SuperGroupNotification(operationID, sendID, recvID string) { //tips.JsonDetail, _ = marshaler.MarshalToString(m) n := &NotificationMsg{ SendID: sendID, - RecvID: recvID, - MsgFrom: constant.UserMsgType, + RecvID: groupID, + MsgFrom: constant.SysMsgType, ContentType: constant.SuperGroupUpdateNotification, - SessionType: constant.SingleChatType, + SessionType: constant.SuperGroupChatType, OperationID: operationID, } //n.Content, err = proto.Marshal(&tips) From 55e774344a7afc7e0c557b46c70e3b9bcdeed9b8 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 10:32:21 +0800 Subject: [PATCH 406/752] ws pb --- pkg/proto/sdk_ws/ws.pb.go | 5433 ------------------------------------- pkg/proto/sdk_ws/ws.proto | 1 + 2 files changed, 1 insertion(+), 5433 deletions(-) delete mode 100644 pkg/proto/sdk_ws/ws.pb.go diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go deleted file mode 100644 index 6c768fcaa..000000000 --- a/pkg/proto/sdk_ws/ws.pb.go +++ /dev/null @@ -1,5433 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: sdk_ws/ws.proto - -package server_api_params // import "Open_IM/pkg/proto/sdk_ws" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type GroupInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` - Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` - Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` - FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` - OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` - CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` - GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupInfo) Reset() { *m = GroupInfo{} } -func (m *GroupInfo) String() string { return proto.CompactTextString(m) } -func (*GroupInfo) ProtoMessage() {} -func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{0} -} -func (m *GroupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupInfo.Unmarshal(m, b) -} -func (m *GroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupInfo.Marshal(b, m, deterministic) -} -func (dst *GroupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupInfo.Merge(dst, src) -} -func (m *GroupInfo) XXX_Size() int { - return xxx_messageInfo_GroupInfo.Size(m) -} -func (m *GroupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_GroupInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupInfo proto.InternalMessageInfo - -func (m *GroupInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *GroupInfo) GetGroupName() string { - if m != nil { - return m.GroupName - } - return "" -} - -func (m *GroupInfo) GetNotification() string { - if m != nil { - return m.Notification - } - return "" -} - -func (m *GroupInfo) GetIntroduction() string { - if m != nil { - return m.Introduction - } - return "" -} - -func (m *GroupInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *GroupInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *GroupInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *GroupInfo) GetMemberCount() uint32 { - if m != nil { - return m.MemberCount - } - return 0 -} - -func (m *GroupInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *GroupInfo) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *GroupInfo) GetCreatorUserID() string { - if m != nil { - return m.CreatorUserID - } - return "" -} - -func (m *GroupInfo) GetGroupType() int32 { - if m != nil { - return m.GroupType - } - return 0 -} - -type GroupMemberFullInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - RoleLevel int32 `protobuf:"varint,3,opt,name=roleLevel" json:"roleLevel,omitempty"` - JoinTime int32 `protobuf:"varint,4,opt,name=joinTime" json:"joinTime,omitempty"` - Nickname string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,6,opt,name=faceURL" json:"faceURL,omitempty"` - AppMangerLevel int32 `protobuf:"varint,7,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` - JoinSource int32 `protobuf:"varint,8,opt,name=joinSource" json:"joinSource,omitempty"` - OperatorUserID string `protobuf:"bytes,9,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` - MuteEndTime uint32 `protobuf:"varint,11,opt,name=muteEndTime" json:"muteEndTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } -func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } -func (*GroupMemberFullInfo) ProtoMessage() {} -func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{1} -} -func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) -} -func (m *GroupMemberFullInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberFullInfo.Marshal(b, m, deterministic) -} -func (dst *GroupMemberFullInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberFullInfo.Merge(dst, src) -} -func (m *GroupMemberFullInfo) XXX_Size() int { - return xxx_messageInfo_GroupMemberFullInfo.Size(m) -} -func (m *GroupMemberFullInfo) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberFullInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberFullInfo proto.InternalMessageInfo - -func (m *GroupMemberFullInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *GroupMemberFullInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *GroupMemberFullInfo) GetRoleLevel() int32 { - if m != nil { - return m.RoleLevel - } - return 0 -} - -func (m *GroupMemberFullInfo) GetJoinTime() int32 { - if m != nil { - return m.JoinTime - } - return 0 -} - -func (m *GroupMemberFullInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *GroupMemberFullInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *GroupMemberFullInfo) GetAppMangerLevel() int32 { - if m != nil { - return m.AppMangerLevel - } - return 0 -} - -func (m *GroupMemberFullInfo) GetJoinSource() int32 { - if m != nil { - return m.JoinSource - } - return 0 -} - -func (m *GroupMemberFullInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *GroupMemberFullInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *GroupMemberFullInfo) GetMuteEndTime() uint32 { - if m != nil { - return m.MuteEndTime - } - return 0 -} - -type PublicUserInfo struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` - Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } -func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } -func (*PublicUserInfo) ProtoMessage() {} -func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{2} -} -func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) -} -func (m *PublicUserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PublicUserInfo.Marshal(b, m, deterministic) -} -func (dst *PublicUserInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_PublicUserInfo.Merge(dst, src) -} -func (m *PublicUserInfo) XXX_Size() int { - return xxx_messageInfo_PublicUserInfo.Size(m) -} -func (m *PublicUserInfo) XXX_DiscardUnknown() { - xxx_messageInfo_PublicUserInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_PublicUserInfo proto.InternalMessageInfo - -func (m *PublicUserInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PublicUserInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *PublicUserInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *PublicUserInfo) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *PublicUserInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type UserInfo struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` - PhoneNumber string `protobuf:"bytes,5,opt,name=phoneNumber" json:"phoneNumber,omitempty"` - Birth uint32 `protobuf:"varint,6,opt,name=birth" json:"birth,omitempty"` - Email string `protobuf:"bytes,7,opt,name=email" json:"email,omitempty"` - Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` - CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` - AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserInfo) Reset() { *m = UserInfo{} } -func (m *UserInfo) String() string { return proto.CompactTextString(m) } -func (*UserInfo) ProtoMessage() {} -func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{3} -} -func (m *UserInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfo.Unmarshal(m, b) -} -func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfo.Marshal(b, m, deterministic) -} -func (dst *UserInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfo.Merge(dst, src) -} -func (m *UserInfo) XXX_Size() int { - return xxx_messageInfo_UserInfo.Size(m) -} -func (m *UserInfo) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInfo proto.InternalMessageInfo - -func (m *UserInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *UserInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *UserInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *UserInfo) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *UserInfo) GetPhoneNumber() string { - if m != nil { - return m.PhoneNumber - } - return "" -} - -func (m *UserInfo) GetBirth() uint32 { - if m != nil { - return m.Birth - } - return 0 -} - -func (m *UserInfo) GetEmail() string { - if m != nil { - return m.Email - } - return "" -} - -func (m *UserInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *UserInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *UserInfo) GetAppMangerLevel() int32 { - if m != nil { - return m.AppMangerLevel - } - return 0 -} - -type FriendInfo struct { - OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` - CreateTime uint32 `protobuf:"varint,3,opt,name=createTime" json:"createTime,omitempty"` - FriendUser *UserInfo `protobuf:"bytes,4,opt,name=friendUser" json:"friendUser,omitempty"` - AddSource int32 `protobuf:"varint,5,opt,name=addSource" json:"addSource,omitempty"` - OperatorUserID string `protobuf:"bytes,6,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendInfo) Reset() { *m = FriendInfo{} } -func (m *FriendInfo) String() string { return proto.CompactTextString(m) } -func (*FriendInfo) ProtoMessage() {} -func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{4} -} -func (m *FriendInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendInfo.Unmarshal(m, b) -} -func (m *FriendInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendInfo.Marshal(b, m, deterministic) -} -func (dst *FriendInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendInfo.Merge(dst, src) -} -func (m *FriendInfo) XXX_Size() int { - return xxx_messageInfo_FriendInfo.Size(m) -} -func (m *FriendInfo) XXX_DiscardUnknown() { - xxx_messageInfo_FriendInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendInfo proto.InternalMessageInfo - -func (m *FriendInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *FriendInfo) GetRemark() string { - if m != nil { - return m.Remark - } - return "" -} - -func (m *FriendInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *FriendInfo) GetFriendUser() *UserInfo { - if m != nil { - return m.FriendUser - } - return nil -} - -func (m *FriendInfo) GetAddSource() int32 { - if m != nil { - return m.AddSource - } - return 0 -} - -func (m *FriendInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *FriendInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type BlackInfo struct { - OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,2,opt,name=createTime" json:"createTime,omitempty"` - BlackUserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=blackUserInfo" json:"blackUserInfo,omitempty"` - AddSource int32 `protobuf:"varint,4,opt,name=addSource" json:"addSource,omitempty"` - OperatorUserID string `protobuf:"bytes,5,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,6,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BlackInfo) Reset() { *m = BlackInfo{} } -func (m *BlackInfo) String() string { return proto.CompactTextString(m) } -func (*BlackInfo) ProtoMessage() {} -func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{5} -} -func (m *BlackInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackInfo.Unmarshal(m, b) -} -func (m *BlackInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackInfo.Marshal(b, m, deterministic) -} -func (dst *BlackInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackInfo.Merge(dst, src) -} -func (m *BlackInfo) XXX_Size() int { - return xxx_messageInfo_BlackInfo.Size(m) -} -func (m *BlackInfo) XXX_DiscardUnknown() { - xxx_messageInfo_BlackInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackInfo proto.InternalMessageInfo - -func (m *BlackInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *BlackInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *BlackInfo) GetBlackUserInfo() *PublicUserInfo { - if m != nil { - return m.BlackUserInfo - } - return nil -} - -func (m *BlackInfo) GetAddSource() int32 { - if m != nil { - return m.AddSource - } - return 0 -} - -func (m *BlackInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *BlackInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type GroupRequest struct { - UserInfo *PublicUserInfo `protobuf:"bytes,1,opt,name=userInfo" json:"userInfo,omitempty"` - GroupInfo *GroupInfo `protobuf:"bytes,2,opt,name=groupInfo" json:"groupInfo,omitempty"` - HandleResult int32 `protobuf:"varint,3,opt,name=handleResult" json:"handleResult,omitempty"` - ReqMsg string `protobuf:"bytes,4,opt,name=reqMsg" json:"reqMsg,omitempty"` - HandleMsg string `protobuf:"bytes,5,opt,name=handleMsg" json:"handleMsg,omitempty"` - ReqTime uint32 `protobuf:"varint,6,opt,name=reqTime" json:"reqTime,omitempty"` - HandleUserID string `protobuf:"bytes,7,opt,name=handleUserID" json:"handleUserID,omitempty"` - HandleTime uint32 `protobuf:"varint,8,opt,name=handleTime" json:"handleTime,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupRequest) Reset() { *m = GroupRequest{} } -func (m *GroupRequest) String() string { return proto.CompactTextString(m) } -func (*GroupRequest) ProtoMessage() {} -func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{6} -} -func (m *GroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupRequest.Unmarshal(m, b) -} -func (m *GroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupRequest.Marshal(b, m, deterministic) -} -func (dst *GroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupRequest.Merge(dst, src) -} -func (m *GroupRequest) XXX_Size() int { - return xxx_messageInfo_GroupRequest.Size(m) -} -func (m *GroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupRequest proto.InternalMessageInfo - -func (m *GroupRequest) GetUserInfo() *PublicUserInfo { - if m != nil { - return m.UserInfo - } - return nil -} - -func (m *GroupRequest) GetGroupInfo() *GroupInfo { - if m != nil { - return m.GroupInfo - } - return nil -} - -func (m *GroupRequest) GetHandleResult() int32 { - if m != nil { - return m.HandleResult - } - return 0 -} - -func (m *GroupRequest) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -func (m *GroupRequest) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -func (m *GroupRequest) GetReqTime() uint32 { - if m != nil { - return m.ReqTime - } - return 0 -} - -func (m *GroupRequest) GetHandleUserID() string { - if m != nil { - return m.HandleUserID - } - return "" -} - -func (m *GroupRequest) GetHandleTime() uint32 { - if m != nil { - return m.HandleTime - } - return 0 -} - -func (m *GroupRequest) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type FriendRequest struct { - FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` - FromNickname string `protobuf:"bytes,2,opt,name=fromNickname" json:"fromNickname,omitempty"` - FromFaceURL string `protobuf:"bytes,3,opt,name=fromFaceURL" json:"fromFaceURL,omitempty"` - FromGender int32 `protobuf:"varint,4,opt,name=fromGender" json:"fromGender,omitempty"` - ToUserID string `protobuf:"bytes,5,opt,name=toUserID" json:"toUserID,omitempty"` - ToNickname string `protobuf:"bytes,6,opt,name=toNickname" json:"toNickname,omitempty"` - ToFaceURL string `protobuf:"bytes,7,opt,name=toFaceURL" json:"toFaceURL,omitempty"` - ToGender int32 `protobuf:"varint,8,opt,name=toGender" json:"toGender,omitempty"` - HandleResult int32 `protobuf:"varint,9,opt,name=handleResult" json:"handleResult,omitempty"` - ReqMsg string `protobuf:"bytes,10,opt,name=reqMsg" json:"reqMsg,omitempty"` - CreateTime uint32 `protobuf:"varint,11,opt,name=createTime" json:"createTime,omitempty"` - HandlerUserID string `protobuf:"bytes,12,opt,name=handlerUserID" json:"handlerUserID,omitempty"` - HandleMsg string `protobuf:"bytes,13,opt,name=handleMsg" json:"handleMsg,omitempty"` - HandleTime uint32 `protobuf:"varint,14,opt,name=handleTime" json:"handleTime,omitempty"` - Ex string `protobuf:"bytes,15,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendRequest) Reset() { *m = FriendRequest{} } -func (m *FriendRequest) String() string { return proto.CompactTextString(m) } -func (*FriendRequest) ProtoMessage() {} -func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{7} -} -func (m *FriendRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendRequest.Unmarshal(m, b) -} -func (m *FriendRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendRequest.Marshal(b, m, deterministic) -} -func (dst *FriendRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendRequest.Merge(dst, src) -} -func (m *FriendRequest) XXX_Size() int { - return xxx_messageInfo_FriendRequest.Size(m) -} -func (m *FriendRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FriendRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendRequest proto.InternalMessageInfo - -func (m *FriendRequest) GetFromUserID() string { - if m != nil { - return m.FromUserID - } - return "" -} - -func (m *FriendRequest) GetFromNickname() string { - if m != nil { - return m.FromNickname - } - return "" -} - -func (m *FriendRequest) GetFromFaceURL() string { - if m != nil { - return m.FromFaceURL - } - return "" -} - -func (m *FriendRequest) GetFromGender() int32 { - if m != nil { - return m.FromGender - } - return 0 -} - -func (m *FriendRequest) GetToUserID() string { - if m != nil { - return m.ToUserID - } - return "" -} - -func (m *FriendRequest) GetToNickname() string { - if m != nil { - return m.ToNickname - } - return "" -} - -func (m *FriendRequest) GetToFaceURL() string { - if m != nil { - return m.ToFaceURL - } - return "" -} - -func (m *FriendRequest) GetToGender() int32 { - if m != nil { - return m.ToGender - } - return 0 -} - -func (m *FriendRequest) GetHandleResult() int32 { - if m != nil { - return m.HandleResult - } - return 0 -} - -func (m *FriendRequest) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -func (m *FriendRequest) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *FriendRequest) GetHandlerUserID() string { - if m != nil { - return m.HandlerUserID - } - return "" -} - -func (m *FriendRequest) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -func (m *FriendRequest) GetHandleTime() uint32 { - if m != nil { - return m.HandleTime - } - return 0 -} - -func (m *FriendRequest) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type Department struct { - DepartmentID string `protobuf:"bytes,1,opt,name=departmentID" json:"departmentID,omitempty"` - FaceURL string `protobuf:"bytes,2,opt,name=faceURL" json:"faceURL,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` - ParentID string `protobuf:"bytes,4,opt,name=parentID" json:"parentID,omitempty"` - Order int32 `protobuf:"varint,5,opt,name=order" json:"order,omitempty"` - DepartmentType int32 `protobuf:"varint,6,opt,name=departmentType" json:"departmentType,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - SubDepartmentNum uint32 `protobuf:"varint,8,opt,name=subDepartmentNum" json:"subDepartmentNum,omitempty"` - MemberNum uint32 `protobuf:"varint,9,opt,name=memberNum" json:"memberNum,omitempty"` - Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Department) Reset() { *m = Department{} } -func (m *Department) String() string { return proto.CompactTextString(m) } -func (*Department) ProtoMessage() {} -func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{8} -} -func (m *Department) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Department.Unmarshal(m, b) -} -func (m *Department) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Department.Marshal(b, m, deterministic) -} -func (dst *Department) XXX_Merge(src proto.Message) { - xxx_messageInfo_Department.Merge(dst, src) -} -func (m *Department) XXX_Size() int { - return xxx_messageInfo_Department.Size(m) -} -func (m *Department) XXX_DiscardUnknown() { - xxx_messageInfo_Department.DiscardUnknown(m) -} - -var xxx_messageInfo_Department proto.InternalMessageInfo - -func (m *Department) GetDepartmentID() string { - if m != nil { - return m.DepartmentID - } - return "" -} - -func (m *Department) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *Department) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Department) GetParentID() string { - if m != nil { - return m.ParentID - } - return "" -} - -func (m *Department) GetOrder() int32 { - if m != nil { - return m.Order - } - return 0 -} - -func (m *Department) GetDepartmentType() int32 { - if m != nil { - return m.DepartmentType - } - return 0 -} - -func (m *Department) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *Department) GetSubDepartmentNum() uint32 { - if m != nil { - return m.SubDepartmentNum - } - return 0 -} - -func (m *Department) GetMemberNum() uint32 { - if m != nil { - return m.MemberNum - } - return 0 -} - -func (m *Department) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type OrganizationUser struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - EnglishName string `protobuf:"bytes,3,opt,name=englishName" json:"englishName,omitempty"` - FaceURL string `protobuf:"bytes,4,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,5,opt,name=gender" json:"gender,omitempty"` - Mobile string `protobuf:"bytes,6,opt,name=mobile" json:"mobile,omitempty"` - Telephone string `protobuf:"bytes,7,opt,name=telephone" json:"telephone,omitempty"` - Birth uint32 `protobuf:"varint,8,opt,name=birth" json:"birth,omitempty"` - Email string `protobuf:"bytes,9,opt,name=email" json:"email,omitempty"` - CreateTime uint32 `protobuf:"varint,10,opt,name=createTime" json:"createTime,omitempty"` - Ex string `protobuf:"bytes,11,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } -func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } -func (*OrganizationUser) ProtoMessage() {} -func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{9} -} -func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) -} -func (m *OrganizationUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OrganizationUser.Marshal(b, m, deterministic) -} -func (dst *OrganizationUser) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrganizationUser.Merge(dst, src) -} -func (m *OrganizationUser) XXX_Size() int { - return xxx_messageInfo_OrganizationUser.Size(m) -} -func (m *OrganizationUser) XXX_DiscardUnknown() { - xxx_messageInfo_OrganizationUser.DiscardUnknown(m) -} - -var xxx_messageInfo_OrganizationUser proto.InternalMessageInfo - -func (m *OrganizationUser) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *OrganizationUser) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *OrganizationUser) GetEnglishName() string { - if m != nil { - return m.EnglishName - } - return "" -} - -func (m *OrganizationUser) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *OrganizationUser) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *OrganizationUser) GetMobile() string { - if m != nil { - return m.Mobile - } - return "" -} - -func (m *OrganizationUser) GetTelephone() string { - if m != nil { - return m.Telephone - } - return "" -} - -func (m *OrganizationUser) GetBirth() uint32 { - if m != nil { - return m.Birth - } - return 0 -} - -func (m *OrganizationUser) GetEmail() string { - if m != nil { - return m.Email - } - return "" -} - -func (m *OrganizationUser) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *OrganizationUser) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type DepartmentMember struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - DepartmentID string `protobuf:"bytes,2,opt,name=departmentID" json:"departmentID,omitempty"` - Order int32 `protobuf:"varint,3,opt,name=order" json:"order,omitempty"` - Position string `protobuf:"bytes,4,opt,name=position" json:"position,omitempty"` - Leader int32 `protobuf:"varint,5,opt,name=leader" json:"leader,omitempty"` - Status int32 `protobuf:"varint,6,opt,name=status" json:"status,omitempty"` - Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } -func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } -func (*DepartmentMember) ProtoMessage() {} -func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{10} -} -func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) -} -func (m *DepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DepartmentMember.Marshal(b, m, deterministic) -} -func (dst *DepartmentMember) XXX_Merge(src proto.Message) { - xxx_messageInfo_DepartmentMember.Merge(dst, src) -} -func (m *DepartmentMember) XXX_Size() int { - return xxx_messageInfo_DepartmentMember.Size(m) -} -func (m *DepartmentMember) XXX_DiscardUnknown() { - xxx_messageInfo_DepartmentMember.DiscardUnknown(m) -} - -var xxx_messageInfo_DepartmentMember proto.InternalMessageInfo - -func (m *DepartmentMember) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DepartmentMember) GetDepartmentID() string { - if m != nil { - return m.DepartmentID - } - return "" -} - -func (m *DepartmentMember) GetOrder() int32 { - if m != nil { - return m.Order - } - return 0 -} - -func (m *DepartmentMember) GetPosition() string { - if m != nil { - return m.Position - } - return "" -} - -func (m *DepartmentMember) GetLeader() int32 { - if m != nil { - return m.Leader - } - return 0 -} - -func (m *DepartmentMember) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *DepartmentMember) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type UserDepartmentMember struct { - OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` - DepartmentMember *DepartmentMember `protobuf:"bytes,2,opt,name=departmentMember" json:"departmentMember,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } -func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } -func (*UserDepartmentMember) ProtoMessage() {} -func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{11} -} -func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) -} -func (m *UserDepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserDepartmentMember.Marshal(b, m, deterministic) -} -func (dst *UserDepartmentMember) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserDepartmentMember.Merge(dst, src) -} -func (m *UserDepartmentMember) XXX_Size() int { - return xxx_messageInfo_UserDepartmentMember.Size(m) -} -func (m *UserDepartmentMember) XXX_DiscardUnknown() { - xxx_messageInfo_UserDepartmentMember.DiscardUnknown(m) -} - -var xxx_messageInfo_UserDepartmentMember proto.InternalMessageInfo - -func (m *UserDepartmentMember) GetOrganizationUser() *OrganizationUser { - if m != nil { - return m.OrganizationUser - } - return nil -} - -func (m *UserDepartmentMember) GetDepartmentMember() *DepartmentMember { - if m != nil { - return m.DepartmentMember - } - return nil -} - -type UserInDepartment struct { - OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` - DepartmentMemberList []*DepartmentMember `protobuf:"bytes,2,rep,name=departmentMemberList" json:"departmentMemberList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } -func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } -func (*UserInDepartment) ProtoMessage() {} -func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{12} -} -func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) -} -func (m *UserInDepartment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInDepartment.Marshal(b, m, deterministic) -} -func (dst *UserInDepartment) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInDepartment.Merge(dst, src) -} -func (m *UserInDepartment) XXX_Size() int { - return xxx_messageInfo_UserInDepartment.Size(m) -} -func (m *UserInDepartment) XXX_DiscardUnknown() { - xxx_messageInfo_UserInDepartment.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInDepartment proto.InternalMessageInfo - -func (m *UserInDepartment) GetOrganizationUser() *OrganizationUser { - if m != nil { - return m.OrganizationUser - } - return nil -} - -func (m *UserInDepartment) GetDepartmentMemberList() []*DepartmentMember { - if m != nil { - return m.DepartmentMemberList - } - return nil -} - -// /////////////////////////////////base end///////////////////////////////////// -type PullMessageBySeqListReq struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - GroupSeqList map[string]*SeqList `protobuf:"bytes,4,rep,name=groupSeqList" json:"groupSeqList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq{} } -func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } -func (*PullMessageBySeqListReq) ProtoMessage() {} -func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{13} -} -func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) -} -func (m *PullMessageBySeqListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListReq.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListReq.Merge(dst, src) -} -func (m *PullMessageBySeqListReq) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListReq.Size(m) -} -func (m *PullMessageBySeqListReq) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListReq proto.InternalMessageInfo - -func (m *PullMessageBySeqListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -func (m *PullMessageBySeqListReq) GetGroupSeqList() map[string]*SeqList { - if m != nil { - return m.GroupSeqList - } - return nil -} - -type SeqList struct { - SeqList []uint32 `protobuf:"varint,1,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SeqList) Reset() { *m = SeqList{} } -func (m *SeqList) String() string { return proto.CompactTextString(m) } -func (*SeqList) ProtoMessage() {} -func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{14} -} -func (m *SeqList) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SeqList.Unmarshal(m, b) -} -func (m *SeqList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SeqList.Marshal(b, m, deterministic) -} -func (dst *SeqList) XXX_Merge(src proto.Message) { - xxx_messageInfo_SeqList.Merge(dst, src) -} -func (m *SeqList) XXX_Size() int { - return xxx_messageInfo_SeqList.Size(m) -} -func (m *SeqList) XXX_DiscardUnknown() { - xxx_messageInfo_SeqList.DiscardUnknown(m) -} - -var xxx_messageInfo_SeqList proto.InternalMessageInfo - -func (m *SeqList) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -type MsgDataList struct { - MsgDataList []*MsgData `protobuf:"bytes,1,rep,name=msgDataList" json:"msgDataList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MsgDataList) Reset() { *m = MsgDataList{} } -func (m *MsgDataList) String() string { return proto.CompactTextString(m) } -func (*MsgDataList) ProtoMessage() {} -func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{15} -} -func (m *MsgDataList) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MsgDataList.Unmarshal(m, b) -} -func (m *MsgDataList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MsgDataList.Marshal(b, m, deterministic) -} -func (dst *MsgDataList) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgDataList.Merge(dst, src) -} -func (m *MsgDataList) XXX_Size() int { - return xxx_messageInfo_MsgDataList.Size(m) -} -func (m *MsgDataList) XXX_DiscardUnknown() { - xxx_messageInfo_MsgDataList.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgDataList proto.InternalMessageInfo - -func (m *MsgDataList) GetMsgDataList() []*MsgData { - if m != nil { - return m.MsgDataList - } - return nil -} - -type PullMessageBySeqListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` - GroupMsgDataList map[string]*MsgDataList `protobuf:"bytes,4,rep,name=groupMsgDataList" json:"groupMsgDataList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } -func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } -func (*PullMessageBySeqListResp) ProtoMessage() {} -func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{16} -} -func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) -} -func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) -} -func (m *PullMessageBySeqListResp) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListResp.Size(m) -} -func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo - -func (m *PullMessageBySeqListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *PullMessageBySeqListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *PullMessageBySeqListResp) GetList() []*MsgData { - if m != nil { - return m.List - } - return nil -} - -func (m *PullMessageBySeqListResp) GetGroupMsgDataList() map[string]*MsgDataList { - if m != nil { - return m.GroupMsgDataList - } - return nil -} - -type GetMaxAndMinSeqReq struct { - GroupIDList []string `protobuf:"bytes,1,rep,name=groupIDList" json:"groupIDList,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } -func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } -func (*GetMaxAndMinSeqReq) ProtoMessage() {} -func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{17} -} -func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) -} -func (m *GetMaxAndMinSeqReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetMaxAndMinSeqReq.Marshal(b, m, deterministic) -} -func (dst *GetMaxAndMinSeqReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetMaxAndMinSeqReq.Merge(dst, src) -} -func (m *GetMaxAndMinSeqReq) XXX_Size() int { - return xxx_messageInfo_GetMaxAndMinSeqReq.Size(m) -} -func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { - xxx_messageInfo_GetMaxAndMinSeqReq.DiscardUnknown(m) -} - -var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo - -func (m *GetMaxAndMinSeqReq) GetGroupIDList() []string { - if m != nil { - return m.GroupIDList - } - return nil -} - -func (m *GetMaxAndMinSeqReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *GetMaxAndMinSeqReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -type MaxAndMinSeq struct { - MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } -func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } -func (*MaxAndMinSeq) ProtoMessage() {} -func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{18} -} -func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) -} -func (m *MaxAndMinSeq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MaxAndMinSeq.Marshal(b, m, deterministic) -} -func (dst *MaxAndMinSeq) XXX_Merge(src proto.Message) { - xxx_messageInfo_MaxAndMinSeq.Merge(dst, src) -} -func (m *MaxAndMinSeq) XXX_Size() int { - return xxx_messageInfo_MaxAndMinSeq.Size(m) -} -func (m *MaxAndMinSeq) XXX_DiscardUnknown() { - xxx_messageInfo_MaxAndMinSeq.DiscardUnknown(m) -} - -var xxx_messageInfo_MaxAndMinSeq proto.InternalMessageInfo - -func (m *MaxAndMinSeq) GetMaxSeq() uint32 { - if m != nil { - return m.MaxSeq - } - return 0 -} - -func (m *MaxAndMinSeq) GetMinSeq() uint32 { - if m != nil { - return m.MinSeq - } - return 0 -} - -type GetMaxAndMinSeqResp struct { - MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` - ErrCode int32 `protobuf:"varint,3,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,4,opt,name=errMsg" json:"errMsg,omitempty"` - GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,5,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } -func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } -func (*GetMaxAndMinSeqResp) ProtoMessage() {} -func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{19} -} -func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) -} -func (m *GetMaxAndMinSeqResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetMaxAndMinSeqResp.Marshal(b, m, deterministic) -} -func (dst *GetMaxAndMinSeqResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetMaxAndMinSeqResp.Merge(dst, src) -} -func (m *GetMaxAndMinSeqResp) XXX_Size() int { - return xxx_messageInfo_GetMaxAndMinSeqResp.Size(m) -} -func (m *GetMaxAndMinSeqResp) XXX_DiscardUnknown() { - xxx_messageInfo_GetMaxAndMinSeqResp.DiscardUnknown(m) -} - -var xxx_messageInfo_GetMaxAndMinSeqResp proto.InternalMessageInfo - -func (m *GetMaxAndMinSeqResp) GetMaxSeq() uint32 { - if m != nil { - return m.MaxSeq - } - return 0 -} - -func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { - if m != nil { - return m.MinSeq - } - return 0 -} - -func (m *GetMaxAndMinSeqResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *GetMaxAndMinSeqResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *GetMaxAndMinSeqResp) GetGroupMaxAndMinSeq() map[string]*MaxAndMinSeq { - if m != nil { - return m.GroupMaxAndMinSeq - } - return nil -} - -type UserSendMsgResp struct { - ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID" json:"serverMsgID,omitempty"` - ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` - SendTime int64 `protobuf:"varint,3,opt,name=sendTime" json:"sendTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } -func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } -func (*UserSendMsgResp) ProtoMessage() {} -func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{20} -} -func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) -} -func (m *UserSendMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserSendMsgResp.Marshal(b, m, deterministic) -} -func (dst *UserSendMsgResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserSendMsgResp.Merge(dst, src) -} -func (m *UserSendMsgResp) XXX_Size() int { - return xxx_messageInfo_UserSendMsgResp.Size(m) -} -func (m *UserSendMsgResp) XXX_DiscardUnknown() { - xxx_messageInfo_UserSendMsgResp.DiscardUnknown(m) -} - -var xxx_messageInfo_UserSendMsgResp proto.InternalMessageInfo - -func (m *UserSendMsgResp) GetServerMsgID() string { - if m != nil { - return m.ServerMsgID - } - return "" -} - -func (m *UserSendMsgResp) GetClientMsgID() string { - if m != nil { - return m.ClientMsgID - } - return "" -} - -func (m *UserSendMsgResp) GetSendTime() int64 { - if m != nil { - return m.SendTime - } - return 0 -} - -type MsgData struct { - SendID string `protobuf:"bytes,1,opt,name=sendID" json:"sendID,omitempty"` - RecvID string `protobuf:"bytes,2,opt,name=recvID" json:"recvID,omitempty"` - GroupID string `protobuf:"bytes,3,opt,name=groupID" json:"groupID,omitempty"` - ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID" json:"clientMsgID,omitempty"` - ServerMsgID string `protobuf:"bytes,5,opt,name=serverMsgID" json:"serverMsgID,omitempty"` - SenderPlatformID int32 `protobuf:"varint,6,opt,name=senderPlatformID" json:"senderPlatformID,omitempty"` - SenderNickname string `protobuf:"bytes,7,opt,name=senderNickname" json:"senderNickname,omitempty"` - SenderFaceURL string `protobuf:"bytes,8,opt,name=senderFaceURL" json:"senderFaceURL,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` - MsgFrom int32 `protobuf:"varint,10,opt,name=msgFrom" json:"msgFrom,omitempty"` - ContentType int32 `protobuf:"varint,11,opt,name=contentType" json:"contentType,omitempty"` - Content []byte `protobuf:"bytes,12,opt,name=content,proto3" json:"content,omitempty"` - Seq uint32 `protobuf:"varint,14,opt,name=seq" json:"seq,omitempty"` - SendTime int64 `protobuf:"varint,15,opt,name=sendTime" json:"sendTime,omitempty"` - CreateTime int64 `protobuf:"varint,16,opt,name=createTime" json:"createTime,omitempty"` - Status int32 `protobuf:"varint,17,opt,name=status" json:"status,omitempty"` - Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MsgData) Reset() { *m = MsgData{} } -func (m *MsgData) String() string { return proto.CompactTextString(m) } -func (*MsgData) ProtoMessage() {} -func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{21} -} -func (m *MsgData) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MsgData.Unmarshal(m, b) -} -func (m *MsgData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MsgData.Marshal(b, m, deterministic) -} -func (dst *MsgData) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgData.Merge(dst, src) -} -func (m *MsgData) XXX_Size() int { - return xxx_messageInfo_MsgData.Size(m) -} -func (m *MsgData) XXX_DiscardUnknown() { - xxx_messageInfo_MsgData.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgData proto.InternalMessageInfo - -func (m *MsgData) GetSendID() string { - if m != nil { - return m.SendID - } - return "" -} - -func (m *MsgData) GetRecvID() string { - if m != nil { - return m.RecvID - } - return "" -} - -func (m *MsgData) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *MsgData) GetClientMsgID() string { - if m != nil { - return m.ClientMsgID - } - return "" -} - -func (m *MsgData) GetServerMsgID() string { - if m != nil { - return m.ServerMsgID - } - return "" -} - -func (m *MsgData) GetSenderPlatformID() int32 { - if m != nil { - return m.SenderPlatformID - } - return 0 -} - -func (m *MsgData) GetSenderNickname() string { - if m != nil { - return m.SenderNickname - } - return "" -} - -func (m *MsgData) GetSenderFaceURL() string { - if m != nil { - return m.SenderFaceURL - } - return "" -} - -func (m *MsgData) GetSessionType() int32 { - if m != nil { - return m.SessionType - } - return 0 -} - -func (m *MsgData) GetMsgFrom() int32 { - if m != nil { - return m.MsgFrom - } - return 0 -} - -func (m *MsgData) GetContentType() int32 { - if m != nil { - return m.ContentType - } - return 0 -} - -func (m *MsgData) GetContent() []byte { - if m != nil { - return m.Content - } - return nil -} - -func (m *MsgData) GetSeq() uint32 { - if m != nil { - return m.Seq - } - return 0 -} - -func (m *MsgData) GetSendTime() int64 { - if m != nil { - return m.SendTime - } - return 0 -} - -func (m *MsgData) GetCreateTime() int64 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *MsgData) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *MsgData) GetOptions() map[string]bool { - if m != nil { - return m.Options - } - return nil -} - -func (m *MsgData) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *MsgData) GetAtUserIDList() []string { - if m != nil { - return m.AtUserIDList - } - return nil -} - -type OfflinePushInfo struct { - Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Desc string `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"` - Ex string `protobuf:"bytes,3,opt,name=ex" json:"ex,omitempty"` - IOSPushSound string `protobuf:"bytes,4,opt,name=iOSPushSound" json:"iOSPushSound,omitempty"` - IOSBadgeCount bool `protobuf:"varint,5,opt,name=iOSBadgeCount" json:"iOSBadgeCount,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } -func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } -func (*OfflinePushInfo) ProtoMessage() {} -func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{22} -} -func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) -} -func (m *OfflinePushInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OfflinePushInfo.Marshal(b, m, deterministic) -} -func (dst *OfflinePushInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_OfflinePushInfo.Merge(dst, src) -} -func (m *OfflinePushInfo) XXX_Size() int { - return xxx_messageInfo_OfflinePushInfo.Size(m) -} -func (m *OfflinePushInfo) XXX_DiscardUnknown() { - xxx_messageInfo_OfflinePushInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_OfflinePushInfo proto.InternalMessageInfo - -func (m *OfflinePushInfo) GetTitle() string { - if m != nil { - return m.Title - } - return "" -} - -func (m *OfflinePushInfo) GetDesc() string { - if m != nil { - return m.Desc - } - return "" -} - -func (m *OfflinePushInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *OfflinePushInfo) GetIOSPushSound() string { - if m != nil { - return m.IOSPushSound - } - return "" -} - -func (m *OfflinePushInfo) GetIOSBadgeCount() bool { - if m != nil { - return m.IOSBadgeCount - } - return false -} - -type TipsComm struct { - Detail []byte `protobuf:"bytes,1,opt,name=detail,proto3" json:"detail,omitempty"` - DefaultTips string `protobuf:"bytes,2,opt,name=defaultTips" json:"defaultTips,omitempty"` - JsonDetail string `protobuf:"bytes,3,opt,name=jsonDetail" json:"jsonDetail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *TipsComm) Reset() { *m = TipsComm{} } -func (m *TipsComm) String() string { return proto.CompactTextString(m) } -func (*TipsComm) ProtoMessage() {} -func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{23} -} -func (m *TipsComm) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_TipsComm.Unmarshal(m, b) -} -func (m *TipsComm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_TipsComm.Marshal(b, m, deterministic) -} -func (dst *TipsComm) XXX_Merge(src proto.Message) { - xxx_messageInfo_TipsComm.Merge(dst, src) -} -func (m *TipsComm) XXX_Size() int { - return xxx_messageInfo_TipsComm.Size(m) -} -func (m *TipsComm) XXX_DiscardUnknown() { - xxx_messageInfo_TipsComm.DiscardUnknown(m) -} - -var xxx_messageInfo_TipsComm proto.InternalMessageInfo - -func (m *TipsComm) GetDetail() []byte { - if m != nil { - return m.Detail - } - return nil -} - -func (m *TipsComm) GetDefaultTips() string { - if m != nil { - return m.DefaultTips - } - return "" -} - -func (m *TipsComm) GetJsonDetail() string { - if m != nil { - return m.JsonDetail - } - return "" -} - -// OnGroupCreated() -type GroupCreatedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - MemberList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=memberList" json:"memberList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - GroupOwnerUser *GroupMemberFullInfo `protobuf:"bytes,5,opt,name=groupOwnerUser" json:"groupOwnerUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } -func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } -func (*GroupCreatedTips) ProtoMessage() {} -func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{24} -} -func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) -} -func (m *GroupCreatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupCreatedTips.Marshal(b, m, deterministic) -} -func (dst *GroupCreatedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupCreatedTips.Merge(dst, src) -} -func (m *GroupCreatedTips) XXX_Size() int { - return xxx_messageInfo_GroupCreatedTips.Size(m) -} -func (m *GroupCreatedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupCreatedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupCreatedTips proto.InternalMessageInfo - -func (m *GroupCreatedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupCreatedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupCreatedTips) GetMemberList() []*GroupMemberFullInfo { - if m != nil { - return m.MemberList - } - return nil -} - -func (m *GroupCreatedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupCreatedTips) GetGroupOwnerUser() *GroupMemberFullInfo { - if m != nil { - return m.GroupOwnerUser - } - return nil -} - -// OnGroupInfoSet() -type GroupInfoSetTips struct { - OpUser *GroupMemberFullInfo `protobuf:"bytes,1,opt,name=opUser" json:"opUser,omitempty"` - MuteTime int64 `protobuf:"varint,2,opt,name=muteTime" json:"muteTime,omitempty"` - Group *GroupInfo `protobuf:"bytes,3,opt,name=group" json:"group,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } -func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } -func (*GroupInfoSetTips) ProtoMessage() {} -func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{25} -} -func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) -} -func (m *GroupInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupInfoSetTips.Marshal(b, m, deterministic) -} -func (dst *GroupInfoSetTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupInfoSetTips.Merge(dst, src) -} -func (m *GroupInfoSetTips) XXX_Size() int { - return xxx_messageInfo_GroupInfoSetTips.Size(m) -} -func (m *GroupInfoSetTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupInfoSetTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupInfoSetTips proto.InternalMessageInfo - -func (m *GroupInfoSetTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupInfoSetTips) GetMuteTime() int64 { - if m != nil { - return m.MuteTime - } - return 0 -} - -func (m *GroupInfoSetTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -// OnJoinGroupApplication() -type JoinGroupApplicationTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - Applicant *PublicUserInfo `protobuf:"bytes,2,opt,name=applicant" json:"applicant,omitempty"` - ReqMsg string `protobuf:"bytes,3,opt,name=reqMsg" json:"reqMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTips{} } -func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } -func (*JoinGroupApplicationTips) ProtoMessage() {} -func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{26} -} -func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) -} -func (m *JoinGroupApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_JoinGroupApplicationTips.Marshal(b, m, deterministic) -} -func (dst *JoinGroupApplicationTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinGroupApplicationTips.Merge(dst, src) -} -func (m *JoinGroupApplicationTips) XXX_Size() int { - return xxx_messageInfo_JoinGroupApplicationTips.Size(m) -} -func (m *JoinGroupApplicationTips) XXX_DiscardUnknown() { - xxx_messageInfo_JoinGroupApplicationTips.DiscardUnknown(m) -} - -var xxx_messageInfo_JoinGroupApplicationTips proto.InternalMessageInfo - -func (m *JoinGroupApplicationTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *JoinGroupApplicationTips) GetApplicant() *PublicUserInfo { - if m != nil { - return m.Applicant - } - return nil -} - -func (m *JoinGroupApplicationTips) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -// OnQuitGroup() -// Actively leave the group -type MemberQuitTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - QuitUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=quitUser" json:"quitUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } -func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } -func (*MemberQuitTips) ProtoMessage() {} -func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{27} -} -func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) -} -func (m *MemberQuitTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberQuitTips.Marshal(b, m, deterministic) -} -func (dst *MemberQuitTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberQuitTips.Merge(dst, src) -} -func (m *MemberQuitTips) XXX_Size() int { - return xxx_messageInfo_MemberQuitTips.Size(m) -} -func (m *MemberQuitTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberQuitTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberQuitTips proto.InternalMessageInfo - -func (m *MemberQuitTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberQuitTips) GetQuitUser() *GroupMemberFullInfo { - if m != nil { - return m.QuitUser - } - return nil -} - -func (m *MemberQuitTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnApplicationGroupAccepted() -type GroupApplicationAcceptedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAcceptedTips{} } -func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } -func (*GroupApplicationAcceptedTips) ProtoMessage() {} -func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{28} -} -func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) -} -func (m *GroupApplicationAcceptedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupApplicationAcceptedTips.Marshal(b, m, deterministic) -} -func (dst *GroupApplicationAcceptedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupApplicationAcceptedTips.Merge(dst, src) -} -func (m *GroupApplicationAcceptedTips) XXX_Size() int { - return xxx_messageInfo_GroupApplicationAcceptedTips.Size(m) -} -func (m *GroupApplicationAcceptedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupApplicationAcceptedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupApplicationAcceptedTips proto.InternalMessageInfo - -func (m *GroupApplicationAcceptedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupApplicationAcceptedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupApplicationAcceptedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// OnApplicationGroupRejected() -type GroupApplicationRejectedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRejectedTips{} } -func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } -func (*GroupApplicationRejectedTips) ProtoMessage() {} -func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{29} -} -func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) -} -func (m *GroupApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupApplicationRejectedTips.Marshal(b, m, deterministic) -} -func (dst *GroupApplicationRejectedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupApplicationRejectedTips.Merge(dst, src) -} -func (m *GroupApplicationRejectedTips) XXX_Size() int { - return xxx_messageInfo_GroupApplicationRejectedTips.Size(m) -} -func (m *GroupApplicationRejectedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupApplicationRejectedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupApplicationRejectedTips proto.InternalMessageInfo - -func (m *GroupApplicationRejectedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupApplicationRejectedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupApplicationRejectedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// OnTransferGroupOwner() -type GroupOwnerTransferredTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - NewGroupOwner *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=newGroupOwner" json:"newGroupOwner,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferredTips{} } -func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } -func (*GroupOwnerTransferredTips) ProtoMessage() {} -func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{30} -} -func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) -} -func (m *GroupOwnerTransferredTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupOwnerTransferredTips.Marshal(b, m, deterministic) -} -func (dst *GroupOwnerTransferredTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupOwnerTransferredTips.Merge(dst, src) -} -func (m *GroupOwnerTransferredTips) XXX_Size() int { - return xxx_messageInfo_GroupOwnerTransferredTips.Size(m) -} -func (m *GroupOwnerTransferredTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupOwnerTransferredTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupOwnerTransferredTips proto.InternalMessageInfo - -func (m *GroupOwnerTransferredTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetNewGroupOwner() *GroupMemberFullInfo { - if m != nil { - return m.NewGroupOwner - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnMemberKicked() -type MemberKickedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - KickedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=kickedUserList" json:"kickedUserList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } -func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } -func (*MemberKickedTips) ProtoMessage() {} -func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{31} -} -func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) -} -func (m *MemberKickedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberKickedTips.Marshal(b, m, deterministic) -} -func (dst *MemberKickedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberKickedTips.Merge(dst, src) -} -func (m *MemberKickedTips) XXX_Size() int { - return xxx_messageInfo_MemberKickedTips.Size(m) -} -func (m *MemberKickedTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberKickedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberKickedTips proto.InternalMessageInfo - -func (m *MemberKickedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberKickedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *MemberKickedTips) GetKickedUserList() []*GroupMemberFullInfo { - if m != nil { - return m.KickedUserList - } - return nil -} - -func (m *MemberKickedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnMemberInvited() -type MemberInvitedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - InvitedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=invitedUserList" json:"invitedUserList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } -func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } -func (*MemberInvitedTips) ProtoMessage() {} -func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{32} -} -func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) -} -func (m *MemberInvitedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberInvitedTips.Marshal(b, m, deterministic) -} -func (dst *MemberInvitedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberInvitedTips.Merge(dst, src) -} -func (m *MemberInvitedTips) XXX_Size() int { - return xxx_messageInfo_MemberInvitedTips.Size(m) -} -func (m *MemberInvitedTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberInvitedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberInvitedTips proto.InternalMessageInfo - -func (m *MemberInvitedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberInvitedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *MemberInvitedTips) GetInvitedUserList() []*GroupMemberFullInfo { - if m != nil { - return m.InvitedUserList - } - return nil -} - -func (m *MemberInvitedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// Actively join the group -type MemberEnterTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - EntrantUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=entrantUser" json:"entrantUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } -func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } -func (*MemberEnterTips) ProtoMessage() {} -func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{33} -} -func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) -} -func (m *MemberEnterTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberEnterTips.Marshal(b, m, deterministic) -} -func (dst *MemberEnterTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberEnterTips.Merge(dst, src) -} -func (m *MemberEnterTips) XXX_Size() int { - return xxx_messageInfo_MemberEnterTips.Size(m) -} -func (m *MemberEnterTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberEnterTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberEnterTips proto.InternalMessageInfo - -func (m *MemberEnterTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberEnterTips) GetEntrantUser() *GroupMemberFullInfo { - if m != nil { - return m.EntrantUser - } - return nil -} - -func (m *MemberEnterTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupDismissedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } -func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } -func (*GroupDismissedTips) ProtoMessage() {} -func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{34} -} -func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) -} -func (m *GroupDismissedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupDismissedTips.Marshal(b, m, deterministic) -} -func (dst *GroupDismissedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupDismissedTips.Merge(dst, src) -} -func (m *GroupDismissedTips) XXX_Size() int { - return xxx_messageInfo_GroupDismissedTips.Size(m) -} -func (m *GroupDismissedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupDismissedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupDismissedTips proto.InternalMessageInfo - -func (m *GroupDismissedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupDismissedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupDismissedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupMemberMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` - MutedSeconds uint32 `protobuf:"varint,5,opt,name=mutedSeconds" json:"mutedSeconds,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } -func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupMemberMutedTips) ProtoMessage() {} -func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{35} -} -func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) -} -func (m *GroupMemberMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberMutedTips.Merge(dst, src) -} -func (m *GroupMemberMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberMutedTips.Size(m) -} -func (m *GroupMemberMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberMutedTips proto.InternalMessageInfo - -func (m *GroupMemberMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberMutedTips) GetMutedUser() *GroupMemberFullInfo { - if m != nil { - return m.MutedUser - } - return nil -} - -func (m *GroupMemberMutedTips) GetMutedSeconds() uint32 { - if m != nil { - return m.MutedSeconds - } - return 0 -} - -type GroupMemberCancelMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMutedTips{} } -func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupMemberCancelMutedTips) ProtoMessage() {} -func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{36} -} -func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) -} -func (m *GroupMemberCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberCancelMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberCancelMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberCancelMutedTips.Merge(dst, src) -} -func (m *GroupMemberCancelMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberCancelMutedTips.Size(m) -} -func (m *GroupMemberCancelMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberCancelMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberCancelMutedTips proto.InternalMessageInfo - -func (m *GroupMemberCancelMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberCancelMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberCancelMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberCancelMutedTips) GetMutedUser() *GroupMemberFullInfo { - if m != nil { - return m.MutedUser - } - return nil -} - -type GroupMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } -func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupMutedTips) ProtoMessage() {} -func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{37} -} -func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) -} -func (m *GroupMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMutedTips.Merge(dst, src) -} -func (m *GroupMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMutedTips.Size(m) -} -func (m *GroupMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMutedTips proto.InternalMessageInfo - -func (m *GroupMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupCancelMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } -func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupCancelMutedTips) ProtoMessage() {} -func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{38} -} -func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) -} -func (m *GroupCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupCancelMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupCancelMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupCancelMutedTips.Merge(dst, src) -} -func (m *GroupCancelMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupCancelMutedTips.Size(m) -} -func (m *GroupCancelMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupCancelMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupCancelMutedTips proto.InternalMessageInfo - -func (m *GroupCancelMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupCancelMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupCancelMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupMemberInfoSetTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - ChangedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=changedUser" json:"changedUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} } -func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } -func (*GroupMemberInfoSetTips) ProtoMessage() {} -func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{39} -} -func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) -} -func (m *GroupMemberInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberInfoSetTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberInfoSetTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberInfoSetTips.Merge(dst, src) -} -func (m *GroupMemberInfoSetTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberInfoSetTips.Size(m) -} -func (m *GroupMemberInfoSetTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberInfoSetTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberInfoSetTips proto.InternalMessageInfo - -func (m *GroupMemberInfoSetTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberInfoSetTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberInfoSetTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberInfoSetTips) GetChangedUser() *GroupMemberFullInfo { - if m != nil { - return m.ChangedUser - } - return nil -} - -type OrganizationChangedTips struct { - OpUser *UserInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips{} } -func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } -func (*OrganizationChangedTips) ProtoMessage() {} -func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{40} -} -func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) -} -func (m *OrganizationChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OrganizationChangedTips.Marshal(b, m, deterministic) -} -func (dst *OrganizationChangedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrganizationChangedTips.Merge(dst, src) -} -func (m *OrganizationChangedTips) XXX_Size() int { - return xxx_messageInfo_OrganizationChangedTips.Size(m) -} -func (m *OrganizationChangedTips) XXX_DiscardUnknown() { - xxx_messageInfo_OrganizationChangedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_OrganizationChangedTips proto.InternalMessageInfo - -func (m *OrganizationChangedTips) GetOpUser() *UserInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *OrganizationChangedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type FriendApplication struct { - AddTime int64 `protobuf:"varint,1,opt,name=addTime" json:"addTime,omitempty"` - AddSource string `protobuf:"bytes,2,opt,name=addSource" json:"addSource,omitempty"` - AddWording string `protobuf:"bytes,3,opt,name=addWording" json:"addWording,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplication) Reset() { *m = FriendApplication{} } -func (m *FriendApplication) String() string { return proto.CompactTextString(m) } -func (*FriendApplication) ProtoMessage() {} -func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{41} -} -func (m *FriendApplication) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplication.Unmarshal(m, b) -} -func (m *FriendApplication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplication.Marshal(b, m, deterministic) -} -func (dst *FriendApplication) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplication.Merge(dst, src) -} -func (m *FriendApplication) XXX_Size() int { - return xxx_messageInfo_FriendApplication.Size(m) -} -func (m *FriendApplication) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplication.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplication proto.InternalMessageInfo - -func (m *FriendApplication) GetAddTime() int64 { - if m != nil { - return m.AddTime - } - return 0 -} - -func (m *FriendApplication) GetAddSource() string { - if m != nil { - return m.AddSource - } - return "" -} - -func (m *FriendApplication) GetAddWording() string { - if m != nil { - return m.AddWording - } - return "" -} - -type FromToUserID struct { - FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` - ToUserID string `protobuf:"bytes,2,opt,name=toUserID" json:"toUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FromToUserID) Reset() { *m = FromToUserID{} } -func (m *FromToUserID) String() string { return proto.CompactTextString(m) } -func (*FromToUserID) ProtoMessage() {} -func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{42} -} -func (m *FromToUserID) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FromToUserID.Unmarshal(m, b) -} -func (m *FromToUserID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FromToUserID.Marshal(b, m, deterministic) -} -func (dst *FromToUserID) XXX_Merge(src proto.Message) { - xxx_messageInfo_FromToUserID.Merge(dst, src) -} -func (m *FromToUserID) XXX_Size() int { - return xxx_messageInfo_FromToUserID.Size(m) -} -func (m *FromToUserID) XXX_DiscardUnknown() { - xxx_messageInfo_FromToUserID.DiscardUnknown(m) -} - -var xxx_messageInfo_FromToUserID proto.InternalMessageInfo - -func (m *FromToUserID) GetFromUserID() string { - if m != nil { - return m.FromUserID - } - return "" -} - -func (m *FromToUserID) GetToUserID() string { - if m != nil { - return m.ToUserID - } - return "" -} - -// FromUserID apply to add ToUserID -type FriendApplicationTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } -func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationTips) ProtoMessage() {} -func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{43} -} -func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) -} -func (m *FriendApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationTips.Merge(dst, src) -} -func (m *FriendApplicationTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationTips.Size(m) -} -func (m *FriendApplicationTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationTips proto.InternalMessageInfo - -func (m *FriendApplicationTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -// FromUserID accept or reject ToUserID -type FriendApplicationApprovedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplicationApprovedTips{} } -func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationApprovedTips) ProtoMessage() {} -func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{44} -} -func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) -} -func (m *FriendApplicationApprovedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationApprovedTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationApprovedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationApprovedTips.Merge(dst, src) -} -func (m *FriendApplicationApprovedTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationApprovedTips.Size(m) -} -func (m *FriendApplicationApprovedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationApprovedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationApprovedTips proto.InternalMessageInfo - -func (m *FriendApplicationApprovedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -func (m *FriendApplicationApprovedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// FromUserID accept or reject ToUserID -type FriendApplicationRejectedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplicationRejectedTips{} } -func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationRejectedTips) ProtoMessage() {} -func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{45} -} -func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) -} -func (m *FriendApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationRejectedTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationRejectedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationRejectedTips.Merge(dst, src) -} -func (m *FriendApplicationRejectedTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationRejectedTips.Size(m) -} -func (m *FriendApplicationRejectedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationRejectedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationRejectedTips proto.InternalMessageInfo - -func (m *FriendApplicationRejectedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -func (m *FriendApplicationRejectedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// FromUserID Added a friend ToUserID -type FriendAddedTips struct { - Friend *FriendInfo `protobuf:"bytes,1,opt,name=friend" json:"friend,omitempty"` - OperationTime int64 `protobuf:"varint,2,opt,name=operationTime" json:"operationTime,omitempty"` - OpUser *PublicUserInfo `protobuf:"bytes,3,opt,name=opUser" json:"opUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } -func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } -func (*FriendAddedTips) ProtoMessage() {} -func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{46} -} -func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) -} -func (m *FriendAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendAddedTips.Marshal(b, m, deterministic) -} -func (dst *FriendAddedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendAddedTips.Merge(dst, src) -} -func (m *FriendAddedTips) XXX_Size() int { - return xxx_messageInfo_FriendAddedTips.Size(m) -} -func (m *FriendAddedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendAddedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendAddedTips proto.InternalMessageInfo - -func (m *FriendAddedTips) GetFriend() *FriendInfo { - if m != nil { - return m.Friend - } - return nil -} - -func (m *FriendAddedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *FriendAddedTips) GetOpUser() *PublicUserInfo { - if m != nil { - return m.OpUser - } - return nil -} - -// FromUserID deleted a friend ToUserID -type FriendDeletedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } -func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } -func (*FriendDeletedTips) ProtoMessage() {} -func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{47} -} -func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) -} -func (m *FriendDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendDeletedTips.Marshal(b, m, deterministic) -} -func (dst *FriendDeletedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendDeletedTips.Merge(dst, src) -} -func (m *FriendDeletedTips) XXX_Size() int { - return xxx_messageInfo_FriendDeletedTips.Size(m) -} -func (m *FriendDeletedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendDeletedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendDeletedTips proto.InternalMessageInfo - -func (m *FriendDeletedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type BlackAddedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } -func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } -func (*BlackAddedTips) ProtoMessage() {} -func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{48} -} -func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) -} -func (m *BlackAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackAddedTips.Marshal(b, m, deterministic) -} -func (dst *BlackAddedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackAddedTips.Merge(dst, src) -} -func (m *BlackAddedTips) XXX_Size() int { - return xxx_messageInfo_BlackAddedTips.Size(m) -} -func (m *BlackAddedTips) XXX_DiscardUnknown() { - xxx_messageInfo_BlackAddedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackAddedTips proto.InternalMessageInfo - -func (m *BlackAddedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type BlackDeletedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } -func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } -func (*BlackDeletedTips) ProtoMessage() {} -func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{49} -} -func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) -} -func (m *BlackDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackDeletedTips.Marshal(b, m, deterministic) -} -func (dst *BlackDeletedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackDeletedTips.Merge(dst, src) -} -func (m *BlackDeletedTips) XXX_Size() int { - return xxx_messageInfo_BlackDeletedTips.Size(m) -} -func (m *BlackDeletedTips) XXX_DiscardUnknown() { - xxx_messageInfo_BlackDeletedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackDeletedTips proto.InternalMessageInfo - -func (m *BlackDeletedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type FriendInfoChangedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } -func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } -func (*FriendInfoChangedTips) ProtoMessage() {} -func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{50} -} -func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) -} -func (m *FriendInfoChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendInfoChangedTips.Marshal(b, m, deterministic) -} -func (dst *FriendInfoChangedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendInfoChangedTips.Merge(dst, src) -} -func (m *FriendInfoChangedTips) XXX_Size() int { - return xxx_messageInfo_FriendInfoChangedTips.Size(m) -} -func (m *FriendInfoChangedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendInfoChangedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendInfoChangedTips proto.InternalMessageInfo - -func (m *FriendInfoChangedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -// ////////////////////user///////////////////// -type UserInfoUpdatedTips struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } -func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } -func (*UserInfoUpdatedTips) ProtoMessage() {} -func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{51} -} -func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) -} -func (m *UserInfoUpdatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfoUpdatedTips.Marshal(b, m, deterministic) -} -func (dst *UserInfoUpdatedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfoUpdatedTips.Merge(dst, src) -} -func (m *UserInfoUpdatedTips) XXX_Size() int { - return xxx_messageInfo_UserInfoUpdatedTips.Size(m) -} -func (m *UserInfoUpdatedTips) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfoUpdatedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInfoUpdatedTips proto.InternalMessageInfo - -func (m *UserInfoUpdatedTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -// ////////////////////conversation///////////////////// -type ConversationUpdateTips struct { - UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} } -func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } -func (*ConversationUpdateTips) ProtoMessage() {} -func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{52} -} -func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) -} -func (m *ConversationUpdateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ConversationUpdateTips.Marshal(b, m, deterministic) -} -func (dst *ConversationUpdateTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConversationUpdateTips.Merge(dst, src) -} -func (m *ConversationUpdateTips) XXX_Size() int { - return xxx_messageInfo_ConversationUpdateTips.Size(m) -} -func (m *ConversationUpdateTips) XXX_DiscardUnknown() { - xxx_messageInfo_ConversationUpdateTips.DiscardUnknown(m) -} - -var xxx_messageInfo_ConversationUpdateTips proto.InternalMessageInfo - -func (m *ConversationUpdateTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -type ConversationSetPrivateTips struct { - RecvID string `protobuf:"bytes,1,opt,name=recvID" json:"recvID,omitempty"` - SendID string `protobuf:"bytes,2,opt,name=sendID" json:"sendID,omitempty"` - IsPrivate bool `protobuf:"varint,3,opt,name=isPrivate" json:"isPrivate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPrivateTips{} } -func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } -func (*ConversationSetPrivateTips) ProtoMessage() {} -func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{53} -} -func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) -} -func (m *ConversationSetPrivateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ConversationSetPrivateTips.Marshal(b, m, deterministic) -} -func (dst *ConversationSetPrivateTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConversationSetPrivateTips.Merge(dst, src) -} -func (m *ConversationSetPrivateTips) XXX_Size() int { - return xxx_messageInfo_ConversationSetPrivateTips.Size(m) -} -func (m *ConversationSetPrivateTips) XXX_DiscardUnknown() { - xxx_messageInfo_ConversationSetPrivateTips.DiscardUnknown(m) -} - -var xxx_messageInfo_ConversationSetPrivateTips proto.InternalMessageInfo - -func (m *ConversationSetPrivateTips) GetRecvID() string { - if m != nil { - return m.RecvID - } - return "" -} - -func (m *ConversationSetPrivateTips) GetSendID() string { - if m != nil { - return m.SendID - } - return "" -} - -func (m *ConversationSetPrivateTips) GetIsPrivate() bool { - if m != nil { - return m.IsPrivate - } - return false -} - -// //////////////////message/////////////////////// -type DeleteMessageTips struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } -func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } -func (*DeleteMessageTips) ProtoMessage() {} -func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{54} -} -func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) -} -func (m *DeleteMessageTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteMessageTips.Marshal(b, m, deterministic) -} -func (dst *DeleteMessageTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteMessageTips.Merge(dst, src) -} -func (m *DeleteMessageTips) XXX_Size() int { - return xxx_messageInfo_DeleteMessageTips.Size(m) -} -func (m *DeleteMessageTips) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteMessageTips.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteMessageTips proto.InternalMessageInfo - -func (m *DeleteMessageTips) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *DeleteMessageTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DeleteMessageTips) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -// /cms -type RequestPagination struct { - PageNumber int32 `protobuf:"varint,1,opt,name=pageNumber" json:"pageNumber,omitempty"` - ShowNumber int32 `protobuf:"varint,2,opt,name=showNumber" json:"showNumber,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RequestPagination) Reset() { *m = RequestPagination{} } -func (m *RequestPagination) String() string { return proto.CompactTextString(m) } -func (*RequestPagination) ProtoMessage() {} -func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{55} -} -func (m *RequestPagination) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RequestPagination.Unmarshal(m, b) -} -func (m *RequestPagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RequestPagination.Marshal(b, m, deterministic) -} -func (dst *RequestPagination) XXX_Merge(src proto.Message) { - xxx_messageInfo_RequestPagination.Merge(dst, src) -} -func (m *RequestPagination) XXX_Size() int { - return xxx_messageInfo_RequestPagination.Size(m) -} -func (m *RequestPagination) XXX_DiscardUnknown() { - xxx_messageInfo_RequestPagination.DiscardUnknown(m) -} - -var xxx_messageInfo_RequestPagination proto.InternalMessageInfo - -func (m *RequestPagination) GetPageNumber() int32 { - if m != nil { - return m.PageNumber - } - return 0 -} - -func (m *RequestPagination) GetShowNumber() int32 { - if m != nil { - return m.ShowNumber - } - return 0 -} - -type ResponsePagination struct { - CurrentPage int32 `protobuf:"varint,5,opt,name=CurrentPage" json:"CurrentPage,omitempty"` - ShowNumber int32 `protobuf:"varint,6,opt,name=ShowNumber" json:"ShowNumber,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } -func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } -func (*ResponsePagination) ProtoMessage() {} -func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{56} -} -func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) -} -func (m *ResponsePagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponsePagination.Marshal(b, m, deterministic) -} -func (dst *ResponsePagination) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponsePagination.Merge(dst, src) -} -func (m *ResponsePagination) XXX_Size() int { - return xxx_messageInfo_ResponsePagination.Size(m) -} -func (m *ResponsePagination) XXX_DiscardUnknown() { - xxx_messageInfo_ResponsePagination.DiscardUnknown(m) -} - -var xxx_messageInfo_ResponsePagination proto.InternalMessageInfo - -func (m *ResponsePagination) GetCurrentPage() int32 { - if m != nil { - return m.CurrentPage - } - return 0 -} - -func (m *ResponsePagination) GetShowNumber() int32 { - if m != nil { - return m.ShowNumber - } - return 0 -} - -// /////////////////signal////////////// -type SignalReq struct { - // Types that are valid to be assigned to Payload: - // *SignalReq_Invite - // *SignalReq_InviteInGroup - // *SignalReq_Cancel - // *SignalReq_Accept - // *SignalReq_HungUp - // *SignalReq_Reject - Payload isSignalReq_Payload `protobuf_oneof:"payload"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalReq) Reset() { *m = SignalReq{} } -func (m *SignalReq) String() string { return proto.CompactTextString(m) } -func (*SignalReq) ProtoMessage() {} -func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{57} -} -func (m *SignalReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalReq.Unmarshal(m, b) -} -func (m *SignalReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalReq.Marshal(b, m, deterministic) -} -func (dst *SignalReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalReq.Merge(dst, src) -} -func (m *SignalReq) XXX_Size() int { - return xxx_messageInfo_SignalReq.Size(m) -} -func (m *SignalReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalReq proto.InternalMessageInfo - -type isSignalReq_Payload interface { - isSignalReq_Payload() -} - -type SignalReq_Invite struct { - Invite *SignalInviteReq `protobuf:"bytes,1,opt,name=invite,oneof"` -} -type SignalReq_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReq `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` -} -type SignalReq_Cancel struct { - Cancel *SignalCancelReq `protobuf:"bytes,3,opt,name=cancel,oneof"` -} -type SignalReq_Accept struct { - Accept *SignalAcceptReq `protobuf:"bytes,4,opt,name=accept,oneof"` -} -type SignalReq_HungUp struct { - HungUp *SignalHungUpReq `protobuf:"bytes,5,opt,name=hungUp,oneof"` -} -type SignalReq_Reject struct { - Reject *SignalRejectReq `protobuf:"bytes,6,opt,name=reject,oneof"` -} - -func (*SignalReq_Invite) isSignalReq_Payload() {} -func (*SignalReq_InviteInGroup) isSignalReq_Payload() {} -func (*SignalReq_Cancel) isSignalReq_Payload() {} -func (*SignalReq_Accept) isSignalReq_Payload() {} -func (*SignalReq_HungUp) isSignalReq_Payload() {} -func (*SignalReq_Reject) isSignalReq_Payload() {} - -func (m *SignalReq) GetPayload() isSignalReq_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (m *SignalReq) GetInvite() *SignalInviteReq { - if x, ok := m.GetPayload().(*SignalReq_Invite); ok { - return x.Invite - } - return nil -} - -func (m *SignalReq) GetInviteInGroup() *SignalInviteInGroupReq { - if x, ok := m.GetPayload().(*SignalReq_InviteInGroup); ok { - return x.InviteInGroup - } - return nil -} - -func (m *SignalReq) GetCancel() *SignalCancelReq { - if x, ok := m.GetPayload().(*SignalReq_Cancel); ok { - return x.Cancel - } - return nil -} - -func (m *SignalReq) GetAccept() *SignalAcceptReq { - if x, ok := m.GetPayload().(*SignalReq_Accept); ok { - return x.Accept - } - return nil -} - -func (m *SignalReq) GetHungUp() *SignalHungUpReq { - if x, ok := m.GetPayload().(*SignalReq_HungUp); ok { - return x.HungUp - } - return nil -} - -func (m *SignalReq) GetReject() *SignalRejectReq { - if x, ok := m.GetPayload().(*SignalReq_Reject); ok { - return x.Reject - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SignalReq) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SignalReq_OneofMarshaler, _SignalReq_OneofUnmarshaler, _SignalReq_OneofSizer, []interface{}{ - (*SignalReq_Invite)(nil), - (*SignalReq_InviteInGroup)(nil), - (*SignalReq_Cancel)(nil), - (*SignalReq_Accept)(nil), - (*SignalReq_HungUp)(nil), - (*SignalReq_Reject)(nil), - } -} - -func _SignalReq_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SignalReq) - // payload - switch x := m.Payload.(type) { - case *SignalReq_Invite: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Invite); err != nil { - return err - } - case *SignalReq_InviteInGroup: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InviteInGroup); err != nil { - return err - } - case *SignalReq_Cancel: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cancel); err != nil { - return err - } - case *SignalReq_Accept: - b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Accept); err != nil { - return err - } - case *SignalReq_HungUp: - b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HungUp); err != nil { - return err - } - case *SignalReq_Reject: - b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Reject); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("SignalReq.Payload has unexpected type %T", x) - } - return nil -} - -func _SignalReq_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SignalReq) - switch tag { - case 1: // payload.invite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Invite{msg} - return true, err - case 2: // payload.inviteInGroup - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteInGroupReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_InviteInGroup{msg} - return true, err - case 3: // payload.cancel - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalCancelReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Cancel{msg} - return true, err - case 4: // payload.accept - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalAcceptReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Accept{msg} - return true, err - case 5: // payload.hungUp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalHungUpReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_HungUp{msg} - return true, err - case 6: // payload.reject - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalRejectReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Reject{msg} - return true, err - default: - return false, nil - } -} - -func _SignalReq_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SignalReq) - // payload - switch x := m.Payload.(type) { - case *SignalReq_Invite: - s := proto.Size(x.Invite) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_InviteInGroup: - s := proto.Size(x.InviteInGroup) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Cancel: - s := proto.Size(x.Cancel) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Accept: - s := proto.Size(x.Accept) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_HungUp: - s := proto.Size(x.HungUp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Reject: - s := proto.Size(x.Reject) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type SignalResp struct { - // Types that are valid to be assigned to Payload: - // *SignalResp_Invite - // *SignalResp_InviteInGroup - // *SignalResp_Cancel - // *SignalResp_Accept - // *SignalResp_HungUp - // *SignalResp_Reject - Payload isSignalResp_Payload `protobuf_oneof:"payload"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalResp) Reset() { *m = SignalResp{} } -func (m *SignalResp) String() string { return proto.CompactTextString(m) } -func (*SignalResp) ProtoMessage() {} -func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{58} -} -func (m *SignalResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalResp.Unmarshal(m, b) -} -func (m *SignalResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalResp.Marshal(b, m, deterministic) -} -func (dst *SignalResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalResp.Merge(dst, src) -} -func (m *SignalResp) XXX_Size() int { - return xxx_messageInfo_SignalResp.Size(m) -} -func (m *SignalResp) XXX_DiscardUnknown() { - xxx_messageInfo_SignalResp.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalResp proto.InternalMessageInfo - -type isSignalResp_Payload interface { - isSignalResp_Payload() -} - -type SignalResp_Invite struct { - Invite *SignalInviteReply `protobuf:"bytes,1,opt,name=invite,oneof"` -} -type SignalResp_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReply `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` -} -type SignalResp_Cancel struct { - Cancel *SignalCancelReply `protobuf:"bytes,3,opt,name=cancel,oneof"` -} -type SignalResp_Accept struct { - Accept *SignalAcceptReply `protobuf:"bytes,4,opt,name=accept,oneof"` -} -type SignalResp_HungUp struct { - HungUp *SignalHungUpReply `protobuf:"bytes,5,opt,name=hungUp,oneof"` -} -type SignalResp_Reject struct { - Reject *SignalRejectReply `protobuf:"bytes,6,opt,name=reject,oneof"` -} - -func (*SignalResp_Invite) isSignalResp_Payload() {} -func (*SignalResp_InviteInGroup) isSignalResp_Payload() {} -func (*SignalResp_Cancel) isSignalResp_Payload() {} -func (*SignalResp_Accept) isSignalResp_Payload() {} -func (*SignalResp_HungUp) isSignalResp_Payload() {} -func (*SignalResp_Reject) isSignalResp_Payload() {} - -func (m *SignalResp) GetPayload() isSignalResp_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (m *SignalResp) GetInvite() *SignalInviteReply { - if x, ok := m.GetPayload().(*SignalResp_Invite); ok { - return x.Invite - } - return nil -} - -func (m *SignalResp) GetInviteInGroup() *SignalInviteInGroupReply { - if x, ok := m.GetPayload().(*SignalResp_InviteInGroup); ok { - return x.InviteInGroup - } - return nil -} - -func (m *SignalResp) GetCancel() *SignalCancelReply { - if x, ok := m.GetPayload().(*SignalResp_Cancel); ok { - return x.Cancel - } - return nil -} - -func (m *SignalResp) GetAccept() *SignalAcceptReply { - if x, ok := m.GetPayload().(*SignalResp_Accept); ok { - return x.Accept - } - return nil -} - -func (m *SignalResp) GetHungUp() *SignalHungUpReply { - if x, ok := m.GetPayload().(*SignalResp_HungUp); ok { - return x.HungUp - } - return nil -} - -func (m *SignalResp) GetReject() *SignalRejectReply { - if x, ok := m.GetPayload().(*SignalResp_Reject); ok { - return x.Reject - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SignalResp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SignalResp_OneofMarshaler, _SignalResp_OneofUnmarshaler, _SignalResp_OneofSizer, []interface{}{ - (*SignalResp_Invite)(nil), - (*SignalResp_InviteInGroup)(nil), - (*SignalResp_Cancel)(nil), - (*SignalResp_Accept)(nil), - (*SignalResp_HungUp)(nil), - (*SignalResp_Reject)(nil), - } -} - -func _SignalResp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SignalResp) - // payload - switch x := m.Payload.(type) { - case *SignalResp_Invite: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Invite); err != nil { - return err - } - case *SignalResp_InviteInGroup: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InviteInGroup); err != nil { - return err - } - case *SignalResp_Cancel: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cancel); err != nil { - return err - } - case *SignalResp_Accept: - b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Accept); err != nil { - return err - } - case *SignalResp_HungUp: - b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HungUp); err != nil { - return err - } - case *SignalResp_Reject: - b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Reject); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("SignalResp.Payload has unexpected type %T", x) - } - return nil -} - -func _SignalResp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SignalResp) - switch tag { - case 1: // payload.invite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Invite{msg} - return true, err - case 2: // payload.inviteInGroup - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteInGroupReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_InviteInGroup{msg} - return true, err - case 3: // payload.cancel - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalCancelReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Cancel{msg} - return true, err - case 4: // payload.accept - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalAcceptReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Accept{msg} - return true, err - case 5: // payload.hungUp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalHungUpReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_HungUp{msg} - return true, err - case 6: // payload.reject - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalRejectReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Reject{msg} - return true, err - default: - return false, nil - } -} - -func _SignalResp_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SignalResp) - // payload - switch x := m.Payload.(type) { - case *SignalResp_Invite: - s := proto.Size(x.Invite) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_InviteInGroup: - s := proto.Size(x.InviteInGroup) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Cancel: - s := proto.Size(x.Cancel) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Accept: - s := proto.Size(x.Accept) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_HungUp: - s := proto.Size(x.HungUp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Reject: - s := proto.Size(x.Reject) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type InvitationInfo struct { - InviterUserID string `protobuf:"bytes,1,opt,name=inviterUserID" json:"inviterUserID,omitempty"` - InviteeUserIDList []string `protobuf:"bytes,2,rep,name=inviteeUserIDList" json:"inviteeUserIDList,omitempty"` - CustomData string `protobuf:"bytes,3,opt,name=customData" json:"customData,omitempty"` - GroupID string `protobuf:"bytes,4,opt,name=groupID" json:"groupID,omitempty"` - RoomID string `protobuf:"bytes,5,opt,name=roomID" json:"roomID,omitempty"` - Timeout int32 `protobuf:"varint,6,opt,name=timeout" json:"timeout,omitempty"` - MediaType string `protobuf:"bytes,7,opt,name=mediaType" json:"mediaType,omitempty"` - PlatformID int32 `protobuf:"varint,8,opt,name=platformID" json:"platformID,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } -func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } -func (*InvitationInfo) ProtoMessage() {} -func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{59} -} -func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) -} -func (m *InvitationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_InvitationInfo.Marshal(b, m, deterministic) -} -func (dst *InvitationInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_InvitationInfo.Merge(dst, src) -} -func (m *InvitationInfo) XXX_Size() int { - return xxx_messageInfo_InvitationInfo.Size(m) -} -func (m *InvitationInfo) XXX_DiscardUnknown() { - xxx_messageInfo_InvitationInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_InvitationInfo proto.InternalMessageInfo - -func (m *InvitationInfo) GetInviterUserID() string { - if m != nil { - return m.InviterUserID - } - return "" -} - -func (m *InvitationInfo) GetInviteeUserIDList() []string { - if m != nil { - return m.InviteeUserIDList - } - return nil -} - -func (m *InvitationInfo) GetCustomData() string { - if m != nil { - return m.CustomData - } - return "" -} - -func (m *InvitationInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *InvitationInfo) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *InvitationInfo) GetTimeout() int32 { - if m != nil { - return m.Timeout - } - return 0 -} - -func (m *InvitationInfo) GetMediaType() string { - if m != nil { - return m.MediaType - } - return "" -} - -func (m *InvitationInfo) GetPlatformID() int32 { - if m != nil { - return m.PlatformID - } - return 0 -} - -func (m *InvitationInfo) GetSessionType() int32 { - if m != nil { - return m.SessionType - } - return 0 -} - -type ParticipantMetaData struct { - GroupInfo *GroupInfo `protobuf:"bytes,1,opt,name=groupInfo" json:"groupInfo,omitempty"` - GroupMemberInfo *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=groupMemberInfo" json:"groupMemberInfo,omitempty"` - UserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=userInfo" json:"userInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } -func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } -func (*ParticipantMetaData) ProtoMessage() {} -func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{60} -} -func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) -} -func (m *ParticipantMetaData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ParticipantMetaData.Marshal(b, m, deterministic) -} -func (dst *ParticipantMetaData) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParticipantMetaData.Merge(dst, src) -} -func (m *ParticipantMetaData) XXX_Size() int { - return xxx_messageInfo_ParticipantMetaData.Size(m) -} -func (m *ParticipantMetaData) XXX_DiscardUnknown() { - xxx_messageInfo_ParticipantMetaData.DiscardUnknown(m) -} - -var xxx_messageInfo_ParticipantMetaData proto.InternalMessageInfo - -func (m *ParticipantMetaData) GetGroupInfo() *GroupInfo { - if m != nil { - return m.GroupInfo - } - return nil -} - -func (m *ParticipantMetaData) GetGroupMemberInfo() *GroupMemberFullInfo { - if m != nil { - return m.GroupMemberInfo - } - return nil -} - -func (m *ParticipantMetaData) GetUserInfo() *PublicUserInfo { - if m != nil { - return m.UserInfo - } - return nil -} - -type SignalInviteReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } -func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } -func (*SignalInviteReq) ProtoMessage() {} -func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{61} -} -func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) -} -func (m *SignalInviteReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteReq.Marshal(b, m, deterministic) -} -func (dst *SignalInviteReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteReq.Merge(dst, src) -} -func (m *SignalInviteReq) XXX_Size() int { - return xxx_messageInfo_SignalInviteReq.Size(m) -} -func (m *SignalInviteReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteReq proto.InternalMessageInfo - -func (m *SignalInviteReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalInviteReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalInviteReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalInviteReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalInviteReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } -func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } -func (*SignalInviteReply) ProtoMessage() {} -func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{62} -} -func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) -} -func (m *SignalInviteReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteReply.Marshal(b, m, deterministic) -} -func (dst *SignalInviteReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteReply.Merge(dst, src) -} -func (m *SignalInviteReply) XXX_Size() int { - return xxx_messageInfo_SignalInviteReply.Size(m) -} -func (m *SignalInviteReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteReply proto.InternalMessageInfo - -func (m *SignalInviteReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalInviteReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalInviteReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalInviteInGroupReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} } -func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } -func (*SignalInviteInGroupReq) ProtoMessage() {} -func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{63} -} -func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) -} -func (m *SignalInviteInGroupReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteInGroupReq.Marshal(b, m, deterministic) -} -func (dst *SignalInviteInGroupReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteInGroupReq.Merge(dst, src) -} -func (m *SignalInviteInGroupReq) XXX_Size() int { - return xxx_messageInfo_SignalInviteInGroupReq.Size(m) -} -func (m *SignalInviteInGroupReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteInGroupReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteInGroupReq proto.InternalMessageInfo - -func (m *SignalInviteInGroupReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalInviteInGroupReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalInviteInGroupReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalInviteInGroupReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalInviteInGroupReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupReply{} } -func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } -func (*SignalInviteInGroupReply) ProtoMessage() {} -func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{64} -} -func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) -} -func (m *SignalInviteInGroupReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteInGroupReply.Marshal(b, m, deterministic) -} -func (dst *SignalInviteInGroupReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteInGroupReply.Merge(dst, src) -} -func (m *SignalInviteInGroupReply) XXX_Size() int { - return xxx_messageInfo_SignalInviteInGroupReply.Size(m) -} -func (m *SignalInviteInGroupReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteInGroupReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteInGroupReply proto.InternalMessageInfo - -func (m *SignalInviteInGroupReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalInviteInGroupReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalInviteInGroupReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalCancelReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } -func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } -func (*SignalCancelReq) ProtoMessage() {} -func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{65} -} -func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) -} -func (m *SignalCancelReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalCancelReq.Marshal(b, m, deterministic) -} -func (dst *SignalCancelReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalCancelReq.Merge(dst, src) -} -func (m *SignalCancelReq) XXX_Size() int { - return xxx_messageInfo_SignalCancelReq.Size(m) -} -func (m *SignalCancelReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalCancelReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalCancelReq proto.InternalMessageInfo - -func (m *SignalCancelReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalCancelReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalCancelReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalCancelReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalCancelReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } -func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } -func (*SignalCancelReply) ProtoMessage() {} -func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{66} -} -func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) -} -func (m *SignalCancelReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalCancelReply.Marshal(b, m, deterministic) -} -func (dst *SignalCancelReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalCancelReply.Merge(dst, src) -} -func (m *SignalCancelReply) XXX_Size() int { - return xxx_messageInfo_SignalCancelReply.Size(m) -} -func (m *SignalCancelReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalCancelReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalCancelReply proto.InternalMessageInfo - -type SignalAcceptReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } -func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } -func (*SignalAcceptReq) ProtoMessage() {} -func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{67} -} -func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) -} -func (m *SignalAcceptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalAcceptReq.Marshal(b, m, deterministic) -} -func (dst *SignalAcceptReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalAcceptReq.Merge(dst, src) -} -func (m *SignalAcceptReq) XXX_Size() int { - return xxx_messageInfo_SignalAcceptReq.Size(m) -} -func (m *SignalAcceptReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalAcceptReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalAcceptReq proto.InternalMessageInfo - -func (m *SignalAcceptReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalAcceptReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalAcceptReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalAcceptReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -func (m *SignalAcceptReq) GetOpUserPlatformID() int32 { - if m != nil { - return m.OpUserPlatformID - } - return 0 -} - -type SignalAcceptReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } -func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } -func (*SignalAcceptReply) ProtoMessage() {} -func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{68} -} -func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) -} -func (m *SignalAcceptReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalAcceptReply.Marshal(b, m, deterministic) -} -func (dst *SignalAcceptReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalAcceptReply.Merge(dst, src) -} -func (m *SignalAcceptReply) XXX_Size() int { - return xxx_messageInfo_SignalAcceptReply.Size(m) -} -func (m *SignalAcceptReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalAcceptReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalAcceptReply proto.InternalMessageInfo - -func (m *SignalAcceptReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalAcceptReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalAcceptReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalHungUpReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } -func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } -func (*SignalHungUpReq) ProtoMessage() {} -func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{69} -} -func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) -} -func (m *SignalHungUpReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalHungUpReq.Marshal(b, m, deterministic) -} -func (dst *SignalHungUpReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalHungUpReq.Merge(dst, src) -} -func (m *SignalHungUpReq) XXX_Size() int { - return xxx_messageInfo_SignalHungUpReq.Size(m) -} -func (m *SignalHungUpReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalHungUpReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalHungUpReq proto.InternalMessageInfo - -func (m *SignalHungUpReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalHungUpReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalHungUpReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -type SignalHungUpReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } -func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } -func (*SignalHungUpReply) ProtoMessage() {} -func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{70} -} -func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) -} -func (m *SignalHungUpReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalHungUpReply.Marshal(b, m, deterministic) -} -func (dst *SignalHungUpReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalHungUpReply.Merge(dst, src) -} -func (m *SignalHungUpReply) XXX_Size() int { - return xxx_messageInfo_SignalHungUpReply.Size(m) -} -func (m *SignalHungUpReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalHungUpReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalHungUpReply proto.InternalMessageInfo - -type SignalRejectReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } -func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } -func (*SignalRejectReq) ProtoMessage() {} -func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{71} -} -func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) -} -func (m *SignalRejectReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalRejectReq.Marshal(b, m, deterministic) -} -func (dst *SignalRejectReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalRejectReq.Merge(dst, src) -} -func (m *SignalRejectReq) XXX_Size() int { - return xxx_messageInfo_SignalRejectReq.Size(m) -} -func (m *SignalRejectReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalRejectReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalRejectReq proto.InternalMessageInfo - -func (m *SignalRejectReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalRejectReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalRejectReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalRejectReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -func (m *SignalRejectReq) GetOpUserPlatformID() int32 { - if m != nil { - return m.OpUserPlatformID - } - return 0 -} - -type SignalRejectReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } -func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } -func (*SignalRejectReply) ProtoMessage() {} -func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{72} -} -func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) -} -func (m *SignalRejectReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalRejectReply.Marshal(b, m, deterministic) -} -func (dst *SignalRejectReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalRejectReply.Merge(dst, src) -} -func (m *SignalRejectReply) XXX_Size() int { - return xxx_messageInfo_SignalRejectReply.Size(m) -} -func (m *SignalRejectReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalRejectReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalRejectReply proto.InternalMessageInfo - -type DelMsgListReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } -func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } -func (*DelMsgListReq) ProtoMessage() {} -func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{73} -} -func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) -} -func (m *DelMsgListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListReq.Marshal(b, m, deterministic) -} -func (dst *DelMsgListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListReq.Merge(dst, src) -} -func (m *DelMsgListReq) XXX_Size() int { - return xxx_messageInfo_DelMsgListReq.Size(m) -} -func (m *DelMsgListReq) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListReq proto.InternalMessageInfo - -func (m *DelMsgListReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *DelMsgListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DelMsgListReq) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -func (m *DelMsgListReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -type DelMsgListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } -func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } -func (*DelMsgListResp) ProtoMessage() {} -func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{74} -} -func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) -} -func (m *DelMsgListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListResp.Marshal(b, m, deterministic) -} -func (dst *DelMsgListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListResp.Merge(dst, src) -} -func (m *DelMsgListResp) XXX_Size() int { - return xxx_messageInfo_DelMsgListResp.Size(m) -} -func (m *DelMsgListResp) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListResp proto.InternalMessageInfo - -func (m *DelMsgListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *DelMsgListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func init() { - proto.RegisterType((*GroupInfo)(nil), "server_api_params.GroupInfo") - proto.RegisterType((*GroupMemberFullInfo)(nil), "server_api_params.GroupMemberFullInfo") - proto.RegisterType((*PublicUserInfo)(nil), "server_api_params.PublicUserInfo") - proto.RegisterType((*UserInfo)(nil), "server_api_params.UserInfo") - proto.RegisterType((*FriendInfo)(nil), "server_api_params.FriendInfo") - proto.RegisterType((*BlackInfo)(nil), "server_api_params.BlackInfo") - proto.RegisterType((*GroupRequest)(nil), "server_api_params.GroupRequest") - proto.RegisterType((*FriendRequest)(nil), "server_api_params.FriendRequest") - proto.RegisterType((*Department)(nil), "server_api_params.Department") - proto.RegisterType((*OrganizationUser)(nil), "server_api_params.OrganizationUser") - proto.RegisterType((*DepartmentMember)(nil), "server_api_params.DepartmentMember") - proto.RegisterType((*UserDepartmentMember)(nil), "server_api_params.UserDepartmentMember") - proto.RegisterType((*UserInDepartment)(nil), "server_api_params.UserInDepartment") - proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") - proto.RegisterMapType((map[string]*SeqList)(nil), "server_api_params.PullMessageBySeqListReq.GroupSeqListEntry") - proto.RegisterType((*SeqList)(nil), "server_api_params.seqList") - proto.RegisterType((*MsgDataList)(nil), "server_api_params.MsgDataList") - proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") - proto.RegisterMapType((map[string]*MsgDataList)(nil), "server_api_params.PullMessageBySeqListResp.GroupMsgDataListEntry") - proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") - proto.RegisterType((*MaxAndMinSeq)(nil), "server_api_params.MaxAndMinSeq") - proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") - proto.RegisterMapType((map[string]*MaxAndMinSeq)(nil), "server_api_params.GetMaxAndMinSeqResp.GroupMaxAndMinSeqEntry") - proto.RegisterType((*UserSendMsgResp)(nil), "server_api_params.UserSendMsgResp") - proto.RegisterType((*MsgData)(nil), "server_api_params.MsgData") - proto.RegisterMapType((map[string]bool)(nil), "server_api_params.MsgData.OptionsEntry") - proto.RegisterType((*OfflinePushInfo)(nil), "server_api_params.OfflinePushInfo") - proto.RegisterType((*TipsComm)(nil), "server_api_params.TipsComm") - proto.RegisterType((*GroupCreatedTips)(nil), "server_api_params.GroupCreatedTips") - proto.RegisterType((*GroupInfoSetTips)(nil), "server_api_params.GroupInfoSetTips") - proto.RegisterType((*JoinGroupApplicationTips)(nil), "server_api_params.JoinGroupApplicationTips") - proto.RegisterType((*MemberQuitTips)(nil), "server_api_params.MemberQuitTips") - proto.RegisterType((*GroupApplicationAcceptedTips)(nil), "server_api_params.GroupApplicationAcceptedTips") - proto.RegisterType((*GroupApplicationRejectedTips)(nil), "server_api_params.GroupApplicationRejectedTips") - proto.RegisterType((*GroupOwnerTransferredTips)(nil), "server_api_params.GroupOwnerTransferredTips") - proto.RegisterType((*MemberKickedTips)(nil), "server_api_params.MemberKickedTips") - proto.RegisterType((*MemberInvitedTips)(nil), "server_api_params.MemberInvitedTips") - proto.RegisterType((*MemberEnterTips)(nil), "server_api_params.MemberEnterTips") - proto.RegisterType((*GroupDismissedTips)(nil), "server_api_params.GroupDismissedTips") - proto.RegisterType((*GroupMemberMutedTips)(nil), "server_api_params.GroupMemberMutedTips") - proto.RegisterType((*GroupMemberCancelMutedTips)(nil), "server_api_params.GroupMemberCancelMutedTips") - proto.RegisterType((*GroupMutedTips)(nil), "server_api_params.GroupMutedTips") - proto.RegisterType((*GroupCancelMutedTips)(nil), "server_api_params.GroupCancelMutedTips") - proto.RegisterType((*GroupMemberInfoSetTips)(nil), "server_api_params.GroupMemberInfoSetTips") - proto.RegisterType((*OrganizationChangedTips)(nil), "server_api_params.OrganizationChangedTips") - proto.RegisterType((*FriendApplication)(nil), "server_api_params.FriendApplication") - proto.RegisterType((*FromToUserID)(nil), "server_api_params.FromToUserID") - proto.RegisterType((*FriendApplicationTips)(nil), "server_api_params.FriendApplicationTips") - proto.RegisterType((*FriendApplicationApprovedTips)(nil), "server_api_params.FriendApplicationApprovedTips") - proto.RegisterType((*FriendApplicationRejectedTips)(nil), "server_api_params.FriendApplicationRejectedTips") - proto.RegisterType((*FriendAddedTips)(nil), "server_api_params.FriendAddedTips") - proto.RegisterType((*FriendDeletedTips)(nil), "server_api_params.FriendDeletedTips") - proto.RegisterType((*BlackAddedTips)(nil), "server_api_params.BlackAddedTips") - proto.RegisterType((*BlackDeletedTips)(nil), "server_api_params.BlackDeletedTips") - proto.RegisterType((*FriendInfoChangedTips)(nil), "server_api_params.FriendInfoChangedTips") - proto.RegisterType((*UserInfoUpdatedTips)(nil), "server_api_params.UserInfoUpdatedTips") - proto.RegisterType((*ConversationUpdateTips)(nil), "server_api_params.ConversationUpdateTips") - proto.RegisterType((*ConversationSetPrivateTips)(nil), "server_api_params.ConversationSetPrivateTips") - proto.RegisterType((*DeleteMessageTips)(nil), "server_api_params.DeleteMessageTips") - proto.RegisterType((*RequestPagination)(nil), "server_api_params.RequestPagination") - proto.RegisterType((*ResponsePagination)(nil), "server_api_params.ResponsePagination") - proto.RegisterType((*SignalReq)(nil), "server_api_params.SignalReq") - proto.RegisterType((*SignalResp)(nil), "server_api_params.SignalResp") - proto.RegisterType((*InvitationInfo)(nil), "server_api_params.InvitationInfo") - proto.RegisterType((*ParticipantMetaData)(nil), "server_api_params.ParticipantMetaData") - proto.RegisterType((*SignalInviteReq)(nil), "server_api_params.SignalInviteReq") - proto.RegisterType((*SignalInviteReply)(nil), "server_api_params.SignalInviteReply") - proto.RegisterType((*SignalInviteInGroupReq)(nil), "server_api_params.SignalInviteInGroupReq") - proto.RegisterType((*SignalInviteInGroupReply)(nil), "server_api_params.SignalInviteInGroupReply") - proto.RegisterType((*SignalCancelReq)(nil), "server_api_params.SignalCancelReq") - proto.RegisterType((*SignalCancelReply)(nil), "server_api_params.SignalCancelReply") - proto.RegisterType((*SignalAcceptReq)(nil), "server_api_params.SignalAcceptReq") - proto.RegisterType((*SignalAcceptReply)(nil), "server_api_params.SignalAcceptReply") - proto.RegisterType((*SignalHungUpReq)(nil), "server_api_params.SignalHungUpReq") - proto.RegisterType((*SignalHungUpReply)(nil), "server_api_params.SignalHungUpReply") - proto.RegisterType((*SignalRejectReq)(nil), "server_api_params.SignalRejectReq") - proto.RegisterType((*SignalRejectReply)(nil), "server_api_params.SignalRejectReply") - proto.RegisterType((*DelMsgListReq)(nil), "server_api_params.DelMsgListReq") - proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") -} - -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_5ad487361de288a1) } - -var fileDescriptor_ws_5ad487361de288a1 = []byte{ - // 3252 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, - 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, 0x28, 0x8a, 0x10, - 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x1c, 0x11, 0x17, 0xc4, 0x99, 0x2b, 0x07, 0x24, 0x24, - 0xd0, 0xab, 0x7a, 0xdd, 0xfd, 0x5e, 0x77, 0x8f, 0x3d, 0x3b, 0xb2, 0xb2, 0x1b, 0x2d, 0xb7, 0xa9, - 0xea, 0x57, 0xf5, 0xea, 0xd5, 0x57, 0xef, 0x55, 0xbd, 0x9f, 0x81, 0x85, 0xd8, 0x39, 0x7c, 0xef, - 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, - 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, - 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, - 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x9f, 0x3b, 0xf6, 0x90, 0x75, 0x75, 0xfc, 0x56, 0x30, - 0x0c, 0x13, 0x66, 0xfd, 0x20, 0x71, 0xf7, 0xdd, 0xbe, 0x9d, 0xb8, 0x81, 0xdf, 0x6d, 0x60, 0x03, - 0x85, 0xc7, 0xdb, 0xb8, 0x7e, 0x12, 0x05, 0x4e, 0xda, 0xc7, 0x36, 0x53, 0xd4, 0x46, 0xe6, 0xf1, - 0xfe, 0xf7, 0xed, 0x3e, 0xbb, 0x6d, 0xdd, 0xe8, 0x36, 0xa9, 0x7f, 0x41, 0x1a, 0xab, 0xd0, 0x09, - 0xee, 0xfa, 0x2c, 0xba, 0x1d, 0xb3, 0xe8, 0xfa, 0x56, 0xb7, 0x85, 0x5f, 0x65, 0x96, 0x71, 0x11, - 0xa0, 0x1f, 0x31, 0x3b, 0x61, 0xb7, 0xdc, 0x21, 0xeb, 0x4e, 0xaf, 0x6a, 0xcf, 0xce, 0x59, 0x12, - 0x87, 0x6b, 0x18, 0xb2, 0xe1, 0x1e, 0x8b, 0x36, 0x83, 0xd4, 0x4f, 0xba, 0x33, 0xd8, 0x40, 0x66, - 0x19, 0xf3, 0xa0, 0xb3, 0x7b, 0xdd, 0x36, 0xaa, 0xd6, 0xd9, 0x3d, 0x63, 0x19, 0x5a, 0x71, 0x62, - 0x27, 0x69, 0xdc, 0x85, 0x55, 0xed, 0xd9, 0xa6, 0x25, 0x28, 0x63, 0x0d, 0xe6, 0x50, 0x6f, 0x90, - 0x59, 0xd3, 0x41, 0x11, 0x95, 0x99, 0x7b, 0xec, 0xd6, 0xfd, 0x90, 0x75, 0x67, 0x51, 0x41, 0xc1, - 0x30, 0xff, 0xaa, 0xc3, 0x39, 0xf4, 0xfb, 0x36, 0x1a, 0x70, 0x25, 0xf5, 0xbc, 0x53, 0x10, 0x58, - 0x86, 0x56, 0x4a, 0xdd, 0x91, 0xfb, 0x05, 0xc5, 0xfb, 0x89, 0x02, 0x8f, 0xdd, 0x60, 0xc7, 0xcc, - 0x43, 0xc7, 0x37, 0xad, 0x82, 0x61, 0xac, 0xc0, 0xcc, 0x9d, 0xc0, 0xf5, 0xd1, 0x27, 0x53, 0xf8, - 0x31, 0xa7, 0xf9, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, 0xb4, - 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0xea, 0x74, 0x1a, 0xf5, - 0x96, 0xb8, 0x1c, 0x0f, 0xde, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, 0xc3, - 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, 0x1c, - 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0x38, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, 0x7e, - 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, - 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, 0x28, - 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, 0x0f, - 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, 0x4a, - 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, 0x62, - 0x40, 0x33, 0xb9, 0xef, 0xd5, 0x39, 0xd6, 0xae, 0xcc, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, 0x98, - 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x72, 0x6b, 0xd5, 0xc9, 0xbd, - 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, 0xbd, - 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x59, 0x06, 0x2f, - 0x65, 0x28, 0x59, 0x52, 0x73, 0x3e, 0xb3, 0x6c, 0xc7, 0x11, 0x01, 0xdc, 0xa4, 0x99, 0x95, 0x33, - 0x6a, 0xe2, 0xb7, 0x75, 0x42, 0xfc, 0x4e, 0xe7, 0x41, 0xf1, 0x4f, 0x0d, 0xda, 0x1b, 0x9e, 0xdd, - 0x3f, 0x1c, 0x73, 0xe8, 0xea, 0x10, 0xf5, 0xca, 0x10, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0x0d, - 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x33, 0x35, 0xa3, 0x54, 0x27, 0x85, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, - 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, 0x87, 0xfb, 0x17, 0x1d, 0x66, 0x71, 0xa1, 0xb3, - 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, 0xd2, 0xcc, 0x54, 0x6d, 0x5c, 0x53, 0x73, 0x11, - 0xe3, 0x15, 0xb1, 0xac, 0xa2, 0xbc, 0x8e, 0xf2, 0x17, 0x6a, 0xe4, 0xf3, 0x9c, 0x66, 0x15, 0xcd, - 0x79, 0x0a, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, 0x8b, 0x53, 0x2f, 0x11, 0xab, 0xa5, 0xc2, 0xa3, - 0x48, 0x3b, 0xda, 0x8e, 0x07, 0x22, 0x41, 0x09, 0x8a, 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, - 0x82, 0xc1, 0x27, 0x6a, 0xc4, 0x8e, 0x10, 0x21, 0x9a, 0x56, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, - 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, 0x4c, 0x12, 0xa7, 0x9c, 0x98, 0xcc, 0xbf, - 0x35, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0x8b, 0x3c, 0xce, 0x83, 0xa1, 0x12, 0x45, 0x12, 0x87, - 0x5b, 0xc1, 0xa9, 0x1d, 0x75, 0xa1, 0x51, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x45, 0x59, 0x70, 0x64, - 0x56, 0xd6, 0xcb, 0x55, 0x79, 0xe1, 0x91, 0x38, 0x7c, 0x29, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, - 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, - 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x25, 0x39, 0x5d, 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, - 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0x52, 0xbd, - 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, 0xba, 0xf3, 0x23, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, - 0x95, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x86, 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, - 0x55, 0x78, 0x72, 0x9e, 0xd0, 0xd5, 0x3c, 0x61, 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, - 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, 0xe6, 0x79, 0x20, 0x88, 0x1c, 0x91, 0x39, 0x9a, - 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0x41, 0xd3, 0xa2, 0x75, 0x5d, 0xe5, 0x9e, 0x5a, 0x83, - 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x27, 0x1d, 0x8a, 0x70, 0xaf, 0xf0, 0xb9, 0x53, - 0xa9, 0x38, 0xe3, 0x8d, 0x28, 0xd5, 0x14, 0x8c, 0x72, 0x55, 0x60, 0xbe, 0xaf, 0xc3, 0xe2, 0xcd, - 0x68, 0x60, 0xfb, 0xee, 0xb7, 0xb1, 0xdc, 0xc4, 0x05, 0x7c, 0x92, 0x94, 0xbb, 0x0a, 0x1d, 0xe6, - 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x4a, 0xca, 0x4d, - 0x25, 0x29, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, - 0xc3, 0xec, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x12, 0xf5, 0x4c, 0x6d, 0xa2, 0x6e, 0xcb, 0x89, 0x5a, - 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0x83, 0x06, 0x8b, 0x85, 0xbb, 0xa9, - 0x06, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, - 0x69, 0x41, 0xec, 0x4a, 0xf5, 0x7e, 0x4e, 0xf3, 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, - 0xba, 0x5b, 0x4a, 0xd5, 0x5d, 0xce, 0xa3, 0xbf, 0xd5, 0xe0, 0x3c, 0x47, 0xb9, 0x32, 0x8c, 0x9b, - 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, - 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x4e, - 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x9e, 0x6f, 0xb8, - 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, - 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x1f, 0x2c, 0x76, 0x34, 0x32, - 0x86, 0x78, 0x9d, 0x83, 0x85, 0x82, 0x1b, 0xf8, 0x79, 0x08, 0xc9, 0x2c, 0x3e, 0xad, 0x62, 0xd2, - 0xd3, 0x6d, 0xac, 0x36, 0x78, 0x0a, 0x15, 0xa4, 0xf1, 0x2d, 0x98, 0xc5, 0x1c, 0x2e, 0xba, 0xe9, - 0x4e, 0xe1, 0x00, 0x5e, 0xab, 0xad, 0x1a, 0x6a, 0xad, 0xa2, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x49, - 0x74, 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x26, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, - 0x31, 0x0e, 0xfe, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, - 0xc2, 0x66, 0x8b, 0x1a, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x07, 0x26, 0x8f, 0x51, 0x53, - 0xc6, 0x68, 0xbe, 0x05, 0x9d, 0xed, 0x78, 0xb0, 0x65, 0x27, 0x36, 0x36, 0x7c, 0x0d, 0x3a, 0xc3, - 0x82, 0xc4, 0xc6, 0xf5, 0xfd, 0x09, 0x21, 0x4b, 0x6e, 0x6e, 0xfe, 0x59, 0x87, 0x6e, 0xbd, 0x2b, - 0xe2, 0x90, 0xdb, 0xc0, 0xa2, 0x68, 0x33, 0x70, 0x18, 0x0e, 0xad, 0x69, 0x65, 0x24, 0xc7, 0x8e, - 0x45, 0x11, 0xcf, 0x61, 0xa2, 0xc8, 0x26, 0xca, 0xb8, 0x04, 0x53, 0x5e, 0x06, 0xcb, 0xc9, 0x56, - 0x60, 0x3b, 0x63, 0x08, 0x8b, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xf5, 0xb1, 0x31, 0x8b, 0x43, - 0x02, 0x4d, 0xd2, 0x41, 0xc0, 0x55, 0x54, 0xaf, 0xf4, 0xe1, 0x89, 0xda, 0xa6, 0x35, 0x00, 0x7e, - 0x49, 0x05, 0xf0, 0xe2, 0xe8, 0xa1, 0x94, 0x41, 0x0c, 0xc1, 0xb8, 0xca, 0x92, 0x6d, 0xfb, 0xde, - 0xba, 0xef, 0x6c, 0xbb, 0x7e, 0x8f, 0x1d, 0xf1, 0x68, 0x5f, 0x85, 0x8e, 0xd8, 0x9e, 0xe7, 0x30, - 0xb5, 0x2d, 0x99, 0x35, 0x72, 0xd7, 0x5e, 0x9a, 0x0f, 0x8d, 0xca, 0x7c, 0x30, 0x2f, 0xc3, 0xac, - 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x5e, 0x8f, 0x1d, 0xe1, 0x80, 0xe6, 0x2c, 0x41, 0x21, 0x1f, 0x5b, - 0x88, 0xbd, 0x81, 0xa0, 0xcc, 0x3f, 0xe9, 0x70, 0xae, 0x62, 0x72, 0x1c, 0x3e, 0xa8, 0x1e, 0x39, - 0x5e, 0x1a, 0xa3, 0xe2, 0x65, 0x4a, 0x89, 0x97, 0x43, 0x58, 0x22, 0x90, 0xa4, 0xae, 0xbb, 0x4d, - 0x0c, 0x80, 0xd7, 0xeb, 0x4a, 0xf5, 0xaa, 0x91, 0x02, 0x7b, 0x89, 0x4b, 0xe0, 0x57, 0xf5, 0xae, - 0x30, 0x58, 0xae, 0x6f, 0x5c, 0x03, 0xff, 0xcb, 0x2a, 0xfc, 0x9f, 0xae, 0x83, 0x5f, 0xb6, 0x44, - 0xc2, 0xff, 0x08, 0x16, 0xf8, 0xa2, 0xda, 0x63, 0xbe, 0xb3, 0x1d, 0x0f, 0xd0, 0x91, 0xab, 0xd0, - 0x21, 0xf9, 0xed, 0x78, 0x50, 0x6c, 0xdd, 0x24, 0x16, 0x6f, 0xd1, 0xf7, 0x5c, 0xbe, 0x78, 0x62, - 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x9e, 0x20, 0x63, 0x26, 0x4e, 0x32, 0xb8, 0x77, 0x1b, 0x56, 0x4e, - 0x9b, 0x7f, 0x6f, 0xc2, 0xb4, 0x88, 0x46, 0x4c, 0x8a, 0x7c, 0xb7, 0x9c, 0x2f, 0xab, 0x44, 0x51, - 0x5d, 0xdb, 0x3f, 0x2e, 0xc2, 0x8b, 0x28, 0xf9, 0x18, 0xa9, 0xa1, 0x1e, 0x23, 0x95, 0x6c, 0x9a, - 0xaa, 0xda, 0x54, 0x1a, 0x57, 0xb3, 0x3a, 0x2e, 0x5e, 0xc6, 0x61, 0x65, 0xb3, 0xeb, 0xd9, 0xc9, - 0x7e, 0x10, 0x0d, 0xc5, 0xe6, 0xb7, 0x69, 0x55, 0xf8, 0xbc, 0x74, 0x24, 0x5e, 0x5e, 0xfb, 0x53, - 0x0a, 0x2f, 0x71, 0x79, 0xa5, 0x4d, 0x9c, 0x6c, 0x0f, 0x40, 0xa7, 0x0e, 0x2a, 0x93, 0x6c, 0x8b, - 0x63, 0x37, 0xf0, 0xb1, 0x0a, 0xa5, 0x52, 0x5f, 0x66, 0xf1, 0x91, 0x0f, 0xe3, 0xc1, 0x95, 0x28, - 0x18, 0x8a, 0xb3, 0x87, 0x8c, 0xc4, 0x91, 0x07, 0x7e, 0x92, 0x55, 0xb0, 0x1d, 0x92, 0x95, 0x58, - 0x5c, 0x56, 0x90, 0x58, 0xe7, 0xcf, 0x5a, 0x19, 0xc9, 0x63, 0x29, 0x66, 0x47, 0xa2, 0x78, 0xe7, - 0x3f, 0x15, 0xe4, 0x16, 0x54, 0xe4, 0x4a, 0xd5, 0xd8, 0x22, 0x7e, 0x95, 0xab, 0xb1, 0xa2, 0xc4, - 0x59, 0x52, 0x4a, 0x9c, 0x75, 0x98, 0x0e, 0x42, 0x3e, 0xfd, 0xe3, 0xae, 0x81, 0xd3, 0xe5, 0xb3, - 0xa3, 0x17, 0xa8, 0x4b, 0x37, 0xa9, 0x25, 0x4d, 0x8c, 0x4c, 0xce, 0xb8, 0x01, 0x0b, 0xc1, 0xfe, - 0xbe, 0xe7, 0xfa, 0x6c, 0x37, 0x8d, 0x0f, 0x70, 0x93, 0x7c, 0x0e, 0x83, 0xdd, 0xac, 0x2b, 0x22, - 0xd4, 0x96, 0x56, 0x59, 0x94, 0x57, 0x7e, 0x76, 0x42, 0x9b, 0x1c, 0x5c, 0xe0, 0xce, 0xe3, 0x02, - 0xa7, 0xf0, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0x94, 0x9a, 0x69, 0x77, 0x5e, 0x9e, 0x76, 0x33, 0xf2, - 0xac, 0xfa, 0x91, 0x06, 0x0b, 0x25, 0x23, 0x78, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, - 0xf7, 0x31, 0x0e, 0x8b, 0xfb, 0x22, 0xcc, 0xf1, 0xb7, 0xa8, 0x08, 0x1b, 0xf9, 0xe9, 0x94, 0x09, - 0xb3, 0xee, 0xcd, 0x1e, 0x57, 0xd4, 0x0b, 0x52, 0xdf, 0xc9, 0x4f, 0x98, 0x25, 0x1e, 0x0f, 0x33, - 0xf7, 0x66, 0x6f, 0xc3, 0x76, 0x06, 0x8c, 0xce, 0x81, 0x9b, 0x68, 0x93, 0xca, 0x34, 0x1d, 0x98, - 0xb9, 0xe5, 0x86, 0xf1, 0x66, 0x30, 0x1c, 0x72, 0xb0, 0x1c, 0x96, 0xf0, 0x8a, 0x5b, 0xc3, 0x98, - 0x10, 0x14, 0x0f, 0x27, 0x87, 0xed, 0xdb, 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xe4, 0x96, 0x58, 0x78, - 0x02, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, 0x9d, 0x12, 0xc7, 0xfc, 0xa3, 0x0e, 0x8b, 0xb8, 0x76, - 0x6d, 0x62, 0x68, 0x38, 0x28, 0xf4, 0x22, 0x34, 0x71, 0xaa, 0x8a, 0xda, 0xef, 0xe4, 0xb3, 0x0d, - 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, 0xc1, 0x48, 0x0b, 0xdb, 0x33, 0xa3, 0x84, 0xd4, 0xc3, - 0x66, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, 0x45, 0x7d, 0x48, 0x69, 0x7e, 0x5c, 0x1d, 0x92, 0x24, - 0x77, 0x6e, 0x9e, 0xc1, 0xf2, 0x13, 0xe7, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, - 0x66, 0x87, 0x5c, 0x88, 0xc1, 0xf8, 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x69, 0xc2, 0x8d, 0xfc, 0x6b, - 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0xe6, 0xd6, - 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, 0x36, 0x44, 0xe6, 0xcf, 0x35, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, - 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, 0x8b, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, - 0x11, 0xb0, 0x8f, 0x71, 0x8e, 0x56, 0xc8, 0x48, 0x47, 0x22, 0x0d, 0xf9, 0x48, 0xc4, 0xfc, 0x40, - 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, - 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0xa1, 0x06, 0x17, 0xca, 0x6e, - 0x5d, 0xef, 0xf7, 0x59, 0xf8, 0x30, 0xa7, 0x94, 0x72, 0x24, 0x34, 0x55, 0x3a, 0x12, 0xaa, 0x35, - 0xd9, 0x62, 0x77, 0x58, 0xff, 0xd1, 0x35, 0xf9, 0x7b, 0x3a, 0x7c, 0xf2, 0x6a, 0x3e, 0xf1, 0x6e, - 0x45, 0xb6, 0x1f, 0xef, 0xb3, 0x28, 0x7a, 0x88, 0xf6, 0xde, 0x80, 0x39, 0x9f, 0xdd, 0x2d, 0x6c, - 0x12, 0xd3, 0x71, 0x5c, 0x35, 0xaa, 0xf0, 0x78, 0x6b, 0x97, 0xf9, 0x1f, 0x0d, 0x16, 0x49, 0xcf, - 0x5b, 0x6e, 0xff, 0xf0, 0x21, 0x0e, 0x7e, 0x07, 0xe6, 0x0f, 0xd1, 0x02, 0x4e, 0x4d, 0xb0, 0x6c, - 0x97, 0xa4, 0xc7, 0x1c, 0xfe, 0x7f, 0x35, 0x58, 0x22, 0x45, 0xd7, 0xfd, 0x63, 0xf7, 0x61, 0x06, - 0xeb, 0x2e, 0x2c, 0xb8, 0x64, 0xc2, 0x84, 0x0e, 0x28, 0x8b, 0x8f, 0xe9, 0x81, 0xdf, 0x68, 0xb0, - 0x40, 0x9a, 0xde, 0xf0, 0x13, 0x16, 0x4d, 0x3c, 0xfe, 0x6b, 0xd0, 0x61, 0x7e, 0x12, 0xd9, 0xfe, - 0x24, 0x2b, 0xa4, 0x2c, 0x3a, 0xe6, 0x22, 0xf9, 0x81, 0x06, 0x06, 0xaa, 0xda, 0x72, 0xe3, 0xa1, - 0x1b, 0xc7, 0x0f, 0x11, 0xba, 0xf1, 0x0c, 0xfe, 0x89, 0x0e, 0xe7, 0x25, 0x2d, 0xdb, 0x69, 0xf2, - 0xa8, 0x9b, 0x6c, 0x6c, 0x41, 0x9b, 0xd7, 0x08, 0xf2, 0x5d, 0xe3, 0xb8, 0x1d, 0x15, 0x82, 0xbc, - 0x8a, 0x45, 0xa2, 0xc7, 0xfa, 0x81, 0xef, 0xc4, 0x58, 0x1c, 0xcd, 0x59, 0x0a, 0x8f, 0x2f, 0x43, - 0x2b, 0x92, 0x9a, 0x4d, 0xdb, 0xef, 0x33, 0xef, 0xb1, 0x71, 0x91, 0xf9, 0x4b, 0x0d, 0xe6, 0xa9, - 0xc9, 0xa3, 0x3f, 0x64, 0x9e, 0xeb, 0x29, 0x90, 0x3f, 0x36, 0x28, 0xf1, 0xf0, 0x5a, 0x96, 0xb4, - 0xc8, 0x75, 0xf5, 0xa3, 0x1b, 0x5a, 0xd7, 0xa0, 0xd3, 0x3f, 0xb0, 0xfd, 0xc1, 0x44, 0xc1, 0x25, - 0x8b, 0x9a, 0x09, 0x3c, 0x29, 0x1f, 0xaf, 0x6f, 0xd2, 0x27, 0x1c, 0xfe, 0x4b, 0xa5, 0xa1, 0x9c, - 0xf8, 0x96, 0xe0, 0xc1, 0x9c, 0x7e, 0x08, 0x4b, 0x74, 0xa7, 0x2b, 0xd5, 0x84, 0x46, 0x17, 0xa6, - 0x6d, 0x87, 0x0e, 0x19, 0x34, 0x14, 0xca, 0x48, 0xf5, 0xb6, 0x5e, 0x3c, 0xc8, 0x2a, 0x6e, 0xeb, - 0x2f, 0x02, 0xd8, 0x8e, 0xf3, 0x4e, 0x10, 0x39, 0xae, 0x9f, 0x15, 0xf8, 0x12, 0xc7, 0x7c, 0x13, - 0x66, 0xaf, 0x44, 0xc1, 0xf0, 0x96, 0x74, 0x3b, 0x7b, 0xe2, 0xfd, 0xb1, 0x7c, 0xb3, 0xab, 0xab, - 0x37, 0xbb, 0xe6, 0x37, 0xe1, 0x89, 0x8a, 0xe1, 0xe8, 0xac, 0x4d, 0xba, 0x74, 0xce, 0x3a, 0x11, - 0x21, 0x53, 0x77, 0xea, 0x26, 0xdb, 0x62, 0x29, 0x42, 0xe6, 0x77, 0x35, 0x78, 0xaa, 0xa2, 0x7e, - 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, - 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, 0x88, 0x5f, 0x68, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, - 0xcb, 0xd0, 0xa2, 0x07, 0x2b, 0xa2, 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x1e, 0xda, 0x58, 0xa2, 0x71, - 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x52, 0x22, 0x04, 0xcc, 0xaf, - 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0x9e, 0x29, 0x7c, - 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, - 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, - 0x85, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0xd7, 0x84, 0x28, 0x92, 0x49, - 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, - 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, - 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0x3a, 0x08, - 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xb9, 0x32, 0xf2, 0x2a, 0xd1, - 0xec, 0xc1, 0x92, 0x78, 0x32, 0xb3, 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, - 0xc8, 0x9e, 0xcc, 0xd1, 0xa5, 0x98, 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, - 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, - 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, 0xde, 0x8f, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, - 0x03, 0x74, 0x89, 0x63, 0xfe, 0xb4, 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, - 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, 0xba, 0x03, 0x5d, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, - 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, - 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, - 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, - 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, - 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, - 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, - 0xe6, 0xfb, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, - 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, - 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, - 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, - 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd4, 0x61, 0x1e, 0x5d, 0x46, 0x77, 0xac, 0xfe, - 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x05, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, 0x60, - 0xd2, 0x65, 0x88, 0x8e, 0x97, 0x21, 0xd5, 0x0f, 0x78, 0xfd, 0x93, 0xc6, 0x49, 0x30, 0xdc, 0xb2, - 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x39, 0x37, 0x55, 0x79, 0xe3, 0x1d, 0x05, 0xc1, 0x30, - 0xbf, 0x75, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xaf, - 0xa4, 0x1c, 0xd7, 0xc6, 0x2b, 0x2d, 0xf1, 0x84, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xd1, 0x89, - 0x37, 0xd8, 0x05, 0xe7, 0xf4, 0xeb, 0x34, 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, - 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0x71, 0x0c, 0xca, 0x33, 0x4c, 0xed, 0xc1, 0x9e, 0x61, - 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x29, 0x6d, 0x3c, - 0xf0, 0x9b, 0x52, 0xf3, 0x07, 0x3a, 0x2c, 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, - 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, 0x59, 0x92, 0x50, 0xdd, 0x3d, 0x5d, 0x63, 0xf2, 0x7b, - 0xba, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, - 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, - 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x68, 0x5d, 0x90, 0xe6, 0x0f, 0x75, 0x58, 0xae, 0xcf, - 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, - 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xeb, 0xdc, 0x3f, 0x79, 0xa5, - 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xc3, 0x0e, 0x2a, 0x5c, 0x2b, 0xfc, - 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, 0xec, 0xef, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x58, - 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, - 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0xe5, - 0xe9, 0x99, 0x6e, 0x14, 0xcb, 0xef, 0xf3, 0xa6, 0xaa, 0xef, 0xf3, 0x36, 0x60, 0x5e, 0x36, 0x60, - 0x92, 0x97, 0x95, 0x1b, 0x17, 0xbe, 0xb1, 0x72, 0xe9, 0x79, 0xfa, 0x97, 0xe6, 0xab, 0x15, 0x27, - 0xee, 0xb5, 0xf0, 0x5f, 0x9b, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x59, 0x84, 0xce, - 0xc8, 0x39, 0x00, 0x00, -} diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 7c24f3078..e7fbfe7c5 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -238,6 +238,7 @@ message MsgData { map options = 18; OfflinePushInfo offlinePushInfo = 19; repeated string atUserIDList = 20; + repeated MsgData msgDataList = 21; } message OfflinePushInfo{ From 536d7e29570ef9cd8fccc886e04dc8e37ccabdc3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 10:32:21 +0800 Subject: [PATCH 407/752] ws pb --- pkg/proto/sdk_ws/ws.pb.go | 558 +++++++++++++++++++------------------- pkg/proto/sdk_ws/ws.proto | 1 + 2 files changed, 284 insertions(+), 275 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 6c768fcaa..184334751 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{0} + return fileDescriptor_ws_df70a2fd28b03292, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{1} + return fileDescriptor_ws_df70a2fd28b03292, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{2} + return fileDescriptor_ws_df70a2fd28b03292, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{3} + return fileDescriptor_ws_df70a2fd28b03292, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{4} + return fileDescriptor_ws_df70a2fd28b03292, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{5} + return fileDescriptor_ws_df70a2fd28b03292, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{6} + return fileDescriptor_ws_df70a2fd28b03292, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{7} + return fileDescriptor_ws_df70a2fd28b03292, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{8} + return fileDescriptor_ws_df70a2fd28b03292, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{9} + return fileDescriptor_ws_df70a2fd28b03292, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{10} + return fileDescriptor_ws_df70a2fd28b03292, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{11} + return fileDescriptor_ws_df70a2fd28b03292, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{12} + return fileDescriptor_ws_df70a2fd28b03292, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1279,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{13} + return fileDescriptor_ws_df70a2fd28b03292, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1338,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{14} + return fileDescriptor_ws_df70a2fd28b03292, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1376,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{15} + return fileDescriptor_ws_df70a2fd28b03292, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1417,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{16} + return fileDescriptor_ws_df70a2fd28b03292, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1478,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{17} + return fileDescriptor_ws_df70a2fd28b03292, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1531,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{18} + return fileDescriptor_ws_df70a2fd28b03292, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1580,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{19} + return fileDescriptor_ws_df70a2fd28b03292, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1648,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{20} + return fileDescriptor_ws_df70a2fd28b03292, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1709,6 +1709,7 @@ type MsgData struct { Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` + MsgDataList []*MsgData `protobuf:"bytes,21,rep,name=msgDataList" json:"msgDataList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1718,7 +1719,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{21} + return fileDescriptor_ws_df70a2fd28b03292, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1871,6 +1872,13 @@ func (m *MsgData) GetAtUserIDList() []string { return nil } +func (m *MsgData) GetMsgDataList() []*MsgData { + if m != nil { + return m.MsgDataList + } + return nil +} + type OfflinePushInfo struct { Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` Desc string `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"` @@ -1886,7 +1894,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{22} + return fileDescriptor_ws_df70a2fd28b03292, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1954,7 +1962,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{23} + return fileDescriptor_ws_df70a2fd28b03292, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2011,7 +2019,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{24} + return fileDescriptor_ws_df70a2fd28b03292, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2080,7 +2088,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{25} + return fileDescriptor_ws_df70a2fd28b03292, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2135,7 +2143,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{26} + return fileDescriptor_ws_df70a2fd28b03292, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2191,7 +2199,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{27} + return fileDescriptor_ws_df70a2fd28b03292, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2246,7 +2254,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{28} + return fileDescriptor_ws_df70a2fd28b03292, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2301,7 +2309,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{29} + return fileDescriptor_ws_df70a2fd28b03292, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2357,7 +2365,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{30} + return fileDescriptor_ws_df70a2fd28b03292, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2420,7 +2428,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{31} + return fileDescriptor_ws_df70a2fd28b03292, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2483,7 +2491,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{32} + return fileDescriptor_ws_df70a2fd28b03292, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2545,7 +2553,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{33} + return fileDescriptor_ws_df70a2fd28b03292, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2599,7 +2607,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{34} + return fileDescriptor_ws_df70a2fd28b03292, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2655,7 +2663,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{35} + return fileDescriptor_ws_df70a2fd28b03292, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2724,7 +2732,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{36} + return fileDescriptor_ws_df70a2fd28b03292, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2785,7 +2793,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{37} + return fileDescriptor_ws_df70a2fd28b03292, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2839,7 +2847,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{38} + return fileDescriptor_ws_df70a2fd28b03292, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2894,7 +2902,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{39} + return fileDescriptor_ws_df70a2fd28b03292, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2954,7 +2962,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{40} + return fileDescriptor_ws_df70a2fd28b03292, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3001,7 +3009,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{41} + return fileDescriptor_ws_df70a2fd28b03292, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3054,7 +3062,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{42} + return fileDescriptor_ws_df70a2fd28b03292, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3100,7 +3108,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{43} + return fileDescriptor_ws_df70a2fd28b03292, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3140,7 +3148,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{44} + return fileDescriptor_ws_df70a2fd28b03292, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3187,7 +3195,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{45} + return fileDescriptor_ws_df70a2fd28b03292, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3235,7 +3243,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{46} + return fileDescriptor_ws_df70a2fd28b03292, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3288,7 +3296,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{47} + return fileDescriptor_ws_df70a2fd28b03292, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3326,7 +3334,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{48} + return fileDescriptor_ws_df70a2fd28b03292, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3364,7 +3372,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{49} + return fileDescriptor_ws_df70a2fd28b03292, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3402,7 +3410,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{50} + return fileDescriptor_ws_df70a2fd28b03292, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3441,7 +3449,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{51} + return fileDescriptor_ws_df70a2fd28b03292, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3480,7 +3488,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{52} + return fileDescriptor_ws_df70a2fd28b03292, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3520,7 +3528,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{53} + return fileDescriptor_ws_df70a2fd28b03292, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3575,7 +3583,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{54} + return fileDescriptor_ws_df70a2fd28b03292, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3629,7 +3637,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{55} + return fileDescriptor_ws_df70a2fd28b03292, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3675,7 +3683,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{56} + return fileDescriptor_ws_df70a2fd28b03292, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3728,7 +3736,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{57} + return fileDescriptor_ws_df70a2fd28b03292, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3995,7 +4003,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{58} + return fileDescriptor_ws_df70a2fd28b03292, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4263,7 +4271,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{59} + return fileDescriptor_ws_df70a2fd28b03292, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4359,7 +4367,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{60} + return fileDescriptor_ws_df70a2fd28b03292, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4414,7 +4422,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{61} + return fileDescriptor_ws_df70a2fd28b03292, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4475,7 +4483,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{62} + return fileDescriptor_ws_df70a2fd28b03292, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4530,7 +4538,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{63} + return fileDescriptor_ws_df70a2fd28b03292, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4591,7 +4599,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{64} + return fileDescriptor_ws_df70a2fd28b03292, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4646,7 +4654,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{65} + return fileDescriptor_ws_df70a2fd28b03292, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4704,7 +4712,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{66} + return fileDescriptor_ws_df70a2fd28b03292, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4739,7 +4747,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{67} + return fileDescriptor_ws_df70a2fd28b03292, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4807,7 +4815,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{68} + return fileDescriptor_ws_df70a2fd28b03292, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4861,7 +4869,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{69} + return fileDescriptor_ws_df70a2fd28b03292, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4912,7 +4920,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{70} + return fileDescriptor_ws_df70a2fd28b03292, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4947,7 +4955,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{71} + return fileDescriptor_ws_df70a2fd28b03292, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5012,7 +5020,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{72} + return fileDescriptor_ws_df70a2fd28b03292, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5046,7 +5054,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{73} + return fileDescriptor_ws_df70a2fd28b03292, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5106,7 +5114,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{74} + return fileDescriptor_ws_df70a2fd28b03292, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5222,212 +5230,212 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_5ad487361de288a1) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_df70a2fd28b03292) } -var fileDescriptor_ws_5ad487361de288a1 = []byte{ - // 3252 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_df70a2fd28b03292 = []byte{ + // 3260 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, 0x28, 0x8a, 0x10, - 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x1c, 0x11, 0x17, 0xc4, 0x99, 0x2b, 0x07, 0x24, 0x24, - 0xd0, 0xab, 0x7a, 0xdd, 0xfd, 0x5e, 0x77, 0x8f, 0x3d, 0x3b, 0xb2, 0xb2, 0x1b, 0x2d, 0xb7, 0xa9, - 0xea, 0x57, 0xf5, 0xea, 0xd5, 0x57, 0xef, 0x55, 0xbd, 0x9f, 0x81, 0x85, 0xd8, 0x39, 0x7c, 0xef, + 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0x38, 0x80, 0xc4, 0x05, 0x81, 0xa2, 0x28, 0x42, + 0x20, 0x71, 0x40, 0x88, 0x03, 0x37, 0x2e, 0x70, 0x44, 0xdc, 0x38, 0x73, 0xe5, 0x80, 0x84, 0x04, + 0x7a, 0x55, 0xaf, 0xbb, 0xdf, 0xeb, 0xee, 0xb1, 0x67, 0x47, 0x56, 0x76, 0xa3, 0xe5, 0xe6, 0xaa, + 0x79, 0x55, 0xaf, 0xaa, 0xbe, 0x7a, 0xaf, 0xaa, 0xdf, 0x7b, 0x86, 0x85, 0xd8, 0x39, 0x7c, 0xef, 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, - 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x9f, 0x3b, 0xf6, 0x90, 0x75, 0x75, 0xfc, 0x56, 0x30, - 0x0c, 0x13, 0x66, 0xfd, 0x20, 0x71, 0xf7, 0xdd, 0xbe, 0x9d, 0xb8, 0x81, 0xdf, 0x6d, 0x60, 0x03, - 0x85, 0xc7, 0xdb, 0xb8, 0x7e, 0x12, 0x05, 0x4e, 0xda, 0xc7, 0x36, 0x53, 0xd4, 0x46, 0xe6, 0xf1, - 0xfe, 0xf7, 0xed, 0x3e, 0xbb, 0x6d, 0xdd, 0xe8, 0x36, 0xa9, 0x7f, 0x41, 0x1a, 0xab, 0xd0, 0x09, - 0xee, 0xfa, 0x2c, 0xba, 0x1d, 0xb3, 0xe8, 0xfa, 0x56, 0xb7, 0x85, 0x5f, 0x65, 0x96, 0x71, 0x11, - 0xa0, 0x1f, 0x31, 0x3b, 0x61, 0xb7, 0xdc, 0x21, 0xeb, 0x4e, 0xaf, 0x6a, 0xcf, 0xce, 0x59, 0x12, - 0x87, 0x6b, 0x18, 0xb2, 0xe1, 0x1e, 0x8b, 0x36, 0x83, 0xd4, 0x4f, 0xba, 0x33, 0xd8, 0x40, 0x66, - 0x19, 0xf3, 0xa0, 0xb3, 0x7b, 0xdd, 0x36, 0xaa, 0xd6, 0xd9, 0x3d, 0x63, 0x19, 0x5a, 0x71, 0x62, - 0x27, 0x69, 0xdc, 0x85, 0x55, 0xed, 0xd9, 0xa6, 0x25, 0x28, 0x63, 0x0d, 0xe6, 0x50, 0x6f, 0x90, - 0x59, 0xd3, 0x41, 0x11, 0x95, 0x99, 0x7b, 0xec, 0xd6, 0xfd, 0x90, 0x75, 0x67, 0x51, 0x41, 0xc1, - 0x30, 0xff, 0xaa, 0xc3, 0x39, 0xf4, 0xfb, 0x36, 0x1a, 0x70, 0x25, 0xf5, 0xbc, 0x53, 0x10, 0x58, - 0x86, 0x56, 0x4a, 0xdd, 0x91, 0xfb, 0x05, 0xc5, 0xfb, 0x89, 0x02, 0x8f, 0xdd, 0x60, 0xc7, 0xcc, - 0x43, 0xc7, 0x37, 0xad, 0x82, 0x61, 0xac, 0xc0, 0xcc, 0x9d, 0xc0, 0xf5, 0xd1, 0x27, 0x53, 0xf8, - 0x31, 0xa7, 0xf9, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, 0xb4, - 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0xea, 0x74, 0x1a, 0xf5, - 0x96, 0xb8, 0x1c, 0x0f, 0xde, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, 0xc3, - 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, 0x1c, - 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0x38, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, 0x7e, - 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, - 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, 0x28, - 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, 0x0f, - 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, 0x4a, - 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, 0x62, - 0x40, 0x33, 0xb9, 0xef, 0xd5, 0x39, 0xd6, 0xae, 0xcc, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, 0x98, - 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x72, 0x6b, 0xd5, 0xc9, 0xbd, - 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, 0xbd, - 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x59, 0x06, 0x2f, - 0x65, 0x28, 0x59, 0x52, 0x73, 0x3e, 0xb3, 0x6c, 0xc7, 0x11, 0x01, 0xdc, 0xa4, 0x99, 0x95, 0x33, - 0x6a, 0xe2, 0xb7, 0x75, 0x42, 0xfc, 0x4e, 0xe7, 0x41, 0xf1, 0x4f, 0x0d, 0xda, 0x1b, 0x9e, 0xdd, - 0x3f, 0x1c, 0x73, 0xe8, 0xea, 0x10, 0xf5, 0xca, 0x10, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0x0d, - 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x33, 0x35, 0xa3, 0x54, 0x27, 0x85, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, - 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, 0x87, 0xfb, 0x17, 0x1d, 0x66, 0x71, 0xa1, 0xb3, - 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, 0xd2, 0xcc, 0x54, 0x6d, 0x5c, 0x53, 0x73, 0x11, - 0xe3, 0x15, 0xb1, 0xac, 0xa2, 0xbc, 0x8e, 0xf2, 0x17, 0x6a, 0xe4, 0xf3, 0x9c, 0x66, 0x15, 0xcd, - 0x79, 0x0a, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, 0x8b, 0x53, 0x2f, 0x11, 0xab, 0xa5, 0xc2, 0xa3, - 0x48, 0x3b, 0xda, 0x8e, 0x07, 0x22, 0x41, 0x09, 0x8a, 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, - 0x82, 0xc1, 0x27, 0x6a, 0xc4, 0x8e, 0x10, 0x21, 0x9a, 0x56, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, - 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, 0x4c, 0x12, 0xa7, 0x9c, 0x98, 0xcc, 0xbf, - 0x35, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0x8b, 0x3c, 0xce, 0x83, 0xa1, 0x12, 0x45, 0x12, 0x87, - 0x5b, 0xc1, 0xa9, 0x1d, 0x75, 0xa1, 0x51, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x45, 0x59, 0x70, 0x64, - 0x56, 0xd6, 0xcb, 0x55, 0x79, 0xe1, 0x91, 0x38, 0x7c, 0x29, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, - 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, - 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x25, 0x39, 0x5d, 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, - 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0x52, 0xbd, - 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, 0xba, 0xf3, 0x23, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, - 0x95, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x86, 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, - 0x55, 0x78, 0x72, 0x9e, 0xd0, 0xd5, 0x3c, 0x61, 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, - 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, 0xe6, 0x79, 0x20, 0x88, 0x1c, 0x91, 0x39, 0x9a, - 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0x41, 0xd3, 0xa2, 0x75, 0x5d, 0xe5, 0x9e, 0x5a, 0x83, - 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x27, 0x1d, 0x8a, 0x70, 0xaf, 0xf0, 0xb9, 0x53, - 0xa9, 0x38, 0xe3, 0x8d, 0x28, 0xd5, 0x14, 0x8c, 0x72, 0x55, 0x60, 0xbe, 0xaf, 0xc3, 0xe2, 0xcd, - 0x68, 0x60, 0xfb, 0xee, 0xb7, 0xb1, 0xdc, 0xc4, 0x05, 0x7c, 0x92, 0x94, 0xbb, 0x0a, 0x1d, 0xe6, - 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x4a, 0xca, 0x4d, - 0x25, 0x29, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, - 0xc3, 0xec, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x12, 0xf5, 0x4c, 0x6d, 0xa2, 0x6e, 0xcb, 0x89, 0x5a, - 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0x83, 0x06, 0x8b, 0x85, 0xbb, 0xa9, - 0x06, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, - 0x69, 0x41, 0xec, 0x4a, 0xf5, 0x7e, 0x4e, 0xf3, 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, - 0xba, 0x5b, 0x4a, 0xd5, 0x5d, 0xce, 0xa3, 0xbf, 0xd5, 0xe0, 0x3c, 0x47, 0xb9, 0x32, 0x8c, 0x9b, - 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, - 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x4e, - 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x9e, 0x6f, 0xb8, - 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, - 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x1f, 0x2c, 0x76, 0x34, 0x32, - 0x86, 0x78, 0x9d, 0x83, 0x85, 0x82, 0x1b, 0xf8, 0x79, 0x08, 0xc9, 0x2c, 0x3e, 0xad, 0x62, 0xd2, - 0xd3, 0x6d, 0xac, 0x36, 0x78, 0x0a, 0x15, 0xa4, 0xf1, 0x2d, 0x98, 0xc5, 0x1c, 0x2e, 0xba, 0xe9, - 0x4e, 0xe1, 0x00, 0x5e, 0xab, 0xad, 0x1a, 0x6a, 0xad, 0xa2, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x49, - 0x74, 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x26, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, - 0x31, 0x0e, 0xfe, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, - 0xc2, 0x66, 0x8b, 0x1a, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x07, 0x26, 0x8f, 0x51, 0x53, - 0xc6, 0x68, 0xbe, 0x05, 0x9d, 0xed, 0x78, 0xb0, 0x65, 0x27, 0x36, 0x36, 0x7c, 0x0d, 0x3a, 0xc3, - 0x82, 0xc4, 0xc6, 0xf5, 0xfd, 0x09, 0x21, 0x4b, 0x6e, 0x6e, 0xfe, 0x59, 0x87, 0x6e, 0xbd, 0x2b, - 0xe2, 0x90, 0xdb, 0xc0, 0xa2, 0x68, 0x33, 0x70, 0x18, 0x0e, 0xad, 0x69, 0x65, 0x24, 0xc7, 0x8e, - 0x45, 0x11, 0xcf, 0x61, 0xa2, 0xc8, 0x26, 0xca, 0xb8, 0x04, 0x53, 0x5e, 0x06, 0xcb, 0xc9, 0x56, - 0x60, 0x3b, 0x63, 0x08, 0x8b, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xf5, 0xb1, 0x31, 0x8b, 0x43, - 0x02, 0x4d, 0xd2, 0x41, 0xc0, 0x55, 0x54, 0xaf, 0xf4, 0xe1, 0x89, 0xda, 0xa6, 0x35, 0x00, 0x7e, - 0x49, 0x05, 0xf0, 0xe2, 0xe8, 0xa1, 0x94, 0x41, 0x0c, 0xc1, 0xb8, 0xca, 0x92, 0x6d, 0xfb, 0xde, - 0xba, 0xef, 0x6c, 0xbb, 0x7e, 0x8f, 0x1d, 0xf1, 0x68, 0x5f, 0x85, 0x8e, 0xd8, 0x9e, 0xe7, 0x30, - 0xb5, 0x2d, 0x99, 0x35, 0x72, 0xd7, 0x5e, 0x9a, 0x0f, 0x8d, 0xca, 0x7c, 0x30, 0x2f, 0xc3, 0xac, - 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x5e, 0x8f, 0x1d, 0xe1, 0x80, 0xe6, 0x2c, 0x41, 0x21, 0x1f, 0x5b, - 0x88, 0xbd, 0x81, 0xa0, 0xcc, 0x3f, 0xe9, 0x70, 0xae, 0x62, 0x72, 0x1c, 0x3e, 0xa8, 0x1e, 0x39, - 0x5e, 0x1a, 0xa3, 0xe2, 0x65, 0x4a, 0x89, 0x97, 0x43, 0x58, 0x22, 0x90, 0xa4, 0xae, 0xbb, 0x4d, - 0x0c, 0x80, 0xd7, 0xeb, 0x4a, 0xf5, 0xaa, 0x91, 0x02, 0x7b, 0x89, 0x4b, 0xe0, 0x57, 0xf5, 0xae, - 0x30, 0x58, 0xae, 0x6f, 0x5c, 0x03, 0xff, 0xcb, 0x2a, 0xfc, 0x9f, 0xae, 0x83, 0x5f, 0xb6, 0x44, - 0xc2, 0xff, 0x08, 0x16, 0xf8, 0xa2, 0xda, 0x63, 0xbe, 0xb3, 0x1d, 0x0f, 0xd0, 0x91, 0xab, 0xd0, - 0x21, 0xf9, 0xed, 0x78, 0x50, 0x6c, 0xdd, 0x24, 0x16, 0x6f, 0xd1, 0xf7, 0x5c, 0xbe, 0x78, 0x62, - 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x9e, 0x20, 0x63, 0x26, 0x4e, 0x32, 0xb8, 0x77, 0x1b, 0x56, 0x4e, - 0x9b, 0x7f, 0x6f, 0xc2, 0xb4, 0x88, 0x46, 0x4c, 0x8a, 0x7c, 0xb7, 0x9c, 0x2f, 0xab, 0x44, 0x51, - 0x5d, 0xdb, 0x3f, 0x2e, 0xc2, 0x8b, 0x28, 0xf9, 0x18, 0xa9, 0xa1, 0x1e, 0x23, 0x95, 0x6c, 0x9a, - 0xaa, 0xda, 0x54, 0x1a, 0x57, 0xb3, 0x3a, 0x2e, 0x5e, 0xc6, 0x61, 0x65, 0xb3, 0xeb, 0xd9, 0xc9, - 0x7e, 0x10, 0x0d, 0xc5, 0xe6, 0xb7, 0x69, 0x55, 0xf8, 0xbc, 0x74, 0x24, 0x5e, 0x5e, 0xfb, 0x53, - 0x0a, 0x2f, 0x71, 0x79, 0xa5, 0x4d, 0x9c, 0x6c, 0x0f, 0x40, 0xa7, 0x0e, 0x2a, 0x93, 0x6c, 0x8b, - 0x63, 0x37, 0xf0, 0xb1, 0x0a, 0xa5, 0x52, 0x5f, 0x66, 0xf1, 0x91, 0x0f, 0xe3, 0xc1, 0x95, 0x28, - 0x18, 0x8a, 0xb3, 0x87, 0x8c, 0xc4, 0x91, 0x07, 0x7e, 0x92, 0x55, 0xb0, 0x1d, 0x92, 0x95, 0x58, - 0x5c, 0x56, 0x90, 0x58, 0xe7, 0xcf, 0x5a, 0x19, 0xc9, 0x63, 0x29, 0x66, 0x47, 0xa2, 0x78, 0xe7, - 0x3f, 0x15, 0xe4, 0x16, 0x54, 0xe4, 0x4a, 0xd5, 0xd8, 0x22, 0x7e, 0x95, 0xab, 0xb1, 0xa2, 0xc4, - 0x59, 0x52, 0x4a, 0x9c, 0x75, 0x98, 0x0e, 0x42, 0x3e, 0xfd, 0xe3, 0xae, 0x81, 0xd3, 0xe5, 0xb3, - 0xa3, 0x17, 0xa8, 0x4b, 0x37, 0xa9, 0x25, 0x4d, 0x8c, 0x4c, 0xce, 0xb8, 0x01, 0x0b, 0xc1, 0xfe, - 0xbe, 0xe7, 0xfa, 0x6c, 0x37, 0x8d, 0x0f, 0x70, 0x93, 0x7c, 0x0e, 0x83, 0xdd, 0xac, 0x2b, 0x22, - 0xd4, 0x96, 0x56, 0x59, 0x94, 0x57, 0x7e, 0x76, 0x42, 0x9b, 0x1c, 0x5c, 0xe0, 0xce, 0xe3, 0x02, - 0xa7, 0xf0, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0x94, 0x9a, 0x69, 0x77, 0x5e, 0x9e, 0x76, 0x33, 0xf2, - 0xac, 0xfa, 0x91, 0x06, 0x0b, 0x25, 0x23, 0x78, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, - 0xf7, 0x31, 0x0e, 0x8b, 0xfb, 0x22, 0xcc, 0xf1, 0xb7, 0xa8, 0x08, 0x1b, 0xf9, 0xe9, 0x94, 0x09, - 0xb3, 0xee, 0xcd, 0x1e, 0x57, 0xd4, 0x0b, 0x52, 0xdf, 0xc9, 0x4f, 0x98, 0x25, 0x1e, 0x0f, 0x33, - 0xf7, 0x66, 0x6f, 0xc3, 0x76, 0x06, 0x8c, 0xce, 0x81, 0x9b, 0x68, 0x93, 0xca, 0x34, 0x1d, 0x98, - 0xb9, 0xe5, 0x86, 0xf1, 0x66, 0x30, 0x1c, 0x72, 0xb0, 0x1c, 0x96, 0xf0, 0x8a, 0x5b, 0xc3, 0x98, - 0x10, 0x14, 0x0f, 0x27, 0x87, 0xed, 0xdb, 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xe4, 0x96, 0x58, 0x78, - 0x02, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, 0x9d, 0x12, 0xc7, 0xfc, 0xa3, 0x0e, 0x8b, 0xb8, 0x76, - 0x6d, 0x62, 0x68, 0x38, 0x28, 0xf4, 0x22, 0x34, 0x71, 0xaa, 0x8a, 0xda, 0xef, 0xe4, 0xb3, 0x0d, - 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, 0xc1, 0x48, 0x0b, 0xdb, 0x33, 0xa3, 0x84, 0xd4, 0xc3, - 0x66, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, 0x45, 0x7d, 0x48, 0x69, 0x7e, 0x5c, 0x1d, 0x92, 0x24, - 0x77, 0x6e, 0x9e, 0xc1, 0xf2, 0x13, 0xe7, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, - 0x66, 0x87, 0x5c, 0x88, 0xc1, 0xf8, 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x69, 0xc2, 0x8d, 0xfc, 0x6b, - 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0xe6, 0xd6, - 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, 0x36, 0x44, 0xe6, 0xcf, 0x35, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, - 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, 0x8b, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, - 0x11, 0xb0, 0x8f, 0x71, 0x8e, 0x56, 0xc8, 0x48, 0x47, 0x22, 0x0d, 0xf9, 0x48, 0xc4, 0xfc, 0x40, - 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, - 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0xa1, 0x06, 0x17, 0xca, 0x6e, - 0x5d, 0xef, 0xf7, 0x59, 0xf8, 0x30, 0xa7, 0x94, 0x72, 0x24, 0x34, 0x55, 0x3a, 0x12, 0xaa, 0x35, - 0xd9, 0x62, 0x77, 0x58, 0xff, 0xd1, 0x35, 0xf9, 0x7b, 0x3a, 0x7c, 0xf2, 0x6a, 0x3e, 0xf1, 0x6e, - 0x45, 0xb6, 0x1f, 0xef, 0xb3, 0x28, 0x7a, 0x88, 0xf6, 0xde, 0x80, 0x39, 0x9f, 0xdd, 0x2d, 0x6c, - 0x12, 0xd3, 0x71, 0x5c, 0x35, 0xaa, 0xf0, 0x78, 0x6b, 0x97, 0xf9, 0x1f, 0x0d, 0x16, 0x49, 0xcf, - 0x5b, 0x6e, 0xff, 0xf0, 0x21, 0x0e, 0x7e, 0x07, 0xe6, 0x0f, 0xd1, 0x02, 0x4e, 0x4d, 0xb0, 0x6c, - 0x97, 0xa4, 0xc7, 0x1c, 0xfe, 0x7f, 0x35, 0x58, 0x22, 0x45, 0xd7, 0xfd, 0x63, 0xf7, 0x61, 0x06, - 0xeb, 0x2e, 0x2c, 0xb8, 0x64, 0xc2, 0x84, 0x0e, 0x28, 0x8b, 0x8f, 0xe9, 0x81, 0xdf, 0x68, 0xb0, - 0x40, 0x9a, 0xde, 0xf0, 0x13, 0x16, 0x4d, 0x3c, 0xfe, 0x6b, 0xd0, 0x61, 0x7e, 0x12, 0xd9, 0xfe, - 0x24, 0x2b, 0xa4, 0x2c, 0x3a, 0xe6, 0x22, 0xf9, 0x81, 0x06, 0x06, 0xaa, 0xda, 0x72, 0xe3, 0xa1, - 0x1b, 0xc7, 0x0f, 0x11, 0xba, 0xf1, 0x0c, 0xfe, 0x89, 0x0e, 0xe7, 0x25, 0x2d, 0xdb, 0x69, 0xf2, - 0xa8, 0x9b, 0x6c, 0x6c, 0x41, 0x9b, 0xd7, 0x08, 0xf2, 0x5d, 0xe3, 0xb8, 0x1d, 0x15, 0x82, 0xbc, - 0x8a, 0x45, 0xa2, 0xc7, 0xfa, 0x81, 0xef, 0xc4, 0x58, 0x1c, 0xcd, 0x59, 0x0a, 0x8f, 0x2f, 0x43, - 0x2b, 0x92, 0x9a, 0x4d, 0xdb, 0xef, 0x33, 0xef, 0xb1, 0x71, 0x91, 0xf9, 0x4b, 0x0d, 0xe6, 0xa9, - 0xc9, 0xa3, 0x3f, 0x64, 0x9e, 0xeb, 0x29, 0x90, 0x3f, 0x36, 0x28, 0xf1, 0xf0, 0x5a, 0x96, 0xb4, - 0xc8, 0x75, 0xf5, 0xa3, 0x1b, 0x5a, 0xd7, 0xa0, 0xd3, 0x3f, 0xb0, 0xfd, 0xc1, 0x44, 0xc1, 0x25, - 0x8b, 0x9a, 0x09, 0x3c, 0x29, 0x1f, 0xaf, 0x6f, 0xd2, 0x27, 0x1c, 0xfe, 0x4b, 0xa5, 0xa1, 0x9c, - 0xf8, 0x96, 0xe0, 0xc1, 0x9c, 0x7e, 0x08, 0x4b, 0x74, 0xa7, 0x2b, 0xd5, 0x84, 0x46, 0x17, 0xa6, - 0x6d, 0x87, 0x0e, 0x19, 0x34, 0x14, 0xca, 0x48, 0xf5, 0xb6, 0x5e, 0x3c, 0xc8, 0x2a, 0x6e, 0xeb, - 0x2f, 0x02, 0xd8, 0x8e, 0xf3, 0x4e, 0x10, 0x39, 0xae, 0x9f, 0x15, 0xf8, 0x12, 0xc7, 0x7c, 0x13, - 0x66, 0xaf, 0x44, 0xc1, 0xf0, 0x96, 0x74, 0x3b, 0x7b, 0xe2, 0xfd, 0xb1, 0x7c, 0xb3, 0xab, 0xab, - 0x37, 0xbb, 0xe6, 0x37, 0xe1, 0x89, 0x8a, 0xe1, 0xe8, 0xac, 0x4d, 0xba, 0x74, 0xce, 0x3a, 0x11, - 0x21, 0x53, 0x77, 0xea, 0x26, 0xdb, 0x62, 0x29, 0x42, 0xe6, 0x77, 0x35, 0x78, 0xaa, 0xa2, 0x7e, - 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, - 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, 0x88, 0x5f, 0x68, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, - 0xcb, 0xd0, 0xa2, 0x07, 0x2b, 0xa2, 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x1e, 0xda, 0x58, 0xa2, 0x71, - 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x52, 0x22, 0x04, 0xcc, 0xaf, - 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0x9e, 0x29, 0x7c, - 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, - 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, - 0x85, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0xd7, 0x84, 0x28, 0x92, 0x49, - 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, - 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, - 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0x3a, 0x08, - 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xb9, 0x32, 0xf2, 0x2a, 0xd1, - 0xec, 0xc1, 0x92, 0x78, 0x32, 0xb3, 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, - 0xc8, 0x9e, 0xcc, 0xd1, 0xa5, 0x98, 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, - 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, - 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, 0xde, 0x8f, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, - 0x03, 0x74, 0x89, 0x63, 0xfe, 0xb4, 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, - 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, 0xba, 0x03, 0x5d, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, - 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, - 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, - 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, - 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, - 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, - 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, - 0xe6, 0xfb, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, - 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, - 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, - 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, - 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd4, 0x61, 0x1e, 0x5d, 0x46, 0x77, 0xac, 0xfe, - 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x05, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, 0x60, - 0xd2, 0x65, 0x88, 0x8e, 0x97, 0x21, 0xd5, 0x0f, 0x78, 0xfd, 0x93, 0xc6, 0x49, 0x30, 0xdc, 0xb2, - 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x39, 0x37, 0x55, 0x79, 0xe3, 0x1d, 0x05, 0xc1, 0x30, - 0xbf, 0x75, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xaf, - 0xa4, 0x1c, 0xd7, 0xc6, 0x2b, 0x2d, 0xf1, 0x84, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xd1, 0x89, - 0x37, 0xd8, 0x05, 0xe7, 0xf4, 0xeb, 0x34, 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, - 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0x71, 0x0c, 0xca, 0x33, 0x4c, 0xed, 0xc1, 0x9e, 0x61, - 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x29, 0x6d, 0x3c, - 0xf0, 0x9b, 0x52, 0xf3, 0x07, 0x3a, 0x2c, 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, - 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, 0x59, 0x92, 0x50, 0xdd, 0x3d, 0x5d, 0x63, 0xf2, 0x7b, - 0xba, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, - 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, - 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x68, 0x5d, 0x90, 0xe6, 0x0f, 0x75, 0x58, 0xae, 0xcf, - 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, - 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xeb, 0xdc, 0x3f, 0x79, 0xa5, - 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xc3, 0x0e, 0x2a, 0x5c, 0x2b, 0xfc, - 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, 0xec, 0xef, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x58, - 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, - 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0xe5, - 0xe9, 0x99, 0x6e, 0x14, 0xcb, 0xef, 0xf3, 0xa6, 0xaa, 0xef, 0xf3, 0x36, 0x60, 0x5e, 0x36, 0x60, - 0x92, 0x97, 0x95, 0x1b, 0x17, 0xbe, 0xb1, 0x72, 0xe9, 0x79, 0xfa, 0x97, 0xe6, 0xab, 0x15, 0x27, - 0xee, 0xb5, 0xf0, 0x5f, 0x9b, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x59, 0x84, 0xce, - 0xc8, 0x39, 0x00, 0x00, + 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x3f, 0x77, 0xec, 0x21, 0xeb, 0xea, 0xf8, 0x5b, 0xc1, + 0x30, 0x4c, 0x98, 0xf5, 0x83, 0xc4, 0xdd, 0x77, 0xfb, 0x76, 0xe2, 0x06, 0x7e, 0xb7, 0x81, 0x03, + 0x14, 0x1e, 0x1f, 0xe3, 0xfa, 0x49, 0x14, 0x38, 0x69, 0x1f, 0xc7, 0x4c, 0xd1, 0x18, 0x99, 0xc7, + 0xe7, 0xdf, 0xb7, 0xfb, 0xec, 0xb6, 0x75, 0xa3, 0xdb, 0xa4, 0xf9, 0x05, 0x69, 0xac, 0x42, 0x27, + 0xb8, 0xeb, 0xb3, 0xe8, 0x76, 0xcc, 0xa2, 0xeb, 0x5b, 0xdd, 0x16, 0xfe, 0x2a, 0xb3, 0x8c, 0x8b, + 0x00, 0xfd, 0x88, 0xd9, 0x09, 0xbb, 0xe5, 0x0e, 0x59, 0x77, 0x7a, 0x55, 0x7b, 0x76, 0xce, 0x92, + 0x38, 0x5c, 0xc3, 0x90, 0x0d, 0xf7, 0x58, 0xb4, 0x19, 0xa4, 0x7e, 0xd2, 0x9d, 0xc1, 0x01, 0x32, + 0xcb, 0x98, 0x07, 0x9d, 0xdd, 0xeb, 0xb6, 0x51, 0xb5, 0xce, 0xee, 0x19, 0xcb, 0xd0, 0x8a, 0x13, + 0x3b, 0x49, 0xe3, 0x2e, 0xac, 0x6a, 0xcf, 0x36, 0x2d, 0x41, 0x19, 0x6b, 0x30, 0x87, 0x7a, 0x83, + 0xcc, 0x9a, 0x0e, 0x8a, 0xa8, 0xcc, 0x3c, 0x62, 0xb7, 0xee, 0x87, 0xac, 0x3b, 0x8b, 0x0a, 0x0a, + 0x86, 0xf9, 0x37, 0x1d, 0xce, 0x61, 0xdc, 0xb7, 0xd1, 0x80, 0x2b, 0xa9, 0xe7, 0x9d, 0x82, 0xc0, + 0x32, 0xb4, 0x52, 0x9a, 0x8e, 0xc2, 0x2f, 0x28, 0x3e, 0x4f, 0x14, 0x78, 0xec, 0x06, 0x3b, 0x66, + 0x1e, 0x06, 0xbe, 0x69, 0x15, 0x0c, 0x63, 0x05, 0x66, 0xee, 0x04, 0xae, 0x8f, 0x31, 0x99, 0xc2, + 0x1f, 0x73, 0x9a, 0xff, 0xe6, 0xbb, 0xfd, 0x43, 0x9f, 0x43, 0x4a, 0xe1, 0xce, 0x69, 0x19, 0x89, + 0x96, 0x8a, 0xc4, 0x33, 0x30, 0x6f, 0x87, 0xe1, 0xb6, 0xed, 0x0f, 0x58, 0x44, 0x93, 0x4e, 0xa3, + 0xde, 0x12, 0x97, 0xe3, 0xc1, 0x67, 0xea, 0x05, 0x69, 0xd4, 0x67, 0x18, 0xee, 0xa6, 0x25, 0x71, + 0xb8, 0x9e, 0x20, 0x64, 0x91, 0x14, 0x46, 0x8a, 0x7c, 0x89, 0x2b, 0x50, 0x81, 0x1c, 0x15, 0x8e, + 0x63, 0x9a, 0xb0, 0x37, 0x7c, 0x07, 0x9d, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x7d, 0x0d, 0xe6, + 0x77, 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0x1e, 0xd6, 0x22, 0x78, 0x9a, 0x12, 0x3c, 0x39, 0x04, + 0xfa, 0xe8, 0x10, 0x34, 0xd4, 0x10, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0x22, 0xa4, 0x82, + 0x12, 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x1f, 0xeb, 0x30, 0xf3, 0x11, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, + 0x20, 0xf0, 0xd9, 0x4e, 0xca, 0xd3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, + 0xe4, 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, + 0x1c, 0x9a, 0xc9, 0x63, 0xaf, 0xae, 0xb1, 0x76, 0x65, 0x8d, 0x55, 0x73, 0x03, 0xea, 0x72, 0xc3, + 0xfc, 0xb7, 0x06, 0x70, 0x25, 0x72, 0x99, 0xef, 0x60, 0x68, 0x4a, 0x8b, 0x5b, 0xab, 0x2e, 0xee, + 0x65, 0x68, 0x45, 0x6c, 0x68, 0x47, 0x87, 0x59, 0xf2, 0x13, 0x55, 0x32, 0xa8, 0x51, 0x31, 0xe8, + 0x55, 0x80, 0x7d, 0x9c, 0x87, 0xeb, 0xc1, 0x50, 0x75, 0x5e, 0xfc, 0xd4, 0xa5, 0xca, 0x36, 0x78, + 0x29, 0x43, 0xc9, 0x92, 0x86, 0xf3, 0x95, 0x65, 0x3b, 0x8e, 0x48, 0xe0, 0x26, 0xad, 0xac, 0x9c, + 0x51, 0x93, 0xbf, 0xad, 0x13, 0xf2, 0x77, 0x3a, 0x4f, 0x8a, 0x7f, 0x6a, 0xd0, 0xde, 0xf0, 0xec, + 0xfe, 0xe1, 0x98, 0xae, 0xab, 0x2e, 0xea, 0x15, 0x17, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0xb9, + 0x80, 0x51, 0xe8, 0xbc, 0xf8, 0x99, 0x1a, 0x2f, 0xd5, 0x45, 0x61, 0xa9, 0x72, 0xaa, 0xbb, 0x53, + 0xa7, 0xbb, 0xdb, 0x3c, 0xc1, 0xdd, 0x56, 0xee, 0xee, 0x5f, 0x75, 0x98, 0xc5, 0x8d, 0xce, 0x62, + 0x47, 0x29, 0x8b, 0x13, 0xe3, 0x75, 0x98, 0x49, 0x33, 0x53, 0xb5, 0x71, 0x4d, 0xcd, 0x45, 0x8c, + 0x57, 0xc4, 0xb6, 0x8a, 0xf2, 0x3a, 0xca, 0x5f, 0xa8, 0x91, 0xcf, 0x6b, 0x9a, 0x55, 0x0c, 0xe7, + 0x25, 0xe8, 0xc0, 0xf6, 0x1d, 0x8f, 0x59, 0x2c, 0x4e, 0xbd, 0x44, 0xec, 0x96, 0x0a, 0x8f, 0x32, + 0xed, 0x68, 0x3b, 0x1e, 0x88, 0x02, 0x25, 0x28, 0x1e, 0x1d, 0x1a, 0xc7, 0x7f, 0x22, 0xd7, 0x0b, + 0x06, 0x5f, 0xa8, 0x11, 0x3b, 0x42, 0x84, 0x68, 0x59, 0x65, 0x64, 0x31, 0xa7, 0x88, 0x1a, 0x25, + 0x82, 0xc2, 0xe3, 0x10, 0x13, 0x8d, 0x0a, 0xa8, 0x32, 0x49, 0x9c, 0x72, 0x61, 0x32, 0xff, 0xde, + 0x80, 0x39, 0x5a, 0x3e, 0x59, 0x50, 0x2f, 0xf2, 0x3c, 0x0f, 0x86, 0x4a, 0x16, 0x49, 0x1c, 0x6e, + 0x05, 0xa7, 0x76, 0xd4, 0x8d, 0x46, 0xe1, 0xf1, 0x54, 0xe4, 0xf4, 0x15, 0x65, 0xc3, 0x91, 0x59, + 0xd9, 0x2c, 0x57, 0xe5, 0x8d, 0x47, 0xe2, 0xf0, 0xad, 0x2c, 0x09, 0x94, 0xec, 0xc8, 0x69, 0x2e, + 0x9b, 0x04, 0xf9, 0xfc, 0x94, 0x1f, 0x12, 0x87, 0xc7, 0x37, 0x09, 0xb2, 0xb9, 0x29, 0x48, 0x05, + 0x83, 0x34, 0x8b, 0x79, 0xa9, 0x94, 0xe4, 0x74, 0x05, 0xd5, 0xf6, 0x89, 0xa8, 0x82, 0x82, 0xaa, + 0xba, 0xb8, 0x3a, 0x95, 0xc5, 0xb5, 0x06, 0x73, 0xa4, 0x27, 0x4b, 0xfa, 0x59, 0x2a, 0xf5, 0x0a, + 0x53, 0xcd, 0x8d, 0xb9, 0x72, 0x6e, 0xa8, 0xe8, 0xce, 0x8f, 0x40, 0x77, 0x21, 0x47, 0xf7, 0xd7, + 0x3a, 0xc0, 0x16, 0x0b, 0xed, 0x28, 0x19, 0x32, 0x3f, 0xe1, 0xee, 0x39, 0x39, 0x95, 0x83, 0xab, + 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x0c, 0x38, 0xa1, 0x89, 0x7f, 0xf3, 0x60, + 0x86, 0x76, 0x44, 0xda, 0x28, 0xc9, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, 0x5a, + 0x44, 0xf0, 0xc5, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf6, 0x75, 0x95, 0x7b, 0x6a, 0x0f, 0xf6, + 0x1c, 0x2c, 0xc6, 0xe9, 0x5e, 0xe1, 0xdc, 0x4e, 0x3a, 0x14, 0xe9, 0x5e, 0xe1, 0xf3, 0xa0, 0x52, + 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, 0xd1, + 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x1b, 0xf8, 0x24, 0x25, 0x77, 0x15, 0x3a, 0xcc, 0x1f, + 0x78, 0x6e, 0x7c, 0xb0, 0x53, 0xc4, 0x4d, 0x66, 0xc9, 0xc1, 0x9e, 0x1a, 0x55, 0x94, 0x9b, 0x4a, + 0x51, 0x5e, 0x86, 0xd6, 0x30, 0xd8, 0x73, 0xbd, 0x2c, 0xef, 0x05, 0x85, 0x39, 0xcf, 0x3c, 0x86, + 0xd5, 0x39, 0xcf, 0xf9, 0x8c, 0x51, 0x14, 0xea, 0x99, 0xda, 0x42, 0xdd, 0x96, 0x0b, 0xb5, 0x1a, + 0x78, 0xa8, 0x04, 0x9e, 0xc2, 0xd5, 0xc9, 0xc3, 0xf5, 0x47, 0x0d, 0x16, 0x8b, 0x70, 0x53, 0x0f, + 0x3a, 0x32, 0x5c, 0xe5, 0x0c, 0xd4, 0x6b, 0x32, 0x30, 0xcf, 0x9b, 0x86, 0x9c, 0x37, 0x3c, 0xd3, + 0x82, 0xd8, 0x95, 0xfa, 0xfd, 0x9c, 0xe6, 0xb3, 0x79, 0xcc, 0x96, 0x82, 0x45, 0x94, 0xd4, 0x75, + 0xb7, 0x94, 0xae, 0xbb, 0x5c, 0x47, 0x7f, 0xa7, 0xc1, 0x79, 0x8e, 0x72, 0xc5, 0x8d, 0x9b, 0xb0, + 0x18, 0x94, 0x32, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x69, 0xac, 0x8a, 0x30, 0x57, + 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, 0x83, + 0x45, 0x2a, 0x6d, 0xd2, 0x3a, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, 0x71, + 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xaf, 0xb5, 0x27, 0x77, 0x53, 0xcf, 0xdb, + 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, 0x0e, + 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x14, 0x92, 0x59, 0x7c, 0x59, 0xc5, 0xa4, 0xa7, + 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, 0x9d, + 0x42, 0x07, 0x5e, 0xab, 0xed, 0x1a, 0x6a, 0xad, 0xa2, 0x6e, 0x40, 0xd0, 0x6f, 0xf8, 0x49, 0x74, + 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x21, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, 0xe1, + 0x07, 0xff, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, 0xc2, + 0x66, 0x8b, 0x06, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x1d, 0x93, 0x7d, 0xd4, 0x14, 0x1f, + 0xcd, 0xb7, 0xa0, 0xb3, 0x1d, 0x0f, 0xb6, 0xec, 0xc4, 0xc6, 0x81, 0xaf, 0x41, 0x67, 0x58, 0x90, + 0x38, 0xb8, 0x7e, 0x3e, 0x21, 0x64, 0xc9, 0xc3, 0xcd, 0xbf, 0xe8, 0xd0, 0xad, 0x0f, 0x45, 0x1c, + 0x72, 0x1b, 0x58, 0x14, 0x6d, 0x06, 0x0e, 0x43, 0xd7, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, 0x14, + 0xf1, 0x1a, 0x26, 0x9a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, 0x8e, + 0x33, 0x86, 0xb0, 0x88, 0xd1, 0x95, 0x1c, 0x12, 0x98, 0xad, 0x8f, 0x8d, 0x59, 0x1c, 0x12, 0x68, + 0x92, 0x0e, 0x02, 0xae, 0xa2, 0x7a, 0xa5, 0x0f, 0x4f, 0xd4, 0x0e, 0xad, 0x01, 0xf0, 0x4b, 0x2a, + 0x80, 0x17, 0x47, 0xbb, 0x52, 0x06, 0x31, 0x04, 0xe3, 0x2a, 0x4b, 0xb6, 0xed, 0x7b, 0xeb, 0xbe, + 0xb3, 0xed, 0xfa, 0x3d, 0x76, 0xc4, 0xb3, 0x7d, 0x15, 0x3a, 0xe2, 0xf3, 0x3c, 0x87, 0xa9, 0x6d, + 0xc9, 0xac, 0x91, 0x5f, 0xed, 0xa5, 0xf5, 0xd0, 0xa8, 0xac, 0x07, 0xf3, 0x32, 0xcc, 0xca, 0xd3, + 0x61, 0x11, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x3a, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0x38, 0x42, 0x7c, + 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xf3, 0xa5, + 0x31, 0x2a, 0x5f, 0xa6, 0x94, 0x7c, 0x39, 0x84, 0x25, 0x02, 0x49, 0x9a, 0xba, 0xdb, 0xc4, 0x04, + 0x78, 0xbd, 0xae, 0x55, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, 0x83, + 0xe5, 0xfa, 0xc1, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xe9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, 0xfc, + 0x8f, 0x60, 0x81, 0x6f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x03, 0xb9, 0x0a, 0x1d, 0x92, + 0xdf, 0x8e, 0x07, 0xc5, 0xa7, 0x9b, 0xc4, 0xe2, 0x23, 0xfa, 0x9e, 0xcb, 0x37, 0x4f, 0x1c, 0x21, + 0x36, 0x3d, 0x89, 0xc5, 0x0b, 0x64, 0xcc, 0xc4, 0x49, 0x06, 0x8f, 0x6e, 0xc3, 0xca, 0x69, 0xf3, + 0xa7, 0x2d, 0x98, 0x16, 0xd9, 0x88, 0x45, 0x91, 0x7f, 0x2d, 0xe7, 0xdb, 0x2a, 0x51, 0xd4, 0xd7, + 0xf6, 0x8f, 0x8b, 0xf4, 0x22, 0x4a, 0x3e, 0x46, 0x6a, 0xa8, 0xc7, 0x48, 0x25, 0x9b, 0xa6, 0xaa, + 0x36, 0x95, 0xfc, 0x6a, 0x56, 0xfd, 0xe2, 0x6d, 0x1c, 0x76, 0x36, 0xbb, 0x9e, 0x9d, 0xec, 0x07, + 0xd1, 0x50, 0x7c, 0xfc, 0x36, 0xad, 0x0a, 0x9f, 0xb7, 0x8e, 0xc4, 0xcb, 0x7b, 0x7f, 0x2a, 0xe1, + 0x25, 0x2e, 0xef, 0xb4, 0x89, 0x93, 0x7d, 0x03, 0xd0, 0xa9, 0x83, 0xca, 0x24, 0xdb, 0xe2, 0xd8, + 0x0d, 0x7c, 0xec, 0x42, 0xa9, 0xd5, 0x97, 0x59, 0xdc, 0xf3, 0x61, 0x3c, 0xb8, 0x12, 0x05, 0x43, + 0x71, 0xf6, 0x90, 0x91, 0xe8, 0x79, 0xe0, 0x27, 0x59, 0x07, 0xdb, 0x21, 0x59, 0x89, 0xc5, 0x65, + 0x05, 0x89, 0x7d, 0xfe, 0xac, 0x95, 0x91, 0x3c, 0x97, 0x62, 0x76, 0x24, 0x9a, 0x77, 0xfe, 0xa7, + 0x82, 0xdc, 0x82, 0x8a, 0x5c, 0xa9, 0x1b, 0x5b, 0xc4, 0x5f, 0xe5, 0x6e, 0xac, 0x68, 0x71, 0x96, + 0x94, 0x16, 0x67, 0x1d, 0xa6, 0x83, 0x90, 0x2f, 0xff, 0xb8, 0x6b, 0xe0, 0x72, 0xf9, 0xec, 0xe8, + 0x0d, 0xea, 0xd2, 0x4d, 0x1a, 0x49, 0x0b, 0x23, 0x93, 0x33, 0x6e, 0xc0, 0x42, 0xb0, 0xbf, 0xef, + 0xb9, 0x3e, 0xdb, 0x4d, 0xe3, 0x03, 0xfc, 0x48, 0x3e, 0x87, 0xc9, 0x6e, 0xd6, 0x35, 0x11, 0xea, + 0x48, 0xab, 0x2c, 0xca, 0x3b, 0x3f, 0x3b, 0xa1, 0x8f, 0x1c, 0xdc, 0xe0, 0xce, 0xe3, 0x06, 0xa7, + 0xf0, 0xca, 0xa5, 0xea, 0x89, 0x07, 0x2a, 0x55, 0x2b, 0xaf, 0xc0, 0xac, 0xec, 0x48, 0xcd, 0xa2, + 0x3d, 0x2f, 0x2f, 0xda, 0x19, 0x79, 0x4d, 0xfe, 0x48, 0x83, 0x85, 0x92, 0x0b, 0x7c, 0x74, 0xe2, + 0x26, 0x1e, 0x13, 0x1a, 0x88, 0xe0, 0x5f, 0x41, 0x0e, 0x8b, 0xfb, 0x62, 0x91, 0xe0, 0xdf, 0xa2, + 0x9f, 0x6c, 0xe4, 0x67, 0x5b, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, 0x48, 0x7d, 0x27, + 0x3f, 0x9f, 0x96, 0x78, 0x3c, 0x49, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, 0x3a, 0x45, 0x6e, + 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, 0xc8, 0xa1, 0x76, + 0x58, 0xc2, 0xfb, 0x75, 0x0d, 0x33, 0x4a, 0x50, 0x3c, 0x19, 0x1d, 0xb6, 0x6f, 0xa7, 0x5e, 0xc2, + 0x87, 0x66, 0x5b, 0x83, 0xc4, 0xc2, 0xf3, 0xd3, 0x38, 0xf0, 0xb7, 0x48, 0x9a, 0xec, 0x94, 0x38, + 0xe6, 0x9f, 0x74, 0x58, 0xc4, 0x9d, 0x6f, 0x13, 0x13, 0xcb, 0x41, 0xa1, 0x17, 0xa1, 0x89, 0x0b, + 0x5d, 0x74, 0x8e, 0x27, 0x9f, 0x8c, 0xd0, 0x50, 0xe3, 0x32, 0xb4, 0x82, 0x10, 0xdb, 0x4d, 0xda, + 0x16, 0x9f, 0x19, 0x25, 0xa4, 0x1e, 0x55, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0xba, 0x4b, + 0x6a, 0x12, 0xc6, 0xd5, 0x21, 0x49, 0xf2, 0xe0, 0xe6, 0xf5, 0x2f, 0x3f, 0xaf, 0x6e, 0x58, 0x2a, + 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, 0x66, 0x76, 0x44, 0x86, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, + 0xfc, 0xb9, 0x26, 0xc2, 0xc8, 0x7f, 0xed, 0x31, 0x8a, 0x7d, 0x11, 0x12, 0x6d, 0xa2, 0x90, 0xac, + 0xc0, 0xcc, 0x30, 0x95, 0x4e, 0xec, 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, + 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x97, 0x2a, 0x13, 0x63, + 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, 0x4f, 0x04, 0xec, 0x63, 0x9c, 0xc2, 0x15, 0x32, 0xd2, 0x81, + 0x4a, 0x43, 0x3e, 0x50, 0x31, 0x3f, 0xd0, 0x60, 0x9e, 0x82, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, + 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, 0x4c, 0x90, 0x95, 0xb9, 0x5c, 0x35, 0x9f, 0x1a, 0x35, 0xf9, + 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0x72, 0x58, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x25, 0xa5, 0x1c, + 0x28, 0x4d, 0x95, 0x0e, 0x94, 0x6a, 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, + 0x0e, 0x9f, 0xbc, 0x9a, 0x2f, 0xbc, 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, + 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, 0x9b, 0xc4, 0x72, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0xde, 0xde, + 0x65, 0xfe, 0x47, 0x83, 0x45, 0xd2, 0xf3, 0x96, 0xdb, 0x3f, 0x7c, 0x88, 0xce, 0xef, 0xc0, 0xfc, + 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xb6, 0xed, 0x92, 0xf4, 0x98, 0xee, 0xff, 0x57, 0x83, 0x25, 0x52, + 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, 0xb2, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0x18, 0x80, 0xb2, + 0xf8, 0x98, 0x11, 0xf8, 0xad, 0x06, 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xfe, 0x5f, + 0x83, 0x0e, 0xf3, 0x93, 0xc8, 0xf6, 0x27, 0xd9, 0x21, 0x65, 0xd1, 0x31, 0x37, 0xc9, 0x0f, 0x34, + 0x30, 0x50, 0xd5, 0x96, 0x1b, 0x0f, 0xdd, 0x38, 0x7e, 0x88, 0xd0, 0x8d, 0x67, 0xf0, 0x4f, 0x74, + 0x38, 0x2f, 0x69, 0xd9, 0x4e, 0x93, 0x47, 0xdd, 0x64, 0x63, 0x0b, 0xda, 0xbc, 0x47, 0x90, 0x6f, + 0x2a, 0xc7, 0x9d, 0xa8, 0x10, 0xe4, 0x5d, 0x2c, 0x12, 0x3d, 0xd6, 0x0f, 0x7c, 0x27, 0xc6, 0xe6, + 0x68, 0xce, 0x52, 0x78, 0x7c, 0x1b, 0x5a, 0x91, 0xd4, 0x6c, 0xda, 0x7e, 0x9f, 0x79, 0x8f, 0x4d, + 0x88, 0xcc, 0x5f, 0x69, 0x30, 0x4f, 0x43, 0x1e, 0x7d, 0x97, 0x79, 0xad, 0xa7, 0x44, 0xfe, 0xd8, + 0xa0, 0xc4, 0xd3, 0x6b, 0x59, 0xd2, 0x22, 0xf7, 0xd5, 0x8f, 0x6e, 0x6a, 0x5d, 0x83, 0x4e, 0xff, + 0xc0, 0xf6, 0x07, 0x13, 0x25, 0x97, 0x2c, 0x6a, 0x26, 0xf0, 0xa4, 0x7c, 0x38, 0xbf, 0x49, 0x3f, + 0xa1, 0xfb, 0x2f, 0x95, 0x5c, 0x39, 0xf1, 0x25, 0xc2, 0x83, 0x05, 0xfd, 0x10, 0x96, 0xe8, 0x46, + 0x58, 0xea, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x51, 0x68, 0x28, 0x94, 0x91, 0xea, 0x5d, + 0xbf, 0x78, 0xce, 0x55, 0xdc, 0xf5, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, + 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x6e, 0xf7, 0xc4, + 0xdb, 0x67, 0xf9, 0x5e, 0x58, 0x57, 0xef, 0x85, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0x31, 0x58, + 0x9b, 0x74, 0x65, 0x9d, 0x4d, 0x22, 0x52, 0xa6, 0xee, 0xcc, 0x4e, 0xb6, 0xc5, 0x52, 0x84, 0xcc, + 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, + 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, + 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, 0x97, 0xa1, 0x45, 0xcf, 0x5d, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, + 0x98, 0x3d, 0xd3, 0xb1, 0xc4, 0xe0, 0x6a, 0x46, 0xea, 0x75, 0x2b, 0xea, 0x2b, 0x79, 0xb2, 0x8f, + 0xfd, 0x20, 0x45, 0x08, 0x98, 0x5f, 0xcf, 0x92, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x63, 0x64, 0xde, + 0x86, 0x79, 0x7c, 0x7b, 0x53, 0xc4, 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, + 0xcd, 0x57, 0x07, 0x8f, 0x8f, 0xbc, 0x95, 0x9c, 0x89, 0xf6, 0x2f, 0xc2, 0xb9, 0x2c, 0xf6, 0xb7, + 0x43, 0x27, 0x3f, 0x44, 0x1a, 0x71, 0x87, 0x67, 0xbe, 0x00, 0xcb, 0x9b, 0x81, 0x7f, 0xcc, 0xa2, + 0x98, 0x2e, 0x19, 0x51, 0x24, 0x93, 0x50, 0x16, 0xbf, 0xa0, 0xcc, 0x3b, 0xb0, 0x22, 0x4b, 0xf4, + 0x58, 0xb2, 0x1b, 0xb9, 0xc7, 0x92, 0x94, 0x38, 0xbc, 0xd6, 0x94, 0xc3, 0xeb, 0xe2, 0xb0, 0x5b, + 0x57, 0x0e, 0xbb, 0x2f, 0x40, 0xdb, 0x8d, 0x85, 0x02, 0x4c, 0xaa, 0x19, 0xab, 0x60, 0x98, 0x36, + 0x2c, 0x51, 0xf8, 0xc5, 0x65, 0x12, 0x4e, 0xb1, 0x02, 0x33, 0x94, 0x53, 0xf9, 0x24, 0x39, 0x3d, + 0xf2, 0x6a, 0x66, 0xe4, 0x45, 0xa4, 0xd9, 0x83, 0x25, 0xf1, 0xe0, 0x66, 0xd7, 0x1e, 0xb8, 0x3e, + 0x6d, 0xb2, 0x17, 0x01, 0x42, 0x7b, 0x90, 0x3d, 0xb8, 0xa3, 0x2b, 0x35, 0x89, 0xc3, 0x7f, 0x8f, + 0x0f, 0x82, 0xbb, 0xe2, 0x77, 0x9d, 0x7e, 0x2f, 0x38, 0xe6, 0xd7, 0xc0, 0xb0, 0x58, 0x1c, 0x06, + 0x7e, 0xcc, 0x24, 0xad, 0xab, 0xd0, 0xd9, 0x4c, 0xa3, 0x88, 0xf9, 0x7c, 0xaa, 0xec, 0xf5, 0x99, + 0xcc, 0xe2, 0x7a, 0x7b, 0x85, 0x5e, 0x3a, 0x7e, 0x97, 0x38, 0xe6, 0xcf, 0x1a, 0xd0, 0xee, 0xb9, + 0x03, 0xdf, 0xf6, 0x2c, 0x76, 0x64, 0xbc, 0x06, 0x2d, 0xfa, 0x64, 0x11, 0x99, 0x52, 0x77, 0x1c, + 0x4c, 0xa3, 0xe9, 0xdb, 0xcc, 0x62, 0x47, 0xd7, 0x3e, 0x61, 0x09, 0x19, 0xe3, 0x6d, 0x98, 0xa3, + 0xbf, 0xae, 0xd3, 0x11, 0x94, 0xa8, 0x5f, 0x9f, 0x3b, 0x45, 0x89, 0x18, 0x4d, 0xba, 0x54, 0x0d, + 0xdc, 0xa0, 0x3e, 0xb6, 0x34, 0x62, 0x7b, 0x18, 0x6d, 0x10, 0x75, 0x3e, 0xc2, 0x20, 0x92, 0xe1, + 0xd2, 0x36, 0x1e, 0xd2, 0x88, 0x4a, 0x3d, 0x5a, 0x9a, 0xce, 0x72, 0x84, 0x34, 0xc9, 0x70, 0xe9, + 0x83, 0xd4, 0x1f, 0xdc, 0x0e, 0xc5, 0xd9, 0xe1, 0x68, 0xe9, 0x6b, 0x38, 0x4c, 0x48, 0x93, 0x0c, + 0x97, 0x8e, 0x70, 0xf3, 0xc6, 0xa0, 0x9f, 0x24, 0x4d, 0x7b, 0xbc, 0x90, 0x26, 0x99, 0x8d, 0x36, + 0x4c, 0x87, 0xf6, 0x7d, 0x2f, 0xb0, 0x1d, 0xf3, 0xfd, 0x06, 0x40, 0x36, 0x30, 0xc6, 0x46, 0x47, + 0x81, 0x68, 0xed, 0x54, 0x88, 0x42, 0xef, 0xbe, 0x04, 0x52, 0xaf, 0x1e, 0xa4, 0xcf, 0x8f, 0x0b, + 0x12, 0x69, 0x2b, 0xc1, 0x74, 0xb9, 0x04, 0xd3, 0xda, 0xa9, 0x30, 0x09, 0xa3, 0x04, 0x50, 0x97, + 0x4b, 0x40, 0xad, 0x9d, 0x0a, 0x94, 0x90, 0x17, 0x50, 0x5d, 0x2e, 0x41, 0xb5, 0x76, 0x2a, 0x54, + 0x42, 0x5e, 0x80, 0x75, 0xb9, 0x04, 0xd6, 0xda, 0xa9, 0x60, 0x09, 0xf9, 0x2a, 0x5c, 0x1f, 0xea, + 0x30, 0x8f, 0x21, 0xa3, 0x1b, 0x5a, 0x7f, 0x3f, 0xc0, 0xfb, 0x00, 0x0c, 0x97, 0xfa, 0x7e, 0x53, + 0x65, 0x1a, 0x5f, 0x80, 0x25, 0x62, 0x30, 0xe9, 0x2a, 0x45, 0xc7, 0xab, 0x94, 0xea, 0x0f, 0x78, + 0x79, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x6b, 0xbe, 0x0a, 0x8e, 0x7c, 0xb5, 0x37, + 0x55, 0x79, 0x21, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0xb3, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, + 0xd2, 0x44, 0x6c, 0x13, 0x19, 0x49, 0x6f, 0xac, 0x1c, 0xd7, 0xc6, 0x0b, 0x31, 0xf1, 0x00, 0x29, + 0x67, 0xe0, 0xce, 0x56, 0x5c, 0xf0, 0x89, 0x17, 0xdc, 0x05, 0xe7, 0xf4, 0xcb, 0x38, 0xf3, 0x1f, + 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0xd1, 0x07, + 0xe5, 0x11, 0xa7, 0xf6, 0x60, 0x8f, 0x38, 0x77, 0x61, 0x61, 0xa0, 0x7e, 0x5d, 0x3c, 0xe0, 0x87, + 0x41, 0x59, 0x5c, 0x79, 0x91, 0xda, 0x78, 0xe0, 0x17, 0xa9, 0xe6, 0x0f, 0x74, 0x58, 0x28, 0x6d, + 0x9d, 0x27, 0xd6, 0x9d, 0x75, 0x00, 0x37, 0x4f, 0xa3, 0x13, 0x0e, 0xdf, 0xd5, 0x5c, 0xb3, 0x24, + 0xa1, 0xba, 0x5b, 0xbe, 0xc6, 0xe4, 0xb7, 0x7c, 0xd7, 0xa0, 0x13, 0x16, 0x20, 0x9d, 0xf0, 0xed, + 0x53, 0x03, 0xa5, 0x25, 0x8b, 0x9a, 0xef, 0xc2, 0x52, 0x65, 0x87, 0xc2, 0x2b, 0xb9, 0xe0, 0x90, + 0xf9, 0xf9, 0x95, 0x1c, 0x27, 0xa4, 0x64, 0xd5, 0xcb, 0xc9, 0xea, 0xb9, 0xc7, 0xf2, 0x93, 0x77, + 0x41, 0x9a, 0x3f, 0xd4, 0x61, 0xb9, 0xbe, 0xba, 0x3c, 0xae, 0xe1, 0xde, 0x83, 0xee, 0xa8, 0x9d, + 0xfc, 0xcc, 0xa2, 0x5e, 0x64, 0x77, 0x5e, 0x87, 0x1f, 0xd7, 0x70, 0x9f, 0xcb, 0xb2, 0x5b, 0x2a, + 0x75, 0xe6, 0x6f, 0xf2, 0xf8, 0xe4, 0x9d, 0xc6, 0x63, 0x1a, 0x1f, 0xe3, 0x39, 0x58, 0x24, 0x37, + 0xa5, 0x67, 0x21, 0xd4, 0xb8, 0x56, 0xf8, 0xc5, 0x4e, 0x21, 0x95, 0xfd, 0x33, 0xcb, 0xd9, 0x3f, + 0x68, 0x19, 0x26, 0x79, 0xff, 0xf6, 0xb1, 0xc2, 0xa4, 0xc8, 0x34, 0xa9, 0xa9, 0x91, 0x32, 0x2d, + 0xef, 0x2b, 0xff, 0x9f, 0x69, 0xa7, 0x67, 0x5a, 0x1e, 0x4b, 0xa9, 0xc1, 0x33, 0xbf, 0x03, 0x73, + 0x5b, 0xcc, 0xdb, 0x8e, 0x07, 0xd9, 0xbb, 0xd5, 0x33, 0xfd, 0x50, 0x2c, 0xbf, 0xee, 0x9b, 0xaa, + 0xbe, 0xee, 0xdb, 0x80, 0x79, 0xd9, 0x80, 0x49, 0xde, 0x65, 0x6e, 0x5c, 0xf8, 0xc6, 0xca, 0xa5, + 0xe7, 0xe9, 0x7f, 0x3c, 0x5f, 0xad, 0x04, 0x71, 0xaf, 0x85, 0xff, 0xf3, 0xf9, 0xd2, 0xff, 0x02, + 0x00, 0x00, 0xff, 0xff, 0xbb, 0xd4, 0xa8, 0x81, 0x06, 0x3a, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 7c24f3078..e7fbfe7c5 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -238,6 +238,7 @@ message MsgData { map options = 18; OfflinePushInfo offlinePushInfo = 19; repeated string atUserIDList = 20; + repeated MsgData msgDataList = 21; } message OfflinePushInfo{ From 276328e0fda0b0cceaa74f732d945112d46b5cfd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:05:57 +0800 Subject: [PATCH 408/752] fix bug --- config/config.yaml | 24 +++++++++++++ internal/api/manage/management_chat.go | 2 +- internal/rpc/group/group.go | 11 +++++- internal/rpc/msg/conversation_notification.go | 6 ---- internal/rpc/msg/group_notification.go | 27 ++++++++++++++- internal/rpc/msg/send_msg.go | 3 ++ pkg/common/config/config.go | 10 ++++++ pkg/common/constant/constant.go | 34 ++++++++++--------- 8 files changed, 92 insertions(+), 25 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index e11407c5c..628192e4f 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -481,6 +481,30 @@ notification: defaultTips: tips: "group member info set" + groupMemberSetToOrdinaryUser: + conversation: + reliabilityLevel: 3 + unreadCount: false + offlinePush: + switch: false + title: "groupMemberSetToOrdinaryUser title" + desc: "groupMemberSetToOrdinaryUser desc" + ext: "groupMemberSetToOrdinaryUser ext" + defaultTips: + tips: "was set to ordinaryUser" + + groupMemberSetToAdmin: + conversation: + reliabilityLevel: 3 + unreadCount: false + offlinePush: + switch: false + title: "groupMemberSetToAdmin title" + desc: "groupMemberSetToAdmin desc" + ext: "groupMemberSetToAdmin ext" + defaultTips: + tips: "was set to admin" + #############################organization################################# organizationChanged: conversation: diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 22835fcd0..5519135b3 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -266,7 +266,7 @@ func ManagementBatchSendMsg(c *gin.Context) { continue } if rpcResp.ErrCode != 0 { - log.NewError(params.OperationID, utils.GetSelfFuncName(), "rpc failed", pbData) + log.NewError(params.OperationID, utils.GetSelfFuncName(), "rpc failed", pbData, rpcResp) resp.Data.FailedIDList = append(resp.Data.FailedIDList, recvID) continue } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 60127c425..d8567bcc4 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1648,7 +1648,16 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg + ":" + err.Error() return resp, nil } - chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) + if req.RoleLevel != nil { + switch req.RoleLevel.Value { + case constant.GroupOrdinaryUsers: + chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification) + case constant.GroupAdmin, constant.GroupOwner: + chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification) + } + } else { + chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) + } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/internal/rpc/msg/conversation_notification.go b/internal/rpc/msg/conversation_notification.go index 5c39ea06a..b43db7959 100644 --- a/internal/rpc/msg/conversation_notification.go +++ b/internal/rpc/msg/conversation_notification.go @@ -49,12 +49,6 @@ func ConversationSetPrivateNotification(operationID, sendID, recvID string, isPr } var tips open_im_sdk.TipsComm var tipsMsg string - //var senderName string - //senderName, err := im_mysql_model.GetUserNameByUserID(sendID) - //if err != nil { - // log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) - // senderName = sendID - //} if isPrivateChat == true { tipsMsg = config.Config.Notification.ConversationSetPrivate.DefaultTips.OpenTips } else { diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index e8a29b117..83ee39ba3 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -170,7 +170,10 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv tips.DefaultTips = toNickname + "" + cn.GroupMemberCancelMuted.DefaultTips.Tips case constant.GroupMemberInfoSetNotification: tips.DefaultTips = toNickname + "" + cn.GroupMemberInfoSet.DefaultTips.Tips - + case constant.GroupMemberSetToAdminNotification: + tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToAdmin.DefaultTips.Tips + case constant.GroupMemberSetToOrdinaryUserNotification: + tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToOrdinary.DefaultTips.Tips default: log.Error(operationID, "contentType failed ", contentType) return @@ -311,6 +314,28 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU groupNotification(constant.GroupMemberInfoSetNotification, &tips, opUserID, groupID, "", operationID) } +func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { + if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupOrdinaryUsers { + log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) + return + } + tips := open_im_sdk.GroupMemberInfoSetTips{Group: &open_im_sdk.GroupInfo{}, + OpUser: &open_im_sdk.GroupMemberFullInfo{}, ChangedUser: &open_im_sdk.GroupMemberFullInfo{}} + if err := setGroupInfo(groupID, tips.Group); err != nil { + log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID) + return + } + if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil { + log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID) + return + } + if err := setGroupMemberInfo(groupID, groupMemberUserID, tips.ChangedUser); err != nil { + log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID) + return + } + groupNotification(notificationType, &tips, opUserID, groupID, "", operationID) +} + func GroupMemberCancelMutedNotification(operationID, opUserID, groupID, groupMemberUserID string) { tips := open_im_sdk.GroupMemberCancelMutedTips{Group: &open_im_sdk.GroupInfo{}, OpUser: &open_im_sdk.GroupMemberFullInfo{}, MutedUser: &open_im_sdk.GroupMemberFullInfo{}} diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index b38e573e2..72d737453 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -51,6 +51,9 @@ type MsgCallBackResp struct { func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { if data.MsgData.SessionType == constant.SingleChatType { + if utils.IsContain(data.MsgData.SendID, config.Config.Manager.AppManagerUid) { + return true, 0, "" + } log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 2b9a4d891..8250199a7 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -339,6 +339,16 @@ type config struct { OfflinePush POfflinePush `yaml:"offlinePush"` DefaultTips PDefaultTips `yaml:"defaultTips"` } `yaml:"groupMemberInfoSet"` + GroupMemberSetToAdmin struct { + Conversation PConversation `yaml:"conversation"` + OfflinePush POfflinePush `yaml:"offlinePush"` + DefaultTips PDefaultTips `yaml:"defaultTips"` + } `yaml:"groupMemberSetToAdmin"` + GroupMemberSetToOrdinary struct { + Conversation PConversation `yaml:"conversation"` + OfflinePush POfflinePush `yaml:"offlinePush"` + DefaultTips PDefaultTips `yaml:"defaultTips"` + } `yaml:"groupMemberSetToOrdinaryUser"` OrganizationChanged struct { Conversation PConversation `yaml:"conversation"` OfflinePush POfflinePush `yaml:"offlinePush"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 1e23ebefa..bae1f15b9 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -67,22 +67,24 @@ const ( GroupNotificationBegin = 1500 - GroupCreatedNotification = 1501 - GroupInfoSetNotification = 1502 - JoinGroupApplicationNotification = 1503 - MemberQuitNotification = 1504 - GroupApplicationAcceptedNotification = 1505 - GroupApplicationRejectedNotification = 1506 - GroupOwnerTransferredNotification = 1507 - MemberKickedNotification = 1508 - MemberInvitedNotification = 1509 - MemberEnterNotification = 1510 - GroupDismissedNotification = 1511 - GroupMemberMutedNotification = 1512 - GroupMemberCancelMutedNotification = 1513 - GroupMutedNotification = 1514 - GroupCancelMutedNotification = 1515 - GroupMemberInfoSetNotification = 1516 + GroupCreatedNotification = 1501 + GroupInfoSetNotification = 1502 + JoinGroupApplicationNotification = 1503 + MemberQuitNotification = 1504 + GroupApplicationAcceptedNotification = 1505 + GroupApplicationRejectedNotification = 1506 + GroupOwnerTransferredNotification = 1507 + MemberKickedNotification = 1508 + MemberInvitedNotification = 1509 + MemberEnterNotification = 1510 + GroupDismissedNotification = 1511 + GroupMemberMutedNotification = 1512 + GroupMemberCancelMutedNotification = 1513 + GroupMutedNotification = 1514 + GroupCancelMutedNotification = 1515 + GroupMemberInfoSetNotification = 1516 + GroupMemberSetToAdminNotification = 1517 + GroupMemberSetToOrdinaryUserNotification = 1518 SignalingNotificationBegin = 1600 SignalingNotification = 1601 From e9655ed05e1f23af3a0f1db0a94a29a166c48d23 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:15:56 +0800 Subject: [PATCH 409/752] fix bug --- internal/rpc/msg/group_notification.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 83ee39ba3..6b68df319 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -315,7 +315,7 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU } func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { - if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupOrdinaryUsers { + if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupMemberSetToOrdinaryUserNotification { log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) return } From 4a55842724785eed917a163740e3560dc72c9433 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:26:31 +0800 Subject: [PATCH 410/752] fix bug --- internal/rpc/msg/group_notification.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 6b68df319..63532fe6b 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -314,8 +314,8 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU groupNotification(constant.GroupMemberInfoSetNotification, &tips, opUserID, groupID, "", operationID) } -func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { - if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupMemberSetToOrdinaryUserNotification { +func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int) { + if notificationType != constant.GroupMemberSetToAdminNotification && notificationType != constant.GroupMemberSetToOrdinaryUserNotification { log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) return } From 5d2c981368b923795e9ac35ec7668b5ce6b6ec5b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:27:50 +0800 Subject: [PATCH 411/752] fix bug --- internal/rpc/msg/group_notification.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 63532fe6b..1b511dd0d 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -314,7 +314,7 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU groupNotification(constant.GroupMemberInfoSetNotification, &tips, opUserID, groupID, "", operationID) } -func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int) { +func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { if notificationType != constant.GroupMemberSetToAdminNotification && notificationType != constant.GroupMemberSetToOrdinaryUserNotification { log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) return From fa5f234a38b5401b60e9a67d4a61e4889fc71492 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:40:33 +0800 Subject: [PATCH 412/752] fix bug --- internal/rpc/group/group.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 60ef2b4dd..fb42fe609 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1645,9 +1645,11 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr if req.RoleLevel != nil { switch req.RoleLevel.Value { case constant.GroupOrdinaryUsers: - chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification) + //chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification) + chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) case constant.GroupAdmin, constant.GroupOwner: - chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification) + //chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification) + chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) } } else { chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) From a4f69351cef7fb03a8cc05cc65790e8ce5825d9d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 16:46:21 +0800 Subject: [PATCH 413/752] fix bug --- internal/rpc/group/super_group.go | 2 +- pkg/common/db/mongoModel.go | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 949e92a91..ca57bbb4f 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -40,7 +40,7 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. groupInfo.MemberCount = uint32(len(group.MemberIDList)) resp.GroupList = append(resp.GroupList, groupInfo) } - log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index e57b291d4..4576c26b5 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -964,9 +964,6 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, } defer session.EndSession(ctx) sCtx := mongo.NewSessionContext(ctx, session) - if err != nil { - return utils.Wrap(err, "start transaction failed") - } superGroup := SuperGroup{ GroupID: groupID, MemberIDList: initMemberIDList, @@ -987,12 +984,10 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, Upsert: &upsert, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - for _, userID := range initMemberIDList { - _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") - } + _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") } session.CommitTransaction(ctx) return err @@ -1099,15 +1094,15 @@ func (d *DataBases) DeleteSuperGroup(groupID string) error { return nil } -func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID string, userID []string) error { +func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID string, userIDList []string) error { var users []UserToSuperGroup - for _, v := range userID { + for _, v := range userIDList { users = append(users, UserToSuperGroup{ UserID: v, }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": bson.M{"$in": userID}}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": bson.M{"$in": userIDList}}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From 731263638be1f77d1633d03e9ed76bc78f1cb08a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 16:53:58 +0800 Subject: [PATCH 414/752] log --- internal/msg_transfer/logic/persistent_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index 245634d84..83ca7bd12 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -34,7 +34,7 @@ func (pc *PersistentConsumerHandler) Init() { func (pc *PersistentConsumerHandler) handleChatWs2Mysql(cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) { msg := cMsg.Value - log.NewInfo("msg come here mysql!!!", "", "msg", string(msg)) + log.NewInfo("msg come here mysql!!!", "", "msg", string(msg), msgKey) var tag bool msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) @@ -71,7 +71,7 @@ func (PersistentConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { func (pc *PersistentConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { for msg := range claim.Messages() { - log.NewDebug("", "kafka get info to mysql", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) + log.NewDebug("", "kafka get info to mysql", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) pc.msgHandle[msg.Topic](msg, string(msg.Key), sess) sess.MarkMessage(msg, "") } From 26771ee7d09e7599a4d1697871f0a5a986838987 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 17:07:16 +0800 Subject: [PATCH 415/752] organization --- internal/demo/register/onboarding_process.go | 1 + internal/rpc/organization/organization.go | 28 +-- pkg/proto/organization/organization.pb.go | 178 ++++++++++--------- pkg/proto/organization/organization.proto | 1 + 4 files changed, 110 insertions(+), 98 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 8c43bc221..d92ea2c6a 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -51,6 +51,7 @@ func createOrganizationUser(operationID, userID, userName string) error { }, OperationID: operationID, OpUserID: userID, + IsRegister: false, } if strings.Contains("@", userID) { req.OrganizationUser.Email = userID diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 02523c35e..7b97087c4 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -221,21 +221,21 @@ func (s *organizationServer) CreateOrganizationUser(ctx context.Context, req *rp authReq := &pbAuth.UserRegisterReq{UserInfo: &open_im_sdk.UserInfo{}} utils.CopyStructFields(authReq.UserInfo, req.OrganizationUser) authReq.OperationID = req.OperationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) - client := pbAuth.NewAuthClient(etcdConn) - - reply, err := client.UserRegister(context.Background(), authReq) - if err != nil { - errMsg := "UserRegister failed " + err.Error() - log.NewError(req.OperationID, errMsg) - return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + if req.IsRegister { + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + client := pbAuth.NewAuthClient(etcdConn) + reply, err := client.UserRegister(context.Background(), authReq) + if err != nil { + errMsg := "UserRegister failed " + err.Error() + log.NewError(req.OperationID, errMsg) + return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + if reply.CommonResp.ErrCode != 0 { + errMsg := "UserRegister failed " + reply.CommonResp.ErrMsg + log.NewError(req.OperationID, errMsg) + return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } } - if reply.CommonResp.ErrCode != 0 { - errMsg := "UserRegister failed " + reply.CommonResp.ErrMsg - log.NewError(req.OperationID, errMsg) - return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil - } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) if !token_verify.IsManagerUserID(req.OpUserID) { errMsg := req.OperationID + " " + req.OpUserID + " is not app manager" diff --git a/pkg/proto/organization/organization.pb.go b/pkg/proto/organization/organization.pb.go index 803c23fad..4aec922db 100644 --- a/pkg/proto/organization/organization.pb.go +++ b/pkg/proto/organization/organization.pb.go @@ -37,7 +37,7 @@ func (m *CreateDepartmentReq) Reset() { *m = CreateDepartmentReq{} } func (m *CreateDepartmentReq) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentReq) ProtoMessage() {} func (*CreateDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{0} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{0} } func (m *CreateDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentReq.Unmarshal(m, b) @@ -91,7 +91,7 @@ func (m *CreateDepartmentResp) Reset() { *m = CreateDepartmentResp{} } func (m *CreateDepartmentResp) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentResp) ProtoMessage() {} func (*CreateDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{1} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{1} } func (m *CreateDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentResp.Unmarshal(m, b) @@ -145,7 +145,7 @@ func (m *UpdateDepartmentReq) Reset() { *m = UpdateDepartmentReq{} } func (m *UpdateDepartmentReq) String() string { return proto.CompactTextString(m) } func (*UpdateDepartmentReq) ProtoMessage() {} func (*UpdateDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{2} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{2} } func (m *UpdateDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateDepartmentReq.Unmarshal(m, b) @@ -198,7 +198,7 @@ func (m *UpdateDepartmentResp) Reset() { *m = UpdateDepartmentResp{} } func (m *UpdateDepartmentResp) String() string { return proto.CompactTextString(m) } func (*UpdateDepartmentResp) ProtoMessage() {} func (*UpdateDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{3} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{3} } func (m *UpdateDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateDepartmentResp.Unmarshal(m, b) @@ -245,7 +245,7 @@ func (m *GetSubDepartmentReq) Reset() { *m = GetSubDepartmentReq{} } func (m *GetSubDepartmentReq) String() string { return proto.CompactTextString(m) } func (*GetSubDepartmentReq) ProtoMessage() {} func (*GetSubDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{4} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{4} } func (m *GetSubDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSubDepartmentReq.Unmarshal(m, b) @@ -299,7 +299,7 @@ func (m *GetSubDepartmentResp) Reset() { *m = GetSubDepartmentResp{} } func (m *GetSubDepartmentResp) String() string { return proto.CompactTextString(m) } func (*GetSubDepartmentResp) ProtoMessage() {} func (*GetSubDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{5} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{5} } func (m *GetSubDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSubDepartmentResp.Unmarshal(m, b) @@ -353,7 +353,7 @@ func (m *DeleteDepartmentReq) Reset() { *m = DeleteDepartmentReq{} } func (m *DeleteDepartmentReq) String() string { return proto.CompactTextString(m) } func (*DeleteDepartmentReq) ProtoMessage() {} func (*DeleteDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{6} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{6} } func (m *DeleteDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteDepartmentReq.Unmarshal(m, b) @@ -406,7 +406,7 @@ func (m *DeleteDepartmentResp) Reset() { *m = DeleteDepartmentResp{} } func (m *DeleteDepartmentResp) String() string { return proto.CompactTextString(m) } func (*DeleteDepartmentResp) ProtoMessage() {} func (*DeleteDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{7} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{7} } func (m *DeleteDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteDepartmentResp.Unmarshal(m, b) @@ -452,7 +452,7 @@ func (m *GetDepartmentParentIDListReq) Reset() { *m = GetDepartmentParen func (m *GetDepartmentParentIDListReq) String() string { return proto.CompactTextString(m) } func (*GetDepartmentParentIDListReq) ProtoMessage() {} func (*GetDepartmentParentIDListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{8} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{8} } func (m *GetDepartmentParentIDListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentParentIDListReq.Unmarshal(m, b) @@ -499,7 +499,7 @@ func (m *GetDepartmentParentIDListResp) Reset() { *m = GetDepartmentPare func (m *GetDepartmentParentIDListResp) String() string { return proto.CompactTextString(m) } func (*GetDepartmentParentIDListResp) ProtoMessage() {} func (*GetDepartmentParentIDListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{9} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{9} } func (m *GetDepartmentParentIDListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentParentIDListResp.Unmarshal(m, b) @@ -544,6 +544,7 @@ type CreateOrganizationUserReq struct { OrganizationUser *sdk_ws.OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` OpUserID string `protobuf:"bytes,3,opt,name=opUserID" json:"opUserID,omitempty"` + IsRegister bool `protobuf:"varint,4,opt,name=IsRegister" json:"IsRegister,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -553,7 +554,7 @@ func (m *CreateOrganizationUserReq) Reset() { *m = CreateOrganizationUse func (m *CreateOrganizationUserReq) String() string { return proto.CompactTextString(m) } func (*CreateOrganizationUserReq) ProtoMessage() {} func (*CreateOrganizationUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{10} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{10} } func (m *CreateOrganizationUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateOrganizationUserReq.Unmarshal(m, b) @@ -594,6 +595,13 @@ func (m *CreateOrganizationUserReq) GetOpUserID() string { return "" } +func (m *CreateOrganizationUserReq) GetIsRegister() bool { + if m != nil { + return m.IsRegister + } + return false +} + type CreateOrganizationUserResp struct { ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` @@ -606,7 +614,7 @@ func (m *CreateOrganizationUserResp) Reset() { *m = CreateOrganizationUs func (m *CreateOrganizationUserResp) String() string { return proto.CompactTextString(m) } func (*CreateOrganizationUserResp) ProtoMessage() {} func (*CreateOrganizationUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{11} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{11} } func (m *CreateOrganizationUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateOrganizationUserResp.Unmarshal(m, b) @@ -653,7 +661,7 @@ func (m *UpdateOrganizationUserReq) Reset() { *m = UpdateOrganizationUse func (m *UpdateOrganizationUserReq) String() string { return proto.CompactTextString(m) } func (*UpdateOrganizationUserReq) ProtoMessage() {} func (*UpdateOrganizationUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{12} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{12} } func (m *UpdateOrganizationUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateOrganizationUserReq.Unmarshal(m, b) @@ -706,7 +714,7 @@ func (m *UpdateOrganizationUserResp) Reset() { *m = UpdateOrganizationUs func (m *UpdateOrganizationUserResp) String() string { return proto.CompactTextString(m) } func (*UpdateOrganizationUserResp) ProtoMessage() {} func (*UpdateOrganizationUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{13} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{13} } func (m *UpdateOrganizationUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateOrganizationUserResp.Unmarshal(m, b) @@ -753,7 +761,7 @@ func (m *CreateDepartmentMemberReq) Reset() { *m = CreateDepartmentMembe func (m *CreateDepartmentMemberReq) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentMemberReq) ProtoMessage() {} func (*CreateDepartmentMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{14} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{14} } func (m *CreateDepartmentMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentMemberReq.Unmarshal(m, b) @@ -806,7 +814,7 @@ func (m *CreateDepartmentMemberResp) Reset() { *m = CreateDepartmentMemb func (m *CreateDepartmentMemberResp) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentMemberResp) ProtoMessage() {} func (*CreateDepartmentMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{15} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{15} } func (m *CreateDepartmentMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentMemberResp.Unmarshal(m, b) @@ -853,7 +861,7 @@ func (m *GetUserInDepartmentReq) Reset() { *m = GetUserInDepartmentReq{} func (m *GetUserInDepartmentReq) String() string { return proto.CompactTextString(m) } func (*GetUserInDepartmentReq) ProtoMessage() {} func (*GetUserInDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{16} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{16} } func (m *GetUserInDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInDepartmentReq.Unmarshal(m, b) @@ -907,7 +915,7 @@ func (m *GetUserInDepartmentResp) Reset() { *m = GetUserInDepartmentResp func (m *GetUserInDepartmentResp) String() string { return proto.CompactTextString(m) } func (*GetUserInDepartmentResp) ProtoMessage() {} func (*GetUserInDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{17} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{17} } func (m *GetUserInDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInDepartmentResp.Unmarshal(m, b) @@ -961,7 +969,7 @@ func (m *UpdateUserInDepartmentReq) Reset() { *m = UpdateUserInDepartmen func (m *UpdateUserInDepartmentReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInDepartmentReq) ProtoMessage() {} func (*UpdateUserInDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{18} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{18} } func (m *UpdateUserInDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInDepartmentReq.Unmarshal(m, b) @@ -1014,7 +1022,7 @@ func (m *UpdateUserInDepartmentResp) Reset() { *m = UpdateUserInDepartme func (m *UpdateUserInDepartmentResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInDepartmentResp) ProtoMessage() {} func (*UpdateUserInDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{19} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{19} } func (m *UpdateUserInDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInDepartmentResp.Unmarshal(m, b) @@ -1062,7 +1070,7 @@ func (m *DeleteUserInDepartmentReq) Reset() { *m = DeleteUserInDepartmen func (m *DeleteUserInDepartmentReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserInDepartmentReq) ProtoMessage() {} func (*DeleteUserInDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{20} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{20} } func (m *DeleteUserInDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserInDepartmentReq.Unmarshal(m, b) @@ -1122,7 +1130,7 @@ func (m *DeleteUserInDepartmentResp) Reset() { *m = DeleteUserInDepartme func (m *DeleteUserInDepartmentResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserInDepartmentResp) ProtoMessage() {} func (*DeleteUserInDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{21} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{21} } func (m *DeleteUserInDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserInDepartmentResp.Unmarshal(m, b) @@ -1169,7 +1177,7 @@ func (m *DeleteOrganizationUserReq) Reset() { *m = DeleteOrganizationUse func (m *DeleteOrganizationUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteOrganizationUserReq) ProtoMessage() {} func (*DeleteOrganizationUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{22} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{22} } func (m *DeleteOrganizationUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteOrganizationUserReq.Unmarshal(m, b) @@ -1222,7 +1230,7 @@ func (m *DeleteOrganizationUserResp) Reset() { *m = DeleteOrganizationUs func (m *DeleteOrganizationUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteOrganizationUserResp) ProtoMessage() {} func (*DeleteOrganizationUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{23} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{23} } func (m *DeleteOrganizationUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteOrganizationUserResp.Unmarshal(m, b) @@ -1269,7 +1277,7 @@ func (m *GetDepartmentMemberReq) Reset() { *m = GetDepartmentMemberReq{} func (m *GetDepartmentMemberReq) String() string { return proto.CompactTextString(m) } func (*GetDepartmentMemberReq) ProtoMessage() {} func (*GetDepartmentMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{24} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{24} } func (m *GetDepartmentMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentMemberReq.Unmarshal(m, b) @@ -1323,7 +1331,7 @@ func (m *GetDepartmentMemberResp) Reset() { *m = GetDepartmentMemberResp func (m *GetDepartmentMemberResp) String() string { return proto.CompactTextString(m) } func (*GetDepartmentMemberResp) ProtoMessage() {} func (*GetDepartmentMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{25} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{25} } func (m *GetDepartmentMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentMemberResp.Unmarshal(m, b) @@ -1376,7 +1384,7 @@ func (m *GetDepartmentRelatedGroupIDListReq) Reset() { *m = GetDepartmen func (m *GetDepartmentRelatedGroupIDListReq) String() string { return proto.CompactTextString(m) } func (*GetDepartmentRelatedGroupIDListReq) ProtoMessage() {} func (*GetDepartmentRelatedGroupIDListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{26} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{26} } func (m *GetDepartmentRelatedGroupIDListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentRelatedGroupIDListReq.Unmarshal(m, b) @@ -1423,7 +1431,7 @@ func (m *GetDepartmentRelatedGroupIDListResp) Reset() { *m = GetDepartme func (m *GetDepartmentRelatedGroupIDListResp) String() string { return proto.CompactTextString(m) } func (*GetDepartmentRelatedGroupIDListResp) ProtoMessage() {} func (*GetDepartmentRelatedGroupIDListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{27} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{27} } func (m *GetDepartmentRelatedGroupIDListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentRelatedGroupIDListResp.Unmarshal(m, b) @@ -1997,62 +2005,64 @@ var _Organization_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("organization/organization.proto", fileDescriptor_organization_6d9a9b5829486353) + proto.RegisterFile("organization/organization.proto", fileDescriptor_organization_2845c40b2de0bcf0) } -var fileDescriptor_organization_6d9a9b5829486353 = []byte{ - // 846 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcf, 0x6e, 0xd3, 0x4c, - 0x10, 0x97, 0x9b, 0xef, 0x2b, 0x74, 0x52, 0xa1, 0x68, 0x5b, 0x85, 0xd4, 0x50, 0x35, 0x75, 0x5b, - 0x35, 0x2a, 0x52, 0x02, 0xe5, 0xc8, 0x8d, 0x06, 0xa5, 0x91, 0x28, 0x41, 0x41, 0x3d, 0x94, 0x4b, - 0xe4, 0xe0, 0x25, 0x8a, 0xd2, 0xda, 0xdb, 0xb5, 0x43, 0x45, 0x1f, 0x80, 0x2b, 0x27, 0x2e, 0x88, - 0x27, 0xe0, 0xc4, 0x9b, 0xf0, 0x4a, 0xc8, 0x6b, 0x37, 0x59, 0xef, 0x8e, 0x93, 0xd4, 0x4d, 0x51, - 0x39, 0x7a, 0xb2, 0xfb, 0x9b, 0x7f, 0x3b, 0x33, 0xbf, 0x09, 0x6c, 0x78, 0xbc, 0x67, 0xbb, 0xfd, - 0x4b, 0x3b, 0xe8, 0x7b, 0x6e, 0x4d, 0xfe, 0xa8, 0x32, 0xee, 0x05, 0x1e, 0x59, 0x96, 0x65, 0xe6, - 0x66, 0x8b, 0x51, 0xb7, 0xd3, 0x3c, 0xaa, 0xb1, 0x41, 0xaf, 0x26, 0x0e, 0xd4, 0x7c, 0x67, 0xd0, - 0xb9, 0xf0, 0x6b, 0x17, 0x7e, 0x74, 0xc1, 0xfa, 0x6e, 0xc0, 0xca, 0x01, 0xa7, 0x76, 0x40, 0xeb, - 0x94, 0xd9, 0x3c, 0x38, 0xa3, 0x6e, 0xd0, 0xa6, 0xe7, 0xe4, 0x15, 0x3c, 0x70, 0x46, 0x82, 0xa6, - 0xfb, 0xd1, 0x2b, 0x19, 0x65, 0xa3, 0x92, 0xdf, 0x5f, 0xaf, 0xfa, 0x94, 0x7f, 0xa2, 0xbc, 0x63, - 0xb3, 0x7e, 0x87, 0xd9, 0xdc, 0x3e, 0xf3, 0xab, 0xd2, 0x4d, 0xe5, 0x12, 0x29, 0x43, 0xde, 0x63, - 0x94, 0x0b, 0x73, 0x9a, 0xf5, 0xd2, 0x42, 0xd9, 0xa8, 0x2c, 0xb5, 0x65, 0x11, 0x31, 0xe1, 0xbe, - 0xc7, 0x8e, 0x7d, 0xca, 0x9b, 0xf5, 0x52, 0x4e, 0xfc, 0x3c, 0xfa, 0xb6, 0xbe, 0x1a, 0xb0, 0xaa, - 0x1b, 0xe7, 0x33, 0x52, 0x82, 0x7b, 0x94, 0xf3, 0x03, 0xcf, 0xa1, 0xc2, 0xac, 0xff, 0xdb, 0x57, - 0x9f, 0xa4, 0x08, 0x8b, 0x94, 0xf3, 0x23, 0xbf, 0x17, 0xeb, 0x8a, 0xbf, 0x10, 0x7f, 0x72, 0x19, - 0xfc, 0x11, 0xe1, 0x3a, 0x66, 0xce, 0xdd, 0x0c, 0xd7, 0x21, 0xac, 0xea, 0xb6, 0x65, 0x89, 0x96, - 0x75, 0x01, 0x2b, 0x0d, 0x1a, 0xbc, 0x1b, 0x76, 0x93, 0x5e, 0x5a, 0xb0, 0x2c, 0x19, 0x5c, 0x17, - 0x68, 0x4b, 0xed, 0x84, 0x6c, 0x0e, 0x19, 0xd7, 0x35, 0xdf, 0x3c, 0xe3, 0xaf, 0xfb, 0x7e, 0x50, - 0xca, 0x95, 0x73, 0xd7, 0x4a, 0x49, 0x78, 0x29, 0x0c, 0x45, 0x9d, 0x9e, 0x52, 0x35, 0xe1, 0xb7, - 0x1f, 0x8a, 0x43, 0x58, 0xd5, 0x15, 0x67, 0xca, 0xa6, 0x03, 0x8f, 0x1b, 0x34, 0x18, 0xc3, 0xbc, - 0xb5, 0xb9, 0x30, 0x30, 0xf4, 0x6f, 0x6e, 0xbe, 0x58, 0x43, 0x58, 0x9f, 0xa0, 0x25, 0x53, 0x0a, - 0x2d, 0x58, 0x66, 0x12, 0x8a, 0x48, 0xe0, 0x52, 0x3b, 0x21, 0xb3, 0x7e, 0x1a, 0xb0, 0x16, 0xf5, - 0x88, 0x96, 0xd4, 0xfa, 0xc2, 0x18, 0x86, 0xae, 0xb5, 0xa0, 0xe0, 0x29, 0xe2, 0xb8, 0x32, 0xb7, - 0x90, 0x67, 0xa0, 0x21, 0x68, 0x97, 0x6f, 0x98, 0xd3, 0x37, 0x60, 0xa6, 0xd9, 0x9a, 0x29, 0xb3, - 0xa1, 0xf3, 0x51, 0xc9, 0xff, 0x1b, 0xce, 0xa7, 0xd9, 0x9a, 0xd9, 0x79, 0x75, 0x3a, 0x1c, 0xd1, - 0xb3, 0xee, 0xc8, 0x79, 0x47, 0x11, 0x4f, 0x70, 0x5e, 0x43, 0xd0, 0x2e, 0xcf, 0x2b, 0xf3, 0xba, - 0xad, 0x99, 0x9c, 0x77, 0xa1, 0xd8, 0xa0, 0x81, 0x00, 0x77, 0x93, 0x9d, 0xa9, 0x08, 0x8b, 0xc3, - 0xc8, 0x86, 0xa8, 0x8e, 0xe3, 0xaf, 0x1b, 0xda, 0xff, 0xc3, 0x80, 0x87, 0xa8, 0xc2, 0x4c, 0x85, - 0xdd, 0x82, 0xc2, 0x50, 0x41, 0x8a, 0xe7, 0x31, 0x96, 0x1c, 0x4d, 0xa9, 0x76, 0x59, 0x2a, 0x04, - 0x2c, 0x24, 0x77, 0xef, 0x2d, 0xa4, 0xd9, 0x9a, 0xe9, 0x2d, 0x7c, 0x33, 0x60, 0x2d, 0x1a, 0x15, - 0x7f, 0xed, 0x3d, 0x68, 0x33, 0xe3, 0x3f, 0x7d, 0x66, 0x84, 0x7e, 0xa6, 0x99, 0x95, 0xc9, 0xcf, - 0xf3, 0x2b, 0x37, 0xb1, 0x66, 0x77, 0x3b, 0xcf, 0x7e, 0xe4, 0xc2, 0x9c, 0x7a, 0xd6, 0xa5, 0x28, - 0x5b, 0xac, 0x5f, 0xdd, 0x3e, 0xa1, 0xf8, 0x15, 0x95, 0xf0, 0x7c, 0x1a, 0x10, 0xf9, 0x00, 0xa5, - 0x30, 0xc2, 0x2a, 0x9a, 0x44, 0xb4, 0x76, 0x53, 0x4a, 0x59, 0x33, 0x20, 0x15, 0xc8, 0xe2, 0x60, - 0x25, 0x2c, 0x6e, 0xd3, 0x53, 0x3b, 0xa0, 0x4e, 0x83, 0x7b, 0x43, 0x36, 0xe6, 0x2f, 0x4a, 0x58, - 0x0c, 0x3d, 0x2c, 0x7b, 0x72, 0x03, 0x88, 0xc9, 0xc4, 0x82, 0x20, 0x13, 0x9a, 0xdc, 0xfa, 0x0c, - 0x5b, 0x53, 0x75, 0x66, 0x8a, 0x58, 0x19, 0xf2, 0xbd, 0x31, 0x48, 0x4c, 0x66, 0x64, 0xd1, 0xfe, - 0xef, 0x3c, 0x24, 0x16, 0x38, 0x72, 0x02, 0x05, 0x75, 0x6a, 0x90, 0xcd, 0x6a, 0x62, 0xef, 0x43, - 0x96, 0x37, 0xd3, 0x9a, 0x76, 0xc4, 0x67, 0x21, 0xb4, 0xba, 0x2c, 0xa8, 0xd0, 0xc8, 0xa2, 0xa3, - 0x42, 0xa3, 0xfb, 0xc6, 0x09, 0x14, 0x54, 0x0e, 0xaf, 0x42, 0x23, 0xdb, 0x85, 0x0a, 0x8d, 0xae, - 0x01, 0x27, 0x50, 0x50, 0x49, 0xb1, 0x0a, 0x8d, 0xb0, 0x75, 0x15, 0x1a, 0xe5, 0xd5, 0x01, 0xac, - 0xa5, 0xf2, 0x57, 0xb2, 0xa7, 0xd9, 0x96, 0x4a, 0xa7, 0xcd, 0x27, 0x33, 0x9f, 0xf5, 0x19, 0x19, - 0x40, 0x11, 0x67, 0x84, 0x64, 0x17, 0x4b, 0x22, 0xd2, 0xf9, 0xcc, 0xca, 0x6c, 0x07, 0x23, 0x65, - 0x38, 0x03, 0x53, 0x95, 0xa5, 0x72, 0x4a, 0x55, 0xd9, 0x04, 0x42, 0x37, 0x80, 0x22, 0xde, 0x3a, - 0x55, 0x65, 0xa9, 0x3d, 0x5d, 0x55, 0x36, 0xa1, 0x13, 0x8f, 0xc2, 0xa8, 0xb6, 0x11, 0x3c, 0x8c, - 0x48, 0x03, 0xc6, 0xc3, 0x88, 0x36, 0xcb, 0xae, 0xd8, 0x8e, 0xd5, 0xa1, 0x46, 0xb6, 0xb5, 0xbc, - 0x23, 0xe3, 0xd8, 0xdc, 0x99, 0xe1, 0x94, 0x1c, 0x3d, 0x4d, 0x0d, 0x1a, 0x3d, 0x4c, 0x53, 0x65, - 0xb6, 0x83, 0xf2, 0xbb, 0x98, 0xa6, 0x2c, 0x95, 0x62, 0xe1, 0xef, 0x02, 0x55, 0x16, 0x45, 0x4f, - 0xcb, 0xd3, 0xf6, 0x84, 0xaa, 0x19, 0x27, 0x69, 0x67, 0x86, 0x53, 0x3e, 0x23, 0x5f, 0x0c, 0xd8, - 0x98, 0xd2, 0xc4, 0xc9, 0xd3, 0x09, 0x50, 0xe8, 0x9c, 0x31, 0x9f, 0x5d, 0xf3, 0x86, 0xcf, 0x5e, - 0xae, 0xbf, 0x7f, 0x54, 0x4d, 0xfc, 0x4f, 0xf7, 0x42, 0xfe, 0xe8, 0x2e, 0x8a, 0x3f, 0xe1, 0x9e, - 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xfc, 0xb9, 0x33, 0xd8, 0x13, 0x00, 0x00, +var fileDescriptor_organization_2845c40b2de0bcf0 = []byte{ + // 869 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4f, 0x4f, 0x13, 0x41, + 0x14, 0xcf, 0x52, 0x44, 0x78, 0x25, 0xa6, 0x19, 0x48, 0x6d, 0x57, 0x91, 0xb2, 0x40, 0x68, 0x30, + 0x69, 0x15, 0x8f, 0xde, 0xa4, 0xa6, 0x34, 0x11, 0x6b, 0xd6, 0x70, 0xc0, 0x4b, 0xb3, 0xb5, 0x63, + 0xd3, 0x14, 0xba, 0xc3, 0xcc, 0x56, 0x22, 0x1f, 0xc0, 0xab, 0x27, 0x2f, 0xc6, 0x4f, 0xe0, 0xc9, + 0xcf, 0xe1, 0xc5, 0xaf, 0x64, 0x76, 0xb7, 0xb4, 0xb3, 0x33, 0x6f, 0xdb, 0xb2, 0x2d, 0x86, 0xe3, + 0xbc, 0x9d, 0xf9, 0xbd, 0xf7, 0x7e, 0x6f, 0xe6, 0xfd, 0x59, 0xd8, 0x74, 0x79, 0xdb, 0xe9, 0x75, + 0xae, 0x1c, 0xaf, 0xe3, 0xf6, 0xca, 0xf2, 0xa2, 0xc4, 0xb8, 0xeb, 0xb9, 0x64, 0x55, 0x96, 0x99, + 0x5b, 0x75, 0x46, 0x7b, 0x8d, 0xda, 0x71, 0x99, 0x75, 0xdb, 0xe5, 0x60, 0x43, 0x59, 0xb4, 0xba, + 0x8d, 0x4b, 0x51, 0xbe, 0x14, 0xe1, 0x01, 0xeb, 0x87, 0x01, 0x6b, 0x87, 0x9c, 0x3a, 0x1e, 0xad, + 0x50, 0xe6, 0x70, 0xef, 0x9c, 0xf6, 0x3c, 0x9b, 0x5e, 0x90, 0xd7, 0xf0, 0xa0, 0x35, 0x14, 0xd4, + 0x7a, 0x9f, 0xdc, 0x9c, 0x51, 0x30, 0x8a, 0xe9, 0x83, 0x8d, 0x92, 0xa0, 0xfc, 0x33, 0xe5, 0x0d, + 0x87, 0x75, 0x1a, 0xcc, 0xe1, 0xce, 0xb9, 0x28, 0x49, 0x27, 0x95, 0x43, 0xa4, 0x00, 0x69, 0x97, + 0x51, 0x1e, 0x98, 0x53, 0xab, 0xe4, 0x16, 0x0a, 0x46, 0x71, 0xc5, 0x96, 0x45, 0xc4, 0x84, 0x65, + 0x97, 0x9d, 0x08, 0xca, 0x6b, 0x95, 0x5c, 0x2a, 0xf8, 0x3c, 0x5c, 0x5b, 0xdf, 0x0c, 0x58, 0xd7, + 0x8d, 0x13, 0x8c, 0xe4, 0xe0, 0x3e, 0xe5, 0xfc, 0xd0, 0x6d, 0xd1, 0xc0, 0xac, 0x7b, 0xf6, 0xf5, + 0x92, 0x64, 0x61, 0x89, 0x72, 0x7e, 0x2c, 0xda, 0x03, 0x5d, 0x83, 0x15, 0xe2, 0x4f, 0x2a, 0x81, + 0x3f, 0x01, 0x5d, 0x27, 0xac, 0x75, 0x37, 0xe9, 0x3a, 0x82, 0x75, 0xdd, 0xb6, 0x24, 0x6c, 0x59, + 0x97, 0xb0, 0x56, 0xa5, 0xde, 0xfb, 0x7e, 0x33, 0xea, 0xa5, 0x05, 0xab, 0x92, 0xc1, 0x95, 0x00, + 0x6d, 0xc5, 0x8e, 0xc8, 0xe6, 0x10, 0x71, 0x5d, 0xf3, 0xec, 0x11, 0x7f, 0xd3, 0x11, 0x5e, 0x2e, + 0x55, 0x48, 0xdd, 0x28, 0x24, 0xfe, 0x21, 0x9f, 0x8a, 0x0a, 0x3d, 0xa3, 0x6a, 0xc0, 0x6f, 0x9f, + 0x8a, 0x23, 0x58, 0xd7, 0x15, 0x27, 0x8a, 0x66, 0x0b, 0x1e, 0x57, 0xa9, 0x37, 0x82, 0x79, 0xe7, + 0xf0, 0xc0, 0x40, 0xdf, 0xbf, 0xb9, 0xf9, 0x62, 0xf5, 0x61, 0x63, 0x8c, 0x96, 0x44, 0x21, 0xb4, + 0x60, 0x95, 0x49, 0x28, 0x41, 0x00, 0x57, 0xec, 0x88, 0xcc, 0xfa, 0x63, 0x40, 0x3e, 0xcc, 0x11, + 0x75, 0x29, 0xf5, 0xf9, 0x1c, 0xfa, 0xae, 0xd5, 0x21, 0xe3, 0x2a, 0xe2, 0xc1, 0xcb, 0xdc, 0x46, + 0xae, 0x81, 0x86, 0xa0, 0x1d, 0x9e, 0x2d, 0xa6, 0xe4, 0x09, 0x40, 0x4d, 0xd8, 0xb4, 0xdd, 0x11, + 0x1e, 0xe5, 0xb9, 0xc5, 0x82, 0x51, 0x5c, 0xb6, 0x25, 0x89, 0xf5, 0x16, 0xcc, 0x38, 0x5f, 0x12, + 0x45, 0xfe, 0x97, 0x01, 0xf9, 0x30, 0x25, 0xdc, 0x7d, 0x72, 0x7c, 0xe7, 0xe3, 0x6c, 0x4d, 0xec, + 0xbc, 0x5a, 0x3d, 0x8e, 0xe9, 0x79, 0x73, 0xe8, 0x7c, 0x4b, 0x11, 0x8f, 0x71, 0x5e, 0x43, 0xd0, + 0x0e, 0xcf, 0xee, 0x7c, 0x9c, 0xad, 0x89, 0x9c, 0xef, 0x41, 0xb6, 0x4a, 0xbd, 0x00, 0xbc, 0x17, + 0xcd, 0x5c, 0x59, 0x58, 0xea, 0x87, 0x36, 0x84, 0xef, 0x7c, 0xb0, 0x9a, 0xd1, 0xfe, 0x9f, 0x06, + 0x3c, 0x44, 0x15, 0x26, 0x7a, 0xf8, 0x75, 0xc8, 0xf4, 0x15, 0xa4, 0x41, 0xbd, 0xc6, 0x82, 0xa3, + 0x29, 0xd5, 0x0e, 0x4b, 0x0f, 0x01, 0xa3, 0xe4, 0xee, 0xdd, 0x85, 0x38, 0x5b, 0x13, 0xdd, 0x85, + 0xef, 0x06, 0xe4, 0xc3, 0x52, 0xf2, 0xdf, 0xee, 0x83, 0x56, 0x53, 0x16, 0xf5, 0x9a, 0xe2, 0xfb, + 0x19, 0x67, 0x56, 0x22, 0x3f, 0x2f, 0xae, 0xdd, 0xc4, 0x92, 0xdd, 0xed, 0x5c, 0xfb, 0xa1, 0x0b, + 0x73, 0xca, 0x59, 0x57, 0xc1, 0xb3, 0xc5, 0xf2, 0xd5, 0xed, 0x37, 0x1c, 0xbf, 0xc3, 0x27, 0x3c, + 0x9f, 0x04, 0x44, 0x3e, 0x42, 0xce, 0x67, 0x58, 0x45, 0x93, 0x1a, 0xb1, 0xbd, 0x98, 0xa7, 0xac, + 0x19, 0x10, 0x0b, 0x64, 0x71, 0xb0, 0x22, 0x16, 0xdb, 0xf4, 0xcc, 0xf1, 0x68, 0xab, 0xca, 0xdd, + 0x3e, 0x1b, 0xf5, 0x37, 0x0a, 0x2d, 0x86, 0x4e, 0xcb, 0xbe, 0x9c, 0x00, 0x06, 0xcd, 0xc6, 0x42, + 0xd0, 0x6c, 0x68, 0x72, 0xeb, 0x0b, 0x6c, 0x4f, 0xd4, 0x99, 0x88, 0xb1, 0x02, 0xa4, 0xdb, 0x23, + 0x90, 0x41, 0xb3, 0x23, 0x8b, 0x0e, 0xfe, 0xa6, 0x21, 0x32, 0xe0, 0x91, 0x53, 0xc8, 0xa8, 0x55, + 0x83, 0x6c, 0x95, 0x22, 0x73, 0x21, 0x32, 0xdc, 0x99, 0xd6, 0xa4, 0x2d, 0x82, 0xf9, 0xd0, 0xea, + 0x30, 0xa1, 0x42, 0x23, 0x83, 0x90, 0x0a, 0x8d, 0xce, 0x23, 0xa7, 0x90, 0x51, 0x7b, 0x7c, 0x15, + 0x1a, 0x99, 0x3e, 0x54, 0x68, 0x74, 0x4c, 0x38, 0x85, 0x8c, 0xda, 0x34, 0xab, 0xd0, 0x48, 0x37, + 0xaf, 0x42, 0xa3, 0x7d, 0xb7, 0x07, 0xf9, 0xd8, 0xfe, 0x96, 0xec, 0x6b, 0xb6, 0xc5, 0xb6, 0xdb, + 0xe6, 0xd3, 0xa9, 0xf7, 0x0a, 0x46, 0xba, 0x90, 0xc5, 0x3b, 0x42, 0xb2, 0x87, 0x05, 0x11, 0xc9, + 0x7c, 0x66, 0x71, 0xba, 0x8d, 0xa1, 0x32, 0xbc, 0x03, 0x53, 0x95, 0xc5, 0xf6, 0x94, 0xaa, 0xb2, + 0x31, 0x0d, 0x5d, 0x17, 0xb2, 0x78, 0xea, 0x54, 0x95, 0xc5, 0xe6, 0x74, 0x55, 0xd9, 0x98, 0x4c, + 0x3c, 0xa4, 0x51, 0x4d, 0x23, 0x38, 0x8d, 0x48, 0x02, 0xc6, 0x69, 0x44, 0x93, 0x65, 0x33, 0x98, + 0x9e, 0xd5, 0xa2, 0x46, 0x76, 0xb4, 0xb8, 0x23, 0xe5, 0xd8, 0xdc, 0x9d, 0x62, 0x97, 0xcc, 0x9e, + 0xa6, 0x06, 0x65, 0x0f, 0xd3, 0x54, 0x9c, 0x6e, 0xa3, 0x7c, 0x2f, 0x26, 0x29, 0x8b, 0x6d, 0xb1, + 0xf0, 0x7b, 0x81, 0x2a, 0x0b, 0xd9, 0xd3, 0xe2, 0xb4, 0x33, 0xe6, 0xd5, 0x8c, 0x82, 0xb4, 0x3b, + 0xc5, 0x2e, 0xc1, 0xc8, 0x57, 0x03, 0x36, 0x27, 0x24, 0x71, 0xf2, 0x6c, 0x0c, 0x14, 0x5a, 0x67, + 0xcc, 0xe7, 0x37, 0x3c, 0x21, 0xd8, 0xab, 0x8d, 0x0f, 0x8f, 0x4a, 0x91, 0xff, 0x78, 0x2f, 0xe5, + 0x45, 0x73, 0x29, 0xf8, 0x49, 0xf7, 0xe2, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xff, 0x09, + 0x1d, 0xf8, 0x13, 0x00, 0x00, } diff --git a/pkg/proto/organization/organization.proto b/pkg/proto/organization/organization.proto index 8c3bd5026..ef7aedbf7 100644 --- a/pkg/proto/organization/organization.proto +++ b/pkg/proto/organization/organization.proto @@ -67,6 +67,7 @@ message CreateOrganizationUserReq{ server_api_params.OrganizationUser organizationUser = 1; string operationID = 2; string opUserID = 3; + bool IsRegister = 4; } From a115151616121ccbff73bc0d379527513ee7b49a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 17:08:47 +0800 Subject: [PATCH 416/752] fix bug --- internal/rpc/organization/organization.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 7b97087c4..7a1d427ba 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -246,7 +246,7 @@ func (s *organizationServer) CreateOrganizationUser(ctx context.Context, req *rp utils.CopyStructFields(&organizationUser, req.OrganizationUser) organizationUser.Birth = utils.UnixSecondToTime(int64(req.OrganizationUser.Birth)) log.Debug(req.OperationID, "src ", *req.OrganizationUser, "dst ", organizationUser) - err = imdb.CreateOrganizationUser(&organizationUser) + err := imdb.CreateOrganizationUser(&organizationUser) if err != nil { errMsg := req.OperationID + " " + "CreateOrganizationUser failed " + err.Error() log.Error(req.OperationID, errMsg, organizationUser) From d587d14f86c3ef69ba2c4dd4f82940303ac7d6f0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 17:11:17 +0800 Subject: [PATCH 417/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 +++- internal/msg_transfer/logic/persistent_msg_handler.go | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 7baccf176..2b6a1bf18 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -466,7 +466,9 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS //och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: []*pbMsg.MsgDataToMQ{&msgFromMQ}, triggerID: msgFromMQ.OperationID}} //sess.MarkMessage(msg, "") rwLock.Lock() - cMsg = append(cMsg, msg) + if len(msg.Value) != 0 { + cMsg = append(cMsg, msg) + } rwLock.Unlock() sess.MarkMessage(msg, "") //och.TriggerCmd(OnlineTopicBusy) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index 83ca7bd12..f0104740a 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -72,7 +72,9 @@ func (pc *PersistentConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSessi claim sarama.ConsumerGroupClaim) error { for msg := range claim.Messages() { log.NewDebug("", "kafka get info to mysql", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) - pc.msgHandle[msg.Topic](msg, string(msg.Key), sess) + if len(msg.Value) != 0 { + pc.msgHandle[msg.Topic](msg, string(msg.Key), sess) + } sess.MarkMessage(msg, "") } return nil From 02144194469e0c8f6388722a7f03906cc46beb20 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 17:17:55 +0800 Subject: [PATCH 418/752] log --- pkg/common/kafka/producer.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index 98ad92209..fb922c5c0 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -2,6 +2,7 @@ package kafka import ( log2 "Open_IM/pkg/common/log" + "errors" "github.com/Shopify/sarama" "github.com/golang/protobuf/proto" ) @@ -43,6 +44,9 @@ func (p *Producer) SendMessage(m proto.Message, key ...string) (int32, int64, er log2.Error("", "", "proto marshal err = %s", err.Error()) return -1, -1, err } + if len(bMsg) == 0 { + return 0, 0, errors.New("msg content is nil") + } kMsg.Value = sarama.ByteEncoder(bMsg) return p.producer.SendMessage(kMsg) From b46f106a915f9d1748f0415b6b311e7bdb0261d9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 17:19:37 +0800 Subject: [PATCH 419/752] log --- internal/msg_transfer/logic/persistent_msg_handler.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index f0104740a..96d405035 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -74,6 +74,8 @@ func (pc *PersistentConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSessi log.NewDebug("", "kafka get info to mysql", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) if len(msg.Value) != 0 { pc.msgHandle[msg.Topic](msg, string(msg.Key), sess) + } else { + log.Error("", "msg get from kafka but is nil", msg.Key) } sess.MarkMessage(msg, "") } From fec57c4ed742a42bb9e1b9fd66342404f0b5a7d3 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 8 Jun 2022 17:20:39 +0800 Subject: [PATCH 420/752] log --- internal/msg_transfer/logic/persistent_msg_handler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index f0104740a..c50a4f25b 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -42,6 +42,7 @@ func (pc *PersistentConsumerHandler) handleChatWs2Mysql(cMsg *sarama.ConsumerMes log.NewError(msgFromMQ.OperationID, "msg_transfer Unmarshal msg err", "msg", string(msg), "err", err.Error()) return } + log.Debug(msgFromMQ.OperationID, "proto.Unmarshal MsgDataToMQ", msgFromMQ.String()) //Control whether to store history messages (mysql) isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) //Only process receiver data From a7a69008d826bcefcd690106fde6b872a27dd730 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 17:24:22 +0800 Subject: [PATCH 421/752] log --- pkg/common/kafka/producer.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index fb922c5c0..1c7eeb6fb 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -33,12 +33,10 @@ func NewKafkaProducer(addr []string, topic string) *Producer { return &p } -func (p *Producer) SendMessage(m proto.Message, key ...string) (int32, int64, error) { +func (p *Producer) SendMessage(m proto.Message, key string) (int32, int64, error) { kMsg := &sarama.ProducerMessage{} kMsg.Topic = p.topic - if len(key) == 1 { - kMsg.Key = sarama.StringEncoder(key[0]) - } + kMsg.Key = sarama.StringEncoder(key) bMsg, err := proto.Marshal(m) if err != nil { log2.Error("", "", "proto marshal err = %s", err.Error()) From d1293dd0478943938f853f37cffa93a53a82be6d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 17:34:39 +0800 Subject: [PATCH 422/752] log --- internal/msg_transfer/logic/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 2b6a1bf18..f6f0b04bc 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -547,7 +547,7 @@ func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName) if grpcConn == nil { log.Error(rpcPushMsg.OperationID, "rpc dial failed", "push data", rpcPushMsg.String()) - pid, offset, err := producer.SendMessage(&mqPushMsg) + pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID) if err != nil { log.Error(mqPushMsg.OperationID, "kafka send failed", "send data", message.String(), "pid", pid, "offset", offset, "err", err.Error()) } @@ -557,7 +557,7 @@ func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { _, err := msgClient.PushMsg(context.Background(), &rpcPushMsg) if err != nil { log.Error(rpcPushMsg.OperationID, "rpc send failed", rpcPushMsg.OperationID, "push data", rpcPushMsg.String(), "err", err.Error()) - pid, offset, err := producer.SendMessage(&mqPushMsg) + pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID) if err != nil { log.Error(message.OperationID, "kafka send failed", mqPushMsg.OperationID, "send data", mqPushMsg.String(), "pid", pid, "offset", offset, "err", err.Error()) } From f650e73d5ca21f4eeef50b2ce182e6d73d8b94e0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 17:36:24 +0800 Subject: [PATCH 423/752] fix bug --- internal/demo/register/onboarding_process.go | 2 +- .../db/mysql_model/im_mysql_model/organization_model.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index d92ea2c6a..d1f1386ff 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -50,7 +50,7 @@ func createOrganizationUser(operationID, userID, userName string) error { CreateTime: uint32(time.Now().Unix()), }, OperationID: operationID, - OpUserID: userID, + OpUserID: config.Config.Manager.AppManagerUid[0], IsRegister: false, } if strings.Contains("@", userID) { diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 17a6c938f..039da3573 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -251,9 +251,9 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, var department db.Department //var parentID string dbConn.LogMode(true) - // select * from departments where department_id = (select parent_id from departments where department_id= zx234fd); - //dbConn.Table("departments").Where("department_id=?", departmentID).Pluck("parent_id", parentID).Error - err := dbConn.Table("departments").Where("department_id=?").Find(&department).Error + var parentID int + dbConn.Model(&department).Where("department_id=?", departmentID).Pluck("parent_id", &parentID) + err := dbConn.Model(&department).Where("department_id = ?", parentID).Find(&department).Error return &department, err } From 843cbe4f8071670d3240bcd35db7b0619958cdf5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 18:24:20 +0800 Subject: [PATCH 424/752] organization --- internal/demo/register/onboarding_process.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index d1f1386ff..80401530d 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -24,14 +24,16 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), "createOrganizationUser failed", err.Error()) } departmentID := config.Config.Demo.TestDepartMentID + if err := joinTestDepartment(operationID, userID, departmentID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) - } - joinGroups(operationID, userID, userName, groupIDList) + + //groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) + //} + //joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") } @@ -39,6 +41,7 @@ func createOrganizationUser(operationID, userID, userName string) error { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID) }() + log.NewInfo(operationID, utils.GetSelfFuncName(), "start createOrganizationUser") etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) client := organizationRpc.NewOrganizationClient(etcdConn) req := &organizationRpc.CreateOrganizationUserReq{ @@ -98,6 +101,9 @@ func joinTestDepartment(operationID, userID, departmentID string) error { } func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error) { + defer func() { + log.NewInfo(operationID, utils.GetSelfFuncName(), departmentID) + }() etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) client := organizationRpc.NewOrganizationClient(etcdConn) req := organizationRpc.GetDepartmentParentIDListReq{ From bd14739a9e73d37b5571abfbee760f1a3d196303 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 18:40:07 +0800 Subject: [PATCH 425/752] fix bug --- internal/demo/register/onboarding_process.go | 9 +++++---- internal/rpc/organization/organization.go | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 80401530d..fa7ae1546 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -29,10 +29,11 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - //groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) - //if err != nil { - // log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) - //} + groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) + } + log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) //joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") } diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 7a1d427ba..5594e760c 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -340,13 +340,14 @@ func (s *organizationServer) CreateDepartmentMember(ctx context.Context, req *rp func (s *organizationServer) GetDepartmentParentIDList(_ context.Context, req *rpc.GetDepartmentParentIDListReq) (resp *rpc.GetDepartmentParentIDListResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req.String()) resp = &rpc.GetDepartmentParentIDListResp{} - resp.ParentIDList, err = imdb.GetDepartmentParentIDList(req.DepartmentID) + parentIDList, err := imdb.GetDepartmentParentIDList(req.DepartmentID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetDepartmentParentIDList failed", err.Error()) resp.ErrMsg = constant.ErrDB.ErrMsg + ": " + err.Error() resp.ErrCode = constant.ErrDB.ErrCode return resp, nil } + resp.ParentIDList = parentIDList log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp:", resp.String()) return resp, nil } From 6055ce9b6b37ca5124984e022041fb77cf568188 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 18:44:21 +0800 Subject: [PATCH 426/752] fix bug --- internal/demo/register/onboarding_process.go | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index fa7ae1546..180b17c93 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -120,19 +120,19 @@ func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error log.NewError(req.OperationID, utils.GetSelfFuncName(), resp) return nil, errors.New(resp.ErrMsg) } - - resp.ParentIDList = append(resp.ParentIDList, departmentID) - getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} - getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) - return nil, err - } - if getDepartmentParentIDListResp.ErrCode != 0 { - log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) - return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) - } - return getDepartmentParentIDListResp.GroupIDList, nil + return resp.ParentIDList, nil + //resp.ParentIDList = append(resp.ParentIDList, departmentID) + //getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} + //getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) + // return nil, err + //} + //if getDepartmentParentIDListResp.ErrCode != 0 { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) + // return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) + //} + //return getDepartmentParentIDListResp.GroupIDList, nil } func joinGroups(operationID, userID, userName string, groupIDList []string) { From da18950b3dd9d79cf53198049890ebb337f59d1d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:06:22 +0800 Subject: [PATCH 427/752] fix bug --- internal/demo/register/onboarding_process.go | 28 +++++++++---------- .../im_mysql_model/organization_model.go | 5 ++-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 180b17c93..1d7e610ac 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -34,7 +34,7 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) } log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) - //joinGroups(operationID, userID, userName, groupIDList) + joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") } @@ -120,19 +120,19 @@ func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error log.NewError(req.OperationID, utils.GetSelfFuncName(), resp) return nil, errors.New(resp.ErrMsg) } - return resp.ParentIDList, nil - //resp.ParentIDList = append(resp.ParentIDList, departmentID) - //getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} - //getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) - //if err != nil { - // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) - // return nil, err - //} - //if getDepartmentParentIDListResp.ErrCode != 0 { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) - // return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) - //} - //return getDepartmentParentIDListResp.GroupIDList, nil + + resp.ParentIDList = append(resp.ParentIDList, departmentID) + getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} + getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) + return nil, err + } + if getDepartmentParentIDListResp.ErrCode != 0 { + log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) + return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) + } + return getDepartmentParentIDListResp.GroupIDList, nil } func joinGroups(operationID, userID, userName string, groupIDList []string) { diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 039da3573..649d0f7d3 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -251,9 +251,8 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, var department db.Department //var parentID string dbConn.LogMode(true) - var parentID int - dbConn.Model(&department).Where("department_id=?", departmentID).Pluck("parent_id", &parentID) - err := dbConn.Model(&department).Where("department_id = ?", parentID).Find(&department).Error + dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department) + err := dbConn.Model(&department).Where("department_id = ?", department.DepartmentID).Find(&department).Error return &department, err } From dff7a2809477fe4ed5554b20b4b955e1f55ab65e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:14:25 +0800 Subject: [PATCH 428/752] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 649d0f7d3..ea2e768fa 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -252,7 +252,7 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, //var parentID string dbConn.LogMode(true) dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department) - err := dbConn.Model(&department).Where("department_id = ?", department.DepartmentID).Find(&department).Error + err := dbConn.Model(&department).Where("department_id = ?", department.ParentID).Find(&department).Error return &department, err } From d9710ac2443ffbfa60e66bf699a7d199e3af92a0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:27:04 +0800 Subject: [PATCH 429/752] fix bug --- internal/demo/register/onboarding_process.go | 2 +- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 1d7e610ac..6f3f0b15f 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -147,7 +147,7 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { GroupID: groupID, Reason: "register auto join", InvitedUserIDList: []string{userID}, - OpUserID: userID, + OpUserID: config.Config.Manager.AppManagerUid[0], } resp, err := client.InviteUserToGroup(context.Background(), req) if err != nil { diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index ea2e768fa..f515f4afa 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -261,7 +261,7 @@ func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]s if err != nil { return err } - if department.ParentID != "" { + if department.DepartmentID != "" { *parentIDList = append(*parentIDList, department.ParentID) err = GetDepartmentParent(departmentID, dbConn, parentIDList) if err != nil { From ae684d6d39d29988186899017fb13ba9a4d086e0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:39:36 +0800 Subject: [PATCH 430/752] fix bug --- .../db/mysql_model/im_mysql_model/organization_model.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index f515f4afa..fb7a0ab18 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -249,10 +249,14 @@ func GetDepartmentRelatedGroupIDList(departmentIDList []string) ([]string, error func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, error) { var department db.Department + var parentDepartment db.Department //var parentID string dbConn.LogMode(true) - dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department) - err := dbConn.Model(&department).Where("department_id = ?", department.ParentID).Find(&department).Error + err := dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department).Error + if err != nil { + return nil, utils.Wrap(err, "") + } + err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error return &department, err } From 317e6f81bb9b379ed3fa193ed9d1b7832e622490 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 8 Jun 2022 20:26:08 +0800 Subject: [PATCH 431/752] batch push --- internal/msg_gateway/gate/rpc_server.go | 6 ++++++ internal/msg_gateway/gate/ws_server.go | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index b0adb5037..30cca624b 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -7,6 +7,7 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbRelay "Open_IM/pkg/proto/relay" + sdk_ws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "bytes" "context" @@ -142,6 +143,11 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser log.NewInfo(req.OperationID, "GetUsersOnlineStatus rpc return ", resp.String()) return &resp, nil } + +func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { + return nil +} + func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index e43a81f5a..20bd3d484 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -19,7 +19,8 @@ import ( type UserConn struct { *websocket.Conn - w *sync.Mutex + w *sync.Mutex + PushedMaxSeq uint32 } type WServer struct { wsAddr string From 6525d63459a68a908b9fcbe1028f911c2e2ca5ae Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 12:39:28 +0800 Subject: [PATCH 432/752] fix bug --- config/config.yaml | 5 +++ internal/demo/register/onboarding_process.go | 2 +- internal/msg_gateway/gate/logic.go | 2 +- internal/rpc/msg/send_msg.go | 24 ++++++++++++- internal/rpc/organization/organization.go | 5 ++- pkg/common/config/config.go | 12 ++++--- pkg/common/constant/constant.go | 35 ++++++++++--------- pkg/common/constant/error.go | 13 +++---- .../im_mysql_model/organization_model.go | 17 ++++++--- 9 files changed, 79 insertions(+), 36 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 628192e4f..29b4174d8 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -230,6 +230,11 @@ chatpersistencemysql: true reliablestorage: false #消息缓存时间 msgCacheTimeout: 1800 +#群聊已读开启 +groupMessageHasReadReceiptEnable: false +#单聊已读开启 +singleMessageHasReadReceiptEnable: false + #token config tokenpolicy: diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 6f3f0b15f..501d49813 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -181,7 +181,7 @@ func onboardingProcessNotification(operationID, userID, groupID string) { Content: content, MsgFrom: constant.UserMsgType, ContentType: constant.Text, - SessionType: constant.SingleChatType, + SessionType: constant.GroupChatType, OperationID: operationID, } // notification user join group diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 7ce2d65ba..b46abee7c 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -210,7 +210,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { } func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) if isPass { diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index ca355abc4..fe9b0360d 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -49,6 +49,24 @@ type MsgCallBackResp struct { } } +func isMessageHasReadEnabled(pb *pbChat.SendMsgReq) (bool, int32, string) { + switch pb.MsgData.ContentType { + case constant.HasReadReceipt: + if config.Config.SingleMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + case constant.GroupHasReadReceipt: + if config.Config.GroupMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + } + return true, 0, "" +} + func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { if data.MsgData.SessionType == constant.SingleChatType { if utils.IsContain(data.MsgData.SendID, config.Config.Manager.AppManagerUid) { @@ -150,7 +168,11 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S replay := pbChat.SendMsgResp{} newTime := db.GetCurrentTimestampByMill() log.NewWarn(pb.OperationID, "rpc sendMsg come here", pb.String(), pb.MsgData.ClientMsgID) - flag, errCode, errMsg := userRelationshipVerification(pb) + flag, errCode, errMsg := isMessageHasReadEnabled(pb) + if !flag { + return returnMsg(&replay, pb, errCode, errMsg, "", 0) + } + flag, errCode, errMsg = userRelationshipVerification(pb) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 5594e760c..7b3624257 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -102,7 +102,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea log.Error(req.OperationID, errMsg) return &rpc.CreateDepartmentResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } - err, createdDepartment := imdb.GetDepartment(department.DepartmentID) + createdDepartment, err := imdb.GetDepartment(department.DepartmentID) if err != nil { errMsg := req.OperationID + " " + "GetDepartment failed " + err.Error() + department.DepartmentID log.Error(req.OperationID, errMsg) @@ -141,6 +141,9 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea resp.ErrMsg = constant.ErrDB.ErrMsg + " createGroup failed " + createGroupResp.ErrMsg return resp, nil } + if err := imdb.SetDepartmentRelatedGroupID(createGroupResp.GroupInfo.GroupID, department.DepartmentID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetDepartmentRelatedGroupID failed", err.Error()) + } return resp, nil } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 8250199a7..dff8a693e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -214,11 +214,13 @@ type config struct { MsgToPush string `yaml:"msgToPush"` } } - Secret string `yaml:"secret"` - MultiLoginPolicy int `yaml:"multiloginpolicy"` - ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` - ReliableStorage bool `yaml:"reliablestorage"` - MsgCacheTimeout int `yaml:"msgCacheTimeout"` + Secret string `yaml:"secret"` + MultiLoginPolicy int `yaml:"multiloginpolicy"` + ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` + ReliableStorage bool `yaml:"reliablestorage"` + MsgCacheTimeout int `yaml:"msgCacheTimeout"` + GroupMessageHasReadReceiptEnable bool `yaml:"groupMessageHasReadReceiptEnable"` + SingleMessageHasReadReceiptEnable bool `yaml:"singleMessageHasReadReceiptEnable"` TokenPolicy struct { AccessSecret string `yaml:"accessSecret"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index bae1f15b9..fe7dbc9f5 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -28,23 +28,24 @@ const ( ///ContentType //UserRelated - Text = 101 - Picture = 102 - Voice = 103 - Video = 104 - File = 105 - AtText = 106 - Merger = 107 - Card = 108 - Location = 109 - Custom = 110 - Revoke = 111 - HasReadReceipt = 112 - Typing = 113 - Quote = 114 - Common = 200 - GroupMsg = 201 - SignalMsg = 202 + Text = 101 + Picture = 102 + Voice = 103 + Video = 104 + File = 105 + AtText = 106 + Merger = 107 + Card = 108 + Location = 109 + Custom = 110 + Revoke = 111 + HasReadReceipt = 112 + Typing = 113 + Quote = 114 + GroupHasReadReceipt = 116 + Common = 200 + GroupMsg = 201 + SignalMsg = 202 //SysRelated NotificationBegin = 1000 diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index b0c28725e..52c1253e1 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -49,12 +49,13 @@ var ( ErrTokenUnknown = ErrInfo{705, TokenUnknownMsg.Error()} ErrTokenKicked = ErrInfo{706, TokenUserKickedMsg.Error()} - ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} - ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} - ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} - ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} - ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} - ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} + ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} + ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} + ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} + ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} + ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrMessageHasReadDisable = ErrInfo{ErrCode: 811, ErrMsg: "message has read disable"} ) var ( diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index fb7a0ab18..7d8a7a2fd 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -16,14 +16,14 @@ func CreateDepartment(department *db.Department) error { return dbConn.Table("departments").Create(department).Error } -func GetDepartment(departmentID string) (error, *db.Department) { +func GetDepartment(departmentID string) (*db.Department, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { - return err, nil + return nil, err } var department db.Department err = dbConn.Table("departments").Where("department_id=?", departmentID).Find(&department).Error - return err, &department + return &department, err } func UpdateDepartment(department *db.Department, args map[string]interface{}) error { @@ -237,6 +237,15 @@ func GetSubDepartmentNum(departmentID string) (error, uint32) { return nil, number } +func SetDepartmentRelatedGroupID(groupID, departmentID string) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return utils.Wrap(err, "DefaultGormDB failed") + } + department := &db.Department{RelatedGroupID: groupID} + return dbConn.Model(&department).Where("department_id=?", departmentID).Update(department).Error +} + func GetDepartmentRelatedGroupIDList(departmentIDList []string) ([]string, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { @@ -257,7 +266,7 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, return nil, utils.Wrap(err, "") } err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error - return &department, err + return &parentDepartment, utils.Wrap(err, "") } func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]string) error { From 9eb0dd5e704c1abd46bf77ab083b9a407f62b18f Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 12:49:16 +0800 Subject: [PATCH 433/752] batch push --- internal/msg_gateway/gate/batch_push.go | 39 +++++++++++++++++++++++++ internal/msg_gateway/gate/rpc_server.go | 5 ---- internal/msg_gateway/gate/ws_server.go | 2 +- internal/rpc/friend/firend.go | 2 +- 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 internal/msg_gateway/gate/batch_push.go diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go new file mode 100644 index 000000000..c373fa996 --- /dev/null +++ b/internal/msg_gateway/gate/batch_push.go @@ -0,0 +1,39 @@ +package gate + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbChat "Open_IM/pkg/proto/chat" + sdk_ws "Open_IM/pkg/proto/sdk_ws" + "strings" +) + +var MaxPullMsgNum = 100 + +func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { + +} + +func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { + seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + if err != nil { + return nil + } + rpcReq := sdk_ws.PullMessageBySeqListReq{} + rpcReq.SeqList = seqList + rpcReq.UserID = pushToUserID + rpcReq.OperationID = operationID + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + msgClient := pbChat.NewChatClient(grpcConn) + reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) + + return nil +} + +func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { + return nil +} + +func (r *RPCServer) GetMaxSeq(userID string) (uint32, error) { + return 0, nil +} diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 30cca624b..cc16f1226 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -7,7 +7,6 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbRelay "Open_IM/pkg/proto/relay" - sdk_ws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "bytes" "context" @@ -144,10 +143,6 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser return &resp, nil } -func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { - return nil -} - func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 20bd3d484..690e57cd3 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -61,7 +61,7 @@ func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { //Connection mapping relationship, //userID+" "+platformID->conn //Initialize a lock for each user - newConn := &UserConn{conn, new(sync.Mutex)} + newConn := &UserConn{conn, new(sync.Mutex), 0} userCount++ ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0]) go ws.readMsg(newConn) diff --git a/internal/rpc/friend/firend.go b/internal/rpc/friend/firend.go index 313b2becf..4e3172b44 100644 --- a/internal/rpc/friend/firend.go +++ b/internal/rpc/friend/firend.go @@ -63,7 +63,7 @@ func (s *friendServer) Run() { defer srv.GracefulStop() //User friend related services register to etcd pbFriend.RegisterFriendServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { From 96f09c45f5996d7e64184e45c4c5567021793d69 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 13:12:46 +0800 Subject: [PATCH 434/752] batch push --- .../msg_transfer/logic/online_history_msg_handler.go | 4 ++-- internal/rpc/msg/send_msg.go | 4 ++-- pkg/common/kafka/producer.go | 11 +++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index f6f0b04bc..84b33cb4f 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -547,7 +547,7 @@ func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName) if grpcConn == nil { log.Error(rpcPushMsg.OperationID, "rpc dial failed", "push data", rpcPushMsg.String()) - pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID) + pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID, rpcPushMsg.OperationID) if err != nil { log.Error(mqPushMsg.OperationID, "kafka send failed", "send data", message.String(), "pid", pid, "offset", offset, "err", err.Error()) } @@ -557,7 +557,7 @@ func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { _, err := msgClient.PushMsg(context.Background(), &rpcPushMsg) if err != nil { log.Error(rpcPushMsg.OperationID, "rpc send failed", rpcPushMsg.OperationID, "push data", rpcPushMsg.String(), "err", err.Error()) - pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID) + pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID, rpcPushMsg.OperationID) if err != nil { log.Error(message.OperationID, "kafka send failed", mqPushMsg.OperationID, "send data", mqPushMsg.String(), "pid", pid, "offset", offset, "err", err.Error()) } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 7897d3f3d..1000c6771 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -376,7 +376,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status string) error { switch status { case constant.OnlineStatus: - pid, offset, err := rpc.onlineProducer.SendMessage(m, key) + pid, offset, err := rpc.onlineProducer.SendMessage(m, key, m.OperationID) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } else { @@ -384,7 +384,7 @@ func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status str } return err case constant.OfflineStatus: - pid, offset, err := rpc.onlineProducer.SendMessage(m, key) + pid, offset, err := rpc.onlineProducer.SendMessage(m, key, m.OperationID) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index 1c7eeb6fb..3d8ca02f5 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -33,19 +33,22 @@ func NewKafkaProducer(addr []string, topic string) *Producer { return &p } -func (p *Producer) SendMessage(m proto.Message, key string) (int32, int64, error) { +func (p *Producer) SendMessage(m proto.Message, key string, operationID string) (int32, int64, error) { + log2.Info(operationID, "SendMessage", "key ", key, m.String(), p.producer) kMsg := &sarama.ProducerMessage{} kMsg.Topic = p.topic kMsg.Key = sarama.StringEncoder(key) bMsg, err := proto.Marshal(m) if err != nil { - log2.Error("", "", "proto marshal err = %s", err.Error()) + log2.Error(operationID, "", "proto marshal err = %s", err.Error()) return -1, -1, err } if len(bMsg) == 0 { return 0, 0, errors.New("msg content is nil") } kMsg.Value = sarama.ByteEncoder(bMsg) - - return p.producer.SendMessage(kMsg) + log2.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer) + a, b, c := p.producer.SendMessage(kMsg) + log2.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg, p.producer) + return a, b, c } From 32565dd18898ee5d2cd8405d769881664af956e1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 13:57:10 +0800 Subject: [PATCH 435/752] config for msg read receipt --- internal/rpc/msg/send_msg.go | 24 +++++++++++++++++++++- pkg/common/config/config.go | 15 +++++++------- pkg/common/constant/constant.go | 35 +++++++++++++++++---------------- pkg/common/constant/error.go | 13 ++++++------ 4 files changed, 56 insertions(+), 31 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 1000c6771..be6a52f66 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -49,6 +49,24 @@ type MsgCallBackResp struct { } } +func isMessageHasReadEnabled(pb *pbChat.SendMsgReq) (bool, int32, string) { + switch pb.MsgData.ContentType { + case constant.HasReadReceipt: + if config.Config.SingleMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + case constant.GroupHasReadReceipt: + if config.Config.GroupMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + } + return true, 0, "" +} + func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { if data.MsgData.SessionType == constant.GroupChatType { return true, 0, "" @@ -144,7 +162,11 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S replay := pbChat.SendMsgResp{} newTime := db.GetCurrentTimestampByMill() log.NewWarn(pb.OperationID, "rpc sendMsg come here", pb.String(), pb.MsgData.ClientMsgID) - flag, errCode, errMsg := userRelationshipVerification(pb) + flag, errCode, errMsg := isMessageHasReadEnabled(pb) + if !flag { + return returnMsg(&replay, pb, errCode, errMsg, "", 0) + } + flag, errCode, errMsg = userRelationshipVerification(pb) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 2b9a4d891..9da3fdf29 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -214,13 +214,14 @@ type config struct { MsgToPush string `yaml:"msgToPush"` } } - Secret string `yaml:"secret"` - MultiLoginPolicy int `yaml:"multiloginpolicy"` - ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` - ReliableStorage bool `yaml:"reliablestorage"` - MsgCacheTimeout int `yaml:"msgCacheTimeout"` - - TokenPolicy struct { + Secret string `yaml:"secret"` + MultiLoginPolicy int `yaml:"multiloginpolicy"` + ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` + ReliableStorage bool `yaml:"reliablestorage"` + MsgCacheTimeout int `yaml:"msgCacheTimeout"` + GroupMessageHasReadReceiptEnable bool `yaml:"groupMessageHasReadReceiptEnable"` + SingleMessageHasReadReceiptEnable bool `yaml:"singleMessageHasReadReceiptEnable"` + TokenPolicy struct { AccessSecret string `yaml:"accessSecret"` AccessExpire int64 `yaml:"accessExpire"` } diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 53a4cce38..a726111b3 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -28,23 +28,24 @@ const ( ///ContentType //UserRelated - Text = 101 - Picture = 102 - Voice = 103 - Video = 104 - File = 105 - AtText = 106 - Merger = 107 - Card = 108 - Location = 109 - Custom = 110 - Revoke = 111 - HasReadReceipt = 112 - Typing = 113 - Quote = 114 - Common = 200 - GroupMsg = 201 - SignalMsg = 202 + Text = 101 + Picture = 102 + Voice = 103 + Video = 104 + File = 105 + AtText = 106 + Merger = 107 + Card = 108 + Location = 109 + Custom = 110 + Revoke = 111 + HasReadReceipt = 112 + Typing = 113 + Quote = 114 + GroupHasReadReceipt = 116 + Common = 200 + GroupMsg = 201 + SignalMsg = 202 //SysRelated NotificationBegin = 1000 diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index b0c28725e..52c1253e1 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -49,12 +49,13 @@ var ( ErrTokenUnknown = ErrInfo{705, TokenUnknownMsg.Error()} ErrTokenKicked = ErrInfo{706, TokenUserKickedMsg.Error()} - ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} - ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} - ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} - ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} - ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} - ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} + ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} + ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} + ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} + ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} + ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrMessageHasReadDisable = ErrInfo{ErrCode: 811, ErrMsg: "message has read disable"} ) var ( From 0dfa224aeb461e351a8baf264b68feaecaaa945a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 14:00:18 +0800 Subject: [PATCH 436/752] config for msg read receipt --- config/config.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index e11407c5c..196b7e231 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -230,7 +230,10 @@ chatpersistencemysql: true reliablestorage: false #消息缓存时间 msgCacheTimeout: 1800 - +#群聊已读开启 +groupMessageHasReadReceiptEnable: false +#单聊已读开启 +singleMessageHasReadReceiptEnable: false #token config tokenpolicy: accessSecret: "open_im_server" #token生成相关,默认即可 From 5fd91e808a88d5c6e9e0647890b4950fca3127d7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 14:07:09 +0800 Subject: [PATCH 437/752] batch push --- internal/msg_gateway/gate/batch_push.go | 28 +++++++++++-------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index c373fa996..6a7e7886f 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -1,31 +1,27 @@ package gate import ( - "Open_IM/pkg/common/config" - "Open_IM/pkg/grpc-etcdv3/getcdv3" - pbChat "Open_IM/pkg/proto/chat" sdk_ws "Open_IM/pkg/proto/sdk_ws" - "strings" ) var MaxPullMsgNum = 100 func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { - + return nil, nil } func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { - seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) - if err != nil { - return nil - } - rpcReq := sdk_ws.PullMessageBySeqListReq{} - rpcReq.SeqList = seqList - rpcReq.UserID = pushToUserID - rpcReq.OperationID = operationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) - reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) + //seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + //if err != nil { + // return nil + //} + //rpcReq := sdk_ws.PullMessageBySeqListReq{} + //rpcReq.SeqList = seqList + //rpcReq.UserID = pushToUserID + //rpcReq.OperationID = operationID + //grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + //msgClient := pbChat.NewChatClient(grpcConn) + //reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) return nil } From 4f184a6723619b451ec5bcbc71efa0a4c77d0f44 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 14:24:24 +0800 Subject: [PATCH 438/752] batch push --- internal/msg_gateway/gate/batch_push.go | 47 +++++++++++++++++-------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 6a7e7886f..089c91e4c 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -1,7 +1,13 @@ package gate import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/log" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbChat "Open_IM/pkg/proto/chat" sdk_ws "Open_IM/pkg/proto/sdk_ws" + "context" + "strings" ) var MaxPullMsgNum = 100 @@ -9,21 +15,34 @@ var MaxPullMsgNum = 100 func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { return nil, nil } - -func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { - //seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) - //if err != nil { - // return nil - //} - //rpcReq := sdk_ws.PullMessageBySeqListReq{} - //rpcReq.SeqList = seqList - //rpcReq.UserID = pushToUserID - //rpcReq.OperationID = operationID - //grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - //msgClient := pbChat.NewChatClient(grpcConn) - //reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) - +func (r *RPCServer) GetMergeSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { return nil + //ws.getUserConn(pushToUserID, platformID) + //msgData.Seq + //msgList := r.GetSingleMsgForPush(operationID, msgData, pushToUserID, platformID) + +} +func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { + seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + if err != nil { + log.Error(operationID, "GenPullSeqList failed ", err.Error(), msgData.Seq, pushToUserID) + return nil + } + rpcReq := sdk_ws.PullMessageBySeqListReq{} + rpcReq.SeqList = seqList + rpcReq.UserID = pushToUserID + rpcReq.OperationID = operationID + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + msgClient := pbChat.NewChatClient(grpcConn) + reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) + if err != nil { + log.Error(operationID, "PullMessageBySeqList failed ", err.Error(), rpcReq.String()) + return nil + } + if len(reply.List) == 0 { + return nil + } + return reply.List } func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { From 11e619d1b367f602675df5e006d37b42fbb770c2 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 14:26:18 +0800 Subject: [PATCH 439/752] log --- internal/rpc/msg/send_msg.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index be6a52f66..131a36bab 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -166,6 +166,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } + log.Debug(pb.OperationID, "flag ", flag, config.Config.SingleMessageHasReadReceiptEnable, config.Config.GroupMessageHasReadReceiptEnable) flag, errCode, errMsg = userRelationshipVerification(pb) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) From 7b08d98647fb8a1df818cb0aca39ce4c3c860170 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 14:58:43 +0800 Subject: [PATCH 440/752] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 7d8a7a2fd..f0539edbd 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -276,7 +276,7 @@ func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]s } if department.DepartmentID != "" { *parentIDList = append(*parentIDList, department.ParentID) - err = GetDepartmentParent(departmentID, dbConn, parentIDList) + err = GetDepartmentParent(department.DepartmentID, dbConn, parentIDList) if err != nil { return err } From 60f8f93a0275eb15758876f3a2dd1acf68ce882e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 15:20:40 +0800 Subject: [PATCH 441/752] batch push --- internal/msg_gateway/gate/batch_push.go | 78 +++++++++++++++++++------ 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 089c91e4c..075de0586 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -2,10 +2,12 @@ package gate import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" sdk_ws "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" "context" "strings" ) @@ -13,24 +15,62 @@ import ( var MaxPullMsgNum = 100 func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { - return nil, nil -} -func (r *RPCServer) GetMergeSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { - return nil - //ws.getUserConn(pushToUserID, platformID) - //msgData.Seq - //msgList := r.GetSingleMsgForPush(operationID, msgData, pushToUserID, platformID) - -} -func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { - seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + maxSeq, err := db.DB.GetUserMaxSeq(userID) if err != nil { - log.Error(operationID, "GenPullSeqList failed ", err.Error(), msgData.Seq, pushToUserID) + log.Error(operationID, "GetUserMaxSeq failed ", userID, err.Error()) + return nil, utils.Wrap(err, "") + } + + var seqList []uint32 + num := 0 + for i := currentSeq + 1; i < uint32(maxSeq); i++ { + seqList = append(seqList, i) + num++ + if num == MaxPullMsgNum { + break + } + } + log.Info(operationID, "GenPullSeqList ", seqList, "current seq", currentSeq) + return seqList, nil +} +func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { + userConn := ws.getUserConn(pushToUserID, platformID) + if userConn == nil { + return []*sdk_ws.MsgData{msgData} + } + + if msgData.Seq <= userConn.PushedMaxSeq { + return nil + } + + msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) + if msgList == nil { + userConn.PushedMaxSeq = msgData.Seq + return []*sdk_ws.MsgData{msgData} + } + msgList = append(msgList, msgData) + + for _, v := range msgList { + if v.Seq > userConn.PushedMaxSeq { + userConn.PushedMaxSeq = v.Seq + } + } + return msgList +} + +func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, userID string) []*sdk_ws.MsgData { + seqList, err := r.GenPullSeqList(currentMsgSeq, operationID, userID) + if err != nil { + log.Error(operationID, "GenPullSeqList failed ", err.Error(), currentMsgSeq, userID) + return nil + } + if len(seqList) == 0 { + log.Error(operationID, "GenPullSeqList len == 0 ", currentMsgSeq, userID) return nil } rpcReq := sdk_ws.PullMessageBySeqListReq{} rpcReq.SeqList = seqList - rpcReq.UserID = pushToUserID + rpcReq.UserID = userID rpcReq.OperationID = operationID grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) msgClient := pbChat.NewChatClient(grpcConn) @@ -45,10 +85,10 @@ func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgD return reply.List } -func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { - return nil -} - -func (r *RPCServer) GetMaxSeq(userID string) (uint32, error) { - return 0, nil +func (r *RPCServer) GetBatchUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID int) map[string][]*sdk_ws.MsgData { + user2PushMsg := make(map[string][]*sdk_ws.MsgData, 0) + for _, v := range pushToUserIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, v, platformID) + } + return user2PushMsg } From c8bf95578c4a43a87f30df6eab2c8ad798de8888 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:25:02 +0800 Subject: [PATCH 442/752] fix bug --- .../db/mysql_model/im_mysql_model/organization_model.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index f0539edbd..baf6acc8e 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -265,7 +265,9 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, if err != nil { return nil, utils.Wrap(err, "") } - err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error + if department.ParentID != "" { + err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error + } return &parentDepartment, utils.Wrap(err, "") } From 3f129513bbc7cc089bf1eabf7759359fd04d63b8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:33:28 +0800 Subject: [PATCH 443/752] fix bug --- internal/demo/register/onboarding_process.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 501d49813..a1860c9e2 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -13,7 +13,6 @@ import ( "context" "errors" "fmt" - "github.com/golang/protobuf/proto" "math/rand" "strings" "time" @@ -167,18 +166,18 @@ func onboardingProcessNotification(operationID, userID, groupID string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupID) }() - var tips commonPb.TipsComm - tips.DefaultTips = config.Config.Notification.JoinDepartmentNotification.DefaultTips.Tips - tips.JsonDetail = "" - content, err := proto.Marshal(&tips) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), "proto marshal failed") - return - } + //var tips commonPb.TipsComm + //tips.DefaultTips = config.Config.Notification.JoinDepartmentNotification.DefaultTips.Tips + //tips.JsonDetail = "" + //content, err := proto.Marshal(&tips) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), "proto marshal failed") + // return + //} notification := &msg.NotificationMsg{ SendID: userID, RecvID: groupID, - Content: content, + Content: []byte("大家来欢迎我加入部门"), MsgFrom: constant.UserMsgType, ContentType: constant.Text, SessionType: constant.GroupChatType, From 9b4890a99ffbed600272d5d99ef7de3aaaef1ab9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:33:37 +0800 Subject: [PATCH 444/752] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index baf6acc8e..43a144963 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -277,7 +277,7 @@ func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]s return err } if department.DepartmentID != "" { - *parentIDList = append(*parentIDList, department.ParentID) + *parentIDList = append(*parentIDList, department.DepartmentID) err = GetDepartmentParent(department.DepartmentID, dbConn, parentIDList) if err != nil { return err From c46f574aa884d160072ae78b404d682036d2c1d2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:40:53 +0800 Subject: [PATCH 445/752] fix bug --- internal/demo/register/onboarding_process.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a1860c9e2..b25b2d763 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -157,12 +157,12 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { log.NewError(req.OperationID, utils.GetSelfFuncName(), resp) continue } - onboardingProcessNotification(operationID, userID, groupID) + onboardingProcessNotification(operationID, userID, groupID, userName) } } // welcome user join department notification -func onboardingProcessNotification(operationID, userID, groupID string) { +func onboardingProcessNotification(operationID, userID, groupID, userName string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupID) }() @@ -174,10 +174,11 @@ func onboardingProcessNotification(operationID, userID, groupID string) { // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), "proto marshal failed") // return //} + welcomeString := fmt.Sprintf("欢迎%s加入部门", userName) notification := &msg.NotificationMsg{ SendID: userID, RecvID: groupID, - Content: []byte("大家来欢迎我加入部门"), + Content: []byte(welcomeString), MsgFrom: constant.UserMsgType, ContentType: constant.Text, SessionType: constant.GroupChatType, From e57ce28d2b41cc882cd62258aad441aeac039f97 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 17:04:16 +0800 Subject: [PATCH 446/752] batch push --- config/config.yaml | 1 + internal/msg_gateway/gate/batch_push.go | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/config/config.yaml b/config/config.yaml index 29b4174d8..69ae4ed65 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -236,6 +236,7 @@ groupMessageHasReadReceiptEnable: false singleMessageHasReadReceiptEnable: false + #token config tokenpolicy: accessSecret: "open_im_server" #token生成相关,默认即可 diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 075de0586..41c71c876 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -33,6 +33,15 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID log.Info(operationID, "GenPullSeqList ", seqList, "current seq", currentSeq) return seqList, nil } + +func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { + user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) + for _, v := range platformIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + } + return user2PushMsg +} + func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { userConn := ws.getUserConn(pushToUserID, platformID) if userConn == nil { From ab76d460079b00dfdded3181ccda1f58c02abd7d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 17:19:39 +0800 Subject: [PATCH 447/752] demo --- internal/demo/register/login.go | 8 ++- internal/demo/register/reset_password.go | 10 +-- internal/demo/register/set_password.go | 7 +- pkg/common/db/model_struct.go | 1 + .../mysql_model/im_mysql_model/demo_model.go | 3 +- pkg/utils/encryption .go | 64 +++++++++++++++++++ pkg/utils/md5.go | 13 ---- 7 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 pkg/utils/encryption .go delete mode 100644 pkg/utils/md5.go diff --git a/internal/demo/register/login.go b/internal/demo/register/login.go index b5d587844..4f0ea5cbd 100644 --- a/internal/demo/register/login.go +++ b/internal/demo/register/login.go @@ -46,12 +46,18 @@ func Login(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.PasswordErr, "errMsg": "password err"}) return } + var userID string + if r.UserID != "" { + userID = r.UserID + } else { + userID = r.Account + } url := fmt.Sprintf("http://%s:%d/auth/user_token", utils.ServerIP, config.Config.Api.GinPort[0]) openIMGetUserToken := api.UserTokenReq{} openIMGetUserToken.OperationID = params.OperationID openIMGetUserToken.Platform = params.Platform openIMGetUserToken.Secret = config.Config.Secret - openIMGetUserToken.UserID = account + openIMGetUserToken.UserID = userID openIMGetUserTokenResp := api.UserTokenResp{} bMsg, err := http2.Post(url, openIMGetUserToken, 2) if err != nil { diff --git a/internal/demo/register/reset_password.go b/internal/demo/register/reset_password.go index b668f4f62..aee1a7cf5 100644 --- a/internal/demo/register/reset_password.go +++ b/internal/demo/register/reset_password.go @@ -15,8 +15,8 @@ type resetPasswordRequest struct { VerificationCode string `json:"verificationCode" binding:"required"` Email string `json:"email"` PhoneNumber string `json:"phoneNumber"` - NewPassword string `json:"newPassword" binding:"required"` - OperationID string `json:"operationID"` + NewPassword string `json:"newPassword" binding:"required"` + OperationID string `json:"operationID"` } func ResetPassword(c *gin.Context) { @@ -44,12 +44,14 @@ func ResetPassword(c *gin.Context) { } user, err := im_mysql_model.GetRegister(account) if err != nil || user.Account == "" { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) + } c.JSON(http.StatusOK, gin.H{"errCode": constant.NotRegistered, "errMsg": "user not register!"}) return } if err := im_mysql_model.ResetPassword(account, req.NewPassword); err != nil { - c.JSON(http.StatusOK, gin.H{"errCode": constant.ResetPasswordFailed, "errMsg": "reset password failed: "+err.Error()}) + c.JSON(http.StatusOK, gin.H{"errCode": constant.ResetPasswordFailed, "errMsg": "reset password failed: " + err.Error()}) return } c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "reset password success"}) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 7a0578264..c45f53a23 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -52,11 +52,12 @@ func SetPassword(c *gin.Context) { return } } + userID := utils.Md5(account) url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID openIMRegisterReq.Platform = params.Platform - openIMRegisterReq.UserID = account + openIMRegisterReq.UserID = userID openIMRegisterReq.Nickname = params.Name openIMRegisterReq.Secret = config.Config.Secret openIMRegisterResp := api.UserRegisterResp{} @@ -76,7 +77,7 @@ func SetPassword(c *gin.Context) { return } log.Info(params.OperationID, "begin store mysql", account, params.Password) - err = im_mysql_model.SetPassword(account, params.Password, params.Ex) + err = im_mysql_model.SetPassword(account, params.Password, params.Ex, userID) if err != nil { log.NewError(params.OperationID, "set phone number password error", account, "err", err.Error()) c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": err.Error()}) @@ -84,7 +85,7 @@ func SetPassword(c *gin.Context) { } log.Info(params.OperationID, "end setPassword", account, params.Password) // demo onboarding - onboardingProcess(params.OperationID, account, params.Name) + onboardingProcess(params.OperationID, userID, params.Name) c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken}) return } diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index b0854169e..f8e9bca7b 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -6,6 +6,7 @@ type Register struct { Account string `gorm:"column:account;primary_key;type:char(255)" json:"account"` Password string `gorm:"column:password;type:varchar(255)" json:"password"` Ex string `gorm:"column:ex;size:1024" json:"ex"` + UserID string `gorm:"column:user_id;type:varchar(255)" json:"userID"` } // diff --git a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go index eff3050be..278e8bd7f 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go @@ -15,11 +15,12 @@ func GetRegister(account string) (*db.Register, error) { account).Take(&r).Error } -func SetPassword(account, password, ex string) error { +func SetPassword(account, password, ex, userID string) error { r := db.Register{ Account: account, Password: password, Ex: ex, + UserID: userID, } dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { diff --git a/pkg/utils/encryption .go b/pkg/utils/encryption .go new file mode 100644 index 000000000..a4862de2e --- /dev/null +++ b/pkg/utils/encryption .go @@ -0,0 +1,64 @@ +package utils + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/md5" + "encoding/hex" + "errors" +) + +func Md5(s string, salt ...string) string { + h := md5.New() + h.Write([]byte(s)) + if len(salt) > 0 { + h.Write([]byte(salt[0])) + } + cipher := h.Sum(nil) + return hex.EncodeToString(cipher) +} + +func AesEncrypt(data []byte, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + encryptBytes := pkcs7Padding(data, blockSize) + crypted := make([]byte, len(encryptBytes)) + blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) + blockMode.CryptBlocks(crypted, encryptBytes) + return crypted, nil +} + +func AesDecrypt(data []byte, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) + crypted := make([]byte, len(data)) + blockMode.CryptBlocks(crypted, data) + crypted, err = pkcs7UnPadding(crypted) + if err != nil { + return nil, err + } + return crypted, nil +} + +func pkcs7Padding(data []byte, blockSize int) []byte { + padding := blockSize - len(data)%blockSize + padText := bytes.Repeat([]byte{byte(padding)}, padding) + return append(data, padText...) +} + +func pkcs7UnPadding(data []byte) ([]byte, error) { + length := len(data) + if length == 0 { + return nil, errors.New("encrypt error") + } + unPadding := int(data[length-1]) + return data[:(length - unPadding)], nil +} diff --git a/pkg/utils/md5.go b/pkg/utils/md5.go deleted file mode 100644 index 8e3531668..000000000 --- a/pkg/utils/md5.go +++ /dev/null @@ -1,13 +0,0 @@ -package utils - -import ( - "crypto/md5" - "encoding/hex" -) - -func Md5(s string) string { - h := md5.New() - h.Write([]byte(s)) - cipher := h.Sum(nil) - return hex.EncodeToString(cipher) -} From ceca0f095bcc946114a0edcaa2a57007472fabc2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 17:24:30 +0800 Subject: [PATCH 448/752] demo --- pkg/common/db/mysql.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/mysql.go b/pkg/common/db/mysql.go index 0f9f4303f..9713537b9 100644 --- a/pkg/common/db/mysql.go +++ b/pkg/common/db/mysql.go @@ -53,7 +53,9 @@ func initMysqlDB() { } fmt.Println("open db ok ", dsn) - db.AutoMigrate(&Friend{}, + db.AutoMigrate( + &Register{}, + &Friend{}, &FriendRequest{}, &Group{}, &GroupMember{}, From 1d4dc81e553ab27af461ea21c984ea758707ef47 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 9 Jun 2022 18:08:42 +0800 Subject: [PATCH 449/752] add batch push --- internal/msg_gateway/gate/rpc_server.go | 108 ++++++++++++++++++++---- 1 file changed, 91 insertions(+), 17 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index cc16f1226..05853a04a 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -7,6 +7,7 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbRelay "Open_IM/pkg/proto/relay" + sdk_ws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "bytes" "context" @@ -143,30 +144,78 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser return &resp, nil } +//func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { +// log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) +// var singleUserResult []*pbRelay.SingelMsgToUserResultList +// //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) +// msgBytes, _ := proto.Marshal(req.MsgData) +// mReply := Resp{ +// ReqIdentifier: constant.WSPushMsg, +// OperationID: req.OperationID, +// Data: msgBytes, +// } +// var replyBytes bytes.Buffer +// enc := gob.NewEncoder(&replyBytes) +// err := enc.Encode(mReply) +// if err != nil { +// log.NewError(req.OperationID, "data encode err", err.Error()) +// } +// for _, v := range req.PushToUserIDList { +// var resp []*pbRelay.SingleMsgToUserPlatform +// tempT := &pbRelay.SingelMsgToUserResultList{ +// UserID: v, +// } +// userConnMap := ws.getUserAllCons(v) +// for platform, userConn := range userConnMap { +// if userConn != nil { +// resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) +// if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { +// tempT.OnlinePush = true +// log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) +// temp := &pbRelay.SingleMsgToUserPlatform{ +// ResultCode: resultCode, +// RecvID: v, +// RecvPlatFormID: int32(platform), +// } +// resp = append(resp, temp) +// } +// +// } +// } +// tempT.Resp = resp +// singleUserResult = append(singleUserResult, tempT) +// +// } +// +// return &pbRelay.OnlineBatchPushOneMsgResp{ +// SinglePushResult: singleUserResult, +// }, nil +//} func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList - msgBytes, _ := proto.Marshal(req.MsgData) - mReply := Resp{ - ReqIdentifier: constant.WSPushMsg, - OperationID: req.OperationID, - Data: msgBytes, - } - var replyBytes bytes.Buffer - enc := gob.NewEncoder(&replyBytes) - err := enc.Encode(mReply) - if err != nil { - log.NewError(req.OperationID, "data encode err", err.Error()) - } + for _, v := range req.PushToUserIDList { var resp []*pbRelay.SingleMsgToUserPlatform tempT := &pbRelay.SingelMsgToUserResultList{ UserID: v, } userConnMap := ws.getUserAllCons(v) - for platform, userConn := range userConnMap { - if userConn != nil { - resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) + var platformList []int + for k, _ := range userConnMap { + platformList = append(platformList, k) + } + needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) + for platform, list := range needPushMapList { + if list != nil { + for _, v := range list { + req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + } + replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) + if err != nil { + continue + } + resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) @@ -178,17 +227,42 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online resp = append(resp, temp) } + } else { + if utils.IsContainInt(platform, r.pushTerminal) { + tempT.OnlinePush = true + temp := &pbRelay.SingleMsgToUserPlatform{ + ResultCode: 0, + RecvID: v, + RecvPlatFormID: int32(platform), + } + resp = append(resp, temp) + } } } tempT.Resp = resp singleUserResult = append(singleUserResult, tempT) - } - return &pbRelay.OnlineBatchPushOneMsgResp{ SinglePushResult: singleUserResult, }, nil } +func (r *RPCServer) encodeWsData(wsData *sdk_ws.MsgData, operationID string) (bytes.Buffer, error) { + msgBytes, _ := proto.Marshal(wsData) + mReply := Resp{ + ReqIdentifier: constant.WSPushMsg, + OperationID: operationID, + Data: msgBytes, + } + var replyBytes bytes.Buffer + enc := gob.NewEncoder(&replyBytes) + err := enc.Encode(mReply) + if err != nil { + log.NewError(operationID, "data encode err", err.Error()) + return bytes.Buffer{}, err + } + return replyBytes, nil +} + func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { log.NewInfo(req.OperationID, "KickUserOffline is arriving", req.String()) for _, v := range req.KickUserIDList { From dbcfcafdfc36c64f4c04f637591456f8230beb23 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 18:16:23 +0800 Subject: [PATCH 450/752] fix word --- pkg/common/constant/constant.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index a726111b3..7728efda9 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -222,7 +222,7 @@ var ContentType2PushContent = map[int64]string{ AtText: "[有人@你]", GroupMsg: "你收到一条群聊消息", Common: "你收到一条新消息", - SignalMsg: "音視頻通話邀請", + SignalMsg: "音视频通话邀请", } const ( From 2ede9ef8ed11cdd0c1e283c1f83e2d6c33693616 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 9 Jun 2022 18:24:32 +0800 Subject: [PATCH 451/752] add batch push --- internal/msg_gateway/gate/rpc_server.go | 94 +++++++------- internal/push/logic/push_to_client.go | 2 +- pkg/proto/relay/relay.pb.go | 158 ++++++++++++++---------- pkg/proto/relay/relay.proto | 1 + 4 files changed, 145 insertions(+), 110 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 05853a04a..90c4cbd17 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -144,53 +144,53 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser return &resp, nil } -//func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { -// log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) -// var singleUserResult []*pbRelay.SingelMsgToUserResultList -// //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) -// msgBytes, _ := proto.Marshal(req.MsgData) -// mReply := Resp{ -// ReqIdentifier: constant.WSPushMsg, -// OperationID: req.OperationID, -// Data: msgBytes, -// } -// var replyBytes bytes.Buffer -// enc := gob.NewEncoder(&replyBytes) -// err := enc.Encode(mReply) -// if err != nil { -// log.NewError(req.OperationID, "data encode err", err.Error()) -// } -// for _, v := range req.PushToUserIDList { -// var resp []*pbRelay.SingleMsgToUserPlatform -// tempT := &pbRelay.SingelMsgToUserResultList{ -// UserID: v, -// } -// userConnMap := ws.getUserAllCons(v) -// for platform, userConn := range userConnMap { -// if userConn != nil { -// resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) -// if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { -// tempT.OnlinePush = true -// log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) -// temp := &pbRelay.SingleMsgToUserPlatform{ -// ResultCode: resultCode, -// RecvID: v, -// RecvPlatFormID: int32(platform), -// } -// resp = append(resp, temp) -// } -// -// } -// } -// tempT.Resp = resp -// singleUserResult = append(singleUserResult, tempT) -// -// } -// -// return &pbRelay.OnlineBatchPushOneMsgResp{ -// SinglePushResult: singleUserResult, -// }, nil -//} +func (r *RPCServer) SuperGroupOnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { + log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) + var singleUserResult []*pbRelay.SingelMsgToUserResultList + //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) + msgBytes, _ := proto.Marshal(req.MsgData) + mReply := Resp{ + ReqIdentifier: constant.WSPushMsg, + OperationID: req.OperationID, + Data: msgBytes, + } + var replyBytes bytes.Buffer + enc := gob.NewEncoder(&replyBytes) + err := enc.Encode(mReply) + if err != nil { + log.NewError(req.OperationID, "data encode err", err.Error()) + } + for _, v := range req.PushToUserIDList { + var resp []*pbRelay.SingleMsgToUserPlatform + tempT := &pbRelay.SingelMsgToUserResultList{ + UserID: v, + } + userConnMap := ws.getUserAllCons(v) + for platform, userConn := range userConnMap { + if userConn != nil { + resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) + if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { + tempT.OnlinePush = true + log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) + temp := &pbRelay.SingleMsgToUserPlatform{ + ResultCode: resultCode, + RecvID: v, + RecvPlatFormID: int32(platform), + } + resp = append(resp, temp) + } + + } + } + tempT.Resp = resp + singleUserResult = append(singleUserResult, tempT) + + } + + return &pbRelay.OnlineBatchPushOneMsgResp{ + SinglePushResult: singleUserResult, + }, nil +} func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 896953cd2..81fb024ca 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -162,7 +162,7 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: cacheResp.UserIDList}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: cacheResp.UserIDList}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 8a45ede9b..7affbc050 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{0} + return fileDescriptor_relay_eb517eee82ca0aca, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{1} + return fileDescriptor_relay_eb517eee82ca0aca, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -129,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{2} + return fileDescriptor_relay_eb517eee82ca0aca, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{3} + return fileDescriptor_relay_eb517eee82ca0aca, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -235,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{4} + return fileDescriptor_relay_eb517eee82ca0aca, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{5} + return fileDescriptor_relay_eb517eee82ca0aca, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{6} + return fileDescriptor_relay_eb517eee82ca0aca, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -384,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -446,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7, 0} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -493,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7, 1} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -549,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7, 2} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -603,7 +603,7 @@ func (m *KickUserOfflineReq) Reset() { *m = KickUserOfflineReq{} } func (m *KickUserOfflineReq) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineReq) ProtoMessage() {} func (*KickUserOfflineReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{8} + return fileDescriptor_relay_eb517eee82ca0aca, []int{8} } func (m *KickUserOfflineReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineReq.Unmarshal(m, b) @@ -654,7 +654,7 @@ func (m *KickUserOfflineResp) Reset() { *m = KickUserOfflineResp{} } func (m *KickUserOfflineResp) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineResp) ProtoMessage() {} func (*KickUserOfflineResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{9} + return fileDescriptor_relay_eb517eee82ca0aca, []int{9} } func (m *KickUserOfflineResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineResp.Unmarshal(m, b) @@ -704,6 +704,7 @@ type OnlineMessageRelayServiceClient interface { OnlinePushMsg(ctx context.Context, in *OnlinePushMsgReq, opts ...grpc.CallOption) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) + SuperGroupOnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) } @@ -742,6 +743,15 @@ func (c *onlineMessageRelayServiceClient) OnlineBatchPushOneMsg(ctx context.Cont return out, nil } +func (c *onlineMessageRelayServiceClient) SuperGroupOnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) { + out := new(OnlineBatchPushOneMsgResp) + err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/SuperGroupOnlineBatchPushOneMsg", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *onlineMessageRelayServiceClient) KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) { out := new(KickUserOfflineResp) err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/KickUserOffline", in, out, c.cc, opts...) @@ -757,6 +767,7 @@ type OnlineMessageRelayServiceServer interface { OnlinePushMsg(context.Context, *OnlinePushMsgReq) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(context.Context, *GetUsersOnlineStatusReq) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) + SuperGroupOnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) KickUserOffline(context.Context, *KickUserOfflineReq) (*KickUserOfflineResp, error) } @@ -818,6 +829,24 @@ func _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler(srv interface{}, c return interceptor(ctx, in, info, handler) } +func _OnlineMessageRelayService_SuperGroupOnlineBatchPushOneMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OnlineBatchPushOneMsgReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlineMessageRelayServiceServer).SuperGroupOnlineBatchPushOneMsg(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/relay.OnlineMessageRelayService/SuperGroupOnlineBatchPushOneMsg", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlineMessageRelayServiceServer).SuperGroupOnlineBatchPushOneMsg(ctx, req.(*OnlineBatchPushOneMsgReq)) + } + return interceptor(ctx, in, info, handler) +} + func _OnlineMessageRelayService_KickUserOffline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(KickUserOfflineReq) if err := dec(in); err != nil { @@ -852,6 +881,10 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ MethodName: "OnlineBatchPushOneMsg", Handler: _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler, }, + { + MethodName: "SuperGroupOnlineBatchPushOneMsg", + Handler: _OnlineMessageRelayService_SuperGroupOnlineBatchPushOneMsg_Handler, + }, { MethodName: "KickUserOffline", Handler: _OnlineMessageRelayService_KickUserOffline_Handler, @@ -861,54 +894,55 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_022e07b962c41b1c) } +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_eb517eee82ca0aca) } -var fileDescriptor_relay_022e07b962c41b1c = []byte{ - // 736 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x4e, 0x1b, 0x4b, - 0x10, 0xd5, 0x60, 0xcc, 0xa3, 0x80, 0x0b, 0xf4, 0x85, 0xcb, 0x30, 0x0b, 0xe3, 0x3b, 0x8b, 0xc8, - 0x8a, 0x12, 0x5b, 0x72, 0xb2, 0xcb, 0x0e, 0x2c, 0x88, 0x15, 0x2c, 0xa3, 0x76, 0xa2, 0x44, 0x6c, - 0xac, 0xc6, 0x6e, 0x9b, 0x91, 0xc7, 0x9e, 0xa6, 0x6b, 0x0c, 0x62, 0x93, 0x6d, 0x76, 0xf9, 0x84, - 0x2c, 0xf2, 0x13, 0xf9, 0x9b, 0x7c, 0x4b, 0xd4, 0x0f, 0x4f, 0x66, 0xfc, 0x80, 0xb0, 0xc8, 0xc6, - 0x72, 0x55, 0x57, 0x9f, 0xaa, 0x73, 0xaa, 0xa6, 0x1a, 0x76, 0x25, 0x0f, 0xd9, 0x7d, 0x45, 0xff, - 0x96, 0x85, 0x8c, 0xe2, 0x88, 0xe4, 0xb5, 0xe1, 0xfd, 0xdf, 0x14, 0x7c, 0xd4, 0xae, 0x37, 0x2a, - 0x62, 0xd0, 0xaf, 0xe8, 0x93, 0x0a, 0x76, 0x07, 0xed, 0x3b, 0xac, 0xdc, 0xa1, 0x89, 0xf4, 0xbf, - 0x3a, 0xb0, 0xd3, 0x1c, 0x85, 0xc1, 0x88, 0x5f, 0x8c, 0xf1, 0xba, 0x81, 0x7d, 0xca, 0x6f, 0x48, - 0x11, 0x36, 0x9a, 0x82, 0x4b, 0x16, 0x07, 0xd1, 0xa8, 0x5e, 0x73, 0x9d, 0xa2, 0x53, 0x5a, 0xa7, - 0x69, 0x17, 0x79, 0x0d, 0xab, 0x43, 0xec, 0xd7, 0x58, 0xcc, 0xdc, 0xa5, 0xa2, 0x53, 0xda, 0xa8, - 0x7a, 0x65, 0xe4, 0xf2, 0x96, 0xcb, 0x36, 0x13, 0x41, 0x5b, 0x30, 0xc9, 0x86, 0x58, 0x6e, 0x98, - 0x08, 0x3a, 0x09, 0x25, 0x3e, 0x6c, 0x8a, 0x31, 0x5e, 0xbf, 0x8f, 0x3e, 0x20, 0x97, 0xf5, 0x9a, - 0x9b, 0xd3, 0xc0, 0x19, 0x9f, 0x7f, 0x06, 0xbb, 0x53, 0xf5, 0xa0, 0x20, 0x55, 0x58, 0x96, 0x1c, - 0x85, 0xeb, 0x14, 0x73, 0xa5, 0x8d, 0x6a, 0xa1, 0x6c, 0xb8, 0xb6, 0x82, 0x51, 0x3f, 0xe4, 0x0d, - 0xec, 0x9b, 0xcb, 0x17, 0x21, 0x8b, 0x7b, 0x91, 0x1c, 0x52, 0x1d, 0xeb, 0x7f, 0x71, 0xe0, 0x50, - 0x45, 0xf0, 0x30, 0x89, 0xa0, 0x1c, 0xc7, 0x61, 0x7c, 0x1e, 0x60, 0x4c, 0xfe, 0x83, 0x95, 0xb1, - 0x29, 0xc2, 0xb0, 0xb3, 0x56, 0x92, 0x69, 0xe9, 0xcf, 0x33, 0x91, 0x02, 0x40, 0x94, 0x94, 0xac, - 0x49, 0xad, 0xd1, 0x94, 0xc7, 0xff, 0xe6, 0x80, 0x6b, 0x38, 0x1d, 0xb3, 0xb8, 0x73, 0xad, 0x7c, - 0xcd, 0x11, 0xff, 0xcb, 0x5a, 0x3f, 0x87, 0x9d, 0xb4, 0xae, 0x8a, 0xb4, 0x9b, 0x2b, 0xe6, 0x4a, - 0xeb, 0x74, 0xc6, 0xef, 0x07, 0x70, 0xb8, 0xa0, 0x3e, 0x14, 0xe4, 0x1c, 0x76, 0x50, 0xd3, 0x57, - 0x7e, 0xa3, 0xa0, 0xed, 0x43, 0x31, 0xa5, 0xce, 0x5c, 0x95, 0xe9, 0xcc, 0x4d, 0xff, 0x1e, 0x0e, - 0x16, 0x88, 0xa9, 0x64, 0x34, 0x41, 0x27, 0x51, 0x97, 0x6b, 0x21, 0x72, 0x34, 0xe5, 0x51, 0x2d, - 0xa3, 0xbc, 0x73, 0x5b, 0xaf, 0x69, 0x19, 0xd6, 0xa9, 0xb5, 0xc8, 0x33, 0xf8, 0x47, 0xfd, 0x53, - 0x38, 0xa7, 0x91, 0x1c, 0xda, 0xb9, 0xca, 0xd3, 0x29, 0xaf, 0x7f, 0x07, 0x07, 0x67, 0x3c, 0x56, - 0x29, 0xd1, 0xb0, 0x6d, 0xc5, 0x2c, 0x1e, 0xa3, 0x6a, 0x42, 0x01, 0x60, 0xfc, 0x5b, 0x26, 0x47, - 0xcb, 0x94, 0xf2, 0xa8, 0x26, 0x45, 0xa9, 0x26, 0x99, 0xfc, 0x69, 0x17, 0xf1, 0x60, 0x2d, 0x12, - 0x99, 0xb1, 0x4e, 0x6c, 0xff, 0xc7, 0x32, 0xb8, 0xf3, 0x33, 0xa3, 0x20, 0x2e, 0xac, 0x72, 0x29, - 0x13, 0xca, 0x79, 0x3a, 0x31, 0x15, 0x5f, 0x2e, 0x65, 0x03, 0xfb, 0x13, 0xbe, 0xc6, 0x22, 0x2d, - 0xd8, 0xc2, 0x71, 0xa7, 0xc3, 0x11, 0x6d, 0x37, 0x72, 0xba, 0x1b, 0x2f, 0x6d, 0x37, 0x16, 0x65, - 0x2a, 0xb7, 0xd2, 0x97, 0x68, 0x16, 0x83, 0x5c, 0xc0, 0x66, 0x8f, 0x05, 0x21, 0xef, 0x5a, 0xcc, - 0x65, 0x8d, 0xf9, 0xe2, 0x31, 0xcc, 0x53, 0x7d, 0xa7, 0xc6, 0x63, 0x16, 0x84, 0x34, 0x83, 0xe0, - 0x9d, 0xc0, 0x96, 0xcd, 0x68, 0x8e, 0x95, 0x44, 0xc2, 0xf6, 0xda, 0x8e, 0x79, 0x62, 0x2b, 0xae, - 0xa8, 0x51, 0x27, 0x5c, 0x8d, 0xe5, 0x7d, 0x82, 0xcd, 0x74, 0x8a, 0xd4, 0x67, 0x9b, 0xcb, 0x7c, - 0xb6, 0x4f, 0x56, 0xd1, 0xfb, 0xee, 0x24, 0xf5, 0x59, 0x09, 0x16, 0xad, 0x84, 0x05, 0xb5, 0x11, - 0x06, 0x7b, 0x5d, 0x5d, 0xd5, 0x64, 0x82, 0x8d, 0x2e, 0x4f, 0x6c, 0x87, 0xd5, 0x6e, 0x2e, 0x94, - 0xff, 0x19, 0xc8, 0xbb, 0xa0, 0x33, 0x50, 0x00, 0xcd, 0x5e, 0x4f, 0x01, 0xd8, 0x95, 0x11, 0xcd, - 0xae, 0x8c, 0xf4, 0x34, 0x16, 0x00, 0x26, 0xd2, 0xda, 0x71, 0xcd, 0xd3, 0x94, 0x47, 0x7d, 0x32, - 0x03, 0x8b, 0x9b, 0x59, 0x0d, 0x53, 0x5e, 0x7f, 0x1f, 0xfe, 0x9d, 0xc9, 0x8f, 0xa2, 0xfa, 0x73, - 0x69, 0xb2, 0x30, 0x1a, 0x1c, 0x91, 0xf5, 0x39, 0x55, 0x54, 0x5b, 0x5c, 0xde, 0x06, 0x1d, 0x4e, - 0x8e, 0x61, 0x2b, 0xb3, 0xc1, 0xc9, 0x81, 0x95, 0x62, 0xfa, 0x9d, 0xf1, 0xdc, 0xf9, 0x07, 0x28, - 0xc8, 0x47, 0xd8, 0x9b, 0x27, 0x1c, 0x29, 0x3c, 0xa8, 0xea, 0x8d, 0x77, 0xf4, 0x88, 0xea, 0xe4, - 0x12, 0xf6, 0xe7, 0xae, 0x3a, 0x72, 0x94, 0xa9, 0x65, 0x76, 0x51, 0x7b, 0xc5, 0x87, 0x03, 0x50, - 0x90, 0xb7, 0xb0, 0x3d, 0xa5, 0x16, 0x39, 0xb4, 0x97, 0x66, 0xbb, 0xe8, 0x79, 0x8b, 0x8e, 0x50, - 0x1c, 0xef, 0x5e, 0x6e, 0x97, 0xcd, 0x83, 0xfe, 0x46, 0x5c, 0x69, 0x71, 0xaf, 0x56, 0xf4, 0x7b, - 0xfd, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xfe, 0xd8, 0xc1, 0xee, 0x07, 0x00, 0x00, +var fileDescriptor_relay_eb517eee82ca0aca = []byte{ + // 749 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x4e, 0xdb, 0x5a, + 0x10, 0x96, 0x31, 0xe1, 0x67, 0x80, 0x0b, 0x9c, 0x0b, 0x17, 0xe3, 0x45, 0xc8, 0xf5, 0xe2, 0x2a, + 0xba, 0x6a, 0x13, 0x29, 0xed, 0xae, 0x3b, 0x88, 0xa0, 0x51, 0x89, 0x82, 0x4e, 0x5a, 0xb5, 0x62, + 0x13, 0x99, 0xe4, 0x24, 0x58, 0x71, 0xe2, 0xc3, 0x19, 0x1b, 0xc4, 0xa6, 0xdb, 0xee, 0xfa, 0x08, + 0x5d, 0xf4, 0x25, 0xfa, 0x02, 0x7d, 0xb0, 0xea, 0xfc, 0xc4, 0xb5, 0xf3, 0x03, 0x65, 0xc1, 0x06, + 0x31, 0x73, 0xe6, 0xcc, 0xcc, 0xf7, 0x7d, 0x73, 0x26, 0x86, 0x5d, 0xc1, 0x42, 0xff, 0xbe, 0xaa, + 0xfe, 0x56, 0xb8, 0x88, 0xe2, 0x88, 0x14, 0x94, 0xe1, 0xfe, 0xdb, 0xe2, 0x6c, 0xdc, 0x69, 0x34, + 0xab, 0x7c, 0x38, 0xa8, 0xaa, 0x93, 0x2a, 0xf6, 0x86, 0x9d, 0x3b, 0xac, 0xde, 0xa1, 0x8e, 0xf4, + 0xbe, 0x5a, 0xb0, 0xd3, 0x1a, 0x87, 0xc1, 0x98, 0x5d, 0x24, 0x78, 0xdd, 0xc4, 0x01, 0x65, 0x37, + 0xa4, 0x04, 0x1b, 0x2d, 0xce, 0x84, 0x1f, 0x07, 0xd1, 0xb8, 0x51, 0x77, 0xac, 0x92, 0x55, 0x5e, + 0xa7, 0x59, 0x17, 0x79, 0x0d, 0xab, 0x23, 0x1c, 0xd4, 0xfd, 0xd8, 0x77, 0x96, 0x4a, 0x56, 0x79, + 0xa3, 0xe6, 0x56, 0x90, 0x89, 0x5b, 0x26, 0x3a, 0x3e, 0x0f, 0x3a, 0xdc, 0x17, 0xfe, 0x08, 0x2b, + 0x4d, 0x1d, 0x41, 0x27, 0xa1, 0xc4, 0x83, 0x4d, 0x9e, 0xe0, 0xf5, 0xfb, 0xe8, 0x03, 0x32, 0xd1, + 0xa8, 0x3b, 0xb6, 0x4a, 0x9c, 0xf3, 0x79, 0x67, 0xb0, 0x3b, 0xd5, 0x0f, 0x72, 0x52, 0x83, 0x65, + 0xc1, 0x90, 0x3b, 0x56, 0xc9, 0x2e, 0x6f, 0xd4, 0x8a, 0x15, 0x8d, 0xb5, 0x1d, 0x8c, 0x07, 0x21, + 0x6b, 0xe2, 0x40, 0x5f, 0xbe, 0x08, 0xfd, 0xb8, 0x1f, 0x89, 0x11, 0x55, 0xb1, 0xde, 0x17, 0x0b, + 0x0e, 0x65, 0x04, 0x0b, 0xd3, 0x08, 0xca, 0x30, 0x09, 0xe3, 0xf3, 0x00, 0x63, 0xf2, 0x0f, 0xac, + 0x24, 0xba, 0x09, 0x8d, 0xce, 0x58, 0x69, 0xa5, 0xa5, 0x3f, 0xaf, 0x44, 0x8a, 0x00, 0x51, 0xda, + 0xb2, 0x02, 0xb5, 0x46, 0x33, 0x1e, 0xef, 0x9b, 0x05, 0x8e, 0xc6, 0x74, 0xec, 0xc7, 0xdd, 0x6b, + 0xe9, 0x6b, 0x8d, 0xd9, 0x33, 0x73, 0xfd, 0x3f, 0xec, 0x64, 0x79, 0x95, 0xa0, 0x1d, 0xbb, 0x64, + 0x97, 0xd7, 0xe9, 0x8c, 0xdf, 0x0b, 0xe0, 0x70, 0x41, 0x7f, 0xc8, 0xc9, 0x39, 0xec, 0xa0, 0x82, + 0x2f, 0xfd, 0x9a, 0x41, 0xa3, 0x43, 0x29, 0xc3, 0xce, 0x5c, 0x96, 0xe9, 0xcc, 0x4d, 0xef, 0x1e, + 0x0e, 0x16, 0x90, 0x29, 0x69, 0xd4, 0x41, 0x27, 0x51, 0x8f, 0x29, 0x22, 0x6c, 0x9a, 0xf1, 0x48, + 0xc9, 0x28, 0xeb, 0xde, 0x36, 0xea, 0x8a, 0x86, 0x75, 0x6a, 0x2c, 0xf2, 0x1f, 0xfc, 0x25, 0xff, + 0x93, 0x79, 0x4e, 0x23, 0x31, 0x32, 0x73, 0x55, 0xa0, 0x53, 0x5e, 0xef, 0x0e, 0x0e, 0xce, 0x58, + 0x2c, 0x4b, 0xa2, 0x46, 0xdb, 0x8e, 0xfd, 0x38, 0x41, 0x29, 0x42, 0x11, 0x20, 0xf9, 0x4d, 0x93, + 0xa5, 0x68, 0xca, 0x78, 0xa4, 0x48, 0x51, 0x46, 0x24, 0x5d, 0x3f, 0xeb, 0x22, 0x2e, 0xac, 0x45, + 0x3c, 0x37, 0xd6, 0xa9, 0xed, 0xfd, 0x58, 0x06, 0x67, 0x7e, 0x65, 0xe4, 0xc4, 0x81, 0x55, 0x26, + 0x44, 0x0a, 0xb9, 0x40, 0x27, 0xa6, 0xc4, 0xcb, 0x84, 0x68, 0xe2, 0x60, 0x82, 0x57, 0x5b, 0xa4, + 0x0d, 0x5b, 0x98, 0x74, 0xbb, 0x0c, 0xd1, 0xa8, 0x61, 0x2b, 0x35, 0x5e, 0x1a, 0x35, 0x16, 0x55, + 0xaa, 0xb4, 0xb3, 0x97, 0x68, 0x3e, 0x07, 0xb9, 0x80, 0xcd, 0xbe, 0x1f, 0x84, 0xac, 0x67, 0x72, + 0x2e, 0xab, 0x9c, 0x2f, 0x1e, 0xcb, 0x79, 0xaa, 0xee, 0xd4, 0x59, 0xec, 0x07, 0x21, 0xcd, 0x65, + 0x70, 0x4f, 0x60, 0xcb, 0x54, 0xd4, 0xc7, 0x92, 0x22, 0x6e, 0xb4, 0x36, 0x63, 0x9e, 0xda, 0x12, + 0x2b, 0xaa, 0xac, 0x13, 0xac, 0xda, 0x72, 0x3f, 0xc1, 0x66, 0xb6, 0x44, 0xe6, 0xd9, 0xda, 0xb9, + 0x67, 0xfb, 0x64, 0x16, 0xdd, 0xef, 0x56, 0xda, 0x9f, 0xa1, 0x60, 0xd1, 0x4a, 0x58, 0xd0, 0x1b, + 0xf1, 0x61, 0xaf, 0xa7, 0xba, 0x9a, 0x4c, 0xb0, 0xe6, 0xe5, 0x89, 0x72, 0x18, 0xee, 0xe6, 0xa6, + 0xf2, 0x3e, 0x03, 0x79, 0x17, 0x74, 0x87, 0x32, 0x41, 0xab, 0xdf, 0x97, 0x09, 0xcc, 0xca, 0x88, + 0x66, 0x57, 0x46, 0x76, 0x1a, 0x8b, 0x00, 0x13, 0x6a, 0xcd, 0xb8, 0x16, 0x68, 0xc6, 0x23, 0x9f, + 0xcc, 0xd0, 0xe4, 0xcd, 0xad, 0x86, 0x29, 0xaf, 0xb7, 0x0f, 0x7f, 0xcf, 0xd4, 0x47, 0x5e, 0xfb, + 0x69, 0x4f, 0x16, 0x46, 0x93, 0x21, 0xfa, 0x03, 0x46, 0x25, 0xd4, 0x36, 0x13, 0xb7, 0x41, 0x97, + 0x91, 0x63, 0xd8, 0xca, 0x6d, 0x70, 0x72, 0x60, 0xa8, 0x98, 0xfe, 0x9d, 0x71, 0x9d, 0xf9, 0x07, + 0xc8, 0xc9, 0x47, 0xd8, 0x9b, 0x47, 0x1c, 0x29, 0x3e, 0xc8, 0xea, 0x8d, 0x7b, 0xf4, 0x08, 0xeb, + 0xe4, 0x12, 0xf6, 0xe7, 0xae, 0x3a, 0x72, 0x94, 0xeb, 0x65, 0x76, 0x51, 0xbb, 0xa5, 0x87, 0x03, + 0x90, 0x93, 0x1e, 0x1c, 0xb5, 0x13, 0xce, 0xc4, 0x99, 0x88, 0x12, 0xfe, 0x6c, 0x55, 0xde, 0xc2, + 0xf6, 0x94, 0x26, 0xe4, 0xd0, 0x5c, 0x9a, 0x9d, 0x15, 0xd7, 0x5d, 0x74, 0x84, 0xfc, 0x78, 0xf7, + 0x72, 0xbb, 0xa2, 0x3f, 0x1b, 0xde, 0xf0, 0x2b, 0x25, 0xe1, 0xd5, 0x8a, 0xfa, 0x2a, 0x78, 0xf5, + 0x2b, 0x00, 0x00, 0xff, 0xff, 0x01, 0x6a, 0x94, 0x1f, 0x54, 0x08, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index 3074fea68..0203aa7ad 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -80,6 +80,7 @@ service OnlineMessageRelayService { rpc OnlinePushMsg(OnlinePushMsgReq) returns(OnlinePushMsgResp); rpc GetUsersOnlineStatus(GetUsersOnlineStatusReq)returns(GetUsersOnlineStatusResp); rpc OnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); + rpc SuperGroupOnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); rpc KickUserOffline(KickUserOfflineReq) returns(KickUserOfflineResp); // rpc SendMsgByWS(SendMsgByWSReq) returns(MsgToUserResp); } From ee615fbadf32a6b8814a9cd11548ce5b87b27aac Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 19:34:52 +0800 Subject: [PATCH 452/752] fix word --- config/config.yaml | 2 +- internal/demo/register/set_password.go | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 69ae4ed65..3172baa50 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -727,4 +727,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - signalTimeout: 3000 + signalTimeout: 300 diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index c45f53a23..fbcc30c44 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,12 +16,13 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Name string `json:"name"` + Nickname string `json:"name"` PhoneNumber string `json:"phoneNumber"` Password string `json:"password"` VerificationCode string `json:"verificationCode"` Platform int32 `json:"platform" binding:"required,min=1,max=7"` Ex string `json:"ex"` + FaceURL string `json:"faceURL"` OperationID string `json:"operationID" binding:"required"` } @@ -38,8 +39,8 @@ func SetPassword(c *gin.Context) { } else { account = params.PhoneNumber } - if params.Name == "" { - params.Name = account + if params.Nickname == "" { + params.Nickname = account } if params.VerificationCode != config.Config.Demo.SuperCode { accountKey := account + "_" + constant.VerificationCodeForRegisterSuffix @@ -58,8 +59,9 @@ func SetPassword(c *gin.Context) { openIMRegisterReq.OperationID = params.OperationID openIMRegisterReq.Platform = params.Platform openIMRegisterReq.UserID = userID - openIMRegisterReq.Nickname = params.Name + openIMRegisterReq.Nickname = params.Nickname openIMRegisterReq.Secret = config.Config.Secret + openIMRegisterReq.FaceURL = params.FaceURL openIMRegisterResp := api.UserRegisterResp{} bMsg, err := http2.Post(url, openIMRegisterReq, 2) if err != nil { @@ -85,7 +87,7 @@ func SetPassword(c *gin.Context) { } log.Info(params.OperationID, "end setPassword", account, params.Password) // demo onboarding - onboardingProcess(params.OperationID, userID, params.Name) + onboardingProcess(params.OperationID, userID, params.Nickname) c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken}) return } From 891738747a20779b48056294004b17726d795833 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 19:36:51 +0800 Subject: [PATCH 453/752] fix word --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 196b7e231..6a39e3747 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -700,4 +700,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - signalTimeout: 3000 + signalTimeout: 300 From fc5ab3572ef6bd21faf8dc0e9ae61397d4f4dbfd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 10:16:18 +0800 Subject: [PATCH 454/752] fix word --- internal/demo/register/set_password.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index fbcc30c44..9151f9eda 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,9 +16,9 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Nickname string `json:"name"` + Nickname string `json:"name" binding:"required"` PhoneNumber string `json:"phoneNumber"` - Password string `json:"password"` + Password string `json:"password" binding:"required"` VerificationCode string `json:"verificationCode"` Platform int32 `json:"platform" binding:"required,min=1,max=7"` Ex string `json:"ex"` From da0e73fe1143025188ee48b630e43c0d210ab602 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 10:24:47 +0800 Subject: [PATCH 455/752] fix json word --- internal/demo/register/set_password.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 9151f9eda..649e361d5 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,7 +16,7 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Nickname string `json:"name" binding:"required"` + Nickname string `json:"nickname" binding:"required"` PhoneNumber string `json:"phoneNumber"` Password string `json:"password" binding:"required"` VerificationCode string `json:"verificationCode"` From 0e77caa329139b911002a5b22075d37d035cd813 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 10:48:03 +0800 Subject: [PATCH 456/752] batch push --- internal/msg_gateway/gate/rpc_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 90c4cbd17..8b050476e 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -206,6 +206,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online platformList = append(platformList, k) } needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { for _, v := range list { @@ -218,7 +219,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true - log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) + log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recv PlatForm", constant.PlatformIDToName(platform), "recvID", v) temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: resultCode, RecvID: v, From 55f6aa9ff8f39cfc467ef62a2ee228bef7b61489 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 10 Jun 2022 11:08:18 +0800 Subject: [PATCH 457/752] add batch push --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 81fb024ca..f7636137c 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue From 650c7a3ae0923ba0c4ffcf96c7025f929b2dbbf0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 12:17:44 +0800 Subject: [PATCH 458/752] fix json word --- internal/demo/register/set_password.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 649e361d5..db1e7f434 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,7 +16,7 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Nickname string `json:"nickname" binding:"required"` + Nickname string `json:"nickname"` PhoneNumber string `json:"phoneNumber"` Password string `json:"password" binding:"required"` VerificationCode string `json:"verificationCode"` From 202811f3c66863042015840b06ae440ddd41d33e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 13:32:40 +0800 Subject: [PATCH 459/752] groupID digitization --- internal/msg_gateway/gate/rpc_server.go | 7 ++++--- internal/rpc/group/group.go | 9 ++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 8b050476e..8d799ec20 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -209,11 +209,13 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) for _, v := range list { req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) } replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { + log.Error(req.OperationID, "encodeWsData failed ", req.MsgData.String()) continue } resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) @@ -227,7 +229,6 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } resp = append(resp, temp) } - } else { if utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true @@ -293,11 +294,11 @@ func sendMsgBatchToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlineBatchPush err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) if err != nil { log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), - "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) + "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recv Platform", RecvPlatForm, "args", in.String(), "recvID", RecvID) ResultCode = -2 return ResultCode } else { - log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recvPlatForm", RecvPlatForm, "recvID", RecvID) + log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recv PlatForm", RecvPlatForm, "recvID", RecvID) ResultCode = 0 return ResultCode } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index fb42fe609..79c186013 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -18,12 +18,12 @@ import ( pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" + "google.golang.org/grpc" + "math/big" "net" "strconv" "strings" "time" - - "google.golang.org/grpc" ) type groupServer struct { @@ -96,7 +96,10 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR groupId := req.GroupInfo.GroupID if groupId == "" { - groupId = utils.Md5(strconv.FormatInt(time.Now().UnixNano(), 10)) + groupId = utils.Md5(req.OperationID + strconv.FormatInt(time.Now().UnixNano(), 10)) + bi := big.NewInt(0) + bi.SetString(groupId[0:8], 16) + groupId = bi.String() } //to group groupInfo := db.Group{} From da573ac573f27b0608e1d67420645450fcd8a26e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 15:37:24 +0800 Subject: [PATCH 460/752] log --- internal/msg_gateway/gate/rpc_server.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 8d799ec20..86a25850d 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -205,6 +205,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for k, _ := range userConnMap { platformList = append(platformList, k) } + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList) needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { From d49ceef6371743aa4f9463cb684b57d62f68d3a8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 15:55:07 +0800 Subject: [PATCH 461/752] log --- internal/msg_gateway/gate/batch_push.go | 1 + internal/push/logic/push_to_client.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 41c71c876..8f556e4d5 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -38,6 +38,7 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) for _, v := range platformIDList { user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) } return user2PushMsg } diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index f7636137c..81fb024ca 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue From 1687b70bded150397b1833d3becbd1a1355bbccb Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 17:31:30 +0800 Subject: [PATCH 462/752] fix signal --- internal/api/third/rtc.go | 8 ++-- internal/msg_gateway/gate/logic.go | 9 +---- internal/push/logic/push_to_client.go | 6 +++ pkg/common/db/newRedisModel.go | 55 +++++++++++++++------------ 4 files changed, 42 insertions(+), 36 deletions(-) diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index 4986558d7..eaa1a1959 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -21,9 +21,7 @@ func GetRTCInvitationInfo(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - var ok bool - var errInfo string - ok, _, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + ok, userID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) @@ -37,6 +35,10 @@ func GetRTCInvitationInfo(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) return } + if err := db.DB.DelUserSignalList(userID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelUserSignalList result:", err.Error()) + } + resp.Data.OpUserID = invitationInfo.OpUserID resp.Data.Invitation.RoomID = invitationInfo.Invitation.RoomID resp.Data.Invitation.SessionType = invitationInfo.Invitation.SessionType diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 47b58cde2..884f5f842 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -3,7 +3,6 @@ package gate import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" @@ -238,13 +237,7 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { ws.sendSignalMsgResp(conn, 200, err.Error(), m, &signalResp) } else { log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String()) - // save invitation info for offline push - if err := db.DB.NewCacheSignalInfo(pbData.MsgData); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), m, &signalResp) - ws.sendSignalMsgResp(conn, 200, err.Error(), m, &signalResp) - } else { - ws.sendSignalMsgResp(conn, 0, "", m, &signalResp) - } + ws.sendSignalMsgResp(conn, 0, "", m, &signalResp) } } else { log.NewError(m.OperationID, utils.GetSelfFuncName(), respPb.IsPass, respPb.CommonResp.ErrCode, respPb.CommonResp.ErrMsg) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index da5e680ec..81afb72d4 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -10,6 +10,7 @@ import ( "Open_IM/internal/push" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbPush "Open_IM/pkg/proto/push" @@ -126,6 +127,11 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { if err != nil { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) } + // save invitation info for offline push + if err := db.DB.HandleSignalInfo(pushMsg.MsgData); err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) + continue + } log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), UIDList, content, jsonCustomContent, "opts:", opts) pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID, opts) log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline pushResult: ", pushResult) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ab7a28d8c..ae044f049 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -108,42 +108,47 @@ func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID str return nil } -func (d *DataBases) NewCacheSignalInfo(msg *pbCommon.MsgData) error { +func (d *DataBases) HandleSignalInfo(msg *pbCommon.MsgData) error { req := &pbRtc.SignalReq{} if err := proto.Unmarshal(msg.Content, req); err != nil { return err } //log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "SignalReq: ", req.String()) var inviteeUserIDList []string - switch invitationInfo := req.Payload.(type) { + var isInviteSignal bool + switch signalInfo := req.Payload.(type) { case *pbRtc.SignalReq_Invite: - inviteeUserIDList = invitationInfo.Invite.Invitation.InviteeUserIDList + inviteeUserIDList = signalInfo.Invite.Invitation.InviteeUserIDList + isInviteSignal = true case *pbRtc.SignalReq_InviteInGroup: - inviteeUserIDList = invitationInfo.InviteInGroup.Invitation.InviteeUserIDList + inviteeUserIDList = signalInfo.InviteInGroup.Invitation.InviteeUserIDList + isInviteSignal = true default: - log2.NewDebug("", utils.GetSelfFuncName(), "req type not invite", string(msg.Content)) + log2.NewDebug("", utils.GetSelfFuncName(), "req invalid type", string(msg.Content)) return nil } - for _, userID := range inviteeUserIDList { - timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) - if err != nil { + if isInviteSignal { + for _, userID := range inviteeUserIDList { + timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) + if err != nil { + return err + } + keyList := SignalListCache + userID + err = d.rdb.LPush(context.Background(), keyList, msg.ClientMsgID).Err() + if err != nil { + return err + } + err = d.rdb.Expire(context.Background(), keyList, time.Duration(timeout)*time.Second).Err() + if err != nil { + return err + } + key := SignalCache + msg.ClientMsgID + err = d.rdb.Set(context.Background(), key, msg.Content, time.Duration(timeout)*time.Second).Err() + if err != nil { + return err + } return err } - keyList := SignalListCache + userID - err = d.rdb.LPush(context.Background(), keyList, msg.ClientMsgID).Err() - if err != nil { - return err - } - err = d.rdb.Expire(context.Background(), keyList, time.Duration(timeout)*time.Second).Err() - if err != nil { - return err - } - key := SignalCache + msg.ClientMsgID - err = d.rdb.Set(context.Background(), key, msg.Content, time.Duration(timeout)*time.Second).Err() - if err != nil { - return err - } - return err } return nil } @@ -183,14 +188,14 @@ func (d *DataBases) GetAvailableSignalInvitationInfo(userID string) (invitationI if err != nil { return nil, utils.Wrap(err, "GetSignalInfoFromCacheByClientMsgID") } - err = d.delUserSingalList(userID) + err = d.DelUserSignalList(userID) if err != nil { return nil, utils.Wrap(err, "GetSignalInfoFromCacheByClientMsgID") } return invitationInfo, nil } -func (d *DataBases) delUserSingalList(userID string) error { +func (d *DataBases) DelUserSignalList(userID string) error { keyList := SignalListCache + userID err := d.rdb.Del(context.Background(), keyList).Err() return err From 25f9e28230548b2d8d5adcc00014e623d3981a81 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 17:33:36 +0800 Subject: [PATCH 463/752] fix signal --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 6a39e3747..35029a766 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -700,4 +700,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - signalTimeout: 300 + signalTimeout: 60 From 16645bc568a4094705a7c13faf388040fb7fa5c7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:37:31 +0800 Subject: [PATCH 464/752] batch build --- script/batch_build_all_service.sh | 56 +++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 script/batch_build_all_service.sh diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh new file mode 100644 index 000000000..689d5bf94 --- /dev/null +++ b/script/batch_build_all_service.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh + +bin_dir="../bin" +logs_dir="../logs" +sdk_db_dir="../db/sdk/" +#Automatically created when there is no bin, logs folder +if [ ! -d $bin_dir ]; then + mkdir -p $bin_dir +fi +if [ ! -d $logs_dir ]; then + mkdir -p $logs_dir +fi +if [ ! -d $sdk_db_dir ]; then + mkdir -p $sdk_db_dir +fi + +#begin path +begin_path=$PWD + + +build_pid_array=() + +for ((i = 0; i < ${#service_source_root[*]}; i++)); do + cd $begin_path + service_path=${service_source_root[$i]} + cd $service_path + make install & + build_pid=$! + build_pid_array[i]=build_pid + if [ $? -ne 0 ]; then + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + else + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + fi +done + + +for ((i = 0; i < ${#service_source_root[*]}; i++)); do + wait build_pid_array[i] + stat=$? + if [ $stat == 0 ] + then + echo "Exit status - $stat" + else + echo "Exit status - $stat" + fi + + + + +#echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} From eaa416c3947d4093b32e8e54a2c94768956fecc1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:39:58 +0800 Subject: [PATCH 465/752] batch build --- script/batch_build_all_service.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 689d5bf94..ce92fc832 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -39,10 +39,12 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do fi done +echo "wait all build finish" for ((i = 0; i < ${#service_source_root[*]}; i++)); do wait build_pid_array[i] stat=$? + echo build_pid_array[i] " " $stat if [ $stat == 0 ] then echo "Exit status - $stat" From 832f9c042d2aadfe4af7ddb093f9952168e89cef Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:42:45 +0800 Subject: [PATCH 466/752] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index ce92fc832..aa59f5097 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -51,7 +51,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do else echo "Exit status - $stat" fi - +done From 5cb907b0f1a0a3b21cad24995e26fda0ee94d9a9 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:49:00 +0800 Subject: [PATCH 467/752] batch build --- script/batch_build_all_service.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index aa59f5097..a3bba7ee4 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -42,9 +42,11 @@ done echo "wait all build finish" for ((i = 0; i < ${#service_source_root[*]}; i++)); do - wait build_pid_array[i] + + echo "wait pid: " ${build_pid_array[i]} + wait ${build_pid_array[i]} stat=$? - echo build_pid_array[i] " " $stat + echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then echo "Exit status - $stat" From df7d2b54bd41904a2397e39a143b7aa9fdb6e199 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:53:34 +0800 Subject: [PATCH 468/752] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index a3bba7ee4..7cceed90f 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -30,7 +30,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do cd $service_path make install & build_pid=$! - build_pid_array[i]=build_pid + build_pid_array[i]=$build_pid if [ $? -ne 0 ]; then echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" exit -1 From c9b25f73d3efb35f310e80c03e9ee8bc76961e46 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:00:04 +0800 Subject: [PATCH 469/752] batch build --- script/batch_build_all_service.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 7cceed90f..fe6c6f264 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -41,6 +41,7 @@ done echo "wait all build finish" +success_num = 0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo "wait pid: " ${build_pid_array[i]} @@ -49,12 +50,19 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then - echo "Exit status - $stat" + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + else - echo "Exit status - $stat" + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + success_num++ fi done +echo "success_num" $success_num +echo "service_source_root" ${#service_source_root[*]} - -#echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +if [ $success_num == ${#service_source_root[*]} ] +then + echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +fi From 843a9cedaf88d5bde58389de631c08ff62b58d2e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:05:36 +0800 Subject: [PATCH 470/752] batch build --- script/batch_build_all_service.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index fe6c6f264..936c6339a 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -43,19 +43,18 @@ echo "wait all build finish" success_num = 0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do - - echo "wait pid: " ${build_pid_array[i]} + echo "wait pid: " ${build_pid_array[i]} ${service_names[$i]} wait ${build_pid_array[i]} stat=$? echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then - echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" - exit -1 + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + success_num++ else - echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num++ + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 fi done From 0aa19ed1b0e692150c9ce77496ae26e67c2ef4c8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:07:49 +0800 Subject: [PATCH 471/752] batch build --- script/batch_build_all_service.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 936c6339a..1bfc4ad93 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -28,18 +28,13 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do cd $begin_path service_path=${service_source_root[$i]} cd $service_path - make install & + make install > /dev/null & build_pid=$! build_pid_array[i]=$build_pid - if [ $? -ne 0 ]; then - echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" - exit -1 - else - echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - fi done -echo "wait all build finish" + +echo "wait all build finish....." success_num = 0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do From 26353fd28fc93378e5ba330fbd959c834f27fed8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:08:33 +0800 Subject: [PATCH 472/752] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 1bfc4ad93..c96b9dbe2 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -45,7 +45,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num++ + success_num = $success_num +1 else echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" From 915539ca0f4e18b2d15156e1f145f82afc82358b Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:10:11 +0800 Subject: [PATCH 473/752] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index c96b9dbe2..b48bd2436 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -36,7 +36,7 @@ done echo "wait all build finish....." -success_num = 0 +success_num=0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo "wait pid: " ${build_pid_array[i]} ${service_names[$i]} wait ${build_pid_array[i]} From f51a074f867cec1e42904ee12513158099f42bba Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:11:46 +0800 Subject: [PATCH 474/752] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index b48bd2436..d0ea15260 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -45,7 +45,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num = $success_num +1 + success_num=$success_num+1 else echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" From fa02c20e1cfec0d9b8849f754c8584e643a3b4d3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 18:13:11 +0800 Subject: [PATCH 475/752] fix signal --- internal/demo/register/onboarding_process.go | 37 ++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index b25b2d763..3ced655ab 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -1,6 +1,7 @@ package register import ( + "Open_IM/internal/api/manage" "Open_IM/internal/rpc/msg" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" @@ -11,6 +12,7 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "encoding/json" "errors" "fmt" "math/rand" @@ -35,6 +37,7 @@ func onboardingProcess(operationID, userID, userName string) { log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") + oaNotification(operationID, userID) } func createOrganizationUser(operationID, userID, userName string) error { @@ -184,8 +187,40 @@ func onboardingProcessNotification(operationID, userID, groupID, userName string SessionType: constant.GroupChatType, OperationID: operationID, } + // notification user join group msg.Notification(notification) + +} + +func oaNotification(operationID, userID string) { + elem := manage.OANotificationElem{ + NotificationName: "入职通知", + NotificationFaceURL: "", + NotificationType: 1, + Text: "欢迎你入职公司", + Url: "", + MixType: 0, + PictureElem: manage.PictureElem{}, + SoundElem: manage.SoundElem{}, + VideoElem: manage.VideoElem{}, + FileElem: manage.FileElem{}, + Ex: "", + } + bytes, err := json.Marshal(elem) + if err != nil { + return + } + sysNotification := &msg.NotificationMsg{ + SendID: config.Config.Manager.AppManagerUid[0], + RecvID: userID, + Content: bytes, + MsgFrom: constant.SysMsgType, + ContentType: constant.OANotification, + SessionType: constant.NotificationChatType, + OperationID: operationID, + } + msg.Notification(sysNotification) } func randomEnglishName() string { @@ -193,7 +228,6 @@ func randomEnglishName() string { "feudal", "adverse", "exploit", "occupy", "solve", "amazing", "fantasy", "orchid", "spiky", "approve", "flap"} rand.Seed(time.Now().UnixNano()) index := rand.Intn(len(l) - 1) - fmt.Println(index) return l[index] } @@ -201,6 +235,5 @@ func randomPosition() string { l := []string{"Golang工程师", "前端工程师", "后端工程师", "产品经理", "测试开发工程师", "运维开发工程师"} rand.Seed(time.Now().UnixNano()) index := rand.Intn(len(l) - 1) - fmt.Println(index) return l[index] } From 556ed8413f0ed38f752af52106ef9bda1899e733 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:21:09 +0800 Subject: [PATCH 476/752] batch build --- script/batch_build_all_service.sh | 6 +-- script/batch_start_all.sh | 67 +++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 script/batch_start_all.sh diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index d0ea15260..741da029d 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -45,7 +45,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num=$success_num+1 + let success_num=$success_num+1 else echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" @@ -53,9 +53,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do fi done -echo "success_num" $success_num -echo "service_source_root" ${#service_source_root[*]} - +echo "success_num" $success_num "service num:" ${#service_source_root[*]} if [ $success_num == ${#service_source_root[*]} ] then echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} diff --git a/script/batch_start_all.sh b/script/batch_start_all.sh new file mode 100644 index 000000000..aaa6177ae --- /dev/null +++ b/script/batch_start_all.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +#fixme This script is the total startup script +#fixme The full name of the shell script that needs to be started is placed in the need_to_start_server_shell array + +#fixme Put the shell script name here +need_to_start_server_shell=( + start_rpc_service.sh + msg_gateway_start.sh + push_start.sh + msg_transfer_start.sh + sdk_svr_start.sh + demo_svr_start.sh +) +time=`date +"%Y-%m-%d %H:%M:%S"` +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========server start time:${time}===========">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & + +build_pid_array=() + +for i in ${need_to_start_server_shell[*]}; do + chmod +x $i + ./$i & + build_pid=$! + build_pid_array[i]=$build_pid +done + +echo "wait all start finish....." + +for i in ${need_to_start_server_shell[*]}; do + chmod +x $i + ./$i & + if [ $? -ne 0 ]; then + exit -1 + fi +done + + + +success_num=0 +for ((i = 0; i < ${#need_to_start_server_shell[*]}; i++)); do + echo "wait pid: " ${build_pid_array[i]} ${need_to_start_server_shell[$i]} + wait ${build_pid_array[i]} + stat=$? + echo ${build_pid_array[i]} " " $stat + if [ $stat == 0 ] + then + echo -e "${GREEN_PREFIX}${need_to_start_server_shell[$i]} successfully be built ${COLOR_SUFFIX}\n" + let success_num=$success_num+1 + + else + echo -e "${RED_PREFIX}${need_to_start_server_shell[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + fi +done + +echo "success_num" $success_num "service num:" ${#need_to_start_server_shell[*]} +if [ $success_num == ${#need_to_start_server_shell[*]} ] +then + echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +fi + + From fdaf4380facfd37bbd022c019507222295dbb7ce Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 18:23:31 +0800 Subject: [PATCH 477/752] base64 userID --- internal/demo/register/onboarding_process.go | 1 + internal/demo/register/set_password.go | 2 +- pkg/utils/base64.go | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 pkg/utils/base64.go diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 3ced655ab..e52ac5aed 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -209,6 +209,7 @@ func oaNotification(operationID, userID string) { } bytes, err := json.Marshal(elem) if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "elem: ", elem, err.Error()) return } sysNotification := &msg.NotificationMsg{ diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index db1e7f434..fde97a634 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -53,7 +53,7 @@ func SetPassword(c *gin.Context) { return } } - userID := utils.Md5(account) + userID := utils.Base64Encode(account) url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID diff --git a/pkg/utils/base64.go b/pkg/utils/base64.go new file mode 100644 index 000000000..3f01c1488 --- /dev/null +++ b/pkg/utils/base64.go @@ -0,0 +1,12 @@ +package utils + +import "encoding/base64" + +func Base64Encode(data string) string { + return base64.StdEncoding.EncodeToString([]byte(data)) +} + +func Base64Decode(data string) string { + decodedByte, _ := base64.StdEncoding.DecodeString(data) + return string(decodedByte) +} From 8a471a5455fc6f28698e2ddbd4d4c7842fa1b557 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 18:38:55 +0800 Subject: [PATCH 478/752] base64 userID --- internal/demo/register/onboarding_process.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index e52ac5aed..a41552962 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -15,6 +15,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/golang/protobuf/proto" "math/rand" "strings" "time" @@ -194,6 +195,7 @@ func onboardingProcessNotification(operationID, userID, groupID, userName string } func oaNotification(operationID, userID string) { + var err error elem := manage.OANotificationElem{ NotificationName: "入职通知", NotificationFaceURL: "", @@ -207,20 +209,22 @@ func oaNotification(operationID, userID string) { FileElem: manage.FileElem{}, Ex: "", } - bytes, err := json.Marshal(elem) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "elem: ", elem, err.Error()) - return - } sysNotification := &msg.NotificationMsg{ SendID: config.Config.Manager.AppManagerUid[0], RecvID: userID, - Content: bytes, MsgFrom: constant.SysMsgType, ContentType: constant.OANotification, SessionType: constant.NotificationChatType, OperationID: operationID, } + var tips commonPb.TipsComm + tips.JsonDetail = utils.StructToJsonString(elem) + sysNotification.Content, err = proto.Marshal(&tips) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "elem: ", elem, err.Error()) + return + } + msg.Notification(sysNotification) } From 722ada3f0e814f2e8295f79270454bc4e8427cae Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:55:21 +0800 Subject: [PATCH 479/752] batch build --- script/batch_start_all.sh | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/script/batch_start_all.sh b/script/batch_start_all.sh index aaa6177ae..6ccf74281 100644 --- a/script/batch_start_all.sh +++ b/script/batch_start_all.sh @@ -31,15 +31,7 @@ done echo "wait all start finish....." -for i in ${need_to_start_server_shell[*]}; do - chmod +x $i - ./$i & - if [ $? -ne 0 ]; then - exit -1 - fi -done - - +exit 0 success_num=0 for ((i = 0; i < ${#need_to_start_server_shell[*]}; i++)); do @@ -49,11 +41,11 @@ for ((i = 0; i < ${#need_to_start_server_shell[*]}; i++)); do echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then - echo -e "${GREEN_PREFIX}${need_to_start_server_shell[$i]} successfully be built ${COLOR_SUFFIX}\n" + # echo -e "${GREEN_PREFIX}${need_to_start_server_shell[$i]} successfully be built ${COLOR_SUFFIX}\n" let success_num=$success_num+1 else - echo -e "${RED_PREFIX}${need_to_start_server_shell[$i]} build failed ${COLOR_SUFFIX}\n" + #echo -e "${RED_PREFIX}${need_to_start_server_shell[$i]} build failed ${COLOR_SUFFIX}\n" exit -1 fi done From a6a80a8b936fb6887cea2c72f09463cbe7992f50 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 21:37:48 +0800 Subject: [PATCH 480/752] batch build --- script/batch_start_all.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/script/batch_start_all.sh b/script/batch_start_all.sh index 6ccf74281..c2d78c509 100644 --- a/script/batch_start_all.sh +++ b/script/batch_start_all.sh @@ -21,12 +21,14 @@ echo "==========================================================">>../logs/openI echo "==========================================================">>../logs/openIM.log 2>&1 & build_pid_array=() - +idx=0 for i in ${need_to_start_server_shell[*]}; do chmod +x $i ./$i & build_pid=$! - build_pid_array[i]=$build_pid + echo "build_pid " $build_pid + build_pid_array[idx]=$build_pid + let idx=idx+1 done echo "wait all start finish....." From 6ae71dba4fc6ee38f86cc9f2583476525d05e2b7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 22:54:15 +0800 Subject: [PATCH 481/752] add send msg timeout --- internal/msg_gateway/gate/ws_server.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 360b82926..5e69aa06c 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -88,12 +88,18 @@ func (ws *WServer) readMsg(conn *UserConn) { } } + +func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { + conn.SetWriteDeadline(time.Now().Add(time.Duration(timeout) * time.Second)) +} + func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { conn.w.Lock() defer conn.w.Unlock() + ws.SetWriteTimeout(conn, 5) return conn.WriteMessage(a, msg) - } + func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newConn *UserConn, token string, operationID string) { switch config.Config.MultiLoginPolicy { case constant.AllLoginButSameTermKick: @@ -101,6 +107,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo if oldConn, ok := oldConnMap[constant.PlatformIDToName(platformID)]; ok { log.NewDebug(operationID, uid, platformID, "kick old conn") ws.sendKickMsg(oldConn, newConn) + log.NewDebug(operationID, uid, platformID, "kick old conn") m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) if err != nil && err != redis.ErrNil { log.NewError(operationID, "get token from redis err", err.Error()) From 5860f1fa7a92d52b690e194e197f1ac43404d48e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 22:59:45 +0800 Subject: [PATCH 482/752] add send msg timeout --- internal/msg_gateway/gate/ws_server.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 5e69aa06c..cc8e179ae 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -90,13 +90,14 @@ func (ws *WServer) readMsg(conn *UserConn) { } func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { + conn.w.Lock() + defer conn.w.Unlock() conn.SetWriteDeadline(time.Now().Add(time.Duration(timeout) * time.Second)) } func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { conn.w.Lock() defer conn.w.Unlock() - ws.SetWriteTimeout(conn, 5) return conn.WriteMessage(a, msg) } @@ -164,6 +165,7 @@ func (ws *WServer) sendKickMsg(oldConn, newConn *UserConn) { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "Encode Msg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) return } + ws.SetWriteTimeout(oldConn, 5) err = ws.writeMsg(oldConn, websocket.BinaryMessage, b.Bytes()) if err != nil { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) From e375188889cb96a5a007f7f22988a663a4fd7db1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 08:24:02 +0800 Subject: [PATCH 483/752] log --- internal/msg_gateway/gate/ws_server.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index cc8e179ae..070193926 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -106,9 +106,9 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo case constant.AllLoginButSameTermKick: if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] if oldConn, ok := oldConnMap[constant.PlatformIDToName(platformID)]; ok { - log.NewDebug(operationID, uid, platformID, "kick old conn") + log.NewWarn(operationID, uid, platformID, "kick old conn begin") ws.sendKickMsg(oldConn, newConn) - log.NewDebug(operationID, uid, platformID, "kick old conn") + log.NewWarn(operationID, uid, platformID, "kick old conn end") m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) if err != nil && err != redis.ErrNil { log.NewError(operationID, "get token from redis err", err.Error()) @@ -168,7 +168,7 @@ func (ws *WServer) sendKickMsg(oldConn, newConn *UserConn) { ws.SetWriteTimeout(oldConn, 5) err = ws.writeMsg(oldConn, websocket.BinaryMessage, b.Bytes()) if err != nil { - log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) + log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "sendKickMsg WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) } } func (ws *WServer) addUserConn(uid string, platformID int32, conn *UserConn, token string) { From 2d3d351e261fcc09ed87c2b2ebeb03a945f81425 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 08:26:32 +0800 Subject: [PATCH 484/752] log --- internal/msg_gateway/gate/ws_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 070193926..483403d15 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -111,7 +111,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo log.NewWarn(operationID, uid, platformID, "kick old conn end") m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) if err != nil && err != redis.ErrNil { - log.NewError(operationID, "get token from redis err", err.Error()) + log.NewError(operationID, "get token from redis err", err.Error(), uid) return } if m == nil { From a84c8bd273464532c3ad106edb80f92f30dcad98 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 09:19:06 +0800 Subject: [PATCH 485/752] SetWriteTimeoutWriteMsg --- internal/msg_gateway/gate/ws_server.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 483403d15..2371a19f2 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -101,6 +101,13 @@ func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { return conn.WriteMessage(a, msg) } +func (ws *WServer) SetWriteTimeoutWriteMsg(conn *UserConn, a int, msg []byte, timeout int) error { + conn.w.Lock() + defer conn.w.Unlock() + conn.SetWriteDeadline(time.Now().Add(time.Duration(timeout) * time.Second)) + return conn.WriteMessage(a, msg) +} + func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newConn *UserConn, token string, operationID string) { switch config.Config.MultiLoginPolicy { case constant.AllLoginButSameTermKick: From dc10c7e3e76ff1450b9b9158dfabe8b89454d3ee Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 09:23:51 +0800 Subject: [PATCH 486/752] batch push --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 81fb024ca..a04bc9f8e 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -47,7 +47,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) } //Online push message - log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) From 952033f409427353319e4a3be9b7a44039f9f973 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 09:26:49 +0800 Subject: [PATCH 487/752] compile --- internal/demo/register/onboarding_process.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a41552962..56be5bc78 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -12,7 +12,6 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "encoding/json" "errors" "fmt" "github.com/golang/protobuf/proto" From f232ffb5cc46227f53aefada0c7932ff8d489186 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 09:50:24 +0800 Subject: [PATCH 488/752] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 741da029d..bf780008f 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -41,7 +41,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo "wait pid: " ${build_pid_array[i]} ${service_names[$i]} wait ${build_pid_array[i]} stat=$? - echo ${build_pid_array[i]} " " $stat + echo ${service_names[$i]} "pid: " ${build_pid_array[i]} "stat: " $stat if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" From 9216a085cf0f45cacc9432b3505625c5f9c3e07e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 10:42:26 +0800 Subject: [PATCH 489/752] log --- internal/msg_gateway/gate/batch_push.go | 4 ++++ internal/msg_gateway/gate/rpc_server.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 8f556e4d5..ebb2fa05f 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -46,15 +46,18 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { userConn := ws.getUserConn(pushToUserID, platformID) if userConn == nil { + log.Debug(operationID, "userConn == nil") return []*sdk_ws.MsgData{msgData} } if msgData.Seq <= userConn.PushedMaxSeq { + log.Debug(operationID, "msgData.Seq <= userConn.PushedMaxSeq", msgData.Seq, userConn.PushedMaxSeq) return nil } msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) if msgList == nil { + log.Debug(operationID, "GetSingleUserMsg msgList == nil", msgData.Seq, userConn.PushedMaxSeq) userConn.PushedMaxSeq = msgData.Seq return []*sdk_ws.MsgData{msgData} } @@ -65,6 +68,7 @@ func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws. userConn.PushedMaxSeq = v.Seq } } + log.Debug(operationID, "GetSingleUserMsg msgList len ", len(msgList), userConn.PushedMaxSeq) return msgList } diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 86a25850d..0a8754257 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -207,10 +207,10 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList) needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms end", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) + log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) for _, v := range list { req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) } From dad40d60b38af79f46d8a938025ebce0937d7faa Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 10:54:17 +0800 Subject: [PATCH 490/752] debug --- internal/msg_gateway/gate/batch_push.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index ebb2fa05f..34d7c0792 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -36,10 +36,10 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) - for _, v := range platformIDList { - user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - } + //for _, v := range platformIDList { + // user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + // log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + //} return user2PushMsg } From 9619584de563832e3f9681007865d503c66372ee Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 11:27:58 +0800 Subject: [PATCH 491/752] debug --- internal/msg_gateway/gate/batch_push.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 34d7c0792..d166a4159 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -36,14 +36,16 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) - //for _, v := range platformIDList { - // user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - // log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - //} + for _, v := range platformIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + } return user2PushMsg } func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { + return []*sdk_ws.MsgData{msgData} + userConn := ws.getUserConn(pushToUserID, platformID) if userConn == nil { log.Debug(operationID, "userConn == nil") From ae6c09aae2854d35fa41ad7e0498356b5d3c7f58 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 11:53:04 +0800 Subject: [PATCH 492/752] debug log --- internal/msg_gateway/gate/rpc_server.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 0a8754257..5f5d3646c 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -212,13 +212,17 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online if list != nil { log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) for _, v := range list { + log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) } + replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { log.Error(req.OperationID, "encodeWsData failed ", req.MsgData.String()) continue } + log.Debug(req.OperationID, "encodeWsData", "len: ", replyBytes.Len()) resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true From 8269e61163d5f85ec31e7adaa898896ffb96a902 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:03:12 +0800 Subject: [PATCH 493/752] debug log --- internal/msg_gateway/gate/rpc_server.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 5f5d3646c..af6e62e16 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -254,7 +254,13 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online }, nil } func (r *RPCServer) encodeWsData(wsData *sdk_ws.MsgData, operationID string) (bytes.Buffer, error) { - msgBytes, _ := proto.Marshal(wsData) + log.Debug(operationID, "encodeWsData begin", wsData.String()) + msgBytes, err := proto.Marshal(wsData) + if err != nil { + log.NewError(operationID, "Marshal", err.Error()) + return bytes.Buffer{}, utils.Wrap(err, "") + } + log.Debug(operationID, "encodeWsData begin", wsData.String()) mReply := Resp{ ReqIdentifier: constant.WSPushMsg, OperationID: operationID, @@ -262,10 +268,10 @@ func (r *RPCServer) encodeWsData(wsData *sdk_ws.MsgData, operationID string) (by } var replyBytes bytes.Buffer enc := gob.NewEncoder(&replyBytes) - err := enc.Encode(mReply) + err = enc.Encode(mReply) if err != nil { log.NewError(operationID, "data encode err", err.Error()) - return bytes.Buffer{}, err + return bytes.Buffer{}, utils.Wrap(err, "") } return replyBytes, nil } From 85c0e1f330254e910746902d504d190fd1a431be Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:09:50 +0800 Subject: [PATCH 494/752] debug log --- internal/msg_gateway/gate/rpc_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index af6e62e16..582b38e47 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -216,7 +216,8 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) } - + log.Debug(req.OperationID, "r.encodeWsData no string") + log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { log.Error(req.OperationID, "encodeWsData failed ", req.MsgData.String()) From c171728749305d8662affb16de0f1601067ac851 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:16:32 +0800 Subject: [PATCH 495/752] fix bug --- internal/msg_gateway/gate/rpc_server.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 582b38e47..2f2dbb7f3 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -211,11 +211,13 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for platform, list := range needPushMapList { if list != nil { log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) - for _, v := range list { - log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) - req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) - } + //for _, v := range list { + // log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) + // req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + // log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + //} + req.MsgData.MsgDataList = list + log.Debug(req.OperationID, "r.encodeWsData no string") log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) From 5f813c6f704563763c2fd52964525fb10b4e3ac6 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:43:54 +0800 Subject: [PATCH 496/752] fix bug --- internal/msg_gateway/gate/batch_push.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index d166a4159..9e08c4ef4 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -44,6 +44,7 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData } func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { + msgData.MsgDataList = nil return []*sdk_ws.MsgData{msgData} userConn := ws.getUserConn(pushToUserID, platformID) From ef23fba147f8a057ca21eaf857991b649280123a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:50:20 +0800 Subject: [PATCH 497/752] log --- internal/msg_gateway/gate/rpc_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 2f2dbb7f3..119afa0dd 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -205,7 +205,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for k, _ := range userConnMap { platformList = append(platformList, k) } - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList) + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList, req.MsgData.String()) needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms end", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { From af612e4b9237d99f4343a7264f5b7ea8e2f943c9 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 13:25:32 +0800 Subject: [PATCH 498/752] log --- internal/msg_gateway/gate/rpc_server.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 119afa0dd..a3a137f0e 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -211,14 +211,15 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for platform, list := range needPushMapList { if list != nil { log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) - //for _, v := range list { - // log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) - // req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - // log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) - //} - req.MsgData.MsgDataList = list + for _, v := range list { + log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList), v.String()) + req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + } log.Debug(req.OperationID, "r.encodeWsData no string") + log.Debug(req.OperationID, "r.encodeWsData data0 list ", req.MsgData.MsgDataList[0].String()) + log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { From 768d13978940078fdc8e74cef3209220cfaf1f56 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 20:40:13 +0800 Subject: [PATCH 499/752] set time out --- internal/msg_gateway/gate/ws_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 2371a19f2..25923f6bd 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -98,6 +98,7 @@ func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { conn.w.Lock() defer conn.w.Unlock() + conn.SetWriteDeadline(time.Now().Add(time.Duration(30) * time.Second)) return conn.WriteMessage(a, msg) } @@ -172,7 +173,7 @@ func (ws *WServer) sendKickMsg(oldConn, newConn *UserConn) { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "Encode Msg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) return } - ws.SetWriteTimeout(oldConn, 5) + // ws.SetWriteTimeout(oldConn, 5) err = ws.writeMsg(oldConn, websocket.BinaryMessage, b.Bytes()) if err != nil { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "sendKickMsg WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) From dca39d6eae3e39da17287f9cf15dea27989c0d7e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 20:41:23 +0800 Subject: [PATCH 500/752] set time out --- internal/msg_gateway/gate/ws_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 25923f6bd..b8861c3ba 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -98,7 +98,7 @@ func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { conn.w.Lock() defer conn.w.Unlock() - conn.SetWriteDeadline(time.Now().Add(time.Duration(30) * time.Second)) + conn.SetWriteDeadline(time.Now().Add(time.Duration(10) * time.Second)) return conn.WriteMessage(a, msg) } From 67807a3aa7812e413ad17cfb334a7696b634b526 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 20:47:25 +0800 Subject: [PATCH 501/752] remove kick --- internal/msg_gateway/gate/ws_server.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index b8861c3ba..ab801fd4f 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -98,7 +98,7 @@ func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { conn.w.Lock() defer conn.w.Unlock() - conn.SetWriteDeadline(time.Now().Add(time.Duration(10) * time.Second)) + conn.SetWriteDeadline(time.Now().Add(time.Duration(60) * time.Second)) return conn.WriteMessage(a, msg) } @@ -115,7 +115,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] if oldConn, ok := oldConnMap[constant.PlatformIDToName(platformID)]; ok { log.NewWarn(operationID, uid, platformID, "kick old conn begin") - ws.sendKickMsg(oldConn, newConn) + // ws.sendKickMsg(oldConn, newConn) log.NewWarn(operationID, uid, platformID, "kick old conn end") m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) if err != nil && err != redis.ErrNil { From 7c90baf7bfe4aa3cd61a047fda84a109b9ac61de Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sun, 12 Jun 2022 18:27:01 +0800 Subject: [PATCH 502/752] remove online offline split --- internal/rpc/msg/send_msg.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 131a36bab..5c29ce999 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -275,12 +275,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S default: } m := make(map[string][]string, 2) - if len(memberUserIDList) > GroupMemberNum { - getOnlineAndOfflineUserIDList(memberUserIDList, m, pb.OperationID) - log.Debug(pb.OperationID, m[constant.OnlineStatus], m[constant.OfflineStatus]) - } else { - m[constant.OnlineStatus] = memberUserIDList - } + //if len(memberUserIDList) > GroupMemberNum { + // getOnlineAndOfflineUserIDList(memberUserIDList, m, pb.OperationID) + // log.Debug(pb.OperationID, m[constant.OnlineStatus], m[constant.OfflineStatus]) + //} else { + m[constant.OnlineStatus] = memberUserIDList + //} log.Debug(pb.OperationID, "send msg cost time1 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() From f9c2b4c28e0348ab710ae11ed6c72a500a18ac97 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 09:00:09 +0800 Subject: [PATCH 503/752] SuperGroupOnlineBatchPushOneMsg --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index a04bc9f8e..289b18308 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue From dbc055efb43f49e7668c9ba6350fce6c038b86e0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 10:38:00 +0800 Subject: [PATCH 504/752] org --- internal/demo/register/onboarding_process.go | 8 +++++++- .../mysql_model/im_mysql_model/organization_model.go | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a41552962..a8d80666f 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -5,6 +5,8 @@ import ( "Open_IM/internal/rpc/msg" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" groupRpc "Open_IM/pkg/proto/group" @@ -30,7 +32,11 @@ func onboardingProcess(operationID, userID, userName string) { if err := joinTestDepartment(operationID, userID, departmentID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - + departmentID, err := imdb.GetRandomDepartmentID() + if err != nil { + log.NewError(utils.GetSelfFuncName(), "GetRandomDepartmentID failed", err.Error()) + return + } groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) if err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 43a144963..519b1f021 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -295,3 +295,13 @@ func GetDepartmentParentIDList(departmentID string) ([]string, error) { err = GetDepartmentParent(departmentID, dbConn, &parentIDList) return parentIDList, err } + +func GetRandomDepartmentID() (string, error) { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return "", err + } + department := &db.Department{} + err = dbConn.Model(department).Where("related_group_id != ? AND parent_id != ?", "", "").Take(department).Error + return department.DepartmentID, err +} From 52d8ab538959ca91e13e2ae97c94e1c7dce21c37 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 11:53:12 +0800 Subject: [PATCH 505/752] singal --- pkg/common/db/newRedisModel.go | 4 +- pkg/proto/rtc/rtc.pb.go | 4399 ++++++++++++++------------------ pkg/proto/rtc/rtc.proto | 9 +- pkg/proto/sdk_ws/ws.pb.go | 551 ++-- pkg/proto/sdk_ws/ws.proto | 9 +- 5 files changed, 2188 insertions(+), 2784 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ae044f049..daac3f62a 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -123,6 +123,8 @@ func (d *DataBases) HandleSignalInfo(msg *pbCommon.MsgData) error { case *pbRtc.SignalReq_InviteInGroup: inviteeUserIDList = signalInfo.InviteInGroup.Invitation.InviteeUserIDList isInviteSignal = true + case *pbRtc.SignalReq_HungUp, *pbRtc.SignalReq_Cancel, *pbRtc.SignalReq_Reject, *pbRtc.SignalReq_Accept: + return errors.New("signalInfo do not need offlinePush") default: log2.NewDebug("", utils.GetSelfFuncName(), "req invalid type", string(msg.Content)) return nil @@ -175,7 +177,7 @@ func (d *DataBases) GetSignalInfoFromCacheByClientMsgID(clientMsgID string) (inv func (d *DataBases) GetAvailableSignalInvitationInfo(userID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { keyList := SignalListCache + userID - result := d.rdb.RPop(context.Background(), keyList) + result := d.rdb.LPop(context.Background(), keyList) if err = result.Err(); err != nil { return nil, utils.Wrap(err, "GetAvailableSignalInvitationInfo failed") } diff --git a/pkg/proto/rtc/rtc.pb.go b/pkg/proto/rtc/rtc.pb.go index a546f0f12..d64812299 100644 --- a/pkg/proto/rtc/rtc.pb.go +++ b/pkg/proto/rtc/rtc.pb.go @@ -1,922 +1,861 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.1 -// protoc v3.15.5 -// source: proto/rtc.proto +// source: rtc/rtc.proto -package proto +package rtc // import "./rtc" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" import ( - context "context" + context "golang.org/x/net/context" 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" - reflect "reflect" - sync "sync" ) -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type CommonResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ErrCode int32 `protobuf:"varint,1,opt,name=errCode,proto3" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg,proto3" json:"errMsg,omitempty"` + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *CommonResp) Reset() { - *x = CommonResp{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CommonResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CommonResp) ProtoMessage() {} - -func (x *CommonResp) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_proto_msgTypes[0] - 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 CommonResp.ProtoReflect.Descriptor instead. +func (m *CommonResp) Reset() { *m = CommonResp{} } +func (m *CommonResp) String() string { return proto.CompactTextString(m) } +func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{0} + return fileDescriptor_rtc_62dedd07770ec854, []int{0} +} +func (m *CommonResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CommonResp.Unmarshal(m, b) +} +func (m *CommonResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CommonResp.Marshal(b, m, deterministic) +} +func (dst *CommonResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommonResp.Merge(dst, src) +} +func (m *CommonResp) XXX_Size() int { + return xxx_messageInfo_CommonResp.Size(m) +} +func (m *CommonResp) XXX_DiscardUnknown() { + xxx_messageInfo_CommonResp.DiscardUnknown(m) } -func (x *CommonResp) GetErrCode() int32 { - if x != nil { - return x.ErrCode +var xxx_messageInfo_CommonResp proto.InternalMessageInfo + +func (m *CommonResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode } return 0 } -func (x *CommonResp) GetErrMsg() string { - if x != nil { - return x.ErrMsg +func (m *CommonResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg } return "" } type MsgData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SendID string `protobuf:"bytes,1,opt,name=sendID,proto3" json:"sendID,omitempty"` - RecvID string `protobuf:"bytes,2,opt,name=recvID,proto3" json:"recvID,omitempty"` - GroupID string `protobuf:"bytes,3,opt,name=groupID,proto3" json:"groupID,omitempty"` - ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID,proto3" json:"clientMsgID,omitempty"` - ServerMsgID string `protobuf:"bytes,5,opt,name=serverMsgID,proto3" json:"serverMsgID,omitempty"` - SenderPlatformID int32 `protobuf:"varint,6,opt,name=senderPlatformID,proto3" json:"senderPlatformID,omitempty"` - SenderNickname string `protobuf:"bytes,7,opt,name=senderNickname,proto3" json:"senderNickname,omitempty"` - SenderFaceURL string `protobuf:"bytes,8,opt,name=senderFaceURL,proto3" json:"senderFaceURL,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType,proto3" json:"sessionType,omitempty"` - MsgFrom int32 `protobuf:"varint,10,opt,name=msgFrom,proto3" json:"msgFrom,omitempty"` - ContentType int32 `protobuf:"varint,11,opt,name=contentType,proto3" json:"contentType,omitempty"` - Content []byte `protobuf:"bytes,12,opt,name=content,proto3" json:"content,omitempty"` - Seq uint32 `protobuf:"varint,14,opt,name=seq,proto3" json:"seq,omitempty"` - SendTime int64 `protobuf:"varint,15,opt,name=sendTime,proto3" json:"sendTime,omitempty"` - CreateTime int64 `protobuf:"varint,16,opt,name=createTime,proto3" json:"createTime,omitempty"` - Status int32 `protobuf:"varint,17,opt,name=status,proto3" json:"status,omitempty"` - Options map[string]bool `protobuf:"bytes,18,rep,name=options,proto3" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo,proto3" json:"offlinePushInfo,omitempty"` + SendID string `protobuf:"bytes,1,opt,name=sendID" json:"sendID,omitempty"` + RecvID string `protobuf:"bytes,2,opt,name=recvID" json:"recvID,omitempty"` + GroupID string `protobuf:"bytes,3,opt,name=groupID" json:"groupID,omitempty"` + ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + ServerMsgID string `protobuf:"bytes,5,opt,name=serverMsgID" json:"serverMsgID,omitempty"` + SenderPlatformID int32 `protobuf:"varint,6,opt,name=senderPlatformID" json:"senderPlatformID,omitempty"` + SenderNickname string `protobuf:"bytes,7,opt,name=senderNickname" json:"senderNickname,omitempty"` + SenderFaceURL string `protobuf:"bytes,8,opt,name=senderFaceURL" json:"senderFaceURL,omitempty"` + SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` + MsgFrom int32 `protobuf:"varint,10,opt,name=msgFrom" json:"msgFrom,omitempty"` + ContentType int32 `protobuf:"varint,11,opt,name=contentType" json:"contentType,omitempty"` + Content []byte `protobuf:"bytes,12,opt,name=content,proto3" json:"content,omitempty"` + Seq uint32 `protobuf:"varint,14,opt,name=seq" json:"seq,omitempty"` + SendTime int64 `protobuf:"varint,15,opt,name=sendTime" json:"sendTime,omitempty"` + CreateTime int64 `protobuf:"varint,16,opt,name=createTime" json:"createTime,omitempty"` + Status int32 `protobuf:"varint,17,opt,name=status" json:"status,omitempty"` + Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *MsgData) Reset() { - *x = MsgData{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MsgData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MsgData) ProtoMessage() {} - -func (x *MsgData) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MsgData.ProtoReflect.Descriptor instead. +func (m *MsgData) Reset() { *m = MsgData{} } +func (m *MsgData) String() string { return proto.CompactTextString(m) } +func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{1} + return fileDescriptor_rtc_62dedd07770ec854, []int{1} +} +func (m *MsgData) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgData.Unmarshal(m, b) +} +func (m *MsgData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgData.Marshal(b, m, deterministic) +} +func (dst *MsgData) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgData.Merge(dst, src) +} +func (m *MsgData) XXX_Size() int { + return xxx_messageInfo_MsgData.Size(m) +} +func (m *MsgData) XXX_DiscardUnknown() { + xxx_messageInfo_MsgData.DiscardUnknown(m) } -func (x *MsgData) GetSendID() string { - if x != nil { - return x.SendID +var xxx_messageInfo_MsgData proto.InternalMessageInfo + +func (m *MsgData) GetSendID() string { + if m != nil { + return m.SendID } return "" } -func (x *MsgData) GetRecvID() string { - if x != nil { - return x.RecvID +func (m *MsgData) GetRecvID() string { + if m != nil { + return m.RecvID } return "" } -func (x *MsgData) GetGroupID() string { - if x != nil { - return x.GroupID +func (m *MsgData) GetGroupID() string { + if m != nil { + return m.GroupID } return "" } -func (x *MsgData) GetClientMsgID() string { - if x != nil { - return x.ClientMsgID +func (m *MsgData) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID } return "" } -func (x *MsgData) GetServerMsgID() string { - if x != nil { - return x.ServerMsgID +func (m *MsgData) GetServerMsgID() string { + if m != nil { + return m.ServerMsgID } return "" } -func (x *MsgData) GetSenderPlatformID() int32 { - if x != nil { - return x.SenderPlatformID +func (m *MsgData) GetSenderPlatformID() int32 { + if m != nil { + return m.SenderPlatformID } return 0 } -func (x *MsgData) GetSenderNickname() string { - if x != nil { - return x.SenderNickname +func (m *MsgData) GetSenderNickname() string { + if m != nil { + return m.SenderNickname } return "" } -func (x *MsgData) GetSenderFaceURL() string { - if x != nil { - return x.SenderFaceURL +func (m *MsgData) GetSenderFaceURL() string { + if m != nil { + return m.SenderFaceURL } return "" } -func (x *MsgData) GetSessionType() int32 { - if x != nil { - return x.SessionType +func (m *MsgData) GetSessionType() int32 { + if m != nil { + return m.SessionType } return 0 } -func (x *MsgData) GetMsgFrom() int32 { - if x != nil { - return x.MsgFrom +func (m *MsgData) GetMsgFrom() int32 { + if m != nil { + return m.MsgFrom } return 0 } -func (x *MsgData) GetContentType() int32 { - if x != nil { - return x.ContentType +func (m *MsgData) GetContentType() int32 { + if m != nil { + return m.ContentType } return 0 } -func (x *MsgData) GetContent() []byte { - if x != nil { - return x.Content +func (m *MsgData) GetContent() []byte { + if m != nil { + return m.Content } return nil } -func (x *MsgData) GetSeq() uint32 { - if x != nil { - return x.Seq +func (m *MsgData) GetSeq() uint32 { + if m != nil { + return m.Seq } return 0 } -func (x *MsgData) GetSendTime() int64 { - if x != nil { - return x.SendTime +func (m *MsgData) GetSendTime() int64 { + if m != nil { + return m.SendTime } return 0 } -func (x *MsgData) GetCreateTime() int64 { - if x != nil { - return x.CreateTime +func (m *MsgData) GetCreateTime() int64 { + if m != nil { + return m.CreateTime } return 0 } -func (x *MsgData) GetStatus() int32 { - if x != nil { - return x.Status +func (m *MsgData) GetStatus() int32 { + if m != nil { + return m.Status } return 0 } -func (x *MsgData) GetOptions() map[string]bool { - if x != nil { - return x.Options +func (m *MsgData) GetOptions() map[string]bool { + if m != nil { + return m.Options } return nil } -func (x *MsgData) GetOfflinePushInfo() *OfflinePushInfo { - if x != nil { - return x.OfflinePushInfo +func (m *MsgData) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo } return nil } type GroupInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GroupID string `protobuf:"bytes,1,opt,name=groupID,proto3" json:"groupID,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=groupName,proto3" json:"groupName,omitempty"` - Notification string `protobuf:"bytes,3,opt,name=notification,proto3" json:"notification,omitempty"` - Introduction string `protobuf:"bytes,4,opt,name=introduction,proto3" json:"introduction,omitempty"` - FaceURL string `protobuf:"bytes,5,opt,name=faceURL,proto3" json:"faceURL,omitempty"` - OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID,proto3" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime,proto3" json:"createTime,omitempty"` - MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount,proto3" json:"memberCount,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex,proto3" json:"ex,omitempty"` - Status int32 `protobuf:"varint,10,opt,name=status,proto3" json:"status,omitempty"` - CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID,proto3" json:"creatorUserID,omitempty"` - GroupType int32 `protobuf:"varint,12,opt,name=groupType,proto3" json:"groupType,omitempty"` + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` + Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` + Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` + FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` + OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` + CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` + MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` + Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` + Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` + CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` + GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *GroupInfo) Reset() { - *x = GroupInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupInfo) ProtoMessage() {} - -func (x *GroupInfo) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 GroupInfo.ProtoReflect.Descriptor instead. +func (m *GroupInfo) Reset() { *m = GroupInfo{} } +func (m *GroupInfo) String() string { return proto.CompactTextString(m) } +func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{2} + return fileDescriptor_rtc_62dedd07770ec854, []int{2} +} +func (m *GroupInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupInfo.Unmarshal(m, b) +} +func (m *GroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupInfo.Marshal(b, m, deterministic) +} +func (dst *GroupInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupInfo.Merge(dst, src) +} +func (m *GroupInfo) XXX_Size() int { + return xxx_messageInfo_GroupInfo.Size(m) +} +func (m *GroupInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GroupInfo.DiscardUnknown(m) } -func (x *GroupInfo) GetGroupID() string { - if x != nil { - return x.GroupID +var xxx_messageInfo_GroupInfo proto.InternalMessageInfo + +func (m *GroupInfo) GetGroupID() string { + if m != nil { + return m.GroupID } return "" } -func (x *GroupInfo) GetGroupName() string { - if x != nil { - return x.GroupName +func (m *GroupInfo) GetGroupName() string { + if m != nil { + return m.GroupName } return "" } -func (x *GroupInfo) GetNotification() string { - if x != nil { - return x.Notification +func (m *GroupInfo) GetNotification() string { + if m != nil { + return m.Notification } return "" } -func (x *GroupInfo) GetIntroduction() string { - if x != nil { - return x.Introduction +func (m *GroupInfo) GetIntroduction() string { + if m != nil { + return m.Introduction } return "" } -func (x *GroupInfo) GetFaceURL() string { - if x != nil { - return x.FaceURL +func (m *GroupInfo) GetFaceURL() string { + if m != nil { + return m.FaceURL } return "" } -func (x *GroupInfo) GetOwnerUserID() string { - if x != nil { - return x.OwnerUserID +func (m *GroupInfo) GetOwnerUserID() string { + if m != nil { + return m.OwnerUserID } return "" } -func (x *GroupInfo) GetCreateTime() uint32 { - if x != nil { - return x.CreateTime +func (m *GroupInfo) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime } return 0 } -func (x *GroupInfo) GetMemberCount() uint32 { - if x != nil { - return x.MemberCount +func (m *GroupInfo) GetMemberCount() uint32 { + if m != nil { + return m.MemberCount } return 0 } -func (x *GroupInfo) GetEx() string { - if x != nil { - return x.Ex +func (m *GroupInfo) GetEx() string { + if m != nil { + return m.Ex } return "" } -func (x *GroupInfo) GetStatus() int32 { - if x != nil { - return x.Status +func (m *GroupInfo) GetStatus() int32 { + if m != nil { + return m.Status } return 0 } -func (x *GroupInfo) GetCreatorUserID() string { - if x != nil { - return x.CreatorUserID +func (m *GroupInfo) GetCreatorUserID() string { + if m != nil { + return m.CreatorUserID } return "" } -func (x *GroupInfo) GetGroupType() int32 { - if x != nil { - return x.GroupType +func (m *GroupInfo) GetGroupType() int32 { + if m != nil { + return m.GroupType } return 0 } type GroupMemberFullInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GroupID string `protobuf:"bytes,1,opt,name=groupID,proto3" json:"groupID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID,proto3" json:"userID,omitempty"` - RoleLevel int32 `protobuf:"varint,3,opt,name=roleLevel,proto3" json:"roleLevel,omitempty"` - JoinTime int32 `protobuf:"varint,4,opt,name=joinTime,proto3" json:"joinTime,omitempty"` - Nickname string `protobuf:"bytes,5,opt,name=nickname,proto3" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,6,opt,name=faceURL,proto3" json:"faceURL,omitempty"` - AppMangerLevel int32 `protobuf:"varint,7,opt,name=appMangerLevel,proto3" json:"appMangerLevel,omitempty"` //if >0 - JoinSource int32 `protobuf:"varint,8,opt,name=joinSource,proto3" json:"joinSource,omitempty"` - OperatorUserID string `protobuf:"bytes,9,opt,name=operatorUserID,proto3" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,10,opt,name=ex,proto3" json:"ex,omitempty"` + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + RoleLevel int32 `protobuf:"varint,3,opt,name=roleLevel" json:"roleLevel,omitempty"` + JoinTime int32 `protobuf:"varint,4,opt,name=joinTime" json:"joinTime,omitempty"` + Nickname string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` + FaceURL string `protobuf:"bytes,6,opt,name=faceURL" json:"faceURL,omitempty"` + AppMangerLevel int32 `protobuf:"varint,7,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` + JoinSource int32 `protobuf:"varint,8,opt,name=joinSource" json:"joinSource,omitempty"` + OperatorUserID string `protobuf:"bytes,9,opt,name=operatorUserID" json:"operatorUserID,omitempty"` + Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *GroupMemberFullInfo) Reset() { - *x = GroupMemberFullInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupMemberFullInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupMemberFullInfo) ProtoMessage() {} - -func (x *GroupMemberFullInfo) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 GroupMemberFullInfo.ProtoReflect.Descriptor instead. +func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } +func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } +func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{3} + return fileDescriptor_rtc_62dedd07770ec854, []int{3} +} +func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) +} +func (m *GroupMemberFullInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberFullInfo.Marshal(b, m, deterministic) +} +func (dst *GroupMemberFullInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberFullInfo.Merge(dst, src) +} +func (m *GroupMemberFullInfo) XXX_Size() int { + return xxx_messageInfo_GroupMemberFullInfo.Size(m) +} +func (m *GroupMemberFullInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberFullInfo.DiscardUnknown(m) } -func (x *GroupMemberFullInfo) GetGroupID() string { - if x != nil { - return x.GroupID +var xxx_messageInfo_GroupMemberFullInfo proto.InternalMessageInfo + +func (m *GroupMemberFullInfo) GetGroupID() string { + if m != nil { + return m.GroupID } return "" } -func (x *GroupMemberFullInfo) GetUserID() string { - if x != nil { - return x.UserID +func (m *GroupMemberFullInfo) GetUserID() string { + if m != nil { + return m.UserID } return "" } -func (x *GroupMemberFullInfo) GetRoleLevel() int32 { - if x != nil { - return x.RoleLevel +func (m *GroupMemberFullInfo) GetRoleLevel() int32 { + if m != nil { + return m.RoleLevel } return 0 } -func (x *GroupMemberFullInfo) GetJoinTime() int32 { - if x != nil { - return x.JoinTime +func (m *GroupMemberFullInfo) GetJoinTime() int32 { + if m != nil { + return m.JoinTime } return 0 } -func (x *GroupMemberFullInfo) GetNickname() string { - if x != nil { - return x.Nickname +func (m *GroupMemberFullInfo) GetNickname() string { + if m != nil { + return m.Nickname } return "" } -func (x *GroupMemberFullInfo) GetFaceURL() string { - if x != nil { - return x.FaceURL +func (m *GroupMemberFullInfo) GetFaceURL() string { + if m != nil { + return m.FaceURL } return "" } -func (x *GroupMemberFullInfo) GetAppMangerLevel() int32 { - if x != nil { - return x.AppMangerLevel +func (m *GroupMemberFullInfo) GetAppMangerLevel() int32 { + if m != nil { + return m.AppMangerLevel } return 0 } -func (x *GroupMemberFullInfo) GetJoinSource() int32 { - if x != nil { - return x.JoinSource +func (m *GroupMemberFullInfo) GetJoinSource() int32 { + if m != nil { + return m.JoinSource } return 0 } -func (x *GroupMemberFullInfo) GetOperatorUserID() string { - if x != nil { - return x.OperatorUserID +func (m *GroupMemberFullInfo) GetOperatorUserID() string { + if m != nil { + return m.OperatorUserID } return "" } -func (x *GroupMemberFullInfo) GetEx() string { - if x != nil { - return x.Ex +func (m *GroupMemberFullInfo) GetEx() string { + if m != nil { + return m.Ex } return "" } type ParticipantMetaData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GroupInfo *GroupInfo `protobuf:"bytes,1,opt,name=groupInfo,proto3" json:"groupInfo,omitempty"` - GroupMemberInfo *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=groupMemberInfo,proto3" json:"groupMemberInfo,omitempty"` - UserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=userInfo,proto3" json:"userInfo,omitempty"` + GroupInfo *GroupInfo `protobuf:"bytes,1,opt,name=groupInfo" json:"groupInfo,omitempty"` + GroupMemberInfo *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=groupMemberInfo" json:"groupMemberInfo,omitempty"` + UserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=userInfo" json:"userInfo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *ParticipantMetaData) Reset() { - *x = ParticipantMetaData{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ParticipantMetaData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ParticipantMetaData) ProtoMessage() {} - -func (x *ParticipantMetaData) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ParticipantMetaData.ProtoReflect.Descriptor instead. +func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } +func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } +func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{4} + return fileDescriptor_rtc_62dedd07770ec854, []int{4} +} +func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) +} +func (m *ParticipantMetaData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ParticipantMetaData.Marshal(b, m, deterministic) +} +func (dst *ParticipantMetaData) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParticipantMetaData.Merge(dst, src) +} +func (m *ParticipantMetaData) XXX_Size() int { + return xxx_messageInfo_ParticipantMetaData.Size(m) +} +func (m *ParticipantMetaData) XXX_DiscardUnknown() { + xxx_messageInfo_ParticipantMetaData.DiscardUnknown(m) } -func (x *ParticipantMetaData) GetGroupInfo() *GroupInfo { - if x != nil { - return x.GroupInfo +var xxx_messageInfo_ParticipantMetaData proto.InternalMessageInfo + +func (m *ParticipantMetaData) GetGroupInfo() *GroupInfo { + if m != nil { + return m.GroupInfo } return nil } -func (x *ParticipantMetaData) GetGroupMemberInfo() *GroupMemberFullInfo { - if x != nil { - return x.GroupMemberInfo +func (m *ParticipantMetaData) GetGroupMemberInfo() *GroupMemberFullInfo { + if m != nil { + return m.GroupMemberInfo } return nil } -func (x *ParticipantMetaData) GetUserInfo() *PublicUserInfo { - if x != nil { - return x.UserInfo +func (m *ParticipantMetaData) GetUserInfo() *PublicUserInfo { + if m != nil { + return m.UserInfo } return nil } type PublicUserInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,3,opt,name=faceURL,proto3" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,4,opt,name=gender,proto3" json:"gender,omitempty"` - Ex string `protobuf:"bytes,5,opt,name=ex,proto3" json:"ex,omitempty"` + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` + FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` + Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` + Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *PublicUserInfo) Reset() { - *x = PublicUserInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PublicUserInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PublicUserInfo) ProtoMessage() {} - -func (x *PublicUserInfo) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_proto_msgTypes[5] - 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 PublicUserInfo.ProtoReflect.Descriptor instead. +func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } +func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } +func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{5} + return fileDescriptor_rtc_62dedd07770ec854, []int{5} +} +func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) +} +func (m *PublicUserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PublicUserInfo.Marshal(b, m, deterministic) +} +func (dst *PublicUserInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_PublicUserInfo.Merge(dst, src) +} +func (m *PublicUserInfo) XXX_Size() int { + return xxx_messageInfo_PublicUserInfo.Size(m) +} +func (m *PublicUserInfo) XXX_DiscardUnknown() { + xxx_messageInfo_PublicUserInfo.DiscardUnknown(m) } -func (x *PublicUserInfo) GetUserID() string { - if x != nil { - return x.UserID +var xxx_messageInfo_PublicUserInfo proto.InternalMessageInfo + +func (m *PublicUserInfo) GetUserID() string { + if m != nil { + return m.UserID } return "" } -func (x *PublicUserInfo) GetNickname() string { - if x != nil { - return x.Nickname +func (m *PublicUserInfo) GetNickname() string { + if m != nil { + return m.Nickname } return "" } -func (x *PublicUserInfo) GetFaceURL() string { - if x != nil { - return x.FaceURL +func (m *PublicUserInfo) GetFaceURL() string { + if m != nil { + return m.FaceURL } return "" } -func (x *PublicUserInfo) GetGender() int32 { - if x != nil { - return x.Gender +func (m *PublicUserInfo) GetGender() int32 { + if m != nil { + return m.Gender } return 0 } -func (x *PublicUserInfo) GetEx() string { - if x != nil { - return x.Ex +func (m *PublicUserInfo) GetEx() string { + if m != nil { + return m.Ex } return "" } type GetJoinTokenReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Room string `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` - Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` - MetaData *ParticipantMetaData `protobuf:"bytes,3,opt,name=metaData,proto3" json:"metaData,omitempty"` - OperationID string `protobuf:"bytes,4,opt,name=operationID,proto3" json:"operationID,omitempty"` + Room string `protobuf:"bytes,1,opt,name=room" json:"room,omitempty"` + Identity string `protobuf:"bytes,2,opt,name=identity" json:"identity,omitempty"` + MetaData *ParticipantMetaData `protobuf:"bytes,3,opt,name=metaData" json:"metaData,omitempty"` + OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *GetJoinTokenReq) Reset() { - *x = GetJoinTokenReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetJoinTokenReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetJoinTokenReq) ProtoMessage() {} - -func (x *GetJoinTokenReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 GetJoinTokenReq.ProtoReflect.Descriptor instead. +func (m *GetJoinTokenReq) Reset() { *m = GetJoinTokenReq{} } +func (m *GetJoinTokenReq) String() string { return proto.CompactTextString(m) } +func (*GetJoinTokenReq) ProtoMessage() {} func (*GetJoinTokenReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{6} + return fileDescriptor_rtc_62dedd07770ec854, []int{6} +} +func (m *GetJoinTokenReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetJoinTokenReq.Unmarshal(m, b) +} +func (m *GetJoinTokenReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetJoinTokenReq.Marshal(b, m, deterministic) +} +func (dst *GetJoinTokenReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetJoinTokenReq.Merge(dst, src) +} +func (m *GetJoinTokenReq) XXX_Size() int { + return xxx_messageInfo_GetJoinTokenReq.Size(m) +} +func (m *GetJoinTokenReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetJoinTokenReq.DiscardUnknown(m) } -func (x *GetJoinTokenReq) GetRoom() string { - if x != nil { - return x.Room +var xxx_messageInfo_GetJoinTokenReq proto.InternalMessageInfo + +func (m *GetJoinTokenReq) GetRoom() string { + if m != nil { + return m.Room } return "" } -func (x *GetJoinTokenReq) GetIdentity() string { - if x != nil { - return x.Identity +func (m *GetJoinTokenReq) GetIdentity() string { + if m != nil { + return m.Identity } return "" } -func (x *GetJoinTokenReq) GetMetaData() *ParticipantMetaData { - if x != nil { - return x.MetaData +func (m *GetJoinTokenReq) GetMetaData() *ParticipantMetaData { + if m != nil { + return m.MetaData } return nil } -func (x *GetJoinTokenReq) GetOperationID() string { - if x != nil { - return x.OperationID +func (m *GetJoinTokenReq) GetOperationID() string { + if m != nil { + return m.OperationID } return "" } type GetJoinTokenResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"` - Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL,proto3" json:"liveURL,omitempty"` + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"` + Jwt string `protobuf:"bytes,2,opt,name=jwt" json:"jwt,omitempty"` + LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *GetJoinTokenResp) Reset() { - *x = GetJoinTokenResp{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetJoinTokenResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetJoinTokenResp) ProtoMessage() {} - -func (x *GetJoinTokenResp) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 GetJoinTokenResp.ProtoReflect.Descriptor instead. +func (m *GetJoinTokenResp) Reset() { *m = GetJoinTokenResp{} } +func (m *GetJoinTokenResp) String() string { return proto.CompactTextString(m) } +func (*GetJoinTokenResp) ProtoMessage() {} func (*GetJoinTokenResp) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{7} + return fileDescriptor_rtc_62dedd07770ec854, []int{7} +} +func (m *GetJoinTokenResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetJoinTokenResp.Unmarshal(m, b) +} +func (m *GetJoinTokenResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetJoinTokenResp.Marshal(b, m, deterministic) +} +func (dst *GetJoinTokenResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetJoinTokenResp.Merge(dst, src) +} +func (m *GetJoinTokenResp) XXX_Size() int { + return xxx_messageInfo_GetJoinTokenResp.Size(m) +} +func (m *GetJoinTokenResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetJoinTokenResp.DiscardUnknown(m) } -func (x *GetJoinTokenResp) GetCommonResp() *CommonResp { - if x != nil { - return x.CommonResp +var xxx_messageInfo_GetJoinTokenResp proto.InternalMessageInfo + +func (m *GetJoinTokenResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp } return nil } -func (x *GetJoinTokenResp) GetJwt() string { - if x != nil { - return x.Jwt +func (m *GetJoinTokenResp) GetJwt() string { + if m != nil { + return m.Jwt } return "" } -func (x *GetJoinTokenResp) GetLiveURL() string { - if x != nil { - return x.LiveURL +func (m *GetJoinTokenResp) GetLiveURL() string { + if m != nil { + return m.LiveURL } return "" } type OfflinePushInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Desc string `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"` - Ex string `protobuf:"bytes,3,opt,name=ex,proto3" json:"ex,omitempty"` - IOSPushSound string `protobuf:"bytes,4,opt,name=iOSPushSound,proto3" json:"iOSPushSound,omitempty"` - IOSBadgeCount bool `protobuf:"varint,5,opt,name=iOSBadgeCount,proto3" json:"iOSBadgeCount,omitempty"` + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Desc string `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"` + Ex string `protobuf:"bytes,3,opt,name=ex" json:"ex,omitempty"` + IOSPushSound string `protobuf:"bytes,4,opt,name=iOSPushSound" json:"iOSPushSound,omitempty"` + IOSBadgeCount bool `protobuf:"varint,5,opt,name=iOSBadgeCount" json:"iOSBadgeCount,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *OfflinePushInfo) Reset() { - *x = OfflinePushInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OfflinePushInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OfflinePushInfo) ProtoMessage() {} - -func (x *OfflinePushInfo) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 OfflinePushInfo.ProtoReflect.Descriptor instead. +func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } +func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } +func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{8} + return fileDescriptor_rtc_62dedd07770ec854, []int{8} +} +func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) +} +func (m *OfflinePushInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OfflinePushInfo.Marshal(b, m, deterministic) +} +func (dst *OfflinePushInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_OfflinePushInfo.Merge(dst, src) +} +func (m *OfflinePushInfo) XXX_Size() int { + return xxx_messageInfo_OfflinePushInfo.Size(m) +} +func (m *OfflinePushInfo) XXX_DiscardUnknown() { + xxx_messageInfo_OfflinePushInfo.DiscardUnknown(m) } -func (x *OfflinePushInfo) GetTitle() string { - if x != nil { - return x.Title +var xxx_messageInfo_OfflinePushInfo proto.InternalMessageInfo + +func (m *OfflinePushInfo) GetTitle() string { + if m != nil { + return m.Title } return "" } -func (x *OfflinePushInfo) GetDesc() string { - if x != nil { - return x.Desc +func (m *OfflinePushInfo) GetDesc() string { + if m != nil { + return m.Desc } return "" } -func (x *OfflinePushInfo) GetEx() string { - if x != nil { - return x.Ex +func (m *OfflinePushInfo) GetEx() string { + if m != nil { + return m.Ex } return "" } -func (x *OfflinePushInfo) GetIOSPushSound() string { - if x != nil { - return x.IOSPushSound +func (m *OfflinePushInfo) GetIOSPushSound() string { + if m != nil { + return m.IOSPushSound } return "" } -func (x *OfflinePushInfo) GetIOSBadgeCount() bool { - if x != nil { - return x.IOSBadgeCount +func (m *OfflinePushInfo) GetIOSBadgeCount() bool { + if m != nil { + return m.IOSBadgeCount } return false } type SignalReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Payload: + // Types that are valid to be assigned to Payload: // *SignalReq_Invite // *SignalReq_InviteInGroup // *SignalReq_Cancel // *SignalReq_Accept // *SignalReq_HungUp // *SignalReq_Reject - Payload isSignalReq_Payload `protobuf_oneof:"payload"` + Payload isSignalReq_Payload `protobuf_oneof:"payload"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *SignalReq) Reset() { - *x = SignalReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalReq) ProtoMessage() {} - -func (x *SignalReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalReq.ProtoReflect.Descriptor instead. +func (m *SignalReq) Reset() { *m = SignalReq{} } +func (m *SignalReq) String() string { return proto.CompactTextString(m) } +func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{9} + return fileDescriptor_rtc_62dedd07770ec854, []int{9} } +func (m *SignalReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalReq.Unmarshal(m, b) +} +func (m *SignalReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalReq.Marshal(b, m, deterministic) +} +func (dst *SignalReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalReq.Merge(dst, src) +} +func (m *SignalReq) XXX_Size() int { + return xxx_messageInfo_SignalReq.Size(m) +} +func (m *SignalReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalReq proto.InternalMessageInfo + +type isSignalReq_Payload interface { + isSignalReq_Payload() +} + +type SignalReq_Invite struct { + Invite *SignalInviteReq `protobuf:"bytes,1,opt,name=invite,oneof"` +} +type SignalReq_InviteInGroup struct { + InviteInGroup *SignalInviteInGroupReq `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` +} +type SignalReq_Cancel struct { + Cancel *SignalCancelReq `protobuf:"bytes,3,opt,name=cancel,oneof"` +} +type SignalReq_Accept struct { + Accept *SignalAcceptReq `protobuf:"bytes,4,opt,name=accept,oneof"` +} +type SignalReq_HungUp struct { + HungUp *SignalHungUpReq `protobuf:"bytes,5,opt,name=hungUp,oneof"` +} +type SignalReq_Reject struct { + Reject *SignalRejectReq `protobuf:"bytes,6,opt,name=reject,oneof"` +} + +func (*SignalReq_Invite) isSignalReq_Payload() {} +func (*SignalReq_InviteInGroup) isSignalReq_Payload() {} +func (*SignalReq_Cancel) isSignalReq_Payload() {} +func (*SignalReq_Accept) isSignalReq_Payload() {} +func (*SignalReq_HungUp) isSignalReq_Payload() {} +func (*SignalReq_Reject) isSignalReq_Payload() {} func (m *SignalReq) GetPayload() isSignalReq_Payload { if m != nil { @@ -925,134 +864,265 @@ func (m *SignalReq) GetPayload() isSignalReq_Payload { return nil } -func (x *SignalReq) GetInvite() *SignalInviteReq { - if x, ok := x.GetPayload().(*SignalReq_Invite); ok { +func (m *SignalReq) GetInvite() *SignalInviteReq { + if x, ok := m.GetPayload().(*SignalReq_Invite); ok { return x.Invite } return nil } -func (x *SignalReq) GetInviteInGroup() *SignalInviteInGroupReq { - if x, ok := x.GetPayload().(*SignalReq_InviteInGroup); ok { +func (m *SignalReq) GetInviteInGroup() *SignalInviteInGroupReq { + if x, ok := m.GetPayload().(*SignalReq_InviteInGroup); ok { return x.InviteInGroup } return nil } -func (x *SignalReq) GetCancel() *SignalCancelReq { - if x, ok := x.GetPayload().(*SignalReq_Cancel); ok { +func (m *SignalReq) GetCancel() *SignalCancelReq { + if x, ok := m.GetPayload().(*SignalReq_Cancel); ok { return x.Cancel } return nil } -func (x *SignalReq) GetAccept() *SignalAcceptReq { - if x, ok := x.GetPayload().(*SignalReq_Accept); ok { +func (m *SignalReq) GetAccept() *SignalAcceptReq { + if x, ok := m.GetPayload().(*SignalReq_Accept); ok { return x.Accept } return nil } -func (x *SignalReq) GetHungUp() *SignalHungUpReq { - if x, ok := x.GetPayload().(*SignalReq_HungUp); ok { +func (m *SignalReq) GetHungUp() *SignalHungUpReq { + if x, ok := m.GetPayload().(*SignalReq_HungUp); ok { return x.HungUp } return nil } -func (x *SignalReq) GetReject() *SignalRejectReq { - if x, ok := x.GetPayload().(*SignalReq_Reject); ok { +func (m *SignalReq) GetReject() *SignalRejectReq { + if x, ok := m.GetPayload().(*SignalReq_Reject); ok { return x.Reject } return nil } -type isSignalReq_Payload interface { - isSignalReq_Payload() +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SignalReq) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SignalReq_OneofMarshaler, _SignalReq_OneofUnmarshaler, _SignalReq_OneofSizer, []interface{}{ + (*SignalReq_Invite)(nil), + (*SignalReq_InviteInGroup)(nil), + (*SignalReq_Cancel)(nil), + (*SignalReq_Accept)(nil), + (*SignalReq_HungUp)(nil), + (*SignalReq_Reject)(nil), + } } -type SignalReq_Invite struct { - Invite *SignalInviteReq `protobuf:"bytes,1,opt,name=invite,proto3,oneof"` +func _SignalReq_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SignalReq) + // payload + switch x := m.Payload.(type) { + case *SignalReq_Invite: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Invite); err != nil { + return err + } + case *SignalReq_InviteInGroup: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InviteInGroup); err != nil { + return err + } + case *SignalReq_Cancel: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Cancel); err != nil { + return err + } + case *SignalReq_Accept: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Accept); err != nil { + return err + } + case *SignalReq_HungUp: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HungUp); err != nil { + return err + } + case *SignalReq_Reject: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Reject); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SignalReq.Payload has unexpected type %T", x) + } + return nil } -type SignalReq_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReq `protobuf:"bytes,2,opt,name=inviteInGroup,proto3,oneof"` +func _SignalReq_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SignalReq) + switch tag { + case 1: // payload.invite + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Invite{msg} + return true, err + case 2: // payload.inviteInGroup + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteInGroupReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_InviteInGroup{msg} + return true, err + case 3: // payload.cancel + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalCancelReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Cancel{msg} + return true, err + case 4: // payload.accept + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalAcceptReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Accept{msg} + return true, err + case 5: // payload.hungUp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalHungUpReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_HungUp{msg} + return true, err + case 6: // payload.reject + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalRejectReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Reject{msg} + return true, err + default: + return false, nil + } } -type SignalReq_Cancel struct { - Cancel *SignalCancelReq `protobuf:"bytes,3,opt,name=cancel,proto3,oneof"` +func _SignalReq_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SignalReq) + // payload + switch x := m.Payload.(type) { + case *SignalReq_Invite: + s := proto.Size(x.Invite) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_InviteInGroup: + s := proto.Size(x.InviteInGroup) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_Cancel: + s := proto.Size(x.Cancel) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_Accept: + s := proto.Size(x.Accept) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_HungUp: + s := proto.Size(x.HungUp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_Reject: + s := proto.Size(x.Reject) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n } -type SignalReq_Accept struct { - Accept *SignalAcceptReq `protobuf:"bytes,4,opt,name=accept,proto3,oneof"` -} - -type SignalReq_HungUp struct { - HungUp *SignalHungUpReq `protobuf:"bytes,5,opt,name=hungUp,proto3,oneof"` -} - -type SignalReq_Reject struct { - Reject *SignalRejectReq `protobuf:"bytes,6,opt,name=reject,proto3,oneof"` -} - -func (*SignalReq_Invite) isSignalReq_Payload() {} - -func (*SignalReq_InviteInGroup) isSignalReq_Payload() {} - -func (*SignalReq_Cancel) isSignalReq_Payload() {} - -func (*SignalReq_Accept) isSignalReq_Payload() {} - -func (*SignalReq_HungUp) isSignalReq_Payload() {} - -func (*SignalReq_Reject) isSignalReq_Payload() {} - type SignalResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Payload: + // Types that are valid to be assigned to Payload: // *SignalResp_Invite // *SignalResp_InviteInGroup // *SignalResp_Cancel // *SignalResp_Accept // *SignalResp_HungUp // *SignalResp_Reject - Payload isSignalResp_Payload `protobuf_oneof:"payload"` + Payload isSignalResp_Payload `protobuf_oneof:"payload"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *SignalResp) Reset() { - *x = SignalResp{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalResp) ProtoMessage() {} - -func (x *SignalResp) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_proto_msgTypes[10] - 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 SignalResp.ProtoReflect.Descriptor instead. +func (m *SignalResp) Reset() { *m = SignalResp{} } +func (m *SignalResp) String() string { return proto.CompactTextString(m) } +func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{10} + return fileDescriptor_rtc_62dedd07770ec854, []int{10} } +func (m *SignalResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalResp.Unmarshal(m, b) +} +func (m *SignalResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalResp.Marshal(b, m, deterministic) +} +func (dst *SignalResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalResp.Merge(dst, src) +} +func (m *SignalResp) XXX_Size() int { + return xxx_messageInfo_SignalResp.Size(m) +} +func (m *SignalResp) XXX_DiscardUnknown() { + xxx_messageInfo_SignalResp.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalResp proto.InternalMessageInfo + +type isSignalResp_Payload interface { + isSignalResp_Payload() +} + +type SignalResp_Invite struct { + Invite *SignalInviteReply `protobuf:"bytes,1,opt,name=invite,oneof"` +} +type SignalResp_InviteInGroup struct { + InviteInGroup *SignalInviteInGroupReply `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` +} +type SignalResp_Cancel struct { + Cancel *SignalCancelReply `protobuf:"bytes,3,opt,name=cancel,oneof"` +} +type SignalResp_Accept struct { + Accept *SignalAcceptReply `protobuf:"bytes,4,opt,name=accept,oneof"` +} +type SignalResp_HungUp struct { + HungUp *SignalHungUpReply `protobuf:"bytes,5,opt,name=hungUp,oneof"` +} +type SignalResp_Reject struct { + Reject *SignalRejectReply `protobuf:"bytes,6,opt,name=reject,oneof"` +} + +func (*SignalResp_Invite) isSignalResp_Payload() {} +func (*SignalResp_InviteInGroup) isSignalResp_Payload() {} +func (*SignalResp_Cancel) isSignalResp_Payload() {} +func (*SignalResp_Accept) isSignalResp_Payload() {} +func (*SignalResp_HungUp) isSignalResp_Payload() {} +func (*SignalResp_Reject) isSignalResp_Payload() {} func (m *SignalResp) GetPayload() isSignalResp_Payload { if m != nil { @@ -1061,1827 +1131,51 @@ func (m *SignalResp) GetPayload() isSignalResp_Payload { return nil } -func (x *SignalResp) GetInvite() *SignalInviteReply { - if x, ok := x.GetPayload().(*SignalResp_Invite); ok { +func (m *SignalResp) GetInvite() *SignalInviteReply { + if x, ok := m.GetPayload().(*SignalResp_Invite); ok { return x.Invite } return nil } -func (x *SignalResp) GetInviteInGroup() *SignalInviteInGroupReply { - if x, ok := x.GetPayload().(*SignalResp_InviteInGroup); ok { +func (m *SignalResp) GetInviteInGroup() *SignalInviteInGroupReply { + if x, ok := m.GetPayload().(*SignalResp_InviteInGroup); ok { return x.InviteInGroup } return nil } -func (x *SignalResp) GetCancel() *SignalCancelReply { - if x, ok := x.GetPayload().(*SignalResp_Cancel); ok { +func (m *SignalResp) GetCancel() *SignalCancelReply { + if x, ok := m.GetPayload().(*SignalResp_Cancel); ok { return x.Cancel } return nil } -func (x *SignalResp) GetAccept() *SignalAcceptReply { - if x, ok := x.GetPayload().(*SignalResp_Accept); ok { +func (m *SignalResp) GetAccept() *SignalAcceptReply { + if x, ok := m.GetPayload().(*SignalResp_Accept); ok { return x.Accept } return nil } -func (x *SignalResp) GetHungUp() *SignalHungUpReply { - if x, ok := x.GetPayload().(*SignalResp_HungUp); ok { +func (m *SignalResp) GetHungUp() *SignalHungUpReply { + if x, ok := m.GetPayload().(*SignalResp_HungUp); ok { return x.HungUp } return nil } -func (x *SignalResp) GetReject() *SignalRejectReply { - if x, ok := x.GetPayload().(*SignalResp_Reject); ok { +func (m *SignalResp) GetReject() *SignalRejectReply { + if x, ok := m.GetPayload().(*SignalResp_Reject); ok { return x.Reject } return nil } -type isSignalResp_Payload interface { - isSignalResp_Payload() -} - -type SignalResp_Invite struct { - Invite *SignalInviteReply `protobuf:"bytes,1,opt,name=invite,proto3,oneof"` -} - -type SignalResp_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReply `protobuf:"bytes,2,opt,name=inviteInGroup,proto3,oneof"` -} - -type SignalResp_Cancel struct { - Cancel *SignalCancelReply `protobuf:"bytes,3,opt,name=cancel,proto3,oneof"` -} - -type SignalResp_Accept struct { - Accept *SignalAcceptReply `protobuf:"bytes,4,opt,name=accept,proto3,oneof"` -} - -type SignalResp_HungUp struct { - HungUp *SignalHungUpReply `protobuf:"bytes,5,opt,name=hungUp,proto3,oneof"` -} - -type SignalResp_Reject struct { - Reject *SignalRejectReply `protobuf:"bytes,6,opt,name=reject,proto3,oneof"` -} - -func (*SignalResp_Invite) isSignalResp_Payload() {} - -func (*SignalResp_InviteInGroup) isSignalResp_Payload() {} - -func (*SignalResp_Cancel) isSignalResp_Payload() {} - -func (*SignalResp_Accept) isSignalResp_Payload() {} - -func (*SignalResp_HungUp) isSignalResp_Payload() {} - -func (*SignalResp_Reject) isSignalResp_Payload() {} - -type InvitationInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - InviterUserID string `protobuf:"bytes,1,opt,name=inviterUserID,proto3" json:"inviterUserID,omitempty"` - InviteeUserIDList []string `protobuf:"bytes,2,rep,name=inviteeUserIDList,proto3" json:"inviteeUserIDList,omitempty"` - CustomData string `protobuf:"bytes,3,opt,name=customData,proto3" json:"customData,omitempty"` - GroupID string `protobuf:"bytes,4,opt,name=groupID,proto3" json:"groupID,omitempty"` - RoomID string `protobuf:"bytes,5,opt,name=roomID,proto3" json:"roomID,omitempty"` - Timeout int32 `protobuf:"varint,6,opt,name=timeout,proto3" json:"timeout,omitempty"` - MediaType string `protobuf:"bytes,7,opt,name=mediaType,proto3" json:"mediaType,omitempty"` - PlatformID int32 `protobuf:"varint,8,opt,name=platformID,proto3" json:"platformID,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType,proto3" json:"sessionType,omitempty"` -} - -func (x *InvitationInfo) Reset() { - *x = InvitationInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InvitationInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InvitationInfo) ProtoMessage() {} - -func (x *InvitationInfo) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 InvitationInfo.ProtoReflect.Descriptor instead. -func (*InvitationInfo) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{11} -} - -func (x *InvitationInfo) GetInviterUserID() string { - if x != nil { - return x.InviterUserID - } - return "" -} - -func (x *InvitationInfo) GetInviteeUserIDList() []string { - if x != nil { - return x.InviteeUserIDList - } - return nil -} - -func (x *InvitationInfo) GetCustomData() string { - if x != nil { - return x.CustomData - } - return "" -} - -func (x *InvitationInfo) GetGroupID() string { - if x != nil { - return x.GroupID - } - return "" -} - -func (x *InvitationInfo) GetRoomID() string { - if x != nil { - return x.RoomID - } - return "" -} - -func (x *InvitationInfo) GetTimeout() int32 { - if x != nil { - return x.Timeout - } - return 0 -} - -func (x *InvitationInfo) GetMediaType() string { - if x != nil { - return x.MediaType - } - return "" -} - -func (x *InvitationInfo) GetPlatformID() int32 { - if x != nil { - return x.PlatformID - } - return 0 -} - -func (x *InvitationInfo) GetSessionType() int32 { - if x != nil { - return x.SessionType - } - return 0 -} - -type SignalInviteReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpUserID string `protobuf:"bytes,1,opt,name=opUserID,proto3" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation,proto3" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo,proto3" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant,proto3" json:"participant,omitempty"` -} - -func (x *SignalInviteReq) Reset() { - *x = SignalInviteReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalInviteReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalInviteReq) ProtoMessage() {} - -func (x *SignalInviteReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalInviteReq.ProtoReflect.Descriptor instead. -func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{12} -} - -func (x *SignalInviteReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -func (x *SignalInviteReq) GetInvitation() *InvitationInfo { - if x != nil { - return x.Invitation - } - return nil -} - -func (x *SignalInviteReq) GetOfflinePushInfo() *OfflinePushInfo { - if x != nil { - return x.OfflinePushInfo - } - return nil -} - -func (x *SignalInviteReq) GetParticipant() *ParticipantMetaData { - if x != nil { - return x.Participant - } - return nil -} - -type SignalInviteReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID,proto3" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL,proto3" json:"liveURL,omitempty"` -} - -func (x *SignalInviteReply) Reset() { - *x = SignalInviteReply{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalInviteReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalInviteReply) ProtoMessage() {} - -func (x *SignalInviteReply) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalInviteReply.ProtoReflect.Descriptor instead. -func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{13} -} - -func (x *SignalInviteReply) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *SignalInviteReply) GetRoomID() string { - if x != nil { - return x.RoomID - } - return "" -} - -func (x *SignalInviteReply) GetLiveURL() string { - if x != nil { - return x.LiveURL - } - return "" -} - -type SignalInviteInGroupReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpUserID string `protobuf:"bytes,1,opt,name=opUserID,proto3" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation,proto3" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo,proto3" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant,proto3" json:"participant,omitempty"` -} - -func (x *SignalInviteInGroupReq) Reset() { - *x = SignalInviteInGroupReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalInviteInGroupReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalInviteInGroupReq) ProtoMessage() {} - -func (x *SignalInviteInGroupReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalInviteInGroupReq.ProtoReflect.Descriptor instead. -func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{14} -} - -func (x *SignalInviteInGroupReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -func (x *SignalInviteInGroupReq) GetInvitation() *InvitationInfo { - if x != nil { - return x.Invitation - } - return nil -} - -func (x *SignalInviteInGroupReq) GetOfflinePushInfo() *OfflinePushInfo { - if x != nil { - return x.OfflinePushInfo - } - return nil -} - -func (x *SignalInviteInGroupReq) GetParticipant() *ParticipantMetaData { - if x != nil { - return x.Participant - } - return nil -} - -type SignalInviteInGroupReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID,proto3" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL,proto3" json:"liveURL,omitempty"` -} - -func (x *SignalInviteInGroupReply) Reset() { - *x = SignalInviteInGroupReply{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalInviteInGroupReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalInviteInGroupReply) ProtoMessage() {} - -func (x *SignalInviteInGroupReply) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalInviteInGroupReply.ProtoReflect.Descriptor instead. -func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{15} -} - -func (x *SignalInviteInGroupReply) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *SignalInviteInGroupReply) GetRoomID() string { - if x != nil { - return x.RoomID - } - return "" -} - -func (x *SignalInviteInGroupReply) GetLiveURL() string { - if x != nil { - return x.LiveURL - } - return "" -} - -type SignalCancelReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpUserID string `protobuf:"bytes,1,opt,name=opUserID,proto3" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation,proto3" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo,proto3" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant,proto3" json:"participant,omitempty"` -} - -func (x *SignalCancelReq) Reset() { - *x = SignalCancelReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalCancelReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalCancelReq) ProtoMessage() {} - -func (x *SignalCancelReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalCancelReq.ProtoReflect.Descriptor instead. -func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{16} -} - -func (x *SignalCancelReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -func (x *SignalCancelReq) GetInvitation() *InvitationInfo { - if x != nil { - return x.Invitation - } - return nil -} - -func (x *SignalCancelReq) GetOfflinePushInfo() *OfflinePushInfo { - if x != nil { - return x.OfflinePushInfo - } - return nil -} - -func (x *SignalCancelReq) GetParticipant() *ParticipantMetaData { - if x != nil { - return x.Participant - } - return nil -} - -type SignalCancelReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SignalCancelReply) Reset() { - *x = SignalCancelReply{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalCancelReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalCancelReply) ProtoMessage() {} - -func (x *SignalCancelReply) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalCancelReply.ProtoReflect.Descriptor instead. -func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{17} -} - -type SignalAcceptReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpUserID string `protobuf:"bytes,1,opt,name=opUserID,proto3" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation,proto3" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo,proto3" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant,proto3" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID,proto3" json:"opUserPlatformID,omitempty"` -} - -func (x *SignalAcceptReq) Reset() { - *x = SignalAcceptReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalAcceptReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalAcceptReq) ProtoMessage() {} - -func (x *SignalAcceptReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalAcceptReq.ProtoReflect.Descriptor instead. -func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{18} -} - -func (x *SignalAcceptReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -func (x *SignalAcceptReq) GetInvitation() *InvitationInfo { - if x != nil { - return x.Invitation - } - return nil -} - -func (x *SignalAcceptReq) GetOfflinePushInfo() *OfflinePushInfo { - if x != nil { - return x.OfflinePushInfo - } - return nil -} - -func (x *SignalAcceptReq) GetParticipant() *ParticipantMetaData { - if x != nil { - return x.Participant - } - return nil -} - -func (x *SignalAcceptReq) GetOpUserPlatformID() int32 { - if x != nil { - return x.OpUserPlatformID - } - return 0 -} - -type SignalAcceptReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID,proto3" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL,proto3" json:"liveURL,omitempty"` -} - -func (x *SignalAcceptReply) Reset() { - *x = SignalAcceptReply{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalAcceptReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalAcceptReply) ProtoMessage() {} - -func (x *SignalAcceptReply) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalAcceptReply.ProtoReflect.Descriptor instead. -func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{19} -} - -func (x *SignalAcceptReply) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *SignalAcceptReply) GetRoomID() string { - if x != nil { - return x.RoomID - } - return "" -} - -func (x *SignalAcceptReply) GetLiveURL() string { - if x != nil { - return x.LiveURL - } - return "" -} - -type SignalHungUpReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpUserID string `protobuf:"bytes,1,opt,name=opUserID,proto3" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation,proto3" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo,proto3" json:"offlinePushInfo,omitempty"` -} - -func (x *SignalHungUpReq) Reset() { - *x = SignalHungUpReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalHungUpReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalHungUpReq) ProtoMessage() {} - -func (x *SignalHungUpReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalHungUpReq.ProtoReflect.Descriptor instead. -func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{20} -} - -func (x *SignalHungUpReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -func (x *SignalHungUpReq) GetInvitation() *InvitationInfo { - if x != nil { - return x.Invitation - } - return nil -} - -func (x *SignalHungUpReq) GetOfflinePushInfo() *OfflinePushInfo { - if x != nil { - return x.OfflinePushInfo - } - return nil -} - -type SignalHungUpReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SignalHungUpReply) Reset() { - *x = SignalHungUpReply{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalHungUpReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalHungUpReply) ProtoMessage() {} - -func (x *SignalHungUpReply) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalHungUpReply.ProtoReflect.Descriptor instead. -func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{21} -} - -type SignalRejectReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpUserID string `protobuf:"bytes,1,opt,name=opUserID,proto3" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation,proto3" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo,proto3" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant,proto3" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID,proto3" json:"opUserPlatformID,omitempty"` -} - -func (x *SignalRejectReq) Reset() { - *x = SignalRejectReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalRejectReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalRejectReq) ProtoMessage() {} - -func (x *SignalRejectReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalRejectReq.ProtoReflect.Descriptor instead. -func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{22} -} - -func (x *SignalRejectReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -func (x *SignalRejectReq) GetInvitation() *InvitationInfo { - if x != nil { - return x.Invitation - } - return nil -} - -func (x *SignalRejectReq) GetOfflinePushInfo() *OfflinePushInfo { - if x != nil { - return x.OfflinePushInfo - } - return nil -} - -func (x *SignalRejectReq) GetParticipant() *ParticipantMetaData { - if x != nil { - return x.Participant - } - return nil -} - -func (x *SignalRejectReq) GetOpUserPlatformID() int32 { - if x != nil { - return x.OpUserPlatformID - } - return 0 -} - -type SignalRejectReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SignalRejectReply) Reset() { - *x = SignalRejectReply{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalRejectReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalRejectReply) ProtoMessage() {} - -func (x *SignalRejectReply) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_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 SignalRejectReply.ProtoReflect.Descriptor instead. -func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{23} -} - -type SignalMessageAssembleReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SignalReq *SignalReq `protobuf:"bytes,1,opt,name=signalReq,proto3" json:"signalReq,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID,proto3" json:"operationID,omitempty"` -} - -func (x *SignalMessageAssembleReq) Reset() { - *x = SignalMessageAssembleReq{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalMessageAssembleReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalMessageAssembleReq) ProtoMessage() {} - -func (x *SignalMessageAssembleReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_proto_msgTypes[24] - 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 SignalMessageAssembleReq.ProtoReflect.Descriptor instead. -func (*SignalMessageAssembleReq) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{24} -} - -func (x *SignalMessageAssembleReq) GetSignalReq() *SignalReq { - if x != nil { - return x.SignalReq - } - return nil -} - -func (x *SignalMessageAssembleReq) GetOperationID() string { - if x != nil { - return x.OperationID - } - return "" -} - -type SignalMessageAssembleResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` - IsPass bool `protobuf:"varint,2,opt,name=isPass,proto3" json:"isPass,omitempty"` - SignalResp *SignalResp `protobuf:"bytes,3,opt,name=signalResp,proto3" json:"signalResp,omitempty"` - MsgData *MsgData `protobuf:"bytes,4,opt,name=msgData,proto3" json:"msgData,omitempty"` -} - -func (x *SignalMessageAssembleResp) Reset() { - *x = SignalMessageAssembleResp{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_rtc_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignalMessageAssembleResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignalMessageAssembleResp) ProtoMessage() {} - -func (x *SignalMessageAssembleResp) ProtoReflect() protoreflect.Message { - mi := &file_proto_rtc_proto_msgTypes[25] - 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 SignalMessageAssembleResp.ProtoReflect.Descriptor instead. -func (*SignalMessageAssembleResp) Descriptor() ([]byte, []int) { - return file_proto_rtc_proto_rawDescGZIP(), []int{25} -} - -func (x *SignalMessageAssembleResp) GetCommonResp() *CommonResp { - if x != nil { - return x.CommonResp - } - return nil -} - -func (x *SignalMessageAssembleResp) GetIsPass() bool { - if x != nil { - return x.IsPass - } - return false -} - -func (x *SignalMessageAssembleResp) GetSignalResp() *SignalResp { - if x != nil { - return x.SignalResp - } - return nil -} - -func (x *SignalMessageAssembleResp) GetMsgData() *MsgData { - if x != nil { - return x.MsgData - } - return nil -} - -var File_proto_rtc_proto protoreflect.FileDescriptor - -var file_proto_rtc_proto_rawDesc = []byte{ - 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x74, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x22, 0xa4, 0x05, 0x0a, 0x07, 0x4d, 0x73, 0x67, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x63, 0x76, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x63, 0x76, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 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, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x49, 0x44, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, - 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x73, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x12, 0x26, - 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x69, - 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x46, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x20, 0x0a, 0x0b, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, - 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, - 0x6e, 0x66, 0x6f, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xf5, 0x02, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 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, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x74, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x66, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x66, 0x61, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x65, - 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x44, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb7, 0x02, 0x0a, 0x13, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x46, 0x75, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 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, 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, 0x1c, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, - 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, - 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x61, 0x63, 0x65, 0x55, - 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x61, 0x63, 0x65, 0x55, 0x52, - 0x4c, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x4d, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x4d, 0x61, - 0x6e, 0x67, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x69, - 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6a, - 0x6f, 0x69, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x44, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, - 0x78, 0x22, 0xbe, 0x01, 0x0a, 0x13, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x09, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x0f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x46, 0x75, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x31, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0x86, 0x01, 0x0a, 0x0e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 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, 0x1a, 0x0a, - 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x61, 0x63, - 0x65, 0x55, 0x52, 0x4c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x61, 0x63, 0x65, - 0x55, 0x52, 0x4c, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x65, - 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x78, 0x22, 0x9b, 0x01, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, - 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x36, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 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, 0x71, 0x0a, 0x10, 0x47, 0x65, 0x74, - 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, - 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, - 0x77, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x22, 0x95, 0x01, 0x0a, - 0x0f, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x78, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x4f, - 0x53, 0x50, 0x75, 0x73, 0x68, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x69, 0x4f, 0x53, 0x50, 0x75, 0x73, 0x68, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x24, - 0x0a, 0x0d, 0x69, 0x4f, 0x53, 0x42, 0x61, 0x64, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x4f, 0x53, 0x42, 0x61, 0x64, 0x67, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xd7, 0x02, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x12, 0x30, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x06, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x0a, 0x06, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x30, 0x0a, - 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, - 0x30, 0x0a, 0x06, 0x68, 0x75, 0x6e, 0x67, 0x55, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x48, 0x75, - 0x6e, 0x67, 0x55, 0x70, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x06, 0x68, 0x75, 0x6e, 0x67, 0x55, - 0x70, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, - 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xe4, - 0x02, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x32, 0x0a, - 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x12, 0x47, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x32, - 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x75, 0x6e, 0x67, 0x55, 0x70, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x48, 0x75, 0x6e, 0x67, 0x55, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x06, - 0x68, 0x75, 0x6e, 0x67, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xb0, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x2c, - 0x0a, 0x11, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x61, 0x74, 0x61, 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, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x44, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x44, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x64, 0x69, - 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, - 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xe4, 0x01, 0x0a, 0x0f, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, - 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x40, 0x0a, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, - 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x22, - 0x5b, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, - 0x6f, 0x6d, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x22, 0xeb, 0x01, 0x0a, - 0x16, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x6f, 0x66, - 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x66, 0x66, 0x6c, - 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x66, 0x66, - 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x0b, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x22, 0x62, 0x0a, 0x18, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, - 0x6f, 0x6d, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x22, 0xe4, - 0x01, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, - 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x35, - 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, - 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, - 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, - 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x6e, 0x74, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x90, 0x02, 0x0a, 0x0f, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1a, - 0x0a, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x0a, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, - 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, - 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, - 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6f, 0x70, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x22, 0x5b, 0x0a, - 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x44, - 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x52, 0x4c, 0x22, 0xa6, 0x01, 0x0a, 0x0f, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x48, 0x75, 0x6e, 0x67, 0x55, 0x70, 0x52, 0x65, 0x71, 0x12, 0x1a, - 0x0a, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x0a, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, - 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x48, 0x75, 0x6e, - 0x67, 0x55, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x90, 0x02, 0x0a, 0x0f, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, - 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x40, 0x0a, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, - 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, - 0x2a, 0x0a, 0x10, 0x6f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6f, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x44, 0x22, 0x13, 0x0a, 0x11, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x6c, 0x0a, 0x18, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, - 0x71, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0xc3, - 0x01, 0x0a, 0x19, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x16, 0x0a, 0x06, 0x69, 0x73, 0x50, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x69, 0x73, 0x50, 0x61, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x07, 0x6d, 0x73, - 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x73, 0x67, - 0x44, 0x61, 0x74, 0x61, 0x32, 0x68, 0x0a, 0x0a, 0x52, 0x74, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x15, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0b, - 0x5a, 0x09, 0x2e, 0x2f, 0x72, 0x74, 0x63, 0x3b, 0x72, 0x74, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_proto_rtc_proto_rawDescOnce sync.Once - file_proto_rtc_proto_rawDescData = file_proto_rtc_proto_rawDesc -) - -func file_proto_rtc_proto_rawDescGZIP() []byte { - file_proto_rtc_proto_rawDescOnce.Do(func() { - file_proto_rtc_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_rtc_proto_rawDescData) - }) - return file_proto_rtc_proto_rawDescData -} - -var file_proto_rtc_proto_msgTypes = make([]protoimpl.MessageInfo, 27) -var file_proto_rtc_proto_goTypes = []interface{}{ - (*CommonResp)(nil), // 0: proto.CommonResp - (*MsgData)(nil), // 1: proto.MsgData - (*GroupInfo)(nil), // 2: proto.GroupInfo - (*GroupMemberFullInfo)(nil), // 3: proto.GroupMemberFullInfo - (*ParticipantMetaData)(nil), // 4: proto.ParticipantMetaData - (*PublicUserInfo)(nil), // 5: proto.PublicUserInfo - (*GetJoinTokenReq)(nil), // 6: proto.GetJoinTokenReq - (*GetJoinTokenResp)(nil), // 7: proto.GetJoinTokenResp - (*OfflinePushInfo)(nil), // 8: proto.OfflinePushInfo - (*SignalReq)(nil), // 9: proto.SignalReq - (*SignalResp)(nil), // 10: proto.SignalResp - (*InvitationInfo)(nil), // 11: proto.InvitationInfo - (*SignalInviteReq)(nil), // 12: proto.SignalInviteReq - (*SignalInviteReply)(nil), // 13: proto.SignalInviteReply - (*SignalInviteInGroupReq)(nil), // 14: proto.SignalInviteInGroupReq - (*SignalInviteInGroupReply)(nil), // 15: proto.SignalInviteInGroupReply - (*SignalCancelReq)(nil), // 16: proto.SignalCancelReq - (*SignalCancelReply)(nil), // 17: proto.SignalCancelReply - (*SignalAcceptReq)(nil), // 18: proto.SignalAcceptReq - (*SignalAcceptReply)(nil), // 19: proto.SignalAcceptReply - (*SignalHungUpReq)(nil), // 20: proto.SignalHungUpReq - (*SignalHungUpReply)(nil), // 21: proto.SignalHungUpReply - (*SignalRejectReq)(nil), // 22: proto.SignalRejectReq - (*SignalRejectReply)(nil), // 23: proto.SignalRejectReply - (*SignalMessageAssembleReq)(nil), // 24: proto.SignalMessageAssembleReq - (*SignalMessageAssembleResp)(nil), // 25: proto.SignalMessageAssembleResp - nil, // 26: proto.MsgData.OptionsEntry -} -var file_proto_rtc_proto_depIdxs = []int32{ - 26, // 0: proto.MsgData.options:type_name -> proto.MsgData.OptionsEntry - 8, // 1: proto.MsgData.offlinePushInfo:type_name -> proto.OfflinePushInfo - 2, // 2: proto.ParticipantMetaData.groupInfo:type_name -> proto.GroupInfo - 3, // 3: proto.ParticipantMetaData.groupMemberInfo:type_name -> proto.GroupMemberFullInfo - 5, // 4: proto.ParticipantMetaData.userInfo:type_name -> proto.PublicUserInfo - 4, // 5: proto.GetJoinTokenReq.metaData:type_name -> proto.ParticipantMetaData - 0, // 6: proto.GetJoinTokenResp.CommonResp:type_name -> proto.CommonResp - 12, // 7: proto.SignalReq.invite:type_name -> proto.SignalInviteReq - 14, // 8: proto.SignalReq.inviteInGroup:type_name -> proto.SignalInviteInGroupReq - 16, // 9: proto.SignalReq.cancel:type_name -> proto.SignalCancelReq - 18, // 10: proto.SignalReq.accept:type_name -> proto.SignalAcceptReq - 20, // 11: proto.SignalReq.hungUp:type_name -> proto.SignalHungUpReq - 22, // 12: proto.SignalReq.reject:type_name -> proto.SignalRejectReq - 13, // 13: proto.SignalResp.invite:type_name -> proto.SignalInviteReply - 15, // 14: proto.SignalResp.inviteInGroup:type_name -> proto.SignalInviteInGroupReply - 17, // 15: proto.SignalResp.cancel:type_name -> proto.SignalCancelReply - 19, // 16: proto.SignalResp.accept:type_name -> proto.SignalAcceptReply - 21, // 17: proto.SignalResp.hungUp:type_name -> proto.SignalHungUpReply - 23, // 18: proto.SignalResp.reject:type_name -> proto.SignalRejectReply - 11, // 19: proto.SignalInviteReq.invitation:type_name -> proto.InvitationInfo - 8, // 20: proto.SignalInviteReq.offlinePushInfo:type_name -> proto.OfflinePushInfo - 4, // 21: proto.SignalInviteReq.participant:type_name -> proto.ParticipantMetaData - 11, // 22: proto.SignalInviteInGroupReq.invitation:type_name -> proto.InvitationInfo - 8, // 23: proto.SignalInviteInGroupReq.offlinePushInfo:type_name -> proto.OfflinePushInfo - 4, // 24: proto.SignalInviteInGroupReq.participant:type_name -> proto.ParticipantMetaData - 11, // 25: proto.SignalCancelReq.invitation:type_name -> proto.InvitationInfo - 8, // 26: proto.SignalCancelReq.offlinePushInfo:type_name -> proto.OfflinePushInfo - 4, // 27: proto.SignalCancelReq.participant:type_name -> proto.ParticipantMetaData - 11, // 28: proto.SignalAcceptReq.invitation:type_name -> proto.InvitationInfo - 8, // 29: proto.SignalAcceptReq.offlinePushInfo:type_name -> proto.OfflinePushInfo - 4, // 30: proto.SignalAcceptReq.participant:type_name -> proto.ParticipantMetaData - 11, // 31: proto.SignalHungUpReq.invitation:type_name -> proto.InvitationInfo - 8, // 32: proto.SignalHungUpReq.offlinePushInfo:type_name -> proto.OfflinePushInfo - 11, // 33: proto.SignalRejectReq.invitation:type_name -> proto.InvitationInfo - 8, // 34: proto.SignalRejectReq.offlinePushInfo:type_name -> proto.OfflinePushInfo - 4, // 35: proto.SignalRejectReq.participant:type_name -> proto.ParticipantMetaData - 9, // 36: proto.SignalMessageAssembleReq.signalReq:type_name -> proto.SignalReq - 0, // 37: proto.SignalMessageAssembleResp.commonResp:type_name -> proto.CommonResp - 10, // 38: proto.SignalMessageAssembleResp.signalResp:type_name -> proto.SignalResp - 1, // 39: proto.SignalMessageAssembleResp.msgData:type_name -> proto.MsgData - 24, // 40: proto.RtcService.SignalMessageAssemble:input_type -> proto.SignalMessageAssembleReq - 25, // 41: proto.RtcService.SignalMessageAssemble:output_type -> proto.SignalMessageAssembleResp - 41, // [41:42] is the sub-list for method output_type - 40, // [40:41] is the sub-list for method input_type - 40, // [40:40] is the sub-list for extension type_name - 40, // [40:40] is the sub-list for extension extendee - 0, // [0:40] is the sub-list for field type_name -} - -func init() { file_proto_rtc_proto_init() } -func file_proto_rtc_proto_init() { - if File_proto_rtc_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_proto_rtc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommonResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupMemberFullInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ParticipantMetaData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicUserInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJoinTokenReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJoinTokenResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OfflinePushInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvitationInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalInviteReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalInviteReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalInviteInGroupReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalInviteInGroupReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalCancelReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalCancelReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalAcceptReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalAcceptReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalHungUpReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalHungUpReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalRejectReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalRejectReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalMessageAssembleReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_rtc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalMessageAssembleResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_proto_rtc_proto_msgTypes[9].OneofWrappers = []interface{}{ - (*SignalReq_Invite)(nil), - (*SignalReq_InviteInGroup)(nil), - (*SignalReq_Cancel)(nil), - (*SignalReq_Accept)(nil), - (*SignalReq_HungUp)(nil), - (*SignalReq_Reject)(nil), - } - file_proto_rtc_proto_msgTypes[10].OneofWrappers = []interface{}{ +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SignalResp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SignalResp_OneofMarshaler, _SignalResp_OneofUnmarshaler, _SignalResp_OneofSizer, []interface{}{ (*SignalResp_Invite)(nil), (*SignalResp_InviteInGroup)(nil), (*SignalResp_Cancel)(nil), @@ -2889,71 +1183,1063 @@ func file_proto_rtc_proto_init() { (*SignalResp_HungUp)(nil), (*SignalResp_Reject)(nil), } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_rtc_proto_rawDesc, - NumEnums: 0, - NumMessages: 27, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_proto_rtc_proto_goTypes, - DependencyIndexes: file_proto_rtc_proto_depIdxs, - MessageInfos: file_proto_rtc_proto_msgTypes, - }.Build() - File_proto_rtc_proto = out.File - file_proto_rtc_proto_rawDesc = nil - file_proto_rtc_proto_goTypes = nil - file_proto_rtc_proto_depIdxs = nil +} + +func _SignalResp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SignalResp) + // payload + switch x := m.Payload.(type) { + case *SignalResp_Invite: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Invite); err != nil { + return err + } + case *SignalResp_InviteInGroup: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InviteInGroup); err != nil { + return err + } + case *SignalResp_Cancel: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Cancel); err != nil { + return err + } + case *SignalResp_Accept: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Accept); err != nil { + return err + } + case *SignalResp_HungUp: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HungUp); err != nil { + return err + } + case *SignalResp_Reject: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Reject); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SignalResp.Payload has unexpected type %T", x) + } + return nil +} + +func _SignalResp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SignalResp) + switch tag { + case 1: // payload.invite + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Invite{msg} + return true, err + case 2: // payload.inviteInGroup + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteInGroupReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_InviteInGroup{msg} + return true, err + case 3: // payload.cancel + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalCancelReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Cancel{msg} + return true, err + case 4: // payload.accept + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalAcceptReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Accept{msg} + return true, err + case 5: // payload.hungUp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalHungUpReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_HungUp{msg} + return true, err + case 6: // payload.reject + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalRejectReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Reject{msg} + return true, err + default: + return false, nil + } +} + +func _SignalResp_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SignalResp) + // payload + switch x := m.Payload.(type) { + case *SignalResp_Invite: + s := proto.Size(x.Invite) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_InviteInGroup: + s := proto.Size(x.InviteInGroup) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_Cancel: + s := proto.Size(x.Cancel) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_Accept: + s := proto.Size(x.Accept) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_HungUp: + s := proto.Size(x.HungUp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_Reject: + s := proto.Size(x.Reject) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type InvitationInfo struct { + InviterUserID string `protobuf:"bytes,1,opt,name=inviterUserID" json:"inviterUserID,omitempty"` + InviteeUserIDList []string `protobuf:"bytes,2,rep,name=inviteeUserIDList" json:"inviteeUserIDList,omitempty"` + CustomData string `protobuf:"bytes,3,opt,name=customData" json:"customData,omitempty"` + GroupID string `protobuf:"bytes,4,opt,name=groupID" json:"groupID,omitempty"` + RoomID string `protobuf:"bytes,5,opt,name=roomID" json:"roomID,omitempty"` + InitiateTime int32 `protobuf:"varint,6,opt,name=initiateTime" json:"initiateTime,omitempty"` + Timeout int32 `protobuf:"varint,7,opt,name=timeout" json:"timeout,omitempty"` + MediaType string `protobuf:"bytes,8,opt,name=mediaType" json:"mediaType,omitempty"` + PlatformID int32 `protobuf:"varint,9,opt,name=platformID" json:"platformID,omitempty"` + SessionType int32 `protobuf:"varint,10,opt,name=sessionType" json:"sessionType,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } +func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } +func (*InvitationInfo) ProtoMessage() {} +func (*InvitationInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{11} +} +func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) +} +func (m *InvitationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_InvitationInfo.Marshal(b, m, deterministic) +} +func (dst *InvitationInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_InvitationInfo.Merge(dst, src) +} +func (m *InvitationInfo) XXX_Size() int { + return xxx_messageInfo_InvitationInfo.Size(m) +} +func (m *InvitationInfo) XXX_DiscardUnknown() { + xxx_messageInfo_InvitationInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_InvitationInfo proto.InternalMessageInfo + +func (m *InvitationInfo) GetInviterUserID() string { + if m != nil { + return m.InviterUserID + } + return "" +} + +func (m *InvitationInfo) GetInviteeUserIDList() []string { + if m != nil { + return m.InviteeUserIDList + } + return nil +} + +func (m *InvitationInfo) GetCustomData() string { + if m != nil { + return m.CustomData + } + return "" +} + +func (m *InvitationInfo) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *InvitationInfo) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *InvitationInfo) GetInitiateTime() int32 { + if m != nil { + return m.InitiateTime + } + return 0 +} + +func (m *InvitationInfo) GetTimeout() int32 { + if m != nil { + return m.Timeout + } + return 0 +} + +func (m *InvitationInfo) GetMediaType() string { + if m != nil { + return m.MediaType + } + return "" +} + +func (m *InvitationInfo) GetPlatformID() int32 { + if m != nil { + return m.PlatformID + } + return 0 +} + +func (m *InvitationInfo) GetSessionType() int32 { + if m != nil { + return m.SessionType + } + return 0 +} + +type SignalInviteReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } +func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } +func (*SignalInviteReq) ProtoMessage() {} +func (*SignalInviteReq) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{12} +} +func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) +} +func (m *SignalInviteReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteReq.Marshal(b, m, deterministic) +} +func (dst *SignalInviteReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteReq.Merge(dst, src) +} +func (m *SignalInviteReq) XXX_Size() int { + return xxx_messageInfo_SignalInviteReq.Size(m) +} +func (m *SignalInviteReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteReq proto.InternalMessageInfo + +func (m *SignalInviteReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalInviteReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalInviteReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalInviteReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +type SignalInviteReply struct { + Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` + RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` + LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } +func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } +func (*SignalInviteReply) ProtoMessage() {} +func (*SignalInviteReply) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{13} +} +func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) +} +func (m *SignalInviteReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteReply.Marshal(b, m, deterministic) +} +func (dst *SignalInviteReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteReply.Merge(dst, src) +} +func (m *SignalInviteReply) XXX_Size() int { + return xxx_messageInfo_SignalInviteReply.Size(m) +} +func (m *SignalInviteReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteReply proto.InternalMessageInfo + +func (m *SignalInviteReply) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +func (m *SignalInviteReply) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *SignalInviteReply) GetLiveURL() string { + if m != nil { + return m.LiveURL + } + return "" +} + +type SignalInviteInGroupReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} } +func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } +func (*SignalInviteInGroupReq) ProtoMessage() {} +func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{14} +} +func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) +} +func (m *SignalInviteInGroupReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteInGroupReq.Marshal(b, m, deterministic) +} +func (dst *SignalInviteInGroupReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteInGroupReq.Merge(dst, src) +} +func (m *SignalInviteInGroupReq) XXX_Size() int { + return xxx_messageInfo_SignalInviteInGroupReq.Size(m) +} +func (m *SignalInviteInGroupReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteInGroupReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteInGroupReq proto.InternalMessageInfo + +func (m *SignalInviteInGroupReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalInviteInGroupReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalInviteInGroupReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalInviteInGroupReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +type SignalInviteInGroupReply struct { + Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` + RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` + LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupReply{} } +func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } +func (*SignalInviteInGroupReply) ProtoMessage() {} +func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{15} +} +func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) +} +func (m *SignalInviteInGroupReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteInGroupReply.Marshal(b, m, deterministic) +} +func (dst *SignalInviteInGroupReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteInGroupReply.Merge(dst, src) +} +func (m *SignalInviteInGroupReply) XXX_Size() int { + return xxx_messageInfo_SignalInviteInGroupReply.Size(m) +} +func (m *SignalInviteInGroupReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteInGroupReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteInGroupReply proto.InternalMessageInfo + +func (m *SignalInviteInGroupReply) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +func (m *SignalInviteInGroupReply) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *SignalInviteInGroupReply) GetLiveURL() string { + if m != nil { + return m.LiveURL + } + return "" +} + +type SignalCancelReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } +func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } +func (*SignalCancelReq) ProtoMessage() {} +func (*SignalCancelReq) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{16} +} +func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) +} +func (m *SignalCancelReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalCancelReq.Marshal(b, m, deterministic) +} +func (dst *SignalCancelReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalCancelReq.Merge(dst, src) +} +func (m *SignalCancelReq) XXX_Size() int { + return xxx_messageInfo_SignalCancelReq.Size(m) +} +func (m *SignalCancelReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalCancelReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalCancelReq proto.InternalMessageInfo + +func (m *SignalCancelReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalCancelReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalCancelReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalCancelReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +type SignalCancelReply struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } +func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } +func (*SignalCancelReply) ProtoMessage() {} +func (*SignalCancelReply) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{17} +} +func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) +} +func (m *SignalCancelReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalCancelReply.Marshal(b, m, deterministic) +} +func (dst *SignalCancelReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalCancelReply.Merge(dst, src) +} +func (m *SignalCancelReply) XXX_Size() int { + return xxx_messageInfo_SignalCancelReply.Size(m) +} +func (m *SignalCancelReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalCancelReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalCancelReply proto.InternalMessageInfo + +type SignalAcceptReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } +func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } +func (*SignalAcceptReq) ProtoMessage() {} +func (*SignalAcceptReq) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{18} +} +func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) +} +func (m *SignalAcceptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalAcceptReq.Marshal(b, m, deterministic) +} +func (dst *SignalAcceptReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalAcceptReq.Merge(dst, src) +} +func (m *SignalAcceptReq) XXX_Size() int { + return xxx_messageInfo_SignalAcceptReq.Size(m) +} +func (m *SignalAcceptReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalAcceptReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalAcceptReq proto.InternalMessageInfo + +func (m *SignalAcceptReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalAcceptReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalAcceptReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalAcceptReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +func (m *SignalAcceptReq) GetOpUserPlatformID() int32 { + if m != nil { + return m.OpUserPlatformID + } + return 0 +} + +type SignalAcceptReply struct { + Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` + RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` + LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } +func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } +func (*SignalAcceptReply) ProtoMessage() {} +func (*SignalAcceptReply) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{19} +} +func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) +} +func (m *SignalAcceptReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalAcceptReply.Marshal(b, m, deterministic) +} +func (dst *SignalAcceptReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalAcceptReply.Merge(dst, src) +} +func (m *SignalAcceptReply) XXX_Size() int { + return xxx_messageInfo_SignalAcceptReply.Size(m) +} +func (m *SignalAcceptReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalAcceptReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalAcceptReply proto.InternalMessageInfo + +func (m *SignalAcceptReply) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +func (m *SignalAcceptReply) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *SignalAcceptReply) GetLiveURL() string { + if m != nil { + return m.LiveURL + } + return "" +} + +type SignalHungUpReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } +func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } +func (*SignalHungUpReq) ProtoMessage() {} +func (*SignalHungUpReq) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{20} +} +func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) +} +func (m *SignalHungUpReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalHungUpReq.Marshal(b, m, deterministic) +} +func (dst *SignalHungUpReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalHungUpReq.Merge(dst, src) +} +func (m *SignalHungUpReq) XXX_Size() int { + return xxx_messageInfo_SignalHungUpReq.Size(m) +} +func (m *SignalHungUpReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalHungUpReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalHungUpReq proto.InternalMessageInfo + +func (m *SignalHungUpReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalHungUpReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalHungUpReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +type SignalHungUpReply struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } +func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } +func (*SignalHungUpReply) ProtoMessage() {} +func (*SignalHungUpReply) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{21} +} +func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) +} +func (m *SignalHungUpReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalHungUpReply.Marshal(b, m, deterministic) +} +func (dst *SignalHungUpReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalHungUpReply.Merge(dst, src) +} +func (m *SignalHungUpReply) XXX_Size() int { + return xxx_messageInfo_SignalHungUpReply.Size(m) +} +func (m *SignalHungUpReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalHungUpReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalHungUpReply proto.InternalMessageInfo + +type SignalRejectReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } +func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } +func (*SignalRejectReq) ProtoMessage() {} +func (*SignalRejectReq) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{22} +} +func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) +} +func (m *SignalRejectReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalRejectReq.Marshal(b, m, deterministic) +} +func (dst *SignalRejectReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalRejectReq.Merge(dst, src) +} +func (m *SignalRejectReq) XXX_Size() int { + return xxx_messageInfo_SignalRejectReq.Size(m) +} +func (m *SignalRejectReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalRejectReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalRejectReq proto.InternalMessageInfo + +func (m *SignalRejectReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalRejectReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalRejectReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalRejectReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +func (m *SignalRejectReq) GetOpUserPlatformID() int32 { + if m != nil { + return m.OpUserPlatformID + } + return 0 +} + +type SignalRejectReply struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } +func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } +func (*SignalRejectReply) ProtoMessage() {} +func (*SignalRejectReply) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{23} +} +func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) +} +func (m *SignalRejectReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalRejectReply.Marshal(b, m, deterministic) +} +func (dst *SignalRejectReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalRejectReply.Merge(dst, src) +} +func (m *SignalRejectReply) XXX_Size() int { + return xxx_messageInfo_SignalRejectReply.Size(m) +} +func (m *SignalRejectReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalRejectReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalRejectReply proto.InternalMessageInfo + +type SignalMessageAssembleReq struct { + SignalReq *SignalReq `protobuf:"bytes,1,opt,name=signalReq" json:"signalReq,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalMessageAssembleReq) Reset() { *m = SignalMessageAssembleReq{} } +func (m *SignalMessageAssembleReq) String() string { return proto.CompactTextString(m) } +func (*SignalMessageAssembleReq) ProtoMessage() {} +func (*SignalMessageAssembleReq) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{24} +} +func (m *SignalMessageAssembleReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalMessageAssembleReq.Unmarshal(m, b) +} +func (m *SignalMessageAssembleReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalMessageAssembleReq.Marshal(b, m, deterministic) +} +func (dst *SignalMessageAssembleReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalMessageAssembleReq.Merge(dst, src) +} +func (m *SignalMessageAssembleReq) XXX_Size() int { + return xxx_messageInfo_SignalMessageAssembleReq.Size(m) +} +func (m *SignalMessageAssembleReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalMessageAssembleReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalMessageAssembleReq proto.InternalMessageInfo + +func (m *SignalMessageAssembleReq) GetSignalReq() *SignalReq { + if m != nil { + return m.SignalReq + } + return nil +} + +func (m *SignalMessageAssembleReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type SignalMessageAssembleResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + IsPass bool `protobuf:"varint,2,opt,name=isPass" json:"isPass,omitempty"` + SignalResp *SignalResp `protobuf:"bytes,3,opt,name=signalResp" json:"signalResp,omitempty"` + MsgData *MsgData `protobuf:"bytes,4,opt,name=msgData" json:"msgData,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalMessageAssembleResp) Reset() { *m = SignalMessageAssembleResp{} } +func (m *SignalMessageAssembleResp) String() string { return proto.CompactTextString(m) } +func (*SignalMessageAssembleResp) ProtoMessage() {} +func (*SignalMessageAssembleResp) Descriptor() ([]byte, []int) { + return fileDescriptor_rtc_62dedd07770ec854, []int{25} +} +func (m *SignalMessageAssembleResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalMessageAssembleResp.Unmarshal(m, b) +} +func (m *SignalMessageAssembleResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalMessageAssembleResp.Marshal(b, m, deterministic) +} +func (dst *SignalMessageAssembleResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalMessageAssembleResp.Merge(dst, src) +} +func (m *SignalMessageAssembleResp) XXX_Size() int { + return xxx_messageInfo_SignalMessageAssembleResp.Size(m) +} +func (m *SignalMessageAssembleResp) XXX_DiscardUnknown() { + xxx_messageInfo_SignalMessageAssembleResp.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalMessageAssembleResp proto.InternalMessageInfo + +func (m *SignalMessageAssembleResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func (m *SignalMessageAssembleResp) GetIsPass() bool { + if m != nil { + return m.IsPass + } + return false +} + +func (m *SignalMessageAssembleResp) GetSignalResp() *SignalResp { + if m != nil { + return m.SignalResp + } + return nil +} + +func (m *SignalMessageAssembleResp) GetMsgData() *MsgData { + if m != nil { + return m.MsgData + } + return nil +} + +func init() { + proto.RegisterType((*CommonResp)(nil), "proto.CommonResp") + proto.RegisterType((*MsgData)(nil), "proto.MsgData") + proto.RegisterMapType((map[string]bool)(nil), "proto.MsgData.OptionsEntry") + proto.RegisterType((*GroupInfo)(nil), "proto.GroupInfo") + proto.RegisterType((*GroupMemberFullInfo)(nil), "proto.GroupMemberFullInfo") + proto.RegisterType((*ParticipantMetaData)(nil), "proto.ParticipantMetaData") + proto.RegisterType((*PublicUserInfo)(nil), "proto.PublicUserInfo") + proto.RegisterType((*GetJoinTokenReq)(nil), "proto.GetJoinTokenReq") + proto.RegisterType((*GetJoinTokenResp)(nil), "proto.GetJoinTokenResp") + proto.RegisterType((*OfflinePushInfo)(nil), "proto.OfflinePushInfo") + proto.RegisterType((*SignalReq)(nil), "proto.SignalReq") + proto.RegisterType((*SignalResp)(nil), "proto.SignalResp") + proto.RegisterType((*InvitationInfo)(nil), "proto.InvitationInfo") + proto.RegisterType((*SignalInviteReq)(nil), "proto.SignalInviteReq") + proto.RegisterType((*SignalInviteReply)(nil), "proto.SignalInviteReply") + proto.RegisterType((*SignalInviteInGroupReq)(nil), "proto.SignalInviteInGroupReq") + proto.RegisterType((*SignalInviteInGroupReply)(nil), "proto.SignalInviteInGroupReply") + proto.RegisterType((*SignalCancelReq)(nil), "proto.SignalCancelReq") + proto.RegisterType((*SignalCancelReply)(nil), "proto.SignalCancelReply") + proto.RegisterType((*SignalAcceptReq)(nil), "proto.SignalAcceptReq") + proto.RegisterType((*SignalAcceptReply)(nil), "proto.SignalAcceptReply") + proto.RegisterType((*SignalHungUpReq)(nil), "proto.SignalHungUpReq") + proto.RegisterType((*SignalHungUpReply)(nil), "proto.SignalHungUpReply") + proto.RegisterType((*SignalRejectReq)(nil), "proto.SignalRejectReq") + proto.RegisterType((*SignalRejectReply)(nil), "proto.SignalRejectReply") + proto.RegisterType((*SignalMessageAssembleReq)(nil), "proto.SignalMessageAssembleReq") + proto.RegisterType((*SignalMessageAssembleResp)(nil), "proto.SignalMessageAssembleResp") } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConnInterface +var _ grpc.ClientConn // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 +const _ = grpc.SupportPackageIsVersion4 + +// Client API for RtcService service -// RtcServiceClient is the client API for RtcService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type RtcServiceClient interface { SignalMessageAssemble(ctx context.Context, in *SignalMessageAssembleReq, opts ...grpc.CallOption) (*SignalMessageAssembleResp, error) } type rtcServiceClient struct { - cc grpc.ClientConnInterface + cc *grpc.ClientConn } -func NewRtcServiceClient(cc grpc.ClientConnInterface) RtcServiceClient { +func NewRtcServiceClient(cc *grpc.ClientConn) RtcServiceClient { return &rtcServiceClient{cc} } func (c *rtcServiceClient) SignalMessageAssemble(ctx context.Context, in *SignalMessageAssembleReq, opts ...grpc.CallOption) (*SignalMessageAssembleResp, error) { out := new(SignalMessageAssembleResp) - err := c.cc.Invoke(ctx, "/proto.RtcService/SignalMessageAssemble", in, out, opts...) + err := grpc.Invoke(ctx, "/proto.RtcService/SignalMessageAssemble", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// RtcServiceServer is the server API for RtcService service. +// Server API for RtcService service + type RtcServiceServer interface { SignalMessageAssemble(context.Context, *SignalMessageAssembleReq) (*SignalMessageAssembleResp, error) } -// UnimplementedRtcServiceServer can be embedded to have forward compatible implementations. -type UnimplementedRtcServiceServer struct { -} - -func (*UnimplementedRtcServiceServer) SignalMessageAssemble(context.Context, *SignalMessageAssembleReq) (*SignalMessageAssembleResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method SignalMessageAssemble not implemented") -} - func RegisterRtcServiceServer(s *grpc.Server, srv RtcServiceServer) { s.RegisterService(&_RtcService_serviceDesc, srv) } @@ -2986,5 +2272,110 @@ var _RtcService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "proto/rtc.proto", + Metadata: "rtc/rtc.proto", +} + +func init() { proto.RegisterFile("rtc/rtc.proto", fileDescriptor_rtc_62dedd07770ec854) } + +var fileDescriptor_rtc_62dedd07770ec854 = []byte{ + // 1579 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0x67, 0xed, 0x38, 0x89, 0x9f, 0xf3, 0x77, 0x42, 0xa3, 0x25, 0xfc, 0xb3, 0xac, 0xaa, 0xb2, + 0x2a, 0x94, 0x52, 0xa3, 0x22, 0x54, 0x10, 0xa2, 0x4d, 0xfa, 0xc7, 0xa8, 0x69, 0xa2, 0x49, 0x73, + 0x29, 0xa7, 0xcd, 0x7a, 0xe2, 0x4e, 0xbb, 0xde, 0xd9, 0xcc, 0xce, 0xa6, 0xcd, 0x17, 0xe0, 0xcc, + 0x85, 0x13, 0x57, 0xc4, 0x57, 0xe0, 0xc6, 0x85, 0xaf, 0x80, 0xc4, 0x17, 0xe8, 0x8d, 0x33, 0x77, + 0x34, 0x6f, 0x66, 0x77, 0x67, 0xd7, 0x4e, 0x01, 0xa9, 0x07, 0x54, 0x4e, 0xde, 0xf7, 0x6f, 0x66, + 0xf6, 0xf7, 0x7e, 0xf3, 0xde, 0xf3, 0xc2, 0xb2, 0x54, 0xe1, 0x35, 0xa9, 0xc2, 0xed, 0x44, 0x0a, + 0x25, 0x48, 0x0b, 0x7f, 0x7a, 0x5f, 0x02, 0xec, 0x88, 0xc9, 0x44, 0xc4, 0x94, 0xa5, 0x09, 0xf1, + 0x61, 0x81, 0x49, 0xb9, 0x23, 0x46, 0xcc, 0xf7, 0xba, 0x5e, 0xbf, 0x45, 0x73, 0x91, 0x6c, 0xc2, + 0x3c, 0x93, 0x72, 0x2f, 0x1d, 0xfb, 0x8d, 0xae, 0xd7, 0x6f, 0x53, 0x2b, 0xf5, 0x7e, 0x6c, 0xc1, + 0xc2, 0x5e, 0x3a, 0xde, 0x0d, 0x54, 0xa0, 0x7d, 0x52, 0x16, 0x8f, 0x86, 0xbb, 0x18, 0xdc, 0xa6, + 0x56, 0xd2, 0x7a, 0xc9, 0xc2, 0xb3, 0xe1, 0x6e, 0x1e, 0x6b, 0x24, 0xbd, 0xdb, 0x58, 0x8a, 0x2c, + 0x19, 0xee, 0xfa, 0x4d, 0x34, 0xe4, 0x22, 0xe9, 0x42, 0x27, 0x8c, 0x38, 0x8b, 0xd5, 0x5e, 0x3a, + 0x1e, 0xee, 0xfa, 0x73, 0x68, 0x75, 0x55, 0xda, 0x23, 0x65, 0xf2, 0x8c, 0x49, 0xe3, 0xd1, 0x32, + 0x1e, 0x8e, 0x8a, 0x5c, 0x85, 0x35, 0xbd, 0x3f, 0x93, 0x07, 0x51, 0xa0, 0x4e, 0x84, 0x9c, 0x0c, + 0x77, 0xfd, 0x79, 0x7c, 0xa9, 0x29, 0x3d, 0xb9, 0x02, 0x2b, 0x46, 0xf7, 0x90, 0x87, 0xcf, 0xe2, + 0x60, 0xc2, 0xfc, 0x05, 0x5c, 0xb0, 0xa6, 0x25, 0x97, 0x61, 0xd9, 0x68, 0xee, 0x06, 0x21, 0x3b, + 0xa2, 0x0f, 0xfc, 0x45, 0x74, 0xab, 0x2a, 0xcd, 0xd9, 0xd2, 0x94, 0x8b, 0xf8, 0xd1, 0x79, 0xc2, + 0xfc, 0x36, 0x6e, 0xea, 0xaa, 0xf4, 0x9b, 0x4f, 0xd2, 0xf1, 0x5d, 0x29, 0x26, 0x3e, 0x18, 0x9c, + 0xad, 0x88, 0x6f, 0x2e, 0x62, 0xc5, 0x62, 0x85, 0xb1, 0x1d, 0x13, 0xeb, 0xa8, 0x74, 0xac, 0x15, + 0xfd, 0xa5, 0xae, 0xd7, 0x5f, 0xa2, 0xb9, 0x48, 0xd6, 0xa0, 0x99, 0xb2, 0x53, 0x7f, 0xa5, 0xeb, + 0xf5, 0x97, 0xa9, 0x7e, 0x24, 0x5b, 0xb0, 0xa8, 0x8f, 0xf6, 0x88, 0x4f, 0x98, 0xbf, 0xda, 0xf5, + 0xfa, 0x4d, 0x5a, 0xc8, 0xe4, 0x03, 0x80, 0x50, 0xb2, 0x40, 0x31, 0xb4, 0xae, 0xa1, 0xd5, 0xd1, + 0x60, 0x36, 0x55, 0xa0, 0xb2, 0xd4, 0x5f, 0xc7, 0x43, 0x58, 0x89, 0xdc, 0x80, 0x05, 0x91, 0x28, + 0x2e, 0xe2, 0xd4, 0x27, 0xdd, 0x66, 0xbf, 0x33, 0x78, 0xd7, 0x30, 0x6a, 0xdb, 0xd2, 0x60, 0x7b, + 0xdf, 0x58, 0xef, 0xc4, 0x4a, 0x9e, 0xd3, 0xdc, 0x97, 0x7c, 0x05, 0xab, 0xe2, 0xe4, 0x24, 0xe2, + 0x31, 0x3b, 0xc8, 0xd2, 0x27, 0xc3, 0xf8, 0x44, 0xf8, 0x1b, 0x5d, 0xaf, 0xdf, 0x19, 0x6c, 0xda, + 0xf0, 0xfd, 0xaa, 0x95, 0xd6, 0xdd, 0xb7, 0x6e, 0xc2, 0x92, 0xbb, 0xb4, 0x7e, 0xdd, 0x67, 0xec, + 0xdc, 0x72, 0x4d, 0x3f, 0x92, 0xb7, 0xa1, 0x75, 0x16, 0x44, 0x19, 0x43, 0x9e, 0x2d, 0x52, 0x23, + 0xdc, 0x6c, 0x7c, 0xe6, 0xf5, 0xfe, 0x6c, 0x40, 0xfb, 0x1e, 0x92, 0x2b, 0x3e, 0x11, 0x2e, 0xf1, + 0xbc, 0x2a, 0xf1, 0xde, 0x83, 0x36, 0x3e, 0x3e, 0xd4, 0x1c, 0x30, 0x6c, 0x2d, 0x15, 0xa4, 0x07, + 0x4b, 0xb1, 0x50, 0xfc, 0x84, 0x87, 0x81, 0x3e, 0x87, 0x65, 0x6d, 0x45, 0xa7, 0x7d, 0x78, 0xac, + 0xa4, 0x18, 0x65, 0x21, 0xfa, 0x18, 0xee, 0x56, 0x74, 0x7a, 0xff, 0x13, 0x4b, 0x20, 0x43, 0xdc, + 0x5c, 0xd4, 0xe9, 0x17, 0xcf, 0x63, 0x26, 0x8f, 0x52, 0x26, 0x2d, 0x5f, 0xdb, 0xd4, 0x55, 0xd5, + 0xd2, 0xb6, 0x80, 0xb9, 0x76, 0xd3, 0xd6, 0x85, 0xce, 0x84, 0x4d, 0x8e, 0x99, 0xdc, 0x11, 0x59, + 0xac, 0x90, 0xa0, 0xcb, 0xd4, 0x55, 0x91, 0x15, 0x68, 0xb0, 0x17, 0xc8, 0xca, 0x36, 0x6d, 0xb0, + 0x17, 0x4e, 0xa2, 0xa1, 0x92, 0xe8, 0xcb, 0xb0, 0x8c, 0xeb, 0x8a, 0xfc, 0x34, 0x1d, 0x43, 0xf6, + 0x8a, 0xb2, 0x40, 0x0c, 0xe9, 0xba, 0x84, 0x0b, 0x94, 0x8a, 0xde, 0xcf, 0x0d, 0xd8, 0x40, 0xdc, + 0xf7, 0xf0, 0x00, 0x77, 0xb3, 0x28, 0xfa, 0x9b, 0x0c, 0x6c, 0xc2, 0x7c, 0x66, 0xb6, 0xb3, 0xc5, + 0x22, 0x2b, 0xf6, 0x91, 0x22, 0x62, 0x0f, 0xd8, 0x19, 0x8b, 0x10, 0xf8, 0x16, 0x2d, 0x15, 0x9a, + 0xe8, 0x4f, 0x05, 0x8f, 0x11, 0x93, 0x39, 0x34, 0x16, 0xb2, 0xb6, 0xc5, 0xf9, 0xb5, 0x36, 0x70, + 0x17, 0xb2, 0x9b, 0x89, 0xf9, 0x6a, 0x26, 0xae, 0xc0, 0x4a, 0x90, 0x24, 0x7b, 0x41, 0x3c, 0x66, + 0xd2, 0x6c, 0xba, 0x80, 0xeb, 0xd6, 0xb4, 0x3a, 0x1f, 0x7a, 0xa7, 0x43, 0x91, 0xc9, 0x90, 0x21, + 0xdc, 0x2d, 0xea, 0x68, 0xf4, 0x3a, 0x22, 0x61, 0xd2, 0x81, 0xd1, 0x20, 0x5f, 0xd3, 0xda, 0xac, + 0x40, 0x9e, 0x95, 0xde, 0x2f, 0x1e, 0x6c, 0x1c, 0x04, 0x52, 0xf1, 0x90, 0x27, 0x41, 0xac, 0xf6, + 0x98, 0x0a, 0xb0, 0xc8, 0x6e, 0x5b, 0xbc, 0xf1, 0x06, 0x79, 0x78, 0x83, 0xd6, 0xec, 0x0d, 0x2a, + 0x08, 0x4e, 0x4b, 0x17, 0xb2, 0x0b, 0xab, 0xe3, 0x32, 0x01, 0x18, 0xd5, 0xc0, 0xa8, 0x2d, 0x37, + 0xaa, 0x9a, 0x1e, 0x5a, 0x0f, 0x21, 0xd7, 0x61, 0x11, 0xf3, 0xa0, 0xc3, 0x9b, 0x18, 0x7e, 0xc9, + 0x86, 0x1f, 0x64, 0xc7, 0x11, 0x0f, 0x8f, 0xac, 0x91, 0x16, 0x6e, 0xbd, 0x6f, 0x3d, 0x58, 0xa9, + 0x1a, 0x9d, 0xdc, 0x7a, 0x95, 0xdc, 0xba, 0x19, 0x6a, 0x5c, 0x9c, 0xa1, 0x66, 0x35, 0x43, 0x9b, + 0x30, 0x3f, 0xc6, 0xba, 0x6b, 0x33, 0x6e, 0x25, 0x8b, 0x64, 0xab, 0x40, 0xf2, 0x07, 0x0f, 0x56, + 0xef, 0x31, 0xf5, 0xb5, 0xe6, 0x83, 0x78, 0xc6, 0x62, 0xca, 0x4e, 0x09, 0x81, 0x39, 0x29, 0xc4, + 0xc4, 0x9e, 0x03, 0x9f, 0xf5, 0x29, 0xf8, 0x88, 0xc5, 0x8a, 0xab, 0xf3, 0xfc, 0x14, 0xb9, 0x4c, + 0x3e, 0x85, 0xc5, 0x89, 0xcd, 0x80, 0x7d, 0xff, 0x1c, 0xbe, 0x19, 0x39, 0xa2, 0x85, 0x2f, 0xde, + 0x67, 0xcc, 0x33, 0x17, 0x71, 0xd9, 0xc8, 0x1c, 0x55, 0xef, 0x14, 0xd6, 0xaa, 0x87, 0x4b, 0x13, + 0x72, 0xdd, 0x6d, 0xca, 0x36, 0xc9, 0xeb, 0x76, 0xbf, 0xd2, 0x40, 0xdd, 0xce, 0xbd, 0x06, 0xcd, + 0xa7, 0xcf, 0x95, 0x3d, 0xb7, 0x7e, 0xd4, 0xc0, 0x45, 0xfc, 0xcc, 0x05, 0xce, 0x8a, 0xbd, 0xef, + 0x3d, 0x58, 0xad, 0x55, 0x5b, 0x5d, 0x3a, 0x15, 0x57, 0x11, 0xb3, 0x88, 0x18, 0x41, 0xc3, 0x34, + 0x62, 0x69, 0x68, 0x97, 0xc5, 0x67, 0x0b, 0x6f, 0xb3, 0x28, 0x1f, 0xba, 0xe0, 0xed, 0x1f, 0xea, + 0x85, 0x0e, 0x45, 0x16, 0x8f, 0x8a, 0x82, 0xe7, 0xe8, 0x74, 0x29, 0xe1, 0xfb, 0x87, 0xb7, 0x83, + 0xd1, 0x98, 0x99, 0xb2, 0xd4, 0xc2, 0x02, 0x5d, 0x55, 0xf6, 0x7e, 0x6f, 0x40, 0xfb, 0x90, 0x8f, + 0xe3, 0x20, 0xd2, 0x29, 0xfa, 0x18, 0xe6, 0x79, 0x7c, 0xc6, 0x15, 0xb3, 0x00, 0xe4, 0x7d, 0xc2, + 0x78, 0x0c, 0xd1, 0x44, 0xd9, 0xe9, 0xfd, 0xb7, 0xa8, 0xf5, 0x23, 0x77, 0x60, 0xd9, 0x3c, 0x0d, + 0x63, 0x24, 0xb5, 0x25, 0xfa, 0xfb, 0x33, 0x02, 0xad, 0x87, 0x89, 0xaf, 0x46, 0xe9, 0x8d, 0xc3, + 0x20, 0x0e, 0x6d, 0x99, 0xa9, 0x6f, 0xbc, 0x83, 0x26, 0xbb, 0xb1, 0xf1, 0xd3, 0x11, 0x41, 0x18, + 0xb2, 0x44, 0xe1, 0xcb, 0xd7, 0x23, 0x6e, 0xa1, 0xc9, 0x46, 0x18, 0x3f, 0x1d, 0xf1, 0x24, 0x8b, + 0xc7, 0x47, 0x09, 0x22, 0x51, 0x8f, 0xb8, 0x8f, 0x26, 0x1b, 0x61, 0xfc, 0x74, 0x84, 0x64, 0x4f, + 0x59, 0xa8, 0xb0, 0x50, 0xd5, 0x23, 0x28, 0x9a, 0x6c, 0x84, 0xf1, 0xbb, 0xdd, 0x86, 0x85, 0x24, + 0x38, 0x8f, 0x44, 0x30, 0xea, 0xbd, 0x6c, 0x00, 0xe4, 0x8e, 0x69, 0x42, 0x06, 0x35, 0x68, 0xfd, + 0x99, 0xd0, 0x26, 0xd1, 0xb9, 0x03, 0xee, 0xbd, 0xd9, 0xe0, 0x7e, 0xf8, 0x2a, 0x70, 0xcd, 0x0a, + 0x35, 0x78, 0x07, 0x35, 0x78, 0xfd, 0x99, 0xf0, 0xda, 0xcd, 0x2d, 0xc0, 0x83, 0x1a, 0xc0, 0xfe, + 0x4c, 0x80, 0x6d, 0x8c, 0x85, 0x78, 0x50, 0x83, 0xd8, 0x9f, 0x09, 0xb1, 0x8d, 0xb1, 0x20, 0x0f, + 0x6a, 0x20, 0xfb, 0x33, 0x41, 0xb6, 0x31, 0xd3, 0x30, 0xff, 0xd6, 0x80, 0x15, 0x84, 0xc0, 0x5c, + 0x6e, 0x7d, 0xaf, 0x2e, 0xe7, 0xb0, 0xe5, 0xd5, 0xdf, 0xdc, 0xaf, 0xaa, 0x92, 0x7c, 0x04, 0xeb, + 0x46, 0xc1, 0x8c, 0xe2, 0x01, 0x4f, 0xf5, 0x5d, 0x6e, 0xf6, 0xdb, 0x74, 0xda, 0x80, 0x23, 0x40, + 0x96, 0x2a, 0x31, 0x29, 0xca, 0x51, 0x9b, 0x3a, 0x1a, 0xb7, 0xb9, 0xce, 0x4d, 0x35, 0x57, 0x5d, + 0xea, 0x8a, 0x81, 0xd9, 0x4a, 0x66, 0x68, 0xe1, 0x8a, 0xe7, 0x63, 0x85, 0x99, 0x93, 0x2b, 0x3a, + 0xbd, 0xaa, 0xe2, 0x13, 0x26, 0x32, 0x65, 0x3b, 0x61, 0x2e, 0xea, 0xd6, 0x3c, 0x61, 0x23, 0x1e, + 0xe0, 0x08, 0x60, 0x26, 0xe2, 0x52, 0xa1, 0x4f, 0x9b, 0x94, 0x13, 0xb8, 0x19, 0x86, 0x1d, 0x4d, + 0x7d, 0x5a, 0x86, 0xa9, 0x69, 0xb9, 0xf7, 0xd2, 0x83, 0xd5, 0xda, 0xad, 0xd7, 0xc5, 0x5a, 0x24, + 0x15, 0x48, 0x0b, 0x99, 0xdc, 0x00, 0xe0, 0x45, 0x16, 0x2c, 0x4f, 0xf3, 0x76, 0x55, 0x4d, 0x0f, + 0x75, 0x1c, 0x67, 0x4d, 0xa8, 0xcd, 0x7f, 0x35, 0xa1, 0x92, 0x2f, 0xa0, 0x93, 0x94, 0xed, 0xc0, + 0x72, 0xf5, 0x55, 0x8d, 0xc2, 0x75, 0xef, 0x7d, 0x03, 0xeb, 0x53, 0x17, 0x10, 0xeb, 0xb2, 0xee, + 0x0b, 0x45, 0x5d, 0xd6, 0x82, 0x93, 0xc7, 0x46, 0x25, 0x8f, 0x17, 0xd7, 0xfc, 0x3f, 0x3c, 0xd8, + 0x9c, 0x5d, 0x00, 0xdf, 0x44, 0x28, 0x8f, 0xc1, 0xbf, 0xa8, 0x20, 0xbd, 0x36, 0x44, 0x4b, 0x56, + 0x16, 0x2d, 0xe1, 0x4d, 0x84, 0x72, 0x23, 0x67, 0xa5, 0x53, 0x99, 0x7b, 0xdf, 0x35, 0xf2, 0x77, + 0x2f, 0x9a, 0xdb, 0x1b, 0xf8, 0xee, 0xe4, 0x2a, 0xac, 0x99, 0x57, 0x70, 0x3e, 0x21, 0xb4, 0xcc, + 0x27, 0x84, 0xba, 0xbe, 0xbc, 0xbd, 0x4e, 0x37, 0x7a, 0x6d, 0x5c, 0xfb, 0xa9, 0xe0, 0x5a, 0x31, + 0x1a, 0xfc, 0x27, 0xf1, 0x2e, 0xd9, 0xe2, 0xf4, 0x57, 0x87, 0x2d, 0xc5, 0x98, 0xf2, 0x7f, 0x67, + 0x4b, 0x81, 0x93, 0x33, 0x53, 0xf4, 0xa2, 0xbc, 0x6a, 0xed, 0xb1, 0x34, 0x0d, 0xc6, 0xec, 0x56, + 0x9a, 0xb2, 0xc9, 0x71, 0x84, 0xfd, 0x6e, 0x1b, 0xda, 0x69, 0x3e, 0x1a, 0xd7, 0xfe, 0xf6, 0x15, + 0x23, 0x33, 0x2d, 0x5d, 0xea, 0x7f, 0x3c, 0x1a, 0xd3, 0x7f, 0x3c, 0x7e, 0xf5, 0xe0, 0x9d, 0x0b, + 0xb6, 0x33, 0x7f, 0x41, 0xc2, 0x7f, 0xf2, 0x17, 0xa4, 0x74, 0xd2, 0xb4, 0xe6, 0xe9, 0x41, 0x90, + 0xa6, 0xf6, 0xf3, 0x8b, 0x95, 0xf4, 0x52, 0x69, 0x31, 0x7b, 0xda, 0x94, 0xac, 0xd7, 0xce, 0xae, + 0x97, 0x2a, 0x9d, 0x48, 0x1f, 0xbf, 0x8f, 0xe1, 0x78, 0x63, 0x92, 0xb0, 0x52, 0xfd, 0xc6, 0x44, + 0x73, 0xf3, 0xe0, 0x09, 0x00, 0x55, 0xe1, 0x21, 0x93, 0x67, 0x3c, 0x64, 0xe4, 0x31, 0x5c, 0x9a, + 0xf9, 0x4a, 0xa4, 0x3a, 0xa6, 0x4e, 0xe3, 0xbb, 0xd5, 0x7d, 0xb5, 0x43, 0x9a, 0xdc, 0xee, 0x3c, + 0x6e, 0x6f, 0x5f, 0x93, 0x2a, 0xfc, 0x5c, 0xaa, 0xf0, 0x78, 0x1e, 0xbd, 0x3f, 0xf9, 0x2b, 0x00, + 0x00, 0xff, 0xff, 0x83, 0xb9, 0x80, 0xa7, 0x55, 0x15, 0x00, 0x00, } diff --git a/pkg/proto/rtc/rtc.proto b/pkg/proto/rtc/rtc.proto index ce9ca472b..ede25601d 100644 --- a/pkg/proto/rtc/rtc.proto +++ b/pkg/proto/rtc/rtc.proto @@ -120,10 +120,11 @@ message InvitationInfo { string customData = 3; string groupID = 4; string roomID = 5; - int32 timeout = 6; - string mediaType = 7; - int32 platformID = 8; - int32 sessionType = 9; + int32 initiateTime = 6; + int32 timeout = 7; + string mediaType = 8; + int32 platformID = 9; + int32 sessionType = 10; } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 204cdfa50..bc20c8d70 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{0} + return fileDescriptor_ws_63019ea76d6cced1, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{1} + return fileDescriptor_ws_63019ea76d6cced1, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{2} + return fileDescriptor_ws_63019ea76d6cced1, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{3} + return fileDescriptor_ws_63019ea76d6cced1, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{4} + return fileDescriptor_ws_63019ea76d6cced1, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{5} + return fileDescriptor_ws_63019ea76d6cced1, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{6} + return fileDescriptor_ws_63019ea76d6cced1, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{7} + return fileDescriptor_ws_63019ea76d6cced1, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{8} + return fileDescriptor_ws_63019ea76d6cced1, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{9} + return fileDescriptor_ws_63019ea76d6cced1, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{10} + return fileDescriptor_ws_63019ea76d6cced1, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{11} + return fileDescriptor_ws_63019ea76d6cced1, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{12} + return fileDescriptor_ws_63019ea76d6cced1, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1277,7 +1277,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{13} + return fileDescriptor_ws_63019ea76d6cced1, []int{13} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1331,7 +1331,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{14} + return fileDescriptor_ws_63019ea76d6cced1, []int{14} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1382,7 +1382,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{15} + return fileDescriptor_ws_63019ea76d6cced1, []int{15} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1414,7 +1414,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{16} + return fileDescriptor_ws_63019ea76d6cced1, []int{16} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1461,7 +1461,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{17} + return fileDescriptor_ws_63019ea76d6cced1, []int{17} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1531,7 +1531,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{18} + return fileDescriptor_ws_63019ea76d6cced1, []int{18} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1699,7 +1699,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{19} + return fileDescriptor_ws_63019ea76d6cced1, []int{19} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1767,7 +1767,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{20} + return fileDescriptor_ws_63019ea76d6cced1, []int{20} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1824,7 +1824,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{21} + return fileDescriptor_ws_63019ea76d6cced1, []int{21} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1893,7 +1893,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{22} + return fileDescriptor_ws_63019ea76d6cced1, []int{22} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1948,7 +1948,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{23} + return fileDescriptor_ws_63019ea76d6cced1, []int{23} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2004,7 +2004,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{24} + return fileDescriptor_ws_63019ea76d6cced1, []int{24} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2059,7 +2059,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{25} + return fileDescriptor_ws_63019ea76d6cced1, []int{25} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2114,7 +2114,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{26} + return fileDescriptor_ws_63019ea76d6cced1, []int{26} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2170,7 +2170,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{27} + return fileDescriptor_ws_63019ea76d6cced1, []int{27} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2233,7 +2233,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{28} + return fileDescriptor_ws_63019ea76d6cced1, []int{28} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2296,7 +2296,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{29} + return fileDescriptor_ws_63019ea76d6cced1, []int{29} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2358,7 +2358,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{30} + return fileDescriptor_ws_63019ea76d6cced1, []int{30} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2412,7 +2412,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{31} + return fileDescriptor_ws_63019ea76d6cced1, []int{31} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2468,7 +2468,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{32} + return fileDescriptor_ws_63019ea76d6cced1, []int{32} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2537,7 +2537,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{33} + return fileDescriptor_ws_63019ea76d6cced1, []int{33} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2598,7 +2598,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{34} + return fileDescriptor_ws_63019ea76d6cced1, []int{34} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2652,7 +2652,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{35} + return fileDescriptor_ws_63019ea76d6cced1, []int{35} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2707,7 +2707,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{36} + return fileDescriptor_ws_63019ea76d6cced1, []int{36} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2767,7 +2767,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{37} + return fileDescriptor_ws_63019ea76d6cced1, []int{37} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2814,7 +2814,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{38} + return fileDescriptor_ws_63019ea76d6cced1, []int{38} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2867,7 +2867,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{39} + return fileDescriptor_ws_63019ea76d6cced1, []int{39} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2913,7 +2913,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{40} + return fileDescriptor_ws_63019ea76d6cced1, []int{40} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2953,7 +2953,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{41} + return fileDescriptor_ws_63019ea76d6cced1, []int{41} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3000,7 +3000,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{42} + return fileDescriptor_ws_63019ea76d6cced1, []int{42} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3048,7 +3048,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{43} + return fileDescriptor_ws_63019ea76d6cced1, []int{43} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3101,7 +3101,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{44} + return fileDescriptor_ws_63019ea76d6cced1, []int{44} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3139,7 +3139,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{45} + return fileDescriptor_ws_63019ea76d6cced1, []int{45} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3177,7 +3177,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{46} + return fileDescriptor_ws_63019ea76d6cced1, []int{46} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3215,7 +3215,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{47} + return fileDescriptor_ws_63019ea76d6cced1, []int{47} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3254,7 +3254,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{48} + return fileDescriptor_ws_63019ea76d6cced1, []int{48} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3293,7 +3293,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{49} + return fileDescriptor_ws_63019ea76d6cced1, []int{49} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3333,7 +3333,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{50} + return fileDescriptor_ws_63019ea76d6cced1, []int{50} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3388,7 +3388,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{51} + return fileDescriptor_ws_63019ea76d6cced1, []int{51} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3442,7 +3442,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{52} + return fileDescriptor_ws_63019ea76d6cced1, []int{52} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3488,7 +3488,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{53} + return fileDescriptor_ws_63019ea76d6cced1, []int{53} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3541,7 +3541,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{54} + return fileDescriptor_ws_63019ea76d6cced1, []int{54} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3808,7 +3808,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{55} + return fileDescriptor_ws_63019ea76d6cced1, []int{55} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4063,10 +4063,11 @@ type InvitationInfo struct { CustomData string `protobuf:"bytes,3,opt,name=customData" json:"customData,omitempty"` GroupID string `protobuf:"bytes,4,opt,name=groupID" json:"groupID,omitempty"` RoomID string `protobuf:"bytes,5,opt,name=roomID" json:"roomID,omitempty"` - Timeout int32 `protobuf:"varint,6,opt,name=timeout" json:"timeout,omitempty"` - MediaType string `protobuf:"bytes,7,opt,name=mediaType" json:"mediaType,omitempty"` - PlatformID int32 `protobuf:"varint,8,opt,name=platformID" json:"platformID,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` + InitiateTime int32 `protobuf:"varint,6,opt,name=initiateTime" json:"initiateTime,omitempty"` + Timeout int32 `protobuf:"varint,7,opt,name=timeout" json:"timeout,omitempty"` + MediaType string `protobuf:"bytes,8,opt,name=mediaType" json:"mediaType,omitempty"` + PlatformID int32 `protobuf:"varint,9,opt,name=platformID" json:"platformID,omitempty"` + SessionType int32 `protobuf:"varint,10,opt,name=sessionType" json:"sessionType,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -4076,7 +4077,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{56} + return fileDescriptor_ws_63019ea76d6cced1, []int{56} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4131,6 +4132,13 @@ func (m *InvitationInfo) GetRoomID() string { return "" } +func (m *InvitationInfo) GetInitiateTime() int32 { + if m != nil { + return m.InitiateTime + } + return 0 +} + func (m *InvitationInfo) GetTimeout() int32 { if m != nil { return m.Timeout @@ -4172,7 +4180,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{57} + return fileDescriptor_ws_63019ea76d6cced1, []int{57} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4227,7 +4235,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{58} + return fileDescriptor_ws_63019ea76d6cced1, []int{58} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4288,7 +4296,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{59} + return fileDescriptor_ws_63019ea76d6cced1, []int{59} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4343,7 +4351,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{60} + return fileDescriptor_ws_63019ea76d6cced1, []int{60} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4404,7 +4412,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{61} + return fileDescriptor_ws_63019ea76d6cced1, []int{61} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4459,7 +4467,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{62} + return fileDescriptor_ws_63019ea76d6cced1, []int{62} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4517,7 +4525,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{63} + return fileDescriptor_ws_63019ea76d6cced1, []int{63} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4552,7 +4560,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{64} + return fileDescriptor_ws_63019ea76d6cced1, []int{64} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4620,7 +4628,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{65} + return fileDescriptor_ws_63019ea76d6cced1, []int{65} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4674,7 +4682,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{66} + return fileDescriptor_ws_63019ea76d6cced1, []int{66} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4725,7 +4733,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{67} + return fileDescriptor_ws_63019ea76d6cced1, []int{67} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4760,7 +4768,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{68} + return fileDescriptor_ws_63019ea76d6cced1, []int{68} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4825,7 +4833,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{69} + return fileDescriptor_ws_63019ea76d6cced1, []int{69} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -4859,7 +4867,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{70} + return fileDescriptor_ws_63019ea76d6cced1, []int{70} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -4919,7 +4927,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{71} + return fileDescriptor_ws_63019ea76d6cced1, []int{71} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5029,200 +5037,201 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_e8e186fa2bf7c43d) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_63019ea76d6cced1) } -var fileDescriptor_ws_e8e186fa2bf7c43d = []byte{ - // 3059 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x6f, 0x24, 0x57, - 0xf1, 0xbf, 0xee, 0xf1, 0x8c, 0x3d, 0x35, 0xfe, 0xec, 0xdd, 0x9f, 0x33, 0x98, 0xcd, 0x62, 0x1a, - 0x2b, 0x84, 0x00, 0x1b, 0x94, 0x08, 0x09, 0x12, 0x58, 0xb4, 0xb6, 0xf7, 0x2b, 0xac, 0xbd, 0x4e, - 0xcf, 0x2e, 0x41, 0x80, 0x14, 0xb5, 0xa7, 0x9f, 0xc7, 0x1d, 0xf7, 0xf4, 0xeb, 0xe9, 0x0f, 0xef, - 0x2e, 0x42, 0x42, 0x02, 0x09, 0x71, 0xe3, 0x04, 0x07, 0x2e, 0x48, 0x5c, 0x10, 0x28, 0x8a, 0x22, - 0x04, 0x12, 0x07, 0x84, 0x38, 0xf0, 0x0f, 0x70, 0x44, 0x5c, 0x10, 0x67, 0xae, 0x1c, 0x90, 0x90, - 0x40, 0xaf, 0xea, 0x75, 0xf7, 0x7b, 0xdd, 0x33, 0xf6, 0xac, 0x65, 0x65, 0x37, 0x5a, 0x6e, 0x53, - 0xd5, 0xaf, 0xea, 0xd5, 0xab, 0xaa, 0x57, 0x55, 0xef, 0xd5, 0x1b, 0x58, 0x4a, 0xbc, 0xa3, 0xb7, - 0x1f, 0x24, 0x2f, 0x3f, 0x48, 0xae, 0x44, 0x31, 0x4f, 0xb9, 0xb5, 0x92, 0xb0, 0xf8, 0x98, 0xc5, - 0x6f, 0xbb, 0x91, 0xff, 0x76, 0xe4, 0xc6, 0xee, 0x30, 0xb1, 0xff, 0x69, 0x42, 0xfb, 0x66, 0xcc, - 0xb3, 0xe8, 0x76, 0x78, 0xc0, 0xad, 0x2e, 0xcc, 0x0e, 0x10, 0xd8, 0xee, 0x1a, 0xeb, 0xc6, 0x8b, - 0x6d, 0x27, 0x07, 0xad, 0x4b, 0xd0, 0xc6, 0x9f, 0xbb, 0xee, 0x90, 0x75, 0x4d, 0xfc, 0x56, 0x22, - 0x2c, 0x1b, 0xe6, 0x43, 0x9e, 0xfa, 0x07, 0x7e, 0xdf, 0x4d, 0x7d, 0x1e, 0x76, 0x1b, 0x38, 0x40, - 0xc3, 0x89, 0x31, 0x7e, 0x98, 0xc6, 0xdc, 0xcb, 0xfa, 0x38, 0x66, 0x86, 0xc6, 0xa8, 0x38, 0x31, - 0xff, 0x81, 0xdb, 0x67, 0xf7, 0x9d, 0x3b, 0xdd, 0x26, 0xcd, 0x2f, 0x41, 0x6b, 0x1d, 0x3a, 0xfc, - 0x41, 0xc8, 0xe2, 0xfb, 0x09, 0x8b, 0x6f, 0x6f, 0x77, 0x5b, 0xf8, 0x55, 0x45, 0x59, 0x97, 0x01, - 0xfa, 0x31, 0x73, 0x53, 0x76, 0xcf, 0x1f, 0xb2, 0xee, 0xec, 0xba, 0xf1, 0xe2, 0x82, 0xa3, 0x60, - 0x04, 0x87, 0x21, 0x1b, 0xee, 0xb3, 0x78, 0x8b, 0x67, 0x61, 0xda, 0x9d, 0xc3, 0x01, 0x2a, 0xca, - 0x5a, 0x04, 0x93, 0x3d, 0xec, 0xb6, 0x91, 0xb5, 0xc9, 0x1e, 0x5a, 0xab, 0xd0, 0x4a, 0x52, 0x37, - 0xcd, 0x92, 0x2e, 0xac, 0x1b, 0x2f, 0x36, 0x1d, 0x09, 0x59, 0x1b, 0xb0, 0x80, 0x7c, 0x79, 0x2e, - 0x4d, 0x07, 0x49, 0x74, 0x64, 0xa1, 0xb1, 0x7b, 0x8f, 0x22, 0xd6, 0x9d, 0x47, 0x06, 0x25, 0xc2, - 0xfe, 0x8b, 0x09, 0x17, 0x50, 0xef, 0x3b, 0x28, 0xc0, 0x8d, 0x2c, 0x08, 0x4e, 0xb1, 0xc0, 0x2a, - 0xb4, 0x32, 0x9a, 0x8e, 0xd4, 0x2f, 0x21, 0x31, 0x4f, 0xcc, 0x03, 0x76, 0x87, 0x1d, 0xb3, 0x00, - 0x15, 0xdf, 0x74, 0x4a, 0x84, 0xb5, 0x06, 0x73, 0xef, 0x70, 0x3f, 0x44, 0x9d, 0xcc, 0xe0, 0xc7, - 0x02, 0x16, 0xdf, 0x42, 0xbf, 0x7f, 0x14, 0x0a, 0x93, 0x92, 0xba, 0x0b, 0x58, 0xb5, 0x44, 0x4b, - 0xb7, 0xc4, 0x0b, 0xb0, 0xe8, 0x46, 0xd1, 0x8e, 0x1b, 0x0e, 0x58, 0x4c, 0x93, 0xce, 0x22, 0xdf, - 0x0a, 0x56, 0xd8, 0x43, 0xcc, 0xd4, 0xe3, 0x59, 0xdc, 0x67, 0xa8, 0xee, 0xa6, 0xa3, 0x60, 0x04, - 0x1f, 0x1e, 0xb1, 0x58, 0x51, 0x23, 0x69, 0xbe, 0x82, 0x95, 0x56, 0x81, 0xc2, 0x2a, 0xc2, 0x8e, - 0x59, 0xca, 0xae, 0x87, 0x1e, 0x2e, 0xaa, 0x23, 0xed, 0x58, 0xa2, 0xec, 0x1f, 0x18, 0xb0, 0xb8, - 0x97, 0xed, 0x07, 0x7e, 0x1f, 0x59, 0x08, 0xb5, 0x96, 0xca, 0x33, 0x34, 0xe5, 0xa9, 0x2a, 0x30, - 0x27, 0xab, 0xa0, 0xa1, 0xab, 0x60, 0x15, 0x5a, 0x03, 0x16, 0x7a, 0x2c, 0x96, 0x2a, 0x95, 0x90, - 0x14, 0xb5, 0x99, 0x8b, 0x6a, 0xff, 0xc4, 0x84, 0xb9, 0x0f, 0x58, 0x84, 0x75, 0xe8, 0x44, 0x87, - 0x3c, 0x64, 0xbb, 0x99, 0x70, 0x2b, 0x29, 0x8b, 0x8a, 0xb2, 0x2e, 0x42, 0x73, 0xdf, 0x8f, 0xd3, - 0x43, 0xb4, 0xeb, 0x82, 0x43, 0x80, 0xc0, 0xb2, 0xa1, 0xeb, 0x93, 0x31, 0xdb, 0x0e, 0x01, 0x72, - 0x41, 0x73, 0x85, 0xee, 0xf5, 0x3d, 0xd6, 0xae, 0xed, 0xb1, 0xba, 0x6f, 0xc0, 0x38, 0xdf, 0xb0, - 0xff, 0x65, 0x00, 0xdc, 0x88, 0x7d, 0x16, 0x7a, 0xa8, 0x9a, 0xca, 0xe6, 0x36, 0xea, 0x9b, 0x7b, - 0x15, 0x5a, 0x31, 0x1b, 0xba, 0xf1, 0x51, 0xee, 0xfc, 0x04, 0x55, 0x04, 0x6a, 0xd4, 0x04, 0x7a, - 0x1d, 0xe0, 0x00, 0xe7, 0x11, 0x7c, 0x50, 0x55, 0x9d, 0x57, 0x3e, 0x7a, 0xa5, 0x16, 0x06, 0xaf, - 0xe4, 0x56, 0x72, 0x94, 0xe1, 0x62, 0x67, 0xb9, 0x9e, 0x27, 0x1d, 0xb8, 0x49, 0x3b, 0xab, 0x40, - 0x8c, 0xf1, 0xdf, 0xd6, 0x09, 0xfe, 0x3b, 0x5b, 0x38, 0xc5, 0x3f, 0x0c, 0x68, 0x6f, 0x06, 0x6e, - 0xff, 0x68, 0xca, 0xa5, 0xeb, 0x4b, 0x34, 0x6b, 0x4b, 0xbc, 0x09, 0x0b, 0xfb, 0x82, 0x5d, 0xbe, - 0x04, 0xd4, 0x42, 0xe7, 0x95, 0x8f, 0x8f, 0x59, 0xa5, 0xbe, 0x29, 0x1c, 0x9d, 0x4e, 0x5f, 0xee, - 0xcc, 0xe9, 0xcb, 0x6d, 0x9e, 0xb0, 0xdc, 0x56, 0xb1, 0xdc, 0x3f, 0x9b, 0x30, 0x8f, 0x81, 0xce, - 0x61, 0xa3, 0x8c, 0x25, 0xa9, 0xf5, 0x65, 0x98, 0xcb, 0x72, 0x51, 0x8d, 0x69, 0x45, 0x2d, 0x48, - 0xac, 0xd7, 0x64, 0x58, 0x45, 0x7a, 0x13, 0xe9, 0x2f, 0x8d, 0xa1, 0x2f, 0x72, 0x9a, 0x53, 0x0e, - 0x17, 0x29, 0xe8, 0xd0, 0x0d, 0xbd, 0x80, 0x39, 0x2c, 0xc9, 0x82, 0x54, 0x46, 0x4b, 0x0d, 0x47, - 0x9e, 0x36, 0xda, 0x49, 0x06, 0x32, 0x41, 0x49, 0x48, 0x68, 0x87, 0xc6, 0x89, 0x4f, 0xb4, 0xf4, - 0x12, 0x21, 0x36, 0x6a, 0xcc, 0x46, 0x68, 0x21, 0xda, 0x56, 0x39, 0x58, 0xce, 0x29, 0xb5, 0x46, - 0x8e, 0xa0, 0xe1, 0x84, 0x89, 0x09, 0x46, 0x06, 0x94, 0x99, 0x14, 0x4c, 0x35, 0x31, 0xd9, 0x7f, - 0x6d, 0xc0, 0x02, 0x6d, 0x9f, 0x5c, 0xa9, 0x97, 0x85, 0x9f, 0xf3, 0xa1, 0xe6, 0x45, 0x0a, 0x46, - 0x48, 0x21, 0xa0, 0x5d, 0x3d, 0xd0, 0x68, 0x38, 0xe1, 0x8a, 0x02, 0xbe, 0xa1, 0x05, 0x1c, 0x15, - 0x95, 0xcf, 0x72, 0x53, 0x0d, 0x3c, 0x0a, 0x46, 0x84, 0xb2, 0x94, 0x6b, 0xde, 0x51, 0xc0, 0x82, - 0x36, 0xe5, 0xc5, 0xfc, 0xe4, 0x1f, 0x0a, 0x46, 0xe8, 0x37, 0xe5, 0xf9, 0xdc, 0xa4, 0xa4, 0x12, - 0x41, 0x9c, 0xe5, 0xbc, 0x94, 0x4a, 0x0a, 0xb8, 0x66, 0xd5, 0xf6, 0x89, 0x56, 0x05, 0xcd, 0xaa, - 0xfa, 0xe6, 0xea, 0xd4, 0x36, 0xd7, 0x06, 0x2c, 0x10, 0x9f, 0xdc, 0xe9, 0xe7, 0x29, 0xd5, 0x6b, - 0x48, 0xdd, 0x37, 0x16, 0xaa, 0xbe, 0xa1, 0x5b, 0x77, 0x71, 0x82, 0x75, 0x97, 0x0a, 0xeb, 0xfe, - 0xda, 0x04, 0xd8, 0x66, 0x91, 0x1b, 0xa7, 0x43, 0x16, 0xa6, 0x62, 0x79, 0x5e, 0x01, 0x15, 0xc6, - 0xd5, 0x70, 0x6a, 0x9e, 0x30, 0xf5, 0x3c, 0x61, 0xc1, 0x0c, 0x2a, 0x9c, 0xac, 0x89, 0xbf, 0x85, - 0x32, 0x23, 0x37, 0x26, 0x6e, 0xe4, 0xe4, 0x05, 0x2c, 0xf2, 0x00, 0x8f, 0x3d, 0x99, 0x39, 0x9a, - 0x0e, 0x01, 0x62, 0xf3, 0x97, 0xf3, 0x61, 0x41, 0xd3, 0xa2, 0xb8, 0xae, 0x63, 0x4f, 0xad, 0xc1, - 0x5e, 0x82, 0xe5, 0x24, 0xdb, 0x2f, 0x17, 0xb7, 0x9b, 0x0d, 0xa5, 0xbb, 0xd7, 0xf0, 0x42, 0xa9, - 0x54, 0x9c, 0x89, 0x41, 0x94, 0x6a, 0x4a, 0x44, 0xb5, 0x2a, 0xb0, 0xdf, 0x35, 0x61, 0xf9, 0x6e, - 0x3c, 0x70, 0x43, 0xff, 0xdb, 0x58, 0x6e, 0x62, 0x00, 0x3f, 0x4b, 0xca, 0x5d, 0x87, 0x0e, 0x0b, - 0x07, 0x81, 0x9f, 0x1c, 0xee, 0x96, 0x7a, 0x53, 0x51, 0xaa, 0xb2, 0x67, 0x26, 0x25, 0xe5, 0xa6, - 0x96, 0x94, 0x57, 0xa1, 0x35, 0xe4, 0xfb, 0x7e, 0x90, 0xfb, 0xbd, 0x84, 0xd0, 0xe7, 0x59, 0xc0, - 0x30, 0x3b, 0x17, 0x3e, 0x9f, 0x23, 0xca, 0x44, 0x3d, 0x37, 0x36, 0x51, 0xb7, 0xd5, 0x44, 0xad, - 0x2b, 0x1e, 0x6a, 0x8a, 0x27, 0x75, 0x75, 0x0a, 0x75, 0xfd, 0xd1, 0x80, 0xe5, 0x52, 0xdd, 0x54, - 0x83, 0x4e, 0x54, 0x57, 0xd5, 0x03, 0xcd, 0x31, 0x1e, 0x58, 0xf8, 0x4d, 0x43, 0xf5, 0x1b, 0xe1, - 0x69, 0x3c, 0xf1, 0x95, 0x7a, 0xbf, 0x80, 0xc5, 0x6c, 0x01, 0x73, 0x15, 0x65, 0x11, 0xa4, 0x54, - 0xdd, 0x2d, 0xad, 0xea, 0xae, 0xe6, 0xd1, 0xdf, 0x19, 0x70, 0x51, 0x58, 0xb9, 0xb6, 0x8c, 0xbb, - 0xb0, 0xcc, 0x2b, 0x9e, 0x20, 0x13, 0xcd, 0x27, 0xc6, 0x24, 0x8a, 0xaa, 0xd3, 0x38, 0x35, 0x62, - 0xc1, 0xd0, 0xab, 0x4c, 0x22, 0x33, 0xcf, 0x38, 0x86, 0x55, 0x79, 0x9c, 0x1a, 0xb1, 0xfd, 0x7b, - 0x03, 0x96, 0x29, 0xb5, 0x29, 0xfb, 0xfc, 0xdc, 0xc5, 0x7e, 0x0b, 0x2e, 0x56, 0x67, 0xbe, 0xe3, - 0x27, 0x69, 0xd7, 0x5c, 0x6f, 0x4c, 0x2b, 0xfa, 0x58, 0x06, 0xf6, 0x77, 0xa0, 0xbb, 0x97, 0x05, - 0xc1, 0x0e, 0x4b, 0x12, 0x77, 0xc0, 0x36, 0x1f, 0xf5, 0xd8, 0x48, 0xe0, 0x1d, 0x96, 0x44, 0x62, - 0x73, 0xb0, 0x38, 0xde, 0xe2, 0x1e, 0x43, 0xe1, 0x9b, 0x4e, 0x0e, 0x0a, 0xbb, 0xb2, 0x38, 0x16, - 0x11, 0x52, 0x96, 0x70, 0x04, 0x59, 0x57, 0x60, 0x26, 0x10, 0x62, 0x35, 0x50, 0xac, 0xb5, 0x31, - 0x62, 0xed, 0x24, 0x83, 0x6d, 0x37, 0x75, 0x1d, 0x1c, 0x67, 0x0f, 0xe1, 0xb9, 0xf1, 0xb3, 0x8f, - 0x26, 0x3a, 0xb0, 0x28, 0xb2, 0xb0, 0x4a, 0xf1, 0x79, 0x58, 0xf8, 0xaf, 0x8a, 0x12, 0x62, 0x27, - 0xc4, 0x07, 0xe5, 0x58, 0x70, 0x72, 0xd0, 0xbe, 0x08, 0xd6, 0x4d, 0x96, 0xee, 0xb8, 0x0f, 0xaf, - 0x85, 0xde, 0x8e, 0x1f, 0xf6, 0xd8, 0xc8, 0x61, 0x23, 0xfb, 0x3a, 0x5c, 0xa8, 0x61, 0x93, 0x08, - 0x37, 0xba, 0xfb, 0xb0, 0xc7, 0x46, 0x28, 0xc0, 0x82, 0x23, 0x21, 0xc4, 0xe3, 0x28, 0x59, 0xbf, - 0x49, 0xc8, 0x1e, 0xc1, 0x92, 0x30, 0x55, 0x8f, 0x85, 0xde, 0x4e, 0x32, 0x40, 0x16, 0xeb, 0xd0, - 0x21, 0x0d, 0xec, 0x24, 0x83, 0xb2, 0x20, 0x54, 0x50, 0x62, 0x44, 0x3f, 0xf0, 0x85, 0x49, 0x70, - 0x84, 0x5c, 0x8d, 0x82, 0x12, 0xdb, 0x2e, 0x61, 0xf2, 0x7c, 0x24, 0xf6, 0x63, 0xc3, 0x29, 0x60, - 0xfb, 0x6f, 0x4d, 0x98, 0x95, 0x0a, 0xc5, 0xad, 0x26, 0x6a, 0xf0, 0x42, 0x5f, 0x04, 0x51, 0xb6, - 0xec, 0x1f, 0x97, 0x47, 0x4d, 0x82, 0xd4, 0xc3, 0x69, 0x43, 0x3f, 0x9c, 0x56, 0x64, 0x9a, 0xa9, - 0xcb, 0x54, 0x59, 0x57, 0xb3, 0xbe, 0x2e, 0x91, 0x1c, 0x30, 0x5e, 0xee, 0x05, 0x6e, 0x7a, 0xc0, - 0xe3, 0xa1, 0x2c, 0xa9, 0x9b, 0x4e, 0x0d, 0x2f, 0x12, 0x12, 0xe1, 0x8a, 0x8a, 0x82, 0x02, 0x43, - 0x05, 0x2b, 0xf2, 0x37, 0x61, 0xf2, 0xca, 0x82, 0xce, 0x32, 0x3a, 0x92, 0x64, 0x4b, 0x12, 0x9f, - 0x87, 0x98, 0xdb, 0xa8, 0x80, 0x50, 0x51, 0x62, 0xe5, 0xc3, 0x64, 0x70, 0x23, 0xe6, 0x43, 0x79, - 0xa2, 0xc9, 0x41, 0x5c, 0x39, 0x0f, 0xd3, 0x3c, 0x2f, 0x76, 0x88, 0x56, 0x41, 0x09, 0x5a, 0x09, - 0x62, 0xf5, 0x30, 0xef, 0xe4, 0xa0, 0xb5, 0x0c, 0x8d, 0x84, 0x8d, 0x64, 0x49, 0x20, 0x7e, 0x6a, - 0x96, 0x5b, 0xd2, 0x2d, 0x57, 0x89, 0xf1, 0xcb, 0xf8, 0x55, 0x8d, 0xf1, 0x65, 0xe0, 0x5c, 0xd1, - 0x02, 0xe7, 0x35, 0x98, 0xe5, 0x91, 0xf0, 0xf3, 0xa4, 0x6b, 0xe1, 0x1e, 0xfb, 0xe4, 0xe4, 0x3d, - 0x76, 0xe5, 0x2e, 0x8d, 0xbc, 0x1e, 0xa6, 0xf1, 0x23, 0x27, 0xa7, 0xb3, 0xee, 0xc0, 0x12, 0x3f, - 0x38, 0x08, 0xfc, 0x90, 0xed, 0x65, 0xc9, 0x21, 0x96, 0xde, 0x17, 0x30, 0x34, 0xd9, 0xe3, 0x42, - 0x93, 0x3e, 0xd2, 0xa9, 0x92, 0x8a, 0x7c, 0xe2, 0xa6, 0x54, 0x3a, 0xe1, 0x8e, 0xbb, 0xb8, 0xde, - 0x10, 0xf9, 0x44, 0xc5, 0xad, 0xbd, 0x06, 0xf3, 0xaa, 0x28, 0x42, 0x55, 0x47, 0xec, 0x91, 0xf4, - 0x53, 0xf1, 0x53, 0x64, 0x9c, 0x63, 0x37, 0xc8, 0x28, 0x83, 0xcf, 0x39, 0x04, 0xbc, 0x66, 0x7e, - 0xc1, 0xb0, 0x7f, 0x6c, 0xc0, 0x52, 0x45, 0x08, 0x31, 0x3a, 0xf5, 0xd3, 0x80, 0x49, 0x0e, 0x04, - 0x88, 0xea, 0xc8, 0x63, 0x49, 0x5f, 0xba, 0x39, 0xfe, 0x96, 0x79, 0xa6, 0x51, 0x9c, 0x79, 0x6d, - 0x98, 0xf7, 0xef, 0xf6, 0x04, 0xa3, 0x1e, 0xcf, 0x42, 0xaf, 0xb8, 0xb7, 0x52, 0x70, 0xc2, 0xcd, - 0xfc, 0xbb, 0xbd, 0x4d, 0xd7, 0x1b, 0x30, 0xba, 0x5d, 0x6a, 0xa2, 0x4c, 0x3a, 0xd2, 0xf6, 0x60, - 0xee, 0x9e, 0x1f, 0x25, 0x5b, 0x7c, 0x38, 0x14, 0xc6, 0xf2, 0x58, 0x2a, 0xf2, 0xb8, 0x81, 0x3e, - 0x21, 0x21, 0xe1, 0x4e, 0x1e, 0x3b, 0x70, 0xb3, 0x20, 0x15, 0x43, 0xf3, 0xcd, 0xad, 0xa0, 0xf0, - 0x5e, 0x25, 0xe1, 0xe1, 0x36, 0x51, 0x93, 0x9c, 0x0a, 0xc6, 0xfe, 0x93, 0x09, 0xcb, 0x78, 0xfa, - 0xd9, 0x42, 0xd7, 0xf0, 0x90, 0xe8, 0x15, 0x68, 0xe2, 0x56, 0x95, 0x19, 0xe5, 0xe4, 0x13, 0x13, - 0x0d, 0xb5, 0xae, 0x42, 0x8b, 0x47, 0x98, 0x86, 0x28, 0xd9, 0xbd, 0x30, 0x89, 0x48, 0xbf, 0xc2, - 0x72, 0x24, 0x95, 0x75, 0x03, 0x60, 0x58, 0x66, 0x1d, 0x0a, 0xef, 0xd3, 0xf2, 0x50, 0x28, 0x85, - 0x72, 0x8b, 0x50, 0x5d, 0xdc, 0x63, 0x35, 0x1c, 0x1d, 0x69, 0xed, 0xc2, 0x22, 0x8a, 0x7d, 0x37, - 0x3f, 0x3a, 0xa3, 0x0d, 0xa6, 0x9f, 0xb1, 0x42, 0x6d, 0xff, 0xdc, 0x90, 0x6a, 0x14, 0x5f, 0x7b, - 0x8c, 0x74, 0x5f, 0xaa, 0xc4, 0x38, 0x93, 0x4a, 0xd6, 0x60, 0x6e, 0x98, 0x29, 0x27, 0xf9, 0x86, - 0x53, 0xc0, 0xa5, 0x89, 0x1a, 0x53, 0x9b, 0xc8, 0xfe, 0x85, 0x01, 0xdd, 0x37, 0xb8, 0x1f, 0xe2, - 0x87, 0x6b, 0x51, 0x14, 0xc8, 0xcb, 0xd6, 0x33, 0xdb, 0xfc, 0x2b, 0xd0, 0x76, 0x89, 0x4d, 0x98, - 0x4a, 0xb3, 0x4f, 0x71, 0x3a, 0x2f, 0x69, 0x94, 0x83, 0x56, 0x43, 0x3d, 0x68, 0xd9, 0xef, 0x19, - 0xb0, 0x48, 0x4a, 0x79, 0x33, 0xf3, 0xd3, 0x33, 0xcb, 0xb7, 0x09, 0x73, 0xa3, 0xcc, 0x4f, 0xcf, - 0xe0, 0x95, 0x05, 0x5d, 0xdd, 0x9f, 0x1a, 0x63, 0xfc, 0xc9, 0x7e, 0xdf, 0x80, 0x4b, 0x55, 0xb5, - 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, 0x8a, - 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xfb, 0x26, 0x7c, 0xe4, 0x66, 0xb1, 0xf1, 0xee, - 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, 0x65, - 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, 0xe7, - 0xab, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, 0x6c, - 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, 0x3a, - 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x35, 0x60, - 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, 0xc3, - 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, 0xa1, - 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x53, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, 0xf4, - 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, 0xa2, - 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, 0xd0, - 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xca, 0x80, 0x45, 0x1a, - 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8d, 0x95, 0x84, 0x7b, 0xad, 0x2a, 0x5c, - 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, 0xa5, - 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, 0x9c, - 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, 0xac, - 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, 0x78, - 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, 0x98, - 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, 0xbf, - 0xc8, 0xfe, 0x16, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, 0xcb, - 0x7c, 0x6c, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x9e, 0x01, 0xcf, 0xd7, 0xd8, 0x5f, - 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, 0xb1, - 0x42, 0x68, 0x05, 0xfb, 0x07, 0x20, 0xc4, 0x2f, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, 0xf6, - 0xf3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, 0xae, - 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xb1, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, 0x7a, - 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, 0xc1, - 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, 0x94, - 0x9c, 0x0b, 0xf7, 0xcf, 0xc2, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, 0xbd, - 0x6e, 0x7f, 0x0e, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, 0x68, - 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, 0x95, - 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, 0x4f, - 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, 0xa7, - 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, 0x07, - 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, 0x0f, - 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, 0x62, - 0xec, 0xaf, 0x81, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, 0xe2, - 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, 0x57, - 0x30, 0xf6, 0xcf, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x04, 0x2d, - 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, 0xff, - 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0xa7, 0x4e, - 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, 0x05, - 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, 0xd3, - 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, 0x4c, - 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, 0x14, - 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, 0x1b, - 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, 0x46, - 0xea, 0x8d, 0x37, 0xd2, 0xa7, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, 0x1b, - 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, 0xa5, - 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, 0x36, - 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0x7d, 0x13, 0x16, 0x51, 0x65, 0xd4, 0x4c, 0x0c, 0x0f, - 0x38, 0xf6, 0x03, 0x50, 0x5d, 0xfa, 0xbb, 0x2e, 0x1d, 0x69, 0x7d, 0x06, 0x56, 0x08, 0xc1, 0x94, - 0x66, 0x88, 0x89, 0xcd, 0x90, 0xfa, 0x07, 0x6c, 0xff, 0x64, 0x49, 0xca, 0x87, 0xdb, 0x6e, 0xea, - 0xe6, 0xc5, 0x57, 0x89, 0x51, 0x9b, 0x73, 0x33, 0xb5, 0x97, 0xa3, 0x31, 0xe7, 0xc3, 0xa2, 0xeb, - 0x26, 0x21, 0x41, 0x91, 0xfa, 0x43, 0xc6, 0xb3, 0x54, 0x86, 0x89, 0x1c, 0xa4, 0xb7, 0x17, 0x9e, - 0xef, 0x62, 0x4b, 0x4b, 0x3e, 0x4c, 0x28, 0x10, 0x18, 0xd9, 0xca, 0x16, 0x9d, 0x7c, 0xd9, 0x59, - 0x62, 0x4e, 0x6f, 0xa7, 0xd9, 0x7f, 0x37, 0xe0, 0xc2, 0x9e, 0x1b, 0xa7, 0x7e, 0xdf, 0x8f, 0xdc, - 0x30, 0xdd, 0x61, 0xa9, 0x8b, 0x6b, 0xd0, 0x1e, 0x77, 0x19, 0x8f, 0xf7, 0xb8, 0x6b, 0x0f, 0x96, - 0x06, 0xfa, 0xe9, 0xe2, 0x31, 0x0f, 0x06, 0x55, 0x72, 0xed, 0xa5, 0x5a, 0xe3, 0xb1, 0x5f, 0xaa, - 0xd9, 0x3f, 0x34, 0x61, 0xa9, 0x12, 0x3a, 0x4f, 0xcc, 0x3b, 0xd7, 0x00, 0xfc, 0xc2, 0x8d, 0x4e, - 0xb8, 0x7c, 0xd7, 0x7d, 0xcd, 0x51, 0x88, 0xc6, 0xf5, 0xe9, 0x1a, 0x67, 0xef, 0xd3, 0xdd, 0x82, - 0x4e, 0x54, 0x1a, 0xe9, 0x84, 0xb3, 0xcf, 0x18, 0x53, 0x3a, 0x2a, 0xa9, 0xfd, 0x4d, 0x58, 0xa9, - 0x45, 0x28, 0x6c, 0xc9, 0xf1, 0x23, 0x16, 0x16, 0x2d, 0x39, 0x01, 0x28, 0xce, 0x6a, 0x56, 0x9d, - 0x35, 0xf0, 0x8f, 0xd5, 0xa7, 0xb0, 0x12, 0xb4, 0x7f, 0x64, 0xc2, 0xea, 0xf8, 0xec, 0xf2, 0xac, - 0xaa, 0x7b, 0x1f, 0xba, 0x93, 0x22, 0xf9, 0xb9, 0x69, 0xbd, 0xf4, 0xee, 0x22, 0x0f, 0x3f, 0xab, - 0xea, 0xbe, 0x90, 0x7b, 0xb7, 0x92, 0xea, 0xec, 0xdf, 0x14, 0xfa, 0x29, 0x2a, 0x8d, 0x67, 0x54, - 0x3f, 0xd6, 0x4b, 0xb0, 0x4c, 0xcb, 0x54, 0x1e, 0x76, 0x50, 0xe1, 0x5a, 0xc3, 0x97, 0x91, 0x42, - 0x49, 0xfb, 0xe7, 0xe6, 0xb3, 0x7f, 0x30, 0x72, 0x9b, 0x14, 0xf5, 0xdb, 0x87, 0xca, 0x26, 0xa5, - 0xa7, 0x29, 0x45, 0x8d, 0xe2, 0x69, 0x45, 0x5d, 0xf9, 0x3f, 0x4f, 0x3b, 0xdd, 0xd3, 0x0a, 0x5d, - 0x2a, 0x05, 0x9e, 0xfd, 0x5d, 0x58, 0xd8, 0x66, 0xc1, 0x4e, 0x32, 0xc8, 0x9f, 0x94, 0x9d, 0xeb, - 0x41, 0xb1, 0xfa, 0x10, 0x6d, 0xa6, 0xf6, 0x10, 0xcd, 0xde, 0x84, 0x45, 0x55, 0x80, 0xb3, 0xbc, - 0xa8, 0xdb, 0xbc, 0xf4, 0x8d, 0xb5, 0x2b, 0x2f, 0xd3, 0x7f, 0xbf, 0x5e, 0xaf, 0x29, 0x71, 0xbf, - 0x85, 0xff, 0x05, 0x7b, 0xf5, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x11, 0x1c, 0x36, 0x1e, - 0x36, 0x00, 0x00, +var fileDescriptor_ws_63019ea76d6cced1 = []byte{ + // 3078 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x8b, 0x24, 0x59, + 0xf1, 0xbf, 0xcc, 0xea, 0xaa, 0xee, 0x8a, 0xea, 0xcf, 0x9c, 0xf9, 0xf5, 0x96, 0xed, 0xec, 0xd8, + 0xa6, 0xcd, 0xba, 0xae, 0x3a, 0x2b, 0xbb, 0x08, 0xba, 0xab, 0x23, 0xd3, 0xdd, 0xf3, 0xb5, 0x4e, + 0xf7, 0xf4, 0x66, 0xcd, 0xb8, 0xa2, 0xc2, 0x92, 0x5d, 0xf9, 0xba, 0x3a, 0xb7, 0xb3, 0xf2, 0x65, + 0xe5, 0x47, 0xcf, 0x8c, 0x08, 0x82, 0x82, 0x78, 0xf3, 0xa4, 0x07, 0x2f, 0x82, 0x17, 0x51, 0x96, + 0x45, 0x44, 0xc1, 0x83, 0x88, 0x07, 0xff, 0x01, 0xc1, 0x8b, 0x78, 0x11, 0xcf, 0x5e, 0x3d, 0x08, + 0x82, 0xf2, 0x22, 0x5e, 0x66, 0xbe, 0x97, 0x59, 0xd5, 0x5d, 0xd3, 0x34, 0x3b, 0xb3, 0x8c, 0xb7, + 0x8a, 0xc8, 0x17, 0xf1, 0xe2, 0x45, 0xc4, 0x8b, 0x88, 0xf7, 0xe2, 0x15, 0x2c, 0x25, 0xde, 0xd1, + 0xdb, 0x0f, 0x92, 0x97, 0x1f, 0x24, 0x57, 0xa2, 0x98, 0xa7, 0xdc, 0x5a, 0x49, 0x58, 0x7c, 0xcc, + 0xe2, 0xb7, 0xdd, 0xc8, 0x7f, 0x3b, 0x72, 0x63, 0x77, 0x98, 0xd8, 0xff, 0x34, 0xa1, 0x7d, 0x33, + 0xe6, 0x59, 0x74, 0x3b, 0x3c, 0xe0, 0x56, 0x17, 0x66, 0x07, 0x08, 0x6c, 0x77, 0x8d, 0x75, 0xe3, + 0xc5, 0xb6, 0x93, 0x83, 0xd6, 0x25, 0x68, 0xe3, 0xcf, 0x5d, 0x77, 0xc8, 0xba, 0x26, 0x7e, 0x2b, + 0x11, 0x96, 0x0d, 0xf3, 0x21, 0x4f, 0xfd, 0x03, 0xbf, 0xef, 0xa6, 0x3e, 0x0f, 0xbb, 0x0d, 0x1c, + 0xa0, 0xe1, 0xc4, 0x18, 0x3f, 0x4c, 0x63, 0xee, 0x65, 0x7d, 0x1c, 0x33, 0x43, 0x63, 0x54, 0x9c, + 0x98, 0xff, 0xc0, 0xed, 0xb3, 0xfb, 0xce, 0x9d, 0x6e, 0x93, 0xe6, 0x97, 0xa0, 0xb5, 0x0e, 0x1d, + 0xfe, 0x20, 0x64, 0xf1, 0xfd, 0x84, 0xc5, 0xb7, 0xb7, 0xbb, 0x2d, 0xfc, 0xaa, 0xa2, 0xac, 0xcb, + 0x00, 0xfd, 0x98, 0xb9, 0x29, 0xbb, 0xe7, 0x0f, 0x59, 0x77, 0x76, 0xdd, 0x78, 0x71, 0xc1, 0x51, + 0x30, 0x82, 0xc3, 0x90, 0x0d, 0xf7, 0x59, 0xbc, 0xc5, 0xb3, 0x30, 0xed, 0xce, 0xe1, 0x00, 0x15, + 0x65, 0x2d, 0x82, 0xc9, 0x1e, 0x76, 0xdb, 0xc8, 0xda, 0x64, 0x0f, 0xad, 0x55, 0x68, 0x25, 0xa9, + 0x9b, 0x66, 0x49, 0x17, 0xd6, 0x8d, 0x17, 0x9b, 0x8e, 0x84, 0xac, 0x0d, 0x58, 0x40, 0xbe, 0x3c, + 0x97, 0xa6, 0x83, 0x24, 0x3a, 0xb2, 0xd0, 0xd8, 0xbd, 0x47, 0x11, 0xeb, 0xce, 0x23, 0x83, 0x12, + 0x61, 0xff, 0xc5, 0x84, 0x0b, 0xa8, 0xf7, 0x1d, 0x14, 0xe0, 0x46, 0x16, 0x04, 0xa7, 0x58, 0x60, + 0x15, 0x5a, 0x19, 0x4d, 0x47, 0xea, 0x97, 0x90, 0x98, 0x27, 0xe6, 0x01, 0xbb, 0xc3, 0x8e, 0x59, + 0x80, 0x8a, 0x6f, 0x3a, 0x25, 0xc2, 0x5a, 0x83, 0xb9, 0x77, 0xb8, 0x1f, 0xa2, 0x4e, 0x66, 0xf0, + 0x63, 0x01, 0x8b, 0x6f, 0xa1, 0xdf, 0x3f, 0x0a, 0x85, 0x49, 0x49, 0xdd, 0x05, 0xac, 0x5a, 0xa2, + 0xa5, 0x5b, 0xe2, 0x05, 0x58, 0x74, 0xa3, 0x68, 0xc7, 0x0d, 0x07, 0x2c, 0xa6, 0x49, 0x67, 0x91, + 0x6f, 0x05, 0x2b, 0xec, 0x21, 0x66, 0xea, 0xf1, 0x2c, 0xee, 0x33, 0x54, 0x77, 0xd3, 0x51, 0x30, + 0x82, 0x0f, 0x8f, 0x58, 0xac, 0xa8, 0x91, 0x34, 0x5f, 0xc1, 0x4a, 0xab, 0x40, 0x61, 0x15, 0x61, + 0xc7, 0x2c, 0x65, 0xd7, 0x43, 0x0f, 0x17, 0xd5, 0x91, 0x76, 0x2c, 0x51, 0xf6, 0xf7, 0x0c, 0x58, + 0xdc, 0xcb, 0xf6, 0x03, 0xbf, 0x8f, 0x2c, 0x84, 0x5a, 0x4b, 0xe5, 0x19, 0x9a, 0xf2, 0x54, 0x15, + 0x98, 0x93, 0x55, 0xd0, 0xd0, 0x55, 0xb0, 0x0a, 0xad, 0x01, 0x0b, 0x3d, 0x16, 0x4b, 0x95, 0x4a, + 0x48, 0x8a, 0xda, 0xcc, 0x45, 0xb5, 0x7f, 0x64, 0xc2, 0xdc, 0xfb, 0x2c, 0xc2, 0x3a, 0x74, 0xa2, + 0x43, 0x1e, 0xb2, 0xdd, 0x4c, 0xb8, 0x95, 0x94, 0x45, 0x45, 0x59, 0x17, 0xa1, 0xb9, 0xef, 0xc7, + 0xe9, 0x21, 0xda, 0x75, 0xc1, 0x21, 0x40, 0x60, 0xd9, 0xd0, 0xf5, 0xc9, 0x98, 0x6d, 0x87, 0x00, + 0xb9, 0xa0, 0xb9, 0x42, 0xf7, 0xfa, 0x1e, 0x6b, 0xd7, 0xf6, 0x58, 0xdd, 0x37, 0x60, 0x9c, 0x6f, + 0xd8, 0xff, 0x32, 0x00, 0x6e, 0xc4, 0x3e, 0x0b, 0x3d, 0x54, 0x4d, 0x65, 0x73, 0x1b, 0xf5, 0xcd, + 0xbd, 0x0a, 0xad, 0x98, 0x0d, 0xdd, 0xf8, 0x28, 0x77, 0x7e, 0x82, 0x2a, 0x02, 0x35, 0x6a, 0x02, + 0xbd, 0x0e, 0x70, 0x80, 0xf3, 0x08, 0x3e, 0xa8, 0xaa, 0xce, 0x2b, 0x1f, 0xbe, 0x52, 0x0b, 0x83, + 0x57, 0x72, 0x2b, 0x39, 0xca, 0x70, 0xb1, 0xb3, 0x5c, 0xcf, 0x93, 0x0e, 0xdc, 0xa4, 0x9d, 0x55, + 0x20, 0xc6, 0xf8, 0x6f, 0xeb, 0x04, 0xff, 0x9d, 0x2d, 0x9c, 0xe2, 0x1f, 0x06, 0xb4, 0x37, 0x03, + 0xb7, 0x7f, 0x34, 0xe5, 0xd2, 0xf5, 0x25, 0x9a, 0xb5, 0x25, 0xde, 0x84, 0x85, 0x7d, 0xc1, 0x2e, + 0x5f, 0x02, 0x6a, 0xa1, 0xf3, 0xca, 0x47, 0xc7, 0xac, 0x52, 0xdf, 0x14, 0x8e, 0x4e, 0xa7, 0x2f, + 0x77, 0xe6, 0xf4, 0xe5, 0x36, 0x4f, 0x58, 0x6e, 0xab, 0x58, 0xee, 0x9f, 0x4c, 0x98, 0xc7, 0x40, + 0xe7, 0xb0, 0x51, 0xc6, 0x92, 0xd4, 0xfa, 0x22, 0xcc, 0x65, 0xb9, 0xa8, 0xc6, 0xb4, 0xa2, 0x16, + 0x24, 0xd6, 0x6b, 0x32, 0xac, 0x22, 0xbd, 0x89, 0xf4, 0x97, 0xc6, 0xd0, 0x17, 0x39, 0xcd, 0x29, + 0x87, 0x8b, 0x14, 0x74, 0xe8, 0x86, 0x5e, 0xc0, 0x1c, 0x96, 0x64, 0x41, 0x2a, 0xa3, 0xa5, 0x86, + 0x23, 0x4f, 0x1b, 0xed, 0x24, 0x03, 0x99, 0xa0, 0x24, 0x24, 0xb4, 0x43, 0xe3, 0xc4, 0x27, 0x5a, + 0x7a, 0x89, 0x10, 0x1b, 0x35, 0x66, 0x23, 0xb4, 0x10, 0x6d, 0xab, 0x1c, 0x2c, 0xe7, 0x94, 0x5a, + 0x23, 0x47, 0xd0, 0x70, 0xc2, 0xc4, 0x04, 0x23, 0x03, 0xca, 0x4c, 0x0a, 0xa6, 0x9a, 0x98, 0xec, + 0xbf, 0x36, 0x60, 0x81, 0xb6, 0x4f, 0xae, 0xd4, 0xcb, 0xc2, 0xcf, 0xf9, 0x50, 0xf3, 0x22, 0x05, + 0x23, 0xa4, 0x10, 0xd0, 0xae, 0x1e, 0x68, 0x34, 0x9c, 0x70, 0x45, 0x01, 0xdf, 0xd0, 0x02, 0x8e, + 0x8a, 0xca, 0x67, 0xb9, 0xa9, 0x06, 0x1e, 0x05, 0x23, 0x42, 0x59, 0xca, 0x35, 0xef, 0x28, 0x60, + 0x41, 0x9b, 0xf2, 0x62, 0x7e, 0xf2, 0x0f, 0x05, 0x23, 0xf4, 0x9b, 0xf2, 0x7c, 0x6e, 0x52, 0x52, + 0x89, 0x20, 0xce, 0x72, 0x5e, 0x4a, 0x25, 0x05, 0x5c, 0xb3, 0x6a, 0xfb, 0x44, 0xab, 0x82, 0x66, + 0x55, 0x7d, 0x73, 0x75, 0x6a, 0x9b, 0x6b, 0x03, 0x16, 0x88, 0x4f, 0xee, 0xf4, 0xf3, 0x94, 0xea, + 0x35, 0xa4, 0xee, 0x1b, 0x0b, 0x55, 0xdf, 0xd0, 0xad, 0xbb, 0x38, 0xc1, 0xba, 0x4b, 0x85, 0x75, + 0x7f, 0x65, 0x02, 0x6c, 0xb3, 0xc8, 0x8d, 0xd3, 0x21, 0x0b, 0x53, 0xb1, 0x3c, 0xaf, 0x80, 0x0a, + 0xe3, 0x6a, 0x38, 0x35, 0x4f, 0x98, 0x7a, 0x9e, 0xb0, 0x60, 0x06, 0x15, 0x4e, 0xd6, 0xc4, 0xdf, + 0x42, 0x99, 0x91, 0x1b, 0x13, 0x37, 0x72, 0xf2, 0x02, 0x16, 0x79, 0x80, 0xc7, 0x9e, 0xcc, 0x1c, + 0x4d, 0x87, 0x00, 0xb1, 0xf9, 0xcb, 0xf9, 0xb0, 0xa0, 0x69, 0x51, 0x5c, 0xd7, 0xb1, 0xa7, 0xd6, + 0x60, 0x2f, 0xc1, 0x72, 0x92, 0xed, 0x97, 0x8b, 0xdb, 0xcd, 0x86, 0xd2, 0xdd, 0x6b, 0x78, 0xa1, + 0x54, 0x2a, 0xce, 0xc4, 0x20, 0x4a, 0x35, 0x25, 0xa2, 0x5a, 0x15, 0xd8, 0xef, 0x9a, 0xb0, 0x7c, + 0x37, 0x1e, 0xb8, 0xa1, 0xff, 0x4d, 0x2c, 0x37, 0x31, 0x80, 0x9f, 0x25, 0xe5, 0xae, 0x43, 0x87, + 0x85, 0x83, 0xc0, 0x4f, 0x0e, 0x77, 0x4b, 0xbd, 0xa9, 0x28, 0x55, 0xd9, 0x33, 0x93, 0x92, 0x72, + 0x53, 0x4b, 0xca, 0xab, 0xd0, 0x1a, 0xf2, 0x7d, 0x3f, 0xc8, 0xfd, 0x5e, 0x42, 0xe8, 0xf3, 0x2c, + 0x60, 0x98, 0x9d, 0x0b, 0x9f, 0xcf, 0x11, 0x65, 0xa2, 0x9e, 0x1b, 0x9b, 0xa8, 0xdb, 0x6a, 0xa2, + 0xd6, 0x15, 0x0f, 0x35, 0xc5, 0x93, 0xba, 0x3a, 0x85, 0xba, 0xfe, 0x60, 0xc0, 0x72, 0xa9, 0x6e, + 0xaa, 0x41, 0x27, 0xaa, 0xab, 0xea, 0x81, 0xe6, 0x18, 0x0f, 0x2c, 0xfc, 0xa6, 0xa1, 0xfa, 0x8d, + 0xf0, 0x34, 0x9e, 0xf8, 0x4a, 0xbd, 0x5f, 0xc0, 0x62, 0xb6, 0x80, 0xb9, 0x8a, 0xb2, 0x08, 0x52, + 0xaa, 0xee, 0x96, 0x56, 0x75, 0x57, 0xf3, 0xe8, 0x6f, 0x0d, 0xb8, 0x28, 0xac, 0x5c, 0x5b, 0xc6, + 0x5d, 0x58, 0xe6, 0x15, 0x4f, 0x90, 0x89, 0xe6, 0x63, 0x63, 0x12, 0x45, 0xd5, 0x69, 0x9c, 0x1a, + 0xb1, 0x60, 0xe8, 0x55, 0x26, 0x91, 0x99, 0x67, 0x1c, 0xc3, 0xaa, 0x3c, 0x4e, 0x8d, 0xd8, 0xfe, + 0x9d, 0x01, 0xcb, 0x94, 0xda, 0x94, 0x7d, 0x7e, 0xee, 0x62, 0xbf, 0x05, 0x17, 0xab, 0x33, 0xdf, + 0xf1, 0x93, 0xb4, 0x6b, 0xae, 0x37, 0xa6, 0x15, 0x7d, 0x2c, 0x03, 0xfb, 0x5b, 0xd0, 0xdd, 0xcb, + 0x82, 0x60, 0x87, 0x25, 0x89, 0x3b, 0x60, 0x9b, 0x8f, 0x7a, 0x6c, 0x24, 0xf0, 0x0e, 0x4b, 0x22, + 0xb1, 0x39, 0x58, 0x1c, 0x6f, 0x71, 0x8f, 0xa1, 0xf0, 0x4d, 0x27, 0x07, 0x85, 0x5d, 0x59, 0x1c, + 0x8b, 0x08, 0x29, 0x4b, 0x38, 0x82, 0xac, 0x2b, 0x30, 0x13, 0x08, 0xb1, 0x1a, 0x28, 0xd6, 0xda, + 0x18, 0xb1, 0x76, 0x92, 0xc1, 0xb6, 0x9b, 0xba, 0x0e, 0x8e, 0xb3, 0x87, 0xf0, 0xdc, 0xf8, 0xd9, + 0x47, 0x13, 0x1d, 0x58, 0x14, 0x59, 0x58, 0xa5, 0xf8, 0x3c, 0x2c, 0xfc, 0x57, 0x45, 0x09, 0xb1, + 0x13, 0xe2, 0x83, 0x72, 0x2c, 0x38, 0x39, 0x68, 0x5f, 0x04, 0xeb, 0x26, 0x4b, 0x77, 0xdc, 0x87, + 0xd7, 0x42, 0x6f, 0xc7, 0x0f, 0x7b, 0x6c, 0xe4, 0xb0, 0x91, 0x7d, 0x1d, 0x2e, 0xd4, 0xb0, 0x49, + 0x84, 0x1b, 0xdd, 0x7d, 0xd8, 0x63, 0x23, 0x14, 0x60, 0xc1, 0x91, 0x10, 0xe2, 0x71, 0x94, 0xac, + 0xdf, 0x24, 0x64, 0x8f, 0x60, 0x49, 0x98, 0xaa, 0xc7, 0x42, 0x6f, 0x27, 0x19, 0x20, 0x8b, 0x75, + 0xe8, 0x90, 0x06, 0x76, 0x92, 0x41, 0x59, 0x10, 0x2a, 0x28, 0x31, 0xa2, 0x1f, 0xf8, 0xc2, 0x24, + 0x38, 0x42, 0xae, 0x46, 0x41, 0x89, 0x6d, 0x97, 0x30, 0x79, 0x3e, 0x12, 0xfb, 0xb1, 0xe1, 0x14, + 0xb0, 0xfd, 0xb7, 0x26, 0xcc, 0x4a, 0x85, 0xe2, 0x56, 0x13, 0x35, 0x78, 0xa1, 0x2f, 0x82, 0x28, + 0x5b, 0xf6, 0x8f, 0xcb, 0xa3, 0x26, 0x41, 0xea, 0xe1, 0xb4, 0xa1, 0x1f, 0x4e, 0x2b, 0x32, 0xcd, + 0xd4, 0x65, 0xaa, 0xac, 0xab, 0x59, 0x5f, 0x97, 0x48, 0x0e, 0x18, 0x2f, 0xf7, 0x02, 0x37, 0x3d, + 0xe0, 0xf1, 0x50, 0x96, 0xd4, 0x4d, 0xa7, 0x86, 0x17, 0x09, 0x89, 0x70, 0x45, 0x45, 0x41, 0x81, + 0xa1, 0x82, 0x15, 0xf9, 0x9b, 0x30, 0x79, 0x65, 0x41, 0x67, 0x19, 0x1d, 0x49, 0xb2, 0x25, 0x89, + 0xcf, 0x43, 0xcc, 0x6d, 0x54, 0x40, 0xa8, 0x28, 0xb1, 0xf2, 0x61, 0x32, 0xb8, 0x11, 0xf3, 0xa1, + 0x3c, 0xd1, 0xe4, 0x20, 0xae, 0x9c, 0x87, 0x69, 0x9e, 0x17, 0x3b, 0x44, 0xab, 0xa0, 0x04, 0xad, + 0x04, 0xb1, 0x7a, 0x98, 0x77, 0x72, 0xd0, 0x5a, 0x86, 0x46, 0xc2, 0x46, 0xb2, 0x24, 0x10, 0x3f, + 0x35, 0xcb, 0x2d, 0xe9, 0x96, 0xab, 0xc4, 0xf8, 0x65, 0xfc, 0xaa, 0xc6, 0xf8, 0x32, 0x70, 0xae, + 0x68, 0x81, 0xf3, 0x1a, 0xcc, 0xf2, 0x48, 0xf8, 0x79, 0xd2, 0xb5, 0x70, 0x8f, 0x7d, 0x7c, 0xf2, + 0x1e, 0xbb, 0x72, 0x97, 0x46, 0x5e, 0x0f, 0xd3, 0xf8, 0x91, 0x93, 0xd3, 0x59, 0x77, 0x60, 0x89, + 0x1f, 0x1c, 0x04, 0x7e, 0xc8, 0xf6, 0xb2, 0xe4, 0x10, 0x4b, 0xef, 0x0b, 0x18, 0x9a, 0xec, 0x71, + 0xa1, 0x49, 0x1f, 0xe9, 0x54, 0x49, 0x45, 0x3e, 0x71, 0x53, 0x2a, 0x9d, 0x70, 0xc7, 0x5d, 0x5c, + 0x6f, 0x88, 0x7c, 0xa2, 0xe2, 0xd6, 0x5e, 0x83, 0x79, 0x55, 0x14, 0xa1, 0xaa, 0x23, 0xf6, 0x48, + 0xfa, 0xa9, 0xf8, 0x29, 0x32, 0xce, 0xb1, 0x1b, 0x64, 0x94, 0xc1, 0xe7, 0x1c, 0x02, 0x5e, 0x33, + 0x3f, 0x67, 0xd8, 0x3f, 0x34, 0x60, 0xa9, 0x22, 0x84, 0x18, 0x9d, 0xfa, 0x69, 0xc0, 0x24, 0x07, + 0x02, 0x44, 0x75, 0xe4, 0xb1, 0xa4, 0x2f, 0xdd, 0x1c, 0x7f, 0xcb, 0x3c, 0xd3, 0x28, 0xce, 0xbc, + 0x36, 0xcc, 0xfb, 0x77, 0x7b, 0x82, 0x51, 0x8f, 0x67, 0xa1, 0x57, 0xdc, 0x5b, 0x29, 0x38, 0xe1, + 0x66, 0xfe, 0xdd, 0xde, 0xa6, 0xeb, 0x0d, 0x18, 0xdd, 0x2e, 0x35, 0x51, 0x26, 0x1d, 0x69, 0x7b, + 0x30, 0x77, 0xcf, 0x8f, 0x92, 0x2d, 0x3e, 0x1c, 0x0a, 0x63, 0x79, 0x2c, 0x15, 0x79, 0xdc, 0x40, + 0x9f, 0x90, 0x90, 0x70, 0x27, 0x8f, 0x1d, 0xb8, 0x59, 0x90, 0x8a, 0xa1, 0xf9, 0xe6, 0x56, 0x50, + 0x78, 0xaf, 0x92, 0xf0, 0x70, 0x9b, 0xa8, 0x49, 0x4e, 0x05, 0x63, 0xff, 0xd1, 0x84, 0x65, 0x3c, + 0xfd, 0x6c, 0xa1, 0x6b, 0x78, 0x48, 0xf4, 0x0a, 0x34, 0x71, 0xab, 0xca, 0x8c, 0x72, 0xf2, 0x89, + 0x89, 0x86, 0x5a, 0x57, 0xa1, 0xc5, 0x23, 0x4c, 0x43, 0x94, 0xec, 0x5e, 0x98, 0x44, 0xa4, 0x5f, + 0x61, 0x39, 0x92, 0xca, 0xba, 0x01, 0x30, 0x2c, 0xb3, 0x0e, 0x85, 0xf7, 0x69, 0x79, 0x28, 0x94, + 0x42, 0xb9, 0x45, 0xa8, 0x2e, 0xee, 0xb1, 0x1a, 0x8e, 0x8e, 0xb4, 0x76, 0x61, 0x11, 0xc5, 0xbe, + 0x9b, 0x1f, 0x9d, 0xd1, 0x06, 0xd3, 0xcf, 0x58, 0xa1, 0xb6, 0x7f, 0x6a, 0x48, 0x35, 0x8a, 0xaf, + 0x3d, 0x46, 0xba, 0x2f, 0x55, 0x62, 0x9c, 0x49, 0x25, 0x6b, 0x30, 0x37, 0xcc, 0x94, 0x93, 0x7c, + 0xc3, 0x29, 0xe0, 0xd2, 0x44, 0x8d, 0xa9, 0x4d, 0x64, 0xff, 0xcc, 0x80, 0xee, 0x1b, 0xdc, 0x0f, + 0xf1, 0xc3, 0xb5, 0x28, 0x0a, 0xe4, 0x65, 0xeb, 0x99, 0x6d, 0xfe, 0x25, 0x68, 0xbb, 0xc4, 0x26, + 0x4c, 0xa5, 0xd9, 0xa7, 0x38, 0x9d, 0x97, 0x34, 0xca, 0x41, 0xab, 0xa1, 0x1e, 0xb4, 0xec, 0xf7, + 0x0c, 0x58, 0x24, 0xa5, 0xbc, 0x99, 0xf9, 0xe9, 0x99, 0xe5, 0xdb, 0x84, 0xb9, 0x51, 0xe6, 0xa7, + 0x67, 0xf0, 0xca, 0x82, 0xae, 0xee, 0x4f, 0x8d, 0x31, 0xfe, 0x64, 0xff, 0xd2, 0x80, 0x4b, 0x55, + 0xb5, 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, + 0x8a, 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xbb, 0x26, 0x7c, 0xe8, 0x66, 0xb1, 0xf1, + 0xee, 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, + 0x65, 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, + 0xe7, 0xcb, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, + 0x6c, 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, + 0x3a, 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x31, + 0x60, 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, + 0xc3, 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, + 0xa1, 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x63, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, + 0xf4, 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, + 0xa2, 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, + 0xd0, 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xc2, 0x80, 0x45, + 0x1a, 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8c, 0x95, 0x84, 0x7b, 0xad, 0x2a, + 0x5c, 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, + 0xa5, 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, + 0x9c, 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, + 0xac, 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, + 0x78, 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, + 0x98, 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, + 0xbf, 0xc8, 0xfe, 0x06, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, + 0xcb, 0x7c, 0x64, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x8e, 0x01, 0xcf, 0xd7, 0xd8, + 0x5f, 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, + 0xb1, 0x42, 0x68, 0x05, 0xfb, 0xfb, 0x20, 0xc4, 0xcf, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, + 0xf6, 0xb3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, + 0xae, 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xbe, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, + 0x6a, 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, + 0xc1, 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, + 0x94, 0x9c, 0x0b, 0xf7, 0x4f, 0xc3, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, + 0xbd, 0x6e, 0x7f, 0x06, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, + 0x68, 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, + 0x95, 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, + 0x4f, 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, + 0xa7, 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, + 0x07, 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, + 0x0f, 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, + 0x62, 0xec, 0xaf, 0x80, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, + 0xe2, 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, + 0x57, 0x30, 0xf6, 0x4f, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x00, + 0x2d, 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, + 0xff, 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0x27, + 0x4e, 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, + 0x05, 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, + 0xd3, 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, + 0x4c, 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, + 0x14, 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, + 0x1b, 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, + 0x46, 0xea, 0x8d, 0x37, 0xd2, 0x27, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, + 0x1b, 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, + 0xa5, 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, + 0x36, 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0xcf, 0x26, 0x2c, 0xa2, 0xca, 0xa8, 0x99, 0x18, + 0x1e, 0x70, 0xec, 0x07, 0xa0, 0xba, 0xf4, 0x77, 0x5d, 0x3a, 0xd2, 0xfa, 0x14, 0xac, 0x10, 0x82, + 0x29, 0xcd, 0x10, 0x13, 0x9b, 0x21, 0xf5, 0x0f, 0xd8, 0xfe, 0xc9, 0x92, 0x94, 0x0f, 0xb7, 0xdd, + 0xd4, 0xcd, 0x8b, 0xaf, 0x12, 0xa3, 0x36, 0xe7, 0x66, 0x6a, 0x2f, 0x47, 0x63, 0xce, 0x87, 0x45, + 0xd7, 0x4d, 0x42, 0xf4, 0x22, 0xd7, 0x4f, 0xfd, 0xbc, 0xa5, 0x44, 0xb1, 0x42, 0xc3, 0x09, 0xae, + 0xa9, 0x3f, 0x64, 0x3c, 0x4b, 0xe5, 0x33, 0xcf, 0x1c, 0xa4, 0xf7, 0x19, 0x9e, 0xef, 0x62, 0xdb, + 0x8b, 0xda, 0x6a, 0x25, 0x02, 0xa3, 0x5f, 0xd9, 0xc6, 0x6b, 0xcb, 0xe8, 0x57, 0x36, 0xf0, 0x2a, + 0x2d, 0x37, 0xa8, 0xb5, 0xdc, 0xec, 0xbf, 0x1b, 0x70, 0x61, 0xcf, 0x8d, 0x53, 0xbf, 0xef, 0x47, + 0x6e, 0x98, 0xee, 0xb0, 0xd4, 0xc5, 0x75, 0x6a, 0x0f, 0xc0, 0x8c, 0xc7, 0x7b, 0x00, 0xb6, 0x07, + 0x4b, 0x03, 0xfd, 0x04, 0xf2, 0x98, 0x87, 0x87, 0x2a, 0xb9, 0xf6, 0x9a, 0xad, 0xf1, 0xd8, 0xaf, + 0xd9, 0xec, 0xef, 0x9b, 0xb0, 0x54, 0x09, 0xaf, 0x27, 0xe6, 0xa6, 0x6b, 0x00, 0x7e, 0xe1, 0x6a, + 0x27, 0x5c, 0xd0, 0xeb, 0xfe, 0xe8, 0x28, 0x44, 0xe3, 0x7a, 0x79, 0x8d, 0xb3, 0xf7, 0xf2, 0x6e, + 0x41, 0x27, 0x2a, 0x8d, 0x74, 0xc2, 0xf9, 0x68, 0x8c, 0x29, 0x1d, 0x95, 0xd4, 0xfe, 0x3a, 0xac, + 0xd4, 0xa2, 0x18, 0xb6, 0xed, 0xf8, 0x11, 0x0b, 0x8b, 0xb6, 0x9d, 0x00, 0x14, 0x87, 0x36, 0x35, + 0x87, 0xee, 0xc2, 0x6c, 0xe0, 0x1f, 0xab, 0xcf, 0x65, 0x25, 0x68, 0xff, 0xc0, 0x84, 0xd5, 0xf1, + 0x19, 0xe8, 0x59, 0x55, 0xf7, 0x3e, 0x74, 0x27, 0x45, 0xfb, 0x73, 0xd3, 0x7a, 0xe9, 0xdd, 0x45, + 0xae, 0x7e, 0x56, 0xd5, 0x7d, 0x21, 0xf7, 0x6e, 0x25, 0x1d, 0xda, 0xbf, 0x2e, 0xf4, 0x53, 0x54, + 0x23, 0xcf, 0xa8, 0x7e, 0xac, 0x97, 0x60, 0x99, 0x96, 0xa9, 0x3c, 0xfe, 0xa0, 0xe2, 0xb6, 0x86, + 0x2f, 0x23, 0x85, 0x52, 0x1a, 0x9c, 0x9b, 0xcf, 0xfe, 0xde, 0xc8, 0x6d, 0x52, 0xd4, 0x78, 0x1f, + 0x28, 0x9b, 0x94, 0x9e, 0xa6, 0x14, 0x3e, 0x8a, 0xa7, 0x15, 0xb5, 0xe7, 0xff, 0x3c, 0xed, 0x74, + 0x4f, 0x2b, 0x74, 0xa9, 0x14, 0x81, 0xf6, 0xb7, 0x61, 0x61, 0x9b, 0x05, 0x3b, 0xc9, 0x20, 0x7f, + 0x76, 0x76, 0xae, 0x87, 0xc9, 0xea, 0x63, 0xb5, 0x99, 0xda, 0x63, 0x35, 0x7b, 0x13, 0x16, 0x55, + 0x01, 0xce, 0xf2, 0xea, 0x6e, 0xf3, 0xd2, 0xd7, 0xd6, 0xae, 0xbc, 0x4c, 0xff, 0x0f, 0x7b, 0xbd, + 0xa6, 0xc4, 0xfd, 0x16, 0xfe, 0x5f, 0xec, 0xd5, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x00, + 0x88, 0x4c, 0x42, 0x36, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 8d9e04fc5..6a64039e6 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -492,10 +492,11 @@ message InvitationInfo { string customData = 3; string groupID = 4; string roomID = 5; - int32 timeout = 6; - string mediaType = 7; - int32 platformID = 8; - int32 sessionType = 9; + int32 initiateTime = 6; + int32 timeout = 7; + string mediaType = 8; + int32 platformID = 9; + int32 sessionType = 10; } message ParticipantMetaData{ From 5419478c48e2f21c4acaa9c88a2773aea31683d9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 12:23:13 +0800 Subject: [PATCH 506/752] org --- internal/demo/register/onboarding_process.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index d58372dba..6100165ee 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -5,7 +5,6 @@ import ( "Open_IM/internal/rpc/msg" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" From 39d4d0181474a9c9126c3138dfd5054dfbc4dd97 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 13:01:49 +0800 Subject: [PATCH 507/752] org --- internal/demo/register/onboarding_process.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 6100165ee..a937fc3eb 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -31,6 +31,7 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } departmentID, err := imdb.GetRandomDepartmentID() + log.NewInfo(operationID, utils.GetSelfFuncName(), "random departmentID", departmentID) if err != nil { log.NewError(utils.GetSelfFuncName(), "GetRandomDepartmentID failed", err.Error()) return From 47184ca01e6f2b05bb9d4a655fd4c74334e53ef0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 14:27:41 +0800 Subject: [PATCH 508/752] org --- internal/api/manage/management_chat.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 5519135b3..5ed04bf7e 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -347,15 +347,15 @@ type RevokeElem struct { RevokeMsgClientID string `mapstructure:"revokeMsgClientID" validate:"required"` } type OANotificationElem struct { - NotificationName string `mapstructure:"notificationName" validate:"required"` - NotificationFaceURL string `mapstructure:"notificationFaceURL" validate:"required"` - NotificationType int32 `mapstructure:"notificationType" validate:"required"` - Text string `mapstructure:"text" validate:"required"` - Url string `mapstructure:"url"` - MixType int32 `mapstructure:"mixType"` - PictureElem PictureElem `mapstructure:"pictureElem"` - SoundElem SoundElem `mapstructure:"soundElem"` - VideoElem VideoElem `mapstructure:"videoElem"` - FileElem FileElem `mapstructure:"fileElem"` - Ex string `mapstructure:"ex"` + NotificationName string `mapstructure:"notificationName" json:"notificationName" validate:"required"` + NotificationFaceURL string `mapstructure:"notificationFaceURL" json:"notificationFaceURL" validate:"required"` + 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"` } From 9ae84a69be3e499715530bde6341fb5b45fa36a4 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 14:56:24 +0800 Subject: [PATCH 509/752] SuperGroupOnlineBatchPushOneMsg --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 289b18308..5e7daf0e8 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -52,7 +52,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { - log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + log.NewError("SuperGroupOnlineBatchPushOneMsg push data to client rpc err", pushMsg.OperationID, "err", err) continue } if reply != nil && reply.SinglePushResult != nil { From d881ab5fea079a7f132ac4879df953b651569b05 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 15:04:36 +0800 Subject: [PATCH 510/752] signal --- internal/push/logic/push_to_client.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 81afb72d4..78ec80f65 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -123,15 +123,15 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { if offlinePusher == nil { break } - opts, err := GetOfflinePushOpts(pushMsg) - if err != nil { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) - } // save invitation info for offline push if err := db.DB.HandleSignalInfo(pushMsg.MsgData); err != nil { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) continue } + opts, err := GetOfflinePushOpts(pushMsg) + if err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) + } log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), UIDList, content, jsonCustomContent, "opts:", opts) pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID, opts) log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline pushResult: ", pushResult) From f3b083cafdf9fd498ef98682b0f9db665a708827 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:19:04 +0800 Subject: [PATCH 511/752] push update --- internal/msg_gateway/gate/batch_push.go | 12 ++++++------ internal/msg_gateway/gate/rpc_server.go | 20 +++++++++++++------- pkg/proto/sdk_ws/ws.proto | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 9e08c4ef4..7a21dde73 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -34,12 +34,12 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID return seqList, nil } -func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { - user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) - for _, v := range platformIDList { - user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - } +func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int]*sdk_ws.MsgDataList { + user2PushMsg := make(map[int]*sdk_ws.MsgDataList, 0) + //for _, v := range platformIDList { + //user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + //log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + //} return user2PushMsg } diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index a3a137f0e..6b851b8f0 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -210,15 +210,21 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms end", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { - log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) - for _, v := range list { - log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList), v.String()) - req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:") + //for _, v := range list { + // log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList), v.String()) + // req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + // log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + //} + msgBytes, err := proto.Marshal(list) + if err != nil { + log.Error(req.OperationID, "proto marshal err", err.Error()) + continue } - + req.MsgData.MsgDataList = msgBytes + //req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) log.Debug(req.OperationID, "r.encodeWsData no string") - log.Debug(req.OperationID, "r.encodeWsData data0 list ", req.MsgData.MsgDataList[0].String()) + //log.Debug(req.OperationID, "r.encodeWsData data0 list ", req.MsgData.MsgDataList[0].String()) log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index e7fbfe7c5..bb57752d1 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -238,7 +238,7 @@ message MsgData { map options = 18; OfflinePushInfo offlinePushInfo = 19; repeated string atUserIDList = 20; - repeated MsgData msgDataList = 21; + bytes msgDataList = 21; } message OfflinePushInfo{ From 2cbffb96fda541bea540ec36631856c94e9cb50f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:20:23 +0800 Subject: [PATCH 512/752] push update --- pkg/proto/sdk_ws/ws.pb.go | 560 +++++++++++++++++++------------------- 1 file changed, 280 insertions(+), 280 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 184334751..21094b3ee 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{0} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{1} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{2} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{3} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{4} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{5} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{6} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{7} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{8} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{9} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{10} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{11} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{12} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1279,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{13} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1338,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{14} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1376,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{15} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1417,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{16} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1478,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{17} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1531,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{18} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1580,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{19} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1648,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{20} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1709,7 +1709,7 @@ type MsgData struct { Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` - MsgDataList []*MsgData `protobuf:"bytes,21,rep,name=msgDataList" json:"msgDataList,omitempty"` + MsgDataList []byte `protobuf:"bytes,21,opt,name=msgDataList,proto3" json:"msgDataList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1719,7 +1719,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{21} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1872,7 +1872,7 @@ func (m *MsgData) GetAtUserIDList() []string { return nil } -func (m *MsgData) GetMsgDataList() []*MsgData { +func (m *MsgData) GetMsgDataList() []byte { if m != nil { return m.MsgDataList } @@ -1894,7 +1894,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{22} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1962,7 +1962,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{23} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2019,7 +2019,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{24} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2088,7 +2088,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{25} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2143,7 +2143,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{26} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2199,7 +2199,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{27} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2254,7 +2254,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{28} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2309,7 +2309,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{29} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2365,7 +2365,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{30} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2428,7 +2428,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{31} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2491,7 +2491,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{32} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2553,7 +2553,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{33} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2607,7 +2607,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{34} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2663,7 +2663,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{35} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2732,7 +2732,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{36} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2793,7 +2793,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{37} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2847,7 +2847,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{38} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2902,7 +2902,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{39} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2962,7 +2962,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{40} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3009,7 +3009,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{41} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3062,7 +3062,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{42} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3108,7 +3108,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{43} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3148,7 +3148,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{44} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3195,7 +3195,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{45} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3243,7 +3243,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{46} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3296,7 +3296,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{47} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3334,7 +3334,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{48} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3372,7 +3372,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{49} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3410,7 +3410,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{50} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3449,7 +3449,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{51} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3488,7 +3488,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{52} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3528,7 +3528,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{53} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3583,7 +3583,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{54} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3637,7 +3637,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{55} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3683,7 +3683,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{56} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3736,7 +3736,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{57} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4003,7 +4003,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{58} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4271,7 +4271,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{59} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4367,7 +4367,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{60} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4422,7 +4422,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{61} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4483,7 +4483,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{62} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4538,7 +4538,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{63} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4599,7 +4599,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{64} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4654,7 +4654,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{65} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4712,7 +4712,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{66} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4747,7 +4747,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{67} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4815,7 +4815,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{68} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4869,7 +4869,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{69} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4920,7 +4920,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{70} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4955,7 +4955,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{71} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5020,7 +5020,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{72} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5054,7 +5054,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{73} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5114,7 +5114,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_df70a2fd28b03292, []int{74} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5230,212 +5230,212 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_df70a2fd28b03292) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_c8bc58641c7ea7c8) } -var fileDescriptor_ws_df70a2fd28b03292 = []byte{ - // 3260 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_c8bc58641c7ea7c8 = []byte{ + // 3261 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0x38, 0x80, 0xc4, 0x05, 0x81, 0xa2, 0x28, 0x42, - 0x20, 0x71, 0x40, 0x88, 0x03, 0x37, 0x2e, 0x70, 0x44, 0xdc, 0x38, 0x73, 0xe5, 0x80, 0x84, 0x04, - 0x7a, 0x55, 0xaf, 0xbb, 0xdf, 0xeb, 0xee, 0xb1, 0x67, 0x47, 0x56, 0x76, 0xa3, 0xe5, 0xe6, 0xaa, - 0x79, 0x55, 0xaf, 0xaa, 0xbe, 0x7a, 0xaf, 0xaa, 0xdf, 0x7b, 0x86, 0x85, 0xd8, 0x39, 0x7c, 0xef, - 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, - 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, - 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, - 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x3f, 0x77, 0xec, 0x21, 0xeb, 0xea, 0xf8, 0x5b, 0xc1, - 0x30, 0x4c, 0x98, 0xf5, 0x83, 0xc4, 0xdd, 0x77, 0xfb, 0x76, 0xe2, 0x06, 0x7e, 0xb7, 0x81, 0x03, - 0x14, 0x1e, 0x1f, 0xe3, 0xfa, 0x49, 0x14, 0x38, 0x69, 0x1f, 0xc7, 0x4c, 0xd1, 0x18, 0x99, 0xc7, - 0xe7, 0xdf, 0xb7, 0xfb, 0xec, 0xb6, 0x75, 0xa3, 0xdb, 0xa4, 0xf9, 0x05, 0x69, 0xac, 0x42, 0x27, - 0xb8, 0xeb, 0xb3, 0xe8, 0x76, 0xcc, 0xa2, 0xeb, 0x5b, 0xdd, 0x16, 0xfe, 0x2a, 0xb3, 0x8c, 0x8b, - 0x00, 0xfd, 0x88, 0xd9, 0x09, 0xbb, 0xe5, 0x0e, 0x59, 0x77, 0x7a, 0x55, 0x7b, 0x76, 0xce, 0x92, - 0x38, 0x5c, 0xc3, 0x90, 0x0d, 0xf7, 0x58, 0xb4, 0x19, 0xa4, 0x7e, 0xd2, 0x9d, 0xc1, 0x01, 0x32, - 0xcb, 0x98, 0x07, 0x9d, 0xdd, 0xeb, 0xb6, 0x51, 0xb5, 0xce, 0xee, 0x19, 0xcb, 0xd0, 0x8a, 0x13, - 0x3b, 0x49, 0xe3, 0x2e, 0xac, 0x6a, 0xcf, 0x36, 0x2d, 0x41, 0x19, 0x6b, 0x30, 0x87, 0x7a, 0x83, - 0xcc, 0x9a, 0x0e, 0x8a, 0xa8, 0xcc, 0x3c, 0x62, 0xb7, 0xee, 0x87, 0xac, 0x3b, 0x8b, 0x0a, 0x0a, - 0x86, 0xf9, 0x37, 0x1d, 0xce, 0x61, 0xdc, 0xb7, 0xd1, 0x80, 0x2b, 0xa9, 0xe7, 0x9d, 0x82, 0xc0, - 0x32, 0xb4, 0x52, 0x9a, 0x8e, 0xc2, 0x2f, 0x28, 0x3e, 0x4f, 0x14, 0x78, 0xec, 0x06, 0x3b, 0x66, - 0x1e, 0x06, 0xbe, 0x69, 0x15, 0x0c, 0x63, 0x05, 0x66, 0xee, 0x04, 0xae, 0x8f, 0x31, 0x99, 0xc2, - 0x1f, 0x73, 0x9a, 0xff, 0xe6, 0xbb, 0xfd, 0x43, 0x9f, 0x43, 0x4a, 0xe1, 0xce, 0x69, 0x19, 0x89, - 0x96, 0x8a, 0xc4, 0x33, 0x30, 0x6f, 0x87, 0xe1, 0xb6, 0xed, 0x0f, 0x58, 0x44, 0x93, 0x4e, 0xa3, - 0xde, 0x12, 0x97, 0xe3, 0xc1, 0x67, 0xea, 0x05, 0x69, 0xd4, 0x67, 0x18, 0xee, 0xa6, 0x25, 0x71, - 0xb8, 0x9e, 0x20, 0x64, 0x91, 0x14, 0x46, 0x8a, 0x7c, 0x89, 0x2b, 0x50, 0x81, 0x1c, 0x15, 0x8e, - 0x63, 0x9a, 0xb0, 0x37, 0x7c, 0x07, 0x9d, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x7d, 0x0d, 0xe6, - 0x77, 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0x1e, 0xd6, 0x22, 0x78, 0x9a, 0x12, 0x3c, 0x39, 0x04, - 0xfa, 0xe8, 0x10, 0x34, 0xd4, 0x10, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0x22, 0xa4, 0x82, - 0x12, 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x1f, 0xeb, 0x30, 0xf3, 0x11, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, - 0x20, 0xf0, 0xd9, 0x4e, 0xca, 0xd3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, - 0xe4, 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, - 0x1c, 0x9a, 0xc9, 0x63, 0xaf, 0xae, 0xb1, 0x76, 0x65, 0x8d, 0x55, 0x73, 0x03, 0xea, 0x72, 0xc3, - 0xfc, 0xb7, 0x06, 0x70, 0x25, 0x72, 0x99, 0xef, 0x60, 0x68, 0x4a, 0x8b, 0x5b, 0xab, 0x2e, 0xee, - 0x65, 0x68, 0x45, 0x6c, 0x68, 0x47, 0x87, 0x59, 0xf2, 0x13, 0x55, 0x32, 0xa8, 0x51, 0x31, 0xe8, - 0x55, 0x80, 0x7d, 0x9c, 0x87, 0xeb, 0xc1, 0x50, 0x75, 0x5e, 0xfc, 0xd4, 0xa5, 0xca, 0x36, 0x78, - 0x29, 0x43, 0xc9, 0x92, 0x86, 0xf3, 0x95, 0x65, 0x3b, 0x8e, 0x48, 0xe0, 0x26, 0xad, 0xac, 0x9c, - 0x51, 0x93, 0xbf, 0xad, 0x13, 0xf2, 0x77, 0x3a, 0x4f, 0x8a, 0x7f, 0x6a, 0xd0, 0xde, 0xf0, 0xec, - 0xfe, 0xe1, 0x98, 0xae, 0xab, 0x2e, 0xea, 0x15, 0x17, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0xb9, - 0x80, 0x51, 0xe8, 0xbc, 0xf8, 0x99, 0x1a, 0x2f, 0xd5, 0x45, 0x61, 0xa9, 0x72, 0xaa, 0xbb, 0x53, - 0xa7, 0xbb, 0xdb, 0x3c, 0xc1, 0xdd, 0x56, 0xee, 0xee, 0x5f, 0x75, 0x98, 0xc5, 0x8d, 0xce, 0x62, - 0x47, 0x29, 0x8b, 0x13, 0xe3, 0x75, 0x98, 0x49, 0x33, 0x53, 0xb5, 0x71, 0x4d, 0xcd, 0x45, 0x8c, - 0x57, 0xc4, 0xb6, 0x8a, 0xf2, 0x3a, 0xca, 0x5f, 0xa8, 0x91, 0xcf, 0x6b, 0x9a, 0x55, 0x0c, 0xe7, - 0x25, 0xe8, 0xc0, 0xf6, 0x1d, 0x8f, 0x59, 0x2c, 0x4e, 0xbd, 0x44, 0xec, 0x96, 0x0a, 0x8f, 0x32, - 0xed, 0x68, 0x3b, 0x1e, 0x88, 0x02, 0x25, 0x28, 0x1e, 0x1d, 0x1a, 0xc7, 0x7f, 0x22, 0xd7, 0x0b, - 0x06, 0x5f, 0xa8, 0x11, 0x3b, 0x42, 0x84, 0x68, 0x59, 0x65, 0x64, 0x31, 0xa7, 0x88, 0x1a, 0x25, - 0x82, 0xc2, 0xe3, 0x10, 0x13, 0x8d, 0x0a, 0xa8, 0x32, 0x49, 0x9c, 0x72, 0x61, 0x32, 0xff, 0xde, - 0x80, 0x39, 0x5a, 0x3e, 0x59, 0x50, 0x2f, 0xf2, 0x3c, 0x0f, 0x86, 0x4a, 0x16, 0x49, 0x1c, 0x6e, - 0x05, 0xa7, 0x76, 0xd4, 0x8d, 0x46, 0xe1, 0xf1, 0x54, 0xe4, 0xf4, 0x15, 0x65, 0xc3, 0x91, 0x59, - 0xd9, 0x2c, 0x57, 0xe5, 0x8d, 0x47, 0xe2, 0xf0, 0xad, 0x2c, 0x09, 0x94, 0xec, 0xc8, 0x69, 0x2e, - 0x9b, 0x04, 0xf9, 0xfc, 0x94, 0x1f, 0x12, 0x87, 0xc7, 0x37, 0x09, 0xb2, 0xb9, 0x29, 0x48, 0x05, - 0x83, 0x34, 0x8b, 0x79, 0xa9, 0x94, 0xe4, 0x74, 0x05, 0xd5, 0xf6, 0x89, 0xa8, 0x82, 0x82, 0xaa, - 0xba, 0xb8, 0x3a, 0x95, 0xc5, 0xb5, 0x06, 0x73, 0xa4, 0x27, 0x4b, 0xfa, 0x59, 0x2a, 0xf5, 0x0a, - 0x53, 0xcd, 0x8d, 0xb9, 0x72, 0x6e, 0xa8, 0xe8, 0xce, 0x8f, 0x40, 0x77, 0x21, 0x47, 0xf7, 0xd7, - 0x3a, 0xc0, 0x16, 0x0b, 0xed, 0x28, 0x19, 0x32, 0x3f, 0xe1, 0xee, 0x39, 0x39, 0x95, 0x83, 0xab, - 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x0c, 0x38, 0xa1, 0x89, 0x7f, 0xf3, 0x60, - 0x86, 0x76, 0x44, 0xda, 0x28, 0xc9, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, 0x5a, - 0x44, 0xf0, 0xc5, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf6, 0x75, 0x95, 0x7b, 0x6a, 0x0f, 0xf6, - 0x1c, 0x2c, 0xc6, 0xe9, 0x5e, 0xe1, 0xdc, 0x4e, 0x3a, 0x14, 0xe9, 0x5e, 0xe1, 0xf3, 0xa0, 0x52, - 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, 0xd1, - 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x1b, 0xf8, 0x24, 0x25, 0x77, 0x15, 0x3a, 0xcc, 0x1f, - 0x78, 0x6e, 0x7c, 0xb0, 0x53, 0xc4, 0x4d, 0x66, 0xc9, 0xc1, 0x9e, 0x1a, 0x55, 0x94, 0x9b, 0x4a, - 0x51, 0x5e, 0x86, 0xd6, 0x30, 0xd8, 0x73, 0xbd, 0x2c, 0xef, 0x05, 0x85, 0x39, 0xcf, 0x3c, 0x86, - 0xd5, 0x39, 0xcf, 0xf9, 0x8c, 0x51, 0x14, 0xea, 0x99, 0xda, 0x42, 0xdd, 0x96, 0x0b, 0xb5, 0x1a, - 0x78, 0xa8, 0x04, 0x9e, 0xc2, 0xd5, 0xc9, 0xc3, 0xf5, 0x47, 0x0d, 0x16, 0x8b, 0x70, 0x53, 0x0f, - 0x3a, 0x32, 0x5c, 0xe5, 0x0c, 0xd4, 0x6b, 0x32, 0x30, 0xcf, 0x9b, 0x86, 0x9c, 0x37, 0x3c, 0xd3, - 0x82, 0xd8, 0x95, 0xfa, 0xfd, 0x9c, 0xe6, 0xb3, 0x79, 0xcc, 0x96, 0x82, 0x45, 0x94, 0xd4, 0x75, - 0xb7, 0x94, 0xae, 0xbb, 0x5c, 0x47, 0x7f, 0xa7, 0xc1, 0x79, 0x8e, 0x72, 0xc5, 0x8d, 0x9b, 0xb0, - 0x18, 0x94, 0x32, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x69, 0xac, 0x8a, 0x30, 0x57, - 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, 0x83, - 0x45, 0x2a, 0x6d, 0xd2, 0x3a, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, 0x71, - 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xaf, 0xb5, 0x27, 0x77, 0x53, 0xcf, 0xdb, - 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, 0x0e, - 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x14, 0x92, 0x59, 0x7c, 0x59, 0xc5, 0xa4, 0xa7, - 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, 0x9d, - 0x42, 0x07, 0x5e, 0xab, 0xed, 0x1a, 0x6a, 0xad, 0xa2, 0x6e, 0x40, 0xd0, 0x6f, 0xf8, 0x49, 0x74, - 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x21, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, 0xe1, - 0x07, 0xff, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, 0xc2, - 0x66, 0x8b, 0x06, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x1d, 0x93, 0x7d, 0xd4, 0x14, 0x1f, - 0xcd, 0xb7, 0xa0, 0xb3, 0x1d, 0x0f, 0xb6, 0xec, 0xc4, 0xc6, 0x81, 0xaf, 0x41, 0x67, 0x58, 0x90, - 0x38, 0xb8, 0x7e, 0x3e, 0x21, 0x64, 0xc9, 0xc3, 0xcd, 0xbf, 0xe8, 0xd0, 0xad, 0x0f, 0x45, 0x1c, - 0x72, 0x1b, 0x58, 0x14, 0x6d, 0x06, 0x0e, 0x43, 0xd7, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, 0x14, - 0xf1, 0x1a, 0x26, 0x9a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, 0x8e, - 0x33, 0x86, 0xb0, 0x88, 0xd1, 0x95, 0x1c, 0x12, 0x98, 0xad, 0x8f, 0x8d, 0x59, 0x1c, 0x12, 0x68, - 0x92, 0x0e, 0x02, 0xae, 0xa2, 0x7a, 0xa5, 0x0f, 0x4f, 0xd4, 0x0e, 0xad, 0x01, 0xf0, 0x4b, 0x2a, - 0x80, 0x17, 0x47, 0xbb, 0x52, 0x06, 0x31, 0x04, 0xe3, 0x2a, 0x4b, 0xb6, 0xed, 0x7b, 0xeb, 0xbe, - 0xb3, 0xed, 0xfa, 0x3d, 0x76, 0xc4, 0xb3, 0x7d, 0x15, 0x3a, 0xe2, 0xf3, 0x3c, 0x87, 0xa9, 0x6d, - 0xc9, 0xac, 0x91, 0x5f, 0xed, 0xa5, 0xf5, 0xd0, 0xa8, 0xac, 0x07, 0xf3, 0x32, 0xcc, 0xca, 0xd3, - 0x61, 0x11, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x3a, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0x38, 0x42, 0x7c, - 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xf3, 0xa5, - 0x31, 0x2a, 0x5f, 0xa6, 0x94, 0x7c, 0x39, 0x84, 0x25, 0x02, 0x49, 0x9a, 0xba, 0xdb, 0xc4, 0x04, - 0x78, 0xbd, 0xae, 0x55, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, 0x83, - 0xe5, 0xfa, 0xc1, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xe9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, 0xfc, - 0x8f, 0x60, 0x81, 0x6f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x03, 0xb9, 0x0a, 0x1d, 0x92, - 0xdf, 0x8e, 0x07, 0xc5, 0xa7, 0x9b, 0xc4, 0xe2, 0x23, 0xfa, 0x9e, 0xcb, 0x37, 0x4f, 0x1c, 0x21, - 0x36, 0x3d, 0x89, 0xc5, 0x0b, 0x64, 0xcc, 0xc4, 0x49, 0x06, 0x8f, 0x6e, 0xc3, 0xca, 0x69, 0xf3, - 0xa7, 0x2d, 0x98, 0x16, 0xd9, 0x88, 0x45, 0x91, 0x7f, 0x2d, 0xe7, 0xdb, 0x2a, 0x51, 0xd4, 0xd7, - 0xf6, 0x8f, 0x8b, 0xf4, 0x22, 0x4a, 0x3e, 0x46, 0x6a, 0xa8, 0xc7, 0x48, 0x25, 0x9b, 0xa6, 0xaa, - 0x36, 0x95, 0xfc, 0x6a, 0x56, 0xfd, 0xe2, 0x6d, 0x1c, 0x76, 0x36, 0xbb, 0x9e, 0x9d, 0xec, 0x07, - 0xd1, 0x50, 0x7c, 0xfc, 0x36, 0xad, 0x0a, 0x9f, 0xb7, 0x8e, 0xc4, 0xcb, 0x7b, 0x7f, 0x2a, 0xe1, - 0x25, 0x2e, 0xef, 0xb4, 0x89, 0x93, 0x7d, 0x03, 0xd0, 0xa9, 0x83, 0xca, 0x24, 0xdb, 0xe2, 0xd8, - 0x0d, 0x7c, 0xec, 0x42, 0xa9, 0xd5, 0x97, 0x59, 0xdc, 0xf3, 0x61, 0x3c, 0xb8, 0x12, 0x05, 0x43, - 0x71, 0xf6, 0x90, 0x91, 0xe8, 0x79, 0xe0, 0x27, 0x59, 0x07, 0xdb, 0x21, 0x59, 0x89, 0xc5, 0x65, - 0x05, 0x89, 0x7d, 0xfe, 0xac, 0x95, 0x91, 0x3c, 0x97, 0x62, 0x76, 0x24, 0x9a, 0x77, 0xfe, 0xa7, - 0x82, 0xdc, 0x82, 0x8a, 0x5c, 0xa9, 0x1b, 0x5b, 0xc4, 0x5f, 0xe5, 0x6e, 0xac, 0x68, 0x71, 0x96, - 0x94, 0x16, 0x67, 0x1d, 0xa6, 0x83, 0x90, 0x2f, 0xff, 0xb8, 0x6b, 0xe0, 0x72, 0xf9, 0xec, 0xe8, - 0x0d, 0xea, 0xd2, 0x4d, 0x1a, 0x49, 0x0b, 0x23, 0x93, 0x33, 0x6e, 0xc0, 0x42, 0xb0, 0xbf, 0xef, - 0xb9, 0x3e, 0xdb, 0x4d, 0xe3, 0x03, 0xfc, 0x48, 0x3e, 0x87, 0xc9, 0x6e, 0xd6, 0x35, 0x11, 0xea, - 0x48, 0xab, 0x2c, 0xca, 0x3b, 0x3f, 0x3b, 0xa1, 0x8f, 0x1c, 0xdc, 0xe0, 0xce, 0xe3, 0x06, 0xa7, - 0xf0, 0xca, 0xa5, 0xea, 0x89, 0x07, 0x2a, 0x55, 0x2b, 0xaf, 0xc0, 0xac, 0xec, 0x48, 0xcd, 0xa2, - 0x3d, 0x2f, 0x2f, 0xda, 0x19, 0x79, 0x4d, 0xfe, 0x48, 0x83, 0x85, 0x92, 0x0b, 0x7c, 0x74, 0xe2, - 0x26, 0x1e, 0x13, 0x1a, 0x88, 0xe0, 0x5f, 0x41, 0x0e, 0x8b, 0xfb, 0x62, 0x91, 0xe0, 0xdf, 0xa2, - 0x9f, 0x6c, 0xe4, 0x67, 0x5b, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, 0x48, 0x7d, 0x27, - 0x3f, 0x9f, 0x96, 0x78, 0x3c, 0x49, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, 0x3a, 0x45, 0x6e, - 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, 0xc8, 0xa1, 0x76, - 0x58, 0xc2, 0xfb, 0x75, 0x0d, 0x33, 0x4a, 0x50, 0x3c, 0x19, 0x1d, 0xb6, 0x6f, 0xa7, 0x5e, 0xc2, - 0x87, 0x66, 0x5b, 0x83, 0xc4, 0xc2, 0xf3, 0xd3, 0x38, 0xf0, 0xb7, 0x48, 0x9a, 0xec, 0x94, 0x38, - 0xe6, 0x9f, 0x74, 0x58, 0xc4, 0x9d, 0x6f, 0x13, 0x13, 0xcb, 0x41, 0xa1, 0x17, 0xa1, 0x89, 0x0b, - 0x5d, 0x74, 0x8e, 0x27, 0x9f, 0x8c, 0xd0, 0x50, 0xe3, 0x32, 0xb4, 0x82, 0x10, 0xdb, 0x4d, 0xda, - 0x16, 0x9f, 0x19, 0x25, 0xa4, 0x1e, 0x55, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0xba, 0x4b, - 0x6a, 0x12, 0xc6, 0xd5, 0x21, 0x49, 0xf2, 0xe0, 0xe6, 0xf5, 0x2f, 0x3f, 0xaf, 0x6e, 0x58, 0x2a, - 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, 0x66, 0x76, 0x44, 0x86, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, - 0xfc, 0xb9, 0x26, 0xc2, 0xc8, 0x7f, 0xed, 0x31, 0x8a, 0x7d, 0x11, 0x12, 0x6d, 0xa2, 0x90, 0xac, - 0xc0, 0xcc, 0x30, 0x95, 0x4e, 0xec, 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, - 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x97, 0x2a, 0x13, 0x63, - 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, 0x4f, 0x04, 0xec, 0x63, 0x9c, 0xc2, 0x15, 0x32, 0xd2, 0x81, - 0x4a, 0x43, 0x3e, 0x50, 0x31, 0x3f, 0xd0, 0x60, 0x9e, 0x82, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, - 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, 0x4c, 0x90, 0x95, 0xb9, 0x5c, 0x35, 0x9f, 0x1a, 0x35, 0xf9, - 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0x72, 0x58, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x25, 0xa5, 0x1c, - 0x28, 0x4d, 0x95, 0x0e, 0x94, 0x6a, 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, - 0x0e, 0x9f, 0xbc, 0x9a, 0x2f, 0xbc, 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, - 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, 0x9b, 0xc4, 0x72, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0xde, 0xde, - 0x65, 0xfe, 0x47, 0x83, 0x45, 0xd2, 0xf3, 0x96, 0xdb, 0x3f, 0x7c, 0x88, 0xce, 0xef, 0xc0, 0xfc, - 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xb6, 0xed, 0x92, 0xf4, 0x98, 0xee, 0xff, 0x57, 0x83, 0x25, 0x52, - 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, 0xb2, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0x18, 0x80, 0xb2, - 0xf8, 0x98, 0x11, 0xf8, 0xad, 0x06, 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xfe, 0x5f, - 0x83, 0x0e, 0xf3, 0x93, 0xc8, 0xf6, 0x27, 0xd9, 0x21, 0x65, 0xd1, 0x31, 0x37, 0xc9, 0x0f, 0x34, - 0x30, 0x50, 0xd5, 0x96, 0x1b, 0x0f, 0xdd, 0x38, 0x7e, 0x88, 0xd0, 0x8d, 0x67, 0xf0, 0x4f, 0x74, - 0x38, 0x2f, 0x69, 0xd9, 0x4e, 0x93, 0x47, 0xdd, 0x64, 0x63, 0x0b, 0xda, 0xbc, 0x47, 0x90, 0x6f, - 0x2a, 0xc7, 0x9d, 0xa8, 0x10, 0xe4, 0x5d, 0x2c, 0x12, 0x3d, 0xd6, 0x0f, 0x7c, 0x27, 0xc6, 0xe6, - 0x68, 0xce, 0x52, 0x78, 0x7c, 0x1b, 0x5a, 0x91, 0xd4, 0x6c, 0xda, 0x7e, 0x9f, 0x79, 0x8f, 0x4d, - 0x88, 0xcc, 0x5f, 0x69, 0x30, 0x4f, 0x43, 0x1e, 0x7d, 0x97, 0x79, 0xad, 0xa7, 0x44, 0xfe, 0xd8, - 0xa0, 0xc4, 0xd3, 0x6b, 0x59, 0xd2, 0x22, 0xf7, 0xd5, 0x8f, 0x6e, 0x6a, 0x5d, 0x83, 0x4e, 0xff, - 0xc0, 0xf6, 0x07, 0x13, 0x25, 0x97, 0x2c, 0x6a, 0x26, 0xf0, 0xa4, 0x7c, 0x38, 0xbf, 0x49, 0x3f, - 0xa1, 0xfb, 0x2f, 0x95, 0x5c, 0x39, 0xf1, 0x25, 0xc2, 0x83, 0x05, 0xfd, 0x10, 0x96, 0xe8, 0x46, - 0x58, 0xea, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x51, 0x68, 0x28, 0x94, 0x91, 0xea, 0x5d, - 0xbf, 0x78, 0xce, 0x55, 0xdc, 0xf5, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, - 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x6e, 0xf7, 0xc4, - 0xdb, 0x67, 0xf9, 0x5e, 0x58, 0x57, 0xef, 0x85, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0x31, 0x58, - 0x9b, 0x74, 0x65, 0x9d, 0x4d, 0x22, 0x52, 0xa6, 0xee, 0xcc, 0x4e, 0xb6, 0xc5, 0x52, 0x84, 0xcc, - 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, - 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, - 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, 0x97, 0xa1, 0x45, 0xcf, 0x5d, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, - 0x98, 0x3d, 0xd3, 0xb1, 0xc4, 0xe0, 0x6a, 0x46, 0xea, 0x75, 0x2b, 0xea, 0x2b, 0x79, 0xb2, 0x8f, - 0xfd, 0x20, 0x45, 0x08, 0x98, 0x5f, 0xcf, 0x92, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x63, 0x64, 0xde, - 0x86, 0x79, 0x7c, 0x7b, 0x53, 0xc4, 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, - 0xcd, 0x57, 0x07, 0x8f, 0x8f, 0xbc, 0x95, 0x9c, 0x89, 0xf6, 0x2f, 0xc2, 0xb9, 0x2c, 0xf6, 0xb7, - 0x43, 0x27, 0x3f, 0x44, 0x1a, 0x71, 0x87, 0x67, 0xbe, 0x00, 0xcb, 0x9b, 0x81, 0x7f, 0xcc, 0xa2, - 0x98, 0x2e, 0x19, 0x51, 0x24, 0x93, 0x50, 0x16, 0xbf, 0xa0, 0xcc, 0x3b, 0xb0, 0x22, 0x4b, 0xf4, - 0x58, 0xb2, 0x1b, 0xb9, 0xc7, 0x92, 0x94, 0x38, 0xbc, 0xd6, 0x94, 0xc3, 0xeb, 0xe2, 0xb0, 0x5b, - 0x57, 0x0e, 0xbb, 0x2f, 0x40, 0xdb, 0x8d, 0x85, 0x02, 0x4c, 0xaa, 0x19, 0xab, 0x60, 0x98, 0x36, - 0x2c, 0x51, 0xf8, 0xc5, 0x65, 0x12, 0x4e, 0xb1, 0x02, 0x33, 0x94, 0x53, 0xf9, 0x24, 0x39, 0x3d, - 0xf2, 0x6a, 0x66, 0xe4, 0x45, 0xa4, 0xd9, 0x83, 0x25, 0xf1, 0xe0, 0x66, 0xd7, 0x1e, 0xb8, 0x3e, - 0x6d, 0xb2, 0x17, 0x01, 0x42, 0x7b, 0x90, 0x3d, 0xb8, 0xa3, 0x2b, 0x35, 0x89, 0xc3, 0x7f, 0x8f, - 0x0f, 0x82, 0xbb, 0xe2, 0x77, 0x9d, 0x7e, 0x2f, 0x38, 0xe6, 0xd7, 0xc0, 0xb0, 0x58, 0x1c, 0x06, - 0x7e, 0xcc, 0x24, 0xad, 0xab, 0xd0, 0xd9, 0x4c, 0xa3, 0x88, 0xf9, 0x7c, 0xaa, 0xec, 0xf5, 0x99, - 0xcc, 0xe2, 0x7a, 0x7b, 0x85, 0x5e, 0x3a, 0x7e, 0x97, 0x38, 0xe6, 0xcf, 0x1a, 0xd0, 0xee, 0xb9, - 0x03, 0xdf, 0xf6, 0x2c, 0x76, 0x64, 0xbc, 0x06, 0x2d, 0xfa, 0x64, 0x11, 0x99, 0x52, 0x77, 0x1c, - 0x4c, 0xa3, 0xe9, 0xdb, 0xcc, 0x62, 0x47, 0xd7, 0x3e, 0x61, 0x09, 0x19, 0xe3, 0x6d, 0x98, 0xa3, - 0xbf, 0xae, 0xd3, 0x11, 0x94, 0xa8, 0x5f, 0x9f, 0x3b, 0x45, 0x89, 0x18, 0x4d, 0xba, 0x54, 0x0d, - 0xdc, 0xa0, 0x3e, 0xb6, 0x34, 0x62, 0x7b, 0x18, 0x6d, 0x10, 0x75, 0x3e, 0xc2, 0x20, 0x92, 0xe1, - 0xd2, 0x36, 0x1e, 0xd2, 0x88, 0x4a, 0x3d, 0x5a, 0x9a, 0xce, 0x72, 0x84, 0x34, 0xc9, 0x70, 0xe9, - 0x83, 0xd4, 0x1f, 0xdc, 0x0e, 0xc5, 0xd9, 0xe1, 0x68, 0xe9, 0x6b, 0x38, 0x4c, 0x48, 0x93, 0x0c, - 0x97, 0x8e, 0x70, 0xf3, 0xc6, 0xa0, 0x9f, 0x24, 0x4d, 0x7b, 0xbc, 0x90, 0x26, 0x99, 0x8d, 0x36, - 0x4c, 0x87, 0xf6, 0x7d, 0x2f, 0xb0, 0x1d, 0xf3, 0xfd, 0x06, 0x40, 0x36, 0x30, 0xc6, 0x46, 0x47, - 0x81, 0x68, 0xed, 0x54, 0x88, 0x42, 0xef, 0xbe, 0x04, 0x52, 0xaf, 0x1e, 0xa4, 0xcf, 0x8f, 0x0b, - 0x12, 0x69, 0x2b, 0xc1, 0x74, 0xb9, 0x04, 0xd3, 0xda, 0xa9, 0x30, 0x09, 0xa3, 0x04, 0x50, 0x97, - 0x4b, 0x40, 0xad, 0x9d, 0x0a, 0x94, 0x90, 0x17, 0x50, 0x5d, 0x2e, 0x41, 0xb5, 0x76, 0x2a, 0x54, - 0x42, 0x5e, 0x80, 0x75, 0xb9, 0x04, 0xd6, 0xda, 0xa9, 0x60, 0x09, 0xf9, 0x2a, 0x5c, 0x1f, 0xea, - 0x30, 0x8f, 0x21, 0xa3, 0x1b, 0x5a, 0x7f, 0x3f, 0xc0, 0xfb, 0x00, 0x0c, 0x97, 0xfa, 0x7e, 0x53, - 0x65, 0x1a, 0x5f, 0x80, 0x25, 0x62, 0x30, 0xe9, 0x2a, 0x45, 0xc7, 0xab, 0x94, 0xea, 0x0f, 0x78, - 0x79, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x6b, 0xbe, 0x0a, 0x8e, 0x7c, 0xb5, 0x37, - 0x55, 0x79, 0x21, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0xb3, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, - 0xd2, 0x44, 0x6c, 0x13, 0x19, 0x49, 0x6f, 0xac, 0x1c, 0xd7, 0xc6, 0x0b, 0x31, 0xf1, 0x00, 0x29, - 0x67, 0xe0, 0xce, 0x56, 0x5c, 0xf0, 0x89, 0x17, 0xdc, 0x05, 0xe7, 0xf4, 0xcb, 0x38, 0xf3, 0x1f, - 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0xd1, 0x07, - 0xe5, 0x11, 0xa7, 0xf6, 0x60, 0x8f, 0x38, 0x77, 0x61, 0x61, 0xa0, 0x7e, 0x5d, 0x3c, 0xe0, 0x87, - 0x41, 0x59, 0x5c, 0x79, 0x91, 0xda, 0x78, 0xe0, 0x17, 0xa9, 0xe6, 0x0f, 0x74, 0x58, 0x28, 0x6d, - 0x9d, 0x27, 0xd6, 0x9d, 0x75, 0x00, 0x37, 0x4f, 0xa3, 0x13, 0x0e, 0xdf, 0xd5, 0x5c, 0xb3, 0x24, - 0xa1, 0xba, 0x5b, 0xbe, 0xc6, 0xe4, 0xb7, 0x7c, 0xd7, 0xa0, 0x13, 0x16, 0x20, 0x9d, 0xf0, 0xed, - 0x53, 0x03, 0xa5, 0x25, 0x8b, 0x9a, 0xef, 0xc2, 0x52, 0x65, 0x87, 0xc2, 0x2b, 0xb9, 0xe0, 0x90, - 0xf9, 0xf9, 0x95, 0x1c, 0x27, 0xa4, 0x64, 0xd5, 0xcb, 0xc9, 0xea, 0xb9, 0xc7, 0xf2, 0x93, 0x77, - 0x41, 0x9a, 0x3f, 0xd4, 0x61, 0xb9, 0xbe, 0xba, 0x3c, 0xae, 0xe1, 0xde, 0x83, 0xee, 0xa8, 0x9d, - 0xfc, 0xcc, 0xa2, 0x5e, 0x64, 0x77, 0x5e, 0x87, 0x1f, 0xd7, 0x70, 0x9f, 0xcb, 0xb2, 0x5b, 0x2a, - 0x75, 0xe6, 0x6f, 0xf2, 0xf8, 0xe4, 0x9d, 0xc6, 0x63, 0x1a, 0x1f, 0xe3, 0x39, 0x58, 0x24, 0x37, - 0xa5, 0x67, 0x21, 0xd4, 0xb8, 0x56, 0xf8, 0xc5, 0x4e, 0x21, 0x95, 0xfd, 0x33, 0xcb, 0xd9, 0x3f, - 0x68, 0x19, 0x26, 0x79, 0xff, 0xf6, 0xb1, 0xc2, 0xa4, 0xc8, 0x34, 0xa9, 0xa9, 0x91, 0x32, 0x2d, - 0xef, 0x2b, 0xff, 0x9f, 0x69, 0xa7, 0x67, 0x5a, 0x1e, 0x4b, 0xa9, 0xc1, 0x33, 0xbf, 0x03, 0x73, - 0x5b, 0xcc, 0xdb, 0x8e, 0x07, 0xd9, 0xbb, 0xd5, 0x33, 0xfd, 0x50, 0x2c, 0xbf, 0xee, 0x9b, 0xaa, - 0xbe, 0xee, 0xdb, 0x80, 0x79, 0xd9, 0x80, 0x49, 0xde, 0x65, 0x6e, 0x5c, 0xf8, 0xc6, 0xca, 0xa5, - 0xe7, 0xe9, 0x7f, 0x3c, 0x5f, 0xad, 0x04, 0x71, 0xaf, 0x85, 0xff, 0xf3, 0xf9, 0xd2, 0xff, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xbb, 0xd4, 0xa8, 0x81, 0x06, 0x3a, 0x00, 0x00, + 0xcb, 0x05, 0x29, 0x48, 0x88, 0x1b, 0x27, 0x38, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, + 0x90, 0x38, 0x20, 0xc4, 0x81, 0x1b, 0x17, 0x38, 0x22, 0x6e, 0x9c, 0xb9, 0x72, 0x40, 0x42, 0x02, + 0xbd, 0xaa, 0xd7, 0xdd, 0xef, 0x75, 0xf7, 0xd8, 0xb3, 0x23, 0x2b, 0xbb, 0xd1, 0x72, 0x9b, 0xaa, + 0x7e, 0x55, 0xaf, 0x5e, 0x7d, 0xf5, 0x5e, 0xd5, 0xfb, 0x19, 0x58, 0x88, 0x9d, 0xc3, 0xf7, 0xee, + 0xc6, 0xcf, 0xdf, 0x8d, 0x2f, 0x85, 0x51, 0x90, 0x04, 0xc6, 0x52, 0xcc, 0xa2, 0x63, 0x16, 0xbd, + 0x67, 0x87, 0xee, 0x7b, 0xa1, 0x1d, 0xd9, 0xc3, 0xd8, 0xfc, 0x97, 0x0e, 0xed, 0xab, 0x51, 0x90, + 0x86, 0xd7, 0xfd, 0xfd, 0xc0, 0xe8, 0xc2, 0xf4, 0x00, 0x89, 0xad, 0xae, 0xb6, 0xaa, 0x3d, 0xdb, + 0xb6, 0x32, 0xd2, 0xb8, 0x00, 0x6d, 0xfc, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0x6f, 0x05, 0xc3, + 0x30, 0x61, 0xd6, 0x0f, 0x12, 0x77, 0xdf, 0xed, 0xdb, 0x89, 0x1b, 0xf8, 0xdd, 0x06, 0x36, 0x50, + 0x78, 0xbc, 0x8d, 0xeb, 0x27, 0x51, 0xe0, 0xa4, 0x7d, 0x6c, 0x33, 0x45, 0x6d, 0x64, 0x1e, 0xef, + 0x7f, 0xdf, 0xee, 0xb3, 0xdb, 0xd6, 0x8d, 0x6e, 0x93, 0xfa, 0x17, 0xa4, 0xb1, 0x0a, 0x9d, 0xe0, + 0xae, 0xcf, 0xa2, 0xdb, 0x31, 0x8b, 0xae, 0x6f, 0x75, 0x5b, 0xf8, 0x55, 0x66, 0x19, 0x17, 0x01, + 0xfa, 0x11, 0xb3, 0x13, 0x76, 0xcb, 0x1d, 0xb2, 0xee, 0xf4, 0xaa, 0xf6, 0xec, 0x9c, 0x25, 0x71, + 0xb8, 0x86, 0x21, 0x1b, 0xee, 0xb1, 0x68, 0x33, 0x48, 0xfd, 0xa4, 0x3b, 0x83, 0x0d, 0x64, 0x96, + 0x31, 0x0f, 0x3a, 0xbb, 0xd7, 0x6d, 0xa3, 0x6a, 0x9d, 0xdd, 0x33, 0x96, 0xa1, 0x15, 0x27, 0x76, + 0x92, 0xc6, 0x5d, 0x58, 0xd5, 0x9e, 0x6d, 0x5a, 0x82, 0x32, 0xd6, 0x60, 0x0e, 0xf5, 0x06, 0x99, + 0x35, 0x1d, 0x14, 0x51, 0x99, 0xb9, 0xc7, 0x6e, 0xdd, 0x0f, 0x59, 0x77, 0x16, 0x15, 0x14, 0x0c, + 0xf3, 0x6f, 0x3a, 0x9c, 0x43, 0xbf, 0x6f, 0xa3, 0x01, 0x57, 0x52, 0xcf, 0x3b, 0x05, 0x81, 0x65, + 0x68, 0xa5, 0xd4, 0x1d, 0xb9, 0x5f, 0x50, 0xbc, 0x9f, 0x28, 0xf0, 0xd8, 0x0d, 0x76, 0xcc, 0x3c, + 0x74, 0x7c, 0xd3, 0x2a, 0x18, 0xc6, 0x0a, 0xcc, 0xdc, 0x09, 0x5c, 0x1f, 0x7d, 0x32, 0x85, 0x1f, + 0x73, 0x9a, 0x7f, 0xf3, 0xdd, 0xfe, 0xa1, 0xcf, 0x21, 0x25, 0x77, 0xe7, 0xb4, 0x8c, 0x44, 0x4b, + 0x45, 0xe2, 0x19, 0x98, 0xb7, 0xc3, 0x70, 0xdb, 0xf6, 0x07, 0x2c, 0xa2, 0x4e, 0xa7, 0x51, 0x6f, + 0x89, 0xcb, 0xf1, 0xe0, 0x3d, 0xf5, 0x82, 0x34, 0xea, 0x33, 0x74, 0x77, 0xd3, 0x92, 0x38, 0x5c, + 0x4f, 0x10, 0xb2, 0x48, 0x72, 0x23, 0x79, 0xbe, 0xc4, 0x15, 0xa8, 0x40, 0x8e, 0x0a, 0xc7, 0x31, + 0x4d, 0xd8, 0x1b, 0xbe, 0x83, 0x83, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x03, 0x0d, 0xe6, 0x77, + 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0xee, 0xd6, 0xc2, 0x79, 0x9a, 0xe2, 0x3c, 0xd9, 0x05, 0xfa, + 0x68, 0x17, 0x34, 0x54, 0x17, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0xc2, 0xa5, 0x82, 0x12, + 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x9f, 0xe8, 0x30, 0xf3, 0x31, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, 0x20, + 0xf0, 0xd9, 0x4e, 0xca, 0xc3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, 0xe4, + 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, 0x06, + 0x34, 0x93, 0xfb, 0x5e, 0x9d, 0x63, 0xed, 0xca, 0x1c, 0xab, 0xc6, 0x06, 0xd4, 0xc5, 0x86, 0xf9, + 0x6f, 0x0d, 0xe0, 0x4a, 0xe4, 0x32, 0xdf, 0x41, 0xd7, 0x94, 0x26, 0xb7, 0x56, 0x9d, 0xdc, 0xcb, + 0xd0, 0x8a, 0xd8, 0xd0, 0x8e, 0x0e, 0xb3, 0xe0, 0x27, 0xaa, 0x64, 0x50, 0xa3, 0x62, 0xd0, 0xab, + 0x00, 0xfb, 0xd8, 0x0f, 0xd7, 0x83, 0xae, 0xea, 0xbc, 0xf8, 0x99, 0x4b, 0x95, 0x65, 0xf0, 0x52, + 0x86, 0x92, 0x25, 0x35, 0xe7, 0x33, 0xcb, 0x76, 0x1c, 0x11, 0xc0, 0x4d, 0x9a, 0x59, 0x39, 0xa3, + 0x26, 0x7e, 0x5b, 0x27, 0xc4, 0xef, 0x74, 0x1e, 0x14, 0xff, 0xd4, 0xa0, 0xbd, 0xe1, 0xd9, 0xfd, + 0xc3, 0x31, 0x87, 0xae, 0x0e, 0x51, 0xaf, 0x0c, 0xf1, 0x2a, 0xcc, 0xed, 0x71, 0x75, 0xd9, 0x10, + 0xd0, 0x0b, 0x9d, 0x17, 0x3f, 0x57, 0x33, 0x4a, 0x75, 0x52, 0x58, 0xaa, 0x9c, 0x3a, 0xdc, 0xa9, + 0xd3, 0x87, 0xdb, 0x3c, 0x61, 0xb8, 0xad, 0x7c, 0xb8, 0x7f, 0xd5, 0x61, 0x16, 0x17, 0x3a, 0x8b, + 0x1d, 0xa5, 0x2c, 0x4e, 0x8c, 0xd7, 0x61, 0x26, 0xcd, 0x4c, 0xd5, 0xc6, 0x35, 0x35, 0x17, 0x31, + 0x5e, 0x11, 0xcb, 0x2a, 0xca, 0xeb, 0x28, 0x7f, 0xa1, 0x46, 0x3e, 0xcf, 0x69, 0x56, 0xd1, 0x9c, + 0xa7, 0xa0, 0x03, 0xdb, 0x77, 0x3c, 0x66, 0xb1, 0x38, 0xf5, 0x12, 0xb1, 0x5a, 0x2a, 0x3c, 0x8a, + 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x12, 0x94, 0xa0, 0xb8, 0x77, 0xa8, 0x1d, 0xff, 0x44, 0x43, 0x2f, + 0x18, 0x7c, 0xa2, 0x46, 0xec, 0x08, 0x11, 0xa2, 0x69, 0x95, 0x91, 0x45, 0x9f, 0xc2, 0x6b, 0x14, + 0x08, 0x0a, 0x8f, 0x43, 0x4c, 0x34, 0x2a, 0xa0, 0xcc, 0x24, 0x71, 0xca, 0x89, 0xc9, 0xfc, 0x7b, + 0x03, 0xe6, 0x68, 0xfa, 0x64, 0x4e, 0xbd, 0xc8, 0xe3, 0x3c, 0x18, 0x2a, 0x51, 0x24, 0x71, 0xb8, + 0x15, 0x9c, 0xda, 0x51, 0x17, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x05, 0x47, 0x66, + 0x65, 0xbd, 0x5c, 0x95, 0x17, 0x1e, 0x89, 0xc3, 0x97, 0xb2, 0x24, 0x50, 0xa2, 0x23, 0xa7, 0xb9, + 0x6c, 0x12, 0xe4, 0xfd, 0x53, 0x7c, 0x48, 0x1c, 0xee, 0xdf, 0x24, 0xc8, 0xfa, 0x26, 0x27, 0x15, + 0x0c, 0xd2, 0x2c, 0xfa, 0xa5, 0x54, 0x92, 0xd3, 0x15, 0x54, 0xdb, 0x27, 0xa2, 0x0a, 0x0a, 0xaa, + 0xea, 0xe4, 0xea, 0x54, 0x26, 0xd7, 0x1a, 0xcc, 0x91, 0x9e, 0x2c, 0xe8, 0x67, 0x29, 0xd5, 0x2b, + 0x4c, 0x35, 0x36, 0xe6, 0xca, 0xb1, 0xa1, 0xa2, 0x3b, 0x3f, 0x02, 0xdd, 0x85, 0x1c, 0xdd, 0x5f, + 0xeb, 0x00, 0x5b, 0x2c, 0xb4, 0xa3, 0x64, 0xc8, 0xfc, 0x84, 0x0f, 0xcf, 0xc9, 0xa9, 0x1c, 0x5c, + 0x85, 0x27, 0xe7, 0x09, 0x5d, 0xcd, 0x13, 0x06, 0x4c, 0xa1, 0xc3, 0x09, 0x4d, 0xfc, 0xcd, 0x9d, + 0x19, 0xda, 0x11, 0x69, 0xa3, 0x20, 0xcf, 0x69, 0x9e, 0x07, 0x82, 0xc8, 0x11, 0x99, 0xa3, 0x69, + 0x11, 0xc1, 0x27, 0x7f, 0xd1, 0x1f, 0x16, 0x34, 0x2d, 0x5a, 0xd7, 0x55, 0xee, 0xa9, 0x35, 0xd8, + 0x73, 0xb0, 0x18, 0xa7, 0x7b, 0xc5, 0xe0, 0x76, 0xd2, 0xa1, 0x08, 0xf7, 0x0a, 0x9f, 0x3b, 0x95, + 0x8a, 0x33, 0xde, 0x88, 0x52, 0x4d, 0xc1, 0x28, 0x57, 0x05, 0xe6, 0x07, 0x3a, 0x2c, 0xde, 0x8c, + 0x06, 0xb6, 0xef, 0x7e, 0x17, 0xcb, 0x4d, 0x5c, 0xc0, 0x27, 0x49, 0xb9, 0xab, 0xd0, 0x61, 0xfe, + 0xc0, 0x73, 0xe3, 0x83, 0x9d, 0xc2, 0x6f, 0x32, 0x4b, 0x76, 0xf6, 0xd4, 0xa8, 0xa4, 0xdc, 0x54, + 0x92, 0xf2, 0x32, 0xb4, 0x86, 0xc1, 0x9e, 0xeb, 0x65, 0x71, 0x2f, 0x28, 0x8c, 0x79, 0xe6, 0x31, + 0xcc, 0xce, 0x79, 0xcc, 0x67, 0x8c, 0x22, 0x51, 0xcf, 0xd4, 0x26, 0xea, 0xb6, 0x9c, 0xa8, 0x55, + 0xc7, 0x43, 0xc5, 0xf1, 0xe4, 0xae, 0x4e, 0xee, 0xae, 0x3f, 0x6a, 0xb0, 0x58, 0xb8, 0x9b, 0x6a, + 0xd0, 0x91, 0xee, 0x2a, 0x47, 0xa0, 0x5e, 0x13, 0x81, 0x79, 0xdc, 0x34, 0xe4, 0xb8, 0xe1, 0x91, + 0x16, 0xc4, 0xae, 0x54, 0xef, 0xe7, 0x34, 0xef, 0xcd, 0x63, 0xb6, 0xe4, 0x2c, 0xa2, 0xa4, 0xaa, + 0xbb, 0xa5, 0x54, 0xdd, 0xe5, 0x3c, 0xfa, 0x3b, 0x0d, 0xce, 0x73, 0x94, 0x2b, 0xc3, 0xb8, 0x09, + 0x8b, 0x41, 0x29, 0x12, 0x44, 0xa2, 0x79, 0xba, 0x26, 0x51, 0x94, 0x83, 0xc6, 0xaa, 0x08, 0x73, + 0x85, 0x4e, 0xa9, 0x13, 0x91, 0x79, 0xea, 0x14, 0x96, 0xed, 0xb1, 0x2a, 0xc2, 0xe6, 0xef, 0x35, + 0x58, 0xa4, 0xd4, 0x26, 0xcd, 0xf3, 0x33, 0x37, 0xfb, 0x1d, 0x38, 0x5f, 0xee, 0xf9, 0x86, 0x1b, + 0x27, 0x5d, 0x7d, 0xb5, 0x31, 0xae, 0xe9, 0xb5, 0x0a, 0xf8, 0x5c, 0x7b, 0x72, 0x37, 0xf5, 0xbc, + 0x6d, 0x16, 0xc7, 0xf6, 0x80, 0x6d, 0xdc, 0xef, 0xb1, 0x23, 0xfe, 0xc1, 0x62, 0x47, 0x23, 0x63, + 0x88, 0xd7, 0x39, 0x58, 0x28, 0xb8, 0x81, 0x9f, 0x87, 0x90, 0xcc, 0xe2, 0xd3, 0x2a, 0x26, 0x3d, + 0xdd, 0xc6, 0x6a, 0x83, 0xa7, 0x50, 0x41, 0x1a, 0xdf, 0x81, 0x59, 0xcc, 0xe1, 0xa2, 0x9b, 0xee, + 0x14, 0x0e, 0xe0, 0xb5, 0xda, 0xaa, 0xa1, 0xd6, 0x2a, 0xaa, 0x06, 0x04, 0xfd, 0x86, 0x9f, 0x44, + 0xf7, 0x2d, 0x45, 0xe3, 0xca, 0xbb, 0xb0, 0x54, 0x69, 0x62, 0x2c, 0x42, 0xe3, 0x90, 0xdd, 0x17, + 0xe3, 0xe0, 0x3f, 0x8d, 0x17, 0xa0, 0x79, 0x6c, 0x7b, 0x29, 0x13, 0xe8, 0xaf, 0xd4, 0x58, 0x20, + 0x6c, 0xb6, 0xa8, 0xe1, 0x2b, 0xfa, 0x57, 0x35, 0xf3, 0xe9, 0x7c, 0x60, 0xf2, 0x18, 0x35, 0x65, + 0x8c, 0xe6, 0x5b, 0xd0, 0xd9, 0x8e, 0x07, 0x5b, 0x76, 0x62, 0x63, 0xc3, 0xd7, 0xa0, 0x33, 0x2c, + 0x48, 0x6c, 0x5c, 0xdf, 0x9f, 0x10, 0xb2, 0xe4, 0xe6, 0xe6, 0x5f, 0x74, 0xe8, 0xd6, 0xbb, 0x22, + 0x0e, 0xb9, 0x0d, 0x2c, 0x8a, 0x36, 0x03, 0x87, 0xe1, 0xd0, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, + 0x14, 0xf1, 0x1c, 0x26, 0x8a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, + 0xb6, 0x33, 0x86, 0xb0, 0x88, 0xde, 0x95, 0x06, 0x24, 0x30, 0x5b, 0x1f, 0x1b, 0xb3, 0x38, 0x24, + 0xd0, 0x24, 0x1d, 0x04, 0x5c, 0x45, 0xf5, 0x4a, 0x1f, 0x9e, 0xa8, 0x6d, 0x5a, 0x03, 0xe0, 0x57, + 0x54, 0x00, 0x2f, 0x8e, 0x1e, 0x4a, 0x19, 0xc4, 0x10, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, 0xad, + 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xed, 0x79, 0x0e, 0x53, + 0xdb, 0x92, 0x59, 0x23, 0x77, 0xed, 0xa5, 0xf9, 0xd0, 0xa8, 0xcc, 0x07, 0xf3, 0x32, 0xcc, 0xca, + 0xdd, 0x61, 0x12, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x0e, 0x68, 0xce, 0x12, 0x14, 0xf2, 0xb1, 0x85, + 0xd8, 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xe3, + 0xa5, 0x31, 0x2a, 0x5e, 0xa6, 0x94, 0x78, 0x39, 0x84, 0x25, 0x02, 0x49, 0xea, 0xba, 0xdb, 0xc4, + 0x00, 0x78, 0xbd, 0xae, 0x54, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, + 0x83, 0xe5, 0xfa, 0xc6, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xd9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, + 0xfc, 0x8f, 0x60, 0x81, 0x2f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x1d, 0xb9, 0x0a, 0x1d, + 0x92, 0xdf, 0x8e, 0x07, 0xc5, 0xd6, 0x4d, 0x62, 0xf1, 0x16, 0x7d, 0xcf, 0xe5, 0x8b, 0x27, 0xb6, + 0x10, 0x8b, 0x9e, 0xc4, 0xe2, 0x09, 0x32, 0x66, 0xe2, 0x24, 0x83, 0x7b, 0xb7, 0x61, 0xe5, 0xb4, + 0xf9, 0x7e, 0x0b, 0xa6, 0x45, 0x34, 0x62, 0x52, 0xe4, 0xbb, 0xe5, 0x7c, 0x59, 0x25, 0x8a, 0xea, + 0xda, 0xfe, 0x71, 0x11, 0x5e, 0x44, 0xc9, 0xc7, 0x48, 0x0d, 0xf5, 0x18, 0xa9, 0x64, 0xd3, 0x54, + 0xd5, 0xa6, 0xd2, 0xb8, 0x9a, 0xd5, 0x71, 0xf1, 0x32, 0x0e, 0x2b, 0x9b, 0x5d, 0xcf, 0x4e, 0xf6, + 0x83, 0x68, 0x28, 0x36, 0xbf, 0x4d, 0xab, 0xc2, 0xe7, 0xa5, 0x23, 0xf1, 0xf2, 0xda, 0x9f, 0x52, + 0x78, 0x89, 0xcb, 0x2b, 0x6d, 0xe2, 0x64, 0x7b, 0x00, 0x3a, 0x75, 0x50, 0x99, 0x64, 0x5b, 0x1c, + 0xbb, 0x81, 0x8f, 0x55, 0x28, 0x95, 0xfa, 0x32, 0x8b, 0x8f, 0x7c, 0x18, 0x0f, 0xae, 0x44, 0xc1, + 0x50, 0x9c, 0x3d, 0x64, 0x24, 0x8e, 0x3c, 0xf0, 0x93, 0xac, 0x82, 0xed, 0x90, 0xac, 0xc4, 0xe2, + 0xb2, 0x82, 0xc4, 0x3a, 0x7f, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0xc5, 0x3b, 0xff, + 0xa9, 0x20, 0xb7, 0xa0, 0x22, 0x57, 0xaa, 0xc6, 0x16, 0xf1, 0xab, 0x5c, 0x8d, 0x15, 0x25, 0xce, + 0x92, 0x52, 0xe2, 0xac, 0xc3, 0x74, 0x10, 0xf2, 0xe9, 0x1f, 0x77, 0x0d, 0x9c, 0x2e, 0x9f, 0x1f, + 0xbd, 0x40, 0x5d, 0xba, 0x49, 0x2d, 0x69, 0x62, 0x64, 0x72, 0xc6, 0x0d, 0x58, 0x08, 0xf6, 0xf7, + 0x3d, 0xd7, 0x67, 0xbb, 0x69, 0x7c, 0x80, 0x9b, 0xe4, 0x73, 0x18, 0xec, 0x66, 0x5d, 0x11, 0xa1, + 0xb6, 0xb4, 0xca, 0xa2, 0xbc, 0xf2, 0xb3, 0x13, 0xda, 0xe4, 0xe0, 0x02, 0x77, 0x1e, 0x17, 0x38, + 0x85, 0x87, 0xe7, 0x71, 0xd2, 0x42, 0xff, 0x04, 0x3a, 0x4e, 0x66, 0xad, 0xbc, 0x02, 0xb3, 0xb2, + 0xb1, 0x35, 0x13, 0xf3, 0xbc, 0x3c, 0x31, 0x67, 0xe4, 0x79, 0xf7, 0x63, 0x0d, 0x16, 0x4a, 0x66, + 0xf2, 0xd6, 0x89, 0x9b, 0x78, 0x4c, 0x68, 0x20, 0x82, 0xef, 0x74, 0x1c, 0x16, 0xf7, 0xc5, 0x44, + 0xc0, 0xdf, 0xa2, 0x66, 0x6c, 0xe4, 0xe7, 0x57, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, + 0x48, 0x7d, 0x27, 0x3f, 0x83, 0x96, 0x78, 0x3c, 0x10, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, + 0x3a, 0x29, 0x6e, 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, + 0xc8, 0xe1, 0x74, 0x58, 0xc2, 0x6b, 0x72, 0x0d, 0x07, 0x2f, 0x28, 0xee, 0x19, 0x87, 0xed, 0xdb, + 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xf4, 0x97, 0x58, 0x78, 0x46, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, + 0x9d, 0x12, 0xc7, 0xfc, 0x93, 0x0e, 0x8b, 0xb8, 0xba, 0x6d, 0x62, 0xf0, 0x38, 0x28, 0xf4, 0x22, + 0x34, 0x71, 0x32, 0x8b, 0xea, 0xf0, 0xe4, 0xd3, 0x0f, 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, + 0x49, 0x49, 0x4b, 0xdf, 0x33, 0xa3, 0x84, 0xd4, 0xe3, 0x68, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, + 0x45, 0x05, 0x49, 0x85, 0xc0, 0xb8, 0x3a, 0x24, 0x49, 0xee, 0xdc, 0x3c, 0xc7, 0xe5, 0x67, 0xd2, + 0x0d, 0x4b, 0x65, 0x1a, 0x3b, 0x30, 0x8f, 0x66, 0xdf, 0xcc, 0x8e, 0xc1, 0x10, 0x83, 0xf1, 0x7b, + 0x2c, 0x49, 0x9b, 0x3f, 0xd7, 0x84, 0x1b, 0xf9, 0xd7, 0x1e, 0x23, 0xdf, 0x17, 0x2e, 0xd1, 0x26, + 0x72, 0xc9, 0x0a, 0xcc, 0x0c, 0x53, 0xe9, 0x54, 0xae, 0x61, 0xe5, 0x74, 0x01, 0x51, 0x63, 0x6c, + 0x88, 0xcc, 0x5f, 0x68, 0xd0, 0x7d, 0x33, 0x70, 0x7d, 0xfc, 0xb0, 0x1e, 0x86, 0x9e, 0xb8, 0x38, + 0x99, 0x18, 0xf3, 0xaf, 0x43, 0xdb, 0x26, 0x35, 0x7e, 0x22, 0x60, 0x1f, 0xe3, 0xa4, 0xad, 0x90, + 0x91, 0x0e, 0x4d, 0x1a, 0xf2, 0xa1, 0x89, 0xf9, 0xa1, 0x06, 0xf3, 0xe4, 0x94, 0xb7, 0x53, 0x37, + 0x99, 0xd8, 0xbe, 0x0d, 0x98, 0x39, 0x4a, 0xdd, 0x64, 0x82, 0xa8, 0xcc, 0xe5, 0xaa, 0xf1, 0xd4, + 0xa8, 0x89, 0x27, 0xf3, 0x23, 0x0d, 0x2e, 0x94, 0xdd, 0xba, 0xde, 0xef, 0xb3, 0xf0, 0x61, 0x4e, + 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, 0xb2, 0xc5, 0xee, 0xb0, 0xfe, 0xa3, 0x6b, + 0xf2, 0xf7, 0x75, 0xf8, 0xf4, 0xd5, 0x7c, 0xe2, 0xdd, 0x8a, 0x6c, 0x3f, 0xde, 0x67, 0x51, 0xf4, + 0x10, 0xed, 0xbd, 0x01, 0x73, 0x3e, 0xbb, 0x5b, 0xd8, 0x24, 0xa6, 0xe3, 0xb8, 0x6a, 0x54, 0xe1, + 0xf1, 0xd6, 0x2e, 0xf3, 0x3f, 0x1a, 0x2c, 0x92, 0x9e, 0xb7, 0xdc, 0xfe, 0xe1, 0x43, 0x1c, 0xfc, + 0x0e, 0xcc, 0x1f, 0xa2, 0x05, 0x9c, 0x9a, 0x60, 0xd9, 0x2e, 0x49, 0x8f, 0x39, 0xfc, 0xff, 0x6a, + 0xb0, 0x44, 0x8a, 0xae, 0xfb, 0xc7, 0xee, 0xc3, 0x0c, 0xd6, 0x5d, 0x58, 0x70, 0xc9, 0x84, 0x09, + 0x1d, 0x50, 0x16, 0x1f, 0xd3, 0x03, 0xbf, 0xd5, 0x60, 0x81, 0x34, 0xbd, 0xe1, 0x27, 0x2c, 0x9a, + 0x78, 0xfc, 0xd7, 0xa0, 0xc3, 0xfc, 0x24, 0xb2, 0xfd, 0x49, 0x56, 0x48, 0x59, 0x74, 0xcc, 0x45, + 0xf2, 0x43, 0x0d, 0x0c, 0x54, 0xb5, 0xe5, 0xc6, 0x43, 0x37, 0x8e, 0x1f, 0x22, 0x74, 0xe3, 0x19, + 0xfc, 0x53, 0x1d, 0xce, 0x4b, 0x5a, 0xb6, 0xd3, 0xe4, 0x51, 0x37, 0xd9, 0xd8, 0x82, 0x36, 0xaf, + 0x11, 0xe4, 0xdb, 0xc8, 0x71, 0x3b, 0x2a, 0x04, 0x79, 0x15, 0x8b, 0x44, 0x8f, 0xf5, 0x03, 0xdf, + 0x89, 0xb1, 0x38, 0x9a, 0xb3, 0x14, 0x1e, 0x5f, 0x86, 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, + 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0x53, 0x93, 0x47, 0x7f, 0xc8, 0x3c, 0xd7, 0x53, + 0x20, 0x7f, 0x62, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, 0x91, 0xeb, 0xea, 0x47, 0x37, 0xb4, 0xae, + 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x80, + 0xdf, 0xa4, 0x4f, 0x38, 0xfc, 0x97, 0x4a, 0x43, 0x39, 0xf1, 0xb5, 0xc1, 0x83, 0x39, 0xfd, 0x10, + 0x96, 0xe8, 0xd6, 0x57, 0xaa, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x43, 0x68, 0x28, 0x94, + 0x91, 0xea, 0x7d, 0xbe, 0x78, 0xb2, 0x55, 0xdc, 0xe7, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, + 0x72, 0x5c, 0x3f, 0x2b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, + 0xfe, 0xf6, 0xc4, 0x1b, 0x66, 0xf9, 0xee, 0x57, 0x57, 0xef, 0x7e, 0xcd, 0x6f, 0xc3, 0x13, 0x15, + 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x2d, 0x9d, 0x75, 0x22, 0x42, 0xa6, 0xee, 0x5c, 0x4e, 0xb6, 0xc5, + 0x52, 0x84, 0xcc, 0xf7, 0x35, 0x78, 0xaa, 0xa2, 0x7e, 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, + 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc1, 0x88, + 0x5f, 0x6a, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, 0xcb, 0xd0, 0xa2, 0x27, 0x2d, 0xa2, 0xc3, + 0xa7, 0x6a, 0x3b, 0xcc, 0x9e, 0xe2, 0x58, 0xa2, 0x71, 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0xb5, + 0x3c, 0xd8, 0xc7, 0x7e, 0x74, 0x22, 0x04, 0xcc, 0x6f, 0x66, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, + 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0xaf, 0x29, 0x7c, 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, + 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x97, 0xe1, 0x5c, + 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, 0xa7, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, + 0x3f, 0x66, 0x51, 0x4c, 0x17, 0x89, 0x28, 0x92, 0x49, 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, + 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x50, 0x6b, 0xca, 0x01, 0x75, + 0x71, 0xa0, 0xad, 0x2b, 0x07, 0xda, 0x17, 0xa0, 0xed, 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, + 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xc2, 0x08, 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, + 0x93, 0x9c, 0x1e, 0x79, 0xfd, 0x32, 0xf2, 0xb2, 0xd1, 0xec, 0xc1, 0x92, 0x78, 0x54, 0xb3, 0x6b, + 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, 0xc8, 0x1e, 0xd5, 0xd1, 0xb5, 0x99, 0xc4, + 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, 0xf7, 0x82, 0x63, 0x7e, 0x03, 0x0c, 0x8b, + 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, + 0x5e, 0x98, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, 0x23, 0x76, 0x89, 0x63, 0xfe, 0xac, 0x01, + 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, + 0xba, 0x23, 0x5f, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, 0x5d, 0xfb, 0x94, 0x25, 0x64, 0x8c, 0xb7, + 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, 0xbe, 0x70, 0x8a, 0x12, 0xd1, 0x9a, 0x74, + 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, + 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, + 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, + 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, + 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, 0xe6, 0x07, 0x0d, 0x80, 0xac, 0x61, 0x8c, + 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x5f, + 0x1c, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, + 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, + 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, + 0x3e, 0xd2, 0x61, 0x1e, 0x5d, 0x46, 0xb7, 0xb0, 0xfe, 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, + 0x8d, 0xa6, 0xca, 0x34, 0xbe, 0x04, 0x4b, 0xc4, 0x60, 0xd2, 0x75, 0x89, 0x8e, 0xd7, 0x25, 0xd5, + 0x0f, 0x78, 0x41, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, + 0x7d, 0x37, 0x55, 0x79, 0x05, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0x97, 0x13, 0x14, 0x97, 0x48, 0xdc, + 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xef, 0xa8, 0x1c, 0xd7, 0xc6, 0x4b, 0x2f, 0xf1, + 0xc8, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xe2, 0x89, 0x57, 0xda, 0x05, 0xe7, 0xf4, 0x0b, 0x37, + 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, + 0x71, 0x0c, 0xca, 0x43, 0x4d, 0xed, 0xc1, 0x1e, 0x6a, 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, + 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x3a, 0x6d, 0x3c, 0xf0, 0xab, 0x53, 0xf3, 0x87, 0x3a, 0x2c, + 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, + 0x59, 0x92, 0x50, 0xdd, 0x4d, 0x5e, 0x63, 0xf2, 0x9b, 0xbc, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, + 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, + 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, + 0xac, 0x5d, 0x90, 0xe6, 0x8f, 0x74, 0x58, 0xae, 0xcf, 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, + 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, + 0x96, 0x52, 0x9d, 0xf9, 0x9b, 0xdc, 0x3f, 0x79, 0xa5, 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, + 0x69, 0x98, 0xd2, 0xd3, 0x0f, 0x2a, 0x5c, 0x2b, 0xfc, 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, + 0xec, 0x1f, 0xb4, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x44, 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, + 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, + 0x83, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0x6d, 0xea, 0x99, 0x6e, 0x14, 0xcb, 0x2f, 0xf8, + 0xa6, 0xaa, 0x2f, 0xf8, 0x36, 0x60, 0x5e, 0x36, 0x60, 0x92, 0xb7, 0x97, 0x1b, 0x17, 0xbe, 0xb5, + 0x72, 0xe9, 0x79, 0xfa, 0x1f, 0xe7, 0xab, 0x15, 0x27, 0xee, 0xb5, 0xf0, 0x7f, 0x9d, 0x2f, 0xfd, + 0x2f, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x19, 0x19, 0x47, 0xea, 0x39, 0x00, 0x00, } From 043188ab5e6436b25f7bf87e18f131853e46ddc9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:24:13 +0800 Subject: [PATCH 513/752] push update --- internal/msg_gateway/gate/batch_push.go | 78 ++++++++++++------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 7a21dde73..acb314284 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -36,43 +36,43 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int]*sdk_ws.MsgDataList { user2PushMsg := make(map[int]*sdk_ws.MsgDataList, 0) - //for _, v := range platformIDList { - //user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - //log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - //} + for _, v := range platformIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + //log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + } return user2PushMsg } -func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { +func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) *sdk_ws.MsgDataList { msgData.MsgDataList = nil - return []*sdk_ws.MsgData{msgData} + return &sdk_ws.MsgDataList{} - userConn := ws.getUserConn(pushToUserID, platformID) - if userConn == nil { - log.Debug(operationID, "userConn == nil") - return []*sdk_ws.MsgData{msgData} - } - - if msgData.Seq <= userConn.PushedMaxSeq { - log.Debug(operationID, "msgData.Seq <= userConn.PushedMaxSeq", msgData.Seq, userConn.PushedMaxSeq) - return nil - } - - msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) - if msgList == nil { - log.Debug(operationID, "GetSingleUserMsg msgList == nil", msgData.Seq, userConn.PushedMaxSeq) - userConn.PushedMaxSeq = msgData.Seq - return []*sdk_ws.MsgData{msgData} - } - msgList = append(msgList, msgData) - - for _, v := range msgList { - if v.Seq > userConn.PushedMaxSeq { - userConn.PushedMaxSeq = v.Seq - } - } - log.Debug(operationID, "GetSingleUserMsg msgList len ", len(msgList), userConn.PushedMaxSeq) - return msgList + //userConn := ws.getUserConn(pushToUserID, platformID) + //if userConn == nil { + // log.Debug(operationID, "userConn == nil") + // return []*sdk_ws.MsgData{msgData} + //} + // + //if msgData.Seq <= userConn.PushedMaxSeq { + // log.Debug(operationID, "msgData.Seq <= userConn.PushedMaxSeq", msgData.Seq, userConn.PushedMaxSeq) + // return nil + //} + // + //msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) + //if msgList == nil { + // log.Debug(operationID, "GetSingleUserMsg msgList == nil", msgData.Seq, userConn.PushedMaxSeq) + // userConn.PushedMaxSeq = msgData.Seq + // return []*sdk_ws.MsgData{msgData} + //} + //msgList = append(msgList, msgData) + // + //for _, v := range msgList { + // if v.Seq > userConn.PushedMaxSeq { + // userConn.PushedMaxSeq = v.Seq + // } + //} + //log.Debug(operationID, "GetSingleUserMsg msgList len ", len(msgList), userConn.PushedMaxSeq) + //return msgList } func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, userID string) []*sdk_ws.MsgData { @@ -102,10 +102,10 @@ func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, u return reply.List } -func (r *RPCServer) GetBatchUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID int) map[string][]*sdk_ws.MsgData { - user2PushMsg := make(map[string][]*sdk_ws.MsgData, 0) - for _, v := range pushToUserIDList { - user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, v, platformID) - } - return user2PushMsg -} +//func (r *RPCServer) GetBatchUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID int) map[string][]*sdk_ws.MsgData { +// user2PushMsg := make(map[string][]*sdk_ws.MsgData, 0) +// for _, v := range pushToUserIDList { +// user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, v, platformID) +// } +// return user2PushMsg +//} From 94ec584dc3ea7dc97639fa25034b3c03e24be3a5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 15:42:48 +0800 Subject: [PATCH 514/752] signal --- internal/msg_gateway/gate/logic.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 884f5f842..ad218907b 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -198,7 +198,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { } func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) if isPass { @@ -226,7 +226,7 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { MsgData: &msgData, } log.NewInfo(m.OperationID, utils.GetSelfFuncName(), "pbData: ", pbData) - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, msgData) + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, "session Type", msgData.SessionType) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) client := pbChat.NewChatClient(etcdConn) reply, err := client.SendMsg(context.Background(), &pbData) From d43b9fc6c14a0de9b7d8cbe439118b977f113344 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:58:14 +0800 Subject: [PATCH 515/752] redis model update --- pkg/common/db/newRedisModel.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ab7a28d8c..5b5e74a7c 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -10,6 +10,7 @@ import ( "context" "errors" "fmt" + "github.com/golang/protobuf/jsonpb" "github.com/garyburd/redigo/redis" @@ -33,22 +34,21 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - result, err := d.rdb.HGetAll(context.Background(), key).Result() + result, err := d.rdb.Get(context.Background(), key).Result() if err != nil { errResult = err failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "redis get message error:", err.Error(), v) } else { - msg, err := Map2Pb(result) - //msg := pbCommon.MsgData{} - //err = jsonpb.UnmarshalString(result, &msg) + msg := pbCommon.MsgData{} + err = jsonpb.UnmarshalString(result, &msg) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) } else { log2.NewDebug(operationID, "redis get msg is ", msg.String()) - seqMsg = append(seqMsg, msg) + seqMsg = append(seqMsg, &msg) } } @@ -69,21 +69,18 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) - s, err := utils.Pb2Map(msg.MsgData) + s, err := utils.Pb2String(msg.MsgData) if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2Map failed", msg.MsgData.String(), uid, err.Error()) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) continue } - log2.NewDebug(operationID, "convert map is ", s) - fmt.Println("ts", s) - err = d.rdb.HMSet(context.Background(), key, s).Err() + log2.NewDebug(operationID, "convert string is ", s) + err = d.rdb.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err() //err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { - return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) failedList = append(failedList, *msg) } - d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) From 034201a45b6d20ab00f2dddac52fa60a855eb499 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 16:09:34 +0800 Subject: [PATCH 516/752] redis model update --- pkg/common/db/redisModel_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 2d6fb5544..de05583df 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -82,7 +82,7 @@ func Test_NewGetMessageListBySeq(t *testing.T) { data.ClientMsgID = "23jwhjsdf" msg.MsgData = &data - seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{11}, "cacheTest") + seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{1212}, "cacheTest") assert.Nil(t, err) fmt.Println(seqMsg, failedSeqList) From 6dfba3c7b895aac0977b93d675193fefe611730f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 16:25:03 +0800 Subject: [PATCH 517/752] group --- internal/api/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 7d8a89564..529e7494c 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -858,5 +858,5 @@ func SetGroupMemberInfo(c *gin.Context) { resp.ErrMsg = respPb.CommonResp.ErrMsg resp.ErrCode = respPb.CommonResp.ErrCode log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", resp) - c.JSON(http.StatusInternalServerError, resp) + c.JSON(http.StatusOK, resp) } From 4bc9da3910288594b9ae8c8b33eb82d5c5f56bec Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 17:19:48 +0800 Subject: [PATCH 518/752] set groupID --- internal/rpc/group/group.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index ad98775f6..348efcc05 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -17,6 +17,7 @@ import ( pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" + "math/big" "net" "strconv" "strings" @@ -101,9 +102,13 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR groupId := req.GroupInfo.GroupID if groupId == "" { - groupId = utils.Md5(strconv.FormatInt(time.Now().UnixNano(), 10)) + groupId = utils.Md5(req.OperationID + strconv.FormatInt(time.Now().UnixNano(), 10)) + bi := big.NewInt(0) + bi.SetString(groupId[0:8], 16) + groupId = bi.String() } //to group + groupInfo := db.Group{} utils.CopyStructFields(&groupInfo, req.GroupInfo) groupInfo.CreatorUserID = req.OpUserID From 5be23220e4ab73e761890ad6572d63c593660365 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 18:27:52 +0800 Subject: [PATCH 519/752] super group --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 5e7daf0e8..a82560c84 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("SuperGroupOnlineBatchPushOneMsg push data to client rpc err", pushMsg.OperationID, "err", err) continue From 257e98edb2dc0ab9a1dd443d82af1ecbd3439ab1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 20:11:43 +0800 Subject: [PATCH 520/752] group --- pkg/common/db/newRedisModel.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index daac3f62a..61b4c563b 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -169,8 +169,10 @@ func (d *DataBases) GetSignalInfoFromCacheByClientMsgID(clientMsgID string) (inv switch req2 := req.Payload.(type) { case *pbRtc.SignalReq_Invite: invitationInfo.Invitation = req2.Invite.Invitation + invitationInfo.OpUserID = req2.Invite.OpUserID case *pbRtc.SignalReq_InviteInGroup: invitationInfo.Invitation = req2.InviteInGroup.Invitation + invitationInfo.OpUserID = req2.InviteInGroup.OpUserID } return invitationInfo, err } From 52199fb5d3d70e9127690585572b1286d1fc6122 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 21:08:25 +0800 Subject: [PATCH 521/752] config --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 35029a766..fa6934593 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -229,7 +229,7 @@ chatpersistencemysql: true #可靠性存储 reliablestorage: false #消息缓存时间 -msgCacheTimeout: 1800 +msgCacheTimeout: 3600 #群聊已读开启 groupMessageHasReadReceiptEnable: false #单聊已读开启 From 7308d0f9c6dbcb5bd5aeed40dfc98270e5ce5674 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 14 Jun 2022 10:37:39 +0800 Subject: [PATCH 522/752] config --- internal/msg_gateway/gate/batch_push.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index acb314284..6640fa485 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -44,8 +44,8 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData } func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) *sdk_ws.MsgDataList { - msgData.MsgDataList = nil - return &sdk_ws.MsgDataList{} + //msgData.MsgDataList = nil + return &sdk_ws.MsgDataList{MsgDataList: []*sdk_ws.MsgData{msgData}} //userConn := ws.getUserConn(pushToUserID, platformID) //if userConn == nil { From d797d7b47a5e6c22d8ed8daa74c6c95c5ff44b48 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 10:41:52 +0800 Subject: [PATCH 523/752] rtc --- pkg/proto/rtc/rtc.pb.go | 278 +- pkg/proto/rtc/rtc.proto | 10 +- pkg/proto/sdk_ws/ws.pb.go | 5237 ------------------------------------- pkg/proto/sdk_ws/ws.proto | 10 +- 4 files changed, 149 insertions(+), 5386 deletions(-) delete mode 100644 pkg/proto/sdk_ws/ws.pb.go diff --git a/pkg/proto/rtc/rtc.pb.go b/pkg/proto/rtc/rtc.pb.go index d64812299..1a13ddc6f 100644 --- a/pkg/proto/rtc/rtc.pb.go +++ b/pkg/proto/rtc/rtc.pb.go @@ -35,7 +35,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{0} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -97,7 +97,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{1} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{1} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -265,7 +265,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{2} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{2} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -389,7 +389,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{3} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{3} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -492,7 +492,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{4} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{4} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -548,7 +548,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{5} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{5} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -617,7 +617,7 @@ func (m *GetJoinTokenReq) Reset() { *m = GetJoinTokenReq{} } func (m *GetJoinTokenReq) String() string { return proto.CompactTextString(m) } func (*GetJoinTokenReq) ProtoMessage() {} func (*GetJoinTokenReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{6} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{6} } func (m *GetJoinTokenReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinTokenReq.Unmarshal(m, b) @@ -678,7 +678,7 @@ func (m *GetJoinTokenResp) Reset() { *m = GetJoinTokenResp{} } func (m *GetJoinTokenResp) String() string { return proto.CompactTextString(m) } func (*GetJoinTokenResp) ProtoMessage() {} func (*GetJoinTokenResp) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{7} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{7} } func (m *GetJoinTokenResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinTokenResp.Unmarshal(m, b) @@ -734,7 +734,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{8} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{8} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -807,7 +807,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{9} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{9} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -1074,7 +1074,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{10} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{10} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -1329,11 +1329,11 @@ type InvitationInfo struct { CustomData string `protobuf:"bytes,3,opt,name=customData" json:"customData,omitempty"` GroupID string `protobuf:"bytes,4,opt,name=groupID" json:"groupID,omitempty"` RoomID string `protobuf:"bytes,5,opt,name=roomID" json:"roomID,omitempty"` - InitiateTime int32 `protobuf:"varint,6,opt,name=initiateTime" json:"initiateTime,omitempty"` - Timeout int32 `protobuf:"varint,7,opt,name=timeout" json:"timeout,omitempty"` - MediaType string `protobuf:"bytes,8,opt,name=mediaType" json:"mediaType,omitempty"` - PlatformID int32 `protobuf:"varint,9,opt,name=platformID" json:"platformID,omitempty"` - SessionType int32 `protobuf:"varint,10,opt,name=sessionType" json:"sessionType,omitempty"` + Timeout int32 `protobuf:"varint,6,opt,name=timeout" json:"timeout,omitempty"` + MediaType string `protobuf:"bytes,7,opt,name=mediaType" json:"mediaType,omitempty"` + PlatformID int32 `protobuf:"varint,8,opt,name=platformID" json:"platformID,omitempty"` + SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` + InitiateTime int32 `protobuf:"varint,10,opt,name=initiateTime" json:"initiateTime,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1343,7 +1343,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{11} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{11} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -1398,13 +1398,6 @@ func (m *InvitationInfo) GetRoomID() string { return "" } -func (m *InvitationInfo) GetInitiateTime() int32 { - if m != nil { - return m.InitiateTime - } - return 0 -} - func (m *InvitationInfo) GetTimeout() int32 { if m != nil { return m.Timeout @@ -1433,6 +1426,13 @@ func (m *InvitationInfo) GetSessionType() int32 { return 0 } +func (m *InvitationInfo) GetInitiateTime() int32 { + if m != nil { + return m.InitiateTime + } + return 0 +} + type SignalInviteReq struct { OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` @@ -1447,7 +1447,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{12} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{12} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -1508,7 +1508,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{13} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{13} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -1563,7 +1563,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{14} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{14} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -1624,7 +1624,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{15} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{15} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -1679,7 +1679,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{16} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{16} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -1737,7 +1737,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{17} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{17} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -1772,7 +1772,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{18} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{18} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -1840,7 +1840,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{19} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{19} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -1894,7 +1894,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{20} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{20} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -1945,7 +1945,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{21} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{21} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -1980,7 +1980,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{22} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{22} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -2045,7 +2045,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{23} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{23} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -2077,7 +2077,7 @@ func (m *SignalMessageAssembleReq) Reset() { *m = SignalMessageAssembleR func (m *SignalMessageAssembleReq) String() string { return proto.CompactTextString(m) } func (*SignalMessageAssembleReq) ProtoMessage() {} func (*SignalMessageAssembleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{24} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{24} } func (m *SignalMessageAssembleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalMessageAssembleReq.Unmarshal(m, b) @@ -2125,7 +2125,7 @@ func (m *SignalMessageAssembleResp) Reset() { *m = SignalMessageAssemble func (m *SignalMessageAssembleResp) String() string { return proto.CompactTextString(m) } func (*SignalMessageAssembleResp) ProtoMessage() {} func (*SignalMessageAssembleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_rtc_62dedd07770ec854, []int{25} + return fileDescriptor_rtc_2059f33abbeeea7e, []int{25} } func (m *SignalMessageAssembleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalMessageAssembleResp.Unmarshal(m, b) @@ -2275,107 +2275,107 @@ var _RtcService_serviceDesc = grpc.ServiceDesc{ Metadata: "rtc/rtc.proto", } -func init() { proto.RegisterFile("rtc/rtc.proto", fileDescriptor_rtc_62dedd07770ec854) } +func init() { proto.RegisterFile("rtc/rtc.proto", fileDescriptor_rtc_2059f33abbeeea7e) } -var fileDescriptor_rtc_62dedd07770ec854 = []byte{ +var fileDescriptor_rtc_2059f33abbeeea7e = []byte{ // 1579 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0x67, 0xed, 0x38, 0x89, 0x9f, 0xf3, 0x77, 0x42, 0xa3, 0x25, 0xfc, 0xb3, 0xac, 0xaa, 0xb2, - 0x2a, 0x94, 0x52, 0xa3, 0x22, 0x54, 0x10, 0xa2, 0x4d, 0xfa, 0xc7, 0xa8, 0x69, 0xa2, 0x49, 0x73, - 0x29, 0xa7, 0xcd, 0x7a, 0xe2, 0x4e, 0xbb, 0xde, 0xd9, 0xcc, 0xce, 0xa6, 0xcd, 0x17, 0xe0, 0xcc, - 0x85, 0x13, 0x57, 0xc4, 0x57, 0xe0, 0xc6, 0x85, 0xaf, 0x80, 0xc4, 0x17, 0xe8, 0x8d, 0x33, 0x77, - 0x34, 0x6f, 0x66, 0x77, 0x67, 0xd7, 0x4e, 0x01, 0xa9, 0x07, 0x54, 0x4e, 0xde, 0xf7, 0x6f, 0x66, - 0xf6, 0xf7, 0x7e, 0xf3, 0xde, 0xf3, 0xc2, 0xb2, 0x54, 0xe1, 0x35, 0xa9, 0xc2, 0xed, 0x44, 0x0a, - 0x25, 0x48, 0x0b, 0x7f, 0x7a, 0x5f, 0x02, 0xec, 0x88, 0xc9, 0x44, 0xc4, 0x94, 0xa5, 0x09, 0xf1, - 0x61, 0x81, 0x49, 0xb9, 0x23, 0x46, 0xcc, 0xf7, 0xba, 0x5e, 0xbf, 0x45, 0x73, 0x91, 0x6c, 0xc2, - 0x3c, 0x93, 0x72, 0x2f, 0x1d, 0xfb, 0x8d, 0xae, 0xd7, 0x6f, 0x53, 0x2b, 0xf5, 0x7e, 0x6c, 0xc1, - 0xc2, 0x5e, 0x3a, 0xde, 0x0d, 0x54, 0xa0, 0x7d, 0x52, 0x16, 0x8f, 0x86, 0xbb, 0x18, 0xdc, 0xa6, - 0x56, 0xd2, 0x7a, 0xc9, 0xc2, 0xb3, 0xe1, 0x6e, 0x1e, 0x6b, 0x24, 0xbd, 0xdb, 0x58, 0x8a, 0x2c, - 0x19, 0xee, 0xfa, 0x4d, 0x34, 0xe4, 0x22, 0xe9, 0x42, 0x27, 0x8c, 0x38, 0x8b, 0xd5, 0x5e, 0x3a, - 0x1e, 0xee, 0xfa, 0x73, 0x68, 0x75, 0x55, 0xda, 0x23, 0x65, 0xf2, 0x8c, 0x49, 0xe3, 0xd1, 0x32, - 0x1e, 0x8e, 0x8a, 0x5c, 0x85, 0x35, 0xbd, 0x3f, 0x93, 0x07, 0x51, 0xa0, 0x4e, 0x84, 0x9c, 0x0c, - 0x77, 0xfd, 0x79, 0x7c, 0xa9, 0x29, 0x3d, 0xb9, 0x02, 0x2b, 0x46, 0xf7, 0x90, 0x87, 0xcf, 0xe2, - 0x60, 0xc2, 0xfc, 0x05, 0x5c, 0xb0, 0xa6, 0x25, 0x97, 0x61, 0xd9, 0x68, 0xee, 0x06, 0x21, 0x3b, - 0xa2, 0x0f, 0xfc, 0x45, 0x74, 0xab, 0x2a, 0xcd, 0xd9, 0xd2, 0x94, 0x8b, 0xf8, 0xd1, 0x79, 0xc2, - 0xfc, 0x36, 0x6e, 0xea, 0xaa, 0xf4, 0x9b, 0x4f, 0xd2, 0xf1, 0x5d, 0x29, 0x26, 0x3e, 0x18, 0x9c, - 0xad, 0x88, 0x6f, 0x2e, 0x62, 0xc5, 0x62, 0x85, 0xb1, 0x1d, 0x13, 0xeb, 0xa8, 0x74, 0xac, 0x15, - 0xfd, 0xa5, 0xae, 0xd7, 0x5f, 0xa2, 0xb9, 0x48, 0xd6, 0xa0, 0x99, 0xb2, 0x53, 0x7f, 0xa5, 0xeb, - 0xf5, 0x97, 0xa9, 0x7e, 0x24, 0x5b, 0xb0, 0xa8, 0x8f, 0xf6, 0x88, 0x4f, 0x98, 0xbf, 0xda, 0xf5, - 0xfa, 0x4d, 0x5a, 0xc8, 0xe4, 0x03, 0x80, 0x50, 0xb2, 0x40, 0x31, 0xb4, 0xae, 0xa1, 0xd5, 0xd1, - 0x60, 0x36, 0x55, 0xa0, 0xb2, 0xd4, 0x5f, 0xc7, 0x43, 0x58, 0x89, 0xdc, 0x80, 0x05, 0x91, 0x28, - 0x2e, 0xe2, 0xd4, 0x27, 0xdd, 0x66, 0xbf, 0x33, 0x78, 0xd7, 0x30, 0x6a, 0xdb, 0xd2, 0x60, 0x7b, - 0xdf, 0x58, 0xef, 0xc4, 0x4a, 0x9e, 0xd3, 0xdc, 0x97, 0x7c, 0x05, 0xab, 0xe2, 0xe4, 0x24, 0xe2, - 0x31, 0x3b, 0xc8, 0xd2, 0x27, 0xc3, 0xf8, 0x44, 0xf8, 0x1b, 0x5d, 0xaf, 0xdf, 0x19, 0x6c, 0xda, - 0xf0, 0xfd, 0xaa, 0x95, 0xd6, 0xdd, 0xb7, 0x6e, 0xc2, 0x92, 0xbb, 0xb4, 0x7e, 0xdd, 0x67, 0xec, - 0xdc, 0x72, 0x4d, 0x3f, 0x92, 0xb7, 0xa1, 0x75, 0x16, 0x44, 0x19, 0x43, 0x9e, 0x2d, 0x52, 0x23, - 0xdc, 0x6c, 0x7c, 0xe6, 0xf5, 0xfe, 0x6c, 0x40, 0xfb, 0x1e, 0x92, 0x2b, 0x3e, 0x11, 0x2e, 0xf1, - 0xbc, 0x2a, 0xf1, 0xde, 0x83, 0x36, 0x3e, 0x3e, 0xd4, 0x1c, 0x30, 0x6c, 0x2d, 0x15, 0xa4, 0x07, - 0x4b, 0xb1, 0x50, 0xfc, 0x84, 0x87, 0x81, 0x3e, 0x87, 0x65, 0x6d, 0x45, 0xa7, 0x7d, 0x78, 0xac, - 0xa4, 0x18, 0x65, 0x21, 0xfa, 0x18, 0xee, 0x56, 0x74, 0x7a, 0xff, 0x13, 0x4b, 0x20, 0x43, 0xdc, - 0x5c, 0xd4, 0xe9, 0x17, 0xcf, 0x63, 0x26, 0x8f, 0x52, 0x26, 0x2d, 0x5f, 0xdb, 0xd4, 0x55, 0xd5, - 0xd2, 0xb6, 0x80, 0xb9, 0x76, 0xd3, 0xd6, 0x85, 0xce, 0x84, 0x4d, 0x8e, 0x99, 0xdc, 0x11, 0x59, - 0xac, 0x90, 0xa0, 0xcb, 0xd4, 0x55, 0x91, 0x15, 0x68, 0xb0, 0x17, 0xc8, 0xca, 0x36, 0x6d, 0xb0, - 0x17, 0x4e, 0xa2, 0xa1, 0x92, 0xe8, 0xcb, 0xb0, 0x8c, 0xeb, 0x8a, 0xfc, 0x34, 0x1d, 0x43, 0xf6, - 0x8a, 0xb2, 0x40, 0x0c, 0xe9, 0xba, 0x84, 0x0b, 0x94, 0x8a, 0xde, 0xcf, 0x0d, 0xd8, 0x40, 0xdc, - 0xf7, 0xf0, 0x00, 0x77, 0xb3, 0x28, 0xfa, 0x9b, 0x0c, 0x6c, 0xc2, 0x7c, 0x66, 0xb6, 0xb3, 0xc5, - 0x22, 0x2b, 0xf6, 0x91, 0x22, 0x62, 0x0f, 0xd8, 0x19, 0x8b, 0x10, 0xf8, 0x16, 0x2d, 0x15, 0x9a, - 0xe8, 0x4f, 0x05, 0x8f, 0x11, 0x93, 0x39, 0x34, 0x16, 0xb2, 0xb6, 0xc5, 0xf9, 0xb5, 0x36, 0x70, - 0x17, 0xb2, 0x9b, 0x89, 0xf9, 0x6a, 0x26, 0xae, 0xc0, 0x4a, 0x90, 0x24, 0x7b, 0x41, 0x3c, 0x66, - 0xd2, 0x6c, 0xba, 0x80, 0xeb, 0xd6, 0xb4, 0x3a, 0x1f, 0x7a, 0xa7, 0x43, 0x91, 0xc9, 0x90, 0x21, - 0xdc, 0x2d, 0xea, 0x68, 0xf4, 0x3a, 0x22, 0x61, 0xd2, 0x81, 0xd1, 0x20, 0x5f, 0xd3, 0xda, 0xac, - 0x40, 0x9e, 0x95, 0xde, 0x2f, 0x1e, 0x6c, 0x1c, 0x04, 0x52, 0xf1, 0x90, 0x27, 0x41, 0xac, 0xf6, - 0x98, 0x0a, 0xb0, 0xc8, 0x6e, 0x5b, 0xbc, 0xf1, 0x06, 0x79, 0x78, 0x83, 0xd6, 0xec, 0x0d, 0x2a, - 0x08, 0x4e, 0x4b, 0x17, 0xb2, 0x0b, 0xab, 0xe3, 0x32, 0x01, 0x18, 0xd5, 0xc0, 0xa8, 0x2d, 0x37, - 0xaa, 0x9a, 0x1e, 0x5a, 0x0f, 0x21, 0xd7, 0x61, 0x11, 0xf3, 0xa0, 0xc3, 0x9b, 0x18, 0x7e, 0xc9, - 0x86, 0x1f, 0x64, 0xc7, 0x11, 0x0f, 0x8f, 0xac, 0x91, 0x16, 0x6e, 0xbd, 0x6f, 0x3d, 0x58, 0xa9, - 0x1a, 0x9d, 0xdc, 0x7a, 0x95, 0xdc, 0xba, 0x19, 0x6a, 0x5c, 0x9c, 0xa1, 0x66, 0x35, 0x43, 0x9b, - 0x30, 0x3f, 0xc6, 0xba, 0x6b, 0x33, 0x6e, 0x25, 0x8b, 0x64, 0xab, 0x40, 0xf2, 0x07, 0x0f, 0x56, - 0xef, 0x31, 0xf5, 0xb5, 0xe6, 0x83, 0x78, 0xc6, 0x62, 0xca, 0x4e, 0x09, 0x81, 0x39, 0x29, 0xc4, - 0xc4, 0x9e, 0x03, 0x9f, 0xf5, 0x29, 0xf8, 0x88, 0xc5, 0x8a, 0xab, 0xf3, 0xfc, 0x14, 0xb9, 0x4c, - 0x3e, 0x85, 0xc5, 0x89, 0xcd, 0x80, 0x7d, 0xff, 0x1c, 0xbe, 0x19, 0x39, 0xa2, 0x85, 0x2f, 0xde, - 0x67, 0xcc, 0x33, 0x17, 0x71, 0xd9, 0xc8, 0x1c, 0x55, 0xef, 0x14, 0xd6, 0xaa, 0x87, 0x4b, 0x13, - 0x72, 0xdd, 0x6d, 0xca, 0x36, 0xc9, 0xeb, 0x76, 0xbf, 0xd2, 0x40, 0xdd, 0xce, 0xbd, 0x06, 0xcd, - 0xa7, 0xcf, 0x95, 0x3d, 0xb7, 0x7e, 0xd4, 0xc0, 0x45, 0xfc, 0xcc, 0x05, 0xce, 0x8a, 0xbd, 0xef, - 0x3d, 0x58, 0xad, 0x55, 0x5b, 0x5d, 0x3a, 0x15, 0x57, 0x11, 0xb3, 0x88, 0x18, 0x41, 0xc3, 0x34, - 0x62, 0x69, 0x68, 0x97, 0xc5, 0x67, 0x0b, 0x6f, 0xb3, 0x28, 0x1f, 0xba, 0xe0, 0xed, 0x1f, 0xea, - 0x85, 0x0e, 0x45, 0x16, 0x8f, 0x8a, 0x82, 0xe7, 0xe8, 0x74, 0x29, 0xe1, 0xfb, 0x87, 0xb7, 0x83, - 0xd1, 0x98, 0x99, 0xb2, 0xd4, 0xc2, 0x02, 0x5d, 0x55, 0xf6, 0x7e, 0x6f, 0x40, 0xfb, 0x90, 0x8f, - 0xe3, 0x20, 0xd2, 0x29, 0xfa, 0x18, 0xe6, 0x79, 0x7c, 0xc6, 0x15, 0xb3, 0x00, 0xe4, 0x7d, 0xc2, - 0x78, 0x0c, 0xd1, 0x44, 0xd9, 0xe9, 0xfd, 0xb7, 0xa8, 0xf5, 0x23, 0x77, 0x60, 0xd9, 0x3c, 0x0d, - 0x63, 0x24, 0xb5, 0x25, 0xfa, 0xfb, 0x33, 0x02, 0xad, 0x87, 0x89, 0xaf, 0x46, 0xe9, 0x8d, 0xc3, - 0x20, 0x0e, 0x6d, 0x99, 0xa9, 0x6f, 0xbc, 0x83, 0x26, 0xbb, 0xb1, 0xf1, 0xd3, 0x11, 0x41, 0x18, - 0xb2, 0x44, 0xe1, 0xcb, 0xd7, 0x23, 0x6e, 0xa1, 0xc9, 0x46, 0x18, 0x3f, 0x1d, 0xf1, 0x24, 0x8b, - 0xc7, 0x47, 0x09, 0x22, 0x51, 0x8f, 0xb8, 0x8f, 0x26, 0x1b, 0x61, 0xfc, 0x74, 0x84, 0x64, 0x4f, - 0x59, 0xa8, 0xb0, 0x50, 0xd5, 0x23, 0x28, 0x9a, 0x6c, 0x84, 0xf1, 0xbb, 0xdd, 0x86, 0x85, 0x24, - 0x38, 0x8f, 0x44, 0x30, 0xea, 0xbd, 0x6c, 0x00, 0xe4, 0x8e, 0x69, 0x42, 0x06, 0x35, 0x68, 0xfd, - 0x99, 0xd0, 0x26, 0xd1, 0xb9, 0x03, 0xee, 0xbd, 0xd9, 0xe0, 0x7e, 0xf8, 0x2a, 0x70, 0xcd, 0x0a, - 0x35, 0x78, 0x07, 0x35, 0x78, 0xfd, 0x99, 0xf0, 0xda, 0xcd, 0x2d, 0xc0, 0x83, 0x1a, 0xc0, 0xfe, - 0x4c, 0x80, 0x6d, 0x8c, 0x85, 0x78, 0x50, 0x83, 0xd8, 0x9f, 0x09, 0xb1, 0x8d, 0xb1, 0x20, 0x0f, - 0x6a, 0x20, 0xfb, 0x33, 0x41, 0xb6, 0x31, 0xd3, 0x30, 0xff, 0xd6, 0x80, 0x15, 0x84, 0xc0, 0x5c, - 0x6e, 0x7d, 0xaf, 0x2e, 0xe7, 0xb0, 0xe5, 0xd5, 0xdf, 0xdc, 0xaf, 0xaa, 0x92, 0x7c, 0x04, 0xeb, - 0x46, 0xc1, 0x8c, 0xe2, 0x01, 0x4f, 0xf5, 0x5d, 0x6e, 0xf6, 0xdb, 0x74, 0xda, 0x80, 0x23, 0x40, - 0x96, 0x2a, 0x31, 0x29, 0xca, 0x51, 0x9b, 0x3a, 0x1a, 0xb7, 0xb9, 0xce, 0x4d, 0x35, 0x57, 0x5d, - 0xea, 0x8a, 0x81, 0xd9, 0x4a, 0x66, 0x68, 0xe1, 0x8a, 0xe7, 0x63, 0x85, 0x99, 0x93, 0x2b, 0x3a, - 0xbd, 0xaa, 0xe2, 0x13, 0x26, 0x32, 0x65, 0x3b, 0x61, 0x2e, 0xea, 0xd6, 0x3c, 0x61, 0x23, 0x1e, - 0xe0, 0x08, 0x60, 0x26, 0xe2, 0x52, 0xa1, 0x4f, 0x9b, 0x94, 0x13, 0xb8, 0x19, 0x86, 0x1d, 0x4d, - 0x7d, 0x5a, 0x86, 0xa9, 0x69, 0xb9, 0xf7, 0xd2, 0x83, 0xd5, 0xda, 0xad, 0xd7, 0xc5, 0x5a, 0x24, - 0x15, 0x48, 0x0b, 0x99, 0xdc, 0x00, 0xe0, 0x45, 0x16, 0x2c, 0x4f, 0xf3, 0x76, 0x55, 0x4d, 0x0f, - 0x75, 0x1c, 0x67, 0x4d, 0xa8, 0xcd, 0x7f, 0x35, 0xa1, 0x92, 0x2f, 0xa0, 0x93, 0x94, 0xed, 0xc0, - 0x72, 0xf5, 0x55, 0x8d, 0xc2, 0x75, 0xef, 0x7d, 0x03, 0xeb, 0x53, 0x17, 0x10, 0xeb, 0xb2, 0xee, - 0x0b, 0x45, 0x5d, 0xd6, 0x82, 0x93, 0xc7, 0x46, 0x25, 0x8f, 0x17, 0xd7, 0xfc, 0x3f, 0x3c, 0xd8, - 0x9c, 0x5d, 0x00, 0xdf, 0x44, 0x28, 0x8f, 0xc1, 0xbf, 0xa8, 0x20, 0xbd, 0x36, 0x44, 0x4b, 0x56, - 0x16, 0x2d, 0xe1, 0x4d, 0x84, 0x72, 0x23, 0x67, 0xa5, 0x53, 0x99, 0x7b, 0xdf, 0x35, 0xf2, 0x77, - 0x2f, 0x9a, 0xdb, 0x1b, 0xf8, 0xee, 0xe4, 0x2a, 0xac, 0x99, 0x57, 0x70, 0x3e, 0x21, 0xb4, 0xcc, - 0x27, 0x84, 0xba, 0xbe, 0xbc, 0xbd, 0x4e, 0x37, 0x7a, 0x6d, 0x5c, 0xfb, 0xa9, 0xe0, 0x5a, 0x31, - 0x1a, 0xfc, 0x27, 0xf1, 0x2e, 0xd9, 0xe2, 0xf4, 0x57, 0x87, 0x2d, 0xc5, 0x98, 0xf2, 0x7f, 0x67, - 0x4b, 0x81, 0x93, 0x33, 0x53, 0xf4, 0xa2, 0xbc, 0x6a, 0xed, 0xb1, 0x34, 0x0d, 0xc6, 0xec, 0x56, - 0x9a, 0xb2, 0xc9, 0x71, 0x84, 0xfd, 0x6e, 0x1b, 0xda, 0x69, 0x3e, 0x1a, 0xd7, 0xfe, 0xf6, 0x15, - 0x23, 0x33, 0x2d, 0x5d, 0xea, 0x7f, 0x3c, 0x1a, 0xd3, 0x7f, 0x3c, 0x7e, 0xf5, 0xe0, 0x9d, 0x0b, - 0xb6, 0x33, 0x7f, 0x41, 0xc2, 0x7f, 0xf2, 0x17, 0xa4, 0x74, 0xd2, 0xb4, 0xe6, 0xe9, 0x41, 0x90, - 0xa6, 0xf6, 0xf3, 0x8b, 0x95, 0xf4, 0x52, 0x69, 0x31, 0x7b, 0xda, 0x94, 0xac, 0xd7, 0xce, 0xae, - 0x97, 0x2a, 0x9d, 0x48, 0x1f, 0xbf, 0x8f, 0xe1, 0x78, 0x63, 0x92, 0xb0, 0x52, 0xfd, 0xc6, 0x44, - 0x73, 0xf3, 0xe0, 0x09, 0x00, 0x55, 0xe1, 0x21, 0x93, 0x67, 0x3c, 0x64, 0xe4, 0x31, 0x5c, 0x9a, - 0xf9, 0x4a, 0xa4, 0x3a, 0xa6, 0x4e, 0xe3, 0xbb, 0xd5, 0x7d, 0xb5, 0x43, 0x9a, 0xdc, 0xee, 0x3c, - 0x6e, 0x6f, 0x5f, 0x93, 0x2a, 0xfc, 0x5c, 0xaa, 0xf0, 0x78, 0x1e, 0xbd, 0x3f, 0xf9, 0x2b, 0x00, - 0x00, 0xff, 0xff, 0x83, 0xb9, 0x80, 0xa7, 0x55, 0x15, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x6e, 0xdb, 0xc6, + 0x16, 0xbe, 0x94, 0x2c, 0xdb, 0x3a, 0xf2, 0xef, 0xf8, 0xc6, 0xe0, 0xf5, 0xfd, 0x13, 0x84, 0x20, + 0x10, 0x82, 0x0b, 0xe7, 0x46, 0x45, 0x8a, 0x22, 0x2d, 0x8a, 0x26, 0x76, 0x7e, 0x54, 0xc4, 0xb1, + 0x31, 0x8e, 0x37, 0xe9, 0x8a, 0xa6, 0xc6, 0xca, 0x24, 0x24, 0x87, 0x1e, 0x0e, 0x9d, 0xf8, 0x05, + 0xba, 0xee, 0xa6, 0xab, 0x6e, 0x8b, 0xbe, 0x42, 0x77, 0xdd, 0xf4, 0x15, 0x0a, 0xf4, 0x05, 0xb2, + 0xeb, 0xba, 0xfb, 0x62, 0xce, 0x0c, 0xc9, 0x21, 0x2d, 0xa7, 0x29, 0x90, 0x45, 0x91, 0xae, 0xc4, + 0xf3, 0x37, 0x33, 0xfc, 0xce, 0x37, 0xe7, 0x1c, 0x11, 0x96, 0xa5, 0x0a, 0x6f, 0x48, 0x15, 0x6e, + 0xa7, 0x52, 0x28, 0x41, 0x3a, 0xf8, 0x33, 0xf8, 0x14, 0x60, 0x47, 0xc4, 0xb1, 0x48, 0x28, 0xcb, + 0x52, 0xe2, 0xc3, 0x02, 0x93, 0x72, 0x47, 0x4c, 0x98, 0xef, 0xf5, 0xbd, 0x61, 0x87, 0x16, 0x22, + 0xd9, 0x84, 0x79, 0x26, 0xe5, 0x5e, 0x36, 0xf5, 0x5b, 0x7d, 0x6f, 0xd8, 0xa5, 0x56, 0x1a, 0x7c, + 0xdb, 0x81, 0x85, 0xbd, 0x6c, 0xba, 0x1b, 0xa8, 0x40, 0xfb, 0x64, 0x2c, 0x99, 0x8c, 0x77, 0x31, + 0xb8, 0x4b, 0xad, 0xa4, 0xf5, 0x92, 0x85, 0x67, 0xe3, 0xdd, 0x22, 0xd6, 0x48, 0x7a, 0xb7, 0xa9, + 0x14, 0x79, 0x3a, 0xde, 0xf5, 0xdb, 0x68, 0x28, 0x44, 0xd2, 0x87, 0x5e, 0x18, 0x71, 0x96, 0xa8, + 0xbd, 0x6c, 0x3a, 0xde, 0xf5, 0xe7, 0xd0, 0xea, 0xaa, 0xb4, 0x47, 0xc6, 0xe4, 0x19, 0x93, 0xc6, + 0xa3, 0x63, 0x3c, 0x1c, 0x15, 0xb9, 0x0e, 0x6b, 0x7a, 0x7f, 0x26, 0x0f, 0xa2, 0x40, 0x9d, 0x08, + 0x19, 0x8f, 0x77, 0xfd, 0x79, 0x7c, 0xa9, 0x0b, 0x7a, 0x72, 0x0d, 0x56, 0x8c, 0xee, 0x31, 0x0f, + 0x5f, 0x24, 0x41, 0xcc, 0xfc, 0x05, 0x5c, 0xb0, 0xa1, 0x25, 0x57, 0x61, 0xd9, 0x68, 0xee, 0x07, + 0x21, 0x3b, 0xa2, 0x8f, 0xfc, 0x45, 0x74, 0xab, 0x2b, 0xcd, 0xd9, 0xb2, 0x8c, 0x8b, 0xe4, 0xc9, + 0x79, 0xca, 0xfc, 0x2e, 0x6e, 0xea, 0xaa, 0xf4, 0x9b, 0xc7, 0xd9, 0xf4, 0xbe, 0x14, 0xb1, 0x0f, + 0x06, 0x67, 0x2b, 0xe2, 0x9b, 0x8b, 0x44, 0xb1, 0x44, 0x61, 0x6c, 0xcf, 0xc4, 0x3a, 0x2a, 0x1d, + 0x6b, 0x45, 0x7f, 0xa9, 0xef, 0x0d, 0x97, 0x68, 0x21, 0x92, 0x35, 0x68, 0x67, 0xec, 0xd4, 0x5f, + 0xe9, 0x7b, 0xc3, 0x65, 0xaa, 0x1f, 0xc9, 0x16, 0x2c, 0xea, 0xa3, 0x3d, 0xe1, 0x31, 0xf3, 0x57, + 0xfb, 0xde, 0xb0, 0x4d, 0x4b, 0x99, 0xfc, 0x07, 0x20, 0x94, 0x2c, 0x50, 0x0c, 0xad, 0x6b, 0x68, + 0x75, 0x34, 0x98, 0x4d, 0x15, 0xa8, 0x3c, 0xf3, 0xd7, 0xf1, 0x10, 0x56, 0x22, 0xb7, 0x60, 0x41, + 0xa4, 0x8a, 0x8b, 0x24, 0xf3, 0x49, 0xbf, 0x3d, 0xec, 0x8d, 0xfe, 0x69, 0x18, 0xb5, 0x6d, 0x69, + 0xb0, 0xbd, 0x6f, 0xac, 0xf7, 0x12, 0x25, 0xcf, 0x69, 0xe1, 0x4b, 0x3e, 0x83, 0x55, 0x71, 0x72, + 0x12, 0xf1, 0x84, 0x1d, 0xe4, 0xd9, 0xb3, 0x71, 0x72, 0x22, 0xfc, 0x8d, 0xbe, 0x37, 0xec, 0x8d, + 0x36, 0x6d, 0xf8, 0x7e, 0xdd, 0x4a, 0x9b, 0xee, 0x5b, 0xb7, 0x61, 0xc9, 0x5d, 0x5a, 0xbf, 0xee, + 0x0b, 0x76, 0x6e, 0xb9, 0xa6, 0x1f, 0xc9, 0xdf, 0xa1, 0x73, 0x16, 0x44, 0x39, 0x43, 0x9e, 0x2d, + 0x52, 0x23, 0xdc, 0x6e, 0x7d, 0xe4, 0x0d, 0x7e, 0x6d, 0x41, 0xf7, 0x01, 0x92, 0x2b, 0x39, 0x11, + 0x2e, 0xf1, 0xbc, 0x3a, 0xf1, 0xfe, 0x05, 0x5d, 0x7c, 0x7c, 0xac, 0x39, 0x60, 0xd8, 0x5a, 0x29, + 0xc8, 0x00, 0x96, 0x12, 0xa1, 0xf8, 0x09, 0x0f, 0x03, 0x7d, 0x0e, 0xcb, 0xda, 0x9a, 0x4e, 0xfb, + 0xf0, 0x44, 0x49, 0x31, 0xc9, 0x43, 0xf4, 0x31, 0xdc, 0xad, 0xe9, 0xf4, 0xfe, 0x27, 0x96, 0x40, + 0x86, 0xb8, 0x85, 0xa8, 0xd3, 0x2f, 0x5e, 0x26, 0x4c, 0x1e, 0x65, 0x4c, 0x5a, 0xbe, 0x76, 0xa9, + 0xab, 0x6a, 0xa4, 0x6d, 0x01, 0x73, 0xed, 0xa6, 0xad, 0x0f, 0xbd, 0x98, 0xc5, 0xc7, 0x4c, 0xee, + 0x88, 0x3c, 0x51, 0x48, 0xd0, 0x65, 0xea, 0xaa, 0xc8, 0x0a, 0xb4, 0xd8, 0x2b, 0x64, 0x65, 0x97, + 0xb6, 0xd8, 0x2b, 0x27, 0xd1, 0x50, 0x4b, 0xf4, 0x55, 0x58, 0xc6, 0x75, 0x45, 0x71, 0x9a, 0x9e, + 0x21, 0x7b, 0x4d, 0x59, 0x22, 0x86, 0x74, 0x5d, 0xc2, 0x05, 0x2a, 0xc5, 0xe0, 0xfb, 0x16, 0x6c, + 0x20, 0xee, 0x7b, 0x78, 0x80, 0xfb, 0x79, 0x14, 0xfd, 0x4e, 0x06, 0x36, 0x61, 0x3e, 0x37, 0xdb, + 0xd9, 0x62, 0x91, 0x97, 0xfb, 0x48, 0x11, 0xb1, 0x47, 0xec, 0x8c, 0x45, 0x08, 0x7c, 0x87, 0x56, + 0x0a, 0x4d, 0xf4, 0xe7, 0x82, 0x27, 0x88, 0xc9, 0x1c, 0x1a, 0x4b, 0x59, 0xdb, 0x92, 0xe2, 0x5a, + 0x1b, 0xb8, 0x4b, 0xd9, 0xcd, 0xc4, 0x7c, 0x3d, 0x13, 0xd7, 0x60, 0x25, 0x48, 0xd3, 0xbd, 0x20, + 0x99, 0x32, 0x69, 0x36, 0x5d, 0xc0, 0x75, 0x1b, 0x5a, 0x9d, 0x0f, 0xbd, 0xd3, 0xa1, 0xc8, 0x65, + 0xc8, 0x10, 0xee, 0x0e, 0x75, 0x34, 0x7a, 0x1d, 0x91, 0x32, 0xe9, 0xc0, 0x68, 0x90, 0x6f, 0x68, + 0x6d, 0x56, 0xa0, 0xc8, 0xca, 0xe0, 0x07, 0x0f, 0x36, 0x0e, 0x02, 0xa9, 0x78, 0xc8, 0xd3, 0x20, + 0x51, 0x7b, 0x4c, 0x05, 0x58, 0x64, 0xb7, 0x2d, 0xde, 0x78, 0x83, 0x3c, 0xbc, 0x41, 0x6b, 0xf6, + 0x06, 0x95, 0x04, 0xa7, 0x95, 0x0b, 0xd9, 0x85, 0xd5, 0x69, 0x95, 0x00, 0x8c, 0x6a, 0x61, 0xd4, + 0x96, 0x1b, 0x55, 0x4f, 0x0f, 0x6d, 0x86, 0x90, 0x9b, 0xb0, 0x88, 0x79, 0xd0, 0xe1, 0x6d, 0x0c, + 0xbf, 0x62, 0xc3, 0x0f, 0xf2, 0xe3, 0x88, 0x87, 0x47, 0xd6, 0x48, 0x4b, 0xb7, 0xc1, 0x97, 0x1e, + 0xac, 0xd4, 0x8d, 0x4e, 0x6e, 0xbd, 0x5a, 0x6e, 0xdd, 0x0c, 0xb5, 0x2e, 0xcf, 0x50, 0xbb, 0x9e, + 0xa1, 0x4d, 0x98, 0x9f, 0x62, 0xdd, 0xb5, 0x19, 0xb7, 0x92, 0x45, 0xb2, 0x53, 0x22, 0xf9, 0x8d, + 0x07, 0xab, 0x0f, 0x98, 0xfa, 0x5c, 0xf3, 0x41, 0xbc, 0x60, 0x09, 0x65, 0xa7, 0x84, 0xc0, 0x9c, + 0x14, 0x22, 0xb6, 0xe7, 0xc0, 0x67, 0x7d, 0x0a, 0x3e, 0x61, 0x89, 0xe2, 0xea, 0xbc, 0x38, 0x45, + 0x21, 0x93, 0x0f, 0x61, 0x31, 0xb6, 0x19, 0xb0, 0xef, 0x5f, 0xc0, 0x37, 0x23, 0x47, 0xb4, 0xf4, + 0xc5, 0xfb, 0x8c, 0x79, 0xe6, 0x22, 0xa9, 0x1a, 0x99, 0xa3, 0x1a, 0x9c, 0xc2, 0x5a, 0xfd, 0x70, + 0x59, 0x4a, 0x6e, 0xba, 0x4d, 0xd9, 0x26, 0x79, 0xdd, 0xee, 0x57, 0x19, 0xa8, 0xdb, 0xb9, 0xd7, + 0xa0, 0xfd, 0xfc, 0xa5, 0xb2, 0xe7, 0xd6, 0x8f, 0x1a, 0xb8, 0x88, 0x9f, 0xb9, 0xc0, 0x59, 0x71, + 0xf0, 0xb5, 0x07, 0xab, 0x8d, 0x6a, 0xab, 0x4b, 0xa7, 0xe2, 0x2a, 0x62, 0x16, 0x11, 0x23, 0x68, + 0x98, 0x26, 0x2c, 0x0b, 0xed, 0xb2, 0xf8, 0x6c, 0xe1, 0x6d, 0x97, 0xe5, 0x43, 0x17, 0xbc, 0xfd, + 0x43, 0xbd, 0xd0, 0xa1, 0xc8, 0x93, 0x49, 0x59, 0xf0, 0x1c, 0x9d, 0x2e, 0x25, 0x7c, 0xff, 0xf0, + 0x6e, 0x30, 0x99, 0x32, 0x53, 0x96, 0x3a, 0x58, 0xa0, 0xeb, 0xca, 0xc1, 0xcf, 0x2d, 0xe8, 0x1e, + 0xf2, 0x69, 0x12, 0x44, 0x3a, 0x45, 0xff, 0x87, 0x79, 0x9e, 0x9c, 0x71, 0xc5, 0x2c, 0x00, 0x45, + 0x9f, 0x30, 0x1e, 0x63, 0x34, 0x51, 0x76, 0xfa, 0xf0, 0x6f, 0xd4, 0xfa, 0x91, 0x7b, 0xb0, 0x6c, + 0x9e, 0xc6, 0x09, 0x92, 0xda, 0x12, 0xfd, 0xdf, 0x33, 0x02, 0xad, 0x87, 0x89, 0xaf, 0x47, 0xe9, + 0x8d, 0xc3, 0x20, 0x09, 0x6d, 0x99, 0x69, 0x6e, 0xbc, 0x83, 0x26, 0xbb, 0xb1, 0xf1, 0xd3, 0x11, + 0x41, 0x18, 0xb2, 0x54, 0xe1, 0xcb, 0x37, 0x23, 0xee, 0xa0, 0xc9, 0x46, 0x18, 0x3f, 0x1d, 0xf1, + 0x2c, 0x4f, 0xa6, 0x47, 0x29, 0x22, 0xd1, 0x8c, 0x78, 0x88, 0x26, 0x1b, 0x61, 0xfc, 0x74, 0x84, + 0x64, 0xcf, 0x59, 0xa8, 0xb0, 0x50, 0x35, 0x23, 0x28, 0x9a, 0x6c, 0x84, 0xf1, 0xbb, 0xdb, 0x85, + 0x85, 0x34, 0x38, 0x8f, 0x44, 0x30, 0x19, 0xbc, 0x6e, 0x01, 0x14, 0x8e, 0x59, 0x4a, 0x46, 0x0d, + 0x68, 0xfd, 0x99, 0xd0, 0xa6, 0xd1, 0xb9, 0x03, 0xee, 0x83, 0xd9, 0xe0, 0xfe, 0xf7, 0x4d, 0xe0, + 0x9a, 0x15, 0x1a, 0xf0, 0x8e, 0x1a, 0xf0, 0xfa, 0x33, 0xe1, 0xb5, 0x9b, 0x5b, 0x80, 0x47, 0x0d, + 0x80, 0xfd, 0x99, 0x00, 0xdb, 0x18, 0x0b, 0xf1, 0xa8, 0x01, 0xb1, 0x3f, 0x13, 0x62, 0x1b, 0x63, + 0x41, 0x1e, 0x35, 0x40, 0xf6, 0x67, 0x82, 0x6c, 0x63, 0x2e, 0xc2, 0xfc, 0x53, 0x0b, 0x56, 0x10, + 0x02, 0x73, 0xb9, 0xf5, 0xbd, 0xba, 0x5a, 0xc0, 0x56, 0x54, 0x7f, 0x73, 0xbf, 0xea, 0x4a, 0xf2, + 0x3f, 0x58, 0x37, 0x0a, 0x66, 0x14, 0x8f, 0x78, 0xa6, 0xef, 0x72, 0x7b, 0xd8, 0xa5, 0x17, 0x0d, + 0x38, 0x02, 0xe4, 0x99, 0x12, 0x71, 0x59, 0x8e, 0xba, 0xd4, 0xd1, 0xb8, 0xcd, 0x75, 0xee, 0x42, + 0x73, 0xd5, 0xa5, 0xae, 0x1c, 0x98, 0xad, 0xa4, 0x23, 0x14, 0x8f, 0x99, 0xc8, 0x95, 0x1d, 0x91, + 0x0b, 0x51, 0xb7, 0xdd, 0x98, 0x4d, 0x78, 0x80, 0xed, 0xdd, 0x0c, 0xc5, 0x95, 0x42, 0x9f, 0x24, + 0xad, 0xa6, 0x6b, 0xdb, 0xfc, 0x2a, 0xcd, 0x5b, 0x4c, 0xc2, 0x38, 0x2e, 0x71, 0xc5, 0x8b, 0x81, + 0xc6, 0x8c, 0x20, 0x35, 0xdd, 0xe0, 0xb5, 0x07, 0xab, 0x8d, 0x5b, 0xaf, 0x8b, 0xb5, 0x48, 0x6b, + 0x90, 0x96, 0x32, 0xb9, 0x05, 0xc0, 0xcb, 0x2c, 0x58, 0x9e, 0x16, 0xed, 0xaa, 0x9e, 0x1e, 0xea, + 0x38, 0xce, 0x9a, 0x50, 0xdb, 0x7f, 0x68, 0x42, 0x25, 0x9f, 0x40, 0x2f, 0xad, 0xda, 0x81, 0xe5, + 0xea, 0x9b, 0x1a, 0x85, 0xeb, 0x3e, 0xf8, 0x02, 0xd6, 0x2f, 0x5c, 0x40, 0xac, 0xcb, 0xba, 0x2f, + 0x94, 0x75, 0x59, 0x0b, 0x4e, 0x1e, 0x5b, 0xcd, 0x3c, 0x5e, 0x52, 0xf3, 0x7f, 0xf1, 0x60, 0x73, + 0x76, 0x01, 0x7c, 0x1f, 0xa1, 0x3c, 0x06, 0xff, 0xb2, 0x82, 0xf4, 0xce, 0x10, 0xad, 0x58, 0x59, + 0xb6, 0x84, 0xf7, 0x11, 0xca, 0x8d, 0x82, 0x95, 0x4e, 0x65, 0x1e, 0x7c, 0xd5, 0x2a, 0xde, 0xbd, + 0x6c, 0x6e, 0xef, 0xe1, 0xbb, 0x93, 0xeb, 0xb0, 0x66, 0x5e, 0xc1, 0xf9, 0x84, 0xd0, 0x31, 0x9f, + 0x10, 0x9a, 0xfa, 0xea, 0xf6, 0x3a, 0xdd, 0xe8, 0x9d, 0x71, 0xed, 0xbb, 0x92, 0x6b, 0xe5, 0x68, + 0xf0, 0xa7, 0xc4, 0xbb, 0x62, 0x8b, 0xd3, 0x5f, 0x1d, 0xb6, 0x94, 0x63, 0xca, 0x5f, 0x9d, 0x2d, + 0x25, 0x4e, 0xce, 0x4c, 0x31, 0x88, 0x8a, 0xaa, 0xb5, 0xc7, 0xb2, 0x2c, 0x98, 0xb2, 0x3b, 0x59, + 0xc6, 0xe2, 0xe3, 0x08, 0xfb, 0xdd, 0x36, 0x74, 0xb3, 0x62, 0x34, 0x6e, 0xfc, 0xed, 0x2b, 0x47, + 0x66, 0x5a, 0xb9, 0x34, 0xff, 0x78, 0xb4, 0x2e, 0xfe, 0xf1, 0xf8, 0xd1, 0x83, 0x7f, 0x5c, 0xb2, + 0x9d, 0xf9, 0x0b, 0x12, 0xbe, 0xcd, 0x5f, 0x90, 0xca, 0x49, 0xd3, 0x9a, 0x67, 0x07, 0x41, 0x96, + 0xd9, 0xcf, 0x2f, 0x56, 0xd2, 0x4b, 0x65, 0xe5, 0xec, 0x69, 0x53, 0xb2, 0xde, 0x38, 0xbb, 0x5e, + 0xaa, 0x72, 0x22, 0x43, 0xfc, 0x3e, 0x86, 0xe3, 0x8d, 0x49, 0xc2, 0x4a, 0xfd, 0x1b, 0x13, 0x2d, + 0xcc, 0xa3, 0x67, 0x00, 0x54, 0x85, 0x87, 0x4c, 0x9e, 0xf1, 0x90, 0x91, 0xa7, 0x70, 0x65, 0xe6, + 0x2b, 0x91, 0xfa, 0x98, 0x7a, 0x11, 0xdf, 0xad, 0xfe, 0x9b, 0x1d, 0xb2, 0xf4, 0x6e, 0xef, 0x69, + 0x77, 0xfb, 0x86, 0x54, 0xe1, 0xc7, 0x52, 0x85, 0xc7, 0xf3, 0xe8, 0xfd, 0xc1, 0x6f, 0x01, 0x00, + 0x00, 0xff, 0xff, 0xcb, 0x87, 0xc7, 0x8b, 0x55, 0x15, 0x00, 0x00, } diff --git a/pkg/proto/rtc/rtc.proto b/pkg/proto/rtc/rtc.proto index ede25601d..cb99f9b84 100644 --- a/pkg/proto/rtc/rtc.proto +++ b/pkg/proto/rtc/rtc.proto @@ -120,11 +120,11 @@ message InvitationInfo { string customData = 3; string groupID = 4; string roomID = 5; - int32 initiateTime = 6; - int32 timeout = 7; - string mediaType = 8; - int32 platformID = 9; - int32 sessionType = 10; + int32 timeout = 6; + string mediaType = 7; + int32 platformID = 8; + int32 sessionType = 9; + int32 initiateTime = 10; } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go deleted file mode 100644 index bc20c8d70..000000000 --- a/pkg/proto/sdk_ws/ws.pb.go +++ /dev/null @@ -1,5237 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: sdk_ws/ws.proto - -package server_api_params // import "Open_IM/pkg/proto/sdk_ws" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type GroupInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` - Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` - Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` - FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` - OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` - CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` - GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupInfo) Reset() { *m = GroupInfo{} } -func (m *GroupInfo) String() string { return proto.CompactTextString(m) } -func (*GroupInfo) ProtoMessage() {} -func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{0} -} -func (m *GroupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupInfo.Unmarshal(m, b) -} -func (m *GroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupInfo.Marshal(b, m, deterministic) -} -func (dst *GroupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupInfo.Merge(dst, src) -} -func (m *GroupInfo) XXX_Size() int { - return xxx_messageInfo_GroupInfo.Size(m) -} -func (m *GroupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_GroupInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupInfo proto.InternalMessageInfo - -func (m *GroupInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *GroupInfo) GetGroupName() string { - if m != nil { - return m.GroupName - } - return "" -} - -func (m *GroupInfo) GetNotification() string { - if m != nil { - return m.Notification - } - return "" -} - -func (m *GroupInfo) GetIntroduction() string { - if m != nil { - return m.Introduction - } - return "" -} - -func (m *GroupInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *GroupInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *GroupInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *GroupInfo) GetMemberCount() uint32 { - if m != nil { - return m.MemberCount - } - return 0 -} - -func (m *GroupInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *GroupInfo) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *GroupInfo) GetCreatorUserID() string { - if m != nil { - return m.CreatorUserID - } - return "" -} - -func (m *GroupInfo) GetGroupType() int32 { - if m != nil { - return m.GroupType - } - return 0 -} - -type GroupMemberFullInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - RoleLevel int32 `protobuf:"varint,3,opt,name=roleLevel" json:"roleLevel,omitempty"` - JoinTime int32 `protobuf:"varint,4,opt,name=joinTime" json:"joinTime,omitempty"` - Nickname string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,6,opt,name=faceURL" json:"faceURL,omitempty"` - AppMangerLevel int32 `protobuf:"varint,7,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` - JoinSource int32 `protobuf:"varint,8,opt,name=joinSource" json:"joinSource,omitempty"` - OperatorUserID string `protobuf:"bytes,9,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` - MuteEndTime uint32 `protobuf:"varint,11,opt,name=muteEndTime" json:"muteEndTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } -func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } -func (*GroupMemberFullInfo) ProtoMessage() {} -func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{1} -} -func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) -} -func (m *GroupMemberFullInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberFullInfo.Marshal(b, m, deterministic) -} -func (dst *GroupMemberFullInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberFullInfo.Merge(dst, src) -} -func (m *GroupMemberFullInfo) XXX_Size() int { - return xxx_messageInfo_GroupMemberFullInfo.Size(m) -} -func (m *GroupMemberFullInfo) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberFullInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberFullInfo proto.InternalMessageInfo - -func (m *GroupMemberFullInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *GroupMemberFullInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *GroupMemberFullInfo) GetRoleLevel() int32 { - if m != nil { - return m.RoleLevel - } - return 0 -} - -func (m *GroupMemberFullInfo) GetJoinTime() int32 { - if m != nil { - return m.JoinTime - } - return 0 -} - -func (m *GroupMemberFullInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *GroupMemberFullInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *GroupMemberFullInfo) GetAppMangerLevel() int32 { - if m != nil { - return m.AppMangerLevel - } - return 0 -} - -func (m *GroupMemberFullInfo) GetJoinSource() int32 { - if m != nil { - return m.JoinSource - } - return 0 -} - -func (m *GroupMemberFullInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *GroupMemberFullInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *GroupMemberFullInfo) GetMuteEndTime() uint32 { - if m != nil { - return m.MuteEndTime - } - return 0 -} - -type PublicUserInfo struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` - Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } -func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } -func (*PublicUserInfo) ProtoMessage() {} -func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{2} -} -func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) -} -func (m *PublicUserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PublicUserInfo.Marshal(b, m, deterministic) -} -func (dst *PublicUserInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_PublicUserInfo.Merge(dst, src) -} -func (m *PublicUserInfo) XXX_Size() int { - return xxx_messageInfo_PublicUserInfo.Size(m) -} -func (m *PublicUserInfo) XXX_DiscardUnknown() { - xxx_messageInfo_PublicUserInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_PublicUserInfo proto.InternalMessageInfo - -func (m *PublicUserInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PublicUserInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *PublicUserInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *PublicUserInfo) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *PublicUserInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type UserInfo struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` - PhoneNumber string `protobuf:"bytes,5,opt,name=phoneNumber" json:"phoneNumber,omitempty"` - Birth uint32 `protobuf:"varint,6,opt,name=birth" json:"birth,omitempty"` - Email string `protobuf:"bytes,7,opt,name=email" json:"email,omitempty"` - Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` - CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` - AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserInfo) Reset() { *m = UserInfo{} } -func (m *UserInfo) String() string { return proto.CompactTextString(m) } -func (*UserInfo) ProtoMessage() {} -func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{3} -} -func (m *UserInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfo.Unmarshal(m, b) -} -func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfo.Marshal(b, m, deterministic) -} -func (dst *UserInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfo.Merge(dst, src) -} -func (m *UserInfo) XXX_Size() int { - return xxx_messageInfo_UserInfo.Size(m) -} -func (m *UserInfo) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInfo proto.InternalMessageInfo - -func (m *UserInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *UserInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *UserInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *UserInfo) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *UserInfo) GetPhoneNumber() string { - if m != nil { - return m.PhoneNumber - } - return "" -} - -func (m *UserInfo) GetBirth() uint32 { - if m != nil { - return m.Birth - } - return 0 -} - -func (m *UserInfo) GetEmail() string { - if m != nil { - return m.Email - } - return "" -} - -func (m *UserInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *UserInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *UserInfo) GetAppMangerLevel() int32 { - if m != nil { - return m.AppMangerLevel - } - return 0 -} - -type FriendInfo struct { - OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` - CreateTime uint32 `protobuf:"varint,3,opt,name=createTime" json:"createTime,omitempty"` - FriendUser *UserInfo `protobuf:"bytes,4,opt,name=friendUser" json:"friendUser,omitempty"` - AddSource int32 `protobuf:"varint,5,opt,name=addSource" json:"addSource,omitempty"` - OperatorUserID string `protobuf:"bytes,6,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendInfo) Reset() { *m = FriendInfo{} } -func (m *FriendInfo) String() string { return proto.CompactTextString(m) } -func (*FriendInfo) ProtoMessage() {} -func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{4} -} -func (m *FriendInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendInfo.Unmarshal(m, b) -} -func (m *FriendInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendInfo.Marshal(b, m, deterministic) -} -func (dst *FriendInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendInfo.Merge(dst, src) -} -func (m *FriendInfo) XXX_Size() int { - return xxx_messageInfo_FriendInfo.Size(m) -} -func (m *FriendInfo) XXX_DiscardUnknown() { - xxx_messageInfo_FriendInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendInfo proto.InternalMessageInfo - -func (m *FriendInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *FriendInfo) GetRemark() string { - if m != nil { - return m.Remark - } - return "" -} - -func (m *FriendInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *FriendInfo) GetFriendUser() *UserInfo { - if m != nil { - return m.FriendUser - } - return nil -} - -func (m *FriendInfo) GetAddSource() int32 { - if m != nil { - return m.AddSource - } - return 0 -} - -func (m *FriendInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *FriendInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type BlackInfo struct { - OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,2,opt,name=createTime" json:"createTime,omitempty"` - BlackUserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=blackUserInfo" json:"blackUserInfo,omitempty"` - AddSource int32 `protobuf:"varint,4,opt,name=addSource" json:"addSource,omitempty"` - OperatorUserID string `protobuf:"bytes,5,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,6,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BlackInfo) Reset() { *m = BlackInfo{} } -func (m *BlackInfo) String() string { return proto.CompactTextString(m) } -func (*BlackInfo) ProtoMessage() {} -func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{5} -} -func (m *BlackInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackInfo.Unmarshal(m, b) -} -func (m *BlackInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackInfo.Marshal(b, m, deterministic) -} -func (dst *BlackInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackInfo.Merge(dst, src) -} -func (m *BlackInfo) XXX_Size() int { - return xxx_messageInfo_BlackInfo.Size(m) -} -func (m *BlackInfo) XXX_DiscardUnknown() { - xxx_messageInfo_BlackInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackInfo proto.InternalMessageInfo - -func (m *BlackInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *BlackInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *BlackInfo) GetBlackUserInfo() *PublicUserInfo { - if m != nil { - return m.BlackUserInfo - } - return nil -} - -func (m *BlackInfo) GetAddSource() int32 { - if m != nil { - return m.AddSource - } - return 0 -} - -func (m *BlackInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *BlackInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type GroupRequest struct { - UserInfo *PublicUserInfo `protobuf:"bytes,1,opt,name=userInfo" json:"userInfo,omitempty"` - GroupInfo *GroupInfo `protobuf:"bytes,2,opt,name=groupInfo" json:"groupInfo,omitempty"` - HandleResult int32 `protobuf:"varint,3,opt,name=handleResult" json:"handleResult,omitempty"` - ReqMsg string `protobuf:"bytes,4,opt,name=reqMsg" json:"reqMsg,omitempty"` - HandleMsg string `protobuf:"bytes,5,opt,name=handleMsg" json:"handleMsg,omitempty"` - ReqTime uint32 `protobuf:"varint,6,opt,name=reqTime" json:"reqTime,omitempty"` - HandleUserID string `protobuf:"bytes,7,opt,name=handleUserID" json:"handleUserID,omitempty"` - HandleTime uint32 `protobuf:"varint,8,opt,name=handleTime" json:"handleTime,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupRequest) Reset() { *m = GroupRequest{} } -func (m *GroupRequest) String() string { return proto.CompactTextString(m) } -func (*GroupRequest) ProtoMessage() {} -func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{6} -} -func (m *GroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupRequest.Unmarshal(m, b) -} -func (m *GroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupRequest.Marshal(b, m, deterministic) -} -func (dst *GroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupRequest.Merge(dst, src) -} -func (m *GroupRequest) XXX_Size() int { - return xxx_messageInfo_GroupRequest.Size(m) -} -func (m *GroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupRequest proto.InternalMessageInfo - -func (m *GroupRequest) GetUserInfo() *PublicUserInfo { - if m != nil { - return m.UserInfo - } - return nil -} - -func (m *GroupRequest) GetGroupInfo() *GroupInfo { - if m != nil { - return m.GroupInfo - } - return nil -} - -func (m *GroupRequest) GetHandleResult() int32 { - if m != nil { - return m.HandleResult - } - return 0 -} - -func (m *GroupRequest) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -func (m *GroupRequest) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -func (m *GroupRequest) GetReqTime() uint32 { - if m != nil { - return m.ReqTime - } - return 0 -} - -func (m *GroupRequest) GetHandleUserID() string { - if m != nil { - return m.HandleUserID - } - return "" -} - -func (m *GroupRequest) GetHandleTime() uint32 { - if m != nil { - return m.HandleTime - } - return 0 -} - -func (m *GroupRequest) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type FriendRequest struct { - FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` - FromNickname string `protobuf:"bytes,2,opt,name=fromNickname" json:"fromNickname,omitempty"` - FromFaceURL string `protobuf:"bytes,3,opt,name=fromFaceURL" json:"fromFaceURL,omitempty"` - FromGender int32 `protobuf:"varint,4,opt,name=fromGender" json:"fromGender,omitempty"` - ToUserID string `protobuf:"bytes,5,opt,name=toUserID" json:"toUserID,omitempty"` - ToNickname string `protobuf:"bytes,6,opt,name=toNickname" json:"toNickname,omitempty"` - ToFaceURL string `protobuf:"bytes,7,opt,name=toFaceURL" json:"toFaceURL,omitempty"` - ToGender int32 `protobuf:"varint,8,opt,name=toGender" json:"toGender,omitempty"` - HandleResult int32 `protobuf:"varint,9,opt,name=handleResult" json:"handleResult,omitempty"` - ReqMsg string `protobuf:"bytes,10,opt,name=reqMsg" json:"reqMsg,omitempty"` - CreateTime uint32 `protobuf:"varint,11,opt,name=createTime" json:"createTime,omitempty"` - HandlerUserID string `protobuf:"bytes,12,opt,name=handlerUserID" json:"handlerUserID,omitempty"` - HandleMsg string `protobuf:"bytes,13,opt,name=handleMsg" json:"handleMsg,omitempty"` - HandleTime uint32 `protobuf:"varint,14,opt,name=handleTime" json:"handleTime,omitempty"` - Ex string `protobuf:"bytes,15,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendRequest) Reset() { *m = FriendRequest{} } -func (m *FriendRequest) String() string { return proto.CompactTextString(m) } -func (*FriendRequest) ProtoMessage() {} -func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{7} -} -func (m *FriendRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendRequest.Unmarshal(m, b) -} -func (m *FriendRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendRequest.Marshal(b, m, deterministic) -} -func (dst *FriendRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendRequest.Merge(dst, src) -} -func (m *FriendRequest) XXX_Size() int { - return xxx_messageInfo_FriendRequest.Size(m) -} -func (m *FriendRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FriendRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendRequest proto.InternalMessageInfo - -func (m *FriendRequest) GetFromUserID() string { - if m != nil { - return m.FromUserID - } - return "" -} - -func (m *FriendRequest) GetFromNickname() string { - if m != nil { - return m.FromNickname - } - return "" -} - -func (m *FriendRequest) GetFromFaceURL() string { - if m != nil { - return m.FromFaceURL - } - return "" -} - -func (m *FriendRequest) GetFromGender() int32 { - if m != nil { - return m.FromGender - } - return 0 -} - -func (m *FriendRequest) GetToUserID() string { - if m != nil { - return m.ToUserID - } - return "" -} - -func (m *FriendRequest) GetToNickname() string { - if m != nil { - return m.ToNickname - } - return "" -} - -func (m *FriendRequest) GetToFaceURL() string { - if m != nil { - return m.ToFaceURL - } - return "" -} - -func (m *FriendRequest) GetToGender() int32 { - if m != nil { - return m.ToGender - } - return 0 -} - -func (m *FriendRequest) GetHandleResult() int32 { - if m != nil { - return m.HandleResult - } - return 0 -} - -func (m *FriendRequest) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -func (m *FriendRequest) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *FriendRequest) GetHandlerUserID() string { - if m != nil { - return m.HandlerUserID - } - return "" -} - -func (m *FriendRequest) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -func (m *FriendRequest) GetHandleTime() uint32 { - if m != nil { - return m.HandleTime - } - return 0 -} - -func (m *FriendRequest) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type Department struct { - DepartmentID string `protobuf:"bytes,1,opt,name=departmentID" json:"departmentID,omitempty"` - FaceURL string `protobuf:"bytes,2,opt,name=faceURL" json:"faceURL,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` - ParentID string `protobuf:"bytes,4,opt,name=parentID" json:"parentID,omitempty"` - Order int32 `protobuf:"varint,5,opt,name=order" json:"order,omitempty"` - DepartmentType int32 `protobuf:"varint,6,opt,name=departmentType" json:"departmentType,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - SubDepartmentNum uint32 `protobuf:"varint,8,opt,name=subDepartmentNum" json:"subDepartmentNum,omitempty"` - MemberNum uint32 `protobuf:"varint,9,opt,name=memberNum" json:"memberNum,omitempty"` - Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Department) Reset() { *m = Department{} } -func (m *Department) String() string { return proto.CompactTextString(m) } -func (*Department) ProtoMessage() {} -func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{8} -} -func (m *Department) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Department.Unmarshal(m, b) -} -func (m *Department) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Department.Marshal(b, m, deterministic) -} -func (dst *Department) XXX_Merge(src proto.Message) { - xxx_messageInfo_Department.Merge(dst, src) -} -func (m *Department) XXX_Size() int { - return xxx_messageInfo_Department.Size(m) -} -func (m *Department) XXX_DiscardUnknown() { - xxx_messageInfo_Department.DiscardUnknown(m) -} - -var xxx_messageInfo_Department proto.InternalMessageInfo - -func (m *Department) GetDepartmentID() string { - if m != nil { - return m.DepartmentID - } - return "" -} - -func (m *Department) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *Department) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Department) GetParentID() string { - if m != nil { - return m.ParentID - } - return "" -} - -func (m *Department) GetOrder() int32 { - if m != nil { - return m.Order - } - return 0 -} - -func (m *Department) GetDepartmentType() int32 { - if m != nil { - return m.DepartmentType - } - return 0 -} - -func (m *Department) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *Department) GetSubDepartmentNum() uint32 { - if m != nil { - return m.SubDepartmentNum - } - return 0 -} - -func (m *Department) GetMemberNum() uint32 { - if m != nil { - return m.MemberNum - } - return 0 -} - -func (m *Department) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type OrganizationUser struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - EnglishName string `protobuf:"bytes,3,opt,name=englishName" json:"englishName,omitempty"` - FaceURL string `protobuf:"bytes,4,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,5,opt,name=gender" json:"gender,omitempty"` - Mobile string `protobuf:"bytes,6,opt,name=mobile" json:"mobile,omitempty"` - Telephone string `protobuf:"bytes,7,opt,name=telephone" json:"telephone,omitempty"` - Birth uint32 `protobuf:"varint,8,opt,name=birth" json:"birth,omitempty"` - Email string `protobuf:"bytes,9,opt,name=email" json:"email,omitempty"` - CreateTime uint32 `protobuf:"varint,10,opt,name=createTime" json:"createTime,omitempty"` - Ex string `protobuf:"bytes,11,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } -func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } -func (*OrganizationUser) ProtoMessage() {} -func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{9} -} -func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) -} -func (m *OrganizationUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OrganizationUser.Marshal(b, m, deterministic) -} -func (dst *OrganizationUser) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrganizationUser.Merge(dst, src) -} -func (m *OrganizationUser) XXX_Size() int { - return xxx_messageInfo_OrganizationUser.Size(m) -} -func (m *OrganizationUser) XXX_DiscardUnknown() { - xxx_messageInfo_OrganizationUser.DiscardUnknown(m) -} - -var xxx_messageInfo_OrganizationUser proto.InternalMessageInfo - -func (m *OrganizationUser) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *OrganizationUser) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *OrganizationUser) GetEnglishName() string { - if m != nil { - return m.EnglishName - } - return "" -} - -func (m *OrganizationUser) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *OrganizationUser) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *OrganizationUser) GetMobile() string { - if m != nil { - return m.Mobile - } - return "" -} - -func (m *OrganizationUser) GetTelephone() string { - if m != nil { - return m.Telephone - } - return "" -} - -func (m *OrganizationUser) GetBirth() uint32 { - if m != nil { - return m.Birth - } - return 0 -} - -func (m *OrganizationUser) GetEmail() string { - if m != nil { - return m.Email - } - return "" -} - -func (m *OrganizationUser) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *OrganizationUser) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type DepartmentMember struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - DepartmentID string `protobuf:"bytes,2,opt,name=departmentID" json:"departmentID,omitempty"` - Order int32 `protobuf:"varint,3,opt,name=order" json:"order,omitempty"` - Position string `protobuf:"bytes,4,opt,name=position" json:"position,omitempty"` - Leader int32 `protobuf:"varint,5,opt,name=leader" json:"leader,omitempty"` - Status int32 `protobuf:"varint,6,opt,name=status" json:"status,omitempty"` - Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } -func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } -func (*DepartmentMember) ProtoMessage() {} -func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{10} -} -func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) -} -func (m *DepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DepartmentMember.Marshal(b, m, deterministic) -} -func (dst *DepartmentMember) XXX_Merge(src proto.Message) { - xxx_messageInfo_DepartmentMember.Merge(dst, src) -} -func (m *DepartmentMember) XXX_Size() int { - return xxx_messageInfo_DepartmentMember.Size(m) -} -func (m *DepartmentMember) XXX_DiscardUnknown() { - xxx_messageInfo_DepartmentMember.DiscardUnknown(m) -} - -var xxx_messageInfo_DepartmentMember proto.InternalMessageInfo - -func (m *DepartmentMember) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DepartmentMember) GetDepartmentID() string { - if m != nil { - return m.DepartmentID - } - return "" -} - -func (m *DepartmentMember) GetOrder() int32 { - if m != nil { - return m.Order - } - return 0 -} - -func (m *DepartmentMember) GetPosition() string { - if m != nil { - return m.Position - } - return "" -} - -func (m *DepartmentMember) GetLeader() int32 { - if m != nil { - return m.Leader - } - return 0 -} - -func (m *DepartmentMember) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *DepartmentMember) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type UserDepartmentMember struct { - OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` - DepartmentMember *DepartmentMember `protobuf:"bytes,2,opt,name=departmentMember" json:"departmentMember,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } -func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } -func (*UserDepartmentMember) ProtoMessage() {} -func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{11} -} -func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) -} -func (m *UserDepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserDepartmentMember.Marshal(b, m, deterministic) -} -func (dst *UserDepartmentMember) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserDepartmentMember.Merge(dst, src) -} -func (m *UserDepartmentMember) XXX_Size() int { - return xxx_messageInfo_UserDepartmentMember.Size(m) -} -func (m *UserDepartmentMember) XXX_DiscardUnknown() { - xxx_messageInfo_UserDepartmentMember.DiscardUnknown(m) -} - -var xxx_messageInfo_UserDepartmentMember proto.InternalMessageInfo - -func (m *UserDepartmentMember) GetOrganizationUser() *OrganizationUser { - if m != nil { - return m.OrganizationUser - } - return nil -} - -func (m *UserDepartmentMember) GetDepartmentMember() *DepartmentMember { - if m != nil { - return m.DepartmentMember - } - return nil -} - -type UserInDepartment struct { - OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` - DepartmentMemberList []*DepartmentMember `protobuf:"bytes,2,rep,name=departmentMemberList" json:"departmentMemberList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } -func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } -func (*UserInDepartment) ProtoMessage() {} -func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{12} -} -func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) -} -func (m *UserInDepartment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInDepartment.Marshal(b, m, deterministic) -} -func (dst *UserInDepartment) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInDepartment.Merge(dst, src) -} -func (m *UserInDepartment) XXX_Size() int { - return xxx_messageInfo_UserInDepartment.Size(m) -} -func (m *UserInDepartment) XXX_DiscardUnknown() { - xxx_messageInfo_UserInDepartment.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInDepartment proto.InternalMessageInfo - -func (m *UserInDepartment) GetOrganizationUser() *OrganizationUser { - if m != nil { - return m.OrganizationUser - } - return nil -} - -func (m *UserInDepartment) GetDepartmentMemberList() []*DepartmentMember { - if m != nil { - return m.DepartmentMemberList - } - return nil -} - -type PullMessageBySeqListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } -func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } -func (*PullMessageBySeqListResp) ProtoMessage() {} -func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{13} -} -func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) -} -func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) -} -func (m *PullMessageBySeqListResp) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListResp.Size(m) -} -func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo - -func (m *PullMessageBySeqListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *PullMessageBySeqListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *PullMessageBySeqListResp) GetList() []*MsgData { - if m != nil { - return m.List - } - return nil -} - -type PullMessageBySeqListReq struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq{} } -func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } -func (*PullMessageBySeqListReq) ProtoMessage() {} -func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{14} -} -func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) -} -func (m *PullMessageBySeqListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListReq.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListReq.Merge(dst, src) -} -func (m *PullMessageBySeqListReq) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListReq.Size(m) -} -func (m *PullMessageBySeqListReq) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListReq proto.InternalMessageInfo - -func (m *PullMessageBySeqListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -type GetMaxAndMinSeqReq struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } -func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } -func (*GetMaxAndMinSeqReq) ProtoMessage() {} -func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{15} -} -func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) -} -func (m *GetMaxAndMinSeqReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetMaxAndMinSeqReq.Marshal(b, m, deterministic) -} -func (dst *GetMaxAndMinSeqReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetMaxAndMinSeqReq.Merge(dst, src) -} -func (m *GetMaxAndMinSeqReq) XXX_Size() int { - return xxx_messageInfo_GetMaxAndMinSeqReq.Size(m) -} -func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { - xxx_messageInfo_GetMaxAndMinSeqReq.DiscardUnknown(m) -} - -var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo - -type GetMaxAndMinSeqResp struct { - MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } -func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } -func (*GetMaxAndMinSeqResp) ProtoMessage() {} -func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{16} -} -func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) -} -func (m *GetMaxAndMinSeqResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetMaxAndMinSeqResp.Marshal(b, m, deterministic) -} -func (dst *GetMaxAndMinSeqResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetMaxAndMinSeqResp.Merge(dst, src) -} -func (m *GetMaxAndMinSeqResp) XXX_Size() int { - return xxx_messageInfo_GetMaxAndMinSeqResp.Size(m) -} -func (m *GetMaxAndMinSeqResp) XXX_DiscardUnknown() { - xxx_messageInfo_GetMaxAndMinSeqResp.DiscardUnknown(m) -} - -var xxx_messageInfo_GetMaxAndMinSeqResp proto.InternalMessageInfo - -func (m *GetMaxAndMinSeqResp) GetMaxSeq() uint32 { - if m != nil { - return m.MaxSeq - } - return 0 -} - -func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { - if m != nil { - return m.MinSeq - } - return 0 -} - -type UserSendMsgResp struct { - ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID" json:"serverMsgID,omitempty"` - ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` - SendTime int64 `protobuf:"varint,3,opt,name=sendTime" json:"sendTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } -func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } -func (*UserSendMsgResp) ProtoMessage() {} -func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{17} -} -func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) -} -func (m *UserSendMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserSendMsgResp.Marshal(b, m, deterministic) -} -func (dst *UserSendMsgResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserSendMsgResp.Merge(dst, src) -} -func (m *UserSendMsgResp) XXX_Size() int { - return xxx_messageInfo_UserSendMsgResp.Size(m) -} -func (m *UserSendMsgResp) XXX_DiscardUnknown() { - xxx_messageInfo_UserSendMsgResp.DiscardUnknown(m) -} - -var xxx_messageInfo_UserSendMsgResp proto.InternalMessageInfo - -func (m *UserSendMsgResp) GetServerMsgID() string { - if m != nil { - return m.ServerMsgID - } - return "" -} - -func (m *UserSendMsgResp) GetClientMsgID() string { - if m != nil { - return m.ClientMsgID - } - return "" -} - -func (m *UserSendMsgResp) GetSendTime() int64 { - if m != nil { - return m.SendTime - } - return 0 -} - -type MsgData struct { - SendID string `protobuf:"bytes,1,opt,name=sendID" json:"sendID,omitempty"` - RecvID string `protobuf:"bytes,2,opt,name=recvID" json:"recvID,omitempty"` - GroupID string `protobuf:"bytes,3,opt,name=groupID" json:"groupID,omitempty"` - ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID" json:"clientMsgID,omitempty"` - ServerMsgID string `protobuf:"bytes,5,opt,name=serverMsgID" json:"serverMsgID,omitempty"` - SenderPlatformID int32 `protobuf:"varint,6,opt,name=senderPlatformID" json:"senderPlatformID,omitempty"` - SenderNickname string `protobuf:"bytes,7,opt,name=senderNickname" json:"senderNickname,omitempty"` - SenderFaceURL string `protobuf:"bytes,8,opt,name=senderFaceURL" json:"senderFaceURL,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` - MsgFrom int32 `protobuf:"varint,10,opt,name=msgFrom" json:"msgFrom,omitempty"` - ContentType int32 `protobuf:"varint,11,opt,name=contentType" json:"contentType,omitempty"` - Content []byte `protobuf:"bytes,12,opt,name=content,proto3" json:"content,omitempty"` - Seq uint32 `protobuf:"varint,14,opt,name=seq" json:"seq,omitempty"` - SendTime int64 `protobuf:"varint,15,opt,name=sendTime" json:"sendTime,omitempty"` - CreateTime int64 `protobuf:"varint,16,opt,name=createTime" json:"createTime,omitempty"` - Status int32 `protobuf:"varint,17,opt,name=status" json:"status,omitempty"` - Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MsgData) Reset() { *m = MsgData{} } -func (m *MsgData) String() string { return proto.CompactTextString(m) } -func (*MsgData) ProtoMessage() {} -func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{18} -} -func (m *MsgData) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MsgData.Unmarshal(m, b) -} -func (m *MsgData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MsgData.Marshal(b, m, deterministic) -} -func (dst *MsgData) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgData.Merge(dst, src) -} -func (m *MsgData) XXX_Size() int { - return xxx_messageInfo_MsgData.Size(m) -} -func (m *MsgData) XXX_DiscardUnknown() { - xxx_messageInfo_MsgData.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgData proto.InternalMessageInfo - -func (m *MsgData) GetSendID() string { - if m != nil { - return m.SendID - } - return "" -} - -func (m *MsgData) GetRecvID() string { - if m != nil { - return m.RecvID - } - return "" -} - -func (m *MsgData) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *MsgData) GetClientMsgID() string { - if m != nil { - return m.ClientMsgID - } - return "" -} - -func (m *MsgData) GetServerMsgID() string { - if m != nil { - return m.ServerMsgID - } - return "" -} - -func (m *MsgData) GetSenderPlatformID() int32 { - if m != nil { - return m.SenderPlatformID - } - return 0 -} - -func (m *MsgData) GetSenderNickname() string { - if m != nil { - return m.SenderNickname - } - return "" -} - -func (m *MsgData) GetSenderFaceURL() string { - if m != nil { - return m.SenderFaceURL - } - return "" -} - -func (m *MsgData) GetSessionType() int32 { - if m != nil { - return m.SessionType - } - return 0 -} - -func (m *MsgData) GetMsgFrom() int32 { - if m != nil { - return m.MsgFrom - } - return 0 -} - -func (m *MsgData) GetContentType() int32 { - if m != nil { - return m.ContentType - } - return 0 -} - -func (m *MsgData) GetContent() []byte { - if m != nil { - return m.Content - } - return nil -} - -func (m *MsgData) GetSeq() uint32 { - if m != nil { - return m.Seq - } - return 0 -} - -func (m *MsgData) GetSendTime() int64 { - if m != nil { - return m.SendTime - } - return 0 -} - -func (m *MsgData) GetCreateTime() int64 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *MsgData) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *MsgData) GetOptions() map[string]bool { - if m != nil { - return m.Options - } - return nil -} - -func (m *MsgData) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *MsgData) GetAtUserIDList() []string { - if m != nil { - return m.AtUserIDList - } - return nil -} - -type OfflinePushInfo struct { - Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Desc string `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"` - Ex string `protobuf:"bytes,3,opt,name=ex" json:"ex,omitempty"` - IOSPushSound string `protobuf:"bytes,4,opt,name=iOSPushSound" json:"iOSPushSound,omitempty"` - IOSBadgeCount bool `protobuf:"varint,5,opt,name=iOSBadgeCount" json:"iOSBadgeCount,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } -func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } -func (*OfflinePushInfo) ProtoMessage() {} -func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{19} -} -func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) -} -func (m *OfflinePushInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OfflinePushInfo.Marshal(b, m, deterministic) -} -func (dst *OfflinePushInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_OfflinePushInfo.Merge(dst, src) -} -func (m *OfflinePushInfo) XXX_Size() int { - return xxx_messageInfo_OfflinePushInfo.Size(m) -} -func (m *OfflinePushInfo) XXX_DiscardUnknown() { - xxx_messageInfo_OfflinePushInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_OfflinePushInfo proto.InternalMessageInfo - -func (m *OfflinePushInfo) GetTitle() string { - if m != nil { - return m.Title - } - return "" -} - -func (m *OfflinePushInfo) GetDesc() string { - if m != nil { - return m.Desc - } - return "" -} - -func (m *OfflinePushInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *OfflinePushInfo) GetIOSPushSound() string { - if m != nil { - return m.IOSPushSound - } - return "" -} - -func (m *OfflinePushInfo) GetIOSBadgeCount() bool { - if m != nil { - return m.IOSBadgeCount - } - return false -} - -type TipsComm struct { - Detail []byte `protobuf:"bytes,1,opt,name=detail,proto3" json:"detail,omitempty"` - DefaultTips string `protobuf:"bytes,2,opt,name=defaultTips" json:"defaultTips,omitempty"` - JsonDetail string `protobuf:"bytes,3,opt,name=jsonDetail" json:"jsonDetail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *TipsComm) Reset() { *m = TipsComm{} } -func (m *TipsComm) String() string { return proto.CompactTextString(m) } -func (*TipsComm) ProtoMessage() {} -func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{20} -} -func (m *TipsComm) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_TipsComm.Unmarshal(m, b) -} -func (m *TipsComm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_TipsComm.Marshal(b, m, deterministic) -} -func (dst *TipsComm) XXX_Merge(src proto.Message) { - xxx_messageInfo_TipsComm.Merge(dst, src) -} -func (m *TipsComm) XXX_Size() int { - return xxx_messageInfo_TipsComm.Size(m) -} -func (m *TipsComm) XXX_DiscardUnknown() { - xxx_messageInfo_TipsComm.DiscardUnknown(m) -} - -var xxx_messageInfo_TipsComm proto.InternalMessageInfo - -func (m *TipsComm) GetDetail() []byte { - if m != nil { - return m.Detail - } - return nil -} - -func (m *TipsComm) GetDefaultTips() string { - if m != nil { - return m.DefaultTips - } - return "" -} - -func (m *TipsComm) GetJsonDetail() string { - if m != nil { - return m.JsonDetail - } - return "" -} - -// OnGroupCreated() -type GroupCreatedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - MemberList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=memberList" json:"memberList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - GroupOwnerUser *GroupMemberFullInfo `protobuf:"bytes,5,opt,name=groupOwnerUser" json:"groupOwnerUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } -func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } -func (*GroupCreatedTips) ProtoMessage() {} -func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{21} -} -func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) -} -func (m *GroupCreatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupCreatedTips.Marshal(b, m, deterministic) -} -func (dst *GroupCreatedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupCreatedTips.Merge(dst, src) -} -func (m *GroupCreatedTips) XXX_Size() int { - return xxx_messageInfo_GroupCreatedTips.Size(m) -} -func (m *GroupCreatedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupCreatedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupCreatedTips proto.InternalMessageInfo - -func (m *GroupCreatedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupCreatedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupCreatedTips) GetMemberList() []*GroupMemberFullInfo { - if m != nil { - return m.MemberList - } - return nil -} - -func (m *GroupCreatedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupCreatedTips) GetGroupOwnerUser() *GroupMemberFullInfo { - if m != nil { - return m.GroupOwnerUser - } - return nil -} - -// OnGroupInfoSet() -type GroupInfoSetTips struct { - OpUser *GroupMemberFullInfo `protobuf:"bytes,1,opt,name=opUser" json:"opUser,omitempty"` - MuteTime int64 `protobuf:"varint,2,opt,name=muteTime" json:"muteTime,omitempty"` - Group *GroupInfo `protobuf:"bytes,3,opt,name=group" json:"group,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } -func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } -func (*GroupInfoSetTips) ProtoMessage() {} -func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{22} -} -func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) -} -func (m *GroupInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupInfoSetTips.Marshal(b, m, deterministic) -} -func (dst *GroupInfoSetTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupInfoSetTips.Merge(dst, src) -} -func (m *GroupInfoSetTips) XXX_Size() int { - return xxx_messageInfo_GroupInfoSetTips.Size(m) -} -func (m *GroupInfoSetTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupInfoSetTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupInfoSetTips proto.InternalMessageInfo - -func (m *GroupInfoSetTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupInfoSetTips) GetMuteTime() int64 { - if m != nil { - return m.MuteTime - } - return 0 -} - -func (m *GroupInfoSetTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -// OnJoinGroupApplication() -type JoinGroupApplicationTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - Applicant *PublicUserInfo `protobuf:"bytes,2,opt,name=applicant" json:"applicant,omitempty"` - ReqMsg string `protobuf:"bytes,3,opt,name=reqMsg" json:"reqMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTips{} } -func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } -func (*JoinGroupApplicationTips) ProtoMessage() {} -func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{23} -} -func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) -} -func (m *JoinGroupApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_JoinGroupApplicationTips.Marshal(b, m, deterministic) -} -func (dst *JoinGroupApplicationTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinGroupApplicationTips.Merge(dst, src) -} -func (m *JoinGroupApplicationTips) XXX_Size() int { - return xxx_messageInfo_JoinGroupApplicationTips.Size(m) -} -func (m *JoinGroupApplicationTips) XXX_DiscardUnknown() { - xxx_messageInfo_JoinGroupApplicationTips.DiscardUnknown(m) -} - -var xxx_messageInfo_JoinGroupApplicationTips proto.InternalMessageInfo - -func (m *JoinGroupApplicationTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *JoinGroupApplicationTips) GetApplicant() *PublicUserInfo { - if m != nil { - return m.Applicant - } - return nil -} - -func (m *JoinGroupApplicationTips) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -// OnQuitGroup() -// Actively leave the group -type MemberQuitTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - QuitUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=quitUser" json:"quitUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } -func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } -func (*MemberQuitTips) ProtoMessage() {} -func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{24} -} -func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) -} -func (m *MemberQuitTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberQuitTips.Marshal(b, m, deterministic) -} -func (dst *MemberQuitTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberQuitTips.Merge(dst, src) -} -func (m *MemberQuitTips) XXX_Size() int { - return xxx_messageInfo_MemberQuitTips.Size(m) -} -func (m *MemberQuitTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberQuitTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberQuitTips proto.InternalMessageInfo - -func (m *MemberQuitTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberQuitTips) GetQuitUser() *GroupMemberFullInfo { - if m != nil { - return m.QuitUser - } - return nil -} - -func (m *MemberQuitTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnApplicationGroupAccepted() -type GroupApplicationAcceptedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAcceptedTips{} } -func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } -func (*GroupApplicationAcceptedTips) ProtoMessage() {} -func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{25} -} -func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) -} -func (m *GroupApplicationAcceptedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupApplicationAcceptedTips.Marshal(b, m, deterministic) -} -func (dst *GroupApplicationAcceptedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupApplicationAcceptedTips.Merge(dst, src) -} -func (m *GroupApplicationAcceptedTips) XXX_Size() int { - return xxx_messageInfo_GroupApplicationAcceptedTips.Size(m) -} -func (m *GroupApplicationAcceptedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupApplicationAcceptedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupApplicationAcceptedTips proto.InternalMessageInfo - -func (m *GroupApplicationAcceptedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupApplicationAcceptedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupApplicationAcceptedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// OnApplicationGroupRejected() -type GroupApplicationRejectedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRejectedTips{} } -func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } -func (*GroupApplicationRejectedTips) ProtoMessage() {} -func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{26} -} -func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) -} -func (m *GroupApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupApplicationRejectedTips.Marshal(b, m, deterministic) -} -func (dst *GroupApplicationRejectedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupApplicationRejectedTips.Merge(dst, src) -} -func (m *GroupApplicationRejectedTips) XXX_Size() int { - return xxx_messageInfo_GroupApplicationRejectedTips.Size(m) -} -func (m *GroupApplicationRejectedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupApplicationRejectedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupApplicationRejectedTips proto.InternalMessageInfo - -func (m *GroupApplicationRejectedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupApplicationRejectedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupApplicationRejectedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// OnTransferGroupOwner() -type GroupOwnerTransferredTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - NewGroupOwner *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=newGroupOwner" json:"newGroupOwner,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferredTips{} } -func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } -func (*GroupOwnerTransferredTips) ProtoMessage() {} -func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{27} -} -func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) -} -func (m *GroupOwnerTransferredTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupOwnerTransferredTips.Marshal(b, m, deterministic) -} -func (dst *GroupOwnerTransferredTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupOwnerTransferredTips.Merge(dst, src) -} -func (m *GroupOwnerTransferredTips) XXX_Size() int { - return xxx_messageInfo_GroupOwnerTransferredTips.Size(m) -} -func (m *GroupOwnerTransferredTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupOwnerTransferredTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupOwnerTransferredTips proto.InternalMessageInfo - -func (m *GroupOwnerTransferredTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetNewGroupOwner() *GroupMemberFullInfo { - if m != nil { - return m.NewGroupOwner - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnMemberKicked() -type MemberKickedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - KickedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=kickedUserList" json:"kickedUserList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } -func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } -func (*MemberKickedTips) ProtoMessage() {} -func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{28} -} -func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) -} -func (m *MemberKickedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberKickedTips.Marshal(b, m, deterministic) -} -func (dst *MemberKickedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberKickedTips.Merge(dst, src) -} -func (m *MemberKickedTips) XXX_Size() int { - return xxx_messageInfo_MemberKickedTips.Size(m) -} -func (m *MemberKickedTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberKickedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberKickedTips proto.InternalMessageInfo - -func (m *MemberKickedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberKickedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *MemberKickedTips) GetKickedUserList() []*GroupMemberFullInfo { - if m != nil { - return m.KickedUserList - } - return nil -} - -func (m *MemberKickedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnMemberInvited() -type MemberInvitedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - InvitedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=invitedUserList" json:"invitedUserList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } -func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } -func (*MemberInvitedTips) ProtoMessage() {} -func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{29} -} -func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) -} -func (m *MemberInvitedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberInvitedTips.Marshal(b, m, deterministic) -} -func (dst *MemberInvitedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberInvitedTips.Merge(dst, src) -} -func (m *MemberInvitedTips) XXX_Size() int { - return xxx_messageInfo_MemberInvitedTips.Size(m) -} -func (m *MemberInvitedTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberInvitedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberInvitedTips proto.InternalMessageInfo - -func (m *MemberInvitedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberInvitedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *MemberInvitedTips) GetInvitedUserList() []*GroupMemberFullInfo { - if m != nil { - return m.InvitedUserList - } - return nil -} - -func (m *MemberInvitedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// Actively join the group -type MemberEnterTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - EntrantUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=entrantUser" json:"entrantUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } -func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } -func (*MemberEnterTips) ProtoMessage() {} -func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{30} -} -func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) -} -func (m *MemberEnterTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberEnterTips.Marshal(b, m, deterministic) -} -func (dst *MemberEnterTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberEnterTips.Merge(dst, src) -} -func (m *MemberEnterTips) XXX_Size() int { - return xxx_messageInfo_MemberEnterTips.Size(m) -} -func (m *MemberEnterTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberEnterTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberEnterTips proto.InternalMessageInfo - -func (m *MemberEnterTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberEnterTips) GetEntrantUser() *GroupMemberFullInfo { - if m != nil { - return m.EntrantUser - } - return nil -} - -func (m *MemberEnterTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupDismissedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } -func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } -func (*GroupDismissedTips) ProtoMessage() {} -func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{31} -} -func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) -} -func (m *GroupDismissedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupDismissedTips.Marshal(b, m, deterministic) -} -func (dst *GroupDismissedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupDismissedTips.Merge(dst, src) -} -func (m *GroupDismissedTips) XXX_Size() int { - return xxx_messageInfo_GroupDismissedTips.Size(m) -} -func (m *GroupDismissedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupDismissedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupDismissedTips proto.InternalMessageInfo - -func (m *GroupDismissedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupDismissedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupDismissedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupMemberMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` - MutedSeconds uint32 `protobuf:"varint,5,opt,name=mutedSeconds" json:"mutedSeconds,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } -func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupMemberMutedTips) ProtoMessage() {} -func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{32} -} -func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) -} -func (m *GroupMemberMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberMutedTips.Merge(dst, src) -} -func (m *GroupMemberMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberMutedTips.Size(m) -} -func (m *GroupMemberMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberMutedTips proto.InternalMessageInfo - -func (m *GroupMemberMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberMutedTips) GetMutedUser() *GroupMemberFullInfo { - if m != nil { - return m.MutedUser - } - return nil -} - -func (m *GroupMemberMutedTips) GetMutedSeconds() uint32 { - if m != nil { - return m.MutedSeconds - } - return 0 -} - -type GroupMemberCancelMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMutedTips{} } -func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupMemberCancelMutedTips) ProtoMessage() {} -func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{33} -} -func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) -} -func (m *GroupMemberCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberCancelMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberCancelMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberCancelMutedTips.Merge(dst, src) -} -func (m *GroupMemberCancelMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberCancelMutedTips.Size(m) -} -func (m *GroupMemberCancelMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberCancelMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberCancelMutedTips proto.InternalMessageInfo - -func (m *GroupMemberCancelMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberCancelMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberCancelMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberCancelMutedTips) GetMutedUser() *GroupMemberFullInfo { - if m != nil { - return m.MutedUser - } - return nil -} - -type GroupMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } -func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupMutedTips) ProtoMessage() {} -func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{34} -} -func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) -} -func (m *GroupMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMutedTips.Merge(dst, src) -} -func (m *GroupMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMutedTips.Size(m) -} -func (m *GroupMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMutedTips proto.InternalMessageInfo - -func (m *GroupMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupCancelMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } -func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupCancelMutedTips) ProtoMessage() {} -func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{35} -} -func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) -} -func (m *GroupCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupCancelMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupCancelMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupCancelMutedTips.Merge(dst, src) -} -func (m *GroupCancelMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupCancelMutedTips.Size(m) -} -func (m *GroupCancelMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupCancelMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupCancelMutedTips proto.InternalMessageInfo - -func (m *GroupCancelMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupCancelMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupCancelMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupMemberInfoSetTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - ChangedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=changedUser" json:"changedUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} } -func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } -func (*GroupMemberInfoSetTips) ProtoMessage() {} -func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{36} -} -func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) -} -func (m *GroupMemberInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberInfoSetTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberInfoSetTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberInfoSetTips.Merge(dst, src) -} -func (m *GroupMemberInfoSetTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberInfoSetTips.Size(m) -} -func (m *GroupMemberInfoSetTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberInfoSetTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberInfoSetTips proto.InternalMessageInfo - -func (m *GroupMemberInfoSetTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberInfoSetTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberInfoSetTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberInfoSetTips) GetChangedUser() *GroupMemberFullInfo { - if m != nil { - return m.ChangedUser - } - return nil -} - -type OrganizationChangedTips struct { - OpUser *UserInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips{} } -func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } -func (*OrganizationChangedTips) ProtoMessage() {} -func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{37} -} -func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) -} -func (m *OrganizationChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OrganizationChangedTips.Marshal(b, m, deterministic) -} -func (dst *OrganizationChangedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrganizationChangedTips.Merge(dst, src) -} -func (m *OrganizationChangedTips) XXX_Size() int { - return xxx_messageInfo_OrganizationChangedTips.Size(m) -} -func (m *OrganizationChangedTips) XXX_DiscardUnknown() { - xxx_messageInfo_OrganizationChangedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_OrganizationChangedTips proto.InternalMessageInfo - -func (m *OrganizationChangedTips) GetOpUser() *UserInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *OrganizationChangedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type FriendApplication struct { - AddTime int64 `protobuf:"varint,1,opt,name=addTime" json:"addTime,omitempty"` - AddSource string `protobuf:"bytes,2,opt,name=addSource" json:"addSource,omitempty"` - AddWording string `protobuf:"bytes,3,opt,name=addWording" json:"addWording,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplication) Reset() { *m = FriendApplication{} } -func (m *FriendApplication) String() string { return proto.CompactTextString(m) } -func (*FriendApplication) ProtoMessage() {} -func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{38} -} -func (m *FriendApplication) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplication.Unmarshal(m, b) -} -func (m *FriendApplication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplication.Marshal(b, m, deterministic) -} -func (dst *FriendApplication) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplication.Merge(dst, src) -} -func (m *FriendApplication) XXX_Size() int { - return xxx_messageInfo_FriendApplication.Size(m) -} -func (m *FriendApplication) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplication.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplication proto.InternalMessageInfo - -func (m *FriendApplication) GetAddTime() int64 { - if m != nil { - return m.AddTime - } - return 0 -} - -func (m *FriendApplication) GetAddSource() string { - if m != nil { - return m.AddSource - } - return "" -} - -func (m *FriendApplication) GetAddWording() string { - if m != nil { - return m.AddWording - } - return "" -} - -type FromToUserID struct { - FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` - ToUserID string `protobuf:"bytes,2,opt,name=toUserID" json:"toUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FromToUserID) Reset() { *m = FromToUserID{} } -func (m *FromToUserID) String() string { return proto.CompactTextString(m) } -func (*FromToUserID) ProtoMessage() {} -func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{39} -} -func (m *FromToUserID) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FromToUserID.Unmarshal(m, b) -} -func (m *FromToUserID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FromToUserID.Marshal(b, m, deterministic) -} -func (dst *FromToUserID) XXX_Merge(src proto.Message) { - xxx_messageInfo_FromToUserID.Merge(dst, src) -} -func (m *FromToUserID) XXX_Size() int { - return xxx_messageInfo_FromToUserID.Size(m) -} -func (m *FromToUserID) XXX_DiscardUnknown() { - xxx_messageInfo_FromToUserID.DiscardUnknown(m) -} - -var xxx_messageInfo_FromToUserID proto.InternalMessageInfo - -func (m *FromToUserID) GetFromUserID() string { - if m != nil { - return m.FromUserID - } - return "" -} - -func (m *FromToUserID) GetToUserID() string { - if m != nil { - return m.ToUserID - } - return "" -} - -// FromUserID apply to add ToUserID -type FriendApplicationTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } -func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationTips) ProtoMessage() {} -func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{40} -} -func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) -} -func (m *FriendApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationTips.Merge(dst, src) -} -func (m *FriendApplicationTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationTips.Size(m) -} -func (m *FriendApplicationTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationTips proto.InternalMessageInfo - -func (m *FriendApplicationTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -// FromUserID accept or reject ToUserID -type FriendApplicationApprovedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplicationApprovedTips{} } -func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationApprovedTips) ProtoMessage() {} -func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{41} -} -func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) -} -func (m *FriendApplicationApprovedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationApprovedTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationApprovedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationApprovedTips.Merge(dst, src) -} -func (m *FriendApplicationApprovedTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationApprovedTips.Size(m) -} -func (m *FriendApplicationApprovedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationApprovedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationApprovedTips proto.InternalMessageInfo - -func (m *FriendApplicationApprovedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -func (m *FriendApplicationApprovedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// FromUserID accept or reject ToUserID -type FriendApplicationRejectedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplicationRejectedTips{} } -func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationRejectedTips) ProtoMessage() {} -func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{42} -} -func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) -} -func (m *FriendApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationRejectedTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationRejectedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationRejectedTips.Merge(dst, src) -} -func (m *FriendApplicationRejectedTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationRejectedTips.Size(m) -} -func (m *FriendApplicationRejectedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationRejectedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationRejectedTips proto.InternalMessageInfo - -func (m *FriendApplicationRejectedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -func (m *FriendApplicationRejectedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// FromUserID Added a friend ToUserID -type FriendAddedTips struct { - Friend *FriendInfo `protobuf:"bytes,1,opt,name=friend" json:"friend,omitempty"` - OperationTime int64 `protobuf:"varint,2,opt,name=operationTime" json:"operationTime,omitempty"` - OpUser *PublicUserInfo `protobuf:"bytes,3,opt,name=opUser" json:"opUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } -func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } -func (*FriendAddedTips) ProtoMessage() {} -func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{43} -} -func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) -} -func (m *FriendAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendAddedTips.Marshal(b, m, deterministic) -} -func (dst *FriendAddedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendAddedTips.Merge(dst, src) -} -func (m *FriendAddedTips) XXX_Size() int { - return xxx_messageInfo_FriendAddedTips.Size(m) -} -func (m *FriendAddedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendAddedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendAddedTips proto.InternalMessageInfo - -func (m *FriendAddedTips) GetFriend() *FriendInfo { - if m != nil { - return m.Friend - } - return nil -} - -func (m *FriendAddedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *FriendAddedTips) GetOpUser() *PublicUserInfo { - if m != nil { - return m.OpUser - } - return nil -} - -// FromUserID deleted a friend ToUserID -type FriendDeletedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } -func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } -func (*FriendDeletedTips) ProtoMessage() {} -func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{44} -} -func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) -} -func (m *FriendDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendDeletedTips.Marshal(b, m, deterministic) -} -func (dst *FriendDeletedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendDeletedTips.Merge(dst, src) -} -func (m *FriendDeletedTips) XXX_Size() int { - return xxx_messageInfo_FriendDeletedTips.Size(m) -} -func (m *FriendDeletedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendDeletedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendDeletedTips proto.InternalMessageInfo - -func (m *FriendDeletedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type BlackAddedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } -func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } -func (*BlackAddedTips) ProtoMessage() {} -func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{45} -} -func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) -} -func (m *BlackAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackAddedTips.Marshal(b, m, deterministic) -} -func (dst *BlackAddedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackAddedTips.Merge(dst, src) -} -func (m *BlackAddedTips) XXX_Size() int { - return xxx_messageInfo_BlackAddedTips.Size(m) -} -func (m *BlackAddedTips) XXX_DiscardUnknown() { - xxx_messageInfo_BlackAddedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackAddedTips proto.InternalMessageInfo - -func (m *BlackAddedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type BlackDeletedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } -func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } -func (*BlackDeletedTips) ProtoMessage() {} -func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{46} -} -func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) -} -func (m *BlackDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackDeletedTips.Marshal(b, m, deterministic) -} -func (dst *BlackDeletedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackDeletedTips.Merge(dst, src) -} -func (m *BlackDeletedTips) XXX_Size() int { - return xxx_messageInfo_BlackDeletedTips.Size(m) -} -func (m *BlackDeletedTips) XXX_DiscardUnknown() { - xxx_messageInfo_BlackDeletedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackDeletedTips proto.InternalMessageInfo - -func (m *BlackDeletedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type FriendInfoChangedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } -func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } -func (*FriendInfoChangedTips) ProtoMessage() {} -func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{47} -} -func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) -} -func (m *FriendInfoChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendInfoChangedTips.Marshal(b, m, deterministic) -} -func (dst *FriendInfoChangedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendInfoChangedTips.Merge(dst, src) -} -func (m *FriendInfoChangedTips) XXX_Size() int { - return xxx_messageInfo_FriendInfoChangedTips.Size(m) -} -func (m *FriendInfoChangedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendInfoChangedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendInfoChangedTips proto.InternalMessageInfo - -func (m *FriendInfoChangedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -// ////////////////////user///////////////////// -type UserInfoUpdatedTips struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } -func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } -func (*UserInfoUpdatedTips) ProtoMessage() {} -func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{48} -} -func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) -} -func (m *UserInfoUpdatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfoUpdatedTips.Marshal(b, m, deterministic) -} -func (dst *UserInfoUpdatedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfoUpdatedTips.Merge(dst, src) -} -func (m *UserInfoUpdatedTips) XXX_Size() int { - return xxx_messageInfo_UserInfoUpdatedTips.Size(m) -} -func (m *UserInfoUpdatedTips) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfoUpdatedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInfoUpdatedTips proto.InternalMessageInfo - -func (m *UserInfoUpdatedTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -// ////////////////////conversation///////////////////// -type ConversationUpdateTips struct { - UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} } -func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } -func (*ConversationUpdateTips) ProtoMessage() {} -func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{49} -} -func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) -} -func (m *ConversationUpdateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ConversationUpdateTips.Marshal(b, m, deterministic) -} -func (dst *ConversationUpdateTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConversationUpdateTips.Merge(dst, src) -} -func (m *ConversationUpdateTips) XXX_Size() int { - return xxx_messageInfo_ConversationUpdateTips.Size(m) -} -func (m *ConversationUpdateTips) XXX_DiscardUnknown() { - xxx_messageInfo_ConversationUpdateTips.DiscardUnknown(m) -} - -var xxx_messageInfo_ConversationUpdateTips proto.InternalMessageInfo - -func (m *ConversationUpdateTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -type ConversationSetPrivateTips struct { - RecvID string `protobuf:"bytes,1,opt,name=recvID" json:"recvID,omitempty"` - SendID string `protobuf:"bytes,2,opt,name=sendID" json:"sendID,omitempty"` - IsPrivate bool `protobuf:"varint,3,opt,name=isPrivate" json:"isPrivate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPrivateTips{} } -func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } -func (*ConversationSetPrivateTips) ProtoMessage() {} -func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{50} -} -func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) -} -func (m *ConversationSetPrivateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ConversationSetPrivateTips.Marshal(b, m, deterministic) -} -func (dst *ConversationSetPrivateTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConversationSetPrivateTips.Merge(dst, src) -} -func (m *ConversationSetPrivateTips) XXX_Size() int { - return xxx_messageInfo_ConversationSetPrivateTips.Size(m) -} -func (m *ConversationSetPrivateTips) XXX_DiscardUnknown() { - xxx_messageInfo_ConversationSetPrivateTips.DiscardUnknown(m) -} - -var xxx_messageInfo_ConversationSetPrivateTips proto.InternalMessageInfo - -func (m *ConversationSetPrivateTips) GetRecvID() string { - if m != nil { - return m.RecvID - } - return "" -} - -func (m *ConversationSetPrivateTips) GetSendID() string { - if m != nil { - return m.SendID - } - return "" -} - -func (m *ConversationSetPrivateTips) GetIsPrivate() bool { - if m != nil { - return m.IsPrivate - } - return false -} - -// //////////////////message/////////////////////// -type DeleteMessageTips struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } -func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } -func (*DeleteMessageTips) ProtoMessage() {} -func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{51} -} -func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) -} -func (m *DeleteMessageTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteMessageTips.Marshal(b, m, deterministic) -} -func (dst *DeleteMessageTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteMessageTips.Merge(dst, src) -} -func (m *DeleteMessageTips) XXX_Size() int { - return xxx_messageInfo_DeleteMessageTips.Size(m) -} -func (m *DeleteMessageTips) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteMessageTips.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteMessageTips proto.InternalMessageInfo - -func (m *DeleteMessageTips) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *DeleteMessageTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DeleteMessageTips) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -// /cms -type RequestPagination struct { - PageNumber int32 `protobuf:"varint,1,opt,name=pageNumber" json:"pageNumber,omitempty"` - ShowNumber int32 `protobuf:"varint,2,opt,name=showNumber" json:"showNumber,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RequestPagination) Reset() { *m = RequestPagination{} } -func (m *RequestPagination) String() string { return proto.CompactTextString(m) } -func (*RequestPagination) ProtoMessage() {} -func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{52} -} -func (m *RequestPagination) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RequestPagination.Unmarshal(m, b) -} -func (m *RequestPagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RequestPagination.Marshal(b, m, deterministic) -} -func (dst *RequestPagination) XXX_Merge(src proto.Message) { - xxx_messageInfo_RequestPagination.Merge(dst, src) -} -func (m *RequestPagination) XXX_Size() int { - return xxx_messageInfo_RequestPagination.Size(m) -} -func (m *RequestPagination) XXX_DiscardUnknown() { - xxx_messageInfo_RequestPagination.DiscardUnknown(m) -} - -var xxx_messageInfo_RequestPagination proto.InternalMessageInfo - -func (m *RequestPagination) GetPageNumber() int32 { - if m != nil { - return m.PageNumber - } - return 0 -} - -func (m *RequestPagination) GetShowNumber() int32 { - if m != nil { - return m.ShowNumber - } - return 0 -} - -type ResponsePagination struct { - CurrentPage int32 `protobuf:"varint,5,opt,name=CurrentPage" json:"CurrentPage,omitempty"` - ShowNumber int32 `protobuf:"varint,6,opt,name=ShowNumber" json:"ShowNumber,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } -func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } -func (*ResponsePagination) ProtoMessage() {} -func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{53} -} -func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) -} -func (m *ResponsePagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponsePagination.Marshal(b, m, deterministic) -} -func (dst *ResponsePagination) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponsePagination.Merge(dst, src) -} -func (m *ResponsePagination) XXX_Size() int { - return xxx_messageInfo_ResponsePagination.Size(m) -} -func (m *ResponsePagination) XXX_DiscardUnknown() { - xxx_messageInfo_ResponsePagination.DiscardUnknown(m) -} - -var xxx_messageInfo_ResponsePagination proto.InternalMessageInfo - -func (m *ResponsePagination) GetCurrentPage() int32 { - if m != nil { - return m.CurrentPage - } - return 0 -} - -func (m *ResponsePagination) GetShowNumber() int32 { - if m != nil { - return m.ShowNumber - } - return 0 -} - -// /////////////////signal////////////// -type SignalReq struct { - // Types that are valid to be assigned to Payload: - // *SignalReq_Invite - // *SignalReq_InviteInGroup - // *SignalReq_Cancel - // *SignalReq_Accept - // *SignalReq_HungUp - // *SignalReq_Reject - Payload isSignalReq_Payload `protobuf_oneof:"payload"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalReq) Reset() { *m = SignalReq{} } -func (m *SignalReq) String() string { return proto.CompactTextString(m) } -func (*SignalReq) ProtoMessage() {} -func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{54} -} -func (m *SignalReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalReq.Unmarshal(m, b) -} -func (m *SignalReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalReq.Marshal(b, m, deterministic) -} -func (dst *SignalReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalReq.Merge(dst, src) -} -func (m *SignalReq) XXX_Size() int { - return xxx_messageInfo_SignalReq.Size(m) -} -func (m *SignalReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalReq proto.InternalMessageInfo - -type isSignalReq_Payload interface { - isSignalReq_Payload() -} - -type SignalReq_Invite struct { - Invite *SignalInviteReq `protobuf:"bytes,1,opt,name=invite,oneof"` -} -type SignalReq_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReq `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` -} -type SignalReq_Cancel struct { - Cancel *SignalCancelReq `protobuf:"bytes,3,opt,name=cancel,oneof"` -} -type SignalReq_Accept struct { - Accept *SignalAcceptReq `protobuf:"bytes,4,opt,name=accept,oneof"` -} -type SignalReq_HungUp struct { - HungUp *SignalHungUpReq `protobuf:"bytes,5,opt,name=hungUp,oneof"` -} -type SignalReq_Reject struct { - Reject *SignalRejectReq `protobuf:"bytes,6,opt,name=reject,oneof"` -} - -func (*SignalReq_Invite) isSignalReq_Payload() {} -func (*SignalReq_InviteInGroup) isSignalReq_Payload() {} -func (*SignalReq_Cancel) isSignalReq_Payload() {} -func (*SignalReq_Accept) isSignalReq_Payload() {} -func (*SignalReq_HungUp) isSignalReq_Payload() {} -func (*SignalReq_Reject) isSignalReq_Payload() {} - -func (m *SignalReq) GetPayload() isSignalReq_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (m *SignalReq) GetInvite() *SignalInviteReq { - if x, ok := m.GetPayload().(*SignalReq_Invite); ok { - return x.Invite - } - return nil -} - -func (m *SignalReq) GetInviteInGroup() *SignalInviteInGroupReq { - if x, ok := m.GetPayload().(*SignalReq_InviteInGroup); ok { - return x.InviteInGroup - } - return nil -} - -func (m *SignalReq) GetCancel() *SignalCancelReq { - if x, ok := m.GetPayload().(*SignalReq_Cancel); ok { - return x.Cancel - } - return nil -} - -func (m *SignalReq) GetAccept() *SignalAcceptReq { - if x, ok := m.GetPayload().(*SignalReq_Accept); ok { - return x.Accept - } - return nil -} - -func (m *SignalReq) GetHungUp() *SignalHungUpReq { - if x, ok := m.GetPayload().(*SignalReq_HungUp); ok { - return x.HungUp - } - return nil -} - -func (m *SignalReq) GetReject() *SignalRejectReq { - if x, ok := m.GetPayload().(*SignalReq_Reject); ok { - return x.Reject - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SignalReq) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SignalReq_OneofMarshaler, _SignalReq_OneofUnmarshaler, _SignalReq_OneofSizer, []interface{}{ - (*SignalReq_Invite)(nil), - (*SignalReq_InviteInGroup)(nil), - (*SignalReq_Cancel)(nil), - (*SignalReq_Accept)(nil), - (*SignalReq_HungUp)(nil), - (*SignalReq_Reject)(nil), - } -} - -func _SignalReq_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SignalReq) - // payload - switch x := m.Payload.(type) { - case *SignalReq_Invite: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Invite); err != nil { - return err - } - case *SignalReq_InviteInGroup: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InviteInGroup); err != nil { - return err - } - case *SignalReq_Cancel: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cancel); err != nil { - return err - } - case *SignalReq_Accept: - b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Accept); err != nil { - return err - } - case *SignalReq_HungUp: - b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HungUp); err != nil { - return err - } - case *SignalReq_Reject: - b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Reject); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("SignalReq.Payload has unexpected type %T", x) - } - return nil -} - -func _SignalReq_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SignalReq) - switch tag { - case 1: // payload.invite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Invite{msg} - return true, err - case 2: // payload.inviteInGroup - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteInGroupReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_InviteInGroup{msg} - return true, err - case 3: // payload.cancel - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalCancelReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Cancel{msg} - return true, err - case 4: // payload.accept - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalAcceptReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Accept{msg} - return true, err - case 5: // payload.hungUp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalHungUpReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_HungUp{msg} - return true, err - case 6: // payload.reject - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalRejectReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Reject{msg} - return true, err - default: - return false, nil - } -} - -func _SignalReq_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SignalReq) - // payload - switch x := m.Payload.(type) { - case *SignalReq_Invite: - s := proto.Size(x.Invite) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_InviteInGroup: - s := proto.Size(x.InviteInGroup) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Cancel: - s := proto.Size(x.Cancel) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Accept: - s := proto.Size(x.Accept) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_HungUp: - s := proto.Size(x.HungUp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Reject: - s := proto.Size(x.Reject) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type SignalResp struct { - // Types that are valid to be assigned to Payload: - // *SignalResp_Invite - // *SignalResp_InviteInGroup - // *SignalResp_Cancel - // *SignalResp_Accept - // *SignalResp_HungUp - // *SignalResp_Reject - Payload isSignalResp_Payload `protobuf_oneof:"payload"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalResp) Reset() { *m = SignalResp{} } -func (m *SignalResp) String() string { return proto.CompactTextString(m) } -func (*SignalResp) ProtoMessage() {} -func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{55} -} -func (m *SignalResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalResp.Unmarshal(m, b) -} -func (m *SignalResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalResp.Marshal(b, m, deterministic) -} -func (dst *SignalResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalResp.Merge(dst, src) -} -func (m *SignalResp) XXX_Size() int { - return xxx_messageInfo_SignalResp.Size(m) -} -func (m *SignalResp) XXX_DiscardUnknown() { - xxx_messageInfo_SignalResp.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalResp proto.InternalMessageInfo - -type isSignalResp_Payload interface { - isSignalResp_Payload() -} - -type SignalResp_Invite struct { - Invite *SignalInviteReply `protobuf:"bytes,1,opt,name=invite,oneof"` -} -type SignalResp_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReply `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` -} -type SignalResp_Cancel struct { - Cancel *SignalCancelReply `protobuf:"bytes,3,opt,name=cancel,oneof"` -} -type SignalResp_Accept struct { - Accept *SignalAcceptReply `protobuf:"bytes,4,opt,name=accept,oneof"` -} -type SignalResp_HungUp struct { - HungUp *SignalHungUpReply `protobuf:"bytes,5,opt,name=hungUp,oneof"` -} -type SignalResp_Reject struct { - Reject *SignalRejectReply `protobuf:"bytes,6,opt,name=reject,oneof"` -} - -func (*SignalResp_Invite) isSignalResp_Payload() {} -func (*SignalResp_InviteInGroup) isSignalResp_Payload() {} -func (*SignalResp_Cancel) isSignalResp_Payload() {} -func (*SignalResp_Accept) isSignalResp_Payload() {} -func (*SignalResp_HungUp) isSignalResp_Payload() {} -func (*SignalResp_Reject) isSignalResp_Payload() {} - -func (m *SignalResp) GetPayload() isSignalResp_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (m *SignalResp) GetInvite() *SignalInviteReply { - if x, ok := m.GetPayload().(*SignalResp_Invite); ok { - return x.Invite - } - return nil -} - -func (m *SignalResp) GetInviteInGroup() *SignalInviteInGroupReply { - if x, ok := m.GetPayload().(*SignalResp_InviteInGroup); ok { - return x.InviteInGroup - } - return nil -} - -func (m *SignalResp) GetCancel() *SignalCancelReply { - if x, ok := m.GetPayload().(*SignalResp_Cancel); ok { - return x.Cancel - } - return nil -} - -func (m *SignalResp) GetAccept() *SignalAcceptReply { - if x, ok := m.GetPayload().(*SignalResp_Accept); ok { - return x.Accept - } - return nil -} - -func (m *SignalResp) GetHungUp() *SignalHungUpReply { - if x, ok := m.GetPayload().(*SignalResp_HungUp); ok { - return x.HungUp - } - return nil -} - -func (m *SignalResp) GetReject() *SignalRejectReply { - if x, ok := m.GetPayload().(*SignalResp_Reject); ok { - return x.Reject - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SignalResp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SignalResp_OneofMarshaler, _SignalResp_OneofUnmarshaler, _SignalResp_OneofSizer, []interface{}{ - (*SignalResp_Invite)(nil), - (*SignalResp_InviteInGroup)(nil), - (*SignalResp_Cancel)(nil), - (*SignalResp_Accept)(nil), - (*SignalResp_HungUp)(nil), - (*SignalResp_Reject)(nil), - } -} - -func _SignalResp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SignalResp) - // payload - switch x := m.Payload.(type) { - case *SignalResp_Invite: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Invite); err != nil { - return err - } - case *SignalResp_InviteInGroup: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InviteInGroup); err != nil { - return err - } - case *SignalResp_Cancel: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cancel); err != nil { - return err - } - case *SignalResp_Accept: - b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Accept); err != nil { - return err - } - case *SignalResp_HungUp: - b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HungUp); err != nil { - return err - } - case *SignalResp_Reject: - b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Reject); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("SignalResp.Payload has unexpected type %T", x) - } - return nil -} - -func _SignalResp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SignalResp) - switch tag { - case 1: // payload.invite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Invite{msg} - return true, err - case 2: // payload.inviteInGroup - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteInGroupReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_InviteInGroup{msg} - return true, err - case 3: // payload.cancel - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalCancelReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Cancel{msg} - return true, err - case 4: // payload.accept - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalAcceptReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Accept{msg} - return true, err - case 5: // payload.hungUp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalHungUpReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_HungUp{msg} - return true, err - case 6: // payload.reject - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalRejectReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Reject{msg} - return true, err - default: - return false, nil - } -} - -func _SignalResp_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SignalResp) - // payload - switch x := m.Payload.(type) { - case *SignalResp_Invite: - s := proto.Size(x.Invite) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_InviteInGroup: - s := proto.Size(x.InviteInGroup) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Cancel: - s := proto.Size(x.Cancel) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Accept: - s := proto.Size(x.Accept) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_HungUp: - s := proto.Size(x.HungUp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Reject: - s := proto.Size(x.Reject) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type InvitationInfo struct { - InviterUserID string `protobuf:"bytes,1,opt,name=inviterUserID" json:"inviterUserID,omitempty"` - InviteeUserIDList []string `protobuf:"bytes,2,rep,name=inviteeUserIDList" json:"inviteeUserIDList,omitempty"` - CustomData string `protobuf:"bytes,3,opt,name=customData" json:"customData,omitempty"` - GroupID string `protobuf:"bytes,4,opt,name=groupID" json:"groupID,omitempty"` - RoomID string `protobuf:"bytes,5,opt,name=roomID" json:"roomID,omitempty"` - InitiateTime int32 `protobuf:"varint,6,opt,name=initiateTime" json:"initiateTime,omitempty"` - Timeout int32 `protobuf:"varint,7,opt,name=timeout" json:"timeout,omitempty"` - MediaType string `protobuf:"bytes,8,opt,name=mediaType" json:"mediaType,omitempty"` - PlatformID int32 `protobuf:"varint,9,opt,name=platformID" json:"platformID,omitempty"` - SessionType int32 `protobuf:"varint,10,opt,name=sessionType" json:"sessionType,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } -func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } -func (*InvitationInfo) ProtoMessage() {} -func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{56} -} -func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) -} -func (m *InvitationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_InvitationInfo.Marshal(b, m, deterministic) -} -func (dst *InvitationInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_InvitationInfo.Merge(dst, src) -} -func (m *InvitationInfo) XXX_Size() int { - return xxx_messageInfo_InvitationInfo.Size(m) -} -func (m *InvitationInfo) XXX_DiscardUnknown() { - xxx_messageInfo_InvitationInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_InvitationInfo proto.InternalMessageInfo - -func (m *InvitationInfo) GetInviterUserID() string { - if m != nil { - return m.InviterUserID - } - return "" -} - -func (m *InvitationInfo) GetInviteeUserIDList() []string { - if m != nil { - return m.InviteeUserIDList - } - return nil -} - -func (m *InvitationInfo) GetCustomData() string { - if m != nil { - return m.CustomData - } - return "" -} - -func (m *InvitationInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *InvitationInfo) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *InvitationInfo) GetInitiateTime() int32 { - if m != nil { - return m.InitiateTime - } - return 0 -} - -func (m *InvitationInfo) GetTimeout() int32 { - if m != nil { - return m.Timeout - } - return 0 -} - -func (m *InvitationInfo) GetMediaType() string { - if m != nil { - return m.MediaType - } - return "" -} - -func (m *InvitationInfo) GetPlatformID() int32 { - if m != nil { - return m.PlatformID - } - return 0 -} - -func (m *InvitationInfo) GetSessionType() int32 { - if m != nil { - return m.SessionType - } - return 0 -} - -type ParticipantMetaData struct { - GroupInfo *GroupInfo `protobuf:"bytes,1,opt,name=groupInfo" json:"groupInfo,omitempty"` - GroupMemberInfo *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=groupMemberInfo" json:"groupMemberInfo,omitempty"` - UserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=userInfo" json:"userInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } -func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } -func (*ParticipantMetaData) ProtoMessage() {} -func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{57} -} -func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) -} -func (m *ParticipantMetaData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ParticipantMetaData.Marshal(b, m, deterministic) -} -func (dst *ParticipantMetaData) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParticipantMetaData.Merge(dst, src) -} -func (m *ParticipantMetaData) XXX_Size() int { - return xxx_messageInfo_ParticipantMetaData.Size(m) -} -func (m *ParticipantMetaData) XXX_DiscardUnknown() { - xxx_messageInfo_ParticipantMetaData.DiscardUnknown(m) -} - -var xxx_messageInfo_ParticipantMetaData proto.InternalMessageInfo - -func (m *ParticipantMetaData) GetGroupInfo() *GroupInfo { - if m != nil { - return m.GroupInfo - } - return nil -} - -func (m *ParticipantMetaData) GetGroupMemberInfo() *GroupMemberFullInfo { - if m != nil { - return m.GroupMemberInfo - } - return nil -} - -func (m *ParticipantMetaData) GetUserInfo() *PublicUserInfo { - if m != nil { - return m.UserInfo - } - return nil -} - -type SignalInviteReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } -func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } -func (*SignalInviteReq) ProtoMessage() {} -func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{58} -} -func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) -} -func (m *SignalInviteReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteReq.Marshal(b, m, deterministic) -} -func (dst *SignalInviteReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteReq.Merge(dst, src) -} -func (m *SignalInviteReq) XXX_Size() int { - return xxx_messageInfo_SignalInviteReq.Size(m) -} -func (m *SignalInviteReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteReq proto.InternalMessageInfo - -func (m *SignalInviteReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalInviteReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalInviteReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalInviteReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalInviteReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } -func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } -func (*SignalInviteReply) ProtoMessage() {} -func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{59} -} -func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) -} -func (m *SignalInviteReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteReply.Marshal(b, m, deterministic) -} -func (dst *SignalInviteReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteReply.Merge(dst, src) -} -func (m *SignalInviteReply) XXX_Size() int { - return xxx_messageInfo_SignalInviteReply.Size(m) -} -func (m *SignalInviteReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteReply proto.InternalMessageInfo - -func (m *SignalInviteReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalInviteReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalInviteReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalInviteInGroupReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} } -func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } -func (*SignalInviteInGroupReq) ProtoMessage() {} -func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{60} -} -func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) -} -func (m *SignalInviteInGroupReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteInGroupReq.Marshal(b, m, deterministic) -} -func (dst *SignalInviteInGroupReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteInGroupReq.Merge(dst, src) -} -func (m *SignalInviteInGroupReq) XXX_Size() int { - return xxx_messageInfo_SignalInviteInGroupReq.Size(m) -} -func (m *SignalInviteInGroupReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteInGroupReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteInGroupReq proto.InternalMessageInfo - -func (m *SignalInviteInGroupReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalInviteInGroupReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalInviteInGroupReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalInviteInGroupReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalInviteInGroupReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupReply{} } -func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } -func (*SignalInviteInGroupReply) ProtoMessage() {} -func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{61} -} -func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) -} -func (m *SignalInviteInGroupReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteInGroupReply.Marshal(b, m, deterministic) -} -func (dst *SignalInviteInGroupReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteInGroupReply.Merge(dst, src) -} -func (m *SignalInviteInGroupReply) XXX_Size() int { - return xxx_messageInfo_SignalInviteInGroupReply.Size(m) -} -func (m *SignalInviteInGroupReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteInGroupReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteInGroupReply proto.InternalMessageInfo - -func (m *SignalInviteInGroupReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalInviteInGroupReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalInviteInGroupReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalCancelReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } -func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } -func (*SignalCancelReq) ProtoMessage() {} -func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{62} -} -func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) -} -func (m *SignalCancelReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalCancelReq.Marshal(b, m, deterministic) -} -func (dst *SignalCancelReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalCancelReq.Merge(dst, src) -} -func (m *SignalCancelReq) XXX_Size() int { - return xxx_messageInfo_SignalCancelReq.Size(m) -} -func (m *SignalCancelReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalCancelReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalCancelReq proto.InternalMessageInfo - -func (m *SignalCancelReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalCancelReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalCancelReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalCancelReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalCancelReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } -func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } -func (*SignalCancelReply) ProtoMessage() {} -func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{63} -} -func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) -} -func (m *SignalCancelReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalCancelReply.Marshal(b, m, deterministic) -} -func (dst *SignalCancelReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalCancelReply.Merge(dst, src) -} -func (m *SignalCancelReply) XXX_Size() int { - return xxx_messageInfo_SignalCancelReply.Size(m) -} -func (m *SignalCancelReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalCancelReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalCancelReply proto.InternalMessageInfo - -type SignalAcceptReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } -func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } -func (*SignalAcceptReq) ProtoMessage() {} -func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{64} -} -func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) -} -func (m *SignalAcceptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalAcceptReq.Marshal(b, m, deterministic) -} -func (dst *SignalAcceptReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalAcceptReq.Merge(dst, src) -} -func (m *SignalAcceptReq) XXX_Size() int { - return xxx_messageInfo_SignalAcceptReq.Size(m) -} -func (m *SignalAcceptReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalAcceptReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalAcceptReq proto.InternalMessageInfo - -func (m *SignalAcceptReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalAcceptReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalAcceptReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalAcceptReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -func (m *SignalAcceptReq) GetOpUserPlatformID() int32 { - if m != nil { - return m.OpUserPlatformID - } - return 0 -} - -type SignalAcceptReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } -func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } -func (*SignalAcceptReply) ProtoMessage() {} -func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{65} -} -func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) -} -func (m *SignalAcceptReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalAcceptReply.Marshal(b, m, deterministic) -} -func (dst *SignalAcceptReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalAcceptReply.Merge(dst, src) -} -func (m *SignalAcceptReply) XXX_Size() int { - return xxx_messageInfo_SignalAcceptReply.Size(m) -} -func (m *SignalAcceptReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalAcceptReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalAcceptReply proto.InternalMessageInfo - -func (m *SignalAcceptReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalAcceptReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalAcceptReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalHungUpReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } -func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } -func (*SignalHungUpReq) ProtoMessage() {} -func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{66} -} -func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) -} -func (m *SignalHungUpReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalHungUpReq.Marshal(b, m, deterministic) -} -func (dst *SignalHungUpReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalHungUpReq.Merge(dst, src) -} -func (m *SignalHungUpReq) XXX_Size() int { - return xxx_messageInfo_SignalHungUpReq.Size(m) -} -func (m *SignalHungUpReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalHungUpReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalHungUpReq proto.InternalMessageInfo - -func (m *SignalHungUpReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalHungUpReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalHungUpReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -type SignalHungUpReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } -func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } -func (*SignalHungUpReply) ProtoMessage() {} -func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{67} -} -func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) -} -func (m *SignalHungUpReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalHungUpReply.Marshal(b, m, deterministic) -} -func (dst *SignalHungUpReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalHungUpReply.Merge(dst, src) -} -func (m *SignalHungUpReply) XXX_Size() int { - return xxx_messageInfo_SignalHungUpReply.Size(m) -} -func (m *SignalHungUpReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalHungUpReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalHungUpReply proto.InternalMessageInfo - -type SignalRejectReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } -func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } -func (*SignalRejectReq) ProtoMessage() {} -func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{68} -} -func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) -} -func (m *SignalRejectReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalRejectReq.Marshal(b, m, deterministic) -} -func (dst *SignalRejectReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalRejectReq.Merge(dst, src) -} -func (m *SignalRejectReq) XXX_Size() int { - return xxx_messageInfo_SignalRejectReq.Size(m) -} -func (m *SignalRejectReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalRejectReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalRejectReq proto.InternalMessageInfo - -func (m *SignalRejectReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalRejectReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalRejectReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalRejectReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -func (m *SignalRejectReq) GetOpUserPlatformID() int32 { - if m != nil { - return m.OpUserPlatformID - } - return 0 -} - -type SignalRejectReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } -func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } -func (*SignalRejectReply) ProtoMessage() {} -func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{69} -} -func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) -} -func (m *SignalRejectReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalRejectReply.Marshal(b, m, deterministic) -} -func (dst *SignalRejectReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalRejectReply.Merge(dst, src) -} -func (m *SignalRejectReply) XXX_Size() int { - return xxx_messageInfo_SignalRejectReply.Size(m) -} -func (m *SignalRejectReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalRejectReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalRejectReply proto.InternalMessageInfo - -type DelMsgListReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } -func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } -func (*DelMsgListReq) ProtoMessage() {} -func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{70} -} -func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) -} -func (m *DelMsgListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListReq.Marshal(b, m, deterministic) -} -func (dst *DelMsgListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListReq.Merge(dst, src) -} -func (m *DelMsgListReq) XXX_Size() int { - return xxx_messageInfo_DelMsgListReq.Size(m) -} -func (m *DelMsgListReq) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListReq proto.InternalMessageInfo - -func (m *DelMsgListReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *DelMsgListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DelMsgListReq) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -func (m *DelMsgListReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -type DelMsgListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } -func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } -func (*DelMsgListResp) ProtoMessage() {} -func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_63019ea76d6cced1, []int{71} -} -func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) -} -func (m *DelMsgListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListResp.Marshal(b, m, deterministic) -} -func (dst *DelMsgListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListResp.Merge(dst, src) -} -func (m *DelMsgListResp) XXX_Size() int { - return xxx_messageInfo_DelMsgListResp.Size(m) -} -func (m *DelMsgListResp) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListResp proto.InternalMessageInfo - -func (m *DelMsgListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *DelMsgListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func init() { - proto.RegisterType((*GroupInfo)(nil), "server_api_params.GroupInfo") - proto.RegisterType((*GroupMemberFullInfo)(nil), "server_api_params.GroupMemberFullInfo") - proto.RegisterType((*PublicUserInfo)(nil), "server_api_params.PublicUserInfo") - proto.RegisterType((*UserInfo)(nil), "server_api_params.UserInfo") - proto.RegisterType((*FriendInfo)(nil), "server_api_params.FriendInfo") - proto.RegisterType((*BlackInfo)(nil), "server_api_params.BlackInfo") - proto.RegisterType((*GroupRequest)(nil), "server_api_params.GroupRequest") - proto.RegisterType((*FriendRequest)(nil), "server_api_params.FriendRequest") - proto.RegisterType((*Department)(nil), "server_api_params.Department") - proto.RegisterType((*OrganizationUser)(nil), "server_api_params.OrganizationUser") - proto.RegisterType((*DepartmentMember)(nil), "server_api_params.DepartmentMember") - proto.RegisterType((*UserDepartmentMember)(nil), "server_api_params.UserDepartmentMember") - proto.RegisterType((*UserInDepartment)(nil), "server_api_params.UserInDepartment") - proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") - proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") - proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") - proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") - proto.RegisterType((*UserSendMsgResp)(nil), "server_api_params.UserSendMsgResp") - proto.RegisterType((*MsgData)(nil), "server_api_params.MsgData") - proto.RegisterMapType((map[string]bool)(nil), "server_api_params.MsgData.OptionsEntry") - proto.RegisterType((*OfflinePushInfo)(nil), "server_api_params.OfflinePushInfo") - proto.RegisterType((*TipsComm)(nil), "server_api_params.TipsComm") - proto.RegisterType((*GroupCreatedTips)(nil), "server_api_params.GroupCreatedTips") - proto.RegisterType((*GroupInfoSetTips)(nil), "server_api_params.GroupInfoSetTips") - proto.RegisterType((*JoinGroupApplicationTips)(nil), "server_api_params.JoinGroupApplicationTips") - proto.RegisterType((*MemberQuitTips)(nil), "server_api_params.MemberQuitTips") - proto.RegisterType((*GroupApplicationAcceptedTips)(nil), "server_api_params.GroupApplicationAcceptedTips") - proto.RegisterType((*GroupApplicationRejectedTips)(nil), "server_api_params.GroupApplicationRejectedTips") - proto.RegisterType((*GroupOwnerTransferredTips)(nil), "server_api_params.GroupOwnerTransferredTips") - proto.RegisterType((*MemberKickedTips)(nil), "server_api_params.MemberKickedTips") - proto.RegisterType((*MemberInvitedTips)(nil), "server_api_params.MemberInvitedTips") - proto.RegisterType((*MemberEnterTips)(nil), "server_api_params.MemberEnterTips") - proto.RegisterType((*GroupDismissedTips)(nil), "server_api_params.GroupDismissedTips") - proto.RegisterType((*GroupMemberMutedTips)(nil), "server_api_params.GroupMemberMutedTips") - proto.RegisterType((*GroupMemberCancelMutedTips)(nil), "server_api_params.GroupMemberCancelMutedTips") - proto.RegisterType((*GroupMutedTips)(nil), "server_api_params.GroupMutedTips") - proto.RegisterType((*GroupCancelMutedTips)(nil), "server_api_params.GroupCancelMutedTips") - proto.RegisterType((*GroupMemberInfoSetTips)(nil), "server_api_params.GroupMemberInfoSetTips") - proto.RegisterType((*OrganizationChangedTips)(nil), "server_api_params.OrganizationChangedTips") - proto.RegisterType((*FriendApplication)(nil), "server_api_params.FriendApplication") - proto.RegisterType((*FromToUserID)(nil), "server_api_params.FromToUserID") - proto.RegisterType((*FriendApplicationTips)(nil), "server_api_params.FriendApplicationTips") - proto.RegisterType((*FriendApplicationApprovedTips)(nil), "server_api_params.FriendApplicationApprovedTips") - proto.RegisterType((*FriendApplicationRejectedTips)(nil), "server_api_params.FriendApplicationRejectedTips") - proto.RegisterType((*FriendAddedTips)(nil), "server_api_params.FriendAddedTips") - proto.RegisterType((*FriendDeletedTips)(nil), "server_api_params.FriendDeletedTips") - proto.RegisterType((*BlackAddedTips)(nil), "server_api_params.BlackAddedTips") - proto.RegisterType((*BlackDeletedTips)(nil), "server_api_params.BlackDeletedTips") - proto.RegisterType((*FriendInfoChangedTips)(nil), "server_api_params.FriendInfoChangedTips") - proto.RegisterType((*UserInfoUpdatedTips)(nil), "server_api_params.UserInfoUpdatedTips") - proto.RegisterType((*ConversationUpdateTips)(nil), "server_api_params.ConversationUpdateTips") - proto.RegisterType((*ConversationSetPrivateTips)(nil), "server_api_params.ConversationSetPrivateTips") - proto.RegisterType((*DeleteMessageTips)(nil), "server_api_params.DeleteMessageTips") - proto.RegisterType((*RequestPagination)(nil), "server_api_params.RequestPagination") - proto.RegisterType((*ResponsePagination)(nil), "server_api_params.ResponsePagination") - proto.RegisterType((*SignalReq)(nil), "server_api_params.SignalReq") - proto.RegisterType((*SignalResp)(nil), "server_api_params.SignalResp") - proto.RegisterType((*InvitationInfo)(nil), "server_api_params.InvitationInfo") - proto.RegisterType((*ParticipantMetaData)(nil), "server_api_params.ParticipantMetaData") - proto.RegisterType((*SignalInviteReq)(nil), "server_api_params.SignalInviteReq") - proto.RegisterType((*SignalInviteReply)(nil), "server_api_params.SignalInviteReply") - proto.RegisterType((*SignalInviteInGroupReq)(nil), "server_api_params.SignalInviteInGroupReq") - proto.RegisterType((*SignalInviteInGroupReply)(nil), "server_api_params.SignalInviteInGroupReply") - proto.RegisterType((*SignalCancelReq)(nil), "server_api_params.SignalCancelReq") - proto.RegisterType((*SignalCancelReply)(nil), "server_api_params.SignalCancelReply") - proto.RegisterType((*SignalAcceptReq)(nil), "server_api_params.SignalAcceptReq") - proto.RegisterType((*SignalAcceptReply)(nil), "server_api_params.SignalAcceptReply") - proto.RegisterType((*SignalHungUpReq)(nil), "server_api_params.SignalHungUpReq") - proto.RegisterType((*SignalHungUpReply)(nil), "server_api_params.SignalHungUpReply") - proto.RegisterType((*SignalRejectReq)(nil), "server_api_params.SignalRejectReq") - proto.RegisterType((*SignalRejectReply)(nil), "server_api_params.SignalRejectReply") - proto.RegisterType((*DelMsgListReq)(nil), "server_api_params.DelMsgListReq") - proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") -} - -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_63019ea76d6cced1) } - -var fileDescriptor_ws_63019ea76d6cced1 = []byte{ - // 3078 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x8b, 0x24, 0x59, - 0xf1, 0xbf, 0xcc, 0xea, 0xaa, 0xee, 0x8a, 0xea, 0xcf, 0x9c, 0xf9, 0xf5, 0x96, 0xed, 0xec, 0xd8, - 0xa6, 0xcd, 0xba, 0xae, 0x3a, 0x2b, 0xbb, 0x08, 0xba, 0xab, 0x23, 0xd3, 0xdd, 0xf3, 0xb5, 0x4e, - 0xf7, 0xf4, 0x66, 0xcd, 0xb8, 0xa2, 0xc2, 0x92, 0x5d, 0xf9, 0xba, 0x3a, 0xb7, 0xb3, 0xf2, 0x65, - 0xe5, 0x47, 0xcf, 0x8c, 0x08, 0x82, 0x82, 0x78, 0xf3, 0xa4, 0x07, 0x2f, 0x82, 0x17, 0x51, 0x96, - 0x45, 0x44, 0xc1, 0x83, 0x88, 0x07, 0xff, 0x01, 0xc1, 0x8b, 0x78, 0x11, 0xcf, 0x5e, 0x3d, 0x08, - 0x82, 0xf2, 0x22, 0x5e, 0x66, 0xbe, 0x97, 0x59, 0xd5, 0x5d, 0xd3, 0x34, 0x3b, 0xb3, 0x8c, 0xb7, - 0x8a, 0xc8, 0x17, 0xf1, 0xe2, 0x45, 0xc4, 0x8b, 0x88, 0xf7, 0xe2, 0x15, 0x2c, 0x25, 0xde, 0xd1, - 0xdb, 0x0f, 0x92, 0x97, 0x1f, 0x24, 0x57, 0xa2, 0x98, 0xa7, 0xdc, 0x5a, 0x49, 0x58, 0x7c, 0xcc, - 0xe2, 0xb7, 0xdd, 0xc8, 0x7f, 0x3b, 0x72, 0x63, 0x77, 0x98, 0xd8, 0xff, 0x34, 0xa1, 0x7d, 0x33, - 0xe6, 0x59, 0x74, 0x3b, 0x3c, 0xe0, 0x56, 0x17, 0x66, 0x07, 0x08, 0x6c, 0x77, 0x8d, 0x75, 0xe3, - 0xc5, 0xb6, 0x93, 0x83, 0xd6, 0x25, 0x68, 0xe3, 0xcf, 0x5d, 0x77, 0xc8, 0xba, 0x26, 0x7e, 0x2b, - 0x11, 0x96, 0x0d, 0xf3, 0x21, 0x4f, 0xfd, 0x03, 0xbf, 0xef, 0xa6, 0x3e, 0x0f, 0xbb, 0x0d, 0x1c, - 0xa0, 0xe1, 0xc4, 0x18, 0x3f, 0x4c, 0x63, 0xee, 0x65, 0x7d, 0x1c, 0x33, 0x43, 0x63, 0x54, 0x9c, - 0x98, 0xff, 0xc0, 0xed, 0xb3, 0xfb, 0xce, 0x9d, 0x6e, 0x93, 0xe6, 0x97, 0xa0, 0xb5, 0x0e, 0x1d, - 0xfe, 0x20, 0x64, 0xf1, 0xfd, 0x84, 0xc5, 0xb7, 0xb7, 0xbb, 0x2d, 0xfc, 0xaa, 0xa2, 0xac, 0xcb, - 0x00, 0xfd, 0x98, 0xb9, 0x29, 0xbb, 0xe7, 0x0f, 0x59, 0x77, 0x76, 0xdd, 0x78, 0x71, 0xc1, 0x51, - 0x30, 0x82, 0xc3, 0x90, 0x0d, 0xf7, 0x59, 0xbc, 0xc5, 0xb3, 0x30, 0xed, 0xce, 0xe1, 0x00, 0x15, - 0x65, 0x2d, 0x82, 0xc9, 0x1e, 0x76, 0xdb, 0xc8, 0xda, 0x64, 0x0f, 0xad, 0x55, 0x68, 0x25, 0xa9, - 0x9b, 0x66, 0x49, 0x17, 0xd6, 0x8d, 0x17, 0x9b, 0x8e, 0x84, 0xac, 0x0d, 0x58, 0x40, 0xbe, 0x3c, - 0x97, 0xa6, 0x83, 0x24, 0x3a, 0xb2, 0xd0, 0xd8, 0xbd, 0x47, 0x11, 0xeb, 0xce, 0x23, 0x83, 0x12, - 0x61, 0xff, 0xc5, 0x84, 0x0b, 0xa8, 0xf7, 0x1d, 0x14, 0xe0, 0x46, 0x16, 0x04, 0xa7, 0x58, 0x60, - 0x15, 0x5a, 0x19, 0x4d, 0x47, 0xea, 0x97, 0x90, 0x98, 0x27, 0xe6, 0x01, 0xbb, 0xc3, 0x8e, 0x59, - 0x80, 0x8a, 0x6f, 0x3a, 0x25, 0xc2, 0x5a, 0x83, 0xb9, 0x77, 0xb8, 0x1f, 0xa2, 0x4e, 0x66, 0xf0, - 0x63, 0x01, 0x8b, 0x6f, 0xa1, 0xdf, 0x3f, 0x0a, 0x85, 0x49, 0x49, 0xdd, 0x05, 0xac, 0x5a, 0xa2, - 0xa5, 0x5b, 0xe2, 0x05, 0x58, 0x74, 0xa3, 0x68, 0xc7, 0x0d, 0x07, 0x2c, 0xa6, 0x49, 0x67, 0x91, - 0x6f, 0x05, 0x2b, 0xec, 0x21, 0x66, 0xea, 0xf1, 0x2c, 0xee, 0x33, 0x54, 0x77, 0xd3, 0x51, 0x30, - 0x82, 0x0f, 0x8f, 0x58, 0xac, 0xa8, 0x91, 0x34, 0x5f, 0xc1, 0x4a, 0xab, 0x40, 0x61, 0x15, 0x61, - 0xc7, 0x2c, 0x65, 0xd7, 0x43, 0x0f, 0x17, 0xd5, 0x91, 0x76, 0x2c, 0x51, 0xf6, 0xf7, 0x0c, 0x58, - 0xdc, 0xcb, 0xf6, 0x03, 0xbf, 0x8f, 0x2c, 0x84, 0x5a, 0x4b, 0xe5, 0x19, 0x9a, 0xf2, 0x54, 0x15, - 0x98, 0x93, 0x55, 0xd0, 0xd0, 0x55, 0xb0, 0x0a, 0xad, 0x01, 0x0b, 0x3d, 0x16, 0x4b, 0x95, 0x4a, - 0x48, 0x8a, 0xda, 0xcc, 0x45, 0xb5, 0x7f, 0x64, 0xc2, 0xdc, 0xfb, 0x2c, 0xc2, 0x3a, 0x74, 0xa2, - 0x43, 0x1e, 0xb2, 0xdd, 0x4c, 0xb8, 0x95, 0x94, 0x45, 0x45, 0x59, 0x17, 0xa1, 0xb9, 0xef, 0xc7, - 0xe9, 0x21, 0xda, 0x75, 0xc1, 0x21, 0x40, 0x60, 0xd9, 0xd0, 0xf5, 0xc9, 0x98, 0x6d, 0x87, 0x00, - 0xb9, 0xa0, 0xb9, 0x42, 0xf7, 0xfa, 0x1e, 0x6b, 0xd7, 0xf6, 0x58, 0xdd, 0x37, 0x60, 0x9c, 0x6f, - 0xd8, 0xff, 0x32, 0x00, 0x6e, 0xc4, 0x3e, 0x0b, 0x3d, 0x54, 0x4d, 0x65, 0x73, 0x1b, 0xf5, 0xcd, - 0xbd, 0x0a, 0xad, 0x98, 0x0d, 0xdd, 0xf8, 0x28, 0x77, 0x7e, 0x82, 0x2a, 0x02, 0x35, 0x6a, 0x02, - 0xbd, 0x0e, 0x70, 0x80, 0xf3, 0x08, 0x3e, 0xa8, 0xaa, 0xce, 0x2b, 0x1f, 0xbe, 0x52, 0x0b, 0x83, - 0x57, 0x72, 0x2b, 0x39, 0xca, 0x70, 0xb1, 0xb3, 0x5c, 0xcf, 0x93, 0x0e, 0xdc, 0xa4, 0x9d, 0x55, - 0x20, 0xc6, 0xf8, 0x6f, 0xeb, 0x04, 0xff, 0x9d, 0x2d, 0x9c, 0xe2, 0x1f, 0x06, 0xb4, 0x37, 0x03, - 0xb7, 0x7f, 0x34, 0xe5, 0xd2, 0xf5, 0x25, 0x9a, 0xb5, 0x25, 0xde, 0x84, 0x85, 0x7d, 0xc1, 0x2e, - 0x5f, 0x02, 0x6a, 0xa1, 0xf3, 0xca, 0x47, 0xc7, 0xac, 0x52, 0xdf, 0x14, 0x8e, 0x4e, 0xa7, 0x2f, - 0x77, 0xe6, 0xf4, 0xe5, 0x36, 0x4f, 0x58, 0x6e, 0xab, 0x58, 0xee, 0x9f, 0x4c, 0x98, 0xc7, 0x40, - 0xe7, 0xb0, 0x51, 0xc6, 0x92, 0xd4, 0xfa, 0x22, 0xcc, 0x65, 0xb9, 0xa8, 0xc6, 0xb4, 0xa2, 0x16, - 0x24, 0xd6, 0x6b, 0x32, 0xac, 0x22, 0xbd, 0x89, 0xf4, 0x97, 0xc6, 0xd0, 0x17, 0x39, 0xcd, 0x29, - 0x87, 0x8b, 0x14, 0x74, 0xe8, 0x86, 0x5e, 0xc0, 0x1c, 0x96, 0x64, 0x41, 0x2a, 0xa3, 0xa5, 0x86, - 0x23, 0x4f, 0x1b, 0xed, 0x24, 0x03, 0x99, 0xa0, 0x24, 0x24, 0xb4, 0x43, 0xe3, 0xc4, 0x27, 0x5a, - 0x7a, 0x89, 0x10, 0x1b, 0x35, 0x66, 0x23, 0xb4, 0x10, 0x6d, 0xab, 0x1c, 0x2c, 0xe7, 0x94, 0x5a, - 0x23, 0x47, 0xd0, 0x70, 0xc2, 0xc4, 0x04, 0x23, 0x03, 0xca, 0x4c, 0x0a, 0xa6, 0x9a, 0x98, 0xec, - 0xbf, 0x36, 0x60, 0x81, 0xb6, 0x4f, 0xae, 0xd4, 0xcb, 0xc2, 0xcf, 0xf9, 0x50, 0xf3, 0x22, 0x05, - 0x23, 0xa4, 0x10, 0xd0, 0xae, 0x1e, 0x68, 0x34, 0x9c, 0x70, 0x45, 0x01, 0xdf, 0xd0, 0x02, 0x8e, - 0x8a, 0xca, 0x67, 0xb9, 0xa9, 0x06, 0x1e, 0x05, 0x23, 0x42, 0x59, 0xca, 0x35, 0xef, 0x28, 0x60, - 0x41, 0x9b, 0xf2, 0x62, 0x7e, 0xf2, 0x0f, 0x05, 0x23, 0xf4, 0x9b, 0xf2, 0x7c, 0x6e, 0x52, 0x52, - 0x89, 0x20, 0xce, 0x72, 0x5e, 0x4a, 0x25, 0x05, 0x5c, 0xb3, 0x6a, 0xfb, 0x44, 0xab, 0x82, 0x66, - 0x55, 0x7d, 0x73, 0x75, 0x6a, 0x9b, 0x6b, 0x03, 0x16, 0x88, 0x4f, 0xee, 0xf4, 0xf3, 0x94, 0xea, - 0x35, 0xa4, 0xee, 0x1b, 0x0b, 0x55, 0xdf, 0xd0, 0xad, 0xbb, 0x38, 0xc1, 0xba, 0x4b, 0x85, 0x75, - 0x7f, 0x65, 0x02, 0x6c, 0xb3, 0xc8, 0x8d, 0xd3, 0x21, 0x0b, 0x53, 0xb1, 0x3c, 0xaf, 0x80, 0x0a, - 0xe3, 0x6a, 0x38, 0x35, 0x4f, 0x98, 0x7a, 0x9e, 0xb0, 0x60, 0x06, 0x15, 0x4e, 0xd6, 0xc4, 0xdf, - 0x42, 0x99, 0x91, 0x1b, 0x13, 0x37, 0x72, 0xf2, 0x02, 0x16, 0x79, 0x80, 0xc7, 0x9e, 0xcc, 0x1c, - 0x4d, 0x87, 0x00, 0xb1, 0xf9, 0xcb, 0xf9, 0xb0, 0xa0, 0x69, 0x51, 0x5c, 0xd7, 0xb1, 0xa7, 0xd6, - 0x60, 0x2f, 0xc1, 0x72, 0x92, 0xed, 0x97, 0x8b, 0xdb, 0xcd, 0x86, 0xd2, 0xdd, 0x6b, 0x78, 0xa1, - 0x54, 0x2a, 0xce, 0xc4, 0x20, 0x4a, 0x35, 0x25, 0xa2, 0x5a, 0x15, 0xd8, 0xef, 0x9a, 0xb0, 0x7c, - 0x37, 0x1e, 0xb8, 0xa1, 0xff, 0x4d, 0x2c, 0x37, 0x31, 0x80, 0x9f, 0x25, 0xe5, 0xae, 0x43, 0x87, - 0x85, 0x83, 0xc0, 0x4f, 0x0e, 0x77, 0x4b, 0xbd, 0xa9, 0x28, 0x55, 0xd9, 0x33, 0x93, 0x92, 0x72, - 0x53, 0x4b, 0xca, 0xab, 0xd0, 0x1a, 0xf2, 0x7d, 0x3f, 0xc8, 0xfd, 0x5e, 0x42, 0xe8, 0xf3, 0x2c, - 0x60, 0x98, 0x9d, 0x0b, 0x9f, 0xcf, 0x11, 0x65, 0xa2, 0x9e, 0x1b, 0x9b, 0xa8, 0xdb, 0x6a, 0xa2, - 0xd6, 0x15, 0x0f, 0x35, 0xc5, 0x93, 0xba, 0x3a, 0x85, 0xba, 0xfe, 0x60, 0xc0, 0x72, 0xa9, 0x6e, - 0xaa, 0x41, 0x27, 0xaa, 0xab, 0xea, 0x81, 0xe6, 0x18, 0x0f, 0x2c, 0xfc, 0xa6, 0xa1, 0xfa, 0x8d, - 0xf0, 0x34, 0x9e, 0xf8, 0x4a, 0xbd, 0x5f, 0xc0, 0x62, 0xb6, 0x80, 0xb9, 0x8a, 0xb2, 0x08, 0x52, - 0xaa, 0xee, 0x96, 0x56, 0x75, 0x57, 0xf3, 0xe8, 0x6f, 0x0d, 0xb8, 0x28, 0xac, 0x5c, 0x5b, 0xc6, - 0x5d, 0x58, 0xe6, 0x15, 0x4f, 0x90, 0x89, 0xe6, 0x63, 0x63, 0x12, 0x45, 0xd5, 0x69, 0x9c, 0x1a, - 0xb1, 0x60, 0xe8, 0x55, 0x26, 0x91, 0x99, 0x67, 0x1c, 0xc3, 0xaa, 0x3c, 0x4e, 0x8d, 0xd8, 0xfe, - 0x9d, 0x01, 0xcb, 0x94, 0xda, 0x94, 0x7d, 0x7e, 0xee, 0x62, 0xbf, 0x05, 0x17, 0xab, 0x33, 0xdf, - 0xf1, 0x93, 0xb4, 0x6b, 0xae, 0x37, 0xa6, 0x15, 0x7d, 0x2c, 0x03, 0xfb, 0x5b, 0xd0, 0xdd, 0xcb, - 0x82, 0x60, 0x87, 0x25, 0x89, 0x3b, 0x60, 0x9b, 0x8f, 0x7a, 0x6c, 0x24, 0xf0, 0x0e, 0x4b, 0x22, - 0xb1, 0x39, 0x58, 0x1c, 0x6f, 0x71, 0x8f, 0xa1, 0xf0, 0x4d, 0x27, 0x07, 0x85, 0x5d, 0x59, 0x1c, - 0x8b, 0x08, 0x29, 0x4b, 0x38, 0x82, 0xac, 0x2b, 0x30, 0x13, 0x08, 0xb1, 0x1a, 0x28, 0xd6, 0xda, - 0x18, 0xb1, 0x76, 0x92, 0xc1, 0xb6, 0x9b, 0xba, 0x0e, 0x8e, 0xb3, 0x87, 0xf0, 0xdc, 0xf8, 0xd9, - 0x47, 0x13, 0x1d, 0x58, 0x14, 0x59, 0x58, 0xa5, 0xf8, 0x3c, 0x2c, 0xfc, 0x57, 0x45, 0x09, 0xb1, - 0x13, 0xe2, 0x83, 0x72, 0x2c, 0x38, 0x39, 0x68, 0x5f, 0x04, 0xeb, 0x26, 0x4b, 0x77, 0xdc, 0x87, - 0xd7, 0x42, 0x6f, 0xc7, 0x0f, 0x7b, 0x6c, 0xe4, 0xb0, 0x91, 0x7d, 0x1d, 0x2e, 0xd4, 0xb0, 0x49, - 0x84, 0x1b, 0xdd, 0x7d, 0xd8, 0x63, 0x23, 0x14, 0x60, 0xc1, 0x91, 0x10, 0xe2, 0x71, 0x94, 0xac, - 0xdf, 0x24, 0x64, 0x8f, 0x60, 0x49, 0x98, 0xaa, 0xc7, 0x42, 0x6f, 0x27, 0x19, 0x20, 0x8b, 0x75, - 0xe8, 0x90, 0x06, 0x76, 0x92, 0x41, 0x59, 0x10, 0x2a, 0x28, 0x31, 0xa2, 0x1f, 0xf8, 0xc2, 0x24, - 0x38, 0x42, 0xae, 0x46, 0x41, 0x89, 0x6d, 0x97, 0x30, 0x79, 0x3e, 0x12, 0xfb, 0xb1, 0xe1, 0x14, - 0xb0, 0xfd, 0xb7, 0x26, 0xcc, 0x4a, 0x85, 0xe2, 0x56, 0x13, 0x35, 0x78, 0xa1, 0x2f, 0x82, 0x28, - 0x5b, 0xf6, 0x8f, 0xcb, 0xa3, 0x26, 0x41, 0xea, 0xe1, 0xb4, 0xa1, 0x1f, 0x4e, 0x2b, 0x32, 0xcd, - 0xd4, 0x65, 0xaa, 0xac, 0xab, 0x59, 0x5f, 0x97, 0x48, 0x0e, 0x18, 0x2f, 0xf7, 0x02, 0x37, 0x3d, - 0xe0, 0xf1, 0x50, 0x96, 0xd4, 0x4d, 0xa7, 0x86, 0x17, 0x09, 0x89, 0x70, 0x45, 0x45, 0x41, 0x81, - 0xa1, 0x82, 0x15, 0xf9, 0x9b, 0x30, 0x79, 0x65, 0x41, 0x67, 0x19, 0x1d, 0x49, 0xb2, 0x25, 0x89, - 0xcf, 0x43, 0xcc, 0x6d, 0x54, 0x40, 0xa8, 0x28, 0xb1, 0xf2, 0x61, 0x32, 0xb8, 0x11, 0xf3, 0xa1, - 0x3c, 0xd1, 0xe4, 0x20, 0xae, 0x9c, 0x87, 0x69, 0x9e, 0x17, 0x3b, 0x44, 0xab, 0xa0, 0x04, 0xad, - 0x04, 0xb1, 0x7a, 0x98, 0x77, 0x72, 0xd0, 0x5a, 0x86, 0x46, 0xc2, 0x46, 0xb2, 0x24, 0x10, 0x3f, - 0x35, 0xcb, 0x2d, 0xe9, 0x96, 0xab, 0xc4, 0xf8, 0x65, 0xfc, 0xaa, 0xc6, 0xf8, 0x32, 0x70, 0xae, - 0x68, 0x81, 0xf3, 0x1a, 0xcc, 0xf2, 0x48, 0xf8, 0x79, 0xd2, 0xb5, 0x70, 0x8f, 0x7d, 0x7c, 0xf2, - 0x1e, 0xbb, 0x72, 0x97, 0x46, 0x5e, 0x0f, 0xd3, 0xf8, 0x91, 0x93, 0xd3, 0x59, 0x77, 0x60, 0x89, - 0x1f, 0x1c, 0x04, 0x7e, 0xc8, 0xf6, 0xb2, 0xe4, 0x10, 0x4b, 0xef, 0x0b, 0x18, 0x9a, 0xec, 0x71, - 0xa1, 0x49, 0x1f, 0xe9, 0x54, 0x49, 0x45, 0x3e, 0x71, 0x53, 0x2a, 0x9d, 0x70, 0xc7, 0x5d, 0x5c, - 0x6f, 0x88, 0x7c, 0xa2, 0xe2, 0xd6, 0x5e, 0x83, 0x79, 0x55, 0x14, 0xa1, 0xaa, 0x23, 0xf6, 0x48, - 0xfa, 0xa9, 0xf8, 0x29, 0x32, 0xce, 0xb1, 0x1b, 0x64, 0x94, 0xc1, 0xe7, 0x1c, 0x02, 0x5e, 0x33, - 0x3f, 0x67, 0xd8, 0x3f, 0x34, 0x60, 0xa9, 0x22, 0x84, 0x18, 0x9d, 0xfa, 0x69, 0xc0, 0x24, 0x07, - 0x02, 0x44, 0x75, 0xe4, 0xb1, 0xa4, 0x2f, 0xdd, 0x1c, 0x7f, 0xcb, 0x3c, 0xd3, 0x28, 0xce, 0xbc, - 0x36, 0xcc, 0xfb, 0x77, 0x7b, 0x82, 0x51, 0x8f, 0x67, 0xa1, 0x57, 0xdc, 0x5b, 0x29, 0x38, 0xe1, - 0x66, 0xfe, 0xdd, 0xde, 0xa6, 0xeb, 0x0d, 0x18, 0xdd, 0x2e, 0x35, 0x51, 0x26, 0x1d, 0x69, 0x7b, - 0x30, 0x77, 0xcf, 0x8f, 0x92, 0x2d, 0x3e, 0x1c, 0x0a, 0x63, 0x79, 0x2c, 0x15, 0x79, 0xdc, 0x40, - 0x9f, 0x90, 0x90, 0x70, 0x27, 0x8f, 0x1d, 0xb8, 0x59, 0x90, 0x8a, 0xa1, 0xf9, 0xe6, 0x56, 0x50, - 0x78, 0xaf, 0x92, 0xf0, 0x70, 0x9b, 0xa8, 0x49, 0x4e, 0x05, 0x63, 0xff, 0xd1, 0x84, 0x65, 0x3c, - 0xfd, 0x6c, 0xa1, 0x6b, 0x78, 0x48, 0xf4, 0x0a, 0x34, 0x71, 0xab, 0xca, 0x8c, 0x72, 0xf2, 0x89, - 0x89, 0x86, 0x5a, 0x57, 0xa1, 0xc5, 0x23, 0x4c, 0x43, 0x94, 0xec, 0x5e, 0x98, 0x44, 0xa4, 0x5f, - 0x61, 0x39, 0x92, 0xca, 0xba, 0x01, 0x30, 0x2c, 0xb3, 0x0e, 0x85, 0xf7, 0x69, 0x79, 0x28, 0x94, - 0x42, 0xb9, 0x45, 0xa8, 0x2e, 0xee, 0xb1, 0x1a, 0x8e, 0x8e, 0xb4, 0x76, 0x61, 0x11, 0xc5, 0xbe, - 0x9b, 0x1f, 0x9d, 0xd1, 0x06, 0xd3, 0xcf, 0x58, 0xa1, 0xb6, 0x7f, 0x6a, 0x48, 0x35, 0x8a, 0xaf, - 0x3d, 0x46, 0xba, 0x2f, 0x55, 0x62, 0x9c, 0x49, 0x25, 0x6b, 0x30, 0x37, 0xcc, 0x94, 0x93, 0x7c, - 0xc3, 0x29, 0xe0, 0xd2, 0x44, 0x8d, 0xa9, 0x4d, 0x64, 0xff, 0xcc, 0x80, 0xee, 0x1b, 0xdc, 0x0f, - 0xf1, 0xc3, 0xb5, 0x28, 0x0a, 0xe4, 0x65, 0xeb, 0x99, 0x6d, 0xfe, 0x25, 0x68, 0xbb, 0xc4, 0x26, - 0x4c, 0xa5, 0xd9, 0xa7, 0x38, 0x9d, 0x97, 0x34, 0xca, 0x41, 0xab, 0xa1, 0x1e, 0xb4, 0xec, 0xf7, - 0x0c, 0x58, 0x24, 0xa5, 0xbc, 0x99, 0xf9, 0xe9, 0x99, 0xe5, 0xdb, 0x84, 0xb9, 0x51, 0xe6, 0xa7, - 0x67, 0xf0, 0xca, 0x82, 0xae, 0xee, 0x4f, 0x8d, 0x31, 0xfe, 0x64, 0xff, 0xd2, 0x80, 0x4b, 0x55, - 0xb5, 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, - 0x8a, 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xbb, 0x26, 0x7c, 0xe8, 0x66, 0xb1, 0xf1, - 0xee, 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, - 0x65, 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, - 0xe7, 0xcb, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, - 0x6c, 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, - 0x3a, 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x31, - 0x60, 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, - 0xc3, 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, - 0xa1, 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x63, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, - 0xf4, 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, - 0xa2, 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, - 0xd0, 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xc2, 0x80, 0x45, - 0x1a, 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8c, 0x95, 0x84, 0x7b, 0xad, 0x2a, - 0x5c, 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, - 0xa5, 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, - 0x9c, 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, - 0xac, 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, - 0x78, 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, - 0x98, 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, - 0xbf, 0xc8, 0xfe, 0x06, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, - 0xcb, 0x7c, 0x64, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x8e, 0x01, 0xcf, 0xd7, 0xd8, - 0x5f, 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, - 0xb1, 0x42, 0x68, 0x05, 0xfb, 0xfb, 0x20, 0xc4, 0xcf, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, - 0xf6, 0xb3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, - 0xae, 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xbe, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, - 0x6a, 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, - 0xc1, 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, - 0x94, 0x9c, 0x0b, 0xf7, 0x4f, 0xc3, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, - 0xbd, 0x6e, 0x7f, 0x06, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, - 0x68, 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, - 0x95, 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, - 0x4f, 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, - 0xa7, 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, - 0x07, 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, - 0x0f, 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, - 0x62, 0xec, 0xaf, 0x80, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, - 0xe2, 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, - 0x57, 0x30, 0xf6, 0x4f, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x00, - 0x2d, 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, - 0xff, 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0x27, - 0x4e, 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, - 0x05, 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, - 0xd3, 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, - 0x4c, 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, - 0x14, 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, - 0x1b, 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, - 0x46, 0xea, 0x8d, 0x37, 0xd2, 0x27, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, - 0x1b, 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, - 0xa5, 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, - 0x36, 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0xcf, 0x26, 0x2c, 0xa2, 0xca, 0xa8, 0x99, 0x18, - 0x1e, 0x70, 0xec, 0x07, 0xa0, 0xba, 0xf4, 0x77, 0x5d, 0x3a, 0xd2, 0xfa, 0x14, 0xac, 0x10, 0x82, - 0x29, 0xcd, 0x10, 0x13, 0x9b, 0x21, 0xf5, 0x0f, 0xd8, 0xfe, 0xc9, 0x92, 0x94, 0x0f, 0xb7, 0xdd, - 0xd4, 0xcd, 0x8b, 0xaf, 0x12, 0xa3, 0x36, 0xe7, 0x66, 0x6a, 0x2f, 0x47, 0x63, 0xce, 0x87, 0x45, - 0xd7, 0x4d, 0x42, 0xf4, 0x22, 0xd7, 0x4f, 0xfd, 0xbc, 0xa5, 0x44, 0xb1, 0x42, 0xc3, 0x09, 0xae, - 0xa9, 0x3f, 0x64, 0x3c, 0x4b, 0xe5, 0x33, 0xcf, 0x1c, 0xa4, 0xf7, 0x19, 0x9e, 0xef, 0x62, 0xdb, - 0x8b, 0xda, 0x6a, 0x25, 0x02, 0xa3, 0x5f, 0xd9, 0xc6, 0x6b, 0xcb, 0xe8, 0x57, 0x36, 0xf0, 0x2a, - 0x2d, 0x37, 0xa8, 0xb5, 0xdc, 0xec, 0xbf, 0x1b, 0x70, 0x61, 0xcf, 0x8d, 0x53, 0xbf, 0xef, 0x47, - 0x6e, 0x98, 0xee, 0xb0, 0xd4, 0xc5, 0x75, 0x6a, 0x0f, 0xc0, 0x8c, 0xc7, 0x7b, 0x00, 0xb6, 0x07, - 0x4b, 0x03, 0xfd, 0x04, 0xf2, 0x98, 0x87, 0x87, 0x2a, 0xb9, 0xf6, 0x9a, 0xad, 0xf1, 0xd8, 0xaf, - 0xd9, 0xec, 0xef, 0x9b, 0xb0, 0x54, 0x09, 0xaf, 0x27, 0xe6, 0xa6, 0x6b, 0x00, 0x7e, 0xe1, 0x6a, - 0x27, 0x5c, 0xd0, 0xeb, 0xfe, 0xe8, 0x28, 0x44, 0xe3, 0x7a, 0x79, 0x8d, 0xb3, 0xf7, 0xf2, 0x6e, - 0x41, 0x27, 0x2a, 0x8d, 0x74, 0xc2, 0xf9, 0x68, 0x8c, 0x29, 0x1d, 0x95, 0xd4, 0xfe, 0x3a, 0xac, - 0xd4, 0xa2, 0x18, 0xb6, 0xed, 0xf8, 0x11, 0x0b, 0x8b, 0xb6, 0x9d, 0x00, 0x14, 0x87, 0x36, 0x35, - 0x87, 0xee, 0xc2, 0x6c, 0xe0, 0x1f, 0xab, 0xcf, 0x65, 0x25, 0x68, 0xff, 0xc0, 0x84, 0xd5, 0xf1, - 0x19, 0xe8, 0x59, 0x55, 0xf7, 0x3e, 0x74, 0x27, 0x45, 0xfb, 0x73, 0xd3, 0x7a, 0xe9, 0xdd, 0x45, - 0xae, 0x7e, 0x56, 0xd5, 0x7d, 0x21, 0xf7, 0x6e, 0x25, 0x1d, 0xda, 0xbf, 0x2e, 0xf4, 0x53, 0x54, - 0x23, 0xcf, 0xa8, 0x7e, 0xac, 0x97, 0x60, 0x99, 0x96, 0xa9, 0x3c, 0xfe, 0xa0, 0xe2, 0xb6, 0x86, - 0x2f, 0x23, 0x85, 0x52, 0x1a, 0x9c, 0x9b, 0xcf, 0xfe, 0xde, 0xc8, 0x6d, 0x52, 0xd4, 0x78, 0x1f, - 0x28, 0x9b, 0x94, 0x9e, 0xa6, 0x14, 0x3e, 0x8a, 0xa7, 0x15, 0xb5, 0xe7, 0xff, 0x3c, 0xed, 0x74, - 0x4f, 0x2b, 0x74, 0xa9, 0x14, 0x81, 0xf6, 0xb7, 0x61, 0x61, 0x9b, 0x05, 0x3b, 0xc9, 0x20, 0x7f, - 0x76, 0x76, 0xae, 0x87, 0xc9, 0xea, 0x63, 0xb5, 0x99, 0xda, 0x63, 0x35, 0x7b, 0x13, 0x16, 0x55, - 0x01, 0xce, 0xf2, 0xea, 0x6e, 0xf3, 0xd2, 0xd7, 0xd6, 0xae, 0xbc, 0x4c, 0xff, 0x0f, 0x7b, 0xbd, - 0xa6, 0xc4, 0xfd, 0x16, 0xfe, 0x5f, 0xec, 0xd5, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x00, - 0x88, 0x4c, 0x42, 0x36, 0x00, 0x00, -} diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 6a64039e6..bf81901cd 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -492,11 +492,11 @@ message InvitationInfo { string customData = 3; string groupID = 4; string roomID = 5; - int32 initiateTime = 6; - int32 timeout = 7; - string mediaType = 8; - int32 platformID = 9; - int32 sessionType = 10; + int32 timeout = 6; + string mediaType = 7; + int32 platformID = 8; + int32 sessionType = 9; + int32 initiateTime = 10; } message ParticipantMetaData{ From 805b7705b285b9afc5b581e62d8b032ca0e22c35 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 10:52:23 +0800 Subject: [PATCH 524/752] rtc --- pkg/proto/sdk_ws/ws.pb.go | 5236 +++++++++++++++++++++++++++++++++++++ 1 file changed, 5236 insertions(+) create mode 100644 pkg/proto/sdk_ws/ws.pb.go diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go new file mode 100644 index 000000000..f5ba92ee6 --- /dev/null +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -0,0 +1,5236 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: sdk_ws/ws.proto + +package server_api_params // import "Open_IM/pkg/proto/sdk_ws" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type GroupInfo struct { + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` + Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` + Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` + FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` + OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` + CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` + MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` + Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` + Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` + CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` + GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupInfo) Reset() { *m = GroupInfo{} } +func (m *GroupInfo) String() string { return proto.CompactTextString(m) } +func (*GroupInfo) ProtoMessage() {} +func (*GroupInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{0} +} +func (m *GroupInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupInfo.Unmarshal(m, b) +} +func (m *GroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupInfo.Marshal(b, m, deterministic) +} +func (dst *GroupInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupInfo.Merge(dst, src) +} +func (m *GroupInfo) XXX_Size() int { + return xxx_messageInfo_GroupInfo.Size(m) +} +func (m *GroupInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GroupInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupInfo proto.InternalMessageInfo + +func (m *GroupInfo) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *GroupInfo) GetGroupName() string { + if m != nil { + return m.GroupName + } + return "" +} + +func (m *GroupInfo) GetNotification() string { + if m != nil { + return m.Notification + } + return "" +} + +func (m *GroupInfo) GetIntroduction() string { + if m != nil { + return m.Introduction + } + return "" +} + +func (m *GroupInfo) GetFaceURL() string { + if m != nil { + return m.FaceURL + } + return "" +} + +func (m *GroupInfo) GetOwnerUserID() string { + if m != nil { + return m.OwnerUserID + } + return "" +} + +func (m *GroupInfo) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *GroupInfo) GetMemberCount() uint32 { + if m != nil { + return m.MemberCount + } + return 0 +} + +func (m *GroupInfo) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +func (m *GroupInfo) GetStatus() int32 { + if m != nil { + return m.Status + } + return 0 +} + +func (m *GroupInfo) GetCreatorUserID() string { + if m != nil { + return m.CreatorUserID + } + return "" +} + +func (m *GroupInfo) GetGroupType() int32 { + if m != nil { + return m.GroupType + } + return 0 +} + +type GroupMemberFullInfo struct { + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + RoleLevel int32 `protobuf:"varint,3,opt,name=roleLevel" json:"roleLevel,omitempty"` + JoinTime int32 `protobuf:"varint,4,opt,name=joinTime" json:"joinTime,omitempty"` + Nickname string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` + FaceURL string `protobuf:"bytes,6,opt,name=faceURL" json:"faceURL,omitempty"` + AppMangerLevel int32 `protobuf:"varint,7,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` + JoinSource int32 `protobuf:"varint,8,opt,name=joinSource" json:"joinSource,omitempty"` + OperatorUserID string `protobuf:"bytes,9,opt,name=operatorUserID" json:"operatorUserID,omitempty"` + Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` + MuteEndTime uint32 `protobuf:"varint,11,opt,name=muteEndTime" json:"muteEndTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } +func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } +func (*GroupMemberFullInfo) ProtoMessage() {} +func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{1} +} +func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) +} +func (m *GroupMemberFullInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberFullInfo.Marshal(b, m, deterministic) +} +func (dst *GroupMemberFullInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberFullInfo.Merge(dst, src) +} +func (m *GroupMemberFullInfo) XXX_Size() int { + return xxx_messageInfo_GroupMemberFullInfo.Size(m) +} +func (m *GroupMemberFullInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberFullInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMemberFullInfo proto.InternalMessageInfo + +func (m *GroupMemberFullInfo) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *GroupMemberFullInfo) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *GroupMemberFullInfo) GetRoleLevel() int32 { + if m != nil { + return m.RoleLevel + } + return 0 +} + +func (m *GroupMemberFullInfo) GetJoinTime() int32 { + if m != nil { + return m.JoinTime + } + return 0 +} + +func (m *GroupMemberFullInfo) GetNickname() string { + if m != nil { + return m.Nickname + } + return "" +} + +func (m *GroupMemberFullInfo) GetFaceURL() string { + if m != nil { + return m.FaceURL + } + return "" +} + +func (m *GroupMemberFullInfo) GetAppMangerLevel() int32 { + if m != nil { + return m.AppMangerLevel + } + return 0 +} + +func (m *GroupMemberFullInfo) GetJoinSource() int32 { + if m != nil { + return m.JoinSource + } + return 0 +} + +func (m *GroupMemberFullInfo) GetOperatorUserID() string { + if m != nil { + return m.OperatorUserID + } + return "" +} + +func (m *GroupMemberFullInfo) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +func (m *GroupMemberFullInfo) GetMuteEndTime() uint32 { + if m != nil { + return m.MuteEndTime + } + return 0 +} + +type PublicUserInfo struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` + FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` + Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` + Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } +func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } +func (*PublicUserInfo) ProtoMessage() {} +func (*PublicUserInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{2} +} +func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) +} +func (m *PublicUserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PublicUserInfo.Marshal(b, m, deterministic) +} +func (dst *PublicUserInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_PublicUserInfo.Merge(dst, src) +} +func (m *PublicUserInfo) XXX_Size() int { + return xxx_messageInfo_PublicUserInfo.Size(m) +} +func (m *PublicUserInfo) XXX_DiscardUnknown() { + xxx_messageInfo_PublicUserInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_PublicUserInfo proto.InternalMessageInfo + +func (m *PublicUserInfo) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *PublicUserInfo) GetNickname() string { + if m != nil { + return m.Nickname + } + return "" +} + +func (m *PublicUserInfo) GetFaceURL() string { + if m != nil { + return m.FaceURL + } + return "" +} + +func (m *PublicUserInfo) GetGender() int32 { + if m != nil { + return m.Gender + } + return 0 +} + +func (m *PublicUserInfo) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type UserInfo struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` + FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` + Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` + PhoneNumber string `protobuf:"bytes,5,opt,name=phoneNumber" json:"phoneNumber,omitempty"` + Birth uint32 `protobuf:"varint,6,opt,name=birth" json:"birth,omitempty"` + Email string `protobuf:"bytes,7,opt,name=email" json:"email,omitempty"` + Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` + CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` + AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UserInfo) Reset() { *m = UserInfo{} } +func (m *UserInfo) String() string { return proto.CompactTextString(m) } +func (*UserInfo) ProtoMessage() {} +func (*UserInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{3} +} +func (m *UserInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserInfo.Unmarshal(m, b) +} +func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserInfo.Marshal(b, m, deterministic) +} +func (dst *UserInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserInfo.Merge(dst, src) +} +func (m *UserInfo) XXX_Size() int { + return xxx_messageInfo_UserInfo.Size(m) +} +func (m *UserInfo) XXX_DiscardUnknown() { + xxx_messageInfo_UserInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_UserInfo proto.InternalMessageInfo + +func (m *UserInfo) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *UserInfo) GetNickname() string { + if m != nil { + return m.Nickname + } + return "" +} + +func (m *UserInfo) GetFaceURL() string { + if m != nil { + return m.FaceURL + } + return "" +} + +func (m *UserInfo) GetGender() int32 { + if m != nil { + return m.Gender + } + return 0 +} + +func (m *UserInfo) GetPhoneNumber() string { + if m != nil { + return m.PhoneNumber + } + return "" +} + +func (m *UserInfo) GetBirth() uint32 { + if m != nil { + return m.Birth + } + return 0 +} + +func (m *UserInfo) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +func (m *UserInfo) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +func (m *UserInfo) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *UserInfo) GetAppMangerLevel() int32 { + if m != nil { + return m.AppMangerLevel + } + return 0 +} + +type FriendInfo struct { + OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` + Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` + CreateTime uint32 `protobuf:"varint,3,opt,name=createTime" json:"createTime,omitempty"` + FriendUser *UserInfo `protobuf:"bytes,4,opt,name=friendUser" json:"friendUser,omitempty"` + AddSource int32 `protobuf:"varint,5,opt,name=addSource" json:"addSource,omitempty"` + OperatorUserID string `protobuf:"bytes,6,opt,name=operatorUserID" json:"operatorUserID,omitempty"` + Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendInfo) Reset() { *m = FriendInfo{} } +func (m *FriendInfo) String() string { return proto.CompactTextString(m) } +func (*FriendInfo) ProtoMessage() {} +func (*FriendInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{4} +} +func (m *FriendInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendInfo.Unmarshal(m, b) +} +func (m *FriendInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendInfo.Marshal(b, m, deterministic) +} +func (dst *FriendInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendInfo.Merge(dst, src) +} +func (m *FriendInfo) XXX_Size() int { + return xxx_messageInfo_FriendInfo.Size(m) +} +func (m *FriendInfo) XXX_DiscardUnknown() { + xxx_messageInfo_FriendInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendInfo proto.InternalMessageInfo + +func (m *FriendInfo) GetOwnerUserID() string { + if m != nil { + return m.OwnerUserID + } + return "" +} + +func (m *FriendInfo) GetRemark() string { + if m != nil { + return m.Remark + } + return "" +} + +func (m *FriendInfo) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *FriendInfo) GetFriendUser() *UserInfo { + if m != nil { + return m.FriendUser + } + return nil +} + +func (m *FriendInfo) GetAddSource() int32 { + if m != nil { + return m.AddSource + } + return 0 +} + +func (m *FriendInfo) GetOperatorUserID() string { + if m != nil { + return m.OperatorUserID + } + return "" +} + +func (m *FriendInfo) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type BlackInfo struct { + OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` + CreateTime uint32 `protobuf:"varint,2,opt,name=createTime" json:"createTime,omitempty"` + BlackUserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=blackUserInfo" json:"blackUserInfo,omitempty"` + AddSource int32 `protobuf:"varint,4,opt,name=addSource" json:"addSource,omitempty"` + OperatorUserID string `protobuf:"bytes,5,opt,name=operatorUserID" json:"operatorUserID,omitempty"` + Ex string `protobuf:"bytes,6,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BlackInfo) Reset() { *m = BlackInfo{} } +func (m *BlackInfo) String() string { return proto.CompactTextString(m) } +func (*BlackInfo) ProtoMessage() {} +func (*BlackInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{5} +} +func (m *BlackInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BlackInfo.Unmarshal(m, b) +} +func (m *BlackInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BlackInfo.Marshal(b, m, deterministic) +} +func (dst *BlackInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlackInfo.Merge(dst, src) +} +func (m *BlackInfo) XXX_Size() int { + return xxx_messageInfo_BlackInfo.Size(m) +} +func (m *BlackInfo) XXX_DiscardUnknown() { + xxx_messageInfo_BlackInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_BlackInfo proto.InternalMessageInfo + +func (m *BlackInfo) GetOwnerUserID() string { + if m != nil { + return m.OwnerUserID + } + return "" +} + +func (m *BlackInfo) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *BlackInfo) GetBlackUserInfo() *PublicUserInfo { + if m != nil { + return m.BlackUserInfo + } + return nil +} + +func (m *BlackInfo) GetAddSource() int32 { + if m != nil { + return m.AddSource + } + return 0 +} + +func (m *BlackInfo) GetOperatorUserID() string { + if m != nil { + return m.OperatorUserID + } + return "" +} + +func (m *BlackInfo) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type GroupRequest struct { + UserInfo *PublicUserInfo `protobuf:"bytes,1,opt,name=userInfo" json:"userInfo,omitempty"` + GroupInfo *GroupInfo `protobuf:"bytes,2,opt,name=groupInfo" json:"groupInfo,omitempty"` + HandleResult int32 `protobuf:"varint,3,opt,name=handleResult" json:"handleResult,omitempty"` + ReqMsg string `protobuf:"bytes,4,opt,name=reqMsg" json:"reqMsg,omitempty"` + HandleMsg string `protobuf:"bytes,5,opt,name=handleMsg" json:"handleMsg,omitempty"` + ReqTime uint32 `protobuf:"varint,6,opt,name=reqTime" json:"reqTime,omitempty"` + HandleUserID string `protobuf:"bytes,7,opt,name=handleUserID" json:"handleUserID,omitempty"` + HandleTime uint32 `protobuf:"varint,8,opt,name=handleTime" json:"handleTime,omitempty"` + Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupRequest) Reset() { *m = GroupRequest{} } +func (m *GroupRequest) String() string { return proto.CompactTextString(m) } +func (*GroupRequest) ProtoMessage() {} +func (*GroupRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{6} +} +func (m *GroupRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupRequest.Unmarshal(m, b) +} +func (m *GroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupRequest.Marshal(b, m, deterministic) +} +func (dst *GroupRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupRequest.Merge(dst, src) +} +func (m *GroupRequest) XXX_Size() int { + return xxx_messageInfo_GroupRequest.Size(m) +} +func (m *GroupRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GroupRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupRequest proto.InternalMessageInfo + +func (m *GroupRequest) GetUserInfo() *PublicUserInfo { + if m != nil { + return m.UserInfo + } + return nil +} + +func (m *GroupRequest) GetGroupInfo() *GroupInfo { + if m != nil { + return m.GroupInfo + } + return nil +} + +func (m *GroupRequest) GetHandleResult() int32 { + if m != nil { + return m.HandleResult + } + return 0 +} + +func (m *GroupRequest) GetReqMsg() string { + if m != nil { + return m.ReqMsg + } + return "" +} + +func (m *GroupRequest) GetHandleMsg() string { + if m != nil { + return m.HandleMsg + } + return "" +} + +func (m *GroupRequest) GetReqTime() uint32 { + if m != nil { + return m.ReqTime + } + return 0 +} + +func (m *GroupRequest) GetHandleUserID() string { + if m != nil { + return m.HandleUserID + } + return "" +} + +func (m *GroupRequest) GetHandleTime() uint32 { + if m != nil { + return m.HandleTime + } + return 0 +} + +func (m *GroupRequest) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type FriendRequest struct { + FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` + FromNickname string `protobuf:"bytes,2,opt,name=fromNickname" json:"fromNickname,omitempty"` + FromFaceURL string `protobuf:"bytes,3,opt,name=fromFaceURL" json:"fromFaceURL,omitempty"` + FromGender int32 `protobuf:"varint,4,opt,name=fromGender" json:"fromGender,omitempty"` + ToUserID string `protobuf:"bytes,5,opt,name=toUserID" json:"toUserID,omitempty"` + ToNickname string `protobuf:"bytes,6,opt,name=toNickname" json:"toNickname,omitempty"` + ToFaceURL string `protobuf:"bytes,7,opt,name=toFaceURL" json:"toFaceURL,omitempty"` + ToGender int32 `protobuf:"varint,8,opt,name=toGender" json:"toGender,omitempty"` + HandleResult int32 `protobuf:"varint,9,opt,name=handleResult" json:"handleResult,omitempty"` + ReqMsg string `protobuf:"bytes,10,opt,name=reqMsg" json:"reqMsg,omitempty"` + CreateTime uint32 `protobuf:"varint,11,opt,name=createTime" json:"createTime,omitempty"` + HandlerUserID string `protobuf:"bytes,12,opt,name=handlerUserID" json:"handlerUserID,omitempty"` + HandleMsg string `protobuf:"bytes,13,opt,name=handleMsg" json:"handleMsg,omitempty"` + HandleTime uint32 `protobuf:"varint,14,opt,name=handleTime" json:"handleTime,omitempty"` + Ex string `protobuf:"bytes,15,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendRequest) Reset() { *m = FriendRequest{} } +func (m *FriendRequest) String() string { return proto.CompactTextString(m) } +func (*FriendRequest) ProtoMessage() {} +func (*FriendRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{7} +} +func (m *FriendRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendRequest.Unmarshal(m, b) +} +func (m *FriendRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendRequest.Marshal(b, m, deterministic) +} +func (dst *FriendRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendRequest.Merge(dst, src) +} +func (m *FriendRequest) XXX_Size() int { + return xxx_messageInfo_FriendRequest.Size(m) +} +func (m *FriendRequest) XXX_DiscardUnknown() { + xxx_messageInfo_FriendRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendRequest proto.InternalMessageInfo + +func (m *FriendRequest) GetFromUserID() string { + if m != nil { + return m.FromUserID + } + return "" +} + +func (m *FriendRequest) GetFromNickname() string { + if m != nil { + return m.FromNickname + } + return "" +} + +func (m *FriendRequest) GetFromFaceURL() string { + if m != nil { + return m.FromFaceURL + } + return "" +} + +func (m *FriendRequest) GetFromGender() int32 { + if m != nil { + return m.FromGender + } + return 0 +} + +func (m *FriendRequest) GetToUserID() string { + if m != nil { + return m.ToUserID + } + return "" +} + +func (m *FriendRequest) GetToNickname() string { + if m != nil { + return m.ToNickname + } + return "" +} + +func (m *FriendRequest) GetToFaceURL() string { + if m != nil { + return m.ToFaceURL + } + return "" +} + +func (m *FriendRequest) GetToGender() int32 { + if m != nil { + return m.ToGender + } + return 0 +} + +func (m *FriendRequest) GetHandleResult() int32 { + if m != nil { + return m.HandleResult + } + return 0 +} + +func (m *FriendRequest) GetReqMsg() string { + if m != nil { + return m.ReqMsg + } + return "" +} + +func (m *FriendRequest) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *FriendRequest) GetHandlerUserID() string { + if m != nil { + return m.HandlerUserID + } + return "" +} + +func (m *FriendRequest) GetHandleMsg() string { + if m != nil { + return m.HandleMsg + } + return "" +} + +func (m *FriendRequest) GetHandleTime() uint32 { + if m != nil { + return m.HandleTime + } + return 0 +} + +func (m *FriendRequest) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type Department struct { + DepartmentID string `protobuf:"bytes,1,opt,name=departmentID" json:"departmentID,omitempty"` + FaceURL string `protobuf:"bytes,2,opt,name=faceURL" json:"faceURL,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + ParentID string `protobuf:"bytes,4,opt,name=parentID" json:"parentID,omitempty"` + Order int32 `protobuf:"varint,5,opt,name=order" json:"order,omitempty"` + DepartmentType int32 `protobuf:"varint,6,opt,name=departmentType" json:"departmentType,omitempty"` + CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` + SubDepartmentNum uint32 `protobuf:"varint,8,opt,name=subDepartmentNum" json:"subDepartmentNum,omitempty"` + MemberNum uint32 `protobuf:"varint,9,opt,name=memberNum" json:"memberNum,omitempty"` + Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Department) Reset() { *m = Department{} } +func (m *Department) String() string { return proto.CompactTextString(m) } +func (*Department) ProtoMessage() {} +func (*Department) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{8} +} +func (m *Department) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Department.Unmarshal(m, b) +} +func (m *Department) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Department.Marshal(b, m, deterministic) +} +func (dst *Department) XXX_Merge(src proto.Message) { + xxx_messageInfo_Department.Merge(dst, src) +} +func (m *Department) XXX_Size() int { + return xxx_messageInfo_Department.Size(m) +} +func (m *Department) XXX_DiscardUnknown() { + xxx_messageInfo_Department.DiscardUnknown(m) +} + +var xxx_messageInfo_Department proto.InternalMessageInfo + +func (m *Department) GetDepartmentID() string { + if m != nil { + return m.DepartmentID + } + return "" +} + +func (m *Department) GetFaceURL() string { + if m != nil { + return m.FaceURL + } + return "" +} + +func (m *Department) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Department) GetParentID() string { + if m != nil { + return m.ParentID + } + return "" +} + +func (m *Department) GetOrder() int32 { + if m != nil { + return m.Order + } + return 0 +} + +func (m *Department) GetDepartmentType() int32 { + if m != nil { + return m.DepartmentType + } + return 0 +} + +func (m *Department) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *Department) GetSubDepartmentNum() uint32 { + if m != nil { + return m.SubDepartmentNum + } + return 0 +} + +func (m *Department) GetMemberNum() uint32 { + if m != nil { + return m.MemberNum + } + return 0 +} + +func (m *Department) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type OrganizationUser struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` + EnglishName string `protobuf:"bytes,3,opt,name=englishName" json:"englishName,omitempty"` + FaceURL string `protobuf:"bytes,4,opt,name=faceURL" json:"faceURL,omitempty"` + Gender int32 `protobuf:"varint,5,opt,name=gender" json:"gender,omitempty"` + Mobile string `protobuf:"bytes,6,opt,name=mobile" json:"mobile,omitempty"` + Telephone string `protobuf:"bytes,7,opt,name=telephone" json:"telephone,omitempty"` + Birth uint32 `protobuf:"varint,8,opt,name=birth" json:"birth,omitempty"` + Email string `protobuf:"bytes,9,opt,name=email" json:"email,omitempty"` + CreateTime uint32 `protobuf:"varint,10,opt,name=createTime" json:"createTime,omitempty"` + Ex string `protobuf:"bytes,11,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } +func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } +func (*OrganizationUser) ProtoMessage() {} +func (*OrganizationUser) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{9} +} +func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) +} +func (m *OrganizationUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OrganizationUser.Marshal(b, m, deterministic) +} +func (dst *OrganizationUser) XXX_Merge(src proto.Message) { + xxx_messageInfo_OrganizationUser.Merge(dst, src) +} +func (m *OrganizationUser) XXX_Size() int { + return xxx_messageInfo_OrganizationUser.Size(m) +} +func (m *OrganizationUser) XXX_DiscardUnknown() { + xxx_messageInfo_OrganizationUser.DiscardUnknown(m) +} + +var xxx_messageInfo_OrganizationUser proto.InternalMessageInfo + +func (m *OrganizationUser) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *OrganizationUser) GetNickname() string { + if m != nil { + return m.Nickname + } + return "" +} + +func (m *OrganizationUser) GetEnglishName() string { + if m != nil { + return m.EnglishName + } + return "" +} + +func (m *OrganizationUser) GetFaceURL() string { + if m != nil { + return m.FaceURL + } + return "" +} + +func (m *OrganizationUser) GetGender() int32 { + if m != nil { + return m.Gender + } + return 0 +} + +func (m *OrganizationUser) GetMobile() string { + if m != nil { + return m.Mobile + } + return "" +} + +func (m *OrganizationUser) GetTelephone() string { + if m != nil { + return m.Telephone + } + return "" +} + +func (m *OrganizationUser) GetBirth() uint32 { + if m != nil { + return m.Birth + } + return 0 +} + +func (m *OrganizationUser) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +func (m *OrganizationUser) GetCreateTime() uint32 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *OrganizationUser) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type DepartmentMember struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + DepartmentID string `protobuf:"bytes,2,opt,name=departmentID" json:"departmentID,omitempty"` + Order int32 `protobuf:"varint,3,opt,name=order" json:"order,omitempty"` + Position string `protobuf:"bytes,4,opt,name=position" json:"position,omitempty"` + Leader int32 `protobuf:"varint,5,opt,name=leader" json:"leader,omitempty"` + Status int32 `protobuf:"varint,6,opt,name=status" json:"status,omitempty"` + Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } +func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } +func (*DepartmentMember) ProtoMessage() {} +func (*DepartmentMember) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{10} +} +func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) +} +func (m *DepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DepartmentMember.Marshal(b, m, deterministic) +} +func (dst *DepartmentMember) XXX_Merge(src proto.Message) { + xxx_messageInfo_DepartmentMember.Merge(dst, src) +} +func (m *DepartmentMember) XXX_Size() int { + return xxx_messageInfo_DepartmentMember.Size(m) +} +func (m *DepartmentMember) XXX_DiscardUnknown() { + xxx_messageInfo_DepartmentMember.DiscardUnknown(m) +} + +var xxx_messageInfo_DepartmentMember proto.InternalMessageInfo + +func (m *DepartmentMember) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *DepartmentMember) GetDepartmentID() string { + if m != nil { + return m.DepartmentID + } + return "" +} + +func (m *DepartmentMember) GetOrder() int32 { + if m != nil { + return m.Order + } + return 0 +} + +func (m *DepartmentMember) GetPosition() string { + if m != nil { + return m.Position + } + return "" +} + +func (m *DepartmentMember) GetLeader() int32 { + if m != nil { + return m.Leader + } + return 0 +} + +func (m *DepartmentMember) GetStatus() int32 { + if m != nil { + return m.Status + } + return 0 +} + +func (m *DepartmentMember) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type UserDepartmentMember struct { + OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` + DepartmentMember *DepartmentMember `protobuf:"bytes,2,opt,name=departmentMember" json:"departmentMember,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } +func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } +func (*UserDepartmentMember) ProtoMessage() {} +func (*UserDepartmentMember) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{11} +} +func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) +} +func (m *UserDepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserDepartmentMember.Marshal(b, m, deterministic) +} +func (dst *UserDepartmentMember) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserDepartmentMember.Merge(dst, src) +} +func (m *UserDepartmentMember) XXX_Size() int { + return xxx_messageInfo_UserDepartmentMember.Size(m) +} +func (m *UserDepartmentMember) XXX_DiscardUnknown() { + xxx_messageInfo_UserDepartmentMember.DiscardUnknown(m) +} + +var xxx_messageInfo_UserDepartmentMember proto.InternalMessageInfo + +func (m *UserDepartmentMember) GetOrganizationUser() *OrganizationUser { + if m != nil { + return m.OrganizationUser + } + return nil +} + +func (m *UserDepartmentMember) GetDepartmentMember() *DepartmentMember { + if m != nil { + return m.DepartmentMember + } + return nil +} + +type UserInDepartment struct { + OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` + DepartmentMemberList []*DepartmentMember `protobuf:"bytes,2,rep,name=departmentMemberList" json:"departmentMemberList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } +func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } +func (*UserInDepartment) ProtoMessage() {} +func (*UserInDepartment) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{12} +} +func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) +} +func (m *UserInDepartment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserInDepartment.Marshal(b, m, deterministic) +} +func (dst *UserInDepartment) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserInDepartment.Merge(dst, src) +} +func (m *UserInDepartment) XXX_Size() int { + return xxx_messageInfo_UserInDepartment.Size(m) +} +func (m *UserInDepartment) XXX_DiscardUnknown() { + xxx_messageInfo_UserInDepartment.DiscardUnknown(m) +} + +var xxx_messageInfo_UserInDepartment proto.InternalMessageInfo + +func (m *UserInDepartment) GetOrganizationUser() *OrganizationUser { + if m != nil { + return m.OrganizationUser + } + return nil +} + +func (m *UserInDepartment) GetDepartmentMemberList() []*DepartmentMember { + if m != nil { + return m.DepartmentMemberList + } + return nil +} + +type PullMessageBySeqListResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } +func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } +func (*PullMessageBySeqListResp) ProtoMessage() {} +func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{13} +} +func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) +} +func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) +} +func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) +} +func (m *PullMessageBySeqListResp) XXX_Size() int { + return xxx_messageInfo_PullMessageBySeqListResp.Size(m) +} +func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { + xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) +} + +var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo + +func (m *PullMessageBySeqListResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *PullMessageBySeqListResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *PullMessageBySeqListResp) GetList() []*MsgData { + if m != nil { + return m.List + } + return nil +} + +type PullMessageBySeqListReq struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` + SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq{} } +func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } +func (*PullMessageBySeqListReq) ProtoMessage() {} +func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{14} +} +func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) +} +func (m *PullMessageBySeqListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PullMessageBySeqListReq.Marshal(b, m, deterministic) +} +func (dst *PullMessageBySeqListReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_PullMessageBySeqListReq.Merge(dst, src) +} +func (m *PullMessageBySeqListReq) XXX_Size() int { + return xxx_messageInfo_PullMessageBySeqListReq.Size(m) +} +func (m *PullMessageBySeqListReq) XXX_DiscardUnknown() { + xxx_messageInfo_PullMessageBySeqListReq.DiscardUnknown(m) +} + +var xxx_messageInfo_PullMessageBySeqListReq proto.InternalMessageInfo + +func (m *PullMessageBySeqListReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *PullMessageBySeqListReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + +type GetMaxAndMinSeqReq struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } +func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } +func (*GetMaxAndMinSeqReq) ProtoMessage() {} +func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{15} +} +func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) +} +func (m *GetMaxAndMinSeqReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetMaxAndMinSeqReq.Marshal(b, m, deterministic) +} +func (dst *GetMaxAndMinSeqReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetMaxAndMinSeqReq.Merge(dst, src) +} +func (m *GetMaxAndMinSeqReq) XXX_Size() int { + return xxx_messageInfo_GetMaxAndMinSeqReq.Size(m) +} +func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetMaxAndMinSeqReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo + +type GetMaxAndMinSeqResp struct { + MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` + MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } +func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } +func (*GetMaxAndMinSeqResp) ProtoMessage() {} +func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{16} +} +func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) +} +func (m *GetMaxAndMinSeqResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetMaxAndMinSeqResp.Marshal(b, m, deterministic) +} +func (dst *GetMaxAndMinSeqResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetMaxAndMinSeqResp.Merge(dst, src) +} +func (m *GetMaxAndMinSeqResp) XXX_Size() int { + return xxx_messageInfo_GetMaxAndMinSeqResp.Size(m) +} +func (m *GetMaxAndMinSeqResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetMaxAndMinSeqResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetMaxAndMinSeqResp proto.InternalMessageInfo + +func (m *GetMaxAndMinSeqResp) GetMaxSeq() uint32 { + if m != nil { + return m.MaxSeq + } + return 0 +} + +func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { + if m != nil { + return m.MinSeq + } + return 0 +} + +type UserSendMsgResp struct { + ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID" json:"serverMsgID,omitempty"` + ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + SendTime int64 `protobuf:"varint,3,opt,name=sendTime" json:"sendTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } +func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } +func (*UserSendMsgResp) ProtoMessage() {} +func (*UserSendMsgResp) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{17} +} +func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) +} +func (m *UserSendMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserSendMsgResp.Marshal(b, m, deterministic) +} +func (dst *UserSendMsgResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserSendMsgResp.Merge(dst, src) +} +func (m *UserSendMsgResp) XXX_Size() int { + return xxx_messageInfo_UserSendMsgResp.Size(m) +} +func (m *UserSendMsgResp) XXX_DiscardUnknown() { + xxx_messageInfo_UserSendMsgResp.DiscardUnknown(m) +} + +var xxx_messageInfo_UserSendMsgResp proto.InternalMessageInfo + +func (m *UserSendMsgResp) GetServerMsgID() string { + if m != nil { + return m.ServerMsgID + } + return "" +} + +func (m *UserSendMsgResp) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *UserSendMsgResp) GetSendTime() int64 { + if m != nil { + return m.SendTime + } + return 0 +} + +type MsgData struct { + SendID string `protobuf:"bytes,1,opt,name=sendID" json:"sendID,omitempty"` + RecvID string `protobuf:"bytes,2,opt,name=recvID" json:"recvID,omitempty"` + GroupID string `protobuf:"bytes,3,opt,name=groupID" json:"groupID,omitempty"` + ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + ServerMsgID string `protobuf:"bytes,5,opt,name=serverMsgID" json:"serverMsgID,omitempty"` + SenderPlatformID int32 `protobuf:"varint,6,opt,name=senderPlatformID" json:"senderPlatformID,omitempty"` + SenderNickname string `protobuf:"bytes,7,opt,name=senderNickname" json:"senderNickname,omitempty"` + SenderFaceURL string `protobuf:"bytes,8,opt,name=senderFaceURL" json:"senderFaceURL,omitempty"` + SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` + MsgFrom int32 `protobuf:"varint,10,opt,name=msgFrom" json:"msgFrom,omitempty"` + ContentType int32 `protobuf:"varint,11,opt,name=contentType" json:"contentType,omitempty"` + Content []byte `protobuf:"bytes,12,opt,name=content,proto3" json:"content,omitempty"` + Seq uint32 `protobuf:"varint,14,opt,name=seq" json:"seq,omitempty"` + SendTime int64 `protobuf:"varint,15,opt,name=sendTime" json:"sendTime,omitempty"` + CreateTime int64 `protobuf:"varint,16,opt,name=createTime" json:"createTime,omitempty"` + Status int32 `protobuf:"varint,17,opt,name=status" json:"status,omitempty"` + Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MsgData) Reset() { *m = MsgData{} } +func (m *MsgData) String() string { return proto.CompactTextString(m) } +func (*MsgData) ProtoMessage() {} +func (*MsgData) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{18} +} +func (m *MsgData) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgData.Unmarshal(m, b) +} +func (m *MsgData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgData.Marshal(b, m, deterministic) +} +func (dst *MsgData) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgData.Merge(dst, src) +} +func (m *MsgData) XXX_Size() int { + return xxx_messageInfo_MsgData.Size(m) +} +func (m *MsgData) XXX_DiscardUnknown() { + xxx_messageInfo_MsgData.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgData proto.InternalMessageInfo + +func (m *MsgData) GetSendID() string { + if m != nil { + return m.SendID + } + return "" +} + +func (m *MsgData) GetRecvID() string { + if m != nil { + return m.RecvID + } + return "" +} + +func (m *MsgData) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *MsgData) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *MsgData) GetServerMsgID() string { + if m != nil { + return m.ServerMsgID + } + return "" +} + +func (m *MsgData) GetSenderPlatformID() int32 { + if m != nil { + return m.SenderPlatformID + } + return 0 +} + +func (m *MsgData) GetSenderNickname() string { + if m != nil { + return m.SenderNickname + } + return "" +} + +func (m *MsgData) GetSenderFaceURL() string { + if m != nil { + return m.SenderFaceURL + } + return "" +} + +func (m *MsgData) GetSessionType() int32 { + if m != nil { + return m.SessionType + } + return 0 +} + +func (m *MsgData) GetMsgFrom() int32 { + if m != nil { + return m.MsgFrom + } + return 0 +} + +func (m *MsgData) GetContentType() int32 { + if m != nil { + return m.ContentType + } + return 0 +} + +func (m *MsgData) GetContent() []byte { + if m != nil { + return m.Content + } + return nil +} + +func (m *MsgData) GetSeq() uint32 { + if m != nil { + return m.Seq + } + return 0 +} + +func (m *MsgData) GetSendTime() int64 { + if m != nil { + return m.SendTime + } + return 0 +} + +func (m *MsgData) GetCreateTime() int64 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *MsgData) GetStatus() int32 { + if m != nil { + return m.Status + } + return 0 +} + +func (m *MsgData) GetOptions() map[string]bool { + if m != nil { + return m.Options + } + return nil +} + +func (m *MsgData) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *MsgData) GetAtUserIDList() []string { + if m != nil { + return m.AtUserIDList + } + return nil +} + +type OfflinePushInfo struct { + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Desc string `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"` + Ex string `protobuf:"bytes,3,opt,name=ex" json:"ex,omitempty"` + IOSPushSound string `protobuf:"bytes,4,opt,name=iOSPushSound" json:"iOSPushSound,omitempty"` + IOSBadgeCount bool `protobuf:"varint,5,opt,name=iOSBadgeCount" json:"iOSBadgeCount,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } +func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } +func (*OfflinePushInfo) ProtoMessage() {} +func (*OfflinePushInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{19} +} +func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) +} +func (m *OfflinePushInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OfflinePushInfo.Marshal(b, m, deterministic) +} +func (dst *OfflinePushInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_OfflinePushInfo.Merge(dst, src) +} +func (m *OfflinePushInfo) XXX_Size() int { + return xxx_messageInfo_OfflinePushInfo.Size(m) +} +func (m *OfflinePushInfo) XXX_DiscardUnknown() { + xxx_messageInfo_OfflinePushInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_OfflinePushInfo proto.InternalMessageInfo + +func (m *OfflinePushInfo) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *OfflinePushInfo) GetDesc() string { + if m != nil { + return m.Desc + } + return "" +} + +func (m *OfflinePushInfo) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +func (m *OfflinePushInfo) GetIOSPushSound() string { + if m != nil { + return m.IOSPushSound + } + return "" +} + +func (m *OfflinePushInfo) GetIOSBadgeCount() bool { + if m != nil { + return m.IOSBadgeCount + } + return false +} + +type TipsComm struct { + Detail []byte `protobuf:"bytes,1,opt,name=detail,proto3" json:"detail,omitempty"` + DefaultTips string `protobuf:"bytes,2,opt,name=defaultTips" json:"defaultTips,omitempty"` + JsonDetail string `protobuf:"bytes,3,opt,name=jsonDetail" json:"jsonDetail,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TipsComm) Reset() { *m = TipsComm{} } +func (m *TipsComm) String() string { return proto.CompactTextString(m) } +func (*TipsComm) ProtoMessage() {} +func (*TipsComm) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{20} +} +func (m *TipsComm) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TipsComm.Unmarshal(m, b) +} +func (m *TipsComm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TipsComm.Marshal(b, m, deterministic) +} +func (dst *TipsComm) XXX_Merge(src proto.Message) { + xxx_messageInfo_TipsComm.Merge(dst, src) +} +func (m *TipsComm) XXX_Size() int { + return xxx_messageInfo_TipsComm.Size(m) +} +func (m *TipsComm) XXX_DiscardUnknown() { + xxx_messageInfo_TipsComm.DiscardUnknown(m) +} + +var xxx_messageInfo_TipsComm proto.InternalMessageInfo + +func (m *TipsComm) GetDetail() []byte { + if m != nil { + return m.Detail + } + return nil +} + +func (m *TipsComm) GetDefaultTips() string { + if m != nil { + return m.DefaultTips + } + return "" +} + +func (m *TipsComm) GetJsonDetail() string { + if m != nil { + return m.JsonDetail + } + return "" +} + +// OnGroupCreated() +type GroupCreatedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + MemberList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=memberList" json:"memberList,omitempty"` + OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` + GroupOwnerUser *GroupMemberFullInfo `protobuf:"bytes,5,opt,name=groupOwnerUser" json:"groupOwnerUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } +func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } +func (*GroupCreatedTips) ProtoMessage() {} +func (*GroupCreatedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{21} +} +func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) +} +func (m *GroupCreatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupCreatedTips.Marshal(b, m, deterministic) +} +func (dst *GroupCreatedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupCreatedTips.Merge(dst, src) +} +func (m *GroupCreatedTips) XXX_Size() int { + return xxx_messageInfo_GroupCreatedTips.Size(m) +} +func (m *GroupCreatedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupCreatedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupCreatedTips proto.InternalMessageInfo + +func (m *GroupCreatedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupCreatedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupCreatedTips) GetMemberList() []*GroupMemberFullInfo { + if m != nil { + return m.MemberList + } + return nil +} + +func (m *GroupCreatedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +func (m *GroupCreatedTips) GetGroupOwnerUser() *GroupMemberFullInfo { + if m != nil { + return m.GroupOwnerUser + } + return nil +} + +// OnGroupInfoSet() +type GroupInfoSetTips struct { + OpUser *GroupMemberFullInfo `protobuf:"bytes,1,opt,name=opUser" json:"opUser,omitempty"` + MuteTime int64 `protobuf:"varint,2,opt,name=muteTime" json:"muteTime,omitempty"` + Group *GroupInfo `protobuf:"bytes,3,opt,name=group" json:"group,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } +func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } +func (*GroupInfoSetTips) ProtoMessage() {} +func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{22} +} +func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) +} +func (m *GroupInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupInfoSetTips.Marshal(b, m, deterministic) +} +func (dst *GroupInfoSetTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupInfoSetTips.Merge(dst, src) +} +func (m *GroupInfoSetTips) XXX_Size() int { + return xxx_messageInfo_GroupInfoSetTips.Size(m) +} +func (m *GroupInfoSetTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupInfoSetTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupInfoSetTips proto.InternalMessageInfo + +func (m *GroupInfoSetTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupInfoSetTips) GetMuteTime() int64 { + if m != nil { + return m.MuteTime + } + return 0 +} + +func (m *GroupInfoSetTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +// OnJoinGroupApplication() +type JoinGroupApplicationTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + Applicant *PublicUserInfo `protobuf:"bytes,2,opt,name=applicant" json:"applicant,omitempty"` + ReqMsg string `protobuf:"bytes,3,opt,name=reqMsg" json:"reqMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTips{} } +func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } +func (*JoinGroupApplicationTips) ProtoMessage() {} +func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{23} +} +func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) +} +func (m *JoinGroupApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_JoinGroupApplicationTips.Marshal(b, m, deterministic) +} +func (dst *JoinGroupApplicationTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_JoinGroupApplicationTips.Merge(dst, src) +} +func (m *JoinGroupApplicationTips) XXX_Size() int { + return xxx_messageInfo_JoinGroupApplicationTips.Size(m) +} +func (m *JoinGroupApplicationTips) XXX_DiscardUnknown() { + xxx_messageInfo_JoinGroupApplicationTips.DiscardUnknown(m) +} + +var xxx_messageInfo_JoinGroupApplicationTips proto.InternalMessageInfo + +func (m *JoinGroupApplicationTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *JoinGroupApplicationTips) GetApplicant() *PublicUserInfo { + if m != nil { + return m.Applicant + } + return nil +} + +func (m *JoinGroupApplicationTips) GetReqMsg() string { + if m != nil { + return m.ReqMsg + } + return "" +} + +// OnQuitGroup() +// Actively leave the group +type MemberQuitTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + QuitUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=quitUser" json:"quitUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } +func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } +func (*MemberQuitTips) ProtoMessage() {} +func (*MemberQuitTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{24} +} +func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) +} +func (m *MemberQuitTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MemberQuitTips.Marshal(b, m, deterministic) +} +func (dst *MemberQuitTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_MemberQuitTips.Merge(dst, src) +} +func (m *MemberQuitTips) XXX_Size() int { + return xxx_messageInfo_MemberQuitTips.Size(m) +} +func (m *MemberQuitTips) XXX_DiscardUnknown() { + xxx_messageInfo_MemberQuitTips.DiscardUnknown(m) +} + +var xxx_messageInfo_MemberQuitTips proto.InternalMessageInfo + +func (m *MemberQuitTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *MemberQuitTips) GetQuitUser() *GroupMemberFullInfo { + if m != nil { + return m.QuitUser + } + return nil +} + +func (m *MemberQuitTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +// OnApplicationGroupAccepted() +type GroupApplicationAcceptedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAcceptedTips{} } +func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } +func (*GroupApplicationAcceptedTips) ProtoMessage() {} +func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{25} +} +func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) +} +func (m *GroupApplicationAcceptedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupApplicationAcceptedTips.Marshal(b, m, deterministic) +} +func (dst *GroupApplicationAcceptedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupApplicationAcceptedTips.Merge(dst, src) +} +func (m *GroupApplicationAcceptedTips) XXX_Size() int { + return xxx_messageInfo_GroupApplicationAcceptedTips.Size(m) +} +func (m *GroupApplicationAcceptedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupApplicationAcceptedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupApplicationAcceptedTips proto.InternalMessageInfo + +func (m *GroupApplicationAcceptedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupApplicationAcceptedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupApplicationAcceptedTips) GetHandleMsg() string { + if m != nil { + return m.HandleMsg + } + return "" +} + +// OnApplicationGroupRejected() +type GroupApplicationRejectedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRejectedTips{} } +func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } +func (*GroupApplicationRejectedTips) ProtoMessage() {} +func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{26} +} +func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) +} +func (m *GroupApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupApplicationRejectedTips.Marshal(b, m, deterministic) +} +func (dst *GroupApplicationRejectedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupApplicationRejectedTips.Merge(dst, src) +} +func (m *GroupApplicationRejectedTips) XXX_Size() int { + return xxx_messageInfo_GroupApplicationRejectedTips.Size(m) +} +func (m *GroupApplicationRejectedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupApplicationRejectedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupApplicationRejectedTips proto.InternalMessageInfo + +func (m *GroupApplicationRejectedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupApplicationRejectedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupApplicationRejectedTips) GetHandleMsg() string { + if m != nil { + return m.HandleMsg + } + return "" +} + +// OnTransferGroupOwner() +type GroupOwnerTransferredTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + NewGroupOwner *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=newGroupOwner" json:"newGroupOwner,omitempty"` + OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferredTips{} } +func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } +func (*GroupOwnerTransferredTips) ProtoMessage() {} +func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{27} +} +func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) +} +func (m *GroupOwnerTransferredTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupOwnerTransferredTips.Marshal(b, m, deterministic) +} +func (dst *GroupOwnerTransferredTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupOwnerTransferredTips.Merge(dst, src) +} +func (m *GroupOwnerTransferredTips) XXX_Size() int { + return xxx_messageInfo_GroupOwnerTransferredTips.Size(m) +} +func (m *GroupOwnerTransferredTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupOwnerTransferredTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupOwnerTransferredTips proto.InternalMessageInfo + +func (m *GroupOwnerTransferredTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupOwnerTransferredTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupOwnerTransferredTips) GetNewGroupOwner() *GroupMemberFullInfo { + if m != nil { + return m.NewGroupOwner + } + return nil +} + +func (m *GroupOwnerTransferredTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +// OnMemberKicked() +type MemberKickedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + KickedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=kickedUserList" json:"kickedUserList,omitempty"` + OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } +func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } +func (*MemberKickedTips) ProtoMessage() {} +func (*MemberKickedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{28} +} +func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) +} +func (m *MemberKickedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MemberKickedTips.Marshal(b, m, deterministic) +} +func (dst *MemberKickedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_MemberKickedTips.Merge(dst, src) +} +func (m *MemberKickedTips) XXX_Size() int { + return xxx_messageInfo_MemberKickedTips.Size(m) +} +func (m *MemberKickedTips) XXX_DiscardUnknown() { + xxx_messageInfo_MemberKickedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_MemberKickedTips proto.InternalMessageInfo + +func (m *MemberKickedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *MemberKickedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *MemberKickedTips) GetKickedUserList() []*GroupMemberFullInfo { + if m != nil { + return m.KickedUserList + } + return nil +} + +func (m *MemberKickedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +// OnMemberInvited() +type MemberInvitedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + InvitedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=invitedUserList" json:"invitedUserList,omitempty"` + OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } +func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } +func (*MemberInvitedTips) ProtoMessage() {} +func (*MemberInvitedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{29} +} +func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) +} +func (m *MemberInvitedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MemberInvitedTips.Marshal(b, m, deterministic) +} +func (dst *MemberInvitedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_MemberInvitedTips.Merge(dst, src) +} +func (m *MemberInvitedTips) XXX_Size() int { + return xxx_messageInfo_MemberInvitedTips.Size(m) +} +func (m *MemberInvitedTips) XXX_DiscardUnknown() { + xxx_messageInfo_MemberInvitedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_MemberInvitedTips proto.InternalMessageInfo + +func (m *MemberInvitedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *MemberInvitedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *MemberInvitedTips) GetInvitedUserList() []*GroupMemberFullInfo { + if m != nil { + return m.InvitedUserList + } + return nil +} + +func (m *MemberInvitedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +// Actively join the group +type MemberEnterTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + EntrantUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=entrantUser" json:"entrantUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } +func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } +func (*MemberEnterTips) ProtoMessage() {} +func (*MemberEnterTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{30} +} +func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) +} +func (m *MemberEnterTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MemberEnterTips.Marshal(b, m, deterministic) +} +func (dst *MemberEnterTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_MemberEnterTips.Merge(dst, src) +} +func (m *MemberEnterTips) XXX_Size() int { + return xxx_messageInfo_MemberEnterTips.Size(m) +} +func (m *MemberEnterTips) XXX_DiscardUnknown() { + xxx_messageInfo_MemberEnterTips.DiscardUnknown(m) +} + +var xxx_messageInfo_MemberEnterTips proto.InternalMessageInfo + +func (m *MemberEnterTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *MemberEnterTips) GetEntrantUser() *GroupMemberFullInfo { + if m != nil { + return m.EntrantUser + } + return nil +} + +func (m *MemberEnterTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +type GroupDismissedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } +func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } +func (*GroupDismissedTips) ProtoMessage() {} +func (*GroupDismissedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{31} +} +func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) +} +func (m *GroupDismissedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupDismissedTips.Marshal(b, m, deterministic) +} +func (dst *GroupDismissedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupDismissedTips.Merge(dst, src) +} +func (m *GroupDismissedTips) XXX_Size() int { + return xxx_messageInfo_GroupDismissedTips.Size(m) +} +func (m *GroupDismissedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupDismissedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupDismissedTips proto.InternalMessageInfo + +func (m *GroupDismissedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupDismissedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupDismissedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +type GroupMemberMutedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` + MutedSeconds uint32 `protobuf:"varint,5,opt,name=mutedSeconds" json:"mutedSeconds,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } +func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } +func (*GroupMemberMutedTips) ProtoMessage() {} +func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{32} +} +func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) +} +func (m *GroupMemberMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberMutedTips.Marshal(b, m, deterministic) +} +func (dst *GroupMemberMutedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberMutedTips.Merge(dst, src) +} +func (m *GroupMemberMutedTips) XXX_Size() int { + return xxx_messageInfo_GroupMemberMutedTips.Size(m) +} +func (m *GroupMemberMutedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberMutedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMemberMutedTips proto.InternalMessageInfo + +func (m *GroupMemberMutedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupMemberMutedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupMemberMutedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +func (m *GroupMemberMutedTips) GetMutedUser() *GroupMemberFullInfo { + if m != nil { + return m.MutedUser + } + return nil +} + +func (m *GroupMemberMutedTips) GetMutedSeconds() uint32 { + if m != nil { + return m.MutedSeconds + } + return 0 +} + +type GroupMemberCancelMutedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMutedTips{} } +func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } +func (*GroupMemberCancelMutedTips) ProtoMessage() {} +func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{33} +} +func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) +} +func (m *GroupMemberCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberCancelMutedTips.Marshal(b, m, deterministic) +} +func (dst *GroupMemberCancelMutedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberCancelMutedTips.Merge(dst, src) +} +func (m *GroupMemberCancelMutedTips) XXX_Size() int { + return xxx_messageInfo_GroupMemberCancelMutedTips.Size(m) +} +func (m *GroupMemberCancelMutedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberCancelMutedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMemberCancelMutedTips proto.InternalMessageInfo + +func (m *GroupMemberCancelMutedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupMemberCancelMutedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupMemberCancelMutedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +func (m *GroupMemberCancelMutedTips) GetMutedUser() *GroupMemberFullInfo { + if m != nil { + return m.MutedUser + } + return nil +} + +type GroupMutedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } +func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } +func (*GroupMutedTips) ProtoMessage() {} +func (*GroupMutedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{34} +} +func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) +} +func (m *GroupMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMutedTips.Marshal(b, m, deterministic) +} +func (dst *GroupMutedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMutedTips.Merge(dst, src) +} +func (m *GroupMutedTips) XXX_Size() int { + return xxx_messageInfo_GroupMutedTips.Size(m) +} +func (m *GroupMutedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMutedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMutedTips proto.InternalMessageInfo + +func (m *GroupMutedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupMutedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupMutedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +type GroupCancelMutedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } +func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } +func (*GroupCancelMutedTips) ProtoMessage() {} +func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{35} +} +func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) +} +func (m *GroupCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupCancelMutedTips.Marshal(b, m, deterministic) +} +func (dst *GroupCancelMutedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupCancelMutedTips.Merge(dst, src) +} +func (m *GroupCancelMutedTips) XXX_Size() int { + return xxx_messageInfo_GroupCancelMutedTips.Size(m) +} +func (m *GroupCancelMutedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupCancelMutedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupCancelMutedTips proto.InternalMessageInfo + +func (m *GroupCancelMutedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupCancelMutedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupCancelMutedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +type GroupMemberInfoSetTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + ChangedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=changedUser" json:"changedUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} } +func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } +func (*GroupMemberInfoSetTips) ProtoMessage() {} +func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{36} +} +func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) +} +func (m *GroupMemberInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberInfoSetTips.Marshal(b, m, deterministic) +} +func (dst *GroupMemberInfoSetTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberInfoSetTips.Merge(dst, src) +} +func (m *GroupMemberInfoSetTips) XXX_Size() int { + return xxx_messageInfo_GroupMemberInfoSetTips.Size(m) +} +func (m *GroupMemberInfoSetTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberInfoSetTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMemberInfoSetTips proto.InternalMessageInfo + +func (m *GroupMemberInfoSetTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupMemberInfoSetTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupMemberInfoSetTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +func (m *GroupMemberInfoSetTips) GetChangedUser() *GroupMemberFullInfo { + if m != nil { + return m.ChangedUser + } + return nil +} + +type OrganizationChangedTips struct { + OpUser *UserInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` + OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips{} } +func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } +func (*OrganizationChangedTips) ProtoMessage() {} +func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{37} +} +func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) +} +func (m *OrganizationChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OrganizationChangedTips.Marshal(b, m, deterministic) +} +func (dst *OrganizationChangedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_OrganizationChangedTips.Merge(dst, src) +} +func (m *OrganizationChangedTips) XXX_Size() int { + return xxx_messageInfo_OrganizationChangedTips.Size(m) +} +func (m *OrganizationChangedTips) XXX_DiscardUnknown() { + xxx_messageInfo_OrganizationChangedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_OrganizationChangedTips proto.InternalMessageInfo + +func (m *OrganizationChangedTips) GetOpUser() *UserInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *OrganizationChangedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +type FriendApplication struct { + AddTime int64 `protobuf:"varint,1,opt,name=addTime" json:"addTime,omitempty"` + AddSource string `protobuf:"bytes,2,opt,name=addSource" json:"addSource,omitempty"` + AddWording string `protobuf:"bytes,3,opt,name=addWording" json:"addWording,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendApplication) Reset() { *m = FriendApplication{} } +func (m *FriendApplication) String() string { return proto.CompactTextString(m) } +func (*FriendApplication) ProtoMessage() {} +func (*FriendApplication) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{38} +} +func (m *FriendApplication) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendApplication.Unmarshal(m, b) +} +func (m *FriendApplication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendApplication.Marshal(b, m, deterministic) +} +func (dst *FriendApplication) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendApplication.Merge(dst, src) +} +func (m *FriendApplication) XXX_Size() int { + return xxx_messageInfo_FriendApplication.Size(m) +} +func (m *FriendApplication) XXX_DiscardUnknown() { + xxx_messageInfo_FriendApplication.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendApplication proto.InternalMessageInfo + +func (m *FriendApplication) GetAddTime() int64 { + if m != nil { + return m.AddTime + } + return 0 +} + +func (m *FriendApplication) GetAddSource() string { + if m != nil { + return m.AddSource + } + return "" +} + +func (m *FriendApplication) GetAddWording() string { + if m != nil { + return m.AddWording + } + return "" +} + +type FromToUserID struct { + FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` + ToUserID string `protobuf:"bytes,2,opt,name=toUserID" json:"toUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FromToUserID) Reset() { *m = FromToUserID{} } +func (m *FromToUserID) String() string { return proto.CompactTextString(m) } +func (*FromToUserID) ProtoMessage() {} +func (*FromToUserID) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{39} +} +func (m *FromToUserID) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FromToUserID.Unmarshal(m, b) +} +func (m *FromToUserID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FromToUserID.Marshal(b, m, deterministic) +} +func (dst *FromToUserID) XXX_Merge(src proto.Message) { + xxx_messageInfo_FromToUserID.Merge(dst, src) +} +func (m *FromToUserID) XXX_Size() int { + return xxx_messageInfo_FromToUserID.Size(m) +} +func (m *FromToUserID) XXX_DiscardUnknown() { + xxx_messageInfo_FromToUserID.DiscardUnknown(m) +} + +var xxx_messageInfo_FromToUserID proto.InternalMessageInfo + +func (m *FromToUserID) GetFromUserID() string { + if m != nil { + return m.FromUserID + } + return "" +} + +func (m *FromToUserID) GetToUserID() string { + if m != nil { + return m.ToUserID + } + return "" +} + +// FromUserID apply to add ToUserID +type FriendApplicationTips struct { + FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } +func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } +func (*FriendApplicationTips) ProtoMessage() {} +func (*FriendApplicationTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{40} +} +func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) +} +func (m *FriendApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendApplicationTips.Marshal(b, m, deterministic) +} +func (dst *FriendApplicationTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendApplicationTips.Merge(dst, src) +} +func (m *FriendApplicationTips) XXX_Size() int { + return xxx_messageInfo_FriendApplicationTips.Size(m) +} +func (m *FriendApplicationTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendApplicationTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendApplicationTips proto.InternalMessageInfo + +func (m *FriendApplicationTips) GetFromToUserID() *FromToUserID { + if m != nil { + return m.FromToUserID + } + return nil +} + +// FromUserID accept or reject ToUserID +type FriendApplicationApprovedTips struct { + FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` + HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplicationApprovedTips{} } +func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } +func (*FriendApplicationApprovedTips) ProtoMessage() {} +func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{41} +} +func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) +} +func (m *FriendApplicationApprovedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendApplicationApprovedTips.Marshal(b, m, deterministic) +} +func (dst *FriendApplicationApprovedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendApplicationApprovedTips.Merge(dst, src) +} +func (m *FriendApplicationApprovedTips) XXX_Size() int { + return xxx_messageInfo_FriendApplicationApprovedTips.Size(m) +} +func (m *FriendApplicationApprovedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendApplicationApprovedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendApplicationApprovedTips proto.InternalMessageInfo + +func (m *FriendApplicationApprovedTips) GetFromToUserID() *FromToUserID { + if m != nil { + return m.FromToUserID + } + return nil +} + +func (m *FriendApplicationApprovedTips) GetHandleMsg() string { + if m != nil { + return m.HandleMsg + } + return "" +} + +// FromUserID accept or reject ToUserID +type FriendApplicationRejectedTips struct { + FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` + HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplicationRejectedTips{} } +func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } +func (*FriendApplicationRejectedTips) ProtoMessage() {} +func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{42} +} +func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) +} +func (m *FriendApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendApplicationRejectedTips.Marshal(b, m, deterministic) +} +func (dst *FriendApplicationRejectedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendApplicationRejectedTips.Merge(dst, src) +} +func (m *FriendApplicationRejectedTips) XXX_Size() int { + return xxx_messageInfo_FriendApplicationRejectedTips.Size(m) +} +func (m *FriendApplicationRejectedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendApplicationRejectedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendApplicationRejectedTips proto.InternalMessageInfo + +func (m *FriendApplicationRejectedTips) GetFromToUserID() *FromToUserID { + if m != nil { + return m.FromToUserID + } + return nil +} + +func (m *FriendApplicationRejectedTips) GetHandleMsg() string { + if m != nil { + return m.HandleMsg + } + return "" +} + +// FromUserID Added a friend ToUserID +type FriendAddedTips struct { + Friend *FriendInfo `protobuf:"bytes,1,opt,name=friend" json:"friend,omitempty"` + OperationTime int64 `protobuf:"varint,2,opt,name=operationTime" json:"operationTime,omitempty"` + OpUser *PublicUserInfo `protobuf:"bytes,3,opt,name=opUser" json:"opUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } +func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } +func (*FriendAddedTips) ProtoMessage() {} +func (*FriendAddedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{43} +} +func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) +} +func (m *FriendAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendAddedTips.Marshal(b, m, deterministic) +} +func (dst *FriendAddedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendAddedTips.Merge(dst, src) +} +func (m *FriendAddedTips) XXX_Size() int { + return xxx_messageInfo_FriendAddedTips.Size(m) +} +func (m *FriendAddedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendAddedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendAddedTips proto.InternalMessageInfo + +func (m *FriendAddedTips) GetFriend() *FriendInfo { + if m != nil { + return m.Friend + } + return nil +} + +func (m *FriendAddedTips) GetOperationTime() int64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +func (m *FriendAddedTips) GetOpUser() *PublicUserInfo { + if m != nil { + return m.OpUser + } + return nil +} + +// FromUserID deleted a friend ToUserID +type FriendDeletedTips struct { + FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } +func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } +func (*FriendDeletedTips) ProtoMessage() {} +func (*FriendDeletedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{44} +} +func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) +} +func (m *FriendDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendDeletedTips.Marshal(b, m, deterministic) +} +func (dst *FriendDeletedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendDeletedTips.Merge(dst, src) +} +func (m *FriendDeletedTips) XXX_Size() int { + return xxx_messageInfo_FriendDeletedTips.Size(m) +} +func (m *FriendDeletedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendDeletedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendDeletedTips proto.InternalMessageInfo + +func (m *FriendDeletedTips) GetFromToUserID() *FromToUserID { + if m != nil { + return m.FromToUserID + } + return nil +} + +type BlackAddedTips struct { + FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } +func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } +func (*BlackAddedTips) ProtoMessage() {} +func (*BlackAddedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{45} +} +func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) +} +func (m *BlackAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BlackAddedTips.Marshal(b, m, deterministic) +} +func (dst *BlackAddedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlackAddedTips.Merge(dst, src) +} +func (m *BlackAddedTips) XXX_Size() int { + return xxx_messageInfo_BlackAddedTips.Size(m) +} +func (m *BlackAddedTips) XXX_DiscardUnknown() { + xxx_messageInfo_BlackAddedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_BlackAddedTips proto.InternalMessageInfo + +func (m *BlackAddedTips) GetFromToUserID() *FromToUserID { + if m != nil { + return m.FromToUserID + } + return nil +} + +type BlackDeletedTips struct { + FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } +func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } +func (*BlackDeletedTips) ProtoMessage() {} +func (*BlackDeletedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{46} +} +func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) +} +func (m *BlackDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BlackDeletedTips.Marshal(b, m, deterministic) +} +func (dst *BlackDeletedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlackDeletedTips.Merge(dst, src) +} +func (m *BlackDeletedTips) XXX_Size() int { + return xxx_messageInfo_BlackDeletedTips.Size(m) +} +func (m *BlackDeletedTips) XXX_DiscardUnknown() { + xxx_messageInfo_BlackDeletedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_BlackDeletedTips proto.InternalMessageInfo + +func (m *BlackDeletedTips) GetFromToUserID() *FromToUserID { + if m != nil { + return m.FromToUserID + } + return nil +} + +type FriendInfoChangedTips struct { + FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } +func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } +func (*FriendInfoChangedTips) ProtoMessage() {} +func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{47} +} +func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) +} +func (m *FriendInfoChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendInfoChangedTips.Marshal(b, m, deterministic) +} +func (dst *FriendInfoChangedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendInfoChangedTips.Merge(dst, src) +} +func (m *FriendInfoChangedTips) XXX_Size() int { + return xxx_messageInfo_FriendInfoChangedTips.Size(m) +} +func (m *FriendInfoChangedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendInfoChangedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendInfoChangedTips proto.InternalMessageInfo + +func (m *FriendInfoChangedTips) GetFromToUserID() *FromToUserID { + if m != nil { + return m.FromToUserID + } + return nil +} + +// ////////////////////user///////////////////// +type UserInfoUpdatedTips struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } +func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } +func (*UserInfoUpdatedTips) ProtoMessage() {} +func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{48} +} +func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) +} +func (m *UserInfoUpdatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserInfoUpdatedTips.Marshal(b, m, deterministic) +} +func (dst *UserInfoUpdatedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserInfoUpdatedTips.Merge(dst, src) +} +func (m *UserInfoUpdatedTips) XXX_Size() int { + return xxx_messageInfo_UserInfoUpdatedTips.Size(m) +} +func (m *UserInfoUpdatedTips) XXX_DiscardUnknown() { + xxx_messageInfo_UserInfoUpdatedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_UserInfoUpdatedTips proto.InternalMessageInfo + +func (m *UserInfoUpdatedTips) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +// ////////////////////conversation///////////////////// +type ConversationUpdateTips struct { + UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} } +func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } +func (*ConversationUpdateTips) ProtoMessage() {} +func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{49} +} +func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) +} +func (m *ConversationUpdateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ConversationUpdateTips.Marshal(b, m, deterministic) +} +func (dst *ConversationUpdateTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConversationUpdateTips.Merge(dst, src) +} +func (m *ConversationUpdateTips) XXX_Size() int { + return xxx_messageInfo_ConversationUpdateTips.Size(m) +} +func (m *ConversationUpdateTips) XXX_DiscardUnknown() { + xxx_messageInfo_ConversationUpdateTips.DiscardUnknown(m) +} + +var xxx_messageInfo_ConversationUpdateTips proto.InternalMessageInfo + +func (m *ConversationUpdateTips) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +type ConversationSetPrivateTips struct { + RecvID string `protobuf:"bytes,1,opt,name=recvID" json:"recvID,omitempty"` + SendID string `protobuf:"bytes,2,opt,name=sendID" json:"sendID,omitempty"` + IsPrivate bool `protobuf:"varint,3,opt,name=isPrivate" json:"isPrivate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPrivateTips{} } +func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } +func (*ConversationSetPrivateTips) ProtoMessage() {} +func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{50} +} +func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) +} +func (m *ConversationSetPrivateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ConversationSetPrivateTips.Marshal(b, m, deterministic) +} +func (dst *ConversationSetPrivateTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConversationSetPrivateTips.Merge(dst, src) +} +func (m *ConversationSetPrivateTips) XXX_Size() int { + return xxx_messageInfo_ConversationSetPrivateTips.Size(m) +} +func (m *ConversationSetPrivateTips) XXX_DiscardUnknown() { + xxx_messageInfo_ConversationSetPrivateTips.DiscardUnknown(m) +} + +var xxx_messageInfo_ConversationSetPrivateTips proto.InternalMessageInfo + +func (m *ConversationSetPrivateTips) GetRecvID() string { + if m != nil { + return m.RecvID + } + return "" +} + +func (m *ConversationSetPrivateTips) GetSendID() string { + if m != nil { + return m.SendID + } + return "" +} + +func (m *ConversationSetPrivateTips) GetIsPrivate() bool { + if m != nil { + return m.IsPrivate + } + return false +} + +// //////////////////message/////////////////////// +type DeleteMessageTips struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } +func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } +func (*DeleteMessageTips) ProtoMessage() {} +func (*DeleteMessageTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{51} +} +func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) +} +func (m *DeleteMessageTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteMessageTips.Marshal(b, m, deterministic) +} +func (dst *DeleteMessageTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteMessageTips.Merge(dst, src) +} +func (m *DeleteMessageTips) XXX_Size() int { + return xxx_messageInfo_DeleteMessageTips.Size(m) +} +func (m *DeleteMessageTips) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteMessageTips.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteMessageTips proto.InternalMessageInfo + +func (m *DeleteMessageTips) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *DeleteMessageTips) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *DeleteMessageTips) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + +// /cms +type RequestPagination struct { + PageNumber int32 `protobuf:"varint,1,opt,name=pageNumber" json:"pageNumber,omitempty"` + ShowNumber int32 `protobuf:"varint,2,opt,name=showNumber" json:"showNumber,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RequestPagination) Reset() { *m = RequestPagination{} } +func (m *RequestPagination) String() string { return proto.CompactTextString(m) } +func (*RequestPagination) ProtoMessage() {} +func (*RequestPagination) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{52} +} +func (m *RequestPagination) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RequestPagination.Unmarshal(m, b) +} +func (m *RequestPagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RequestPagination.Marshal(b, m, deterministic) +} +func (dst *RequestPagination) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestPagination.Merge(dst, src) +} +func (m *RequestPagination) XXX_Size() int { + return xxx_messageInfo_RequestPagination.Size(m) +} +func (m *RequestPagination) XXX_DiscardUnknown() { + xxx_messageInfo_RequestPagination.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestPagination proto.InternalMessageInfo + +func (m *RequestPagination) GetPageNumber() int32 { + if m != nil { + return m.PageNumber + } + return 0 +} + +func (m *RequestPagination) GetShowNumber() int32 { + if m != nil { + return m.ShowNumber + } + return 0 +} + +type ResponsePagination struct { + CurrentPage int32 `protobuf:"varint,5,opt,name=CurrentPage" json:"CurrentPage,omitempty"` + ShowNumber int32 `protobuf:"varint,6,opt,name=ShowNumber" json:"ShowNumber,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } +func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } +func (*ResponsePagination) ProtoMessage() {} +func (*ResponsePagination) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{53} +} +func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) +} +func (m *ResponsePagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResponsePagination.Marshal(b, m, deterministic) +} +func (dst *ResponsePagination) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponsePagination.Merge(dst, src) +} +func (m *ResponsePagination) XXX_Size() int { + return xxx_messageInfo_ResponsePagination.Size(m) +} +func (m *ResponsePagination) XXX_DiscardUnknown() { + xxx_messageInfo_ResponsePagination.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponsePagination proto.InternalMessageInfo + +func (m *ResponsePagination) GetCurrentPage() int32 { + if m != nil { + return m.CurrentPage + } + return 0 +} + +func (m *ResponsePagination) GetShowNumber() int32 { + if m != nil { + return m.ShowNumber + } + return 0 +} + +// /////////////////signal////////////// +type SignalReq struct { + // Types that are valid to be assigned to Payload: + // *SignalReq_Invite + // *SignalReq_InviteInGroup + // *SignalReq_Cancel + // *SignalReq_Accept + // *SignalReq_HungUp + // *SignalReq_Reject + Payload isSignalReq_Payload `protobuf_oneof:"payload"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalReq) Reset() { *m = SignalReq{} } +func (m *SignalReq) String() string { return proto.CompactTextString(m) } +func (*SignalReq) ProtoMessage() {} +func (*SignalReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{54} +} +func (m *SignalReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalReq.Unmarshal(m, b) +} +func (m *SignalReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalReq.Marshal(b, m, deterministic) +} +func (dst *SignalReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalReq.Merge(dst, src) +} +func (m *SignalReq) XXX_Size() int { + return xxx_messageInfo_SignalReq.Size(m) +} +func (m *SignalReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalReq proto.InternalMessageInfo + +type isSignalReq_Payload interface { + isSignalReq_Payload() +} + +type SignalReq_Invite struct { + Invite *SignalInviteReq `protobuf:"bytes,1,opt,name=invite,oneof"` +} +type SignalReq_InviteInGroup struct { + InviteInGroup *SignalInviteInGroupReq `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` +} +type SignalReq_Cancel struct { + Cancel *SignalCancelReq `protobuf:"bytes,3,opt,name=cancel,oneof"` +} +type SignalReq_Accept struct { + Accept *SignalAcceptReq `protobuf:"bytes,4,opt,name=accept,oneof"` +} +type SignalReq_HungUp struct { + HungUp *SignalHungUpReq `protobuf:"bytes,5,opt,name=hungUp,oneof"` +} +type SignalReq_Reject struct { + Reject *SignalRejectReq `protobuf:"bytes,6,opt,name=reject,oneof"` +} + +func (*SignalReq_Invite) isSignalReq_Payload() {} +func (*SignalReq_InviteInGroup) isSignalReq_Payload() {} +func (*SignalReq_Cancel) isSignalReq_Payload() {} +func (*SignalReq_Accept) isSignalReq_Payload() {} +func (*SignalReq_HungUp) isSignalReq_Payload() {} +func (*SignalReq_Reject) isSignalReq_Payload() {} + +func (m *SignalReq) GetPayload() isSignalReq_Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *SignalReq) GetInvite() *SignalInviteReq { + if x, ok := m.GetPayload().(*SignalReq_Invite); ok { + return x.Invite + } + return nil +} + +func (m *SignalReq) GetInviteInGroup() *SignalInviteInGroupReq { + if x, ok := m.GetPayload().(*SignalReq_InviteInGroup); ok { + return x.InviteInGroup + } + return nil +} + +func (m *SignalReq) GetCancel() *SignalCancelReq { + if x, ok := m.GetPayload().(*SignalReq_Cancel); ok { + return x.Cancel + } + return nil +} + +func (m *SignalReq) GetAccept() *SignalAcceptReq { + if x, ok := m.GetPayload().(*SignalReq_Accept); ok { + return x.Accept + } + return nil +} + +func (m *SignalReq) GetHungUp() *SignalHungUpReq { + if x, ok := m.GetPayload().(*SignalReq_HungUp); ok { + return x.HungUp + } + return nil +} + +func (m *SignalReq) GetReject() *SignalRejectReq { + if x, ok := m.GetPayload().(*SignalReq_Reject); ok { + return x.Reject + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SignalReq) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SignalReq_OneofMarshaler, _SignalReq_OneofUnmarshaler, _SignalReq_OneofSizer, []interface{}{ + (*SignalReq_Invite)(nil), + (*SignalReq_InviteInGroup)(nil), + (*SignalReq_Cancel)(nil), + (*SignalReq_Accept)(nil), + (*SignalReq_HungUp)(nil), + (*SignalReq_Reject)(nil), + } +} + +func _SignalReq_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SignalReq) + // payload + switch x := m.Payload.(type) { + case *SignalReq_Invite: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Invite); err != nil { + return err + } + case *SignalReq_InviteInGroup: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InviteInGroup); err != nil { + return err + } + case *SignalReq_Cancel: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Cancel); err != nil { + return err + } + case *SignalReq_Accept: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Accept); err != nil { + return err + } + case *SignalReq_HungUp: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HungUp); err != nil { + return err + } + case *SignalReq_Reject: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Reject); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SignalReq.Payload has unexpected type %T", x) + } + return nil +} + +func _SignalReq_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SignalReq) + switch tag { + case 1: // payload.invite + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Invite{msg} + return true, err + case 2: // payload.inviteInGroup + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteInGroupReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_InviteInGroup{msg} + return true, err + case 3: // payload.cancel + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalCancelReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Cancel{msg} + return true, err + case 4: // payload.accept + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalAcceptReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Accept{msg} + return true, err + case 5: // payload.hungUp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalHungUpReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_HungUp{msg} + return true, err + case 6: // payload.reject + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalRejectReq) + err := b.DecodeMessage(msg) + m.Payload = &SignalReq_Reject{msg} + return true, err + default: + return false, nil + } +} + +func _SignalReq_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SignalReq) + // payload + switch x := m.Payload.(type) { + case *SignalReq_Invite: + s := proto.Size(x.Invite) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_InviteInGroup: + s := proto.Size(x.InviteInGroup) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_Cancel: + s := proto.Size(x.Cancel) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_Accept: + s := proto.Size(x.Accept) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_HungUp: + s := proto.Size(x.HungUp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalReq_Reject: + s := proto.Size(x.Reject) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type SignalResp struct { + // Types that are valid to be assigned to Payload: + // *SignalResp_Invite + // *SignalResp_InviteInGroup + // *SignalResp_Cancel + // *SignalResp_Accept + // *SignalResp_HungUp + // *SignalResp_Reject + Payload isSignalResp_Payload `protobuf_oneof:"payload"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalResp) Reset() { *m = SignalResp{} } +func (m *SignalResp) String() string { return proto.CompactTextString(m) } +func (*SignalResp) ProtoMessage() {} +func (*SignalResp) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{55} +} +func (m *SignalResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalResp.Unmarshal(m, b) +} +func (m *SignalResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalResp.Marshal(b, m, deterministic) +} +func (dst *SignalResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalResp.Merge(dst, src) +} +func (m *SignalResp) XXX_Size() int { + return xxx_messageInfo_SignalResp.Size(m) +} +func (m *SignalResp) XXX_DiscardUnknown() { + xxx_messageInfo_SignalResp.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalResp proto.InternalMessageInfo + +type isSignalResp_Payload interface { + isSignalResp_Payload() +} + +type SignalResp_Invite struct { + Invite *SignalInviteReply `protobuf:"bytes,1,opt,name=invite,oneof"` +} +type SignalResp_InviteInGroup struct { + InviteInGroup *SignalInviteInGroupReply `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` +} +type SignalResp_Cancel struct { + Cancel *SignalCancelReply `protobuf:"bytes,3,opt,name=cancel,oneof"` +} +type SignalResp_Accept struct { + Accept *SignalAcceptReply `protobuf:"bytes,4,opt,name=accept,oneof"` +} +type SignalResp_HungUp struct { + HungUp *SignalHungUpReply `protobuf:"bytes,5,opt,name=hungUp,oneof"` +} +type SignalResp_Reject struct { + Reject *SignalRejectReply `protobuf:"bytes,6,opt,name=reject,oneof"` +} + +func (*SignalResp_Invite) isSignalResp_Payload() {} +func (*SignalResp_InviteInGroup) isSignalResp_Payload() {} +func (*SignalResp_Cancel) isSignalResp_Payload() {} +func (*SignalResp_Accept) isSignalResp_Payload() {} +func (*SignalResp_HungUp) isSignalResp_Payload() {} +func (*SignalResp_Reject) isSignalResp_Payload() {} + +func (m *SignalResp) GetPayload() isSignalResp_Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *SignalResp) GetInvite() *SignalInviteReply { + if x, ok := m.GetPayload().(*SignalResp_Invite); ok { + return x.Invite + } + return nil +} + +func (m *SignalResp) GetInviteInGroup() *SignalInviteInGroupReply { + if x, ok := m.GetPayload().(*SignalResp_InviteInGroup); ok { + return x.InviteInGroup + } + return nil +} + +func (m *SignalResp) GetCancel() *SignalCancelReply { + if x, ok := m.GetPayload().(*SignalResp_Cancel); ok { + return x.Cancel + } + return nil +} + +func (m *SignalResp) GetAccept() *SignalAcceptReply { + if x, ok := m.GetPayload().(*SignalResp_Accept); ok { + return x.Accept + } + return nil +} + +func (m *SignalResp) GetHungUp() *SignalHungUpReply { + if x, ok := m.GetPayload().(*SignalResp_HungUp); ok { + return x.HungUp + } + return nil +} + +func (m *SignalResp) GetReject() *SignalRejectReply { + if x, ok := m.GetPayload().(*SignalResp_Reject); ok { + return x.Reject + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SignalResp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SignalResp_OneofMarshaler, _SignalResp_OneofUnmarshaler, _SignalResp_OneofSizer, []interface{}{ + (*SignalResp_Invite)(nil), + (*SignalResp_InviteInGroup)(nil), + (*SignalResp_Cancel)(nil), + (*SignalResp_Accept)(nil), + (*SignalResp_HungUp)(nil), + (*SignalResp_Reject)(nil), + } +} + +func _SignalResp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SignalResp) + // payload + switch x := m.Payload.(type) { + case *SignalResp_Invite: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Invite); err != nil { + return err + } + case *SignalResp_InviteInGroup: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InviteInGroup); err != nil { + return err + } + case *SignalResp_Cancel: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Cancel); err != nil { + return err + } + case *SignalResp_Accept: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Accept); err != nil { + return err + } + case *SignalResp_HungUp: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HungUp); err != nil { + return err + } + case *SignalResp_Reject: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Reject); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SignalResp.Payload has unexpected type %T", x) + } + return nil +} + +func _SignalResp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SignalResp) + switch tag { + case 1: // payload.invite + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Invite{msg} + return true, err + case 2: // payload.inviteInGroup + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalInviteInGroupReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_InviteInGroup{msg} + return true, err + case 3: // payload.cancel + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalCancelReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Cancel{msg} + return true, err + case 4: // payload.accept + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalAcceptReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Accept{msg} + return true, err + case 5: // payload.hungUp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalHungUpReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_HungUp{msg} + return true, err + case 6: // payload.reject + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SignalRejectReply) + err := b.DecodeMessage(msg) + m.Payload = &SignalResp_Reject{msg} + return true, err + default: + return false, nil + } +} + +func _SignalResp_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SignalResp) + // payload + switch x := m.Payload.(type) { + case *SignalResp_Invite: + s := proto.Size(x.Invite) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_InviteInGroup: + s := proto.Size(x.InviteInGroup) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_Cancel: + s := proto.Size(x.Cancel) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_Accept: + s := proto.Size(x.Accept) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_HungUp: + s := proto.Size(x.HungUp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *SignalResp_Reject: + s := proto.Size(x.Reject) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type InvitationInfo struct { + InviterUserID string `protobuf:"bytes,1,opt,name=inviterUserID" json:"inviterUserID,omitempty"` + InviteeUserIDList []string `protobuf:"bytes,2,rep,name=inviteeUserIDList" json:"inviteeUserIDList,omitempty"` + CustomData string `protobuf:"bytes,3,opt,name=customData" json:"customData,omitempty"` + GroupID string `protobuf:"bytes,4,opt,name=groupID" json:"groupID,omitempty"` + RoomID string `protobuf:"bytes,5,opt,name=roomID" json:"roomID,omitempty"` + Timeout int32 `protobuf:"varint,6,opt,name=timeout" json:"timeout,omitempty"` + MediaType string `protobuf:"bytes,7,opt,name=mediaType" json:"mediaType,omitempty"` + PlatformID int32 `protobuf:"varint,8,opt,name=platformID" json:"platformID,omitempty"` + SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` + InitiateTime int32 `protobuf:"varint,10,opt,name=initiateTime" json:"initiateTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } +func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } +func (*InvitationInfo) ProtoMessage() {} +func (*InvitationInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{56} +} +func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) +} +func (m *InvitationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_InvitationInfo.Marshal(b, m, deterministic) +} +func (dst *InvitationInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_InvitationInfo.Merge(dst, src) +} +func (m *InvitationInfo) XXX_Size() int { + return xxx_messageInfo_InvitationInfo.Size(m) +} +func (m *InvitationInfo) XXX_DiscardUnknown() { + xxx_messageInfo_InvitationInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_InvitationInfo proto.InternalMessageInfo + +func (m *InvitationInfo) GetInviterUserID() string { + if m != nil { + return m.InviterUserID + } + return "" +} + +func (m *InvitationInfo) GetInviteeUserIDList() []string { + if m != nil { + return m.InviteeUserIDList + } + return nil +} + +func (m *InvitationInfo) GetCustomData() string { + if m != nil { + return m.CustomData + } + return "" +} + +func (m *InvitationInfo) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *InvitationInfo) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *InvitationInfo) GetTimeout() int32 { + if m != nil { + return m.Timeout + } + return 0 +} + +func (m *InvitationInfo) GetMediaType() string { + if m != nil { + return m.MediaType + } + return "" +} + +func (m *InvitationInfo) GetPlatformID() int32 { + if m != nil { + return m.PlatformID + } + return 0 +} + +func (m *InvitationInfo) GetSessionType() int32 { + if m != nil { + return m.SessionType + } + return 0 +} + +func (m *InvitationInfo) GetInitiateTime() int32 { + if m != nil { + return m.InitiateTime + } + return 0 +} + +type ParticipantMetaData struct { + GroupInfo *GroupInfo `protobuf:"bytes,1,opt,name=groupInfo" json:"groupInfo,omitempty"` + GroupMemberInfo *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=groupMemberInfo" json:"groupMemberInfo,omitempty"` + UserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=userInfo" json:"userInfo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } +func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } +func (*ParticipantMetaData) ProtoMessage() {} +func (*ParticipantMetaData) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{57} +} +func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) +} +func (m *ParticipantMetaData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ParticipantMetaData.Marshal(b, m, deterministic) +} +func (dst *ParticipantMetaData) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParticipantMetaData.Merge(dst, src) +} +func (m *ParticipantMetaData) XXX_Size() int { + return xxx_messageInfo_ParticipantMetaData.Size(m) +} +func (m *ParticipantMetaData) XXX_DiscardUnknown() { + xxx_messageInfo_ParticipantMetaData.DiscardUnknown(m) +} + +var xxx_messageInfo_ParticipantMetaData proto.InternalMessageInfo + +func (m *ParticipantMetaData) GetGroupInfo() *GroupInfo { + if m != nil { + return m.GroupInfo + } + return nil +} + +func (m *ParticipantMetaData) GetGroupMemberInfo() *GroupMemberFullInfo { + if m != nil { + return m.GroupMemberInfo + } + return nil +} + +func (m *ParticipantMetaData) GetUserInfo() *PublicUserInfo { + if m != nil { + return m.UserInfo + } + return nil +} + +type SignalInviteReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } +func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } +func (*SignalInviteReq) ProtoMessage() {} +func (*SignalInviteReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{58} +} +func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) +} +func (m *SignalInviteReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteReq.Marshal(b, m, deterministic) +} +func (dst *SignalInviteReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteReq.Merge(dst, src) +} +func (m *SignalInviteReq) XXX_Size() int { + return xxx_messageInfo_SignalInviteReq.Size(m) +} +func (m *SignalInviteReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteReq proto.InternalMessageInfo + +func (m *SignalInviteReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalInviteReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalInviteReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalInviteReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +type SignalInviteReply struct { + Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` + RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` + LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } +func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } +func (*SignalInviteReply) ProtoMessage() {} +func (*SignalInviteReply) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{59} +} +func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) +} +func (m *SignalInviteReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteReply.Marshal(b, m, deterministic) +} +func (dst *SignalInviteReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteReply.Merge(dst, src) +} +func (m *SignalInviteReply) XXX_Size() int { + return xxx_messageInfo_SignalInviteReply.Size(m) +} +func (m *SignalInviteReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteReply proto.InternalMessageInfo + +func (m *SignalInviteReply) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +func (m *SignalInviteReply) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *SignalInviteReply) GetLiveURL() string { + if m != nil { + return m.LiveURL + } + return "" +} + +type SignalInviteInGroupReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} } +func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } +func (*SignalInviteInGroupReq) ProtoMessage() {} +func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{60} +} +func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) +} +func (m *SignalInviteInGroupReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteInGroupReq.Marshal(b, m, deterministic) +} +func (dst *SignalInviteInGroupReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteInGroupReq.Merge(dst, src) +} +func (m *SignalInviteInGroupReq) XXX_Size() int { + return xxx_messageInfo_SignalInviteInGroupReq.Size(m) +} +func (m *SignalInviteInGroupReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteInGroupReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteInGroupReq proto.InternalMessageInfo + +func (m *SignalInviteInGroupReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalInviteInGroupReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalInviteInGroupReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalInviteInGroupReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +type SignalInviteInGroupReply struct { + Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` + RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` + LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupReply{} } +func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } +func (*SignalInviteInGroupReply) ProtoMessage() {} +func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{61} +} +func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) +} +func (m *SignalInviteInGroupReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalInviteInGroupReply.Marshal(b, m, deterministic) +} +func (dst *SignalInviteInGroupReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalInviteInGroupReply.Merge(dst, src) +} +func (m *SignalInviteInGroupReply) XXX_Size() int { + return xxx_messageInfo_SignalInviteInGroupReply.Size(m) +} +func (m *SignalInviteInGroupReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalInviteInGroupReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalInviteInGroupReply proto.InternalMessageInfo + +func (m *SignalInviteInGroupReply) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +func (m *SignalInviteInGroupReply) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *SignalInviteInGroupReply) GetLiveURL() string { + if m != nil { + return m.LiveURL + } + return "" +} + +type SignalCancelReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } +func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } +func (*SignalCancelReq) ProtoMessage() {} +func (*SignalCancelReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{62} +} +func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) +} +func (m *SignalCancelReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalCancelReq.Marshal(b, m, deterministic) +} +func (dst *SignalCancelReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalCancelReq.Merge(dst, src) +} +func (m *SignalCancelReq) XXX_Size() int { + return xxx_messageInfo_SignalCancelReq.Size(m) +} +func (m *SignalCancelReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalCancelReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalCancelReq proto.InternalMessageInfo + +func (m *SignalCancelReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalCancelReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalCancelReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalCancelReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +type SignalCancelReply struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } +func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } +func (*SignalCancelReply) ProtoMessage() {} +func (*SignalCancelReply) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{63} +} +func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) +} +func (m *SignalCancelReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalCancelReply.Marshal(b, m, deterministic) +} +func (dst *SignalCancelReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalCancelReply.Merge(dst, src) +} +func (m *SignalCancelReply) XXX_Size() int { + return xxx_messageInfo_SignalCancelReply.Size(m) +} +func (m *SignalCancelReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalCancelReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalCancelReply proto.InternalMessageInfo + +type SignalAcceptReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } +func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } +func (*SignalAcceptReq) ProtoMessage() {} +func (*SignalAcceptReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{64} +} +func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) +} +func (m *SignalAcceptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalAcceptReq.Marshal(b, m, deterministic) +} +func (dst *SignalAcceptReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalAcceptReq.Merge(dst, src) +} +func (m *SignalAcceptReq) XXX_Size() int { + return xxx_messageInfo_SignalAcceptReq.Size(m) +} +func (m *SignalAcceptReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalAcceptReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalAcceptReq proto.InternalMessageInfo + +func (m *SignalAcceptReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalAcceptReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalAcceptReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalAcceptReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +func (m *SignalAcceptReq) GetOpUserPlatformID() int32 { + if m != nil { + return m.OpUserPlatformID + } + return 0 +} + +type SignalAcceptReply struct { + Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` + RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` + LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } +func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } +func (*SignalAcceptReply) ProtoMessage() {} +func (*SignalAcceptReply) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{65} +} +func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) +} +func (m *SignalAcceptReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalAcceptReply.Marshal(b, m, deterministic) +} +func (dst *SignalAcceptReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalAcceptReply.Merge(dst, src) +} +func (m *SignalAcceptReply) XXX_Size() int { + return xxx_messageInfo_SignalAcceptReply.Size(m) +} +func (m *SignalAcceptReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalAcceptReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalAcceptReply proto.InternalMessageInfo + +func (m *SignalAcceptReply) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +func (m *SignalAcceptReply) GetRoomID() string { + if m != nil { + return m.RoomID + } + return "" +} + +func (m *SignalAcceptReply) GetLiveURL() string { + if m != nil { + return m.LiveURL + } + return "" +} + +type SignalHungUpReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } +func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } +func (*SignalHungUpReq) ProtoMessage() {} +func (*SignalHungUpReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{66} +} +func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) +} +func (m *SignalHungUpReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalHungUpReq.Marshal(b, m, deterministic) +} +func (dst *SignalHungUpReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalHungUpReq.Merge(dst, src) +} +func (m *SignalHungUpReq) XXX_Size() int { + return xxx_messageInfo_SignalHungUpReq.Size(m) +} +func (m *SignalHungUpReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalHungUpReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalHungUpReq proto.InternalMessageInfo + +func (m *SignalHungUpReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalHungUpReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalHungUpReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +type SignalHungUpReply struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } +func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } +func (*SignalHungUpReply) ProtoMessage() {} +func (*SignalHungUpReply) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{67} +} +func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) +} +func (m *SignalHungUpReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalHungUpReply.Marshal(b, m, deterministic) +} +func (dst *SignalHungUpReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalHungUpReply.Merge(dst, src) +} +func (m *SignalHungUpReply) XXX_Size() int { + return xxx_messageInfo_SignalHungUpReply.Size(m) +} +func (m *SignalHungUpReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalHungUpReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalHungUpReply proto.InternalMessageInfo + +type SignalRejectReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` + OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` + Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } +func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } +func (*SignalRejectReq) ProtoMessage() {} +func (*SignalRejectReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{68} +} +func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) +} +func (m *SignalRejectReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalRejectReq.Marshal(b, m, deterministic) +} +func (dst *SignalRejectReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalRejectReq.Merge(dst, src) +} +func (m *SignalRejectReq) XXX_Size() int { + return xxx_messageInfo_SignalRejectReq.Size(m) +} +func (m *SignalRejectReq) XXX_DiscardUnknown() { + xxx_messageInfo_SignalRejectReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalRejectReq proto.InternalMessageInfo + +func (m *SignalRejectReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SignalRejectReq) GetInvitation() *InvitationInfo { + if m != nil { + return m.Invitation + } + return nil +} + +func (m *SignalRejectReq) GetOfflinePushInfo() *OfflinePushInfo { + if m != nil { + return m.OfflinePushInfo + } + return nil +} + +func (m *SignalRejectReq) GetParticipant() *ParticipantMetaData { + if m != nil { + return m.Participant + } + return nil +} + +func (m *SignalRejectReq) GetOpUserPlatformID() int32 { + if m != nil { + return m.OpUserPlatformID + } + return 0 +} + +type SignalRejectReply struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } +func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } +func (*SignalRejectReply) ProtoMessage() {} +func (*SignalRejectReply) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{69} +} +func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) +} +func (m *SignalRejectReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SignalRejectReply.Marshal(b, m, deterministic) +} +func (dst *SignalRejectReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignalRejectReply.Merge(dst, src) +} +func (m *SignalRejectReply) XXX_Size() int { + return xxx_messageInfo_SignalRejectReply.Size(m) +} +func (m *SignalRejectReply) XXX_DiscardUnknown() { + xxx_messageInfo_SignalRejectReply.DiscardUnknown(m) +} + +var xxx_messageInfo_SignalRejectReply proto.InternalMessageInfo + +type DelMsgListReq struct { + OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } +func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } +func (*DelMsgListReq) ProtoMessage() {} +func (*DelMsgListReq) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{70} +} +func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) +} +func (m *DelMsgListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DelMsgListReq.Marshal(b, m, deterministic) +} +func (dst *DelMsgListReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_DelMsgListReq.Merge(dst, src) +} +func (m *DelMsgListReq) XXX_Size() int { + return xxx_messageInfo_DelMsgListReq.Size(m) +} +func (m *DelMsgListReq) XXX_DiscardUnknown() { + xxx_messageInfo_DelMsgListReq.DiscardUnknown(m) +} + +var xxx_messageInfo_DelMsgListReq proto.InternalMessageInfo + +func (m *DelMsgListReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *DelMsgListReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *DelMsgListReq) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + +func (m *DelMsgListReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type DelMsgListResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } +func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } +func (*DelMsgListResp) ProtoMessage() {} +func (*DelMsgListResp) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_d27672f8ab95a331, []int{71} +} +func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) +} +func (m *DelMsgListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DelMsgListResp.Marshal(b, m, deterministic) +} +func (dst *DelMsgListResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_DelMsgListResp.Merge(dst, src) +} +func (m *DelMsgListResp) XXX_Size() int { + return xxx_messageInfo_DelMsgListResp.Size(m) +} +func (m *DelMsgListResp) XXX_DiscardUnknown() { + xxx_messageInfo_DelMsgListResp.DiscardUnknown(m) +} + +var xxx_messageInfo_DelMsgListResp proto.InternalMessageInfo + +func (m *DelMsgListResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *DelMsgListResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func init() { + proto.RegisterType((*GroupInfo)(nil), "server_api_params.GroupInfo") + proto.RegisterType((*GroupMemberFullInfo)(nil), "server_api_params.GroupMemberFullInfo") + proto.RegisterType((*PublicUserInfo)(nil), "server_api_params.PublicUserInfo") + proto.RegisterType((*UserInfo)(nil), "server_api_params.UserInfo") + proto.RegisterType((*FriendInfo)(nil), "server_api_params.FriendInfo") + proto.RegisterType((*BlackInfo)(nil), "server_api_params.BlackInfo") + proto.RegisterType((*GroupRequest)(nil), "server_api_params.GroupRequest") + proto.RegisterType((*FriendRequest)(nil), "server_api_params.FriendRequest") + proto.RegisterType((*Department)(nil), "server_api_params.Department") + proto.RegisterType((*OrganizationUser)(nil), "server_api_params.OrganizationUser") + proto.RegisterType((*DepartmentMember)(nil), "server_api_params.DepartmentMember") + proto.RegisterType((*UserDepartmentMember)(nil), "server_api_params.UserDepartmentMember") + proto.RegisterType((*UserInDepartment)(nil), "server_api_params.UserInDepartment") + proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") + proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") + proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") + proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") + proto.RegisterType((*UserSendMsgResp)(nil), "server_api_params.UserSendMsgResp") + proto.RegisterType((*MsgData)(nil), "server_api_params.MsgData") + proto.RegisterMapType((map[string]bool)(nil), "server_api_params.MsgData.OptionsEntry") + proto.RegisterType((*OfflinePushInfo)(nil), "server_api_params.OfflinePushInfo") + proto.RegisterType((*TipsComm)(nil), "server_api_params.TipsComm") + proto.RegisterType((*GroupCreatedTips)(nil), "server_api_params.GroupCreatedTips") + proto.RegisterType((*GroupInfoSetTips)(nil), "server_api_params.GroupInfoSetTips") + proto.RegisterType((*JoinGroupApplicationTips)(nil), "server_api_params.JoinGroupApplicationTips") + proto.RegisterType((*MemberQuitTips)(nil), "server_api_params.MemberQuitTips") + proto.RegisterType((*GroupApplicationAcceptedTips)(nil), "server_api_params.GroupApplicationAcceptedTips") + proto.RegisterType((*GroupApplicationRejectedTips)(nil), "server_api_params.GroupApplicationRejectedTips") + proto.RegisterType((*GroupOwnerTransferredTips)(nil), "server_api_params.GroupOwnerTransferredTips") + proto.RegisterType((*MemberKickedTips)(nil), "server_api_params.MemberKickedTips") + proto.RegisterType((*MemberInvitedTips)(nil), "server_api_params.MemberInvitedTips") + proto.RegisterType((*MemberEnterTips)(nil), "server_api_params.MemberEnterTips") + proto.RegisterType((*GroupDismissedTips)(nil), "server_api_params.GroupDismissedTips") + proto.RegisterType((*GroupMemberMutedTips)(nil), "server_api_params.GroupMemberMutedTips") + proto.RegisterType((*GroupMemberCancelMutedTips)(nil), "server_api_params.GroupMemberCancelMutedTips") + proto.RegisterType((*GroupMutedTips)(nil), "server_api_params.GroupMutedTips") + proto.RegisterType((*GroupCancelMutedTips)(nil), "server_api_params.GroupCancelMutedTips") + proto.RegisterType((*GroupMemberInfoSetTips)(nil), "server_api_params.GroupMemberInfoSetTips") + proto.RegisterType((*OrganizationChangedTips)(nil), "server_api_params.OrganizationChangedTips") + proto.RegisterType((*FriendApplication)(nil), "server_api_params.FriendApplication") + proto.RegisterType((*FromToUserID)(nil), "server_api_params.FromToUserID") + proto.RegisterType((*FriendApplicationTips)(nil), "server_api_params.FriendApplicationTips") + proto.RegisterType((*FriendApplicationApprovedTips)(nil), "server_api_params.FriendApplicationApprovedTips") + proto.RegisterType((*FriendApplicationRejectedTips)(nil), "server_api_params.FriendApplicationRejectedTips") + proto.RegisterType((*FriendAddedTips)(nil), "server_api_params.FriendAddedTips") + proto.RegisterType((*FriendDeletedTips)(nil), "server_api_params.FriendDeletedTips") + proto.RegisterType((*BlackAddedTips)(nil), "server_api_params.BlackAddedTips") + proto.RegisterType((*BlackDeletedTips)(nil), "server_api_params.BlackDeletedTips") + proto.RegisterType((*FriendInfoChangedTips)(nil), "server_api_params.FriendInfoChangedTips") + proto.RegisterType((*UserInfoUpdatedTips)(nil), "server_api_params.UserInfoUpdatedTips") + proto.RegisterType((*ConversationUpdateTips)(nil), "server_api_params.ConversationUpdateTips") + proto.RegisterType((*ConversationSetPrivateTips)(nil), "server_api_params.ConversationSetPrivateTips") + proto.RegisterType((*DeleteMessageTips)(nil), "server_api_params.DeleteMessageTips") + proto.RegisterType((*RequestPagination)(nil), "server_api_params.RequestPagination") + proto.RegisterType((*ResponsePagination)(nil), "server_api_params.ResponsePagination") + proto.RegisterType((*SignalReq)(nil), "server_api_params.SignalReq") + proto.RegisterType((*SignalResp)(nil), "server_api_params.SignalResp") + proto.RegisterType((*InvitationInfo)(nil), "server_api_params.InvitationInfo") + proto.RegisterType((*ParticipantMetaData)(nil), "server_api_params.ParticipantMetaData") + proto.RegisterType((*SignalInviteReq)(nil), "server_api_params.SignalInviteReq") + proto.RegisterType((*SignalInviteReply)(nil), "server_api_params.SignalInviteReply") + proto.RegisterType((*SignalInviteInGroupReq)(nil), "server_api_params.SignalInviteInGroupReq") + proto.RegisterType((*SignalInviteInGroupReply)(nil), "server_api_params.SignalInviteInGroupReply") + proto.RegisterType((*SignalCancelReq)(nil), "server_api_params.SignalCancelReq") + proto.RegisterType((*SignalCancelReply)(nil), "server_api_params.SignalCancelReply") + proto.RegisterType((*SignalAcceptReq)(nil), "server_api_params.SignalAcceptReq") + proto.RegisterType((*SignalAcceptReply)(nil), "server_api_params.SignalAcceptReply") + proto.RegisterType((*SignalHungUpReq)(nil), "server_api_params.SignalHungUpReq") + proto.RegisterType((*SignalHungUpReply)(nil), "server_api_params.SignalHungUpReply") + proto.RegisterType((*SignalRejectReq)(nil), "server_api_params.SignalRejectReq") + proto.RegisterType((*SignalRejectReply)(nil), "server_api_params.SignalRejectReply") + proto.RegisterType((*DelMsgListReq)(nil), "server_api_params.DelMsgListReq") + proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") +} + +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_d27672f8ab95a331) } + +var fileDescriptor_ws_d27672f8ab95a331 = []byte{ + // 3071 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x8b, 0x24, 0x59, + 0xf1, 0xbf, 0xcc, 0xea, 0xaa, 0xee, 0x8a, 0xea, 0xcf, 0x9c, 0xf9, 0xf5, 0x96, 0xed, 0xec, 0xd8, + 0xa6, 0xcd, 0xba, 0xae, 0x3a, 0x2b, 0xbb, 0x08, 0xba, 0xab, 0x23, 0xd3, 0xdd, 0xf3, 0xb5, 0x4e, + 0xf7, 0xf4, 0x66, 0xcd, 0xb8, 0xa2, 0xc2, 0x92, 0x5d, 0xf9, 0xba, 0x3a, 0xb7, 0xb3, 0xf2, 0x65, + 0xe5, 0x47, 0xcf, 0x8c, 0x08, 0x82, 0x82, 0x78, 0xf3, 0xa4, 0x07, 0x2f, 0x82, 0x17, 0x51, 0x96, + 0x45, 0x44, 0xc1, 0x83, 0x88, 0x07, 0xff, 0x01, 0xc1, 0x8b, 0x78, 0x11, 0xcf, 0x5e, 0x3d, 0x08, + 0x82, 0xf2, 0x22, 0x5e, 0x66, 0xbe, 0x97, 0x59, 0xd5, 0x5d, 0xd3, 0x34, 0x3b, 0xb3, 0x8c, 0xb7, + 0x8a, 0xc8, 0x17, 0xf1, 0xe2, 0x45, 0xc4, 0x8b, 0x88, 0xf7, 0xe2, 0x15, 0x2c, 0x25, 0xde, 0xd1, + 0xdb, 0x0f, 0x92, 0x97, 0x1f, 0x24, 0x57, 0xa2, 0x98, 0xa7, 0xdc, 0x5a, 0x49, 0x58, 0x7c, 0xcc, + 0xe2, 0xb7, 0xdd, 0xc8, 0x7f, 0x3b, 0x72, 0x63, 0x77, 0x98, 0xd8, 0xff, 0x34, 0xa1, 0x7d, 0x33, + 0xe6, 0x59, 0x74, 0x3b, 0x3c, 0xe0, 0x56, 0x17, 0x66, 0x07, 0x08, 0x6c, 0x77, 0x8d, 0x75, 0xe3, + 0xc5, 0xb6, 0x93, 0x83, 0xd6, 0x25, 0x68, 0xe3, 0xcf, 0x5d, 0x77, 0xc8, 0xba, 0x26, 0x7e, 0x2b, + 0x11, 0x96, 0x0d, 0xf3, 0x21, 0x4f, 0xfd, 0x03, 0xbf, 0xef, 0xa6, 0x3e, 0x0f, 0xbb, 0x0d, 0x1c, + 0xa0, 0xe1, 0xc4, 0x18, 0x3f, 0x4c, 0x63, 0xee, 0x65, 0x7d, 0x1c, 0x33, 0x43, 0x63, 0x54, 0x9c, + 0x98, 0xff, 0xc0, 0xed, 0xb3, 0xfb, 0xce, 0x9d, 0x6e, 0x93, 0xe6, 0x97, 0xa0, 0xb5, 0x0e, 0x1d, + 0xfe, 0x20, 0x64, 0xf1, 0xfd, 0x84, 0xc5, 0xb7, 0xb7, 0xbb, 0x2d, 0xfc, 0xaa, 0xa2, 0xac, 0xcb, + 0x00, 0xfd, 0x98, 0xb9, 0x29, 0xbb, 0xe7, 0x0f, 0x59, 0x77, 0x76, 0xdd, 0x78, 0x71, 0xc1, 0x51, + 0x30, 0x82, 0xc3, 0x90, 0x0d, 0xf7, 0x59, 0xbc, 0xc5, 0xb3, 0x30, 0xed, 0xce, 0xe1, 0x00, 0x15, + 0x65, 0x2d, 0x82, 0xc9, 0x1e, 0x76, 0xdb, 0xc8, 0xda, 0x64, 0x0f, 0xad, 0x55, 0x68, 0x25, 0xa9, + 0x9b, 0x66, 0x49, 0x17, 0xd6, 0x8d, 0x17, 0x9b, 0x8e, 0x84, 0xac, 0x0d, 0x58, 0x40, 0xbe, 0x3c, + 0x97, 0xa6, 0x83, 0x24, 0x3a, 0xb2, 0xd0, 0xd8, 0xbd, 0x47, 0x11, 0xeb, 0xce, 0x23, 0x83, 0x12, + 0x61, 0xff, 0xc5, 0x84, 0x0b, 0xa8, 0xf7, 0x1d, 0x14, 0xe0, 0x46, 0x16, 0x04, 0xa7, 0x58, 0x60, + 0x15, 0x5a, 0x19, 0x4d, 0x47, 0xea, 0x97, 0x90, 0x98, 0x27, 0xe6, 0x01, 0xbb, 0xc3, 0x8e, 0x59, + 0x80, 0x8a, 0x6f, 0x3a, 0x25, 0xc2, 0x5a, 0x83, 0xb9, 0x77, 0xb8, 0x1f, 0xa2, 0x4e, 0x66, 0xf0, + 0x63, 0x01, 0x8b, 0x6f, 0xa1, 0xdf, 0x3f, 0x0a, 0x85, 0x49, 0x49, 0xdd, 0x05, 0xac, 0x5a, 0xa2, + 0xa5, 0x5b, 0xe2, 0x05, 0x58, 0x74, 0xa3, 0x68, 0xc7, 0x0d, 0x07, 0x2c, 0xa6, 0x49, 0x67, 0x91, + 0x6f, 0x05, 0x2b, 0xec, 0x21, 0x66, 0xea, 0xf1, 0x2c, 0xee, 0x33, 0x54, 0x77, 0xd3, 0x51, 0x30, + 0x82, 0x0f, 0x8f, 0x58, 0xac, 0xa8, 0x91, 0x34, 0x5f, 0xc1, 0x4a, 0xab, 0x40, 0x61, 0x15, 0x61, + 0xc7, 0x2c, 0x65, 0xd7, 0x43, 0x0f, 0x17, 0xd5, 0x91, 0x76, 0x2c, 0x51, 0xf6, 0xf7, 0x0c, 0x58, + 0xdc, 0xcb, 0xf6, 0x03, 0xbf, 0x8f, 0x2c, 0x84, 0x5a, 0x4b, 0xe5, 0x19, 0x9a, 0xf2, 0x54, 0x15, + 0x98, 0x93, 0x55, 0xd0, 0xd0, 0x55, 0xb0, 0x0a, 0xad, 0x01, 0x0b, 0x3d, 0x16, 0x4b, 0x95, 0x4a, + 0x48, 0x8a, 0xda, 0xcc, 0x45, 0xb5, 0x7f, 0x64, 0xc2, 0xdc, 0xfb, 0x2c, 0xc2, 0x3a, 0x74, 0xa2, + 0x43, 0x1e, 0xb2, 0xdd, 0x4c, 0xb8, 0x95, 0x94, 0x45, 0x45, 0x59, 0x17, 0xa1, 0xb9, 0xef, 0xc7, + 0xe9, 0x21, 0xda, 0x75, 0xc1, 0x21, 0x40, 0x60, 0xd9, 0xd0, 0xf5, 0xc9, 0x98, 0x6d, 0x87, 0x00, + 0xb9, 0xa0, 0xb9, 0x42, 0xf7, 0xfa, 0x1e, 0x6b, 0xd7, 0xf6, 0x58, 0xdd, 0x37, 0x60, 0x9c, 0x6f, + 0xd8, 0xff, 0x32, 0x00, 0x6e, 0xc4, 0x3e, 0x0b, 0x3d, 0x54, 0x4d, 0x65, 0x73, 0x1b, 0xf5, 0xcd, + 0xbd, 0x0a, 0xad, 0x98, 0x0d, 0xdd, 0xf8, 0x28, 0x77, 0x7e, 0x82, 0x2a, 0x02, 0x35, 0x6a, 0x02, + 0xbd, 0x0e, 0x70, 0x80, 0xf3, 0x08, 0x3e, 0xa8, 0xaa, 0xce, 0x2b, 0x1f, 0xbe, 0x52, 0x0b, 0x83, + 0x57, 0x72, 0x2b, 0x39, 0xca, 0x70, 0xb1, 0xb3, 0x5c, 0xcf, 0x93, 0x0e, 0xdc, 0xa4, 0x9d, 0x55, + 0x20, 0xc6, 0xf8, 0x6f, 0xeb, 0x04, 0xff, 0x9d, 0x2d, 0x9c, 0xe2, 0x1f, 0x06, 0xb4, 0x37, 0x03, + 0xb7, 0x7f, 0x34, 0xe5, 0xd2, 0xf5, 0x25, 0x9a, 0xb5, 0x25, 0xde, 0x84, 0x85, 0x7d, 0xc1, 0x2e, + 0x5f, 0x02, 0x6a, 0xa1, 0xf3, 0xca, 0x47, 0xc7, 0xac, 0x52, 0xdf, 0x14, 0x8e, 0x4e, 0xa7, 0x2f, + 0x77, 0xe6, 0xf4, 0xe5, 0x36, 0x4f, 0x58, 0x6e, 0xab, 0x58, 0xee, 0x9f, 0x4c, 0x98, 0xc7, 0x40, + 0xe7, 0xb0, 0x51, 0xc6, 0x92, 0xd4, 0xfa, 0x22, 0xcc, 0x65, 0xb9, 0xa8, 0xc6, 0xb4, 0xa2, 0x16, + 0x24, 0xd6, 0x6b, 0x32, 0xac, 0x22, 0xbd, 0x89, 0xf4, 0x97, 0xc6, 0xd0, 0x17, 0x39, 0xcd, 0x29, + 0x87, 0x8b, 0x14, 0x74, 0xe8, 0x86, 0x5e, 0xc0, 0x1c, 0x96, 0x64, 0x41, 0x2a, 0xa3, 0xa5, 0x86, + 0x23, 0x4f, 0x1b, 0xed, 0x24, 0x03, 0x99, 0xa0, 0x24, 0x24, 0xb4, 0x43, 0xe3, 0xc4, 0x27, 0x5a, + 0x7a, 0x89, 0x10, 0x1b, 0x35, 0x66, 0x23, 0xb4, 0x10, 0x6d, 0xab, 0x1c, 0x2c, 0xe7, 0x94, 0x5a, + 0x23, 0x47, 0xd0, 0x70, 0xc2, 0xc4, 0x04, 0x23, 0x03, 0xca, 0x4c, 0x0a, 0xa6, 0x9a, 0x98, 0xec, + 0xbf, 0x36, 0x60, 0x81, 0xb6, 0x4f, 0xae, 0xd4, 0xcb, 0xc2, 0xcf, 0xf9, 0x50, 0xf3, 0x22, 0x05, + 0x23, 0xa4, 0x10, 0xd0, 0xae, 0x1e, 0x68, 0x34, 0x9c, 0x70, 0x45, 0x01, 0xdf, 0xd0, 0x02, 0x8e, + 0x8a, 0xca, 0x67, 0xb9, 0xa9, 0x06, 0x1e, 0x05, 0x23, 0x42, 0x59, 0xca, 0x35, 0xef, 0x28, 0x60, + 0x41, 0x9b, 0xf2, 0x62, 0x7e, 0xf2, 0x0f, 0x05, 0x23, 0xf4, 0x9b, 0xf2, 0x7c, 0x6e, 0x52, 0x52, + 0x89, 0x20, 0xce, 0x72, 0x5e, 0x4a, 0x25, 0x05, 0x5c, 0xb3, 0x6a, 0xfb, 0x44, 0xab, 0x82, 0x66, + 0x55, 0x7d, 0x73, 0x75, 0x6a, 0x9b, 0x6b, 0x03, 0x16, 0x88, 0x4f, 0xee, 0xf4, 0xf3, 0x94, 0xea, + 0x35, 0xa4, 0xee, 0x1b, 0x0b, 0x55, 0xdf, 0xd0, 0xad, 0xbb, 0x38, 0xc1, 0xba, 0x4b, 0x85, 0x75, + 0x7f, 0x65, 0x02, 0x6c, 0xb3, 0xc8, 0x8d, 0xd3, 0x21, 0x0b, 0x53, 0xb1, 0x3c, 0xaf, 0x80, 0x0a, + 0xe3, 0x6a, 0x38, 0x35, 0x4f, 0x98, 0x7a, 0x9e, 0xb0, 0x60, 0x06, 0x15, 0x4e, 0xd6, 0xc4, 0xdf, + 0x42, 0x99, 0x91, 0x1b, 0x13, 0x37, 0x72, 0xf2, 0x02, 0x16, 0x79, 0x80, 0xc7, 0x9e, 0xcc, 0x1c, + 0x4d, 0x87, 0x00, 0xb1, 0xf9, 0xcb, 0xf9, 0xb0, 0xa0, 0x69, 0x51, 0x5c, 0xd7, 0xb1, 0xa7, 0xd6, + 0x60, 0x2f, 0xc1, 0x72, 0x92, 0xed, 0x97, 0x8b, 0xdb, 0xcd, 0x86, 0xd2, 0xdd, 0x6b, 0x78, 0xa1, + 0x54, 0x2a, 0xce, 0xc4, 0x20, 0x4a, 0x35, 0x25, 0xa2, 0x5a, 0x15, 0xd8, 0xef, 0x9a, 0xb0, 0x7c, + 0x37, 0x1e, 0xb8, 0xa1, 0xff, 0x4d, 0x2c, 0x37, 0x31, 0x80, 0x9f, 0x25, 0xe5, 0xae, 0x43, 0x87, + 0x85, 0x83, 0xc0, 0x4f, 0x0e, 0x77, 0x4b, 0xbd, 0xa9, 0x28, 0x55, 0xd9, 0x33, 0x93, 0x92, 0x72, + 0x53, 0x4b, 0xca, 0xab, 0xd0, 0x1a, 0xf2, 0x7d, 0x3f, 0xc8, 0xfd, 0x5e, 0x42, 0xe8, 0xf3, 0x2c, + 0x60, 0x98, 0x9d, 0x0b, 0x9f, 0xcf, 0x11, 0x65, 0xa2, 0x9e, 0x1b, 0x9b, 0xa8, 0xdb, 0x6a, 0xa2, + 0xd6, 0x15, 0x0f, 0x35, 0xc5, 0x93, 0xba, 0x3a, 0x85, 0xba, 0xfe, 0x60, 0xc0, 0x72, 0xa9, 0x6e, + 0xaa, 0x41, 0x27, 0xaa, 0xab, 0xea, 0x81, 0xe6, 0x18, 0x0f, 0x2c, 0xfc, 0xa6, 0xa1, 0xfa, 0x8d, + 0xf0, 0x34, 0x9e, 0xf8, 0x4a, 0xbd, 0x5f, 0xc0, 0x62, 0xb6, 0x80, 0xb9, 0x8a, 0xb2, 0x08, 0x52, + 0xaa, 0xee, 0x96, 0x56, 0x75, 0x57, 0xf3, 0xe8, 0x6f, 0x0d, 0xb8, 0x28, 0xac, 0x5c, 0x5b, 0xc6, + 0x5d, 0x58, 0xe6, 0x15, 0x4f, 0x90, 0x89, 0xe6, 0x63, 0x63, 0x12, 0x45, 0xd5, 0x69, 0x9c, 0x1a, + 0xb1, 0x60, 0xe8, 0x55, 0x26, 0x91, 0x99, 0x67, 0x1c, 0xc3, 0xaa, 0x3c, 0x4e, 0x8d, 0xd8, 0xfe, + 0x9d, 0x01, 0xcb, 0x94, 0xda, 0x94, 0x7d, 0x7e, 0xee, 0x62, 0xbf, 0x05, 0x17, 0xab, 0x33, 0xdf, + 0xf1, 0x93, 0xb4, 0x6b, 0xae, 0x37, 0xa6, 0x15, 0x7d, 0x2c, 0x03, 0xfb, 0x5b, 0xd0, 0xdd, 0xcb, + 0x82, 0x60, 0x87, 0x25, 0x89, 0x3b, 0x60, 0x9b, 0x8f, 0x7a, 0x6c, 0x24, 0xf0, 0x0e, 0x4b, 0x22, + 0xb1, 0x39, 0x58, 0x1c, 0x6f, 0x71, 0x8f, 0xa1, 0xf0, 0x4d, 0x27, 0x07, 0x85, 0x5d, 0x59, 0x1c, + 0x8b, 0x08, 0x29, 0x4b, 0x38, 0x82, 0xac, 0x2b, 0x30, 0x13, 0x08, 0xb1, 0x1a, 0x28, 0xd6, 0xda, + 0x18, 0xb1, 0x76, 0x92, 0xc1, 0xb6, 0x9b, 0xba, 0x0e, 0x8e, 0xb3, 0x87, 0xf0, 0xdc, 0xf8, 0xd9, + 0x47, 0x13, 0x1d, 0x58, 0x14, 0x59, 0x58, 0xa5, 0xf8, 0x3c, 0x2c, 0xfc, 0x57, 0x45, 0x09, 0xb1, + 0x13, 0xe2, 0x83, 0x72, 0x2c, 0x38, 0x39, 0x68, 0x5f, 0x04, 0xeb, 0x26, 0x4b, 0x77, 0xdc, 0x87, + 0xd7, 0x42, 0x6f, 0xc7, 0x0f, 0x7b, 0x6c, 0xe4, 0xb0, 0x91, 0x7d, 0x1d, 0x2e, 0xd4, 0xb0, 0x49, + 0x84, 0x1b, 0xdd, 0x7d, 0xd8, 0x63, 0x23, 0x14, 0x60, 0xc1, 0x91, 0x10, 0xe2, 0x71, 0x94, 0xac, + 0xdf, 0x24, 0x64, 0x8f, 0x60, 0x49, 0x98, 0xaa, 0xc7, 0x42, 0x6f, 0x27, 0x19, 0x20, 0x8b, 0x75, + 0xe8, 0x90, 0x06, 0x76, 0x92, 0x41, 0x59, 0x10, 0x2a, 0x28, 0x31, 0xa2, 0x1f, 0xf8, 0xc2, 0x24, + 0x38, 0x42, 0xae, 0x46, 0x41, 0x89, 0x6d, 0x97, 0x30, 0x79, 0x3e, 0x12, 0xfb, 0xb1, 0xe1, 0x14, + 0xb0, 0xfd, 0xb7, 0x26, 0xcc, 0x4a, 0x85, 0xe2, 0x56, 0x13, 0x35, 0x78, 0xa1, 0x2f, 0x82, 0x28, + 0x5b, 0xf6, 0x8f, 0xcb, 0xa3, 0x26, 0x41, 0xea, 0xe1, 0xb4, 0xa1, 0x1f, 0x4e, 0x2b, 0x32, 0xcd, + 0xd4, 0x65, 0xaa, 0xac, 0xab, 0x59, 0x5f, 0x97, 0x48, 0x0e, 0x18, 0x2f, 0xf7, 0x02, 0x37, 0x3d, + 0xe0, 0xf1, 0x50, 0x96, 0xd4, 0x4d, 0xa7, 0x86, 0x17, 0x09, 0x89, 0x70, 0x45, 0x45, 0x41, 0x81, + 0xa1, 0x82, 0x15, 0xf9, 0x9b, 0x30, 0x79, 0x65, 0x41, 0x67, 0x19, 0x1d, 0x49, 0xb2, 0x25, 0x89, + 0xcf, 0x43, 0xcc, 0x6d, 0x54, 0x40, 0xa8, 0x28, 0xb1, 0xf2, 0x61, 0x32, 0xb8, 0x11, 0xf3, 0xa1, + 0x3c, 0xd1, 0xe4, 0x20, 0xae, 0x9c, 0x87, 0x69, 0x9e, 0x17, 0x3b, 0x44, 0xab, 0xa0, 0x04, 0xad, + 0x04, 0xb1, 0x7a, 0x98, 0x77, 0x72, 0xd0, 0x5a, 0x86, 0x46, 0xc2, 0x46, 0xb2, 0x24, 0x10, 0x3f, + 0x35, 0xcb, 0x2d, 0xe9, 0x96, 0xab, 0xc4, 0xf8, 0x65, 0xfc, 0xaa, 0xc6, 0xf8, 0x32, 0x70, 0xae, + 0x68, 0x81, 0xf3, 0x1a, 0xcc, 0xf2, 0x48, 0xf8, 0x79, 0xd2, 0xb5, 0x70, 0x8f, 0x7d, 0x7c, 0xf2, + 0x1e, 0xbb, 0x72, 0x97, 0x46, 0x5e, 0x0f, 0xd3, 0xf8, 0x91, 0x93, 0xd3, 0x59, 0x77, 0x60, 0x89, + 0x1f, 0x1c, 0x04, 0x7e, 0xc8, 0xf6, 0xb2, 0xe4, 0x10, 0x4b, 0xef, 0x0b, 0x18, 0x9a, 0xec, 0x71, + 0xa1, 0x49, 0x1f, 0xe9, 0x54, 0x49, 0x45, 0x3e, 0x71, 0x53, 0x2a, 0x9d, 0x70, 0xc7, 0x5d, 0x5c, + 0x6f, 0x88, 0x7c, 0xa2, 0xe2, 0xd6, 0x5e, 0x83, 0x79, 0x55, 0x14, 0xa1, 0xaa, 0x23, 0xf6, 0x48, + 0xfa, 0xa9, 0xf8, 0x29, 0x32, 0xce, 0xb1, 0x1b, 0x64, 0x94, 0xc1, 0xe7, 0x1c, 0x02, 0x5e, 0x33, + 0x3f, 0x67, 0xd8, 0x3f, 0x34, 0x60, 0xa9, 0x22, 0x84, 0x18, 0x9d, 0xfa, 0x69, 0xc0, 0x24, 0x07, + 0x02, 0x44, 0x75, 0xe4, 0xb1, 0xa4, 0x2f, 0xdd, 0x1c, 0x7f, 0xcb, 0x3c, 0xd3, 0x28, 0xce, 0xbc, + 0x36, 0xcc, 0xfb, 0x77, 0x7b, 0x82, 0x51, 0x8f, 0x67, 0xa1, 0x57, 0xdc, 0x5b, 0x29, 0x38, 0xe1, + 0x66, 0xfe, 0xdd, 0xde, 0xa6, 0xeb, 0x0d, 0x18, 0xdd, 0x2e, 0x35, 0x51, 0x26, 0x1d, 0x69, 0x7b, + 0x30, 0x77, 0xcf, 0x8f, 0x92, 0x2d, 0x3e, 0x1c, 0x0a, 0x63, 0x79, 0x2c, 0x15, 0x79, 0xdc, 0x40, + 0x9f, 0x90, 0x90, 0x70, 0x27, 0x8f, 0x1d, 0xb8, 0x59, 0x90, 0x8a, 0xa1, 0xf9, 0xe6, 0x56, 0x50, + 0x78, 0xaf, 0x92, 0xf0, 0x70, 0x9b, 0xa8, 0x49, 0x4e, 0x05, 0x63, 0xff, 0xd1, 0x84, 0x65, 0x3c, + 0xfd, 0x6c, 0xa1, 0x6b, 0x78, 0x48, 0xf4, 0x0a, 0x34, 0x71, 0xab, 0xca, 0x8c, 0x72, 0xf2, 0x89, + 0x89, 0x86, 0x5a, 0x57, 0xa1, 0xc5, 0x23, 0x4c, 0x43, 0x94, 0xec, 0x5e, 0x98, 0x44, 0xa4, 0x5f, + 0x61, 0x39, 0x92, 0xca, 0xba, 0x01, 0x30, 0x2c, 0xb3, 0x0e, 0x85, 0xf7, 0x69, 0x79, 0x28, 0x94, + 0x42, 0xb9, 0x45, 0xa8, 0x2e, 0xee, 0xb1, 0x1a, 0x8e, 0x8e, 0xb4, 0x76, 0x61, 0x11, 0xc5, 0xbe, + 0x9b, 0x1f, 0x9d, 0xd1, 0x06, 0xd3, 0xcf, 0x58, 0xa1, 0xb6, 0x7f, 0x6a, 0x48, 0x35, 0x8a, 0xaf, + 0x3d, 0x46, 0xba, 0x2f, 0x55, 0x62, 0x9c, 0x49, 0x25, 0x6b, 0x30, 0x37, 0xcc, 0x94, 0x93, 0x7c, + 0xc3, 0x29, 0xe0, 0xd2, 0x44, 0x8d, 0xa9, 0x4d, 0x64, 0xff, 0xcc, 0x80, 0xee, 0x1b, 0xdc, 0x0f, + 0xf1, 0xc3, 0xb5, 0x28, 0x0a, 0xe4, 0x65, 0xeb, 0x99, 0x6d, 0xfe, 0x25, 0x68, 0xbb, 0xc4, 0x26, + 0x4c, 0xa5, 0xd9, 0xa7, 0x38, 0x9d, 0x97, 0x34, 0xca, 0x41, 0xab, 0xa1, 0x1e, 0xb4, 0xec, 0xf7, + 0x0c, 0x58, 0x24, 0xa5, 0xbc, 0x99, 0xf9, 0xe9, 0x99, 0xe5, 0xdb, 0x84, 0xb9, 0x51, 0xe6, 0xa7, + 0x67, 0xf0, 0xca, 0x82, 0xae, 0xee, 0x4f, 0x8d, 0x31, 0xfe, 0x64, 0xff, 0xd2, 0x80, 0x4b, 0x55, + 0xb5, 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, + 0x8a, 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xbb, 0x26, 0x7c, 0xe8, 0x66, 0xb1, 0xf1, + 0xee, 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, + 0x65, 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, + 0xe7, 0xcb, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, + 0x6c, 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, + 0x3a, 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x31, + 0x60, 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, + 0xc3, 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, + 0xa1, 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x63, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, + 0xf4, 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, + 0xa2, 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, + 0xd0, 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xc2, 0x80, 0x45, + 0x1a, 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8c, 0x95, 0x84, 0x7b, 0xad, 0x2a, + 0x5c, 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, + 0xa5, 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, + 0x9c, 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, + 0xac, 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, + 0x78, 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, + 0x98, 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, + 0xbf, 0xc8, 0xfe, 0x06, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, + 0xcb, 0x7c, 0x64, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x8e, 0x01, 0xcf, 0xd7, 0xd8, + 0x5f, 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, + 0xb1, 0x42, 0x68, 0x05, 0xfb, 0xfb, 0x20, 0xc4, 0xcf, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, + 0xf6, 0xb3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, + 0xae, 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xbe, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, + 0x6a, 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, + 0xc1, 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, + 0x94, 0x9c, 0x0b, 0xf7, 0x4f, 0xc3, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, + 0xbd, 0x6e, 0x7f, 0x06, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, + 0x68, 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, + 0x95, 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, + 0x4f, 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, + 0xa7, 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, + 0x07, 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, + 0x0f, 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, + 0x62, 0xec, 0xaf, 0x80, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, + 0xe2, 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, + 0x57, 0x30, 0xf6, 0x4f, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x00, + 0x2d, 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, + 0xff, 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0x27, + 0x4e, 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, + 0x05, 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, + 0xd3, 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, + 0x4c, 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, + 0x14, 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, + 0x1b, 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, + 0x46, 0xea, 0x8d, 0x37, 0xd2, 0x27, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, + 0x1b, 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, + 0xa5, 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, + 0x36, 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0xcf, 0x26, 0x2c, 0xa2, 0xca, 0xa8, 0x99, 0x18, + 0x1e, 0x70, 0xec, 0x07, 0xa0, 0xba, 0xf4, 0x77, 0x5d, 0x3a, 0xd2, 0xfa, 0x14, 0xac, 0x10, 0x82, + 0x29, 0xcd, 0x10, 0x13, 0x9b, 0x21, 0xf5, 0x0f, 0xd8, 0xfe, 0xc9, 0x92, 0x94, 0x0f, 0xb7, 0xdd, + 0xd4, 0xcd, 0x8b, 0xaf, 0x12, 0xa3, 0x36, 0xe7, 0x66, 0x6a, 0x2f, 0x47, 0x63, 0xce, 0x87, 0x45, + 0xd7, 0x4d, 0x42, 0x82, 0x22, 0xf5, 0x87, 0x8c, 0x67, 0xa9, 0x0c, 0x13, 0x39, 0x48, 0x6f, 0x2f, + 0x3c, 0xdf, 0xc5, 0x96, 0x96, 0x7c, 0x98, 0x50, 0x20, 0x30, 0xb2, 0x95, 0x2d, 0x3a, 0xf9, 0xb2, + 0xb3, 0xc4, 0x4c, 0xd1, 0x4e, 0xc3, 0xb7, 0xc0, 0x7e, 0xea, 0xab, 0x0f, 0x16, 0x9a, 0x8e, 0x86, + 0xb3, 0xff, 0x6e, 0xc0, 0x85, 0x3d, 0x37, 0x4e, 0xfd, 0xbe, 0x1f, 0xb9, 0x61, 0xba, 0xc3, 0x52, + 0x17, 0xd7, 0xa9, 0x3d, 0x00, 0x33, 0x1e, 0xef, 0x01, 0xd8, 0x1e, 0x2c, 0x0d, 0xf4, 0x13, 0xc8, + 0x63, 0x1e, 0x1e, 0xaa, 0xe4, 0xda, 0x6b, 0xb6, 0xc6, 0x63, 0xbf, 0x66, 0xb3, 0xbf, 0x6f, 0xc2, + 0x52, 0x25, 0xbc, 0x9e, 0x98, 0x9b, 0xae, 0x01, 0xf8, 0x85, 0xab, 0x9d, 0x70, 0x41, 0xaf, 0xfb, + 0xa3, 0xa3, 0x10, 0x8d, 0xeb, 0xe5, 0x35, 0xce, 0xde, 0xcb, 0xbb, 0x05, 0x9d, 0xa8, 0x34, 0xd2, + 0x09, 0xe7, 0xa3, 0x31, 0xa6, 0x74, 0x54, 0x52, 0xfb, 0xeb, 0xb0, 0x52, 0x8b, 0x62, 0xd8, 0xb6, + 0xe3, 0x47, 0x2c, 0x2c, 0xda, 0x76, 0x02, 0x50, 0x1c, 0xda, 0xac, 0x3a, 0x74, 0xe0, 0x1f, 0xab, + 0xcf, 0x65, 0x25, 0x68, 0xff, 0xc0, 0x84, 0xd5, 0xf1, 0x19, 0xe8, 0x59, 0x55, 0xf7, 0x3e, 0x74, + 0x27, 0x45, 0xfb, 0x73, 0xd3, 0x7a, 0xe9, 0xdd, 0x45, 0xae, 0x7e, 0x56, 0xd5, 0x7d, 0x21, 0xf7, + 0x6e, 0x25, 0x1d, 0xda, 0xbf, 0x2e, 0xf4, 0x53, 0x54, 0x23, 0xcf, 0xa8, 0x7e, 0xac, 0x97, 0x60, + 0x99, 0x96, 0xa9, 0x3c, 0xfe, 0xa0, 0xe2, 0xb6, 0x86, 0x2f, 0x23, 0x85, 0x52, 0x1a, 0x9c, 0x9b, + 0xcf, 0xfe, 0xde, 0xc8, 0x6d, 0x52, 0xd4, 0x78, 0x1f, 0x28, 0x9b, 0x94, 0x9e, 0xa6, 0x14, 0x3e, + 0x8a, 0xa7, 0x15, 0xb5, 0xe7, 0xff, 0x3c, 0xed, 0x74, 0x4f, 0x2b, 0x74, 0xa9, 0x14, 0x81, 0xf6, + 0xb7, 0x61, 0x61, 0x9b, 0x05, 0x3b, 0xc9, 0x20, 0x7f, 0x76, 0x76, 0xae, 0x87, 0xc9, 0xea, 0x63, + 0xb5, 0x99, 0xda, 0x63, 0x35, 0x7b, 0x13, 0x16, 0x55, 0x01, 0xce, 0xf2, 0xea, 0x6e, 0xf3, 0xd2, + 0xd7, 0xd6, 0xae, 0xbc, 0x4c, 0xff, 0x0f, 0x7b, 0xbd, 0xa6, 0xc4, 0xfd, 0x16, 0xfe, 0x5f, 0xec, + 0xd5, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xf7, 0x16, 0x64, 0x42, 0x36, 0x00, 0x00, +} From f31179bb9a6a48ef2606d5a70df05d9abe902322 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 13:21:30 +0800 Subject: [PATCH 525/752] rtc --- internal/api/third/rtc.go | 2 ++ pkg/base_info/third_api_struct.go | 1 + 2 files changed, 3 insertions(+) diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index eaa1a1959..8fed4c845 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -47,6 +47,7 @@ func GetRTCInvitationInfo(c *gin.Context) { resp.Data.Invitation.InviteeUserIDList = invitationInfo.Invitation.InviteeUserIDList resp.Data.Invitation.MediaType = invitationInfo.Invitation.MediaType resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout + resp.Data.Invitation.InitiateTime = invitationInfo.Invitation.InitiateTime c.JSON(http.StatusOK, resp) } @@ -85,6 +86,7 @@ func GetRTCInvitationInfoStartApp(c *gin.Context) { resp.Data.Invitation.InviteeUserIDList = invitationInfo.Invitation.InviteeUserIDList resp.Data.Invitation.MediaType = invitationInfo.Invitation.MediaType resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout + resp.Data.Invitation.InitiateTime = invitationInfo.Invitation.InitiateTime c.JSON(http.StatusOK, resp) } diff --git a/pkg/base_info/third_api_struct.go b/pkg/base_info/third_api_struct.go index 758c3494c..b02ce9260 100644 --- a/pkg/base_info/third_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -75,6 +75,7 @@ type GetRTCInvitationInfoResp struct { Timeout int32 `json:"timeout"` MediaType string `json:"mediaType"` SessionType int32 `json:"sessionType"` + InitiateTime int32 `json:"initiateTime"` } `json:"invitation"` OfflinePushInfo struct{} `json:"offlinePushInfo"` } `json:"data"` From 5e7eda67818250d9a1c8680ff03e669e08770c81 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 15:03:05 +0800 Subject: [PATCH 526/752] rtc --- internal/msg_gateway/gate/logic.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index ad218907b..ac9f6e1e6 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -198,7 +198,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { } func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data), m.Token) nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) if isPass { @@ -236,7 +236,7 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { nReply.ErrMsg = err.Error() ws.sendSignalMsgResp(conn, 200, err.Error(), m, &signalResp) } else { - log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String()) + log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String(), signalResp.String(), m) ws.sendSignalMsgResp(conn, 0, "", m, &signalResp) } } else { From 0e93295cdf48d66ac0f28d41011004260ac87cbd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 15:24:40 +0800 Subject: [PATCH 527/752] rtc --- internal/api/third/rtc.go | 1 + pkg/base_info/third_api_struct.go | 1 + 2 files changed, 2 insertions(+) diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index 8fed4c845..0e5a51375 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -48,6 +48,7 @@ func GetRTCInvitationInfo(c *gin.Context) { resp.Data.Invitation.MediaType = invitationInfo.Invitation.MediaType resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout resp.Data.Invitation.InitiateTime = invitationInfo.Invitation.InitiateTime + resp.Data.Invitation.PlatformID = invitationInfo.Invitation.PlatformID c.JSON(http.StatusOK, resp) } diff --git a/pkg/base_info/third_api_struct.go b/pkg/base_info/third_api_struct.go index b02ce9260..a13f0dc8e 100644 --- a/pkg/base_info/third_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -76,6 +76,7 @@ type GetRTCInvitationInfoResp struct { MediaType string `json:"mediaType"` SessionType int32 `json:"sessionType"` InitiateTime int32 `json:"initiateTime"` + PlatformID int32 `json:"platformID"` } `json:"invitation"` OfflinePushInfo struct{} `json:"offlinePushInfo"` } `json:"data"` From 31c123a09bbce934ec21f5d8362ce86759f5415b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 15:25:18 +0800 Subject: [PATCH 528/752] rtc --- internal/api/third/rtc.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index 0e5a51375..3aa2c4ab2 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -88,6 +88,8 @@ func GetRTCInvitationInfoStartApp(c *gin.Context) { resp.Data.Invitation.MediaType = invitationInfo.Invitation.MediaType resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout resp.Data.Invitation.InitiateTime = invitationInfo.Invitation.InitiateTime + resp.Data.Invitation.PlatformID = invitationInfo.Invitation.PlatformID + c.JSON(http.StatusOK, resp) } From 9c1ca78fed1b10b2258e60919053deefcbb2eff8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 15:27:11 +0800 Subject: [PATCH 529/752] rtc --- internal/api/third/rtc.go | 3 ++- pkg/base_info/third_api_struct.go | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/api/third/rtc.go b/internal/api/third/rtc.go index 3aa2c4ab2..576e32892 100644 --- a/internal/api/third/rtc.go +++ b/internal/api/third/rtc.go @@ -49,6 +49,7 @@ func GetRTCInvitationInfo(c *gin.Context) { resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout resp.Data.Invitation.InitiateTime = invitationInfo.Invitation.InitiateTime resp.Data.Invitation.PlatformID = invitationInfo.Invitation.PlatformID + resp.Data.Invitation.CustomData = invitationInfo.Invitation.CustomData c.JSON(http.StatusOK, resp) } @@ -89,7 +90,7 @@ func GetRTCInvitationInfoStartApp(c *gin.Context) { resp.Data.Invitation.Timeout = invitationInfo.Invitation.Timeout resp.Data.Invitation.InitiateTime = invitationInfo.Invitation.InitiateTime resp.Data.Invitation.PlatformID = invitationInfo.Invitation.PlatformID - + resp.Data.Invitation.CustomData = invitationInfo.Invitation.CustomData c.JSON(http.StatusOK, resp) } diff --git a/pkg/base_info/third_api_struct.go b/pkg/base_info/third_api_struct.go index a13f0dc8e..e59e03940 100644 --- a/pkg/base_info/third_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -77,6 +77,7 @@ type GetRTCInvitationInfoResp struct { SessionType int32 `json:"sessionType"` InitiateTime int32 `json:"initiateTime"` PlatformID int32 `json:"platformID"` + CustomData string `json:"customData"` } `json:"invitation"` OfflinePushInfo struct{} `json:"offlinePushInfo"` } `json:"data"` From d8ce1222540c8c8f1d08c3a8281d11e619143bd4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 15:47:34 +0800 Subject: [PATCH 530/752] redis model update --- pkg/common/db/newRedisModel.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 5b5e74a7c..9223cf1ef 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -19,7 +19,6 @@ import ( "time" "github.com/golang/protobuf/proto" - "github.com/mitchellh/mapstructure" ) //func (d * DataBases)pubMessage(channel, msg string) { @@ -55,15 +54,6 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper } return seqMsg, failedSeqList, errResult } -func Map2Pb(m map[string]string) (*pbCommon.MsgData, error) { - var data pbCommon.MsgData - err := mapstructure.Decode(m, &data) - if err != nil { - return nil, err - } - return &data, nil -} - func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ From d7884f89f51d1ae307c8eeba0a7b57a16eed5c95 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 15:56:06 +0800 Subject: [PATCH 531/752] rtc --- internal/push/logic/push_to_client.go | 2 +- pkg/common/db/newRedisModel.go | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 78ec80f65..adcd4b3ed 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -124,7 +124,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { break } // save invitation info for offline push - if err := db.DB.HandleSignalInfo(pushMsg.MsgData); err != nil { + if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) continue } diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 61b4c563b..0393f214c 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -108,7 +108,7 @@ func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID str return nil } -func (d *DataBases) HandleSignalInfo(msg *pbCommon.MsgData) error { +func (d *DataBases) HandleSignalInfo(operationID string, msg *pbCommon.MsgData) error { req := &pbRtc.SignalReq{} if err := proto.Unmarshal(msg.Content, req); err != nil { return err @@ -126,11 +126,13 @@ func (d *DataBases) HandleSignalInfo(msg *pbCommon.MsgData) error { case *pbRtc.SignalReq_HungUp, *pbRtc.SignalReq_Cancel, *pbRtc.SignalReq_Reject, *pbRtc.SignalReq_Accept: return errors.New("signalInfo do not need offlinePush") default: - log2.NewDebug("", utils.GetSelfFuncName(), "req invalid type", string(msg.Content)) + log2.NewDebug(operationID, utils.GetSelfFuncName(), "req invalid type", string(msg.Content)) return nil } if isInviteSignal { + log2.NewInfo(operationID, utils.GetSelfFuncName(), "invite userID list:", inviteeUserIDList) for _, userID := range inviteeUserIDList { + log2.NewInfo(operationID, utils.GetSelfFuncName(), "invite userID:", userID) timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) if err != nil { return err From d190616d34f2ebcd8103988b0345c6a975522bf7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 16:03:20 +0800 Subject: [PATCH 532/752] rtc --- pkg/common/db/newRedisModel.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 0393f214c..4147b7af3 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -151,7 +151,6 @@ func (d *DataBases) HandleSignalInfo(operationID string, msg *pbCommon.MsgData) if err != nil { return err } - return err } } return nil From f324bb603d21841d5e276ce0d992d36ce6f0fa68 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 14 Jun 2022 16:05:45 +0800 Subject: [PATCH 533/752] rtc --- internal/push/logic/push_to_client.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index adcd4b3ed..2664a39da 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -62,6 +62,10 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) successCount++ if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { + // save invitation info for offline push + if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) + } for _, v := range wsResult { if v.ResultCode == 0 { if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { @@ -123,11 +127,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { if offlinePusher == nil { break } - // save invitation info for offline push - if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) - continue - } + opts, err := GetOfflinePushOpts(pushMsg) if err != nil { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) From 38ded2c43d442ed8ddd1fe5d80e3f4329774d182 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 17:24:40 +0800 Subject: [PATCH 534/752] send message remove online status split --- internal/rpc/msg/send_msg.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index fe9b0360d..e9f9c5958 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -280,12 +280,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S default: } m := make(map[string][]string, 2) - if len(memberUserIDList) > GroupMemberNum { - getOnlineAndOfflineUserIDList(memberUserIDList, m, pb.OperationID) - log.Debug(pb.OperationID, m[constant.OnlineStatus], m[constant.OfflineStatus]) - } else { - m[constant.OnlineStatus] = memberUserIDList - } + //if len(memberUserIDList) > GroupMemberNum { + // getOnlineAndOfflineUserIDList(memberUserIDList, m, pb.OperationID) + // log.Debug(pb.OperationID, m[constant.OnlineStatus], m[constant.OfflineStatus]) + //} else { + m[constant.OnlineStatus] = memberUserIDList + //} log.Debug(pb.OperationID, "send msg cost time1 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() From 926de3fa948753ba78ba06ac7d4f5ee3413e184d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 17:27:04 +0800 Subject: [PATCH 535/752] log --- internal/msg_gateway/gate/logic.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index b46abee7c..40095a229 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -292,7 +292,9 @@ func (ws *WServer) sendMsg(conn *UserConn, mReply interface{}) { err = ws.writeMsg(conn, websocket.BinaryMessage, b.Bytes()) if err != nil { uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "WS WriteMsg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws writeMsg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + } else { + log.Debug(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws write response success") } } func (ws *WServer) sendErrMsg(conn *UserConn, errCode int32, errMsg string, reqIdentifier int32, msgIncr string, operationID string) { From cfcccd0240157b9c3e85af416bef247edcf20573 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 18:20:08 +0800 Subject: [PATCH 536/752] user add global set message recv opt --- pkg/base_info/public_struct.go | 17 +- pkg/common/db/model_struct.go | 21 +- pkg/proto/sdk_ws/ws.pb.go | 572 +++++++++++++++++---------------- pkg/proto/sdk_ws/ws.proto | 1 + 4 files changed, 312 insertions(+), 299 deletions(-) diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 2950dbea8..7c4a6fa8d 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -6,14 +6,15 @@ import ( ) type ApiUserInfo struct { - UserID string `json:"userID" binding:"required,min=1,max=64"` - Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` - FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` - Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` - PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` - Birth uint32 `json:"birth" binding:"omitempty"` - Email string `json:"email" binding:"omitempty,max=64"` - Ex string `json:"ex" binding:"omitempty,max=1024"` + UserID string `json:"userID" binding:"required,min=1,max=64"` + Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` + FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` + Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` + PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` + Birth uint32 `json:"birth" binding:"omitempty"` + Email string `json:"email" binding:"omitempty,max=64"` + GlobalRecvMsgOpt int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` + Ex string `json:"ex" binding:"omitempty,max=1024"` } //type Conversation struct { diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index f8e9bca7b..7bb337775 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -148,16 +148,17 @@ type GroupRequest struct { //int32 AppMangerLevel = 10; //open_im_sdk.User == imdb.User type User struct { - UserID string `gorm:"column:user_id;primary_key;size:64"` - Nickname string `gorm:"column:name;size:255"` - FaceURL string `gorm:"column:face_url;size:255"` - Gender int32 `gorm:"column:gender"` - PhoneNumber string `gorm:"column:phone_number;size:32"` - Birth time.Time `gorm:"column:birth"` - Email string `gorm:"column:email;size:64"` - Ex string `gorm:"column:ex;size:1024"` - CreateTime time.Time `gorm:"column:create_time"` - AppMangerLevel int32 `gorm:"column:app_manger_level"` + UserID string `gorm:"column:user_id;primary_key;size:64"` + Nickname string `gorm:"column:name;size:255"` + FaceURL string `gorm:"column:face_url;size:255"` + Gender int32 `gorm:"column:gender"` + PhoneNumber string `gorm:"column:phone_number;size:32"` + Birth time.Time `gorm:"column:birth"` + Email string `gorm:"column:email;size:64"` + Ex string `gorm:"column:ex;size:1024"` + CreateTime time.Time `gorm:"column:create_time"` + AppMangerLevel int32 `gorm:"column:app_manger_level"` + GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"` } //message BlackInfo{ diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 21094b3ee..583f7a319 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{0} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{1} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{2} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -343,6 +343,7 @@ type UserInfo struct { Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` + GlobalRecvMsgOpt int32 `protobuf:"varint,11,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -352,7 +353,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{3} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -442,6 +443,13 @@ func (m *UserInfo) GetAppMangerLevel() int32 { return 0 } +func (m *UserInfo) GetGlobalRecvMsgOpt() int32 { + if m != nil { + return m.GlobalRecvMsgOpt + } + return 0 +} + type FriendInfo struct { OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` @@ -459,7 +467,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{4} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +552,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{5} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +633,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{6} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +741,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{7} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +886,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{8} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +997,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{9} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1111,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{10} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1192,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{11} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1238,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{12} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1287,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{13} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1346,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{14} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1384,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{15} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1425,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{16} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1486,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{17} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1539,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{18} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1588,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{19} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1656,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{20} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1719,7 +1727,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{21} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1894,7 +1902,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{22} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1962,7 +1970,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{23} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2019,7 +2027,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{24} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2088,7 +2096,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{25} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2143,7 +2151,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{26} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2199,7 +2207,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{27} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2254,7 +2262,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{28} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2309,7 +2317,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{29} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2365,7 +2373,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{30} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2428,7 +2436,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{31} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2491,7 +2499,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{32} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2553,7 +2561,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{33} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2607,7 +2615,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{34} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2663,7 +2671,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{35} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2732,7 +2740,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{36} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2793,7 +2801,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{37} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2847,7 +2855,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{38} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2902,7 +2910,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{39} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2962,7 +2970,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{40} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3009,7 +3017,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{41} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3062,7 +3070,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{42} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3108,7 +3116,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{43} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3148,7 +3156,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{44} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3195,7 +3203,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{45} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3243,7 +3251,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{46} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3296,7 +3304,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{47} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3334,7 +3342,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{48} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3372,7 +3380,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{49} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3410,7 +3418,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{50} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3449,7 +3457,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{51} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3488,7 +3496,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{52} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3528,7 +3536,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{53} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3583,7 +3591,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{54} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3637,7 +3645,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{55} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3683,7 +3691,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{56} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3736,7 +3744,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{57} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4003,7 +4011,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{58} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4271,7 +4279,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{59} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4367,7 +4375,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{60} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4422,7 +4430,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{61} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4483,7 +4491,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{62} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4538,7 +4546,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{63} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4599,7 +4607,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{64} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4654,7 +4662,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{65} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4712,7 +4720,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{66} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4747,7 +4755,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{67} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4815,7 +4823,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{68} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4869,7 +4877,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{69} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4920,7 +4928,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{70} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4955,7 +4963,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{71} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5020,7 +5028,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{72} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5054,7 +5062,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{73} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5114,7 +5122,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_c8bc58641c7ea7c8, []int{74} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5230,212 +5238,214 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_c8bc58641c7ea7c8) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_17c9ab6c274be9ad) } -var fileDescriptor_ws_c8bc58641c7ea7c8 = []byte{ - // 3261 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_17c9ab6c274be9ad = []byte{ + // 3285 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, - 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x29, 0x48, 0x88, 0x1b, 0x27, 0x38, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, - 0x90, 0x38, 0x20, 0xc4, 0x81, 0x1b, 0x17, 0x38, 0x22, 0x6e, 0x9c, 0xb9, 0x72, 0x40, 0x42, 0x02, - 0xbd, 0xaa, 0xd7, 0xdd, 0xef, 0x75, 0xf7, 0xd8, 0xb3, 0x23, 0x2b, 0xbb, 0xd1, 0x72, 0x9b, 0xaa, - 0x7e, 0x55, 0xaf, 0x5e, 0x7d, 0xf5, 0x5e, 0xd5, 0xfb, 0x19, 0x58, 0x88, 0x9d, 0xc3, 0xf7, 0xee, - 0xc6, 0xcf, 0xdf, 0x8d, 0x2f, 0x85, 0x51, 0x90, 0x04, 0xc6, 0x52, 0xcc, 0xa2, 0x63, 0x16, 0xbd, - 0x67, 0x87, 0xee, 0x7b, 0xa1, 0x1d, 0xd9, 0xc3, 0xd8, 0xfc, 0x97, 0x0e, 0xed, 0xab, 0x51, 0x90, - 0x86, 0xd7, 0xfd, 0xfd, 0xc0, 0xe8, 0xc2, 0xf4, 0x00, 0x89, 0xad, 0xae, 0xb6, 0xaa, 0x3d, 0xdb, - 0xb6, 0x32, 0xd2, 0xb8, 0x00, 0x6d, 0xfc, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0x6f, 0x05, 0xc3, - 0x30, 0x61, 0xd6, 0x0f, 0x12, 0x77, 0xdf, 0xed, 0xdb, 0x89, 0x1b, 0xf8, 0xdd, 0x06, 0x36, 0x50, - 0x78, 0xbc, 0x8d, 0xeb, 0x27, 0x51, 0xe0, 0xa4, 0x7d, 0x6c, 0x33, 0x45, 0x6d, 0x64, 0x1e, 0xef, - 0x7f, 0xdf, 0xee, 0xb3, 0xdb, 0xd6, 0x8d, 0x6e, 0x93, 0xfa, 0x17, 0xa4, 0xb1, 0x0a, 0x9d, 0xe0, - 0xae, 0xcf, 0xa2, 0xdb, 0x31, 0x8b, 0xae, 0x6f, 0x75, 0x5b, 0xf8, 0x55, 0x66, 0x19, 0x17, 0x01, - 0xfa, 0x11, 0xb3, 0x13, 0x76, 0xcb, 0x1d, 0xb2, 0xee, 0xf4, 0xaa, 0xf6, 0xec, 0x9c, 0x25, 0x71, - 0xb8, 0x86, 0x21, 0x1b, 0xee, 0xb1, 0x68, 0x33, 0x48, 0xfd, 0xa4, 0x3b, 0x83, 0x0d, 0x64, 0x96, - 0x31, 0x0f, 0x3a, 0xbb, 0xd7, 0x6d, 0xa3, 0x6a, 0x9d, 0xdd, 0x33, 0x96, 0xa1, 0x15, 0x27, 0x76, - 0x92, 0xc6, 0x5d, 0x58, 0xd5, 0x9e, 0x6d, 0x5a, 0x82, 0x32, 0xd6, 0x60, 0x0e, 0xf5, 0x06, 0x99, - 0x35, 0x1d, 0x14, 0x51, 0x99, 0xb9, 0xc7, 0x6e, 0xdd, 0x0f, 0x59, 0x77, 0x16, 0x15, 0x14, 0x0c, - 0xf3, 0x6f, 0x3a, 0x9c, 0x43, 0xbf, 0x6f, 0xa3, 0x01, 0x57, 0x52, 0xcf, 0x3b, 0x05, 0x81, 0x65, - 0x68, 0xa5, 0xd4, 0x1d, 0xb9, 0x5f, 0x50, 0xbc, 0x9f, 0x28, 0xf0, 0xd8, 0x0d, 0x76, 0xcc, 0x3c, - 0x74, 0x7c, 0xd3, 0x2a, 0x18, 0xc6, 0x0a, 0xcc, 0xdc, 0x09, 0x5c, 0x1f, 0x7d, 0x32, 0x85, 0x1f, - 0x73, 0x9a, 0x7f, 0xf3, 0xdd, 0xfe, 0xa1, 0xcf, 0x21, 0x25, 0x77, 0xe7, 0xb4, 0x8c, 0x44, 0x4b, - 0x45, 0xe2, 0x19, 0x98, 0xb7, 0xc3, 0x70, 0xdb, 0xf6, 0x07, 0x2c, 0xa2, 0x4e, 0xa7, 0x51, 0x6f, - 0x89, 0xcb, 0xf1, 0xe0, 0x3d, 0xf5, 0x82, 0x34, 0xea, 0x33, 0x74, 0x77, 0xd3, 0x92, 0x38, 0x5c, - 0x4f, 0x10, 0xb2, 0x48, 0x72, 0x23, 0x79, 0xbe, 0xc4, 0x15, 0xa8, 0x40, 0x8e, 0x0a, 0xc7, 0x31, - 0x4d, 0xd8, 0x1b, 0xbe, 0x83, 0x83, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x03, 0x0d, 0xe6, 0x77, - 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0xee, 0xd6, 0xc2, 0x79, 0x9a, 0xe2, 0x3c, 0xd9, 0x05, 0xfa, - 0x68, 0x17, 0x34, 0x54, 0x17, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0xc2, 0xa5, 0x82, 0x12, - 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x9f, 0xe8, 0x30, 0xf3, 0x31, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, 0x20, - 0xf0, 0xd9, 0x4e, 0xca, 0xc3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, 0xe4, - 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, 0x06, - 0x34, 0x93, 0xfb, 0x5e, 0x9d, 0x63, 0xed, 0xca, 0x1c, 0xab, 0xc6, 0x06, 0xd4, 0xc5, 0x86, 0xf9, - 0x6f, 0x0d, 0xe0, 0x4a, 0xe4, 0x32, 0xdf, 0x41, 0xd7, 0x94, 0x26, 0xb7, 0x56, 0x9d, 0xdc, 0xcb, - 0xd0, 0x8a, 0xd8, 0xd0, 0x8e, 0x0e, 0xb3, 0xe0, 0x27, 0xaa, 0x64, 0x50, 0xa3, 0x62, 0xd0, 0xab, - 0x00, 0xfb, 0xd8, 0x0f, 0xd7, 0x83, 0xae, 0xea, 0xbc, 0xf8, 0x99, 0x4b, 0x95, 0x65, 0xf0, 0x52, - 0x86, 0x92, 0x25, 0x35, 0xe7, 0x33, 0xcb, 0x76, 0x1c, 0x11, 0xc0, 0x4d, 0x9a, 0x59, 0x39, 0xa3, - 0x26, 0x7e, 0x5b, 0x27, 0xc4, 0xef, 0x74, 0x1e, 0x14, 0xff, 0xd4, 0xa0, 0xbd, 0xe1, 0xd9, 0xfd, - 0xc3, 0x31, 0x87, 0xae, 0x0e, 0x51, 0xaf, 0x0c, 0xf1, 0x2a, 0xcc, 0xed, 0x71, 0x75, 0xd9, 0x10, - 0xd0, 0x0b, 0x9d, 0x17, 0x3f, 0x57, 0x33, 0x4a, 0x75, 0x52, 0x58, 0xaa, 0x9c, 0x3a, 0xdc, 0xa9, - 0xd3, 0x87, 0xdb, 0x3c, 0x61, 0xb8, 0xad, 0x7c, 0xb8, 0x7f, 0xd5, 0x61, 0x16, 0x17, 0x3a, 0x8b, - 0x1d, 0xa5, 0x2c, 0x4e, 0x8c, 0xd7, 0x61, 0x26, 0xcd, 0x4c, 0xd5, 0xc6, 0x35, 0x35, 0x17, 0x31, - 0x5e, 0x11, 0xcb, 0x2a, 0xca, 0xeb, 0x28, 0x7f, 0xa1, 0x46, 0x3e, 0xcf, 0x69, 0x56, 0xd1, 0x9c, - 0xa7, 0xa0, 0x03, 0xdb, 0x77, 0x3c, 0x66, 0xb1, 0x38, 0xf5, 0x12, 0xb1, 0x5a, 0x2a, 0x3c, 0x8a, - 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x12, 0x94, 0xa0, 0xb8, 0x77, 0xa8, 0x1d, 0xff, 0x44, 0x43, 0x2f, - 0x18, 0x7c, 0xa2, 0x46, 0xec, 0x08, 0x11, 0xa2, 0x69, 0x95, 0x91, 0x45, 0x9f, 0xc2, 0x6b, 0x14, - 0x08, 0x0a, 0x8f, 0x43, 0x4c, 0x34, 0x2a, 0xa0, 0xcc, 0x24, 0x71, 0xca, 0x89, 0xc9, 0xfc, 0x7b, - 0x03, 0xe6, 0x68, 0xfa, 0x64, 0x4e, 0xbd, 0xc8, 0xe3, 0x3c, 0x18, 0x2a, 0x51, 0x24, 0x71, 0xb8, - 0x15, 0x9c, 0xda, 0x51, 0x17, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x05, 0x47, 0x66, - 0x65, 0xbd, 0x5c, 0x95, 0x17, 0x1e, 0x89, 0xc3, 0x97, 0xb2, 0x24, 0x50, 0xa2, 0x23, 0xa7, 0xb9, - 0x6c, 0x12, 0xe4, 0xfd, 0x53, 0x7c, 0x48, 0x1c, 0xee, 0xdf, 0x24, 0xc8, 0xfa, 0x26, 0x27, 0x15, - 0x0c, 0xd2, 0x2c, 0xfa, 0xa5, 0x54, 0x92, 0xd3, 0x15, 0x54, 0xdb, 0x27, 0xa2, 0x0a, 0x0a, 0xaa, - 0xea, 0xe4, 0xea, 0x54, 0x26, 0xd7, 0x1a, 0xcc, 0x91, 0x9e, 0x2c, 0xe8, 0x67, 0x29, 0xd5, 0x2b, - 0x4c, 0x35, 0x36, 0xe6, 0xca, 0xb1, 0xa1, 0xa2, 0x3b, 0x3f, 0x02, 0xdd, 0x85, 0x1c, 0xdd, 0x5f, - 0xeb, 0x00, 0x5b, 0x2c, 0xb4, 0xa3, 0x64, 0xc8, 0xfc, 0x84, 0x0f, 0xcf, 0xc9, 0xa9, 0x1c, 0x5c, - 0x85, 0x27, 0xe7, 0x09, 0x5d, 0xcd, 0x13, 0x06, 0x4c, 0xa1, 0xc3, 0x09, 0x4d, 0xfc, 0xcd, 0x9d, - 0x19, 0xda, 0x11, 0x69, 0xa3, 0x20, 0xcf, 0x69, 0x9e, 0x07, 0x82, 0xc8, 0x11, 0x99, 0xa3, 0x69, - 0x11, 0xc1, 0x27, 0x7f, 0xd1, 0x1f, 0x16, 0x34, 0x2d, 0x5a, 0xd7, 0x55, 0xee, 0xa9, 0x35, 0xd8, - 0x73, 0xb0, 0x18, 0xa7, 0x7b, 0xc5, 0xe0, 0x76, 0xd2, 0xa1, 0x08, 0xf7, 0x0a, 0x9f, 0x3b, 0x95, - 0x8a, 0x33, 0xde, 0x88, 0x52, 0x4d, 0xc1, 0x28, 0x57, 0x05, 0xe6, 0x07, 0x3a, 0x2c, 0xde, 0x8c, - 0x06, 0xb6, 0xef, 0x7e, 0x17, 0xcb, 0x4d, 0x5c, 0xc0, 0x27, 0x49, 0xb9, 0xab, 0xd0, 0x61, 0xfe, - 0xc0, 0x73, 0xe3, 0x83, 0x9d, 0xc2, 0x6f, 0x32, 0x4b, 0x76, 0xf6, 0xd4, 0xa8, 0xa4, 0xdc, 0x54, - 0x92, 0xf2, 0x32, 0xb4, 0x86, 0xc1, 0x9e, 0xeb, 0x65, 0x71, 0x2f, 0x28, 0x8c, 0x79, 0xe6, 0x31, - 0xcc, 0xce, 0x79, 0xcc, 0x67, 0x8c, 0x22, 0x51, 0xcf, 0xd4, 0x26, 0xea, 0xb6, 0x9c, 0xa8, 0x55, - 0xc7, 0x43, 0xc5, 0xf1, 0xe4, 0xae, 0x4e, 0xee, 0xae, 0x3f, 0x6a, 0xb0, 0x58, 0xb8, 0x9b, 0x6a, - 0xd0, 0x91, 0xee, 0x2a, 0x47, 0xa0, 0x5e, 0x13, 0x81, 0x79, 0xdc, 0x34, 0xe4, 0xb8, 0xe1, 0x91, - 0x16, 0xc4, 0xae, 0x54, 0xef, 0xe7, 0x34, 0xef, 0xcd, 0x63, 0xb6, 0xe4, 0x2c, 0xa2, 0xa4, 0xaa, - 0xbb, 0xa5, 0x54, 0xdd, 0xe5, 0x3c, 0xfa, 0x3b, 0x0d, 0xce, 0x73, 0x94, 0x2b, 0xc3, 0xb8, 0x09, - 0x8b, 0x41, 0x29, 0x12, 0x44, 0xa2, 0x79, 0xba, 0x26, 0x51, 0x94, 0x83, 0xc6, 0xaa, 0x08, 0x73, - 0x85, 0x4e, 0xa9, 0x13, 0x91, 0x79, 0xea, 0x14, 0x96, 0xed, 0xb1, 0x2a, 0xc2, 0xe6, 0xef, 0x35, - 0x58, 0xa4, 0xd4, 0x26, 0xcd, 0xf3, 0x33, 0x37, 0xfb, 0x1d, 0x38, 0x5f, 0xee, 0xf9, 0x86, 0x1b, - 0x27, 0x5d, 0x7d, 0xb5, 0x31, 0xae, 0xe9, 0xb5, 0x0a, 0xf8, 0x5c, 0x7b, 0x72, 0x37, 0xf5, 0xbc, - 0x6d, 0x16, 0xc7, 0xf6, 0x80, 0x6d, 0xdc, 0xef, 0xb1, 0x23, 0xfe, 0xc1, 0x62, 0x47, 0x23, 0x63, - 0x88, 0xd7, 0x39, 0x58, 0x28, 0xb8, 0x81, 0x9f, 0x87, 0x90, 0xcc, 0xe2, 0xd3, 0x2a, 0x26, 0x3d, - 0xdd, 0xc6, 0x6a, 0x83, 0xa7, 0x50, 0x41, 0x1a, 0xdf, 0x81, 0x59, 0xcc, 0xe1, 0xa2, 0x9b, 0xee, - 0x14, 0x0e, 0xe0, 0xb5, 0xda, 0xaa, 0xa1, 0xd6, 0x2a, 0xaa, 0x06, 0x04, 0xfd, 0x86, 0x9f, 0x44, - 0xf7, 0x2d, 0x45, 0xe3, 0xca, 0xbb, 0xb0, 0x54, 0x69, 0x62, 0x2c, 0x42, 0xe3, 0x90, 0xdd, 0x17, - 0xe3, 0xe0, 0x3f, 0x8d, 0x17, 0xa0, 0x79, 0x6c, 0x7b, 0x29, 0x13, 0xe8, 0xaf, 0xd4, 0x58, 0x20, - 0x6c, 0xb6, 0xa8, 0xe1, 0x2b, 0xfa, 0x57, 0x35, 0xf3, 0xe9, 0x7c, 0x60, 0xf2, 0x18, 0x35, 0x65, - 0x8c, 0xe6, 0x5b, 0xd0, 0xd9, 0x8e, 0x07, 0x5b, 0x76, 0x62, 0x63, 0xc3, 0xd7, 0xa0, 0x33, 0x2c, - 0x48, 0x6c, 0x5c, 0xdf, 0x9f, 0x10, 0xb2, 0xe4, 0xe6, 0xe6, 0x5f, 0x74, 0xe8, 0xd6, 0xbb, 0x22, - 0x0e, 0xb9, 0x0d, 0x2c, 0x8a, 0x36, 0x03, 0x87, 0xe1, 0xd0, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, - 0x14, 0xf1, 0x1c, 0x26, 0x8a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, - 0xb6, 0x33, 0x86, 0xb0, 0x88, 0xde, 0x95, 0x06, 0x24, 0x30, 0x5b, 0x1f, 0x1b, 0xb3, 0x38, 0x24, - 0xd0, 0x24, 0x1d, 0x04, 0x5c, 0x45, 0xf5, 0x4a, 0x1f, 0x9e, 0xa8, 0x6d, 0x5a, 0x03, 0xe0, 0x57, - 0x54, 0x00, 0x2f, 0x8e, 0x1e, 0x4a, 0x19, 0xc4, 0x10, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, 0xad, - 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xed, 0x79, 0x0e, 0x53, - 0xdb, 0x92, 0x59, 0x23, 0x77, 0xed, 0xa5, 0xf9, 0xd0, 0xa8, 0xcc, 0x07, 0xf3, 0x32, 0xcc, 0xca, - 0xdd, 0x61, 0x12, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x0e, 0x68, 0xce, 0x12, 0x14, 0xf2, 0xb1, 0x85, - 0xd8, 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xe3, - 0xa5, 0x31, 0x2a, 0x5e, 0xa6, 0x94, 0x78, 0x39, 0x84, 0x25, 0x02, 0x49, 0xea, 0xba, 0xdb, 0xc4, - 0x00, 0x78, 0xbd, 0xae, 0x54, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, - 0x83, 0xe5, 0xfa, 0xc6, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xd9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, - 0xfc, 0x8f, 0x60, 0x81, 0x2f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x1d, 0xb9, 0x0a, 0x1d, - 0x92, 0xdf, 0x8e, 0x07, 0xc5, 0xd6, 0x4d, 0x62, 0xf1, 0x16, 0x7d, 0xcf, 0xe5, 0x8b, 0x27, 0xb6, - 0x10, 0x8b, 0x9e, 0xc4, 0xe2, 0x09, 0x32, 0x66, 0xe2, 0x24, 0x83, 0x7b, 0xb7, 0x61, 0xe5, 0xb4, - 0xf9, 0x7e, 0x0b, 0xa6, 0x45, 0x34, 0x62, 0x52, 0xe4, 0xbb, 0xe5, 0x7c, 0x59, 0x25, 0x8a, 0xea, - 0xda, 0xfe, 0x71, 0x11, 0x5e, 0x44, 0xc9, 0xc7, 0x48, 0x0d, 0xf5, 0x18, 0xa9, 0x64, 0xd3, 0x54, - 0xd5, 0xa6, 0xd2, 0xb8, 0x9a, 0xd5, 0x71, 0xf1, 0x32, 0x0e, 0x2b, 0x9b, 0x5d, 0xcf, 0x4e, 0xf6, - 0x83, 0x68, 0x28, 0x36, 0xbf, 0x4d, 0xab, 0xc2, 0xe7, 0xa5, 0x23, 0xf1, 0xf2, 0xda, 0x9f, 0x52, - 0x78, 0x89, 0xcb, 0x2b, 0x6d, 0xe2, 0x64, 0x7b, 0x00, 0x3a, 0x75, 0x50, 0x99, 0x64, 0x5b, 0x1c, - 0xbb, 0x81, 0x8f, 0x55, 0x28, 0x95, 0xfa, 0x32, 0x8b, 0x8f, 0x7c, 0x18, 0x0f, 0xae, 0x44, 0xc1, - 0x50, 0x9c, 0x3d, 0x64, 0x24, 0x8e, 0x3c, 0xf0, 0x93, 0xac, 0x82, 0xed, 0x90, 0xac, 0xc4, 0xe2, - 0xb2, 0x82, 0xc4, 0x3a, 0x7f, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0xc5, 0x3b, 0xff, - 0xa9, 0x20, 0xb7, 0xa0, 0x22, 0x57, 0xaa, 0xc6, 0x16, 0xf1, 0xab, 0x5c, 0x8d, 0x15, 0x25, 0xce, - 0x92, 0x52, 0xe2, 0xac, 0xc3, 0x74, 0x10, 0xf2, 0xe9, 0x1f, 0x77, 0x0d, 0x9c, 0x2e, 0x9f, 0x1f, - 0xbd, 0x40, 0x5d, 0xba, 0x49, 0x2d, 0x69, 0x62, 0x64, 0x72, 0xc6, 0x0d, 0x58, 0x08, 0xf6, 0xf7, - 0x3d, 0xd7, 0x67, 0xbb, 0x69, 0x7c, 0x80, 0x9b, 0xe4, 0x73, 0x18, 0xec, 0x66, 0x5d, 0x11, 0xa1, - 0xb6, 0xb4, 0xca, 0xa2, 0xbc, 0xf2, 0xb3, 0x13, 0xda, 0xe4, 0xe0, 0x02, 0x77, 0x1e, 0x17, 0x38, - 0x85, 0x87, 0xe7, 0x71, 0xd2, 0x42, 0xff, 0x04, 0x3a, 0x4e, 0x66, 0xad, 0xbc, 0x02, 0xb3, 0xb2, - 0xb1, 0x35, 0x13, 0xf3, 0xbc, 0x3c, 0x31, 0x67, 0xe4, 0x79, 0xf7, 0x63, 0x0d, 0x16, 0x4a, 0x66, - 0xf2, 0xd6, 0x89, 0x9b, 0x78, 0x4c, 0x68, 0x20, 0x82, 0xef, 0x74, 0x1c, 0x16, 0xf7, 0xc5, 0x44, - 0xc0, 0xdf, 0xa2, 0x66, 0x6c, 0xe4, 0xe7, 0x57, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, - 0x48, 0x7d, 0x27, 0x3f, 0x83, 0x96, 0x78, 0x3c, 0x10, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, - 0x3a, 0x29, 0x6e, 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, - 0xc8, 0xe1, 0x74, 0x58, 0xc2, 0x6b, 0x72, 0x0d, 0x07, 0x2f, 0x28, 0xee, 0x19, 0x87, 0xed, 0xdb, - 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xf4, 0x97, 0x58, 0x78, 0x46, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, - 0x9d, 0x12, 0xc7, 0xfc, 0x93, 0x0e, 0x8b, 0xb8, 0xba, 0x6d, 0x62, 0xf0, 0x38, 0x28, 0xf4, 0x22, - 0x34, 0x71, 0x32, 0x8b, 0xea, 0xf0, 0xe4, 0xd3, 0x0f, 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, - 0x49, 0x49, 0x4b, 0xdf, 0x33, 0xa3, 0x84, 0xd4, 0xe3, 0x68, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, - 0x45, 0x05, 0x49, 0x85, 0xc0, 0xb8, 0x3a, 0x24, 0x49, 0xee, 0xdc, 0x3c, 0xc7, 0xe5, 0x67, 0xd2, - 0x0d, 0x4b, 0x65, 0x1a, 0x3b, 0x30, 0x8f, 0x66, 0xdf, 0xcc, 0x8e, 0xc1, 0x10, 0x83, 0xf1, 0x7b, - 0x2c, 0x49, 0x9b, 0x3f, 0xd7, 0x84, 0x1b, 0xf9, 0xd7, 0x1e, 0x23, 0xdf, 0x17, 0x2e, 0xd1, 0x26, - 0x72, 0xc9, 0x0a, 0xcc, 0x0c, 0x53, 0xe9, 0x54, 0xae, 0x61, 0xe5, 0x74, 0x01, 0x51, 0x63, 0x6c, - 0x88, 0xcc, 0x5f, 0x68, 0xd0, 0x7d, 0x33, 0x70, 0x7d, 0xfc, 0xb0, 0x1e, 0x86, 0x9e, 0xb8, 0x38, - 0x99, 0x18, 0xf3, 0xaf, 0x43, 0xdb, 0x26, 0x35, 0x7e, 0x22, 0x60, 0x1f, 0xe3, 0xa4, 0xad, 0x90, - 0x91, 0x0e, 0x4d, 0x1a, 0xf2, 0xa1, 0x89, 0xf9, 0xa1, 0x06, 0xf3, 0xe4, 0x94, 0xb7, 0x53, 0x37, - 0x99, 0xd8, 0xbe, 0x0d, 0x98, 0x39, 0x4a, 0xdd, 0x64, 0x82, 0xa8, 0xcc, 0xe5, 0xaa, 0xf1, 0xd4, - 0xa8, 0x89, 0x27, 0xf3, 0x23, 0x0d, 0x2e, 0x94, 0xdd, 0xba, 0xde, 0xef, 0xb3, 0xf0, 0x61, 0x4e, - 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, 0xb2, 0xc5, 0xee, 0xb0, 0xfe, 0xa3, 0x6b, - 0xf2, 0xf7, 0x75, 0xf8, 0xf4, 0xd5, 0x7c, 0xe2, 0xdd, 0x8a, 0x6c, 0x3f, 0xde, 0x67, 0x51, 0xf4, - 0x10, 0xed, 0xbd, 0x01, 0x73, 0x3e, 0xbb, 0x5b, 0xd8, 0x24, 0xa6, 0xe3, 0xb8, 0x6a, 0x54, 0xe1, - 0xf1, 0xd6, 0x2e, 0xf3, 0x3f, 0x1a, 0x2c, 0x92, 0x9e, 0xb7, 0xdc, 0xfe, 0xe1, 0x43, 0x1c, 0xfc, - 0x0e, 0xcc, 0x1f, 0xa2, 0x05, 0x9c, 0x9a, 0x60, 0xd9, 0x2e, 0x49, 0x8f, 0x39, 0xfc, 0xff, 0x6a, - 0xb0, 0x44, 0x8a, 0xae, 0xfb, 0xc7, 0xee, 0xc3, 0x0c, 0xd6, 0x5d, 0x58, 0x70, 0xc9, 0x84, 0x09, - 0x1d, 0x50, 0x16, 0x1f, 0xd3, 0x03, 0xbf, 0xd5, 0x60, 0x81, 0x34, 0xbd, 0xe1, 0x27, 0x2c, 0x9a, - 0x78, 0xfc, 0xd7, 0xa0, 0xc3, 0xfc, 0x24, 0xb2, 0xfd, 0x49, 0x56, 0x48, 0x59, 0x74, 0xcc, 0x45, - 0xf2, 0x43, 0x0d, 0x0c, 0x54, 0xb5, 0xe5, 0xc6, 0x43, 0x37, 0x8e, 0x1f, 0x22, 0x74, 0xe3, 0x19, - 0xfc, 0x53, 0x1d, 0xce, 0x4b, 0x5a, 0xb6, 0xd3, 0xe4, 0x51, 0x37, 0xd9, 0xd8, 0x82, 0x36, 0xaf, - 0x11, 0xe4, 0xdb, 0xc8, 0x71, 0x3b, 0x2a, 0x04, 0x79, 0x15, 0x8b, 0x44, 0x8f, 0xf5, 0x03, 0xdf, - 0x89, 0xb1, 0x38, 0x9a, 0xb3, 0x14, 0x1e, 0x5f, 0x86, 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, - 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0x53, 0x93, 0x47, 0x7f, 0xc8, 0x3c, 0xd7, 0x53, - 0x20, 0x7f, 0x62, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, 0x91, 0xeb, 0xea, 0x47, 0x37, 0xb4, 0xae, - 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x80, - 0xdf, 0xa4, 0x4f, 0x38, 0xfc, 0x97, 0x4a, 0x43, 0x39, 0xf1, 0xb5, 0xc1, 0x83, 0x39, 0xfd, 0x10, - 0x96, 0xe8, 0xd6, 0x57, 0xaa, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x43, 0x68, 0x28, 0x94, - 0x91, 0xea, 0x7d, 0xbe, 0x78, 0xb2, 0x55, 0xdc, 0xe7, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, - 0x72, 0x5c, 0x3f, 0x2b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, - 0xfe, 0xf6, 0xc4, 0x1b, 0x66, 0xf9, 0xee, 0x57, 0x57, 0xef, 0x7e, 0xcd, 0x6f, 0xc3, 0x13, 0x15, - 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x2d, 0x9d, 0x75, 0x22, 0x42, 0xa6, 0xee, 0x5c, 0x4e, 0xb6, 0xc5, - 0x52, 0x84, 0xcc, 0xf7, 0x35, 0x78, 0xaa, 0xa2, 0x7e, 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, - 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc1, 0x88, - 0x5f, 0x6a, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, 0xcb, 0xd0, 0xa2, 0x27, 0x2d, 0xa2, 0xc3, - 0xa7, 0x6a, 0x3b, 0xcc, 0x9e, 0xe2, 0x58, 0xa2, 0x71, 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0xb5, - 0x3c, 0xd8, 0xc7, 0x7e, 0x74, 0x22, 0x04, 0xcc, 0x6f, 0x66, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, - 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0xaf, 0x29, 0x7c, 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, - 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x97, 0xe1, 0x5c, - 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, 0xa7, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, - 0x3f, 0x66, 0x51, 0x4c, 0x17, 0x89, 0x28, 0x92, 0x49, 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, - 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x50, 0x6b, 0xca, 0x01, 0x75, - 0x71, 0xa0, 0xad, 0x2b, 0x07, 0xda, 0x17, 0xa0, 0xed, 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, - 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xc2, 0x08, 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, - 0x93, 0x9c, 0x1e, 0x79, 0xfd, 0x32, 0xf2, 0xb2, 0xd1, 0xec, 0xc1, 0x92, 0x78, 0x54, 0xb3, 0x6b, - 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, 0xc8, 0x1e, 0xd5, 0xd1, 0xb5, 0x99, 0xc4, - 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, 0xf7, 0x82, 0x63, 0x7e, 0x03, 0x0c, 0x8b, - 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, - 0x5e, 0x98, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, 0x23, 0x76, 0x89, 0x63, 0xfe, 0xac, 0x01, - 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, - 0xba, 0x23, 0x5f, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, 0x5d, 0xfb, 0x94, 0x25, 0x64, 0x8c, 0xb7, - 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, 0xbe, 0x70, 0x8a, 0x12, 0xd1, 0x9a, 0x74, - 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, - 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, - 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, - 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, - 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, 0xe6, 0x07, 0x0d, 0x80, 0xac, 0x61, 0x8c, - 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x5f, - 0x1c, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, - 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, - 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, - 0x3e, 0xd2, 0x61, 0x1e, 0x5d, 0x46, 0xb7, 0xb0, 0xfe, 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, - 0x8d, 0xa6, 0xca, 0x34, 0xbe, 0x04, 0x4b, 0xc4, 0x60, 0xd2, 0x75, 0x89, 0x8e, 0xd7, 0x25, 0xd5, - 0x0f, 0x78, 0x41, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, - 0x7d, 0x37, 0x55, 0x79, 0x05, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0x97, 0x13, 0x14, 0x97, 0x48, 0xdc, - 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xef, 0xa8, 0x1c, 0xd7, 0xc6, 0x4b, 0x2f, 0xf1, - 0xc8, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xe2, 0x89, 0x57, 0xda, 0x05, 0xe7, 0xf4, 0x0b, 0x37, - 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, - 0x71, 0x0c, 0xca, 0x43, 0x4d, 0xed, 0xc1, 0x1e, 0x6a, 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, - 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x3a, 0x6d, 0x3c, 0xf0, 0xab, 0x53, 0xf3, 0x87, 0x3a, 0x2c, - 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, - 0x59, 0x92, 0x50, 0xdd, 0x4d, 0x5e, 0x63, 0xf2, 0x9b, 0xbc, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, - 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, - 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, - 0xac, 0x5d, 0x90, 0xe6, 0x8f, 0x74, 0x58, 0xae, 0xcf, 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, - 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, - 0x96, 0x52, 0x9d, 0xf9, 0x9b, 0xdc, 0x3f, 0x79, 0xa5, 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, - 0x69, 0x98, 0xd2, 0xd3, 0x0f, 0x2a, 0x5c, 0x2b, 0xfc, 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, - 0xec, 0x1f, 0xb4, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x44, 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, - 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, - 0x83, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0x6d, 0xea, 0x99, 0x6e, 0x14, 0xcb, 0x2f, 0xf8, - 0xa6, 0xaa, 0x2f, 0xf8, 0x36, 0x60, 0x5e, 0x36, 0x60, 0x92, 0xb7, 0x97, 0x1b, 0x17, 0xbe, 0xb5, - 0x72, 0xe9, 0x79, 0xfa, 0x1f, 0xe7, 0xab, 0x15, 0x27, 0xee, 0xb5, 0xf0, 0x7f, 0x9d, 0x2f, 0xfd, - 0x2f, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x19, 0x19, 0x47, 0xea, 0x39, 0x00, 0x00, + 0xf1, 0xff, 0x77, 0x8f, 0x67, 0xec, 0xa9, 0xf1, 0x67, 0xef, 0xc6, 0x99, 0xbf, 0xff, 0x9b, 0xfd, + 0x9b, 0x8e, 0x15, 0x42, 0x80, 0x4d, 0x94, 0x10, 0x09, 0xf2, 0xb1, 0xc8, 0x1f, 0xd9, 0x8f, 0x64, + 0xc7, 0x76, 0x7a, 0x76, 0x09, 0x22, 0x48, 0xa1, 0x3d, 0xfd, 0x3c, 0xee, 0xb8, 0xa7, 0xbb, 0xdd, + 0x1f, 0xde, 0x5d, 0x2e, 0x48, 0x41, 0x42, 0xdc, 0x38, 0x71, 0xe1, 0x82, 0xc4, 0x05, 0x81, 0xa2, + 0x28, 0x42, 0x20, 0x71, 0x40, 0x08, 0x21, 0x6e, 0x5c, 0xe0, 0x88, 0xb8, 0x71, 0xe6, 0xca, 0x01, + 0x09, 0x09, 0xf4, 0xaa, 0x5e, 0x77, 0xbf, 0xd7, 0xdd, 0x63, 0xcf, 0x5a, 0x56, 0x76, 0xa3, 0xe5, + 0x36, 0x55, 0xfd, 0xaa, 0x5e, 0xbd, 0xfa, 0xd5, 0x7b, 0x55, 0xef, 0x63, 0x60, 0x21, 0x76, 0x0e, + 0xdf, 0xbb, 0x1b, 0x3f, 0x7f, 0x37, 0xbe, 0x12, 0x46, 0x41, 0x12, 0x18, 0x4b, 0x31, 0x8b, 0x8e, + 0x59, 0xf4, 0x9e, 0x1d, 0xba, 0xef, 0x85, 0x76, 0x64, 0x8f, 0x62, 0xf3, 0x1f, 0x3a, 0xb4, 0xaf, + 0x47, 0x41, 0x1a, 0xde, 0xf4, 0xf7, 0x03, 0xa3, 0x0b, 0xd3, 0x43, 0x24, 0xb6, 0xba, 0xda, 0xaa, + 0xf6, 0x6c, 0xdb, 0xca, 0x48, 0xe3, 0x12, 0xb4, 0xf1, 0xe7, 0xb6, 0x3d, 0x62, 0x5d, 0x1d, 0xbf, + 0x15, 0x0c, 0xc3, 0x84, 0x59, 0x3f, 0x48, 0xdc, 0x7d, 0x77, 0x60, 0x27, 0x6e, 0xe0, 0x77, 0x1b, + 0xd8, 0x40, 0xe1, 0xf1, 0x36, 0xae, 0x9f, 0x44, 0x81, 0x93, 0x0e, 0xb0, 0xcd, 0x14, 0xb5, 0x91, + 0x79, 0xbc, 0xff, 0x7d, 0x7b, 0xc0, 0xee, 0x58, 0xb7, 0xba, 0x4d, 0xea, 0x5f, 0x90, 0xc6, 0x2a, + 0x74, 0x82, 0xbb, 0x3e, 0x8b, 0xee, 0xc4, 0x2c, 0xba, 0xb9, 0xd5, 0x6d, 0xe1, 0x57, 0x99, 0x65, + 0x5c, 0x06, 0x18, 0x44, 0xcc, 0x4e, 0xd8, 0x6d, 0x77, 0xc4, 0xba, 0xd3, 0xab, 0xda, 0xb3, 0x73, + 0x96, 0xc4, 0xe1, 0x1a, 0x46, 0x6c, 0xb4, 0xc7, 0xa2, 0xcd, 0x20, 0xf5, 0x93, 0xee, 0x0c, 0x36, + 0x90, 0x59, 0xc6, 0x3c, 0xe8, 0xec, 0x5e, 0xb7, 0x8d, 0xaa, 0x75, 0x76, 0xcf, 0x58, 0x86, 0x56, + 0x9c, 0xd8, 0x49, 0x1a, 0x77, 0x61, 0x55, 0x7b, 0xb6, 0x69, 0x09, 0xca, 0x58, 0x83, 0x39, 0xd4, + 0x1b, 0x64, 0xd6, 0x74, 0x50, 0x44, 0x65, 0xe6, 0x1e, 0xbb, 0x7d, 0x3f, 0x64, 0xdd, 0x59, 0x54, + 0x50, 0x30, 0xcc, 0xbf, 0xe8, 0x70, 0x01, 0xfd, 0xde, 0x43, 0x03, 0xae, 0xa5, 0x9e, 0x77, 0x0a, + 0x02, 0xcb, 0xd0, 0x4a, 0xa9, 0x3b, 0x72, 0xbf, 0xa0, 0x78, 0x3f, 0x51, 0xe0, 0xb1, 0x5b, 0xec, + 0x98, 0x79, 0xe8, 0xf8, 0xa6, 0x55, 0x30, 0x8c, 0x15, 0x98, 0x79, 0x3f, 0x70, 0x7d, 0xf4, 0xc9, + 0x14, 0x7e, 0xcc, 0x69, 0xfe, 0xcd, 0x77, 0x07, 0x87, 0x3e, 0x87, 0x94, 0xdc, 0x9d, 0xd3, 0x32, + 0x12, 0x2d, 0x15, 0x89, 0x67, 0x60, 0xde, 0x0e, 0xc3, 0x9e, 0xed, 0x0f, 0x59, 0x44, 0x9d, 0x4e, + 0xa3, 0xde, 0x12, 0x97, 0xe3, 0xc1, 0x7b, 0xea, 0x07, 0x69, 0x34, 0x60, 0xe8, 0xee, 0xa6, 0x25, + 0x71, 0xb8, 0x9e, 0x20, 0x64, 0x91, 0xe4, 0x46, 0xf2, 0x7c, 0x89, 0x2b, 0x50, 0x81, 0x1c, 0x15, + 0x8e, 0x63, 0x9a, 0xb0, 0x37, 0x7c, 0x07, 0x07, 0xd5, 0x11, 0x38, 0x16, 0x2c, 0xf3, 0x7b, 0x1a, + 0xcc, 0xef, 0xa6, 0x7b, 0x9e, 0x3b, 0x40, 0x15, 0xdc, 0xad, 0x85, 0xf3, 0x34, 0xc5, 0x79, 0xb2, + 0x0b, 0xf4, 0xf1, 0x2e, 0x68, 0xa8, 0x2e, 0x58, 0x86, 0xd6, 0x90, 0xf9, 0x0e, 0x8b, 0x84, 0x4b, + 0x05, 0x25, 0x4c, 0x6d, 0x66, 0xa6, 0x9a, 0xbf, 0xd7, 0x61, 0xe6, 0x13, 0x36, 0x61, 0x15, 0x3a, + 0xe1, 0x41, 0xe0, 0xb3, 0xed, 0x94, 0x87, 0x95, 0xb0, 0x45, 0x66, 0x19, 0x17, 0xa1, 0xb9, 0xe7, + 0x46, 0xc9, 0x01, 0xe2, 0x3a, 0x67, 0x11, 0xc1, 0xb9, 0x6c, 0x64, 0xbb, 0x04, 0x66, 0xdb, 0x22, + 0x42, 0x0c, 0x68, 0x26, 0xf7, 0xbd, 0x3a, 0xc7, 0xda, 0x95, 0x39, 0x56, 0x8d, 0x0d, 0xa8, 0x8d, + 0x8d, 0xe7, 0x60, 0x71, 0xe8, 0x05, 0x7b, 0xb6, 0x67, 0xb1, 0xc1, 0x71, 0x2f, 0x1e, 0xee, 0x84, + 0x09, 0x02, 0xd9, 0xb4, 0x2a, 0x7c, 0xf3, 0x9f, 0x1a, 0xc0, 0xb5, 0xc8, 0x65, 0xbe, 0x83, 0x6e, + 0x2c, 0x2d, 0x04, 0x5a, 0x75, 0x21, 0x58, 0x86, 0x56, 0xc4, 0x46, 0x76, 0x74, 0x98, 0x4d, 0x14, + 0xa2, 0x4a, 0xc6, 0x37, 0x2a, 0xc6, 0xbf, 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xd6, 0xce, + 0x8b, 0xff, 0x77, 0xa5, 0xb2, 0x64, 0x5e, 0xc9, 0x10, 0xb5, 0xa4, 0xe6, 0x7c, 0x16, 0xda, 0x8e, + 0x23, 0x82, 0xbd, 0x49, 0xb3, 0x30, 0x67, 0xd4, 0xc4, 0x7a, 0xeb, 0x84, 0x58, 0x9f, 0xce, 0x03, + 0xe8, 0xef, 0x1a, 0xb4, 0x37, 0x3c, 0x7b, 0x70, 0x38, 0xe1, 0xd0, 0xd5, 0x21, 0xea, 0x95, 0x21, + 0x5e, 0x87, 0xb9, 0x3d, 0xae, 0x2e, 0x1b, 0x02, 0x7a, 0xa1, 0xf3, 0xe2, 0x67, 0x6a, 0x46, 0xa9, + 0x4e, 0x20, 0x4b, 0x95, 0x53, 0x87, 0x3b, 0x75, 0xfa, 0x70, 0x9b, 0x27, 0x0c, 0xb7, 0x95, 0x0f, + 0xf7, 0xcf, 0x3a, 0xcc, 0xe2, 0xa2, 0x68, 0xb1, 0xa3, 0x94, 0xc5, 0x89, 0xf1, 0x3a, 0xcc, 0xa4, + 0x99, 0xa9, 0xda, 0xa4, 0xa6, 0xe6, 0x22, 0xc6, 0x2b, 0x62, 0x09, 0x46, 0x79, 0x1d, 0xe5, 0x2f, + 0xd5, 0xc8, 0xe7, 0xf9, 0xcf, 0x2a, 0x9a, 0xf3, 0x74, 0x75, 0x60, 0xfb, 0x8e, 0xc7, 0x2c, 0x16, + 0xa7, 0x5e, 0x22, 0x56, 0x56, 0x85, 0x47, 0x91, 0x76, 0xd4, 0x8b, 0x87, 0x22, 0x99, 0x09, 0x8a, + 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, 0x82, 0xc1, 0x27, 0x75, 0xc4, 0x8e, 0x10, 0x21, 0x9a, + 0x82, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, + 0x62, 0x12, 0xa7, 0x9c, 0xc4, 0xcc, 0xbf, 0x36, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0xcb, 0x3c, + 0xce, 0x83, 0x91, 0x12, 0x45, 0x12, 0x87, 0x5b, 0xc1, 0xa9, 0x6d, 0x75, 0x51, 0x52, 0x78, 0x3c, + 0x14, 0x39, 0x7d, 0x4d, 0x59, 0x9c, 0x64, 0x56, 0xd6, 0xcb, 0x75, 0x79, 0x91, 0x92, 0x38, 0x7c, + 0xd9, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, + 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x3b, 0x39, 0x5d, + 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, + 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0xca, 0x02, 0x85, 0xa9, 0xc6, 0xc6, 0x5c, 0x39, 0x36, 0x54, 0x74, + 0xe7, 0xc7, 0xa0, 0xbb, 0x90, 0xa3, 0xfb, 0x0b, 0x1d, 0x60, 0x8b, 0x85, 0x76, 0x94, 0x8c, 0x98, + 0x9f, 0xf0, 0xe1, 0x39, 0x39, 0x95, 0x83, 0xab, 0xf0, 0xe4, 0x9c, 0xa2, 0xab, 0x39, 0xc5, 0x80, + 0x29, 0x74, 0x38, 0xa1, 0x89, 0xbf, 0xb9, 0x33, 0x43, 0x3b, 0x22, 0x6d, 0x14, 0xe4, 0x39, 0xcd, + 0x73, 0x46, 0x10, 0x39, 0x22, 0xcb, 0x34, 0x2d, 0x22, 0xf8, 0xe4, 0x2f, 0xfa, 0xc3, 0xe2, 0xa7, + 0x45, 0x39, 0x40, 0xe5, 0x9e, 0x5a, 0xaf, 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x3b, + 0x1d, 0x89, 0x70, 0xaf, 0xf0, 0xb9, 0x53, 0xa9, 0x90, 0xe3, 0x8d, 0x28, 0x2d, 0x15, 0x8c, 0x72, + 0x05, 0x61, 0x7e, 0xa8, 0xc3, 0xe2, 0x4e, 0x34, 0xb4, 0x7d, 0xf7, 0xdb, 0x58, 0x9a, 0xe2, 0x02, + 0x7e, 0x96, 0xf4, 0xbc, 0x0a, 0x1d, 0xe6, 0x0f, 0x3d, 0x37, 0x3e, 0xd8, 0x2e, 0xfc, 0x26, 0xb3, + 0x64, 0x67, 0x4f, 0x8d, 0x4b, 0xe0, 0x4d, 0x25, 0x81, 0x2f, 0x43, 0x6b, 0x14, 0xec, 0xb9, 0x5e, + 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, 0xc3, 0x4c, 0x9e, 0xc7, 0x7c, 0xc6, 0x28, 0x92, 0xfa, + 0x4c, 0x6d, 0x52, 0x6f, 0xcb, 0x49, 0x5d, 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, + 0xfa, 0x9d, 0x06, 0x8b, 0x85, 0xbb, 0xa9, 0x5e, 0x1d, 0xeb, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, + 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, 0x69, 0x41, 0xec, 0x4a, 0x7b, 0x83, 0x9c, 0xe6, 0xbd, + 0x79, 0xcc, 0x96, 0x9c, 0x45, 0x94, 0x54, 0xa1, 0xb7, 0x94, 0x0a, 0xbd, 0x9c, 0x47, 0x7f, 0xad, + 0xc1, 0x45, 0x8e, 0x72, 0x65, 0x18, 0x3b, 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, + 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, + 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x46, 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x77, 0xb3, + 0xdf, 0x81, 0x8b, 0xe5, 0x9e, 0x6f, 0xb9, 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0x93, 0x9a, 0x5e, 0xab, + 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, 0xeb, 0xb1, 0x38, 0xb6, 0x87, 0x6c, 0xe3, 0x7e, 0x9f, + 0x1d, 0xf1, 0x0f, 0x16, 0x3b, 0x1a, 0x1b, 0x43, 0xbc, 0xce, 0xc1, 0x42, 0xc1, 0x0d, 0xfc, 0x3c, + 0x84, 0x64, 0x16, 0x9f, 0x56, 0x31, 0xe9, 0xe9, 0x36, 0x56, 0x1b, 0x3c, 0x85, 0x0a, 0xd2, 0xf8, + 0x16, 0xcc, 0x62, 0x0e, 0x17, 0xdd, 0x74, 0xa7, 0x70, 0x00, 0xaf, 0xd5, 0x56, 0x0d, 0xb5, 0x56, + 0x51, 0x35, 0x20, 0xe8, 0x37, 0xfc, 0x24, 0xba, 0x6f, 0x29, 0x1a, 0x57, 0xde, 0x85, 0xa5, 0x4a, + 0x13, 0x63, 0x11, 0x1a, 0x87, 0xec, 0xbe, 0x18, 0x07, 0xff, 0x69, 0xbc, 0x00, 0xcd, 0x63, 0xdb, + 0x4b, 0x99, 0x40, 0x7f, 0xa5, 0xc6, 0x02, 0x61, 0xb3, 0x45, 0x0d, 0x5f, 0xd1, 0xbf, 0xac, 0x99, + 0x4f, 0xe7, 0x03, 0x93, 0xc7, 0xa8, 0x29, 0x63, 0x34, 0xdf, 0x82, 0x4e, 0x2f, 0x1e, 0x6e, 0xd9, + 0x89, 0x8d, 0x0d, 0x5f, 0x83, 0xce, 0xa8, 0x20, 0xb1, 0x71, 0x7d, 0x7f, 0x42, 0xc8, 0x92, 0x9b, + 0x9b, 0x7f, 0xd2, 0xa1, 0x5b, 0xef, 0x8a, 0x38, 0xe4, 0x36, 0xb0, 0x28, 0xda, 0x0c, 0x1c, 0x86, + 0x43, 0x6b, 0x5a, 0x19, 0xc9, 0xb1, 0x63, 0x51, 0xc4, 0x73, 0x98, 0x28, 0xb2, 0x89, 0x32, 0xae, + 0xc0, 0x94, 0x97, 0xc1, 0x72, 0xb2, 0x15, 0xd8, 0xce, 0x18, 0xc1, 0x22, 0x7a, 0x57, 0x1a, 0x90, + 0xc0, 0x6c, 0x7d, 0x62, 0xcc, 0xe2, 0x90, 0x40, 0x93, 0x74, 0x10, 0x70, 0x15, 0xd5, 0x2b, 0x03, + 0x78, 0xa2, 0xb6, 0x69, 0x0d, 0x80, 0x5f, 0x52, 0x01, 0xbc, 0x3c, 0x7e, 0x28, 0x65, 0x10, 0x43, + 0x30, 0xae, 0xb3, 0xa4, 0x67, 0xdf, 0x5b, 0xf7, 0x9d, 0x9e, 0xeb, 0xf7, 0xd9, 0x11, 0x8f, 0xf6, + 0x55, 0xe8, 0x88, 0xad, 0x7c, 0x0e, 0x53, 0xdb, 0x92, 0x59, 0x63, 0x77, 0xf8, 0xa5, 0xf9, 0xd0, + 0xa8, 0xcc, 0x07, 0xf3, 0x2a, 0xcc, 0xca, 0xdd, 0x61, 0x12, 0xb1, 0xef, 0xf5, 0xd9, 0x11, 0x0e, + 0x68, 0xce, 0x12, 0x14, 0xf2, 0xb1, 0x85, 0xd8, 0x1b, 0x08, 0xca, 0xfc, 0xa3, 0x0e, 0x17, 0x2a, + 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xe3, 0xa5, 0x31, 0x2e, 0x5e, 0xa6, 0x94, 0x78, 0x39, 0x84, + 0x25, 0x02, 0x49, 0xea, 0xba, 0xdb, 0xc4, 0x00, 0x78, 0xbd, 0xae, 0x54, 0xaf, 0x1a, 0x29, 0xb0, + 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, 0x83, 0xe5, 0xfa, 0xc6, 0x35, 0xf0, 0xbf, 0xac, 0xc2, + 0xff, 0xff, 0x75, 0xf0, 0xcb, 0x96, 0x48, 0xf8, 0x1f, 0xc1, 0x02, 0x5f, 0x54, 0xfb, 0xcc, 0x77, + 0x7a, 0xf1, 0x10, 0x1d, 0xb9, 0x0a, 0x1d, 0x92, 0xef, 0xc5, 0xc3, 0x62, 0xeb, 0x26, 0xb1, 0x78, + 0x8b, 0x81, 0xe7, 0xf2, 0xc5, 0x13, 0x5b, 0x88, 0x45, 0x4f, 0x62, 0xf1, 0x04, 0x19, 0x33, 0x71, + 0xea, 0xc1, 0xbd, 0xdb, 0xb0, 0x72, 0xda, 0xfc, 0xa0, 0x05, 0xd3, 0x22, 0x1a, 0x31, 0x29, 0xf2, + 0xdd, 0x72, 0xbe, 0xac, 0x12, 0x45, 0x75, 0xed, 0xe0, 0xb8, 0x08, 0x2f, 0xa2, 0xe4, 0x23, 0xa7, + 0x86, 0x7a, 0xe4, 0x54, 0xb2, 0x69, 0xaa, 0x6a, 0x53, 0x69, 0x5c, 0xcd, 0xea, 0xb8, 0x78, 0x19, + 0x87, 0x95, 0xcd, 0xae, 0x67, 0x27, 0xfb, 0x41, 0x34, 0x12, 0x9b, 0xdf, 0xa6, 0x55, 0xe1, 0xf3, + 0xd2, 0x91, 0x78, 0x79, 0xed, 0x4f, 0x29, 0xbc, 0xc4, 0xe5, 0x95, 0x36, 0x71, 0xb2, 0x3d, 0x00, + 0x9d, 0x50, 0xa8, 0x4c, 0xb2, 0x2d, 0x8e, 0xdd, 0xc0, 0xc7, 0x2a, 0x94, 0x4a, 0x7d, 0x99, 0xc5, + 0x47, 0x3e, 0x8a, 0x87, 0xd7, 0xa2, 0x60, 0x24, 0xce, 0x29, 0x32, 0x12, 0x47, 0x1e, 0xf8, 0x49, + 0x56, 0xc1, 0xd2, 0xd9, 0x84, 0xcc, 0xe2, 0xb2, 0x82, 0xc4, 0x3a, 0x7f, 0xd6, 0xca, 0x48, 0x1e, + 0x4b, 0x31, 0x3b, 0x12, 0xc5, 0x3b, 0xff, 0xa9, 0x20, 0xb7, 0xa0, 0x22, 0x57, 0xaa, 0xc6, 0x16, + 0xf1, 0xab, 0x5c, 0x8d, 0x15, 0x25, 0xce, 0x92, 0x52, 0xe2, 0xac, 0xc3, 0x74, 0x10, 0xf2, 0xe9, + 0x1f, 0x77, 0x0d, 0x9c, 0x2e, 0x9f, 0x1d, 0xbf, 0x40, 0x5d, 0xd9, 0xa1, 0x96, 0x34, 0x31, 0x32, + 0x39, 0xe3, 0x16, 0x2c, 0x04, 0xfb, 0xfb, 0x9e, 0xeb, 0xb3, 0xdd, 0x34, 0x3e, 0xc0, 0x4d, 0xf2, + 0x05, 0x0c, 0x76, 0xb3, 0xae, 0x88, 0x50, 0x5b, 0x5a, 0x65, 0x51, 0x5e, 0xf9, 0xd9, 0x09, 0x6d, + 0x72, 0x70, 0x81, 0xbb, 0x88, 0x0b, 0x9c, 0xc2, 0xc3, 0xb3, 0x3b, 0x69, 0xa1, 0x7f, 0x02, 0x1d, + 0x27, 0xb3, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0xd8, 0x9a, 0x89, 0x79, 0x51, 0x9e, 0x98, 0x33, 0xf2, + 0xbc, 0xfb, 0xa1, 0x06, 0x0b, 0x25, 0x33, 0x79, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, + 0x77, 0x3a, 0x0e, 0x8b, 0x07, 0x62, 0x22, 0xe0, 0x6f, 0x51, 0x33, 0x36, 0xf2, 0xb3, 0x2e, 0x13, + 0x66, 0xdd, 0x9d, 0x3e, 0x57, 0xd4, 0x0f, 0x52, 0xdf, 0xc9, 0xcf, 0xab, 0x25, 0x1e, 0x0f, 0x44, + 0x77, 0xa7, 0xbf, 0x61, 0x3b, 0x43, 0x46, 0xa7, 0xca, 0x4d, 0xb4, 0x49, 0x65, 0x9a, 0x0e, 0xcc, + 0xdc, 0x76, 0xc3, 0x78, 0x33, 0x18, 0x8d, 0x38, 0x9c, 0x0e, 0x4b, 0x78, 0x4d, 0xae, 0xe1, 0xe0, + 0x05, 0xc5, 0x3d, 0xe3, 0xb0, 0x7d, 0x3b, 0xf5, 0x12, 0xde, 0x34, 0x9b, 0xfe, 0x12, 0x0b, 0xcf, + 0x53, 0xe3, 0xc0, 0xdf, 0x22, 0x69, 0xb2, 0x53, 0xe2, 0x98, 0x7f, 0xd0, 0x61, 0x11, 0x57, 0xb7, + 0x4d, 0x0c, 0x1e, 0x07, 0x85, 0x5e, 0x84, 0x26, 0x4e, 0x66, 0x51, 0x1d, 0x9e, 0x7c, 0xfa, 0x41, + 0x4d, 0x8d, 0xab, 0xd0, 0x0a, 0x42, 0x2c, 0x29, 0x69, 0xe9, 0x7b, 0x66, 0x9c, 0x90, 0x7a, 0x74, + 0x6d, 0x09, 0x29, 0xe3, 0x1a, 0xc0, 0xa8, 0xa8, 0x20, 0xa9, 0x10, 0x98, 0x54, 0x87, 0x24, 0xc9, + 0x9d, 0x9b, 0xe7, 0xb8, 0xfc, 0xfc, 0xba, 0x61, 0xa9, 0x4c, 0x63, 0x1b, 0xe6, 0xd1, 0xec, 0x9d, + 0xec, 0x18, 0x0c, 0x31, 0x98, 0xbc, 0xc7, 0x92, 0xb4, 0xf9, 0x13, 0x4d, 0xb8, 0x91, 0x7f, 0xed, + 0x33, 0xf2, 0x7d, 0xe1, 0x12, 0xed, 0x4c, 0x2e, 0x59, 0x81, 0x99, 0x51, 0x2a, 0x9d, 0xca, 0x35, + 0xac, 0x9c, 0x2e, 0x20, 0x6a, 0x4c, 0x0c, 0x91, 0xf9, 0x53, 0x0d, 0xba, 0x6f, 0x06, 0xae, 0x8f, + 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x97, 0x2c, 0x67, 0xc6, 0xfc, 0xab, 0xd0, 0xb6, 0x49, 0x8d, 0x9f, + 0x08, 0xd8, 0x27, 0x38, 0x69, 0x2b, 0x64, 0xa4, 0x43, 0x93, 0x86, 0x7c, 0x68, 0x62, 0x7e, 0xa4, + 0xc1, 0x3c, 0x39, 0xe5, 0xed, 0xd4, 0x4d, 0xce, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x72, + 0x86, 0xa8, 0xcc, 0xe5, 0xaa, 0xf1, 0xd4, 0xa8, 0x89, 0x27, 0xf3, 0x63, 0x0d, 0x2e, 0x95, 0xdd, + 0xba, 0x3e, 0x18, 0xb0, 0xf0, 0x61, 0x4e, 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, + 0xb2, 0xc5, 0xde, 0x67, 0x83, 0x47, 0xd7, 0xe4, 0xef, 0xea, 0xf0, 0xbf, 0xd7, 0xf3, 0x89, 0x77, + 0x3b, 0xb2, 0xfd, 0x78, 0x9f, 0x45, 0xd1, 0x43, 0xb4, 0xf7, 0x16, 0xcc, 0xf9, 0xec, 0x6e, 0x61, + 0x93, 0x98, 0x8e, 0x93, 0xaa, 0x51, 0x85, 0x27, 0x5b, 0xbb, 0xcc, 0x7f, 0x69, 0xb0, 0x48, 0x7a, + 0xde, 0x72, 0x07, 0x87, 0x0f, 0x71, 0xf0, 0xdb, 0x30, 0x7f, 0x88, 0x16, 0x70, 0xea, 0x0c, 0xcb, + 0x76, 0x49, 0x7a, 0xc2, 0xe1, 0xff, 0x5b, 0x83, 0x25, 0x52, 0x74, 0xd3, 0x3f, 0x76, 0x1f, 0x66, + 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x9c, 0xd1, 0x01, 0x65, 0xf1, 0x09, 0x3d, 0xf0, 0x2b, 0x0d, + 0x16, 0x48, 0xd3, 0x1b, 0x7e, 0xc2, 0xa2, 0x33, 0x8f, 0xff, 0x06, 0x74, 0x98, 0x9f, 0x44, 0xb6, + 0x7f, 0x96, 0x15, 0x52, 0x16, 0x9d, 0x70, 0x91, 0xfc, 0x48, 0x03, 0x03, 0x55, 0x6d, 0xb9, 0xf1, + 0xc8, 0x8d, 0xe3, 0x87, 0x08, 0xdd, 0x64, 0x06, 0xff, 0x48, 0x87, 0x8b, 0x92, 0x96, 0x5e, 0x9a, + 0x3c, 0xea, 0x26, 0x1b, 0x5b, 0xd0, 0xe6, 0x35, 0x82, 0x7c, 0x1b, 0x39, 0x69, 0x47, 0x85, 0x20, + 0xaf, 0x62, 0x91, 0xe8, 0xb3, 0x41, 0xe0, 0x3b, 0x31, 0x16, 0x47, 0x73, 0x96, 0xc2, 0xe3, 0xcb, + 0xd0, 0x8a, 0xa4, 0x66, 0xd3, 0xf6, 0x07, 0xcc, 0x7b, 0x6c, 0x5c, 0x64, 0xfe, 0x5c, 0x83, 0x79, + 0x6a, 0xf2, 0xe8, 0x0f, 0x99, 0xe7, 0x7a, 0x0a, 0xe4, 0x4f, 0x0d, 0x4a, 0x3c, 0xbc, 0x96, 0x25, + 0x2d, 0x72, 0x5d, 0xfd, 0xe8, 0x86, 0xd6, 0x0d, 0xe8, 0x0c, 0x0e, 0x6c, 0x7f, 0x78, 0xa6, 0xe0, + 0x92, 0x45, 0xcd, 0x04, 0x9e, 0x94, 0x0f, 0xe0, 0x37, 0xe9, 0x13, 0x0e, 0xff, 0xa5, 0xd2, 0x50, + 0x4e, 0x7c, 0x6d, 0xf0, 0x60, 0x4e, 0x3f, 0x84, 0x25, 0xba, 0xf5, 0x95, 0x6a, 0x42, 0xa3, 0x0b, + 0xd3, 0xb6, 0x43, 0xc7, 0x10, 0x1a, 0x0a, 0x65, 0xa4, 0x7a, 0x9f, 0x2f, 0x9e, 0x77, 0x15, 0xf7, + 0xf9, 0x97, 0x01, 0x6c, 0xc7, 0x79, 0x27, 0x88, 0x1c, 0xd7, 0xcf, 0x0a, 0x7c, 0x89, 0x63, 0xbe, + 0x09, 0xb3, 0xd7, 0xa2, 0x60, 0x74, 0x5b, 0xba, 0xbf, 0x3d, 0xf1, 0x86, 0x59, 0xbe, 0xfb, 0xd5, + 0xd5, 0xbb, 0x5f, 0xf3, 0x9b, 0xf0, 0x44, 0xc5, 0x70, 0x74, 0xd6, 0x26, 0x5d, 0x4b, 0x67, 0x9d, + 0x88, 0x90, 0xa9, 0x3b, 0x97, 0x93, 0x6d, 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0xaa, 0xa8, + 0x5f, 0x0f, 0xc3, 0x28, 0x38, 0x16, 0x98, 0x9c, 0x47, 0x37, 0x6a, 0xf1, 0xab, 0x97, 0x8b, 0xdf, + 0x5a, 0x23, 0x94, 0x82, 0xfd, 0x13, 0x30, 0xe2, 0x67, 0x1a, 0x2c, 0x08, 0x23, 0x1c, 0x47, 0x74, + 0xfb, 0x32, 0xb4, 0xe8, 0x49, 0x8b, 0xe8, 0xf0, 0xa9, 0xda, 0x0e, 0xb3, 0xa7, 0x38, 0x96, 0x68, + 0x5c, 0x8d, 0x48, 0xbd, 0x6e, 0x46, 0x7d, 0x25, 0x0f, 0xf6, 0x89, 0x1f, 0x9d, 0x08, 0x01, 0xf3, + 0xeb, 0x59, 0x30, 0x6f, 0x31, 0x8f, 0x9d, 0xa7, 0x8f, 0xcc, 0x3b, 0x30, 0x8f, 0xef, 0x6b, 0x0a, + 0x1f, 0x9c, 0x8b, 0xda, 0x77, 0x60, 0x11, 0xd5, 0x9e, 0xbb, 0xbd, 0xf9, 0xec, 0xe0, 0xfe, 0x91, + 0x97, 0x92, 0x73, 0xd1, 0xfe, 0x45, 0xb8, 0x90, 0xf9, 0xfe, 0x4e, 0xe8, 0xe4, 0x87, 0x48, 0x63, + 0xee, 0xe9, 0xcc, 0x17, 0x60, 0x79, 0x33, 0xf0, 0x8f, 0x59, 0x14, 0xd3, 0x45, 0x22, 0x8a, 0x64, + 0x12, 0xca, 0xe4, 0x17, 0x94, 0xf9, 0x3e, 0xac, 0xc8, 0x12, 0x7d, 0x96, 0xec, 0x46, 0xee, 0xb1, + 0x24, 0x25, 0x0e, 0xa8, 0x35, 0xe5, 0x80, 0xba, 0x38, 0xd0, 0xd6, 0x95, 0x03, 0xed, 0x4b, 0xd0, + 0x76, 0x63, 0xa1, 0x00, 0x83, 0x6a, 0xc6, 0x2a, 0x18, 0xa6, 0x0d, 0x4b, 0xe4, 0x7e, 0x71, 0x61, + 0x84, 0x5d, 0xac, 0xc0, 0x0c, 0xc5, 0x54, 0xde, 0x49, 0x4e, 0x8f, 0xbd, 0x7e, 0x19, 0x7b, 0xd9, + 0x68, 0xf6, 0x61, 0x49, 0x3c, 0xaa, 0xd9, 0xb5, 0x87, 0xae, 0x4f, 0x8b, 0xec, 0x65, 0x80, 0xd0, + 0x1e, 0x66, 0x0f, 0xf0, 0xe8, 0xda, 0x4c, 0xe2, 0xf0, 0xef, 0xf1, 0x41, 0x70, 0x57, 0x7c, 0xd7, + 0xe9, 0x7b, 0xc1, 0x31, 0xbf, 0x06, 0x86, 0xc5, 0xe2, 0x30, 0xf0, 0x63, 0x26, 0x69, 0x5d, 0x85, + 0xce, 0x66, 0x1a, 0x45, 0xcc, 0xe7, 0x5d, 0x65, 0x2f, 0xcc, 0x64, 0x16, 0xd7, 0xdb, 0x2f, 0xf4, + 0xd2, 0x11, 0xbb, 0xc4, 0x31, 0x7f, 0xdc, 0x80, 0x76, 0xdf, 0x1d, 0xfa, 0xb6, 0x67, 0xb1, 0x23, + 0xe3, 0x35, 0x68, 0xd1, 0x96, 0x45, 0x44, 0x4a, 0xdd, 0x91, 0x2f, 0xb5, 0xa6, 0xbd, 0x99, 0xc5, + 0x8e, 0x6e, 0xfc, 0x8f, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0xdd, 0xa4, 0x23, 0x28, 0x91, + 0xbf, 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x03, 0x2c, 0x69, 0xc4, + 0xf2, 0x30, 0xde, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, + 0x7a, 0xbc, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xbc, 0x13, 0x8a, + 0xb3, 0xc3, 0xf1, 0xd2, 0x37, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, + 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, + 0x3b, 0xe6, 0x87, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, + 0xde, 0x7d, 0x09, 0xa4, 0x7e, 0x3d, 0x48, 0x9f, 0x9f, 0x14, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x6a, + 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0xae, 0x96, 0x80, 0x5a, 0x3b, 0x15, 0x28, + 0x21, 0x2f, 0xa0, 0xba, 0x5a, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x6a, 0x09, + 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd6, 0x61, 0x1e, 0x5d, 0x46, 0xb7, 0xb0, + 0xfe, 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x8d, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, + 0x60, 0xd2, 0x75, 0x89, 0x8e, 0xd7, 0x25, 0xd5, 0x0f, 0x78, 0x41, 0x94, 0xc6, 0x49, 0x30, 0xda, + 0xb2, 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x7d, 0x37, 0x55, 0x79, 0x31, 0x1e, 0x05, 0xc1, + 0x28, 0xbf, 0x97, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x11, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, + 0xef, 0xa8, 0x1c, 0xd7, 0xc6, 0x4b, 0x2f, 0xf1, 0xc8, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xe2, + 0x89, 0x17, 0xdd, 0x05, 0xe7, 0xf4, 0x0b, 0x37, 0xf3, 0x6f, 0x1a, 0x5c, 0xd8, 0xb5, 0xa3, 0xc4, + 0x1d, 0xb8, 0xa1, 0xed, 0x27, 0x3d, 0x96, 0xd8, 0x38, 0x06, 0xe5, 0xa1, 0xa6, 0xf6, 0x60, 0x0f, + 0x35, 0x77, 0x61, 0x61, 0xa8, 0xee, 0x2e, 0x1e, 0x70, 0x63, 0x50, 0x16, 0x57, 0x5e, 0x9d, 0x36, + 0x1e, 0xf8, 0xd5, 0xa9, 0xf9, 0x7d, 0x1d, 0x16, 0x4a, 0x4b, 0xe7, 0x89, 0x79, 0x67, 0x1d, 0xc0, + 0xcd, 0xc3, 0xe8, 0x84, 0xc3, 0x77, 0x35, 0xd6, 0x2c, 0x49, 0xa8, 0xee, 0x26, 0xaf, 0x71, 0xf6, + 0x9b, 0xbc, 0x1b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, + 0xbb, 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, + 0x58, 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x04, 0x5e, 0x90, 0xe6, 0x0f, 0x74, 0x58, 0xae, + 0xcf, 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6e, 0x25, 0x3f, 0x37, 0xaf, 0x17, 0xd1, 0x9d, + 0xe7, 0xe1, 0xc7, 0xd5, 0xdd, 0x17, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xcb, 0xdc, 0x3f, 0x79, + 0xa5, 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xd3, 0x0f, 0x2a, 0x5c, 0x2b, + 0xfc, 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0xb9, 0xc5, 0xec, 0x6f, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, + 0x54, 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8d, 0xb4, 0xd3, + 0x23, 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0xf5, 0xe2, 0x61, 0xf6, + 0x36, 0xf5, 0x5c, 0x37, 0x8a, 0xe5, 0x17, 0x7c, 0x53, 0xd5, 0x17, 0x7c, 0x1b, 0x30, 0x2f, 0x1b, + 0x70, 0x96, 0xb7, 0x97, 0x1b, 0x97, 0xbe, 0xb1, 0x72, 0xe5, 0x79, 0xfa, 0xcf, 0xe7, 0xab, 0x15, + 0x27, 0xee, 0xb5, 0xf0, 0x3f, 0xa0, 0x2f, 0xfd, 0x27, 0x00, 0x00, 0xff, 0xff, 0x43, 0x77, 0x44, + 0x0c, 0x16, 0x3a, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index bb57752d1..a1a9fa274 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -54,6 +54,7 @@ message UserInfo{ string ex = 8; uint32 createTime = 9; int32 appMangerLevel = 10; + int32 globalRecvMsgOpt = 11; } message FriendInfo{ From 68365aa3b73b76cc5970cf2ffbeb9f49ad0bbc41 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 10:34:32 +0800 Subject: [PATCH 537/752] alter rtc timeout --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index e5ea56734..2f78bd49d 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -701,4 +701,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - signalTimeout: 60 + signalTimeout: 35 From 956d745034974d1de25b7465df8c462765212031 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 11:13:10 +0800 Subject: [PATCH 538/752] alter rtc timeout --- pkg/proto/sdk_ws/ws.pb.go | 574 +++++++++++++++++++------------------- 1 file changed, 292 insertions(+), 282 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 73adc0319..f508ee69b 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{0} + return fileDescriptor_ws_3940a0d922f4ad30, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{1} + return fileDescriptor_ws_3940a0d922f4ad30, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{2} + return fileDescriptor_ws_3940a0d922f4ad30, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -343,6 +343,7 @@ type UserInfo struct { Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` + GlobalRecvMsgOpt int32 `protobuf:"varint,11,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -352,7 +353,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{3} + return fileDescriptor_ws_3940a0d922f4ad30, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -442,6 +443,13 @@ func (m *UserInfo) GetAppMangerLevel() int32 { return 0 } +func (m *UserInfo) GetGlobalRecvMsgOpt() int32 { + if m != nil { + return m.GlobalRecvMsgOpt + } + return 0 +} + type FriendInfo struct { OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` @@ -459,7 +467,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{4} + return fileDescriptor_ws_3940a0d922f4ad30, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +552,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{5} + return fileDescriptor_ws_3940a0d922f4ad30, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +633,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{6} + return fileDescriptor_ws_3940a0d922f4ad30, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +741,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{7} + return fileDescriptor_ws_3940a0d922f4ad30, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +886,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{8} + return fileDescriptor_ws_3940a0d922f4ad30, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +997,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{9} + return fileDescriptor_ws_3940a0d922f4ad30, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1111,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{10} + return fileDescriptor_ws_3940a0d922f4ad30, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1192,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{11} + return fileDescriptor_ws_3940a0d922f4ad30, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1238,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{12} + return fileDescriptor_ws_3940a0d922f4ad30, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1287,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{13} + return fileDescriptor_ws_3940a0d922f4ad30, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1346,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{14} + return fileDescriptor_ws_3940a0d922f4ad30, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1384,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{15} + return fileDescriptor_ws_3940a0d922f4ad30, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1425,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{16} + return fileDescriptor_ws_3940a0d922f4ad30, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1486,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{17} + return fileDescriptor_ws_3940a0d922f4ad30, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1539,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{18} + return fileDescriptor_ws_3940a0d922f4ad30, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1588,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{19} + return fileDescriptor_ws_3940a0d922f4ad30, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1656,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{20} + return fileDescriptor_ws_3940a0d922f4ad30, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1719,7 +1727,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{21} + return fileDescriptor_ws_3940a0d922f4ad30, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1894,7 +1902,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{22} + return fileDescriptor_ws_3940a0d922f4ad30, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1962,7 +1970,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{23} + return fileDescriptor_ws_3940a0d922f4ad30, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2019,7 +2027,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{24} + return fileDescriptor_ws_3940a0d922f4ad30, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2088,7 +2096,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{25} + return fileDescriptor_ws_3940a0d922f4ad30, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2143,7 +2151,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{26} + return fileDescriptor_ws_3940a0d922f4ad30, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2199,7 +2207,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{27} + return fileDescriptor_ws_3940a0d922f4ad30, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2254,7 +2262,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{28} + return fileDescriptor_ws_3940a0d922f4ad30, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2309,7 +2317,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{29} + return fileDescriptor_ws_3940a0d922f4ad30, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2365,7 +2373,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{30} + return fileDescriptor_ws_3940a0d922f4ad30, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2428,7 +2436,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{31} + return fileDescriptor_ws_3940a0d922f4ad30, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2491,7 +2499,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{32} + return fileDescriptor_ws_3940a0d922f4ad30, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2553,7 +2561,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{33} + return fileDescriptor_ws_3940a0d922f4ad30, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2607,7 +2615,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{34} + return fileDescriptor_ws_3940a0d922f4ad30, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2663,7 +2671,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{35} + return fileDescriptor_ws_3940a0d922f4ad30, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2732,7 +2740,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{36} + return fileDescriptor_ws_3940a0d922f4ad30, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2793,7 +2801,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{37} + return fileDescriptor_ws_3940a0d922f4ad30, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2847,7 +2855,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{38} + return fileDescriptor_ws_3940a0d922f4ad30, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2902,7 +2910,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{39} + return fileDescriptor_ws_3940a0d922f4ad30, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2962,7 +2970,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{40} + return fileDescriptor_ws_3940a0d922f4ad30, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3009,7 +3017,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{41} + return fileDescriptor_ws_3940a0d922f4ad30, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3062,7 +3070,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{42} + return fileDescriptor_ws_3940a0d922f4ad30, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3108,7 +3116,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{43} + return fileDescriptor_ws_3940a0d922f4ad30, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3148,7 +3156,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{44} + return fileDescriptor_ws_3940a0d922f4ad30, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3195,7 +3203,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{45} + return fileDescriptor_ws_3940a0d922f4ad30, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3243,7 +3251,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{46} + return fileDescriptor_ws_3940a0d922f4ad30, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3296,7 +3304,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{47} + return fileDescriptor_ws_3940a0d922f4ad30, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3334,7 +3342,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{48} + return fileDescriptor_ws_3940a0d922f4ad30, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3372,7 +3380,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{49} + return fileDescriptor_ws_3940a0d922f4ad30, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3410,7 +3418,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{50} + return fileDescriptor_ws_3940a0d922f4ad30, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3449,7 +3457,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{51} + return fileDescriptor_ws_3940a0d922f4ad30, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3488,7 +3496,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{52} + return fileDescriptor_ws_3940a0d922f4ad30, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3528,7 +3536,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{53} + return fileDescriptor_ws_3940a0d922f4ad30, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3583,7 +3591,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{54} + return fileDescriptor_ws_3940a0d922f4ad30, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3637,7 +3645,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{55} + return fileDescriptor_ws_3940a0d922f4ad30, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3683,7 +3691,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{56} + return fileDescriptor_ws_3940a0d922f4ad30, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3736,7 +3744,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{57} + return fileDescriptor_ws_3940a0d922f4ad30, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4003,7 +4011,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{58} + return fileDescriptor_ws_3940a0d922f4ad30, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4272,7 +4280,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{59} + return fileDescriptor_ws_3940a0d922f4ad30, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4375,7 +4383,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{60} + return fileDescriptor_ws_3940a0d922f4ad30, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4430,7 +4438,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{61} + return fileDescriptor_ws_3940a0d922f4ad30, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4491,7 +4499,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{62} + return fileDescriptor_ws_3940a0d922f4ad30, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4546,7 +4554,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{63} + return fileDescriptor_ws_3940a0d922f4ad30, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4607,7 +4615,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{64} + return fileDescriptor_ws_3940a0d922f4ad30, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4662,7 +4670,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{65} + return fileDescriptor_ws_3940a0d922f4ad30, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4720,7 +4728,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{66} + return fileDescriptor_ws_3940a0d922f4ad30, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4755,7 +4763,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{67} + return fileDescriptor_ws_3940a0d922f4ad30, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4823,7 +4831,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{68} + return fileDescriptor_ws_3940a0d922f4ad30, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4877,7 +4885,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{69} + return fileDescriptor_ws_3940a0d922f4ad30, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4928,7 +4936,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{70} + return fileDescriptor_ws_3940a0d922f4ad30, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4963,7 +4971,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{71} + return fileDescriptor_ws_3940a0d922f4ad30, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5028,7 +5036,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{72} + return fileDescriptor_ws_3940a0d922f4ad30, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5062,7 +5070,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{73} + return fileDescriptor_ws_3940a0d922f4ad30, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5122,7 +5130,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_da68f45d757be640, []int{74} + return fileDescriptor_ws_3940a0d922f4ad30, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5238,213 +5246,215 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_da68f45d757be640) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_3940a0d922f4ad30) } -var fileDescriptor_ws_da68f45d757be640 = []byte{ - // 3274 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_3940a0d922f4ad30 = []byte{ + // 3298 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, - 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x29, 0x48, 0x88, 0x1b, 0x27, 0x38, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x84, 0x10, - 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x48, 0x5c, 0x10, 0x37, 0xce, 0x5c, 0x39, 0x20, 0x21, - 0x81, 0x5e, 0xd5, 0xeb, 0xee, 0xf7, 0xba, 0x7b, 0xec, 0xd9, 0x91, 0x95, 0xdd, 0x68, 0xb9, 0x4d, - 0x55, 0xbf, 0xaa, 0x57, 0xaf, 0xbe, 0x7a, 0xaf, 0xea, 0xfd, 0x0c, 0x2c, 0xc4, 0xce, 0xe1, 0x7b, - 0x77, 0xe3, 0xe7, 0xef, 0xc6, 0x97, 0xc2, 0x28, 0x48, 0x02, 0x63, 0x29, 0x66, 0xd1, 0x31, 0x8b, - 0xde, 0xb3, 0x43, 0xf7, 0xbd, 0xd0, 0x8e, 0xec, 0x61, 0x6c, 0xfe, 0x4b, 0x87, 0xf6, 0xd5, 0x28, - 0x48, 0xc3, 0xeb, 0xfe, 0x7e, 0x60, 0x74, 0x61, 0x7a, 0x80, 0xc4, 0x56, 0x57, 0x5b, 0xd5, 0x9e, - 0x6d, 0x5b, 0x19, 0x69, 0x5c, 0x80, 0x36, 0xfe, 0xdc, 0xb1, 0x87, 0xac, 0xab, 0xe3, 0xb7, 0x82, - 0x61, 0x98, 0x30, 0xeb, 0x07, 0x89, 0xbb, 0xef, 0xf6, 0xed, 0xc4, 0x0d, 0xfc, 0x6e, 0x03, 0x1b, - 0x28, 0x3c, 0xde, 0xc6, 0xf5, 0x93, 0x28, 0x70, 0xd2, 0x3e, 0xb6, 0x99, 0xa2, 0x36, 0x32, 0x8f, - 0xf7, 0xbf, 0x6f, 0xf7, 0xd9, 0x6d, 0xeb, 0x46, 0xb7, 0x49, 0xfd, 0x0b, 0xd2, 0x58, 0x85, 0x4e, - 0x70, 0xd7, 0x67, 0xd1, 0xed, 0x98, 0x45, 0xd7, 0xb7, 0xba, 0x2d, 0xfc, 0x2a, 0xb3, 0x8c, 0x8b, - 0x00, 0xfd, 0x88, 0xd9, 0x09, 0xbb, 0xe5, 0x0e, 0x59, 0x77, 0x7a, 0x55, 0x7b, 0x76, 0xce, 0x92, - 0x38, 0x5c, 0xc3, 0x90, 0x0d, 0xf7, 0x58, 0xb4, 0x19, 0xa4, 0x7e, 0xd2, 0x9d, 0xc1, 0x06, 0x32, - 0xcb, 0x98, 0x07, 0x9d, 0xdd, 0xeb, 0xb6, 0x51, 0xb5, 0xce, 0xee, 0x19, 0xcb, 0xd0, 0x8a, 0x13, - 0x3b, 0x49, 0xe3, 0x2e, 0xac, 0x6a, 0xcf, 0x36, 0x2d, 0x41, 0x19, 0x6b, 0x30, 0x87, 0x7a, 0x83, - 0xcc, 0x9a, 0x0e, 0x8a, 0xa8, 0xcc, 0xdc, 0x63, 0xb7, 0xee, 0x87, 0xac, 0x3b, 0x8b, 0x0a, 0x0a, - 0x86, 0xf9, 0x37, 0x1d, 0xce, 0xa1, 0xdf, 0xb7, 0xd1, 0x80, 0x2b, 0xa9, 0xe7, 0x9d, 0x82, 0xc0, - 0x32, 0xb4, 0x52, 0xea, 0x8e, 0xdc, 0x2f, 0x28, 0xde, 0x4f, 0x14, 0x78, 0xec, 0x06, 0x3b, 0x66, - 0x1e, 0x3a, 0xbe, 0x69, 0x15, 0x0c, 0x63, 0x05, 0x66, 0xee, 0x04, 0xae, 0x8f, 0x3e, 0x99, 0xc2, - 0x8f, 0x39, 0xcd, 0xbf, 0xf9, 0x6e, 0xff, 0xd0, 0xe7, 0x90, 0x92, 0xbb, 0x73, 0x5a, 0x46, 0xa2, - 0xa5, 0x22, 0xf1, 0x0c, 0xcc, 0xdb, 0x61, 0xb8, 0x6d, 0xfb, 0x03, 0x16, 0x51, 0xa7, 0xd3, 0xa8, - 0xb7, 0xc4, 0xe5, 0x78, 0xf0, 0x9e, 0x7a, 0x41, 0x1a, 0xf5, 0x19, 0xba, 0xbb, 0x69, 0x49, 0x1c, - 0xae, 0x27, 0x08, 0x59, 0x24, 0xb9, 0x91, 0x3c, 0x5f, 0xe2, 0x0a, 0x54, 0x20, 0x47, 0x85, 0xe3, - 0x98, 0x26, 0xec, 0x0d, 0xdf, 0xc1, 0x41, 0x75, 0x04, 0x8e, 0x05, 0xcb, 0xfc, 0x9e, 0x06, 0xf3, - 0xbb, 0xe9, 0x9e, 0xe7, 0xf6, 0x51, 0x05, 0x77, 0x6b, 0xe1, 0x3c, 0x4d, 0x71, 0x9e, 0xec, 0x02, - 0x7d, 0xb4, 0x0b, 0x1a, 0xaa, 0x0b, 0x96, 0xa1, 0x35, 0x60, 0xbe, 0xc3, 0x22, 0xe1, 0x52, 0x41, - 0x09, 0x53, 0x9b, 0x99, 0xa9, 0xe6, 0x8f, 0x74, 0x98, 0xf9, 0x88, 0x4d, 0x58, 0x85, 0x4e, 0x78, - 0x10, 0xf8, 0x6c, 0x27, 0xe5, 0x61, 0x25, 0x6c, 0x91, 0x59, 0xc6, 0x79, 0x68, 0xee, 0xb9, 0x51, - 0x72, 0x80, 0xb8, 0xce, 0x59, 0x44, 0x70, 0x2e, 0x1b, 0xda, 0x2e, 0x81, 0xd9, 0xb6, 0x88, 0x10, - 0x03, 0x9a, 0xc9, 0x7d, 0xaf, 0xce, 0xb1, 0x76, 0x65, 0x8e, 0x55, 0x63, 0x03, 0xea, 0x62, 0xc3, - 0xfc, 0xb7, 0x06, 0x70, 0x25, 0x72, 0x99, 0xef, 0xa0, 0x6b, 0x4a, 0x93, 0x5b, 0xab, 0x4e, 0xee, - 0x65, 0x68, 0x45, 0x6c, 0x68, 0x47, 0x87, 0x59, 0xf0, 0x13, 0x55, 0x32, 0xa8, 0x51, 0x31, 0xe8, - 0x55, 0x80, 0x7d, 0xec, 0x87, 0xeb, 0x41, 0x57, 0x75, 0x5e, 0xfc, 0xd4, 0xa5, 0xca, 0x32, 0x78, - 0x29, 0x43, 0xc9, 0x92, 0x9a, 0xf3, 0x99, 0x65, 0x3b, 0x8e, 0x08, 0xe0, 0x26, 0xcd, 0xac, 0x9c, - 0x51, 0x13, 0xbf, 0xad, 0x13, 0xe2, 0x77, 0x3a, 0x0f, 0x8a, 0x7f, 0x6a, 0xd0, 0xde, 0xf0, 0xec, - 0xfe, 0xe1, 0x98, 0x43, 0x57, 0x87, 0xa8, 0x57, 0x86, 0x78, 0x15, 0xe6, 0xf6, 0xb8, 0xba, 0x6c, - 0x08, 0xe8, 0x85, 0xce, 0x8b, 0x9f, 0xa9, 0x19, 0xa5, 0x3a, 0x29, 0x2c, 0x55, 0x4e, 0x1d, 0xee, - 0xd4, 0xe9, 0xc3, 0x6d, 0x9e, 0x30, 0xdc, 0x56, 0x3e, 0xdc, 0xbf, 0xe8, 0x30, 0x8b, 0x0b, 0x9d, - 0xc5, 0x8e, 0x52, 0x16, 0x27, 0xc6, 0xeb, 0x30, 0x93, 0x66, 0xa6, 0x6a, 0xe3, 0x9a, 0x9a, 0x8b, - 0x18, 0xaf, 0x88, 0x65, 0x15, 0xe5, 0x75, 0x94, 0xbf, 0x50, 0x23, 0x9f, 0xe7, 0x34, 0xab, 0x68, - 0xce, 0x53, 0xd0, 0x81, 0xed, 0x3b, 0x1e, 0xb3, 0x58, 0x9c, 0x7a, 0x89, 0x58, 0x2d, 0x15, 0x1e, - 0x45, 0xda, 0xd1, 0x76, 0x3c, 0x10, 0x09, 0x4a, 0x50, 0xdc, 0x3b, 0xd4, 0x8e, 0x7f, 0xa2, 0xa1, - 0x17, 0x0c, 0x3e, 0x51, 0x23, 0x76, 0x84, 0x08, 0xd1, 0xb4, 0xca, 0xc8, 0xa2, 0x4f, 0xe1, 0x35, - 0x0a, 0x04, 0x85, 0xc7, 0x21, 0x26, 0x1a, 0x15, 0x50, 0x66, 0x92, 0x38, 0xe5, 0xc4, 0x64, 0xfe, - 0xbd, 0x01, 0x73, 0x34, 0x7d, 0x32, 0xa7, 0x5e, 0xe4, 0x71, 0x1e, 0x0c, 0x95, 0x28, 0x92, 0x38, - 0xdc, 0x0a, 0x4e, 0xed, 0xa8, 0x0b, 0x8d, 0xc2, 0xe3, 0xa1, 0xc8, 0xe9, 0x2b, 0xca, 0x82, 0x23, - 0xb3, 0xb2, 0x5e, 0xae, 0xca, 0x0b, 0x8f, 0xc4, 0xe1, 0x4b, 0x59, 0x12, 0x28, 0xd1, 0x91, 0xd3, - 0x5c, 0x36, 0x09, 0xf2, 0xfe, 0x29, 0x3e, 0x24, 0x0e, 0xf7, 0x6f, 0x12, 0x64, 0x7d, 0x93, 0x93, - 0x0a, 0x06, 0x69, 0x16, 0xfd, 0x52, 0x2a, 0xc9, 0xe9, 0x0a, 0xaa, 0xed, 0x13, 0x51, 0x05, 0x05, - 0x55, 0x75, 0x72, 0x75, 0x2a, 0x93, 0x6b, 0x0d, 0xe6, 0x48, 0x4f, 0x16, 0xf4, 0xb3, 0x94, 0xea, - 0x15, 0xa6, 0x1a, 0x1b, 0x73, 0xe5, 0xd8, 0x50, 0xd1, 0x9d, 0x1f, 0x81, 0xee, 0x42, 0x8e, 0xee, - 0xaf, 0x74, 0x80, 0x2d, 0x16, 0xda, 0x51, 0x32, 0x64, 0x7e, 0xc2, 0x87, 0xe7, 0xe4, 0x54, 0x0e, - 0xae, 0xc2, 0x93, 0xf3, 0x84, 0xae, 0xe6, 0x09, 0x03, 0xa6, 0xd0, 0xe1, 0x84, 0x26, 0xfe, 0xe6, - 0xce, 0x0c, 0xed, 0x88, 0xb4, 0x51, 0x90, 0xe7, 0x34, 0xcf, 0x03, 0x41, 0xe4, 0x88, 0xcc, 0xd1, - 0xb4, 0x88, 0xe0, 0x93, 0xbf, 0xe8, 0x0f, 0x0b, 0x9a, 0x16, 0xad, 0xeb, 0x2a, 0xf7, 0xd4, 0x1a, - 0xec, 0x39, 0x58, 0x8c, 0xd3, 0xbd, 0x62, 0x70, 0x3b, 0xe9, 0x50, 0x84, 0x7b, 0x85, 0xcf, 0x9d, - 0x4a, 0xc5, 0x19, 0x6f, 0x44, 0xa9, 0xa6, 0x60, 0x94, 0xab, 0x02, 0xf3, 0x03, 0x1d, 0x16, 0x6f, - 0x46, 0x03, 0xdb, 0x77, 0xbf, 0x8d, 0xe5, 0x26, 0x2e, 0xe0, 0x93, 0xa4, 0xdc, 0x55, 0xe8, 0x30, - 0x7f, 0xe0, 0xb9, 0xf1, 0xc1, 0x4e, 0xe1, 0x37, 0x99, 0x25, 0x3b, 0x7b, 0x6a, 0x54, 0x52, 0x6e, - 0x2a, 0x49, 0x79, 0x19, 0x5a, 0xc3, 0x60, 0xcf, 0xf5, 0xb2, 0xb8, 0x17, 0x14, 0xc6, 0x3c, 0xf3, - 0x18, 0x66, 0xe7, 0x3c, 0xe6, 0x33, 0x46, 0x91, 0xa8, 0x67, 0x6a, 0x13, 0x75, 0x5b, 0x4e, 0xd4, - 0xaa, 0xe3, 0xa1, 0xe2, 0x78, 0x72, 0x57, 0x27, 0x77, 0xd7, 0x1f, 0x34, 0x58, 0x2c, 0xdc, 0x4d, - 0x35, 0xe8, 0x48, 0x77, 0x95, 0x23, 0x50, 0xaf, 0x89, 0xc0, 0x3c, 0x6e, 0x1a, 0x72, 0xdc, 0xf0, - 0x48, 0x0b, 0x62, 0x57, 0xaa, 0xf7, 0x73, 0x9a, 0xf7, 0xe6, 0x31, 0x5b, 0x72, 0x16, 0x51, 0x52, - 0xd5, 0xdd, 0x52, 0xaa, 0xee, 0x72, 0x1e, 0xfd, 0xad, 0x06, 0xe7, 0x39, 0xca, 0x95, 0x61, 0xdc, - 0x84, 0xc5, 0xa0, 0x14, 0x09, 0x22, 0xd1, 0x3c, 0x5d, 0x93, 0x28, 0xca, 0x41, 0x63, 0x55, 0x84, - 0xb9, 0x42, 0xa7, 0xd4, 0x89, 0xc8, 0x3c, 0x75, 0x0a, 0xcb, 0xf6, 0x58, 0x15, 0x61, 0xf3, 0x77, - 0x1a, 0x2c, 0x52, 0x6a, 0x93, 0xe6, 0xf9, 0x99, 0x9b, 0xfd, 0x0e, 0x9c, 0x2f, 0xf7, 0x7c, 0xc3, - 0x8d, 0x93, 0xae, 0xbe, 0xda, 0x18, 0xd7, 0xf4, 0x5a, 0x05, 0x7c, 0xae, 0x3d, 0xb9, 0x9b, 0x7a, - 0xde, 0x36, 0x8b, 0x63, 0x7b, 0xc0, 0x36, 0xee, 0xf7, 0xd8, 0x11, 0xff, 0x60, 0xb1, 0xa3, 0x91, - 0x31, 0xc4, 0xeb, 0x1c, 0x2c, 0x14, 0xdc, 0xc0, 0xcf, 0x43, 0x48, 0x66, 0xf1, 0x69, 0x15, 0x93, - 0x9e, 0x6e, 0x63, 0xb5, 0xc1, 0x53, 0xa8, 0x20, 0x8d, 0x6f, 0xc1, 0x2c, 0xe6, 0x70, 0xd1, 0x4d, - 0x77, 0x0a, 0x07, 0xf0, 0x5a, 0x6d, 0xd5, 0x50, 0x6b, 0x15, 0x55, 0x03, 0x82, 0x7e, 0xc3, 0x4f, - 0xa2, 0xfb, 0x96, 0xa2, 0x71, 0xe5, 0x5d, 0x58, 0xaa, 0x34, 0x31, 0x16, 0xa1, 0x71, 0xc8, 0xee, - 0x8b, 0x71, 0xf0, 0x9f, 0xc6, 0x0b, 0xd0, 0x3c, 0xb6, 0xbd, 0x94, 0x09, 0xf4, 0x57, 0x6a, 0x2c, - 0x10, 0x36, 0x5b, 0xd4, 0xf0, 0x15, 0xfd, 0xcb, 0x9a, 0xf9, 0x74, 0x3e, 0x30, 0x79, 0x8c, 0x9a, - 0x32, 0x46, 0xf3, 0x2d, 0xe8, 0x6c, 0xc7, 0x83, 0x2d, 0x3b, 0xb1, 0xb1, 0xe1, 0x6b, 0xd0, 0x19, - 0x16, 0x24, 0x36, 0xae, 0xef, 0x4f, 0x08, 0x59, 0x72, 0x73, 0xf3, 0xcf, 0x3a, 0x74, 0xeb, 0x5d, - 0x11, 0x87, 0xdc, 0x06, 0x16, 0x45, 0x9b, 0x81, 0xc3, 0x70, 0x68, 0x4d, 0x2b, 0x23, 0x39, 0x76, - 0x2c, 0x8a, 0x78, 0x0e, 0x13, 0x45, 0x36, 0x51, 0xc6, 0x25, 0x98, 0xf2, 0x32, 0x58, 0x4e, 0xb6, - 0x02, 0xdb, 0x19, 0x43, 0x58, 0x44, 0xef, 0x4a, 0x03, 0x12, 0x98, 0xad, 0x8f, 0x8d, 0x59, 0x1c, - 0x12, 0x68, 0x92, 0x0e, 0x02, 0xae, 0xa2, 0x7a, 0xa5, 0x0f, 0x4f, 0xd4, 0x36, 0xad, 0x01, 0xf0, - 0x4b, 0x2a, 0x80, 0x17, 0x47, 0x0f, 0xa5, 0x0c, 0x62, 0x08, 0xc6, 0x55, 0x96, 0x6c, 0xdb, 0xf7, - 0xd6, 0x7d, 0x67, 0xdb, 0xf5, 0x7b, 0xec, 0x88, 0x47, 0xfb, 0x2a, 0x74, 0xc4, 0xf6, 0x3c, 0x87, - 0xa9, 0x6d, 0xc9, 0xac, 0x91, 0xbb, 0xf6, 0xd2, 0x7c, 0x68, 0x54, 0xe6, 0x83, 0x79, 0x19, 0x66, - 0xe5, 0xee, 0x30, 0x89, 0xd8, 0xf7, 0x7a, 0xec, 0x08, 0x07, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0xd8, - 0x42, 0xec, 0x0d, 0x04, 0x65, 0xfe, 0x49, 0x87, 0x73, 0x15, 0x93, 0xe3, 0xf0, 0x41, 0xf5, 0xc8, - 0xf1, 0xd2, 0x18, 0x15, 0x2f, 0x53, 0x4a, 0xbc, 0x1c, 0xc2, 0x12, 0x81, 0x24, 0x75, 0xdd, 0x6d, - 0x62, 0x00, 0xbc, 0x5e, 0x57, 0xaa, 0x57, 0x8d, 0x14, 0xd8, 0x4b, 0x5c, 0x02, 0xbf, 0xaa, 0x77, - 0x85, 0xc1, 0x72, 0x7d, 0xe3, 0x1a, 0xf8, 0x5f, 0x56, 0xe1, 0xff, 0x74, 0x1d, 0xfc, 0xb2, 0x25, - 0x12, 0xfe, 0x47, 0xb0, 0xc0, 0x17, 0xd5, 0x1e, 0xf3, 0x9d, 0xed, 0x78, 0x80, 0x8e, 0x5c, 0x85, - 0x0e, 0xc9, 0x6f, 0xc7, 0x83, 0x62, 0xeb, 0x26, 0xb1, 0x78, 0x8b, 0xbe, 0xe7, 0xf2, 0xc5, 0x13, - 0x5b, 0x88, 0x45, 0x4f, 0x62, 0xf1, 0x04, 0x19, 0x33, 0x71, 0x92, 0xc1, 0xbd, 0xdb, 0xb0, 0x72, - 0xda, 0x7c, 0xbf, 0x05, 0xd3, 0x22, 0x1a, 0x31, 0x29, 0xf2, 0xdd, 0x72, 0xbe, 0xac, 0x12, 0x45, - 0x75, 0x6d, 0xff, 0xb8, 0x08, 0x2f, 0xa2, 0xe4, 0x63, 0xa4, 0x86, 0x7a, 0x8c, 0x54, 0xb2, 0x69, - 0xaa, 0x6a, 0x53, 0x69, 0x5c, 0xcd, 0xea, 0xb8, 0x78, 0x19, 0x87, 0x95, 0xcd, 0xae, 0x67, 0x27, - 0xfb, 0x41, 0x34, 0x14, 0x9b, 0xdf, 0xa6, 0x55, 0xe1, 0xf3, 0xd2, 0x91, 0x78, 0x79, 0xed, 0x4f, - 0x29, 0xbc, 0xc4, 0xe5, 0x95, 0x36, 0x71, 0xb2, 0x3d, 0x00, 0x9d, 0x3a, 0xa8, 0x4c, 0xb2, 0x2d, - 0x8e, 0xdd, 0xc0, 0xc7, 0x2a, 0x94, 0x4a, 0x7d, 0x99, 0xc5, 0x47, 0x3e, 0x8c, 0x07, 0x57, 0xa2, - 0x60, 0x28, 0xce, 0x1e, 0x32, 0x12, 0x47, 0x1e, 0xf8, 0x49, 0x56, 0xc1, 0x76, 0x48, 0x56, 0x62, - 0x71, 0x59, 0x41, 0x62, 0x9d, 0x3f, 0x6b, 0x65, 0x24, 0x8f, 0xa5, 0x98, 0x1d, 0x89, 0xe2, 0x9d, - 0xff, 0x54, 0x90, 0x5b, 0x50, 0x91, 0x2b, 0x55, 0x63, 0x8b, 0xf8, 0x55, 0xae, 0xc6, 0x8a, 0x12, - 0x67, 0x49, 0x29, 0x71, 0xd6, 0x61, 0x3a, 0x08, 0xf9, 0xf4, 0x8f, 0xbb, 0x06, 0x4e, 0x97, 0xcf, - 0x8e, 0x5e, 0xa0, 0x2e, 0xdd, 0xa4, 0x96, 0x34, 0x31, 0x32, 0x39, 0xe3, 0x06, 0x2c, 0x04, 0xfb, - 0xfb, 0x9e, 0xeb, 0xb3, 0xdd, 0x34, 0x3e, 0xc0, 0x4d, 0xf2, 0x39, 0x0c, 0x76, 0xb3, 0xae, 0x88, - 0x50, 0x5b, 0x5a, 0x65, 0x51, 0x5e, 0xf9, 0xd9, 0x09, 0x6d, 0x72, 0x70, 0x81, 0x3b, 0x8f, 0x0b, - 0x9c, 0xc2, 0xc3, 0xf3, 0x38, 0x69, 0xa1, 0x7f, 0x02, 0x1d, 0x27, 0xb3, 0x56, 0x5e, 0x81, 0x59, - 0xd9, 0xd8, 0x9a, 0x89, 0x79, 0x5e, 0x9e, 0x98, 0x33, 0xf2, 0xbc, 0xfb, 0xa1, 0x06, 0x0b, 0x25, - 0x33, 0x79, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, 0x77, 0x3a, 0x0e, 0x8b, 0xfb, 0x62, - 0x22, 0xe0, 0x6f, 0x51, 0x33, 0x36, 0xf2, 0xf3, 0x2b, 0x13, 0x66, 0xdd, 0x9b, 0x3d, 0xae, 0xa8, - 0x17, 0xa4, 0xbe, 0x93, 0x9f, 0x41, 0x4b, 0x3c, 0x1e, 0x88, 0xee, 0xcd, 0xde, 0x86, 0xed, 0x0c, - 0x18, 0x9d, 0x14, 0x37, 0xd1, 0x26, 0x95, 0x69, 0x3a, 0x30, 0x73, 0xcb, 0x0d, 0xe3, 0xcd, 0x60, - 0x38, 0xe4, 0x70, 0x3a, 0x2c, 0xe1, 0x35, 0xb9, 0x86, 0x83, 0x17, 0x14, 0xf7, 0x8c, 0xc3, 0xf6, - 0xed, 0xd4, 0x4b, 0x78, 0xd3, 0x6c, 0xfa, 0x4b, 0x2c, 0x3c, 0x23, 0x8d, 0x03, 0x7f, 0x8b, 0xa4, - 0xc9, 0x4e, 0x89, 0x63, 0xfe, 0x51, 0x87, 0x45, 0x5c, 0xdd, 0x36, 0x31, 0x78, 0x1c, 0x14, 0x7a, - 0x11, 0x9a, 0x38, 0x99, 0x45, 0x75, 0x78, 0xf2, 0xe9, 0x07, 0x35, 0x35, 0x2e, 0x43, 0x2b, 0x08, - 0xb1, 0xa4, 0xa4, 0xa5, 0xef, 0x99, 0x51, 0x42, 0xea, 0x71, 0xb4, 0x25, 0xa4, 0x8c, 0x2b, 0x00, - 0xc3, 0xa2, 0x82, 0xa4, 0x42, 0x60, 0x5c, 0x1d, 0x92, 0x24, 0x77, 0x6e, 0x9e, 0xe3, 0xf2, 0x33, - 0xe9, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, 0x66, 0xc7, 0x60, 0x88, 0xc1, 0xf8, - 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x6a, 0xc2, 0x8d, 0xfc, 0x6b, 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, - 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0x2a, 0xd7, 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, - 0x36, 0x44, 0xe6, 0xcf, 0x34, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, - 0x9c, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, 0x11, 0xb0, 0x8f, 0x71, 0xd2, 0x56, - 0xc8, 0x48, 0x87, 0x26, 0x0d, 0xf9, 0xd0, 0xc4, 0xfc, 0x50, 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, - 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, - 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0x4b, 0x0d, 0x2e, 0x94, 0xdd, 0xba, 0xde, 0xef, 0xb3, 0xf0, 0x61, - 0x4e, 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, 0xb2, 0xc5, 0xee, 0xb0, 0xfe, 0xa3, - 0x6b, 0xf2, 0x77, 0x75, 0xf8, 0xe4, 0xd5, 0x7c, 0xe2, 0xdd, 0x8a, 0x6c, 0x3f, 0xde, 0x67, 0x51, - 0xf4, 0x10, 0xed, 0xbd, 0x01, 0x73, 0x3e, 0xbb, 0x5b, 0xd8, 0x24, 0xa6, 0xe3, 0xb8, 0x6a, 0x54, - 0xe1, 0xf1, 0xd6, 0x2e, 0xf3, 0x3f, 0x1a, 0x2c, 0x92, 0x9e, 0xb7, 0xdc, 0xfe, 0xe1, 0x43, 0x1c, - 0xfc, 0x0e, 0xcc, 0x1f, 0xa2, 0x05, 0x9c, 0x9a, 0x60, 0xd9, 0x2e, 0x49, 0x8f, 0x39, 0xfc, 0xff, - 0x6a, 0xb0, 0x44, 0x8a, 0xae, 0xfb, 0xc7, 0xee, 0xc3, 0x0c, 0xd6, 0x5d, 0x58, 0x70, 0xc9, 0x84, - 0x09, 0x1d, 0x50, 0x16, 0x1f, 0xd3, 0x03, 0xbf, 0xd1, 0x60, 0x81, 0x34, 0xbd, 0xe1, 0x27, 0x2c, - 0x9a, 0x78, 0xfc, 0xd7, 0xa0, 0xc3, 0xfc, 0x24, 0xb2, 0xfd, 0x49, 0x56, 0x48, 0x59, 0x74, 0xcc, - 0x45, 0xf2, 0x43, 0x0d, 0x0c, 0x54, 0xb5, 0xe5, 0xc6, 0x43, 0x37, 0x8e, 0x1f, 0x22, 0x74, 0xe3, - 0x19, 0xfc, 0x63, 0x1d, 0xce, 0x4b, 0x5a, 0xb6, 0xd3, 0xe4, 0x51, 0x37, 0xd9, 0xd8, 0x82, 0x36, - 0xaf, 0x11, 0xe4, 0xdb, 0xc8, 0x71, 0x3b, 0x2a, 0x04, 0x79, 0x15, 0x8b, 0x44, 0x8f, 0xf5, 0x03, - 0xdf, 0x89, 0xb1, 0x38, 0x9a, 0xb3, 0x14, 0x1e, 0x5f, 0x86, 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, - 0x67, 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x17, 0x1a, 0xcc, 0x53, 0x93, 0x47, 0x7f, 0xc8, 0x3c, 0xd7, - 0x53, 0x20, 0x7f, 0x6c, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, 0x91, 0xeb, 0xea, 0x47, 0x37, 0xb4, - 0xae, 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, - 0x80, 0xdf, 0xa4, 0x4f, 0x38, 0xfc, 0x97, 0x4a, 0x43, 0x39, 0xf1, 0xb5, 0xc1, 0x83, 0x39, 0xfd, - 0x10, 0x96, 0xe8, 0xd6, 0x57, 0xaa, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x43, 0x68, 0x28, - 0x94, 0x91, 0xea, 0x7d, 0xbe, 0x78, 0xb2, 0x55, 0xdc, 0xe7, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, - 0x20, 0x72, 0x5c, 0x3f, 0x2b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, - 0xe9, 0xfe, 0xf6, 0xc4, 0x1b, 0x66, 0xf9, 0xee, 0x57, 0x57, 0xef, 0x7e, 0xcd, 0x6f, 0xc2, 0x13, - 0x15, 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x2d, 0x9d, 0x75, 0x22, 0x42, 0xa6, 0xee, 0x5c, 0x4e, 0xb6, - 0xc5, 0x52, 0x84, 0xcc, 0xf7, 0x35, 0x78, 0xaa, 0xa2, 0x7e, 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, - 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, - 0x88, 0x9f, 0x6b, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, 0xcb, 0xd0, 0xa2, 0x27, 0x2d, 0xa2, - 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x9e, 0xe2, 0x58, 0xa2, 0x71, 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, - 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x74, 0x22, 0x04, 0xcc, 0xaf, 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, - 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0xaf, 0x29, 0x7c, 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, - 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, - 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, 0xa7, 0x33, 0x5f, 0x80, 0xe5, 0xcd, - 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0x17, 0x89, 0x28, 0x92, 0x49, 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, - 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x50, 0x6b, 0xca, 0x01, - 0x75, 0x71, 0xa0, 0xad, 0x2b, 0x07, 0xda, 0x17, 0xa0, 0xed, 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, - 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xc2, 0x08, 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, - 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xfd, 0x32, 0xf2, 0xb2, 0xd1, 0xec, 0xc1, 0x92, 0x78, 0x54, 0xb3, - 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, 0xc8, 0x1e, 0xd5, 0xd1, 0xb5, 0x99, - 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, - 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, - 0xca, 0x5e, 0x98, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, 0x23, 0x76, 0x89, 0x63, 0xfe, 0xa4, - 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, - 0x94, 0xba, 0x23, 0x5f, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, - 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, - 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, - 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, - 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, - 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, - 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, 0xe6, 0x07, 0x0d, 0x80, 0xac, 0x61, - 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, - 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, - 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, - 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, - 0xb8, 0xfe, 0xaa, 0xc3, 0x3c, 0xba, 0x8c, 0x6e, 0x61, 0xfd, 0xfd, 0x00, 0xef, 0x03, 0xd0, 0x5d, - 0xea, 0x1b, 0x4d, 0x95, 0x69, 0x7c, 0x01, 0x96, 0x88, 0xc1, 0xa4, 0xeb, 0x12, 0x1d, 0xaf, 0x4b, - 0xaa, 0x1f, 0xf0, 0x82, 0x28, 0x8d, 0x93, 0x60, 0xb8, 0x65, 0x27, 0x76, 0x56, 0x7c, 0x15, 0x1c, - 0xf9, 0xfa, 0x6e, 0xaa, 0xf2, 0x0a, 0x3c, 0x0a, 0x82, 0x61, 0x7e, 0x2f, 0x27, 0x28, 0x2e, 0x91, - 0xb8, 0x43, 0x16, 0xa4, 0x89, 0x58, 0x26, 0x32, 0x92, 0xde, 0x51, 0x39, 0xae, 0x8d, 0x97, 0x5e, - 0xe2, 0x91, 0x51, 0xce, 0xc0, 0x95, 0xad, 0xb8, 0xc4, 0x13, 0xaf, 0xb4, 0x0b, 0xce, 0x18, 0x17, - 0x6e, 0xf8, 0xae, 0xdf, 0x4d, 0x5c, 0xf9, 0xf1, 0x51, 0xd3, 0x52, 0x78, 0xe6, 0x3f, 0x34, 0x38, - 0xb7, 0x6b, 0x47, 0x89, 0xdb, 0x77, 0x43, 0xdb, 0x4f, 0xb6, 0x59, 0x62, 0xe3, 0x38, 0x95, 0xc7, - 0x9c, 0xda, 0x83, 0x3d, 0xe6, 0xdc, 0x85, 0x85, 0x81, 0xba, 0x03, 0x79, 0xc0, 0xcd, 0x43, 0x59, - 0x5c, 0x79, 0x99, 0xda, 0x78, 0xe0, 0x97, 0xa9, 0xe6, 0xf7, 0x75, 0x58, 0x28, 0x2d, 0xaf, 0x27, - 0xe6, 0xa6, 0x75, 0x00, 0x37, 0x0f, 0xb5, 0x13, 0x0e, 0xe8, 0xd5, 0x78, 0xb4, 0x24, 0xa1, 0xba, - 0xdb, 0xbe, 0xc6, 0xe4, 0xb7, 0x7d, 0xd7, 0xa0, 0x13, 0x16, 0x20, 0x9d, 0xb0, 0x3f, 0xaa, 0x81, - 0xd2, 0x92, 0x45, 0xcd, 0x77, 0x61, 0xa9, 0xb2, 0x8a, 0xe1, 0xb5, 0x5d, 0x70, 0xc8, 0xfc, 0xfc, - 0xda, 0x8e, 0x13, 0x52, 0x40, 0xeb, 0xe5, 0x80, 0xf6, 0xdc, 0x63, 0xf9, 0xe9, 0xbb, 0x20, 0xcd, - 0x1f, 0xe8, 0xb0, 0x5c, 0x9f, 0x81, 0x1e, 0x57, 0x77, 0xef, 0x41, 0x77, 0xd4, 0x6a, 0x7f, 0x66, - 0x5e, 0x2f, 0xa2, 0x3b, 0xcf, 0xd5, 0x8f, 0xab, 0xbb, 0xcf, 0x65, 0xd1, 0x2d, 0xa5, 0x43, 0xf3, - 0xd7, 0xb9, 0x7f, 0xf2, 0x6a, 0xe4, 0x31, 0xf5, 0x8f, 0xf1, 0x1c, 0x2c, 0xd2, 0x30, 0xa5, 0xe7, - 0x21, 0x54, 0xdc, 0x56, 0xf8, 0xc5, 0x4a, 0x21, 0x95, 0x06, 0x67, 0x16, 0xb3, 0xbf, 0xd7, 0x32, - 0x4c, 0xf2, 0x1a, 0xef, 0x63, 0x85, 0x49, 0x11, 0x69, 0x52, 0xe1, 0x23, 0x45, 0x5a, 0x5e, 0x7b, - 0xfe, 0x3f, 0xd2, 0x4e, 0x8f, 0xb4, 0xdc, 0x97, 0x52, 0x11, 0x68, 0x7e, 0x07, 0xe6, 0xb6, 0x98, - 0xb7, 0x1d, 0x0f, 0xb2, 0xf7, 0xab, 0x67, 0xba, 0x99, 0x2c, 0xbf, 0xf2, 0x9b, 0xaa, 0xbe, 0xf2, - 0xdb, 0x80, 0x79, 0xd9, 0x80, 0x49, 0xde, 0x67, 0x6e, 0x5c, 0xf8, 0xc6, 0xca, 0xa5, 0xe7, 0xe9, - 0xbf, 0x9e, 0xaf, 0x56, 0x9c, 0xb8, 0xd7, 0xc2, 0xff, 0x7e, 0xbe, 0xf4, 0xbf, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x77, 0x5b, 0x05, 0x8d, 0x0e, 0x3a, 0x00, 0x00, + 0xf1, 0xff, 0x77, 0x8f, 0x67, 0xec, 0xa9, 0xf1, 0x67, 0xef, 0xc6, 0x99, 0xbf, 0xff, 0x9b, 0xfd, + 0x9b, 0x8e, 0x15, 0x42, 0x80, 0x4d, 0x94, 0x10, 0x09, 0xf2, 0xb1, 0xc8, 0x1f, 0xd9, 0x8f, 0x64, + 0xc7, 0x76, 0x7a, 0x76, 0x09, 0x22, 0x48, 0xa1, 0x3d, 0xfd, 0x3c, 0xee, 0xb8, 0xa7, 0xbb, 0xdd, + 0x1f, 0xde, 0x5d, 0x2e, 0x48, 0x41, 0x42, 0xdc, 0x38, 0x71, 0xe1, 0x82, 0xc4, 0x05, 0x81, 0xa2, + 0x08, 0x21, 0x90, 0x38, 0x20, 0x84, 0x10, 0x37, 0x2e, 0x20, 0x71, 0x41, 0xdc, 0x38, 0x73, 0xe5, + 0x80, 0x84, 0x04, 0x7a, 0x55, 0xaf, 0xbb, 0xdf, 0xeb, 0xee, 0xb1, 0x67, 0x2d, 0x2b, 0xbb, 0xd1, + 0x72, 0x9b, 0xaa, 0x7e, 0x55, 0xaf, 0x5e, 0xfd, 0xea, 0xbd, 0xaa, 0xf7, 0x31, 0xb0, 0x10, 0x3b, + 0x87, 0xef, 0xdd, 0x8d, 0x9f, 0xbf, 0x1b, 0x5f, 0x09, 0xa3, 0x20, 0x09, 0x8c, 0xa5, 0x98, 0x45, + 0xc7, 0x2c, 0x7a, 0xcf, 0x0e, 0xdd, 0xf7, 0x42, 0x3b, 0xb2, 0x47, 0xb1, 0xf9, 0x0f, 0x1d, 0xda, + 0xd7, 0xa3, 0x20, 0x0d, 0x6f, 0xfa, 0xfb, 0x81, 0xd1, 0x85, 0xe9, 0x21, 0x12, 0x5b, 0x5d, 0x6d, + 0x55, 0x7b, 0xb6, 0x6d, 0x65, 0xa4, 0x71, 0x09, 0xda, 0xf8, 0x73, 0xdb, 0x1e, 0xb1, 0xae, 0x8e, + 0xdf, 0x0a, 0x86, 0x61, 0xc2, 0xac, 0x1f, 0x24, 0xee, 0xbe, 0x3b, 0xb0, 0x13, 0x37, 0xf0, 0xbb, + 0x0d, 0x6c, 0xa0, 0xf0, 0x78, 0x1b, 0xd7, 0x4f, 0xa2, 0xc0, 0x49, 0x07, 0xd8, 0x66, 0x8a, 0xda, + 0xc8, 0x3c, 0xde, 0xff, 0xbe, 0x3d, 0x60, 0x77, 0xac, 0x5b, 0xdd, 0x26, 0xf5, 0x2f, 0x48, 0x63, + 0x15, 0x3a, 0xc1, 0x5d, 0x9f, 0x45, 0x77, 0x62, 0x16, 0xdd, 0xdc, 0xea, 0xb6, 0xf0, 0xab, 0xcc, + 0x32, 0x2e, 0x03, 0x0c, 0x22, 0x66, 0x27, 0xec, 0xb6, 0x3b, 0x62, 0xdd, 0xe9, 0x55, 0xed, 0xd9, + 0x39, 0x4b, 0xe2, 0x70, 0x0d, 0x23, 0x36, 0xda, 0x63, 0xd1, 0x66, 0x90, 0xfa, 0x49, 0x77, 0x06, + 0x1b, 0xc8, 0x2c, 0x63, 0x1e, 0x74, 0x76, 0xaf, 0xdb, 0x46, 0xd5, 0x3a, 0xbb, 0x67, 0x2c, 0x43, + 0x2b, 0x4e, 0xec, 0x24, 0x8d, 0xbb, 0xb0, 0xaa, 0x3d, 0xdb, 0xb4, 0x04, 0x65, 0xac, 0xc1, 0x1c, + 0xea, 0x0d, 0x32, 0x6b, 0x3a, 0x28, 0xa2, 0x32, 0x73, 0x8f, 0xdd, 0xbe, 0x1f, 0xb2, 0xee, 0x2c, + 0x2a, 0x28, 0x18, 0xe6, 0x5f, 0x74, 0xb8, 0x80, 0x7e, 0xef, 0xa1, 0x01, 0xd7, 0x52, 0xcf, 0x3b, + 0x05, 0x81, 0x65, 0x68, 0xa5, 0xd4, 0x1d, 0xb9, 0x5f, 0x50, 0xbc, 0x9f, 0x28, 0xf0, 0xd8, 0x2d, + 0x76, 0xcc, 0x3c, 0x74, 0x7c, 0xd3, 0x2a, 0x18, 0xc6, 0x0a, 0xcc, 0xbc, 0x1f, 0xb8, 0x3e, 0xfa, + 0x64, 0x0a, 0x3f, 0xe6, 0x34, 0xff, 0xe6, 0xbb, 0x83, 0x43, 0x9f, 0x43, 0x4a, 0xee, 0xce, 0x69, + 0x19, 0x89, 0x96, 0x8a, 0xc4, 0x33, 0x30, 0x6f, 0x87, 0x61, 0xcf, 0xf6, 0x87, 0x2c, 0xa2, 0x4e, + 0xa7, 0x51, 0x6f, 0x89, 0xcb, 0xf1, 0xe0, 0x3d, 0xf5, 0x83, 0x34, 0x1a, 0x30, 0x74, 0x77, 0xd3, + 0x92, 0x38, 0x5c, 0x4f, 0x10, 0xb2, 0x48, 0x72, 0x23, 0x79, 0xbe, 0xc4, 0x15, 0xa8, 0x40, 0x8e, + 0x0a, 0xc7, 0x31, 0x4d, 0xd8, 0x1b, 0xbe, 0x83, 0x83, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x1d, + 0x0d, 0xe6, 0x77, 0xd3, 0x3d, 0xcf, 0x1d, 0xa0, 0x0a, 0xee, 0xd6, 0xc2, 0x79, 0x9a, 0xe2, 0x3c, + 0xd9, 0x05, 0xfa, 0x78, 0x17, 0x34, 0x54, 0x17, 0x2c, 0x43, 0x6b, 0xc8, 0x7c, 0x87, 0x45, 0xc2, + 0xa5, 0x82, 0x12, 0xa6, 0x36, 0x33, 0x53, 0xcd, 0xdf, 0xe9, 0x30, 0xf3, 0x31, 0x9b, 0xb0, 0x0a, + 0x9d, 0xf0, 0x20, 0xf0, 0xd9, 0x76, 0xca, 0xc3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0x8b, 0xd0, 0xdc, + 0x73, 0xa3, 0xe4, 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb2, 0x5d, 0x02, 0xb3, 0x6d, + 0x11, 0x21, 0x06, 0x34, 0x93, 0xfb, 0x5e, 0x9d, 0x63, 0xed, 0xca, 0x1c, 0xab, 0xc6, 0x06, 0xd4, + 0xc6, 0xc6, 0x73, 0xb0, 0x38, 0xf4, 0x82, 0x3d, 0xdb, 0xb3, 0xd8, 0xe0, 0xb8, 0x17, 0x0f, 0x77, + 0xc2, 0x04, 0x81, 0x6c, 0x5a, 0x15, 0xbe, 0xf9, 0x4f, 0x0d, 0xe0, 0x5a, 0xe4, 0x32, 0xdf, 0x41, + 0x37, 0x96, 0x16, 0x02, 0xad, 0xba, 0x10, 0x2c, 0x43, 0x2b, 0x62, 0x23, 0x3b, 0x3a, 0xcc, 0x26, + 0x0a, 0x51, 0x25, 0xe3, 0x1b, 0x15, 0xe3, 0x5f, 0x05, 0xd8, 0xc7, 0x7e, 0xb8, 0x1e, 0x74, 0x6b, + 0xe7, 0xc5, 0xff, 0xbb, 0x52, 0x59, 0x32, 0xaf, 0x64, 0x88, 0x5a, 0x52, 0x73, 0x3e, 0x0b, 0x6d, + 0xc7, 0x11, 0xc1, 0xde, 0xa4, 0x59, 0x98, 0x33, 0x6a, 0x62, 0xbd, 0x75, 0x42, 0xac, 0x4f, 0xe7, + 0x01, 0xf4, 0x77, 0x0d, 0xda, 0x1b, 0x9e, 0x3d, 0x38, 0x9c, 0x70, 0xe8, 0xea, 0x10, 0xf5, 0xca, + 0x10, 0xaf, 0xc3, 0xdc, 0x1e, 0x57, 0x97, 0x0d, 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x53, 0x35, 0xa3, + 0x54, 0x27, 0x90, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, + 0x87, 0xfb, 0x27, 0x1d, 0x66, 0x71, 0x51, 0xb4, 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, + 0xd2, 0xcc, 0x54, 0x6d, 0x52, 0x53, 0x73, 0x11, 0xe3, 0x15, 0xb1, 0x04, 0xa3, 0xbc, 0x8e, 0xf2, + 0x97, 0x6a, 0xe4, 0xf3, 0xfc, 0x67, 0x15, 0xcd, 0x79, 0xba, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, + 0x8b, 0x53, 0x2f, 0x11, 0x2b, 0xab, 0xc2, 0xa3, 0x48, 0x3b, 0xea, 0xc5, 0x43, 0x91, 0xcc, 0x04, + 0xc5, 0xbd, 0x43, 0xed, 0xf8, 0x27, 0x1a, 0x7a, 0xc1, 0xe0, 0x93, 0x3a, 0x62, 0x47, 0x88, 0x10, + 0x4d, 0xc1, 0x8c, 0x2c, 0xfa, 0x14, 0x5e, 0xa3, 0x40, 0x50, 0x78, 0x1c, 0x62, 0xa2, 0x51, 0x01, + 0x65, 0x31, 0x89, 0x53, 0x4e, 0x62, 0xe6, 0x5f, 0x1b, 0x30, 0x47, 0xd3, 0x27, 0x73, 0xea, 0x65, + 0x1e, 0xe7, 0xc1, 0x48, 0x89, 0x22, 0x89, 0xc3, 0xad, 0xe0, 0xd4, 0xb6, 0xba, 0x28, 0x29, 0x3c, + 0x1e, 0x8a, 0x9c, 0xbe, 0xa6, 0x2c, 0x4e, 0x32, 0x2b, 0xeb, 0xe5, 0xba, 0xbc, 0x48, 0x49, 0x1c, + 0xbe, 0xec, 0x25, 0x81, 0x12, 0x1d, 0x39, 0xcd, 0x65, 0x93, 0x20, 0xef, 0x9f, 0xe2, 0x43, 0xe2, + 0x70, 0xff, 0x26, 0x41, 0xd6, 0x37, 0x39, 0xa9, 0x60, 0x90, 0x66, 0xd1, 0x2f, 0xa5, 0x9d, 0x9c, + 0xae, 0xa0, 0xda, 0x3e, 0x11, 0x55, 0x50, 0x50, 0x55, 0x27, 0x57, 0xa7, 0x32, 0xb9, 0xd6, 0x60, + 0x8e, 0xf4, 0x64, 0x41, 0x3f, 0x4b, 0x65, 0x81, 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, + 0xba, 0xf3, 0x63, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, 0xb9, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x46, + 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, 0x55, 0x78, 0x72, 0x4e, 0xd1, 0xd5, 0x9c, 0x62, + 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, + 0xe6, 0x39, 0x23, 0x88, 0x1c, 0x91, 0x65, 0x9a, 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0xf1, + 0xd3, 0xa2, 0x1c, 0xa0, 0x72, 0x4f, 0xad, 0xd7, 0x9e, 0x83, 0xc5, 0x38, 0xdd, 0x2b, 0x06, 0xb7, + 0x9d, 0x8e, 0x44, 0xb8, 0x57, 0xf8, 0xdc, 0xa9, 0x54, 0xc8, 0xf1, 0x46, 0x94, 0x96, 0x0a, 0x46, + 0xb9, 0x82, 0x30, 0x3f, 0xd4, 0x61, 0x71, 0x27, 0x1a, 0xda, 0xbe, 0xfb, 0x4d, 0x2c, 0x4d, 0x71, + 0x01, 0x3f, 0x4b, 0x7a, 0x5e, 0x85, 0x0e, 0xf3, 0x87, 0x9e, 0x1b, 0x1f, 0x6c, 0x17, 0x7e, 0x93, + 0x59, 0xb2, 0xb3, 0xa7, 0xc6, 0x25, 0xf0, 0xa6, 0x92, 0xc0, 0x97, 0xa1, 0x35, 0x0a, 0xf6, 0x5c, + 0x2f, 0x8b, 0x7b, 0x41, 0x61, 0xcc, 0x33, 0x8f, 0x61, 0x26, 0xcf, 0x63, 0x3e, 0x63, 0x14, 0x49, + 0x7d, 0xa6, 0x36, 0xa9, 0xb7, 0xe5, 0xa4, 0xae, 0x3a, 0x1e, 0x2a, 0x8e, 0x27, 0x77, 0x75, 0x72, + 0x77, 0xfd, 0x56, 0x83, 0xc5, 0xc2, 0xdd, 0x54, 0xaf, 0x8e, 0x75, 0x57, 0x39, 0x02, 0xf5, 0x9a, + 0x08, 0xcc, 0xe3, 0xa6, 0x21, 0xc7, 0x0d, 0x8f, 0xb4, 0x20, 0x76, 0xa5, 0xbd, 0x41, 0x4e, 0xf3, + 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, 0xd0, 0x5b, 0x4a, 0x85, 0x5e, 0xce, 0xa3, 0xbf, + 0xd2, 0xe0, 0x22, 0x47, 0xb9, 0x32, 0x8c, 0x1d, 0x58, 0x0c, 0x4a, 0x91, 0x20, 0x12, 0xcd, 0xd3, + 0x35, 0x89, 0xa2, 0x1c, 0x34, 0x56, 0x45, 0x98, 0x2b, 0x74, 0x4a, 0x9d, 0x88, 0xcc, 0x53, 0xa7, + 0xb0, 0x6c, 0x8f, 0x55, 0x11, 0x36, 0x7f, 0xad, 0xc1, 0x22, 0xa5, 0x36, 0x69, 0x9e, 0x9f, 0xbb, + 0xd9, 0xef, 0xc0, 0xc5, 0x72, 0xcf, 0xb7, 0xdc, 0x38, 0xe9, 0xea, 0xab, 0x8d, 0x49, 0x4d, 0xaf, + 0x55, 0xc0, 0xe7, 0xda, 0x93, 0xbb, 0xa9, 0xe7, 0xf5, 0x58, 0x1c, 0xdb, 0x43, 0xb6, 0x71, 0xbf, + 0xcf, 0x8e, 0xf8, 0x07, 0x8b, 0x1d, 0x8d, 0x8d, 0x21, 0x5e, 0xe7, 0x60, 0xa1, 0xe0, 0x06, 0x7e, + 0x1e, 0x42, 0x32, 0x8b, 0x4f, 0xab, 0x98, 0xf4, 0x74, 0x1b, 0xab, 0x0d, 0x9e, 0x42, 0x05, 0x69, + 0x7c, 0x03, 0x66, 0x31, 0x87, 0x8b, 0x6e, 0xba, 0x53, 0x38, 0x80, 0xd7, 0x6a, 0xab, 0x86, 0x5a, + 0xab, 0xa8, 0x1a, 0x10, 0xf4, 0x1b, 0x7e, 0x12, 0xdd, 0xb7, 0x14, 0x8d, 0x2b, 0xef, 0xc2, 0x52, + 0xa5, 0x89, 0xb1, 0x08, 0x8d, 0x43, 0x76, 0x5f, 0x8c, 0x83, 0xff, 0x34, 0x5e, 0x80, 0xe6, 0xb1, + 0xed, 0xa5, 0x4c, 0xa0, 0xbf, 0x52, 0x63, 0x81, 0xb0, 0xd9, 0xa2, 0x86, 0xaf, 0xe8, 0x5f, 0xd4, + 0xcc, 0xa7, 0xf3, 0x81, 0xc9, 0x63, 0xd4, 0x94, 0x31, 0x9a, 0x6f, 0x41, 0xa7, 0x17, 0x0f, 0xb7, + 0xec, 0xc4, 0xc6, 0x86, 0xaf, 0x41, 0x67, 0x54, 0x90, 0xd8, 0xb8, 0xbe, 0x3f, 0x21, 0x64, 0xc9, + 0xcd, 0xcd, 0x3f, 0xea, 0xd0, 0xad, 0x77, 0x45, 0x1c, 0x72, 0x1b, 0x58, 0x14, 0x6d, 0x06, 0x0e, + 0xc3, 0xa1, 0x35, 0xad, 0x8c, 0xe4, 0xd8, 0xb1, 0x28, 0xe2, 0x39, 0x4c, 0x14, 0xd9, 0x44, 0x19, + 0x57, 0x60, 0xca, 0xcb, 0x60, 0x39, 0xd9, 0x0a, 0x6c, 0x67, 0x8c, 0x60, 0x11, 0xbd, 0x2b, 0x0d, + 0x48, 0x60, 0xb6, 0x3e, 0x31, 0x66, 0x71, 0x48, 0xa0, 0x49, 0x3a, 0x08, 0xb8, 0x8a, 0xea, 0x95, + 0x01, 0x3c, 0x51, 0xdb, 0xb4, 0x06, 0xc0, 0x2f, 0xa8, 0x00, 0x5e, 0x1e, 0x3f, 0x94, 0x32, 0x88, + 0x21, 0x18, 0xd7, 0x59, 0xd2, 0xb3, 0xef, 0xad, 0xfb, 0x4e, 0xcf, 0xf5, 0xfb, 0xec, 0x88, 0x47, + 0xfb, 0x2a, 0x74, 0xc4, 0x56, 0x3e, 0x87, 0xa9, 0x6d, 0xc9, 0xac, 0xb1, 0x3b, 0xfc, 0xd2, 0x7c, + 0x68, 0x54, 0xe6, 0x83, 0x79, 0x15, 0x66, 0xe5, 0xee, 0x30, 0x89, 0xd8, 0xf7, 0xfa, 0xec, 0x08, + 0x07, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0xd8, 0x42, 0xec, 0x0d, 0x04, 0x65, 0xfe, 0x41, 0x87, 0x0b, + 0x15, 0x93, 0xe3, 0xf0, 0x41, 0xf5, 0xc8, 0xf1, 0xd2, 0x18, 0x17, 0x2f, 0x53, 0x4a, 0xbc, 0x1c, + 0xc2, 0x12, 0x81, 0x24, 0x75, 0xdd, 0x6d, 0x62, 0x00, 0xbc, 0x5e, 0x57, 0xaa, 0x57, 0x8d, 0x14, + 0xd8, 0x4b, 0x5c, 0x02, 0xbf, 0xaa, 0x77, 0x85, 0xc1, 0x72, 0x7d, 0xe3, 0x1a, 0xf8, 0x5f, 0x56, + 0xe1, 0xff, 0xff, 0x3a, 0xf8, 0x65, 0x4b, 0x24, 0xfc, 0x8f, 0x60, 0x81, 0x2f, 0xaa, 0x7d, 0xe6, + 0x3b, 0xbd, 0x78, 0x88, 0x8e, 0x5c, 0x85, 0x0e, 0xc9, 0xf7, 0xe2, 0x61, 0xb1, 0x75, 0x93, 0x58, + 0xbc, 0xc5, 0xc0, 0x73, 0xf9, 0xe2, 0x89, 0x2d, 0xc4, 0xa2, 0x27, 0xb1, 0x78, 0x82, 0x8c, 0x99, + 0x38, 0xf5, 0xe0, 0xde, 0x6d, 0x58, 0x39, 0x6d, 0x7e, 0xd0, 0x82, 0x69, 0x11, 0x8d, 0x98, 0x14, + 0xf9, 0x6e, 0x39, 0x5f, 0x56, 0x89, 0xa2, 0xba, 0x76, 0x70, 0x5c, 0x84, 0x17, 0x51, 0xf2, 0x91, + 0x53, 0x43, 0x3d, 0x72, 0x2a, 0xd9, 0x34, 0x55, 0xb5, 0xa9, 0x34, 0xae, 0x66, 0x75, 0x5c, 0xbc, + 0x8c, 0xc3, 0xca, 0x66, 0xd7, 0xb3, 0x93, 0xfd, 0x20, 0x1a, 0x89, 0xcd, 0x6f, 0xd3, 0xaa, 0xf0, + 0x79, 0xe9, 0x48, 0xbc, 0xbc, 0xf6, 0xa7, 0x14, 0x5e, 0xe2, 0xf2, 0x4a, 0x9b, 0x38, 0xd9, 0x1e, + 0x80, 0x4e, 0x28, 0x54, 0x26, 0xd9, 0x16, 0xc7, 0x6e, 0xe0, 0x63, 0x15, 0x4a, 0xa5, 0xbe, 0xcc, + 0xe2, 0x23, 0x1f, 0xc5, 0xc3, 0x6b, 0x51, 0x30, 0x12, 0xe7, 0x14, 0x19, 0x89, 0x23, 0x0f, 0xfc, + 0x24, 0xab, 0x60, 0xe9, 0x6c, 0x42, 0x66, 0x71, 0x59, 0x41, 0x62, 0x9d, 0x3f, 0x6b, 0x65, 0x24, + 0x8f, 0xa5, 0x98, 0x1d, 0x89, 0xe2, 0x9d, 0xff, 0x54, 0x90, 0x5b, 0x50, 0x91, 0x2b, 0x55, 0x63, + 0x8b, 0xf8, 0x55, 0xae, 0xc6, 0x8a, 0x12, 0x67, 0x49, 0x29, 0x71, 0xd6, 0x61, 0x3a, 0x08, 0xf9, + 0xf4, 0x8f, 0xbb, 0x06, 0x4e, 0x97, 0x4f, 0x8f, 0x5f, 0xa0, 0xae, 0xec, 0x50, 0x4b, 0x9a, 0x18, + 0x99, 0x9c, 0x71, 0x0b, 0x16, 0x82, 0xfd, 0x7d, 0xcf, 0xf5, 0xd9, 0x6e, 0x1a, 0x1f, 0xe0, 0x26, + 0xf9, 0x02, 0x06, 0xbb, 0x59, 0x57, 0x44, 0xa8, 0x2d, 0xad, 0xb2, 0x28, 0xaf, 0xfc, 0xec, 0x84, + 0x36, 0x39, 0xb8, 0xc0, 0x5d, 0xc4, 0x05, 0x4e, 0xe1, 0xe1, 0xd9, 0x9d, 0xb4, 0xd0, 0x3f, 0x81, + 0x8e, 0x93, 0x59, 0x2b, 0xaf, 0xc0, 0xac, 0x6c, 0x6c, 0xcd, 0xc4, 0xbc, 0x28, 0x4f, 0xcc, 0x19, + 0x79, 0xde, 0x7d, 0x5f, 0x83, 0x85, 0x92, 0x99, 0xbc, 0x75, 0xe2, 0x26, 0x1e, 0x13, 0x1a, 0x88, + 0xe0, 0x3b, 0x1d, 0x87, 0xc5, 0x03, 0x31, 0x11, 0xf0, 0xb7, 0xa8, 0x19, 0x1b, 0xf9, 0x59, 0x97, + 0x09, 0xb3, 0xee, 0x4e, 0x9f, 0x2b, 0xea, 0x07, 0xa9, 0xef, 0xe4, 0xe7, 0xd5, 0x12, 0x8f, 0x07, + 0xa2, 0xbb, 0xd3, 0xdf, 0xb0, 0x9d, 0x21, 0xa3, 0x53, 0xe5, 0x26, 0xda, 0xa4, 0x32, 0x4d, 0x07, + 0x66, 0x6e, 0xbb, 0x61, 0xbc, 0x19, 0x8c, 0x46, 0x1c, 0x4e, 0x87, 0x25, 0xbc, 0x26, 0xd7, 0x70, + 0xf0, 0x82, 0xe2, 0x9e, 0x71, 0xd8, 0xbe, 0x9d, 0x7a, 0x09, 0x6f, 0x9a, 0x4d, 0x7f, 0x89, 0x85, + 0xe7, 0xa9, 0x71, 0xe0, 0x6f, 0x91, 0x34, 0xd9, 0x29, 0x71, 0xcc, 0xdf, 0xeb, 0xb0, 0x88, 0xab, + 0xdb, 0x26, 0x06, 0x8f, 0x83, 0x42, 0x2f, 0x42, 0x13, 0x27, 0xb3, 0xa8, 0x0e, 0x4f, 0x3e, 0xfd, + 0xa0, 0xa6, 0xc6, 0x55, 0x68, 0x05, 0x21, 0x96, 0x94, 0xb4, 0xf4, 0x3d, 0x33, 0x4e, 0x48, 0x3d, + 0xba, 0xb6, 0x84, 0x94, 0x71, 0x0d, 0x60, 0x54, 0x54, 0x90, 0x54, 0x08, 0x4c, 0xaa, 0x43, 0x92, + 0xe4, 0xce, 0xcd, 0x73, 0x5c, 0x7e, 0x7e, 0xdd, 0xb0, 0x54, 0xa6, 0xb1, 0x0d, 0xf3, 0x68, 0xf6, + 0x4e, 0x76, 0x0c, 0x86, 0x18, 0x4c, 0xde, 0x63, 0x49, 0xda, 0xfc, 0x91, 0x26, 0xdc, 0xc8, 0xbf, + 0xf6, 0x19, 0xf9, 0xbe, 0x70, 0x89, 0x76, 0x26, 0x97, 0xac, 0xc0, 0xcc, 0x28, 0x95, 0x4e, 0xe5, + 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0x26, 0x86, 0xc8, 0xfc, 0xb1, 0x06, 0xdd, 0x37, 0x03, 0xd7, + 0xc7, 0x0f, 0xeb, 0x61, 0xe8, 0x89, 0x4b, 0x96, 0x33, 0x63, 0xfe, 0x65, 0x68, 0xdb, 0xa4, 0xc6, + 0x4f, 0x04, 0xec, 0x13, 0x9c, 0xb4, 0x15, 0x32, 0xd2, 0xa1, 0x49, 0x43, 0x3e, 0x34, 0x31, 0x3f, + 0xd2, 0x60, 0x9e, 0x9c, 0xf2, 0x76, 0xea, 0x26, 0x67, 0xb6, 0x6f, 0x03, 0x66, 0x8e, 0x52, 0x37, + 0x39, 0x43, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0x33, 0x0d, 0x2e, 0x95, + 0xdd, 0xba, 0x3e, 0x18, 0xb0, 0xf0, 0x61, 0x4e, 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, + 0x6b, 0xb2, 0xc5, 0xde, 0x67, 0x83, 0x47, 0xd7, 0xe4, 0x6f, 0xeb, 0xf0, 0xbf, 0xd7, 0xf3, 0x89, + 0x77, 0x3b, 0xb2, 0xfd, 0x78, 0x9f, 0x45, 0xd1, 0x43, 0xb4, 0xf7, 0x16, 0xcc, 0xf9, 0xec, 0x6e, + 0x61, 0x93, 0x98, 0x8e, 0x93, 0xaa, 0x51, 0x85, 0x27, 0x5b, 0xbb, 0xcc, 0x7f, 0x69, 0xb0, 0x48, + 0x7a, 0xde, 0x72, 0x07, 0x87, 0x0f, 0x71, 0xf0, 0xdb, 0x30, 0x7f, 0x88, 0x16, 0x70, 0xea, 0x0c, + 0xcb, 0x76, 0x49, 0x7a, 0xc2, 0xe1, 0xff, 0x5b, 0x83, 0x25, 0x52, 0x74, 0xd3, 0x3f, 0x76, 0x1f, + 0x66, 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x9c, 0xd1, 0x01, 0x65, 0xf1, 0x09, 0x3d, 0xf0, 0x4b, + 0x0d, 0x16, 0x48, 0xd3, 0x1b, 0x7e, 0xc2, 0xa2, 0x33, 0x8f, 0xff, 0x06, 0x74, 0x98, 0x9f, 0x44, + 0xb6, 0x7f, 0x96, 0x15, 0x52, 0x16, 0x9d, 0x70, 0x91, 0xfc, 0x48, 0x03, 0x03, 0x55, 0x6d, 0xb9, + 0xf1, 0xc8, 0x8d, 0xe3, 0x87, 0x08, 0xdd, 0x64, 0x06, 0xff, 0x40, 0x87, 0x8b, 0x92, 0x96, 0x5e, + 0x9a, 0x3c, 0xea, 0x26, 0x1b, 0x5b, 0xd0, 0xe6, 0x35, 0x82, 0x7c, 0x1b, 0x39, 0x69, 0x47, 0x85, + 0x20, 0xaf, 0x62, 0x91, 0xe8, 0xb3, 0x41, 0xe0, 0x3b, 0x31, 0x16, 0x47, 0x73, 0x96, 0xc2, 0xe3, + 0xcb, 0xd0, 0x8a, 0xa4, 0x66, 0xd3, 0xf6, 0x07, 0xcc, 0x7b, 0x6c, 0x5c, 0x64, 0xfe, 0x54, 0x83, + 0x79, 0x6a, 0xf2, 0xe8, 0x0f, 0x99, 0xe7, 0x7a, 0x0a, 0xe4, 0x4f, 0x0c, 0x4a, 0x3c, 0xbc, 0x96, + 0x25, 0x2d, 0x72, 0x5d, 0xfd, 0xe8, 0x86, 0xd6, 0x0d, 0xe8, 0x0c, 0x0e, 0x6c, 0x7f, 0x78, 0xa6, + 0xe0, 0x92, 0x45, 0xcd, 0x04, 0x9e, 0x94, 0x0f, 0xe0, 0x37, 0xe9, 0x13, 0x0e, 0xff, 0xa5, 0xd2, + 0x50, 0x4e, 0x7c, 0x6d, 0xf0, 0x60, 0x4e, 0x3f, 0x84, 0x25, 0xba, 0xf5, 0x95, 0x6a, 0x42, 0xa3, + 0x0b, 0xd3, 0xb6, 0x43, 0xc7, 0x10, 0x1a, 0x0a, 0x65, 0xa4, 0x7a, 0x9f, 0x2f, 0x9e, 0x77, 0x15, + 0xf7, 0xf9, 0x97, 0x01, 0x6c, 0xc7, 0x79, 0x27, 0x88, 0x1c, 0xd7, 0xcf, 0x0a, 0x7c, 0x89, 0x63, + 0xbe, 0x09, 0xb3, 0xd7, 0xa2, 0x60, 0x74, 0x5b, 0xba, 0xbf, 0x3d, 0xf1, 0x86, 0x59, 0xbe, 0xfb, + 0xd5, 0xd5, 0xbb, 0x5f, 0xf3, 0xeb, 0xf0, 0x44, 0xc5, 0x70, 0x74, 0xd6, 0x26, 0x5d, 0x4b, 0x67, + 0x9d, 0x88, 0x90, 0xa9, 0x3b, 0x97, 0x93, 0x6d, 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0xaa, + 0xa8, 0x5f, 0x0f, 0xc3, 0x28, 0x38, 0x16, 0x98, 0x9c, 0x47, 0x37, 0x6a, 0xf1, 0xab, 0x97, 0x8b, + 0xdf, 0x5a, 0x23, 0x94, 0x82, 0xfd, 0x63, 0x30, 0xe2, 0x27, 0x1a, 0x2c, 0x08, 0x23, 0x1c, 0x47, + 0x74, 0xfb, 0x32, 0xb4, 0xe8, 0x49, 0x8b, 0xe8, 0xf0, 0xa9, 0xda, 0x0e, 0xb3, 0xa7, 0x38, 0x96, + 0x68, 0x5c, 0x8d, 0x48, 0xbd, 0x6e, 0x46, 0x7d, 0x29, 0x0f, 0xf6, 0x89, 0x1f, 0x9d, 0x08, 0x01, + 0xf3, 0xab, 0x59, 0x30, 0x6f, 0x31, 0x8f, 0x9d, 0xa7, 0x8f, 0xcc, 0x3b, 0x30, 0x8f, 0xef, 0x6b, + 0x0a, 0x1f, 0x9c, 0x8b, 0xda, 0x77, 0x60, 0x11, 0xd5, 0x9e, 0xbb, 0xbd, 0xf9, 0xec, 0xe0, 0xfe, + 0x91, 0x97, 0x92, 0x73, 0xd1, 0xfe, 0x79, 0xb8, 0x90, 0xf9, 0xfe, 0x4e, 0xe8, 0xe4, 0x87, 0x48, + 0x63, 0xee, 0xe9, 0xcc, 0x17, 0x60, 0x79, 0x33, 0xf0, 0x8f, 0x59, 0x14, 0xd3, 0x45, 0x22, 0x8a, + 0x64, 0x12, 0xca, 0xe4, 0x17, 0x94, 0xf9, 0x3e, 0xac, 0xc8, 0x12, 0x7d, 0x96, 0xec, 0x46, 0xee, + 0xb1, 0x24, 0x25, 0x0e, 0xa8, 0x35, 0xe5, 0x80, 0xba, 0x38, 0xd0, 0xd6, 0x95, 0x03, 0xed, 0x4b, + 0xd0, 0x76, 0x63, 0xa1, 0x00, 0x83, 0x6a, 0xc6, 0x2a, 0x18, 0xa6, 0x0d, 0x4b, 0xe4, 0x7e, 0x71, + 0x61, 0x84, 0x5d, 0xac, 0xc0, 0x0c, 0xc5, 0x54, 0xde, 0x49, 0x4e, 0x8f, 0xbd, 0x7e, 0x19, 0x7b, + 0xd9, 0x68, 0xf6, 0x61, 0x49, 0x3c, 0xaa, 0xd9, 0xb5, 0x87, 0xae, 0x4f, 0x8b, 0xec, 0x65, 0x80, + 0xd0, 0x1e, 0x66, 0x0f, 0xf0, 0xe8, 0xda, 0x4c, 0xe2, 0xf0, 0xef, 0xf1, 0x41, 0x70, 0x57, 0x7c, + 0xd7, 0xe9, 0x7b, 0xc1, 0x31, 0xbf, 0x02, 0x86, 0xc5, 0xe2, 0x30, 0xf0, 0x63, 0x26, 0x69, 0x5d, + 0x85, 0xce, 0x66, 0x1a, 0x45, 0xcc, 0xe7, 0x5d, 0x65, 0x2f, 0xcc, 0x64, 0x16, 0xd7, 0xdb, 0x2f, + 0xf4, 0xd2, 0x11, 0xbb, 0xc4, 0x31, 0x7f, 0xd8, 0x80, 0x76, 0xdf, 0x1d, 0xfa, 0xb6, 0x67, 0xb1, + 0x23, 0xe3, 0x35, 0x68, 0xd1, 0x96, 0x45, 0x44, 0x4a, 0xdd, 0x91, 0x2f, 0xb5, 0xa6, 0xbd, 0x99, + 0xc5, 0x8e, 0x6e, 0xfc, 0x8f, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0xdd, 0xa4, 0x23, 0x28, + 0x91, 0xbf, 0x3e, 0x73, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x03, 0x2c, 0x69, + 0xc4, 0xf2, 0x30, 0xde, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, + 0x99, 0x7a, 0xbc, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xbc, 0x13, + 0x8a, 0xb3, 0xc3, 0xf1, 0xd2, 0x37, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, + 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, + 0x60, 0x3b, 0xe6, 0x87, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, + 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x7e, 0x3d, 0x48, 0x9f, 0x9d, 0x14, 0x24, 0xd2, 0x56, 0x82, 0xe9, + 0x6a, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0xae, 0x96, 0x80, 0x5a, 0x3b, 0x15, + 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5a, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x6a, + 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0xfe, 0xac, 0xc3, 0x3c, 0xba, 0x8c, 0x6e, + 0x61, 0xfd, 0xfd, 0x00, 0xef, 0x03, 0xd0, 0x5d, 0xea, 0x1b, 0x4d, 0x95, 0x69, 0x7c, 0x0e, 0x96, + 0x88, 0xc1, 0xa4, 0xeb, 0x12, 0x1d, 0xaf, 0x4b, 0xaa, 0x1f, 0xf0, 0x82, 0x28, 0x8d, 0x93, 0x60, + 0xb4, 0x65, 0x27, 0x76, 0x56, 0x7c, 0x15, 0x1c, 0xf9, 0xfa, 0x6e, 0xaa, 0xf2, 0x62, 0x3c, 0x0a, + 0x82, 0x51, 0x7e, 0x2f, 0x27, 0x28, 0x2e, 0x91, 0xb8, 0x23, 0x16, 0xa4, 0x89, 0x58, 0x26, 0x32, + 0x92, 0xde, 0x51, 0x39, 0xae, 0x8d, 0x97, 0x5e, 0xe2, 0x91, 0x51, 0xce, 0xc0, 0x95, 0xad, 0xb8, + 0xc4, 0x13, 0x2f, 0xba, 0x0b, 0xce, 0x04, 0x17, 0x6e, 0xf8, 0x1f, 0x00, 0x37, 0x71, 0xe5, 0xc7, + 0x47, 0x4d, 0x4b, 0xe1, 0x99, 0x7f, 0xd3, 0xe0, 0xc2, 0xae, 0x1d, 0x25, 0xee, 0xc0, 0x0d, 0x6d, + 0x3f, 0xe9, 0xb1, 0xc4, 0xc6, 0x71, 0x2a, 0x8f, 0x39, 0xb5, 0x07, 0x7b, 0xcc, 0xb9, 0x0b, 0x0b, + 0x43, 0x75, 0x07, 0xf2, 0x80, 0x9b, 0x87, 0xb2, 0xb8, 0xf2, 0x32, 0xb5, 0xf1, 0xc0, 0x2f, 0x53, + 0xcd, 0xef, 0xea, 0xb0, 0x50, 0x5a, 0x5e, 0x4f, 0xcc, 0x4d, 0xeb, 0x00, 0x6e, 0x1e, 0x6a, 0x27, + 0x1c, 0xd0, 0xab, 0xf1, 0x68, 0x49, 0x42, 0x75, 0xb7, 0x7d, 0x8d, 0xb3, 0xdf, 0xf6, 0xdd, 0x80, + 0x4e, 0x58, 0x80, 0x74, 0xc2, 0xfe, 0xa8, 0x06, 0x4a, 0x4b, 0x16, 0x35, 0xdf, 0x85, 0xa5, 0xca, + 0x2a, 0x86, 0xd7, 0x76, 0xc1, 0x21, 0xf3, 0xf3, 0x6b, 0x3b, 0x4e, 0x48, 0x01, 0xad, 0x97, 0x03, + 0xda, 0x73, 0x8f, 0xe5, 0x67, 0xf2, 0x82, 0x34, 0xbf, 0xa7, 0xc3, 0x72, 0x7d, 0x06, 0x7a, 0x5c, + 0xdd, 0xbd, 0x07, 0xdd, 0x71, 0xab, 0xfd, 0xb9, 0x79, 0xbd, 0x88, 0xee, 0x3c, 0x57, 0x3f, 0xae, + 0xee, 0xbe, 0x90, 0x45, 0xb7, 0x94, 0x0e, 0xcd, 0x5f, 0xe4, 0xfe, 0xc9, 0xab, 0x91, 0xc7, 0xd4, + 0x3f, 0xc6, 0x73, 0xb0, 0x48, 0xc3, 0x94, 0x9e, 0x87, 0x50, 0x71, 0x5b, 0xe1, 0x17, 0x2b, 0x85, + 0x54, 0x1a, 0x9c, 0x5b, 0xcc, 0xfe, 0x46, 0xcb, 0x30, 0xc9, 0x6b, 0xbc, 0x4f, 0x14, 0x26, 0x45, + 0xa4, 0x49, 0x85, 0x8f, 0x14, 0x69, 0x79, 0xed, 0xf9, 0xdf, 0x48, 0x3b, 0x3d, 0xd2, 0x72, 0x5f, + 0x4a, 0x45, 0xa0, 0xf9, 0x2d, 0x98, 0xdb, 0x62, 0x5e, 0x2f, 0x1e, 0x66, 0xef, 0x57, 0xcf, 0x75, + 0x33, 0x59, 0x7e, 0xe5, 0x37, 0x55, 0x7d, 0xe5, 0xb7, 0x01, 0xf3, 0xb2, 0x01, 0x67, 0x79, 0x9f, + 0xb9, 0x71, 0xe9, 0x6b, 0x2b, 0x57, 0x9e, 0xa7, 0xff, 0x85, 0xbe, 0x5a, 0x71, 0xe2, 0x5e, 0x0b, + 0xff, 0x27, 0xfa, 0xd2, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xce, 0x12, 0x67, 0xe3, 0x3a, 0x3a, + 0x00, 0x00, } From 1e62ddce738f04a050e0fbf58715cba0453bb685 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 11:31:24 +0800 Subject: [PATCH 539/752] super update --- internal/msg_gateway/gate/logic.go | 3 +-- internal/push/logic/push_to_client.go | 2 +- internal/rpc/msg/send_msg.go | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 35059ec5b..e12062338 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -3,7 +3,6 @@ package gate import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" @@ -93,7 +92,7 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { } } -func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *pbChat.GetMaxAndMinSeqResp) { +func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeqResp) { log.Debug(m.OperationID, "getSeqResp come here ", pb.String()) b, _ := proto.Marshal(pb) mReply := Resp{ diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 909a97d8c..450f57fb0 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -51,7 +51,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("SuperGroupOnlineBatchPushOneMsg push data to client rpc err", pushMsg.OperationID, "err", err) continue diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index aa6506f7c..0419458e6 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -431,7 +431,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status string) error { switch status { case constant.OnlineStatus: - pid, offset, err := rpc.onlineProducer.SendMessage(m, key) + pid, offset, err := rpc.onlineProducer.SendMessage(m, key, m.OperationID) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } else { @@ -439,7 +439,7 @@ func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status str } return err case constant.OfflineStatus: - pid, offset, err := rpc.onlineProducer.SendMessage(m, key) + pid, offset, err := rpc.onlineProducer.SendMessage(m, key, m.OperationID) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } From 6f0860d954396a70b883d9d9148d0cecacd538bf Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 12:57:40 +0800 Subject: [PATCH 540/752] add global msg recv opt --- pkg/common/db/newRedisModel.go | 27 +++++++++++++++++++-------- pkg/common/db/redisModel.go | 1 + pkg/common/db/redisModel_test.go | 13 +++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index fec8ad0d1..ba805c066 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -10,15 +10,11 @@ import ( "context" "errors" "fmt" + go_redis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/jsonpb" - - "github.com/garyburd/redigo/redis" - - //goRedis "github.com/go-redis/redis/v8" + "github.com/golang/protobuf/proto" "strconv" "time" - - "github.com/golang/protobuf/proto" ) //func (d * DataBases)pubMessage(channel, msg string) { @@ -27,7 +23,22 @@ import ( //func (d * DataBases)pubMessage(channel, msg string) { // d.rdb.Publish(context.Background(),channel,msg) //} - +func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { + key := conversationReceiveMessageOpt + userID + return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() +} +func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { + key := conversationReceiveMessageOpt + userID + result, err := d.rdb.HGet(context.Background(), key, GlobalMsgRecvOpt).Result() + if err != nil { + if err == go_redis.Nil { + return 0, nil + } else { + return 0, err + } + } + return utils.StringToInt(result), err +} func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 @@ -83,7 +94,7 @@ func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID str key := messageCache + userID + "_" + "*" vals, err := d.rdb.Keys(ctx, key).Result() log2.Debug(operationID, "vals: ", vals) - if err == redis.ErrNil { + if err == go_redis.Nil { return nil } if err != nil { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 68747e0e3..b92cb0ea8 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -36,6 +36,7 @@ const ( messageCache = "MESSAGE_CACHE:" SignalCache = "SIGNAL_CACHE:" SignalListCache = "SIGNAL_LIST_CACHE:" + GlobalMsgRecvOpt = "GLOBAL_MSG_RECV_OPT" ) func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index de05583df..d9d71b94a 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -87,3 +87,16 @@ func Test_NewGetMessageListBySeq(t *testing.T) { fmt.Println(seqMsg, failedSeqList) } +func Test_SetUserGlobalMsgRecvOpt(t *testing.T) { + var opt int32 + uid := "test_uid" + opt = 1 + err := DB.SetUserGlobalMsgRecvOpt(uid, opt) + assert.Nil(t, err) +} +func Test_GetUserGlobalMsgRecvOpt(t *testing.T) { + uid := "test_uid" + opt, err := DB.GetUserGlobalMsgRecvOpt(uid) + assert.Nil(t, err) + fmt.Println("get opt", opt) +} From 8fe6231ebcf2310cf79b57847084015e00c492c9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 13:11:08 +0800 Subject: [PATCH 541/752] add global msg recv opt --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ba805c066..c14e71686 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -25,7 +25,7 @@ import ( //} func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { key := conversationReceiveMessageOpt + userID - return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() + return d.rdb.HSet(context.Background(), key, map[string]interface{}{GlobalMsgRecvOpt: opt}).Err() } func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { key := conversationReceiveMessageOpt + userID From d3279694b7a41c48ff1f6dcf7aa6bd0087cb3c2e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 13:12:16 +0800 Subject: [PATCH 542/752] add global msg recv opt --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index c14e71686..ba805c066 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -25,7 +25,7 @@ import ( //} func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { key := conversationReceiveMessageOpt + userID - return d.rdb.HSet(context.Background(), key, map[string]interface{}{GlobalMsgRecvOpt: opt}).Err() + return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() } func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { key := conversationReceiveMessageOpt + userID From 9eed6ce197079449bd423a11bc77666a918a0c56 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:24:21 +0800 Subject: [PATCH 543/752] alter rtc timeout --- internal/rpc/organization/organization.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 7b3624257..48d3008b8 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -119,11 +119,13 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea createGroupReq := &groupRpc.CreateGroupReq{ InitMemberList: nil, GroupInfo: &open_im_sdk.GroupInfo{ + Introduction: req.DepartmentInfo.Name, GroupName: req.DepartmentInfo.Name, FaceURL: req.DepartmentInfo.FaceURL, CreateTime: uint32(time.Now().Unix()), CreatorUserID: req.OpUserID, GroupType: constant.DepartmentGroup, + OwnerUserID: req.OpUserID, }, OperationID: req.OperationID, OpUserID: req.OpUserID, From e45ef5c49aef280fe02a5fdf44d0f6d35f028a69 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:30:58 +0800 Subject: [PATCH 544/752] alter rtc timeout --- internal/rpc/organization/organization.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 48d3008b8..391b12e7e 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -117,7 +117,12 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := groupRpc.NewGroupClient(etcdConn) createGroupReq := &groupRpc.CreateGroupReq{ - InitMemberList: nil, + InitMemberList: []*groupRpc.GroupAddMemberInfo{ + { + UserID: req.OpUserID, + RoleLevel: constant.GroupOwner, + }, + }, GroupInfo: &open_im_sdk.GroupInfo{ Introduction: req.DepartmentInfo.Name, GroupName: req.DepartmentInfo.Name, From 5965dcd029bd7ada1220cb9a23dcc42dec80d6dd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:39:49 +0800 Subject: [PATCH 545/752] alter rtc timeout --- internal/rpc/organization/organization.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 391b12e7e..608414225 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -117,12 +117,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := groupRpc.NewGroupClient(etcdConn) createGroupReq := &groupRpc.CreateGroupReq{ - InitMemberList: []*groupRpc.GroupAddMemberInfo{ - { - UserID: req.OpUserID, - RoleLevel: constant.GroupOwner, - }, - }, + InitMemberList: []*groupRpc.GroupAddMemberInfo{}, GroupInfo: &open_im_sdk.GroupInfo{ Introduction: req.DepartmentInfo.Name, GroupName: req.DepartmentInfo.Name, From 16641f0494dc272ec645b06341457f849ceb642f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:44:45 +0800 Subject: [PATCH 546/752] alter rtc timeout --- internal/rpc/organization/organization.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 608414225..1d22383dc 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -129,6 +129,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea }, OperationID: req.OperationID, OpUserID: req.OpUserID, + OwnerUserID: req.OpUserID, } createGroupResp, err := client.CreateGroup(context.Background(), createGroupReq) if err != nil { From 8a0c1120724fb43dc5f0ea6713afed3114db2c7f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:55:37 +0800 Subject: [PATCH 547/752] alter rtc timeout --- internal/demo/register/onboarding_process.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a937fc3eb..42e579d70 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -25,12 +25,11 @@ func onboardingProcess(operationID, userID, userName string) { if err := createOrganizationUser(operationID, userID, userName); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "createOrganizationUser failed", err.Error()) } - departmentID := config.Config.Demo.TestDepartMentID + departmentID, err := imdb.GetRandomDepartmentID() if err := joinTestDepartment(operationID, userID, departmentID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - departmentID, err := imdb.GetRandomDepartmentID() log.NewInfo(operationID, utils.GetSelfFuncName(), "random departmentID", departmentID) if err != nil { log.NewError(utils.GetSelfFuncName(), "GetRandomDepartmentID failed", err.Error()) From f4cdbe985e9c71c94a63ef7e1cc16a19938a9c79 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 14:57:21 +0800 Subject: [PATCH 548/752] alter rtc timeout --- pkg/common/db/newRedisModel.go | 22 +++++++ pkg/common/db/redisModel.go | 101 ++++++++++++++++----------------- 2 files changed, 71 insertions(+), 52 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ba805c066..cf95a1ed4 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -2,6 +2,7 @@ package db import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" pbRtc "Open_IM/pkg/proto/rtc" @@ -203,3 +204,24 @@ func (d *DataBases) DelUserSignalList(userID string) error { err := d.rdb.Del(context.Background(), keyList).Err() return err } + +func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { + for _, seq := range seqList { + key := messageCache + uid + "_" + strconv.Itoa(int(seq)) + result := d.rdb.Get(context.Background(), key).String() + var msg pbCommon.MsgData + if err := utils.String2Pb(result, &msg); err != nil { + log2.Error(operationID, utils.GetSelfFuncName(), "String2Pb failed", msg, err.Error()) + continue + } + msg.Status = constant.MsgDeleted + s, err := utils.Pb2String(&msg) + if err != nil { + log2.Error(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) + continue + } + if err := d.rdb.Set(context.Background(), key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err(); err != nil { + log2.Error(operationID, utils.GetSelfFuncName(), "Set failed", err.Error()) + } + } +} diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index b92cb0ea8..d13a1c5d2 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -5,7 +5,6 @@ import ( "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" - pbRtc "Open_IM/pkg/proto/rtc" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "encoding/json" @@ -14,8 +13,6 @@ import ( "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - //osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" "strconv" ) @@ -322,53 +319,53 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, return nil } -func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { - for _, seq := range seqList { - key := messageCache + uid + "_" + strconv.Itoa(int(seq)) - result, err := redis.String(d.Exec("GET", key)) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key) - continue - } - log2.Debug(operationID, utils.GetSelfFuncName(), "del result", result) - var msg pbCommon.MsgData - err = utils.String2Pb(result, &msg) - log2.NewDebug(operationID, utils.GetSelfFuncName(), "msg", msg) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) - continue - } - msg.Status = constant.MsgDeleted - s, err := utils.Pb2String(&msg) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) - continue - } - _, err = d.Exec("SET", key, s) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, msg, s) - } - } -} +//func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { +// for _, seq := range seqList { +// key := messageCache + uid + "_" + strconv.Itoa(int(seq)) +// result, err := redis.String(d.Exec("GET", key)) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key) +// continue +// } +// log2.Debug(operationID, utils.GetSelfFuncName(), "del result", result) +// var msg pbCommon.MsgData +// err = utils.String2Pb(result, &msg) +// log2.NewDebug(operationID, utils.GetSelfFuncName(), "msg", msg) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) +// continue +// } +// msg.Status = constant.MsgDeleted +// s, err := utils.Pb2String(&msg) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) +// continue +// } +// _, err = d.Exec("SET", key, s) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, msg, s) +// } +// } +//} -func (d *DataBases) CacheSignalInfo(msg *pbCommon.MsgData) error { - key := SignalCache + msg.ClientMsgID - _, err := d.Exec("SET", key, msg.Content, "ex", config.Config.Rtc.SignalTimeout) - return err -} - -func (d *DataBases) GetSignalInfoFromCache(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { - key := SignalCache + clientMsgID - result, err := redis.Bytes(d.Exec("GET", key)) - log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result, string(result)) - if err != nil { - return nil, err - } - req := &pbRtc.SignalReq{} - if err = proto.Unmarshal(result, req); err != nil { - return nil, err - } - req2 := req.Payload.(*pbRtc.SignalReq_Invite) - invitationInfo = req2.Invite - return invitationInfo, err -} +//func (d *DataBases) CacheSignalInfo(msg *pbCommon.MsgData) error { +// key := SignalCache + msg.ClientMsgID +// _, err := d.Exec("SET", key, msg.Content, "ex", config.Config.Rtc.SignalTimeout) +// return err +//} +// +//func (d *DataBases) GetSignalInfoFromCache(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { +// key := SignalCache + clientMsgID +// result, err := redis.Bytes(d.Exec("GET", key)) +// log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result, string(result)) +// if err != nil { +// return nil, err +// } +// req := &pbRtc.SignalReq{} +// if err = proto.Unmarshal(result, req); err != nil { +// return nil, err +// } +// req2 := req.Payload.(*pbRtc.SignalReq_Invite) +// invitationInfo = req2.Invite +// return invitationInfo, err +//} From 1aee41e7e700599501404f2adc5baa1963d90f72 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 16:16:35 +0800 Subject: [PATCH 549/752] go-redis --- pkg/common/db/newRedisModel.go | 91 +++++++++++++++++ pkg/common/db/redisModel.go | 172 ++++++++++++++++----------------- 2 files changed, 177 insertions(+), 86 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index cf95a1ed4..117e413c8 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -9,6 +9,7 @@ import ( pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "encoding/json" "errors" "fmt" go_redis "github.com/go-redis/redis/v8" @@ -225,3 +226,93 @@ func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID st } } } + +func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { + return d.rdb.Set(context.Background(), getuiToken, token, time.Duration(expireTime)*time.Second).Err() +} + +func (d *DataBases) GetGetuiToken() (string, error) { + result := d.rdb.Get(context.Background(), getuiToken) + return result.String(), result.Err() +} + +func (d *DataBases) AddFriendToCache(userID string, friendIDList ...string) error { + var IDList []interface{} + for _, id := range friendIDList { + IDList = append(IDList, id) + } + return d.rdb.SAdd(context.Background(), friendRelationCache+userID, IDList...).Err() +} + +func (d *DataBases) ReduceFriendToCache(userID string, friendIDList ...string) error { + var IDList []interface{} + for _, id := range friendIDList { + IDList = append(IDList, id) + } + return d.rdb.SRem(context.Background(), friendRelationCache+userID, IDList...).Err() +} + +func (d *DataBases) GetFriendIDListFromCache(userID string) ([]string, error) { + result := d.rdb.SMembers(context.Background(), friendRelationCache+userID) + return result.Result() +} + +func (d *DataBases) AddBlackUserToCache(userID string, blackList ...string) error { + var IDList []interface{} + for _, id := range blackList { + IDList = append(IDList, id) + } + return d.rdb.SAdd(context.Background(), blackListCache+userID, IDList...).Err() +} + +func (d *DataBases) ReduceBlackUserFromCache(userID string, blackList ...string) error { + var IDList []interface{} + for _, id := range blackList { + IDList = append(IDList, id) + } + return d.rdb.SRem(context.Background(), blackListCache+userID, IDList...).Err() +} + +func (d *DataBases) GetBlackListFromCache(userID string) ([]string, error) { + result := d.rdb.SMembers(context.Background(), blackListCache+userID) + return result.Result() +} + +func (d *DataBases) AddGroupMemberToCache(groupID string, userIDList ...string) error { + var IDList []interface{} + for _, id := range userIDList { + IDList = append(IDList, id) + } + return d.rdb.SAdd(context.Background(), groupCache+groupID, IDList...).Err() +} + +func (d *DataBases) ReduceGroupMemberFromCache(groupID string, userIDList ...string) error { + var IDList []interface{} + for _, id := range userIDList { + IDList = append(IDList, id) + } + return d.rdb.SRem(context.Background(), groupCache+groupID, IDList...).Err() +} + +func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, error) { + result := d.rdb.SMembers(context.Background(), groupCache+groupID) + return result.Result() +} + +func (d *DataBases) SetUserInfoToCache(userID string, m map[string]interface{}) error { + return d.rdb.HSet(context.Background(), userInfoCache+userID, m).Err() +} + +func (d *DataBases) GetUserInfoFromCache(userID string) (*pbCommon.UserInfo, error) { + result, err := d.rdb.HGetAll(context.Background(), userInfoCache+userID).Result() + bytes, err := json.Marshal(result) + if err != nil { + return nil, err + } + userInfo := &pbCommon.UserInfo{} + if err := proto.Unmarshal(bytes, userInfo); err != nil { + return nil, err + } + err = json.Unmarshal(bytes, userInfo) + return userInfo, err +} diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index d13a1c5d2..f2344a800 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -7,7 +7,6 @@ import ( pbChat "Open_IM/pkg/proto/chat" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" - "encoding/json" "errors" "fmt" @@ -25,7 +24,7 @@ const ( userMinSeq = "REDIS_USER_MIN_SEQ:" uidPidToken = "UID_PID_TOKEN_STATUS:" conversationReceiveMessageOpt = "CON_RECV_MSG_OPT:" - getuiToken = "GETUI" + getuiToken = "GETUI_TOKEN" userInfoCache = "USER_INFO_CACHE:" friendRelationCache = "FRIEND_RELATION_CACHE:" blackListCache = "BLACK_LIST_CACHE:" @@ -172,104 +171,105 @@ func (d *DataBases) GetMultiConversationMsgOpt(userID string, conversationIDs [] } -func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { - _, err := d.Exec("SET", getuiToken, token, "ex", expireTime) - return err -} - -func (d *DataBases) GetGetuiToken() (string, error) { - result, err := redis.String(d.Exec("GET", getuiToken)) - return result, err -} +//func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { +// _, err := d.Exec("SET", getuiToken, token, "ex", expireTime) +// return err +//} +// +//func (d *DataBases) GetGetuiToken() (string, error) { +// result, err := redis.String(d.Exec("GET", getuiToken)) +// return result, err +//} func (d *DataBases) SearchContentType() { } -func (d *DataBases) SetUserInfoToCache(userID string, m map[string]interface{}) error { - _, err := d.Exec("hmset", userInfoCache+userID, redis.Args{}.Add().AddFlat(m)...) - return err -} +//func (d *DataBases) SetUserInfoToCache(userID string, m map[string]interface{}) error { +// _, err := d.Exec("hmset", userInfoCache+userID, redis.Args{}.Add().AddFlat(m)...) +// return err +//} +// +//func (d *DataBases) GetUserInfoFromCache(userID string) (*pbCommon.UserInfo, error) { +// result, err := redis.String(d.Exec("hgetall", userInfoCache+userID)) +// log2.NewInfo("", result) +// if err != nil { +// return nil, err +// } +// userInfo := &pbCommon.UserInfo{} +// err = json.Unmarshal([]byte(result), userInfo) +// return userInfo, err +//} -func (d *DataBases) GetUserInfoFromCache(userID string) (*pbCommon.UserInfo, error) { - result, err := redis.String(d.Exec("hgetall", userInfoCache+userID)) - log2.NewInfo("", result) - if err != nil { - return nil, err - } - userInfo := &pbCommon.UserInfo{} - err = json.Unmarshal([]byte(result), userInfo) - return userInfo, err -} +//func (d *DataBases) AddFriendToCache(userID string, friendIDList ...string) error { +// var IDList []interface{} +// for _, id := range friendIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SADD", friendRelationCache+userID, IDList...) +// return err +//} -func (d *DataBases) AddFriendToCache(userID string, friendIDList ...string) error { - var IDList []interface{} - for _, id := range friendIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SADD", friendRelationCache+userID, IDList...) - return err -} +//func (d *DataBases) ReduceFriendToCache(userID string, friendIDList ...string) error { +// var IDList []interface{} +// for _, id := range friendIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SREM", friendRelationCache+userID, IDList...) +// return err +//} -func (d *DataBases) ReduceFriendToCache(userID string, friendIDList ...string) error { - var IDList []interface{} - for _, id := range friendIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SREM", friendRelationCache+userID, IDList...) - return err -} +//func (d *DataBases) GetFriendIDListFromCache(userID string) ([]string, error) { +// result, err := redis.Strings(d.Exec("SMEMBERS", friendRelationCache+userID)) +// return result, err +//} +// +//func (d *DataBases) AddBlackUserToCache(userID string, blackList ...string) error { +// var IDList []interface{} +// for _, id := range blackList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SADD", blackListCache+userID, IDList...) +// return err +//} -func (d *DataBases) GetFriendIDListFromCache(userID string) ([]string, error) { - result, err := redis.Strings(d.Exec("SMEMBERS", friendRelationCache+userID)) - return result, err -} +//func (d *DataBases) ReduceBlackUserFromCache(userID string, blackList ...string) error { +// var IDList []interface{} +// for _, id := range blackList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SREM", blackListCache+userID, IDList...) +// return err +//} -func (d *DataBases) AddBlackUserToCache(userID string, blackList ...string) error { - var IDList []interface{} - for _, id := range blackList { - IDList = append(IDList, id) - } - _, err := d.Exec("SADD", blackListCache+userID, IDList...) - return err -} +//func (d *DataBases) GetBlackListFromCache(userID string) ([]string, error) { +// result, err := redis.Strings(d.Exec("SMEMBERS", blackListCache+userID)) +// return result, err +//} -func (d *DataBases) ReduceBlackUserFromCache(userID string, blackList ...string) error { - var IDList []interface{} - for _, id := range blackList { - IDList = append(IDList, id) - } - _, err := d.Exec("SREM", blackListCache+userID, IDList...) - return err -} +//func (d *DataBases) AddGroupMemberToCache(groupID string, userIDList ...string) error { +// var IDList []interface{} +// for _, id := range userIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SADD", groupCache+groupID, IDList...) +// return err +//} -func (d *DataBases) GetBlackListFromCache(userID string) ([]string, error) { - result, err := redis.Strings(d.Exec("SMEMBERS", blackListCache+userID)) - return result, err -} +//func (d *DataBases) ReduceGroupMemberFromCache(groupID string, userIDList ...string) error { +// var IDList []interface{} +// for _, id := range userIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SREM", groupCache+groupID, IDList...) +// return err +//} -func (d *DataBases) AddGroupMemberToCache(groupID string, userIDList ...string) error { - var IDList []interface{} - for _, id := range userIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SADD", groupCache+groupID, IDList...) - return err -} +//func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, error) { +// result, err := redis.Strings(d.Exec("SMEMBERS", groupCache+groupID)) +// return result, err +//} -func (d *DataBases) ReduceGroupMemberFromCache(groupID string, userIDList ...string) error { - var IDList []interface{} - for _, id := range userIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SREM", groupCache+groupID, IDList...) - return err -} - -func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, error) { - result, err := redis.Strings(d.Exec("SMEMBERS", groupCache+groupID)) - return result, err -} func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 From 7dbc8a4253d74f09eb9b6d21768ee5bdf52f4912 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 16:18:41 +0800 Subject: [PATCH 550/752] go-redis --- internal/rpc/organization/organization.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 1d22383dc..8f07867e9 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -124,7 +124,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea FaceURL: req.DepartmentInfo.FaceURL, CreateTime: uint32(time.Now().Unix()), CreatorUserID: req.OpUserID, - GroupType: constant.DepartmentGroup, + GroupType: constant.NormalGroup, OwnerUserID: req.OpUserID, }, OperationID: req.OperationID, From d7961bf22679db166377748b32eea69fd1dcb3b1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:33:30 +0800 Subject: [PATCH 551/752] redis replace to go_redis --- pkg/common/db/newRedisModel.go | 90 ++++++++- pkg/common/db/redisModel.go | 315 ++++++++++++++----------------- pkg/common/db/redisModel_test.go | 32 +++- 3 files changed, 254 insertions(+), 183 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 117e413c8..9c279b69f 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -25,6 +25,92 @@ import ( //func (d * DataBases)pubMessage(channel, msg string) { // d.rdb.Publish(context.Background(),channel,msg) //} +func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { + key := accountTempCode + account + n, err := d.rdb.Exists(context.Background(), key).Result() + if n > 0 { + return true, err + } else { + return false, err + } +} +func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { + key := accountTempCode + account + return d.rdb.Set(context.Background(), key, code, time.Duration(ttl)*time.Second).Err() +} +func (d *DataBases) GetAccountCode(account string) (string, error) { + key := accountTempCode + account + return d.rdb.Get(context.Background(), key).Result() +} + +//Perform seq auto-increment operation of user messages +func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { + key := userIncrSeq + uid + seq, err := d.rdb.Incr(context.Background(), key).Result() + return uint64(seq), err +} + +//Get the largest Seq +func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { + key := userIncrSeq + uid + seq, err := d.rdb.Get(context.Background(), key).Result() + return uint64(utils.StringToInt(seq)), err +} + +//set the largest Seq +func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { + key := userIncrSeq + uid + return d.rdb.Set(context.Background(), key, maxSeq, 0).Err() +} + +//Set the user's minimum seq +func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { + key := userMinSeq + uid + return d.rdb.Set(context.Background(), key, minSeq, 0).Err() +} + +//Get the smallest Seq +func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { + key := userMinSeq + uid + seq, err := d.rdb.Get(context.Background(), key).Result() + return uint64(utils.StringToInt(seq)), err +} + +//Store userid and platform class to redis +func (d *DataBases) AddTokenFlag(userID string, platformID int, token string, flag int) error { + key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) + log2.NewDebug("", "add token key is ", key) + return d.rdb.HSet(context.Background(), key, token, flag).Err() +} + +func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) { + key := uidPidToken + userID + ":" + platformID + log2.NewDebug("", "get token key is ", key) + m, err := d.rdb.HGetAll(context.Background(), key).Result() + mm := make(map[string]int) + for k, v := range m { + mm[k] = utils.StringToInt(v) + } + return mm, err +} +func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { + key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) + return d.rdb.HMSet(context.Background(), key, m).Err() +} +func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { + key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) + return d.rdb.HDel(context.Background(), key, fields...).Err() +} +func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { + key := conversationReceiveMessageOpt + userID + return d.rdb.HSet(context.Background(), key, conversationID, opt).Err() +} + +func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { + key := conversationReceiveMessageOpt + userID + result, err := d.rdb.HGet(context.Background(), key, conversationID).Result() + return utils.StringToInt(result), err +} func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { key := conversationReceiveMessageOpt + userID return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() @@ -41,7 +127,7 @@ func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { } return utils.StringToInt(result), err } -func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { +func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) @@ -67,7 +153,7 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper } return seqMsg, failedSeqList, errResult } -func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { +func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index f2344a800..59fd7ac72 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -1,19 +1,7 @@ package db import ( - "Open_IM/pkg/common/config" - "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" - pbChat "Open_IM/pkg/proto/chat" - pbCommon "Open_IM/pkg/proto/sdk_ws" - "Open_IM/pkg/utils" - "errors" - "fmt" - - "github.com/garyburd/redigo/redis" - "github.com/golang/protobuf/jsonpb" - //osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" - "strconv" ) const ( @@ -54,122 +42,101 @@ func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (inte return con.Do(cmd, params...) } -func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { - key := accountTempCode + account - return redis.Bool(d.Exec("EXISTS", key)) -} -func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { - key := accountTempCode + account - _, err = d.Exec("SET", key, code, "ex", ttl) - return err -} -func (d *DataBases) GetAccountCode(account string) (string, error) { - key := accountTempCode + account - return redis.String(d.Exec("GET", key)) -} -//Perform seq auto-increment operation of user messages -func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { - key := userIncrSeq + uid - return redis.Uint64(d.Exec("INCR", key)) -} - -//Get the largest Seq -func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { - key := userIncrSeq + uid - return redis.Uint64(d.Exec("GET", key)) -} - -//set the largest Seq -func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { - key := userIncrSeq + uid - _, err := d.Exec("SET", key, maxSeq) - return err -} - -//Set the user's minimum seq -func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { - key := userMinSeq + uid - _, err = d.Exec("SET", key, minSeq) - return err -} - -//Get the smallest Seq -func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { - key := userMinSeq + uid - return redis.Uint64(d.Exec("GET", key)) -} - -//Store Apple's device token to redis -func (d *DataBases) SetAppleDeviceToken(accountAddress, value string) (err error) { - key := appleDeviceToken + accountAddress - _, err = d.Exec("SET", key, value) - return err -} - -//Delete Apple device token -func (d *DataBases) DelAppleDeviceToken(accountAddress string) (err error) { - key := appleDeviceToken + accountAddress - _, err = d.Exec("DEL", key) - return err -} - -//Store userid and platform class to redis -func (d *DataBases) AddTokenFlag(userID string, platformID int, token string, flag int) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - log2.NewDebug("", "add token key is ", key) - _, err1 := d.Exec("HSet", key, token, flag) - return err1 -} - -func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) { - key := uidPidToken + userID + ":" + platformID - log2.NewDebug("", "get token key is ", key) - return redis.IntMap(d.Exec("HGETALL", key)) -} -func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) - return err -} -func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) - return err -} - -func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { - key := conversationReceiveMessageOpt + userID - _, err := d.Exec("HSet", key, conversationID, opt) - return err -} - -func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { - key := conversationReceiveMessageOpt + userID - return redis.Int(d.Exec("HGet", key, conversationID)) -} -func (d *DataBases) GetAllConversationMsgOpt(userID string) (map[string]int, error) { - key := conversationReceiveMessageOpt + userID - return redis.IntMap(d.Exec("HGETALL", key)) -} -func (d *DataBases) SetMultiConversationMsgOpt(userID string, m map[string]int) error { - key := conversationReceiveMessageOpt + userID - _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) - return err -} -func (d *DataBases) GetMultiConversationMsgOpt(userID string, conversationIDs []string) (m map[string]int, err error) { - m = make(map[string]int) - key := conversationReceiveMessageOpt + userID - i, err := redis.Ints(d.Exec("hmget", key, redis.Args{}.Add().AddFlat(conversationIDs)...)) - if err != nil { - return m, err - } - for k, v := range conversationIDs { - m[v] = i[k] - } - return m, nil - -} +//func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { +// key := accountTempCode + account +// return redis.Bool(d.Exec("EXISTS", key)) +//} +//func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { +// key := accountTempCode + account +// _, err = d.Exec("SET", key, code, "ex", ttl) +// return err +//} +//func (d *DataBases) GetAccountCode(account string) (string, error) { +// key := accountTempCode + account +// return redis.String(d.Exec("GET", key)) +//} +// +////Perform seq auto-increment operation of user messages +//func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { +// key := userIncrSeq + uid +// return redis.Uint64(d.Exec("INCR", key)) +//} +// +////Get the largest Seq +//func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { +// key := userIncrSeq + uid +// return redis.Uint64(d.Exec("GET", key)) +//} +// +////set the largest Seq +//func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { +// key := userIncrSeq + uid +// _, err := d.Exec("SET", key, maxSeq) +// return err +//} +// +////Set the user's minimum seq +//func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { +// key := userMinSeq + uid +// _, err = d.Exec("SET", key, minSeq) +// return err +//} +// +////Get the smallest Seq +//func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { +// key := userMinSeq + uid +// return redis.Uint64(d.Exec("GET", key)) +//} +// +// +////Store userid and platform class to redis +//func (d *DataBases) AddTokenFlag(userID string, platformID int, token string, flag int) error { +// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) +// log2.NewDebug("", "add token key is ", key) +// _, err1 := d.Exec("HSet", key, token, flag) +// return err1 +//} +// +//func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) { +// key := uidPidToken + userID + ":" + platformID +// log2.NewDebug("", "get token key is ", key) +// return redis.IntMap(d.Exec("HGETALL", key)) +//} +//func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { +// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) +// _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) +// return err +//} +//func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { +// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) +// _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) +// return err +//} +// +//func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { +// key := conversationReceiveMessageOpt + userID +// _, err := d.Exec("HSet", key, conversationID, opt) +// return err +//} +// +//func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { +// key := conversationReceiveMessageOpt + userID +// return redis.Int(d.Exec("HGet", key, conversationID)) +//} +//func (d *DataBases) GetMultiConversationMsgOpt(userID string, conversationIDs []string) (m map[string]int, err error) { +// m = make(map[string]int) +// key := conversationReceiveMessageOpt + userID +// i, err := redis.Ints(d.Exec("hmget", key, redis.Args{}.Add().AddFlat(conversationIDs)...)) +// if err != nil { +// return m, err +// } +// for k, v := range conversationIDs { +// m[v] = i[k] +// } +// return m, nil +// +//} //func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { // _, err := d.Exec("SET", getuiToken, token, "ex", expireTime) @@ -270,54 +237,54 @@ func (d *DataBases) SearchContentType() { // return result, err //} -func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { - for _, v := range seqList { - //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 - key := messageCache + userID + "_" + strconv.Itoa(int(v)) +//func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { +// for _, v := range seqList { +// //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 +// key := messageCache + userID + "_" + strconv.Itoa(int(v)) +// +// result, err := redis.String(d.Exec("GET", key)) +// if err != nil { +// errResult = err +// failedSeqList = append(failedSeqList, v) +// log2.NewWarn(operationID, "redis get message error:", err.Error(), v) +// } else { +// msg := pbCommon.MsgData{} +// err = jsonpb.UnmarshalString(result, &msg) +// if err != nil { +// errResult = err +// failedSeqList = append(failedSeqList, v) +// log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) +// } else { +// log2.NewDebug(operationID, "redis get msg is ", msg.String()) +// seqMsg = append(seqMsg, &msg) +// } +// +// } +// } +// return seqMsg, failedSeqList, errResult +//} - result, err := redis.String(d.Exec("GET", key)) - if err != nil { - errResult = err - failedSeqList = append(failedSeqList, v) - log2.NewWarn(operationID, "redis get message error:", err.Error(), v) - } else { - msg := pbCommon.MsgData{} - err = jsonpb.UnmarshalString(result, &msg) - if err != nil { - errResult = err - failedSeqList = append(failedSeqList, v) - log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) - } else { - log2.NewDebug(operationID, "redis get msg is ", msg.String()) - seqMsg = append(seqMsg, &msg) - } - - } - } - return seqMsg, failedSeqList, errResult -} - -func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { - var failedList []pbChat.MsgDataToMQ - for _, msg := range msgList { - key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) - s, err := utils.Pb2String(msg.MsgData) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) - continue - } - log2.NewDebug(operationID, "convert string is ", s) - _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s) - failedList = append(failedList, *msg) - } - } - if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) - } - return nil -} +//func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { +// var failedList []pbChat.MsgDataToMQ +// for _, msg := range msgList { +// key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) +// s, err := utils.Pb2String(msg.MsgData) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) +// continue +// } +// log2.NewDebug(operationID, "convert string is ", s) +// _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s) +// failedList = append(failedList, *msg) +// } +// } +// if len(failedList) != 0 { +// return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) +// } +// return nil +//} //func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { // for _, seq := range seqList { diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index d9d71b94a..f90cd99cd 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -25,11 +25,11 @@ func Test_GetTokenMapByUidPid(t *testing.T) { fmt.Println(m) } -func TestDataBases_GetMultiConversationMsgOpt(t *testing.T) { - m, err := DB.GetMultiConversationMsgOpt("fg", []string{"user", "age", "color"}) - assert.Nil(t, err) - fmt.Println(m) -} +//func TestDataBases_GetMultiConversationMsgOpt(t *testing.T) { +// m, err := DB.GetMultiConversationMsgOpt("fg", []string{"user", "age", "color"}) +// assert.Nil(t, err) +// fmt.Println(m) +//} func Test_GetKeyTTL(t *testing.T) { ctx := context.Background() key := flag.String("key", "key", "key value") @@ -70,7 +70,7 @@ func Test_NewSetMessageToCache(t *testing.T) { data.AtUserIDList = []string{"1212", "23232"} msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} - err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + err := DB.SetMessageToCache(messageList, uid, "cacheTest") assert.Nil(t, err) } @@ -82,7 +82,7 @@ func Test_NewGetMessageListBySeq(t *testing.T) { data.ClientMsgID = "23jwhjsdf" msg.MsgData = &data - seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{1212}, "cacheTest") + seqMsg, failedSeqList, err := DB.GetMessageListBySeq(uid, []uint32{1212}, "cacheTest") assert.Nil(t, err) fmt.Println(seqMsg, failedSeqList) @@ -100,3 +100,21 @@ func Test_GetUserGlobalMsgRecvOpt(t *testing.T) { assert.Nil(t, err) fmt.Println("get opt", opt) } +func Test_JudgeAccountEXISTS(t *testing.T) { + uid := "test_uid" + b, err := DB.JudgeAccountEXISTS(uid) + assert.Nil(t, err) + fmt.Println(b) +} +func Test_SetAccountCode(t *testing.T) { + uid := "test_uid" + code := 666666 + err := DB.SetAccountCode(uid, code, 100) + assert.Nil(t, err) +} +func Test_GetAccountCode(t *testing.T) { + uid := "test_uid" + code, err := DB.GetAccountCode(uid) + assert.Nil(t, err) + fmt.Println(code) +} From 4315d9dfbb1c02fd8936abbe120b46418e28c27d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:35:24 +0800 Subject: [PATCH 552/752] redis replace to go_redis --- pkg/common/db/model.go | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 6d1660807..2418e7658 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -10,9 +10,7 @@ import ( "fmt" go_redis "github.com/go-redis/redis/v8" "go.mongodb.org/mongo-driver/mongo/options" - // "context" - // "fmt" - "github.com/garyburd/redigo/redis" + "gopkg.in/mgo.v2" "time" @@ -26,9 +24,9 @@ import ( var DB DataBases type DataBases struct { - MysqlDB mysqlDB - mgoSession *mgo.Session - redisPool *redis.Pool + MysqlDB mysqlDB + mgoSession *mgo.Session + //redisPool *redis.Pool mongoClient *mongo.Client rdb *go_redis.Client } @@ -98,22 +96,22 @@ func init() { DB.mongoClient = mongoClient // redis pool init - DB.redisPool = &redis.Pool{ - MaxIdle: config.Config.Redis.DBMaxIdle, - MaxActive: config.Config.Redis.DBMaxActive, - IdleTimeout: time.Duration(config.Config.Redis.DBIdleTimeout) * time.Second, - Dial: func() (redis.Conn, error) { - return redis.Dial( - "tcp", - config.Config.Redis.DBAddress, - redis.DialReadTimeout(time.Duration(1000)*time.Millisecond), - redis.DialWriteTimeout(time.Duration(1000)*time.Millisecond), - redis.DialConnectTimeout(time.Duration(1000)*time.Millisecond), - redis.DialDatabase(0), - redis.DialPassword(config.Config.Redis.DBPassWord), - ) - }, - } + //DB.redisPool = &redis.Pool{ + // MaxIdle: config.Config.Redis.DBMaxIdle, + // MaxActive: config.Config.Redis.DBMaxActive, + // IdleTimeout: time.Duration(config.Config.Redis.DBIdleTimeout) * time.Second, + // Dial: func() (redis.Conn, error) { + // return redis.Dial( + // "tcp", + // config.Config.Redis.DBAddress, + // redis.DialReadTimeout(time.Duration(1000)*time.Millisecond), + // redis.DialWriteTimeout(time.Duration(1000)*time.Millisecond), + // redis.DialConnectTimeout(time.Duration(1000)*time.Millisecond), + // redis.DialDatabase(0), + // redis.DialPassword(config.Config.Redis.DBPassWord), + // ) + // }, + //} DB.rdb = go_redis.NewClient(&go_redis.Options{ Addr: config.Config.Redis.DBAddress, Password: config.Config.Redis.DBPassWord, // no password set From eef47017a39b42fffe913ce7f586d812ab8bbe07 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:39:03 +0800 Subject: [PATCH 553/752] redis replace to go_redis --- go.mod | 2 +- go.sum | 8 +++++++ pkg/common/db/redisModel.go | 42 +++++++++++++++++-------------------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 0fcf1b807..6df88e549 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,6 @@ require ( github.com/antonfisher/nested-logrus-formatter v1.3.0 github.com/bwmarrin/snowflake v0.3.0 github.com/fatih/structs v1.1.0 - github.com/garyburd/redigo v1.6.2 github.com/gin-gonic/gin v1.7.0 github.com/go-playground/validator/v10 v10.4.1 github.com/go-redis/redis/v8 v8.11.5 @@ -33,6 +32,7 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.11.1 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 diff --git a/go.sum b/go.sum index 3d828c7c2..1d74a3093 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,7 @@ github.com/antonfisher/nested-logrus-formatter v1.3.0/go.mod h1:6WTfyWFkBc9+zyBa github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= 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= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= @@ -108,6 +109,8 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM= github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc= +github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -269,6 +272,7 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +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= @@ -321,17 +325,21 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 59fd7ac72..c986d408f 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -1,9 +1,5 @@ package db -import ( - log2 "Open_IM/pkg/common/log" -) - const ( accountTempCode = "ACCOUNT_TEMP_CODE" resetPwdTempCode = "RESET_PWD_TEMP_CODE" @@ -23,25 +19,25 @@ const ( GlobalMsgRecvOpt = "GLOBAL_MSG_RECV_OPT" ) -func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { - con := d.redisPool.Get() - if err := con.Err(); err != nil { - log2.Error("", "", "redis cmd = %v, err = %v", cmd, err) - return nil, err - } - defer con.Close() - - params := make([]interface{}, 0) - params = append(params, key) - - if len(args) > 0 { - for _, v := range args { - params = append(params, v) - } - } - - return con.Do(cmd, params...) -} +//func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { +// con := d.redisPool.Get() +// if err := con.Err(); err != nil { +// log2.Error("", "", "redis cmd = %v, err = %v", cmd, err) +// return nil, err +// } +// defer con.Close() +// +// params := make([]interface{}, 0) +// params = append(params, key) +// +// if len(args) > 0 { +// for _, v := range args { +// params = append(params, v) +// } +// } +// +// return con.Do(cmd, params...) +//} //func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { // key := accountTempCode + account From f96e12a8b34784097d4c18f2c4e830b44b78f10b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:50:45 +0800 Subject: [PATCH 554/752] redis replace to go_redis --- internal/msg_gateway/gate/ws_server.go | 4 ++-- internal/rpc/msg/pull_message.go | 28 +++++++++++++------------- internal/rpc/msg/send_msg.go | 6 +++--- pkg/common/db/batch_insert_chat.go | 6 +++--- pkg/common/token_verify/jwt_token.go | 6 +++--- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 1ce05441f..54ea7138e 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -9,7 +9,7 @@ import ( "Open_IM/pkg/utils" "bytes" "encoding/gob" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "net/http" "sync" "time" @@ -117,7 +117,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn log.NewDebug(operationID, uid, platformID, "kick old conn") ws.sendKickMsg(oldConn, newConn) m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { log.NewError(operationID, "get token from redis err", err.Error(), uid) return } diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 1736baf83..22181f09b 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -2,7 +2,7 @@ package msg import ( "context" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" @@ -15,7 +15,7 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAnd m := make(map[string]*open_im_sdk.MaxAndMinSeq) //seq, err := model.GetBiggestSeqFromReceive(in.UserID) maxSeq, err1 := commonDB.DB.GetUserMaxSeq(in.UserID) - minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) + //minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) if err1 == nil { resp.MaxSeq = uint32(maxSeq) for _, v := range in.GroupIDList { @@ -25,22 +25,22 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAnd m[v] = x } resp.GroupMaxAndMinSeq = m - } else if err1 == redis.ErrNil { + } else if err1 == go_redis.Nil { resp.MaxSeq = 0 } else { log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err1.Error()) resp.ErrCode = 200 resp.ErrMsg = "redis get err" } - if err2 == nil { - resp.MinSeq = uint32(minSeq) - } else if err2 == redis.ErrNil { - resp.MinSeq = 0 - } else { - log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err2.Error()) - resp.ErrCode = 201 - resp.ErrMsg = "redis get err" - } + //if err2 == nil { + // resp.MinSeq = uint32(minSeq) + //} else if err2 == redis.ErrNil { + // resp.MinSeq = 0 + //} else { + // log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err2.Error()) + // resp.ErrCode = 201 + // resp.ErrMsg = "redis get err" + //} return resp, nil } func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) { @@ -50,7 +50,7 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull //msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID) if err != nil { - if err != redis.ErrNil { + if err != go_redis.Nil { log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) } else { log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) @@ -72,7 +72,7 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull x := new(open_im_sdk.MsgDataList) redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(k, v.SeqList, in.OperationID) if err != nil { - if err != redis.ErrNil { + if err != go_redis.Nil { log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) } else { log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 0419458e6..fffbf6789 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -15,7 +15,7 @@ import ( "Open_IM/pkg/utils" "context" "errors" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "math/rand" "strconv" @@ -464,7 +464,7 @@ func returnMsg(replay *pbChat.SendMsgResp, pb *pbChat.SendMsgReq, errCode int32, func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType int, pb *pbChat.SendMsgReq) bool { conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), err.Error()) return true } @@ -487,7 +487,7 @@ func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType i func modifyMessageByUserMessageReceiveOptoptimization(userID, sourceID string, sessionType int, operationID string, options *map[string]bool) bool { conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { log.NewError(operationID, "GetSingleConversationMsgOpt from redis err", userID, conversationID, err.Error()) return true } diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index fd037998c..c6b57201f 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -7,7 +7,7 @@ import ( "Open_IM/pkg/utils" "context" "errors" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" @@ -112,7 +112,7 @@ func (d *DataBases) BatchInsertChat2Cache(userID string, msgList []*pbMsg.MsgDat currentMaxSeq, err := d.GetUserMaxSeq(userID) if err == nil { - } else if err == redis.ErrNil { + } else if err == go_redis.Nil { currentMaxSeq = 0 } else { return utils.Wrap(err, ""), 0 @@ -161,7 +161,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq, err := d.GetUserMaxSeq(userID) if err == nil { - } else if err == redis.ErrNil { + } else if err == go_redis.Nil { isInit = true currentMaxSeq = 0 } else { diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index f1e95bba7..aed09190f 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -6,7 +6,7 @@ import ( commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/utils" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "github.com/golang-jwt/jwt/v4" "time" ) @@ -39,7 +39,7 @@ func BuildClaims(uid, platform string, ttl int64) Claims { func DeleteToken(userID string, platformID int) error { m, err := commonDB.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { return utils.Wrap(err, "") } var deleteTokenKey []string @@ -65,7 +65,7 @@ func CreateToken(userID string, platformID int) (string, int64, error) { } //remove Invalid token m, err := commonDB.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { return "", 0, err } var deleteTokenKey []string From 21051900f9bb14a4fe611b5966af78f1cc5bcd66 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 17:33:48 +0800 Subject: [PATCH 555/752] hash userID --- internal/demo/register/set_password.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index fde97a634..545a489d3 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -11,7 +11,10 @@ import ( "Open_IM/pkg/utils" "encoding/json" "github.com/gin-gonic/gin" + "math/big" "net/http" + "strconv" + "time" ) type ParamsSetPassword struct { @@ -53,7 +56,13 @@ func SetPassword(c *gin.Context) { return } } - userID := utils.Base64Encode(account) + //userID := utils.Base64Encode(account) + + userID := utils.Md5(params.OperationID + strconv.FormatInt(time.Now().UnixNano(), 10)) + bi := big.NewInt(0) + bi.SetString(userID[0:8], 16) + userID = bi.String() + url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID From f4f6ea681e596d0a05b4cb58c80ba2c76b00b566 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 18:02:48 +0800 Subject: [PATCH 556/752] Optimization for log --- internal/msg_gateway/gate/logic.go | 32 ++++------ internal/msg_gateway/gate/ws_server.go | 87 +++++++++++++------------- internal/rpc/msg/send_msg.go | 2 +- pkg/common/kafka/producer.go | 9 ++- pkg/common/token_verify/jwt_token.go | 10 ++- 5 files changed, 70 insertions(+), 70 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index e12062338..238d73e91 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -19,19 +19,12 @@ import ( ) func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { - //ws online debug data - //{"ReqIdentifier":1001,"Token":"123","SendID":"c4ca4238a0b923820dcc509a6f75849b","Time":"123","OperationID":"123","MsgIncr":0} - //{"ReqIdentifier":1002,"Token":"123","SendID":"c4ca4238a0b923820dcc509a6f75849b","Time":"123","OperationID":"123","MsgIncr":0,"SeqBegin":1,"SeqEnd":6} - //{"ReqIdentifier":1003,"Token":"123","SendID":"c4ca4238a0b923820dcc509a6f75849b", - //"RecvID":"a87ff679a2f3e71d9181a67b7542122c","ClientMsgID":"2343","Time":"147878787","OperationID": - //"123","MsgIncr":0,"SubMsgType":101,"MsgType":100,"MsgFrom":1,"Content":"sdfsdf"} b := bytes.NewBuffer(binaryMsg) m := Req{} dec := gob.NewDecoder(b) err := dec.Decode(&m) if err != nil { log.NewError("", "ws Decode err", err.Error()) - ws.sendErrMsg(conn, 200, err.Error(), constant.WSDataError, "", "") err = conn.Close() if err != nil { log.NewError("", "ws close err", err.Error()) @@ -43,27 +36,29 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { ws.sendErrMsg(conn, 201, err.Error(), m.ReqIdentifier, m.MsgIncr, m.OperationID) return } - //if !utils.VerifyToken(m.Token, m.SendID) { - // ws.sendErrMsg(conn, 202, "token validate err", m.ReqIdentifier, m.MsgIncr,m.OperationID) - // return - //} - log.NewInfo(m.OperationID, "Basic Info Authentication Success", m) + + log.NewInfo(m.OperationID, "Basic Info Authentication Success", m.SendID, m.MsgIncr, m.ReqIdentifier) switch m.ReqIdentifier { case constant.WSGetNewestSeq: + log.NewInfo(m.OperationID, "getSeqReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.getSeqReq(conn, &m) case constant.WSSendMsg: + log.NewInfo(m.OperationID, "sendMsgReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.sendMsgReq(conn, &m) case constant.WSSendSignalMsg: + log.NewInfo(m.OperationID, "sendSignalMsgReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.sendSignalMsgReq(conn, &m) case constant.WSPullMsgBySeqList: + log.NewInfo(m.OperationID, "pullMsgBySeqListReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.pullMsgBySeqListReq(conn, &m) default: + log.Error(m.OperationID, "ReqIdentifier failed ", m.SendID, m.MsgIncr, m.ReqIdentifier) } log.NewInfo(m.OperationID, "goroutine num is ", runtime.NumGoroutine()) } func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier, m.Data) + log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier) nReply := new(sdk_ws.GetMaxAndMinSeqResp) isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq) if isPass { @@ -88,7 +83,6 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { nReply.ErrCode = errCode nReply.ErrMsg = errMsg ws.getSeqResp(conn, m, nReply) - } } @@ -189,8 +183,6 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { } func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { - // := make(map[string]interface{}) - var mReplyData sdk_ws.UserSendMsgResp mReplyData.ClientMsgID = pb.GetClientMsgID() mReplyData.ServerMsgID = pb.GetServerMsgID() @@ -277,14 +269,14 @@ func (ws *WServer) sendMsg(conn *UserConn, mReply interface{}) { enc := gob.NewEncoder(&b) err := enc.Encode(mReply) if err != nil { - uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "Encode Msg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + // uid, platform := ws.getUserUid(conn) + log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "Encode Msg error", conn.RemoteAddr().String(), err.Error()) return } err = ws.writeMsg(conn, websocket.BinaryMessage, b.Bytes()) if err != nil { - uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws writeMsg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + // uid, platform := ws.getUserUid(conn) + log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws writeMsg error", conn.RemoteAddr().String(), err.Error()) } else { log.Debug(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws write response success") } diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 54ea7138e..223270197 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -51,21 +51,27 @@ func (ws *WServer) run() { } func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { - if ws.headerCheck(w, r) { - query := r.URL.Query() + query := r.URL.Query() + operationID := "" + if len(query["operationID"]) != 0 { + operationID = query["operationID"][0] + } else { + operationID = utils.OperationIDGenerator() + } + log.Debug(operationID, utils.GetSelfFuncName(), " args: ", query) + if ws.headerCheck(w, r, operationID) { conn, err := ws.wsUpGrader.Upgrade(w, r, nil) //Conn is obtained through the upgraded escalator if err != nil { - log.Error("", "upgrade http conn err", err, query) + log.Error(operationID, "upgrade http conn err", err.Error(), query) return } else { - //Connection mapping relationship, - //userID+" "+platformID->conn - //Initialize a lock for each user newConn := &UserConn{conn, new(sync.Mutex), 0} userCount++ - ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0]) + ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0], operationID) go ws.readMsg(newConn) } + } else { + log.Error(operationID, "headerCheck failed ") } } @@ -76,18 +82,13 @@ func (ws *WServer) readMsg(conn *UserConn) { log.NewInfo("", "this is a pingMessage") } if err != nil { - uid, platform := ws.getUserUid(conn) - log.Error("", "WS ReadMsg error", "userIP", conn.RemoteAddr().String(), "userUid", uid, "platform", platform, "error", err.Error()) + log.Error("", "WS ReadMsg error ", " userIP", conn.RemoteAddr().String(), "userUid", "platform", "error", err.Error()) userCount-- ws.delUserConn(conn) return - } else { - //log.ErrorByKv("test", "", "msgType", msgType, "userIP", conn.RemoteAddr().String(), "userUid", ws.getUserUid(conn)) } ws.msgParse(conn, msg) - //ws.writeMsg(conn, 1, chat) } - } func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { @@ -115,25 +116,27 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] if oldConn, ok := oldConnMap[platformID]; ok { log.NewDebug(operationID, uid, platformID, "kick old conn") - ws.sendKickMsg(oldConn, newConn) + // ws.sendKickMsg(oldConn, newConn) m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) if err != nil && err != go_redis.Nil { - log.NewError(operationID, "get token from redis err", err.Error(), uid) + log.NewError(operationID, "get token from redis err", err.Error(), uid, constant.PlatformIDToName(platformID)) return } if m == nil { - log.NewError(operationID, "get token from redis err", "m is nil") + log.NewError(operationID, "get token from redis err", "m is nil", uid, constant.PlatformIDToName(platformID)) return } + log.NewDebug(operationID, "get token map is ", m, uid, constant.PlatformIDToName(platformID)) + for k, _ := range m { if k != token { m[k] = constant.KickedToken } } - log.NewDebug(operationID, "get map is ", m) + log.NewDebug(operationID, "set token map is ", m, uid, constant.PlatformIDToName(platformID)) err = db.DB.SetTokenMapByUidPid(uid, platformID, m) if err != nil { - log.NewError(operationID, "SetTokenMapByUidPid err", err.Error()) + log.NewError(operationID, "SetTokenMapByUidPid err", err.Error(), uid, platformID, m) return } err = oldConn.Close() @@ -146,7 +149,6 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn if err != nil { log.NewError(operationID, "conn close err", err.Error(), uid, platformID) } - } else { log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[platformID]) } @@ -177,10 +179,11 @@ func (ws *WServer) sendKickMsg(oldConn, newConn *UserConn) { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "sendKickMsg WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) } } -func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token string) { + +func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token string, operationID string) { rwLock.Lock() defer rwLock.Unlock() - operationID := utils.OperationIDGenerator() + log.Info(operationID, utils.GetSelfFuncName(), " args: ", uid, platformID, conn, token) callbackResp := callbackUserOnline(operationID, uid, platformID, token) if callbackResp.ErrCode != 0 { log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOnline resp:", callbackResp) @@ -268,43 +271,39 @@ func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn { return nil } -func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { - rwLock.RLock() - defer rwLock.RUnlock() - - if stringMap, ok := ws.wsConnToUser[conn]; ok { - for k, v := range stringMap { - platform = k - uid = v - } - return uid, platform - } - return "", 0 -} -func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request) bool { +//func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { +// rwLock.RLock() +// defer rwLock.RUnlock() +// +// if stringMap, ok := ws.wsConnToUser[conn]; ok { +// for k, v := range stringMap { +// platform = k +// uid = v +// } +// return uid, platform +// } +// return "", 0 +//} +func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operationID string) bool { status := http.StatusUnauthorized query := r.URL.Query() - operationID := "" - if len(query["operationID"]) != 0 { - operationID = query["operationID"][0] - } if len(query["token"]) != 0 && len(query["sendID"]) != 0 && len(query["platformID"]) != 0 { if ok, err, msg := token_verify.WsVerifyToken(query["token"][0], query["sendID"][0], query["platformID"][0], operationID); !ok { - // e := err.(*constant.ErrInfo) log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error()) w.Header().Set("Sec-Websocket-Version", "13") w.Header().Set("ws_err_msg", err.Error()) http.Error(w, err.Error(), status) return false } else { - log.Info(operationID, "Connection Authentication Success", "", "token", query["token"][0], "userID", query["sendID"][0]) + log.Info(operationID, "Connection Authentication Success", "", "token ", query["token"][0], "userID ", query["sendID"][0], "platformID ", query["platformID"][0]) return true } } else { - log.Error(operationID, "Args err", "query", query) + log.Error(operationID, "Args err ", "query ", query) w.Header().Set("Sec-Websocket-Version", "13") - w.Header().Set("ws_err_msg", "args err, need token, sendID, platformID") - http.Error(w, http.StatusText(status), status) + errMsg := "args err, need token, sendID, platformID" + w.Header().Set("ws_err_msg", errMsg) + http.Error(w, errMsg, status) return false } } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index fffbf6789..6afbc7549 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -176,7 +176,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S return returnMsg(&replay, pb, errCode, errMsg, "", 0) } rpc.encapsulateMsgData(pb.MsgData) - log.Info("", "this is a test MsgData ", pb.MsgData) + log.Info(pb.OperationID, "this is a test MsgData ", pb.MsgData) msgToMQSingle := pbChat.MsgDataToMQ{Token: pb.Token, OperationID: pb.OperationID, MsgData: pb.MsgData} // callback diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index 3d8ca02f5..c4cd9717a 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -16,8 +16,9 @@ type Producer struct { func NewKafkaProducer(addr []string, topic string) *Producer { p := Producer{} - p.config = sarama.NewConfig() //Instantiate a sarama Config - p.config.Producer.Return.Successes = true //Whether to enable the successes channel to be notified after the message is sent successfully + p.config = sarama.NewConfig() //Instantiate a sarama Config + p.config.Producer.Return.Successes = true //Whether to enable the successes channel to be notified after the message is sent successfully + p.config.Producer.Return.Errors = true p.config.Producer.RequiredAcks = sarama.WaitForAll //Set producer Message Reply level 0 1 all p.config.Producer.Partitioner = sarama.NewHashPartitioner //Set the hash-key automatic hash partition. When sending a message, you must specify the key value of the message. If there is no key, the partition will be selected randomly @@ -48,6 +49,10 @@ func (p *Producer) SendMessage(m proto.Message, key string, operationID string) } kMsg.Value = sarama.ByteEncoder(bMsg) log2.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer) + if kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 { + log2.Error(operationID, "kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 ", kMsg) + return -1, -1, errors.New("key or value == 0") + } a, b, c := p.producer.SendMessage(kMsg) log2.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg, p.producer) return a, b, c diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index aed09190f..54a1b4274 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -245,15 +245,19 @@ func VerifyToken(token, uid string) (bool, error) { return true, nil } func WsVerifyToken(token, uid string, platformID string, operationID string) (bool, error, string) { + argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + platformID claims, err := ParseToken(token, operationID) if err != nil { - return false, utils.Wrap(err, "parse token err"), "parse token err" + errMsg := "parse token err " + argMsg + return false, utils.Wrap(err, errMsg), errMsg } if claims.UID != uid { - return false, utils.Wrap(&constant.ErrTokenUnknown, "uid is not same to token uid"), "uid is not same to token uid" + errMsg := " uid is not same to token uid " + " claims.UID " + claims.UID + argMsg + return false, utils.Wrap(&constant.ErrTokenUnknown, errMsg), errMsg } if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { - return false, utils.Wrap(&constant.ErrTokenUnknown, "platform is not same to token platform"), "platform is not same to token platform" + errMsg := " platform is not same to token platform " + argMsg + "claims platformID " + claims.Platform + return false, utils.Wrap(&constant.ErrTokenUnknown, errMsg), errMsg } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) return true, nil, "" From 9f7cc1ae6985b3bc51839d4a3578c56b1056c260 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 18:11:15 +0800 Subject: [PATCH 557/752] Optimization for log --- internal/msg_gateway/gate/logic.go | 8 ++++--- internal/msg_gateway/gate/validate.go | 33 ++++++++------------------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 238d73e91..88c4af013 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -36,7 +36,6 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { ws.sendErrMsg(conn, 201, err.Error(), m.ReqIdentifier, m.MsgIncr, m.OperationID) return } - log.NewInfo(m.OperationID, "Basic Info Authentication Success", m.SendID, m.MsgIncr, m.ReqIdentifier) switch m.ReqIdentifier { @@ -57,10 +56,12 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { } log.NewInfo(m.OperationID, "goroutine num is ", runtime.NumGoroutine()) } + func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier) nReply := new(sdk_ws.GetMaxAndMinSeqResp) - isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq) + isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq, m.OperationID) + log.Info(m.OperationID, "argsValidate ", isPass, errCode, errMsg) if isPass { rpcReq := sdk_ws.GetMaxAndMinSeqReq{} rpcReq.GroupIDList = data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList @@ -71,9 +72,9 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { msgClient := pbChat.NewChatClient(grpcConn) rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) if err != nil { - log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err.Error(), rpcReq.String()) nReply.ErrCode = 500 nReply.ErrMsg = err.Error() + log.Error(rpcReq.OperationID, "rpc call failed to GetMaxAndMinSeq ", nReply.String()) ws.getSeqResp(conn, m, nReply) } else { log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) @@ -82,6 +83,7 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { } else { nReply.ErrCode = errCode nReply.ErrMsg = errMsg + log.Error(m.OperationID, "argsValidate failed send resp: ", nReply.String()) ws.getSeqResp(conn, m, nReply) } } diff --git a/internal/msg_gateway/gate/validate.go b/internal/msg_gateway/gate/validate.go index 0f4950728..9a5558528 100644 --- a/internal/msg_gateway/gate/validate.go +++ b/internal/msg_gateway/gate/validate.go @@ -57,16 +57,16 @@ type SeqListData struct { SeqList []int64 `mapstructure:"seqList" validate:"required"` } -func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, errMsg string, returnData interface{}) { +func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass bool, errCode int32, errMsg string, returnData interface{}) { switch r { case constant.WSGetNewestSeq: data := open_im_sdk.GetMaxAndMinSeqReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } @@ -74,11 +74,11 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er case constant.WSSendMsg: data := open_im_sdk.MsgData{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } @@ -86,11 +86,11 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er case constant.WSSendSignalMsg: data := pbRtc.SignalReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } @@ -98,31 +98,16 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er case constant.WSPullMsgBySeqList: data := open_im_sdk.PullMessageBySeqListReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } return true, 0, "", data - default: } - return false, 204, "args err", nil - - //b := bytes.NewBuffer(m.Data) - //dec := gob.NewDecoder(b) - //err := dec.Decode(&data) - //if err != nil { - // log.ErrorByKv("Decode Data struct err", "", "err", err.Error(), "reqIdentifier", r) - // return false, 203, err.Error(), nil - //} - //if err := mapstructure.WeakDecode(m.Data, &data); err != nil { - // log.ErrorByKv("map to Data struct err", "", "err", err.Error(), "reqIdentifier", r) - // return false, 203, err.Error(), nil - //} else - } From 1af78c9bcba826e9008f407da215919bc05ed345 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 18:15:00 +0800 Subject: [PATCH 558/752] Optimization for log --- internal/msg_gateway/gate/logic.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 88c4af013..668b3339a 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -89,7 +89,7 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { } func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeqResp) { - log.Debug(m.OperationID, "getSeqResp come here ", pb.String()) + b, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, @@ -99,6 +99,8 @@ func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeq OperationID: m.OperationID, Data: b, } + log.Debug(m.OperationID, "getSeqResp come here req: ", pb.String(), "send resp: ", + mReply.ReqIdentifier, mReply.MsgIncr, mReply.ErrCode, mReply.ErrMsg) ws.sendMsg(conn, mReply) } From d74bea25aaea8bdf54b4b409b27ce06182aa3136 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 19:17:49 +0800 Subject: [PATCH 559/752] redis replace to go_redis --- pkg/common/db/newRedisModel.go | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 9c279b69f..2ee01100e 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -128,33 +128,37 @@ func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { return utils.StringToInt(result), err } func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { + var keys []string for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - - result, err := d.rdb.Get(context.Background(), key).Result() - if err != nil { - errResult = err - failedSeqList = append(failedSeqList, v) - log2.NewWarn(operationID, "redis get message error:", err.Error(), v) - } else { + keys = append(keys, key) + } + result, err := d.rdb.MGet(context.Background(), keys...).Result() + if err != nil { + errResult = err + failedSeqList = seqList + log2.NewWarn(operationID, "redis get message error:", err.Error(), seqList) + } else { + for _, v := range result { msg := pbCommon.MsgData{} - err = jsonpb.UnmarshalString(result, &msg) + err = jsonpb.UnmarshalString(v.(string), &msg) if err != nil { errResult = err - failedSeqList = append(failedSeqList, v) + failedSeqList = seqList log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) + break } else { log2.NewDebug(operationID, "redis get msg is ", msg.String()) seqMsg = append(seqMsg, &msg) } - } } return seqMsg, failedSeqList, errResult } func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() + pipe := d.rdb.Pipeline() var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) @@ -164,7 +168,7 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, continue } log2.NewDebug(operationID, "convert string is ", s) - err = d.rdb.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err() + err = pipe.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err() //err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) @@ -174,7 +178,8 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, if len(failedList) != 0 { return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) } - return nil + _, err := pipe.Exec(ctx) + return err } func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID string) error { From 04ee5269fe716f1d31a9555c689f6c9a6f523b93 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 19:25:47 +0800 Subject: [PATCH 560/752] Optimization for log --- internal/msg_gateway/gate/logic.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 668b3339a..811449990 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -107,7 +107,7 @@ func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeq func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr, string(m.Data)) nReply := new(sdk_ws.PullMessageBySeqListResp) - isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsgBySeqList) + isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsgBySeqList, m.OperationID) if isPass { rpcReq := sdk_ws.PullMessageBySeqListReq{} rpcReq.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList From cc8301cc6e8c19a000e41418da7acae3dc59c2f3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 19:28:15 +0800 Subject: [PATCH 561/752] redis replace to go_redis --- internal/msg_gateway/gate/logic.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 811449990..56eed3587 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -157,7 +157,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg, m.OperationID) if isPass { data := pData.(sdk_ws.MsgData) pbData := pbChat.SendMsgReq{ @@ -206,7 +206,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg, m.OperationID) if isPass { signalResp := pbRtc.SignalResp{} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName) From 7cbd840060edef2c270dc78c749e44c65dfc675c Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 19:51:16 +0800 Subject: [PATCH 562/752] Optimization for log --- internal/msg_gateway/gate/logic.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 811449990..56eed3587 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -157,7 +157,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg, m.OperationID) if isPass { data := pData.(sdk_ws.MsgData) pbData := pbChat.SendMsgReq{ @@ -206,7 +206,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg, m.OperationID) if isPass { signalResp := pbRtc.SignalResp{} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName) From 2e7e278ba478b7b08364c8e9659c0218bbb1a9d9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 23:30:33 +0800 Subject: [PATCH 563/752] redis restore --- pkg/common/db/newRedisModel.go | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 2ee01100e..da5ec2127 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -128,30 +128,27 @@ func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { return utils.StringToInt(result), err } func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { - var keys []string for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - keys = append(keys, key) - } - result, err := d.rdb.MGet(context.Background(), keys...).Result() - if err != nil { - errResult = err - failedSeqList = seqList - log2.NewWarn(operationID, "redis get message error:", err.Error(), seqList) - } else { - for _, v := range result { + + result, err := d.rdb.Get(context.Background(), key).Result() + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "redis get message error:", err.Error(), v) + } else { msg := pbCommon.MsgData{} - err = jsonpb.UnmarshalString(v.(string), &msg) + err = jsonpb.UnmarshalString(result, &msg) if err != nil { errResult = err - failedSeqList = seqList + failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) - break } else { log2.NewDebug(operationID, "redis get msg is ", msg.String()) seqMsg = append(seqMsg, &msg) } + } } return seqMsg, failedSeqList, errResult From bc2a7b902e587e26c1ce751778fdfef53d30b1bc Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 00:19:41 +0800 Subject: [PATCH 564/752] k8s --- deploy_k8s/admin_cms/admin_cms.Dockerfile | 5 +++-- deploy_k8s/api/api.Dockerfile | 5 +++-- deploy_k8s/api/deployment.yaml | 3 ++- deploy_k8s/cms_api/deployment.yaml | 3 ++- deploy_k8s/demo/deployment.yaml | 3 ++- deploy_k8s/ingress.yaml | 2 +- deploy_k8s/msg_gateway/deployment.yaml | 1 + deploy_k8s/sdk_server/deployment.yaml | 1 + 8 files changed, 15 insertions(+), 8 deletions(-) diff --git a/deploy_k8s/admin_cms/admin_cms.Dockerfile b/deploy_k8s/admin_cms/admin_cms.Dockerfile index 1144ef09d..a7b33da70 100644 --- a/deploy_k8s/admin_cms/admin_cms.Dockerfile +++ b/deploy_k8s/admin_cms/admin_cms.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml @@ -15,5 +16,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config", "/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main +WORKDIR $CMDDIR +CMD ./main diff --git a/deploy_k8s/api/api.Dockerfile b/deploy_k8s/api/api.Dockerfile index f1dd4c748..644621d5f 100644 --- a/deploy_k8s/api/api.Dockerfile +++ b/deploy_k8s/api/api.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main +WORKDIR $CMDDIR +CMD ./main diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index 52990ca2f..ee9d0c8a7 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -16,7 +16,7 @@ spec: containers: - name: api image: openim/api:v2.0.10k - # imagePullPolicy: Always + imagePullPolicy: Always ports: - containerPort: 10002 volumeMounts: @@ -42,3 +42,4 @@ spec: targetPort: 10002 selector: app: api + type: NodePort \ No newline at end of file diff --git a/deploy_k8s/cms_api/deployment.yaml b/deploy_k8s/cms_api/deployment.yaml index 4dd0626ac..9f66431d2 100644 --- a/deploy_k8s/cms_api/deployment.yaml +++ b/deploy_k8s/cms_api/deployment.yaml @@ -41,4 +41,5 @@ spec: port: 10006 targetPort: 10006 selector: - app: cms-api \ No newline at end of file + app: cms-api + type: NodePort \ No newline at end of file diff --git a/deploy_k8s/demo/deployment.yaml b/deploy_k8s/demo/deployment.yaml index d12f902b9..228cc8278 100644 --- a/deploy_k8s/demo/deployment.yaml +++ b/deploy_k8s/demo/deployment.yaml @@ -41,4 +41,5 @@ spec: port: 10004 targetPort: 10004 selector: - app: demo \ No newline at end of file + app: demo + type: NodePort \ No newline at end of file diff --git a/deploy_k8s/ingress.yaml b/deploy_k8s/ingress.yaml index f2d247d0f..6d7fbda6d 100644 --- a/deploy_k8s/ingress.yaml +++ b/deploy_k8s/ingress.yaml @@ -77,7 +77,7 @@ spec: service: name: demo port: - number: 10004 + number: 10004 path: / pathType: Prefix --- diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index 0eec0f5f5..72352386e 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -45,5 +45,6 @@ spec: targetPort: ws-port selector: app: msg-gateway + type: NodePort \ No newline at end of file diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 57cb0c412..063b3d9d9 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -49,5 +49,6 @@ spec: targetPort: 10003 selector: app: sdk-server + type: NodePort \ No newline at end of file From 0d2c0e91c804c8a990cfaee5e080b6f8abb0a048 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 10:26:37 +0800 Subject: [PATCH 565/752] use sarama v1.29.0 --- go.mod | 3 ++- internal/msg_gateway/gate/logic.go | 2 +- internal/rpc/msg/send_msg.go | 12 ++++++------ pkg/common/kafka/producer.go | 10 ++++++---- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 6df88e549..e34d69ab0 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,6 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.11.1 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 @@ -51,3 +50,5 @@ require ( gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) + +replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0 diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 56eed3587..95b6fd85c 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -256,7 +256,7 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { } func (ws *WServer) sendSignalMsgResp(conn *UserConn, errCode int32, errMsg string, m *Req, pb *pbRtc.SignalResp) { // := make(map[string]interface{}) - log.Debug(m.OperationID, "SignalMsgResp is", pb.String()) + log.Debug(m.OperationID, "sendSignalMsgResp is", pb.String()) b, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 6afbc7549..3dc98c3a7 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -160,29 +160,29 @@ func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false) utils.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) utils.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) - } } func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.SendMsgResp, error) { replay := pbChat.SendMsgResp{} newTime := db.GetCurrentTimestampByMill() - log.NewWarn(pb.OperationID, "rpc sendMsg come here", pb.String(), pb.MsgData.ClientMsgID) + log.Info(pb.OperationID, "rpc sendMsg come here ", pb.String()) flag, errCode, errMsg := isMessageHasReadEnabled(pb) + log.Info(pb.OperationID, "isMessageHasReadEnabled ", flag) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } flag, errCode, errMsg = userRelationshipVerification(pb) + log.Info(pb.OperationID, "userRelationshipVerification ", flag) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } rpc.encapsulateMsgData(pb.MsgData) - log.Info(pb.OperationID, "this is a test MsgData ", pb.MsgData) msgToMQSingle := pbChat.MsgDataToMQ{Token: pb.Token, OperationID: pb.OperationID, MsgData: pb.MsgData} - // callback callbackResp := callbackWordFilter(pb) + log.Info(pb.OperationID, "callbackWordFilter ", callbackResp) if callbackResp.ErrCode != 0 { - log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) + log.Error(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) } log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackResp: ", callbackResp) if callbackResp.ActionCode != constant.ActionAllow { @@ -212,7 +212,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.NewInfo(msgToMQSingle.OperationID, msgToMQSingle) err1 := rpc.sendMsgToKafka(&msgToMQSingle, msgToMQSingle.MsgData.RecvID, constant.OnlineStatus) if err1 != nil { - log.NewError(msgToMQSingle.OperationID, "kafka send msg err:RecvID", msgToMQSingle.MsgData.RecvID, msgToMQSingle.String()) + log.NewError(msgToMQSingle.OperationID, "kafka send msg err :RecvID", msgToMQSingle.MsgData.RecvID, msgToMQSingle.String(), err1.Error()) return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) } } diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index c4cd9717a..1ebaaab10 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -2,6 +2,7 @@ package kafka import ( log2 "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "errors" "github.com/Shopify/sarama" "github.com/golang/protobuf/proto" @@ -45,15 +46,16 @@ func (p *Producer) SendMessage(m proto.Message, key string, operationID string) return -1, -1, err } if len(bMsg) == 0 { - return 0, 0, errors.New("msg content is nil") + log2.Error(operationID, "len(bMsg) == 0 ") + return 0, 0, errors.New("len(bMsg) == 0 ") } kMsg.Value = sarama.ByteEncoder(bMsg) - log2.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer) + log2.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer, "len: ", kMsg.Key.Length(), kMsg.Value.Length()) if kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 { log2.Error(operationID, "kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 ", kMsg) return -1, -1, errors.New("key or value == 0") } a, b, c := p.producer.SendMessage(kMsg) - log2.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg, p.producer) - return a, b, c + log2.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg.Key.Length(), kMsg.Value.Length(), p.producer) + return a, b, utils.Wrap(c, "") } From ea76f208259f754463d6f92c5737f5175b9cd972 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 11:27:55 +0800 Subject: [PATCH 566/752] GlobalRecvMsgOpt --- internal/api/user/user.go | 4 +- internal/rpc/user/user.go | 11 +- pkg/base_info/public_struct.go | 2 +- .../mysql_model/im_mysql_model/user_model.go | 5 +- pkg/proto/user/user.pb.go | 396 ++++++++++-------- pkg/proto/user/user.proto | 2 + 6 files changed, 241 insertions(+), 179 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 6be7ed710..9f9e5d70a 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -191,7 +191,9 @@ func UpdateUserInfo(c *gin.Context) { return } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) - + if params.GlobalRecvMsgOpt != nil { + req.GlobalRecvMsgOpt.Value = *params.GlobalRecvMsgOpt + } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) client := rpc.NewUserClient(etcdConn) RpcResp, err := client.UpdateUserInfo(context.Background(), req) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index bacd88c9c..bfe458dce 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -383,7 +383,16 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI if req.UserInfo.Birth != 0 { user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth)) } - err := imdb.UpdateUserInfo(user) + m := make(map[string]interface{}, 1) + if req.GlobalRecvMsgOpt != nil { + m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt + err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + } + err := imdb.UpdateUserInfo(user, m) if err != nil { log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 7c4a6fa8d..89e2be936 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -13,7 +13,7 @@ type ApiUserInfo struct { PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` Birth uint32 `json:"birth" binding:"omitempty"` Email string `json:"email" binding:"omitempty,max=64"` - GlobalRecvMsgOpt int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` + GlobalRecvMsgOpt *int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` Ex string `json:"ex" binding:"omitempty,max=1024"` } diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index 4f26cecbe..e58ed8327 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -96,13 +96,16 @@ func GetUserNameByUserID(userID string) (string, error) { return user.Nickname, nil } -func UpdateUserInfo(user db.User) error { +func UpdateUserInfo(user db.User, m ...map[string]interface{}) error { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return err } dbConn.LogMode(false) err = dbConn.Table("users").Where("user_id=?", user.UserID).Update(&user).Error + if len(m) > 0 { + err = dbConn.Table("users").Where("user_id=?", user.UserID).Updates(m[0]).Error + } return err } diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index eeb501ebb..b6ae8daf0 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -7,6 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import sdk_ws "Open_IM/pkg/proto/sdk_ws" +import wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" import ( context "golang.org/x/net/context" @@ -36,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{0} + return fileDescriptor_user_1b2c9183e940b6c0, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -83,7 +84,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{1} + return fileDescriptor_user_1b2c9183e940b6c0, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -136,7 +137,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{2} + return fileDescriptor_user_1b2c9183e940b6c0, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -182,7 +183,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{3} + return fileDescriptor_user_1b2c9183e940b6c0, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -228,7 +229,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{4} + return fileDescriptor_user_1b2c9183e940b6c0, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -275,7 +276,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{5} + return fileDescriptor_user_1b2c9183e940b6c0, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -328,7 +329,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{6} + return fileDescriptor_user_1b2c9183e940b6c0, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -374,7 +375,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{6, 0} + return fileDescriptor_user_1b2c9183e940b6c0, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -421,7 +422,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{7} + return fileDescriptor_user_1b2c9183e940b6c0, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -474,7 +475,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{8} + return fileDescriptor_user_1b2c9183e940b6c0, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -509,19 +510,20 @@ func (m *GetUserInfoResp) GetUserInfoList() []*sdk_ws.UserInfo { } type UpdateUserInfoReq struct { - UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` - OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + GlobalRecvMsgOpt *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{9} + return fileDescriptor_user_1b2c9183e940b6c0, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -562,6 +564,13 @@ func (m *UpdateUserInfoReq) GetOperationID() string { return "" } +func (m *UpdateUserInfoReq) GetGlobalRecvMsgOpt() *wrapperspb.Int32Value { + if m != nil { + return m.GlobalRecvMsgOpt + } + return nil +} + type UpdateUserInfoResp struct { CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -573,7 +582,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{10} + return fileDescriptor_user_1b2c9183e940b6c0, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -624,7 +633,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{11} + return fileDescriptor_user_1b2c9183e940b6c0, []int{11} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -755,7 +764,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{12} + return fileDescriptor_user_1b2c9183e940b6c0, []int{12} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -807,7 +816,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{13} + return fileDescriptor_user_1b2c9183e940b6c0, []int{13} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -849,7 +858,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{14} + return fileDescriptor_user_1b2c9183e940b6c0, []int{14} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -915,7 +924,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{15} + return fileDescriptor_user_1b2c9183e940b6c0, []int{15} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -955,7 +964,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{16} + return fileDescriptor_user_1b2c9183e940b6c0, []int{16} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1008,7 +1017,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{17} + return fileDescriptor_user_1b2c9183e940b6c0, []int{17} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1055,7 +1064,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{18} + return fileDescriptor_user_1b2c9183e940b6c0, []int{18} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1108,7 +1117,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{19} + return fileDescriptor_user_1b2c9183e940b6c0, []int{19} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1154,7 +1163,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{20} + return fileDescriptor_user_1b2c9183e940b6c0, []int{20} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1200,7 +1209,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{21} + return fileDescriptor_user_1b2c9183e940b6c0, []int{21} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1248,7 +1257,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{22} + return fileDescriptor_user_1b2c9183e940b6c0, []int{22} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1309,7 +1318,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{23} + return fileDescriptor_user_1b2c9183e940b6c0, []int{23} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1362,7 +1371,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{24} + return fileDescriptor_user_1b2c9183e940b6c0, []int{24} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1407,7 +1416,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{25} + return fileDescriptor_user_1b2c9183e940b6c0, []int{25} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1446,7 +1455,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{26} + return fileDescriptor_user_1b2c9183e940b6c0, []int{26} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1495,7 +1504,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{27} + return fileDescriptor_user_1b2c9183e940b6c0, []int{27} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1562,7 +1571,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{28} + return fileDescriptor_user_1b2c9183e940b6c0, []int{28} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1609,7 +1618,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{29} + return fileDescriptor_user_1b2c9183e940b6c0, []int{29} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1663,7 +1672,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{30} + return fileDescriptor_user_1b2c9183e940b6c0, []int{30} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1720,7 +1729,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{31} + return fileDescriptor_user_1b2c9183e940b6c0, []int{31} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1793,7 +1802,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{32} + return fileDescriptor_user_1b2c9183e940b6c0, []int{32} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1833,7 +1842,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{33} + return fileDescriptor_user_1b2c9183e940b6c0, []int{33} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1888,7 +1897,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{34} + return fileDescriptor_user_1b2c9183e940b6c0, []int{34} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -1951,7 +1960,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{35} + return fileDescriptor_user_1b2c9183e940b6c0, []int{35} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2017,7 +2026,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{36} + return fileDescriptor_user_1b2c9183e940b6c0, []int{36} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2058,7 +2067,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{37} + return fileDescriptor_user_1b2c9183e940b6c0, []int{37} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2117,7 +2126,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{38} + return fileDescriptor_user_1b2c9183e940b6c0, []int{38} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2157,7 +2166,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{39} + return fileDescriptor_user_1b2c9183e940b6c0, []int{39} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2209,7 +2218,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{40} + return fileDescriptor_user_1b2c9183e940b6c0, []int{40} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2249,7 +2258,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{41} + return fileDescriptor_user_1b2c9183e940b6c0, []int{41} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2303,7 +2312,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{42} + return fileDescriptor_user_1b2c9183e940b6c0, []int{42} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2358,7 +2367,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{43} + return fileDescriptor_user_1b2c9183e940b6c0, []int{43} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2418,7 +2427,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{44} + return fileDescriptor_user_1b2c9183e940b6c0, []int{44} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2463,7 +2472,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{45} + return fileDescriptor_user_1b2c9183e940b6c0, []int{45} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2503,7 +2512,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{46} + return fileDescriptor_user_1b2c9183e940b6c0, []int{46} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2555,7 +2564,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{47} + return fileDescriptor_user_1b2c9183e940b6c0, []int{47} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -2667,6 +2676,7 @@ type UserClient interface { GetBlockUsers(ctx context.Context, in *GetBlockUsersReq, opts ...grpc.CallOption) (*GetBlockUsersResp, error) GetBlockUserById(ctx context.Context, in *GetBlockUserByIdReq, opts ...grpc.CallOption) (*GetBlockUserByIdResp, error) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ...grpc.CallOption) (*DeleteUserResp, error) + GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) } type userClient struct { @@ -2875,6 +2885,15 @@ func (c *userClient) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ... return out, nil } +func (c *userClient) GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) { + out := new(GetUserInfoResp) + err := grpc.Invoke(ctx, "/user.user/GetUserInfoFromCache", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for User service type UserServer interface { @@ -2900,6 +2919,7 @@ type UserServer interface { GetBlockUsers(context.Context, *GetBlockUsersReq) (*GetBlockUsersResp, error) GetBlockUserById(context.Context, *GetBlockUserByIdReq) (*GetBlockUserByIdResp, error) DeleteUser(context.Context, *DeleteUserReq) (*DeleteUserResp, error) + GetUserInfoFromCache(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) } func RegisterUserServer(s *grpc.Server, srv UserServer) { @@ -3302,6 +3322,24 @@ func _User_DeleteUser_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _User_GetUserInfoFromCache_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUserInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).GetUserInfoFromCache(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/GetUserInfoFromCache", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).GetUserInfoFromCache(ctx, req.(*GetUserInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + var _User_serviceDesc = grpc.ServiceDesc{ ServiceName: "user.user", HandlerType: (*UserServer)(nil), @@ -3394,130 +3432,138 @@ var _User_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteUser", Handler: _User_DeleteUser_Handler, }, + { + MethodName: "GetUserInfoFromCache", + Handler: _User_GetUserInfoFromCache_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_e11c6a5241e13fcd) } +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_1b2c9183e940b6c0) } -var fileDescriptor_user_e11c6a5241e13fcd = []byte{ - // 1857 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xdd, 0x4f, 0x24, 0x4b, - 0x15, 0x4f, 0xcf, 0xc7, 0x02, 0x67, 0x98, 0x61, 0x28, 0xb8, 0xd0, 0xb7, 0x55, 0xc4, 0xce, 0xf5, - 0x4a, 0x48, 0x04, 0x5d, 0x8d, 0x6b, 0xd6, 0xe8, 0x2e, 0x33, 0xb0, 0x64, 0x8c, 0x0b, 0x93, 0x9e, - 0x25, 0x31, 0xc6, 0x84, 0xf4, 0xce, 0x14, 0xd0, 0x61, 0xa6, 0xbb, 0xb7, 0xab, 0x87, 0x5d, 0x7c, - 0x59, 0xe3, 0xc7, 0x8b, 0xf1, 0xc5, 0xa7, 0x5d, 0x7d, 0xf0, 0xef, 0xf0, 0x5d, 0x9f, 0xfc, 0x0f, - 0xf4, 0xc5, 0x7f, 0xc5, 0xd4, 0x47, 0x77, 0x57, 0x55, 0x37, 0x30, 0xb7, 0x21, 0xfb, 0x02, 0x53, - 0xa7, 0xbe, 0x7e, 0xe7, 0x9c, 0xdf, 0x39, 0x75, 0xaa, 0x1a, 0x96, 0xa6, 0x04, 0x47, 0xbb, 0xf4, - 0xcf, 0x4e, 0x18, 0x05, 0x71, 0x80, 0x6a, 0xf4, 0xb7, 0xf5, 0xad, 0xe3, 0x10, 0xfb, 0xa7, 0xbd, - 0x97, 0xbb, 0xe1, 0xe5, 0xf9, 0x2e, 0xeb, 0xd8, 0x25, 0xa3, 0xcb, 0xd3, 0xb7, 0x64, 0xf7, 0x2d, - 0xe1, 0x03, 0xed, 0x9f, 0x01, 0x74, 0x83, 0xc9, 0x24, 0xf0, 0x1d, 0x4c, 0x42, 0x64, 0xc2, 0x1c, - 0x8e, 0xa2, 0x6e, 0x30, 0xc2, 0xa6, 0xb1, 0x69, 0x6c, 0xd5, 0x9d, 0xa4, 0x89, 0xd6, 0xe0, 0x11, - 0x8e, 0xa2, 0x97, 0xe4, 0xdc, 0xac, 0x6c, 0x1a, 0x5b, 0x0b, 0x8e, 0x68, 0xd9, 0xbf, 0x81, 0xd6, - 0x3e, 0x1e, 0xe3, 0x18, 0x9f, 0x10, 0x1c, 0x11, 0x07, 0xbf, 0x41, 0xdb, 0xd0, 0xce, 0x24, 0xbd, - 0xfd, 0x5f, 0x78, 0x24, 0x36, 0x2b, 0x9b, 0xd5, 0xad, 0x05, 0x27, 0x27, 0x47, 0x16, 0xcc, 0x1f, - 0x87, 0xbc, 0x6d, 0x56, 0xd9, 0xba, 0x69, 0x1b, 0x6d, 0x42, 0xe3, 0x38, 0xc4, 0x91, 0x1b, 0x7b, - 0x81, 0xdf, 0xdb, 0x37, 0x6b, 0xac, 0x5b, 0x16, 0xd9, 0x01, 0x2c, 0x29, 0x7b, 0x93, 0x10, 0x7d, - 0x4f, 0x56, 0x87, 0xe9, 0xd0, 0x78, 0xdc, 0xde, 0x61, 0x86, 0xc9, 0xe4, 0x8e, 0xac, 0xf2, 0x36, - 0xb4, 0x5f, 0xb8, 0xde, 0x18, 0x8f, 0xf2, 0x70, 0x75, 0xb9, 0x7d, 0x0c, 0x4b, 0x87, 0x38, 0xde, - 0x1b, 0x8f, 0xb9, 0x8c, 0x6a, 0x6b, 0xc1, 0x7c, 0x90, 0x68, 0x60, 0x70, 0x0d, 0x02, 0x49, 0x83, - 0x40, 0xd2, 0x80, 0x1b, 0x4e, 0x16, 0xd9, 0x23, 0x68, 0xab, 0x0b, 0x96, 0x52, 0x61, 0x03, 0x20, - 0x07, 0x5e, 0x92, 0xd8, 0xd7, 0xb0, 0xb4, 0x37, 0x1c, 0x06, 0x53, 0x3f, 0xee, 0x5e, 0xe0, 0xe1, - 0x25, 0x85, 0xbd, 0x05, 0x4b, 0xec, 0xb7, 0x34, 0xcf, 0x60, 0xf3, 0x74, 0xb1, 0xe2, 0xa2, 0xca, - 0xed, 0x2e, 0xaa, 0xe6, 0x5d, 0xf4, 0x3f, 0x03, 0xda, 0xea, 0xde, 0x5c, 0xc3, 0xe1, 0x0c, 0x1a, - 0x66, 0x63, 0xd0, 0x21, 0x80, 0x83, 0xc9, 0x74, 0x1c, 0xa7, 0x1a, 0x36, 0x1e, 0x7f, 0x87, 0xcf, - 0xd0, 0x57, 0xdf, 0x19, 0x78, 0xfe, 0xf9, 0x98, 0x51, 0x62, 0x10, 0xbb, 0xf1, 0x94, 0x38, 0xd2, - 0x54, 0xab, 0x0f, 0x6d, 0xbd, 0x9f, 0x52, 0x7b, 0x2a, 0x3b, 0x50, 0xb4, 0xd0, 0x17, 0xd0, 0x74, - 0xf9, 0xe2, 0x7c, 0xa0, 0x50, 0x5f, 0x15, 0xda, 0x3e, 0xb4, 0x0e, 0x71, 0xcc, 0x0c, 0xe2, 0x9f, - 0x05, 0xd4, 0xb6, 0x1b, 0x00, 0x53, 0xdd, 0xac, 0x92, 0xe4, 0x9e, 0x16, 0xfd, 0x83, 0xc1, 0x48, - 0x98, 0x6d, 0x58, 0xca, 0xa0, 0xcf, 0x60, 0x31, 0x59, 0x81, 0xa1, 0xac, 0x32, 0x93, 0x7e, 0x6d, - 0x87, 0xe0, 0xe8, 0x0a, 0x47, 0xa7, 0x6e, 0xe8, 0x9d, 0x86, 0x6e, 0xe4, 0x4e, 0xc8, 0x4e, 0xba, - 0x91, 0x32, 0xc1, 0xfe, 0x93, 0x01, 0xcb, 0x27, 0xe1, 0xc8, 0x15, 0xe1, 0x2c, 0x54, 0x7f, 0x02, - 0xf3, 0x49, 0x53, 0xc0, 0xb8, 0x75, 0xc9, 0x74, 0xf0, 0x5d, 0x36, 0x09, 0xf2, 0x36, 0x91, 0xc3, - 0xe8, 0x05, 0x20, 0x1d, 0x4b, 0x19, 0xab, 0xd8, 0xff, 0xad, 0xc2, 0x62, 0x37, 0xf0, 0xaf, 0x70, - 0x44, 0xd8, 0xd2, 0xcc, 0x1d, 0x6f, 0x7d, 0x1c, 0x29, 0x01, 0x2e, 0x8b, 0xd0, 0x97, 0xd0, 0x92, - 0x67, 0xa4, 0xf0, 0x35, 0x29, 0x25, 0x85, 0x83, 0x87, 0x57, 0x2f, 0xc9, 0xf9, 0x71, 0x18, 0x33, - 0x1d, 0xea, 0x8e, 0x24, 0xa1, 0x69, 0x48, 0x9e, 0xf1, 0xea, 0x3a, 0xc4, 0x2c, 0xe5, 0xd5, 0x9d, - 0x9c, 0x9c, 0x12, 0x56, 0x00, 0xaa, 0x73, 0xc2, 0x0a, 0x2c, 0x26, 0xcc, 0x1d, 0x46, 0xc1, 0x34, - 0xec, 0xed, 0x9b, 0x8f, 0x58, 0x47, 0xd2, 0xa4, 0x7a, 0x9c, 0xf8, 0x11, 0x76, 0x47, 0x5d, 0xca, - 0x5c, 0x73, 0x8e, 0x2d, 0x2c, 0x8b, 0x28, 0xd9, 0xf7, 0x23, 0xf7, 0x2c, 0x7e, 0x85, 0xdf, 0xc5, - 0xaf, 0xbc, 0x09, 0x36, 0xe7, 0x37, 0x8d, 0xad, 0xaa, 0xa3, 0x0a, 0xa9, 0x9b, 0x7a, 0xa4, 0xef, - 0xf9, 0x3e, 0x1e, 0x99, 0x0b, 0x9b, 0xc6, 0xd6, 0xbc, 0x93, 0xb6, 0x91, 0x0d, 0x8b, 0x7b, 0x71, - 0xec, 0x0e, 0x2f, 0xf0, 0x88, 0xf9, 0x1f, 0x18, 0x04, 0x45, 0x46, 0x77, 0xe9, 0x91, 0x7e, 0xe4, - 0x5d, 0xb9, 0x31, 0xee, 0x5e, 0xb8, 0xb1, 0xd9, 0x60, 0x8b, 0xa8, 0x42, 0x8a, 0x96, 0x01, 0xdf, - 0x8b, 0x99, 0x19, 0x16, 0x39, 0x5a, 0x49, 0x44, 0xf7, 0xea, 0x91, 0xa3, 0x20, 0xee, 0xf9, 0x4c, - 0x6a, 0x36, 0xd9, 0x32, 0x8a, 0x0c, 0xb5, 0xa0, 0x72, 0xf0, 0xce, 0x6c, 0x31, 0x14, 0x95, 0x83, - 0x77, 0xf6, 0xdf, 0x0c, 0x40, 0x03, 0x1c, 0xcb, 0xd6, 0xa4, 0x94, 0xfd, 0x91, 0xea, 0x72, 0xc1, - 0x13, 0x94, 0xf0, 0x44, 0x1a, 0xac, 0x52, 0x63, 0x1b, 0xda, 0x7e, 0x10, 0x7b, 0x67, 0xde, 0x30, - 0x73, 0x58, 0x85, 0x3b, 0x4c, 0x97, 0xcf, 0x10, 0xd5, 0x87, 0xb0, 0x92, 0xc3, 0x56, 0x8a, 0xc2, - 0xff, 0x36, 0xa0, 0x3d, 0xc0, 0x71, 0xc6, 0x2c, 0xaa, 0xe3, 0x27, 0xa5, 0x71, 0xce, 0x2a, 0xb5, - 0xd9, 0xac, 0x52, 0xcf, 0x5b, 0xe5, 0x00, 0x96, 0x35, 0x5d, 0x4a, 0xd9, 0xe4, 0xb7, 0x06, 0xa0, - 0xc3, 0xbc, 0xe7, 0xf3, 0x3a, 0x1b, 0x85, 0x3a, 0x6b, 0xd6, 0xab, 0xe4, 0xad, 0x77, 0xb7, 0x7f, - 0xdf, 0xc3, 0xca, 0xe1, 0x43, 0xf8, 0x37, 0x47, 0xd7, 0xca, 0x6c, 0x74, 0xb5, 0x7f, 0x6f, 0xe4, - 0x10, 0x90, 0xd9, 0xa8, 0x41, 0x4b, 0x05, 0xc5, 0x20, 0x44, 0x94, 0x18, 0xba, 0x78, 0x06, 0x33, - 0xfc, 0xce, 0x80, 0xd5, 0x3c, 0x8a, 0x52, 0x86, 0xf8, 0x31, 0x34, 0x95, 0x65, 0x44, 0x55, 0x50, - 0x64, 0x09, 0x75, 0xa0, 0xfd, 0x6b, 0x58, 0xe3, 0x45, 0x57, 0x09, 0x63, 0x68, 0x2a, 0x56, 0xf2, - 0x2a, 0xfe, 0xd1, 0x80, 0xf5, 0xc2, 0xe5, 0x3f, 0xb1, 0x96, 0xff, 0x32, 0xc0, 0xec, 0xb8, 0xf1, - 0xf0, 0x62, 0x50, 0xe0, 0xf5, 0xdc, 0xb2, 0xc6, 0x8c, 0xcb, 0xce, 0x10, 0x0c, 0x45, 0x29, 0xa0, - 0x3a, 0x5b, 0x0a, 0xa8, 0x15, 0x05, 0xce, 0xe7, 0x37, 0x68, 0x51, 0xca, 0x9e, 0x26, 0xcc, 0x0d, - 0xa6, 0xc3, 0x21, 0x26, 0x09, 0x89, 0x93, 0x26, 0x3d, 0x54, 0x79, 0xbd, 0xcf, 0x6a, 0xa1, 0x05, - 0x47, 0xb4, 0xec, 0x1e, 0x34, 0x1d, 0x4c, 0xbc, 0x73, 0x9f, 0xaa, 0x47, 0x6d, 0x97, 0x9c, 0xbe, - 0xa3, 0xa4, 0x5c, 0xe4, 0xad, 0x19, 0xa8, 0xd1, 0x81, 0x96, 0xbc, 0x54, 0xa9, 0x5c, 0xf6, 0xf3, - 0xb4, 0xdc, 0xec, 0x5c, 0xf7, 0x46, 0xf7, 0xc3, 0xf3, 0xd1, 0x80, 0x1a, 0x1d, 0x4c, 0x8f, 0xd3, - 0x7e, 0x14, 0x9c, 0x79, 0x63, 0xdc, 0xbf, 0x08, 0xe2, 0x40, 0x2c, 0xa4, 0xc8, 0xe8, 0xd1, 0x7f, - 0xe4, 0x0d, 0x2f, 0x7d, 0x77, 0x82, 0x93, 0x0a, 0x2d, 0x69, 0x4b, 0x10, 0xaa, 0x0a, 0x84, 0x0d, - 0x80, 0x6e, 0x84, 0xdd, 0x18, 0xb3, 0x8a, 0x82, 0x7b, 0x57, 0x92, 0x50, 0x6f, 0xf4, 0x48, 0x67, - 0x1c, 0x0c, 0x2f, 0x59, 0xf6, 0x9f, 0x77, 0x92, 0xa6, 0x3d, 0x4c, 0x8b, 0x5c, 0xae, 0x66, 0xc9, - 0x7b, 0x11, 0xbb, 0x06, 0x8b, 0x1c, 0x09, 0x7c, 0x2c, 0xb3, 0x3d, 0x93, 0xdb, 0x1f, 0x0c, 0x58, - 0x16, 0xbb, 0x90, 0xce, 0xf5, 0x91, 0x3b, 0xc1, 0xe2, 0x46, 0x47, 0x25, 0xb4, 0x99, 0xdc, 0xe8, - 0x92, 0x36, 0xda, 0x07, 0xe8, 0xbb, 0xe7, 0x9e, 0x2f, 0xe7, 0xde, 0x2f, 0x0a, 0x2a, 0x5c, 0x07, - 0xbf, 0x99, 0x62, 0x12, 0x67, 0x63, 0x1d, 0x69, 0xde, 0x0c, 0x79, 0xf2, 0xaf, 0xfc, 0xc4, 0x52, - 0x90, 0x91, 0x10, 0x6d, 0x42, 0x9d, 0x02, 0x4f, 0xc2, 0x55, 0xd6, 0x88, 0x77, 0xa0, 0x83, 0x02, - 0x80, 0xdf, 0x2e, 0x04, 0x48, 0xc2, 0xc0, 0x27, 0xf8, 0x06, 0x84, 0x89, 0x0d, 0xa6, 0x13, 0x22, - 0x62, 0x37, 0x6d, 0xdb, 0xff, 0x30, 0x60, 0x71, 0x6f, 0x1c, 0xf3, 0x78, 0xbf, 0x17, 0x01, 0xe9, - 0x88, 0xfe, 0x45, 0xe0, 0xe3, 0xa3, 0xe9, 0xe4, 0x35, 0x8e, 0xd8, 0x4e, 0x55, 0x47, 0x16, 0x29, - 0xac, 0xab, 0x69, 0xac, 0x5b, 0x85, 0xfa, 0xc1, 0xc4, 0xf5, 0xc6, 0xa2, 0x72, 0xe0, 0x0d, 0xe9, - 0x26, 0x31, 0x12, 0x55, 0x70, 0xda, 0xb6, 0xf7, 0xa0, 0x29, 0x21, 0x2f, 0xc3, 0x29, 0xfb, 0x2f, - 0x06, 0x34, 0x12, 0xcf, 0x24, 0x47, 0x86, 0xa4, 0xa4, 0x91, 0x57, 0xf2, 0x61, 0x38, 0x23, 0xb3, - 0xb2, 0xaa, 0xb2, 0xd2, 0xfe, 0xa7, 0x01, 0x8b, 0x19, 0xa6, 0x7b, 0x86, 0x4a, 0xb5, 0x28, 0x54, - 0x34, 0x5e, 0x55, 0x1f, 0x82, 0x57, 0x35, 0x8d, 0x57, 0x1f, 0x0d, 0x80, 0xbd, 0xd1, 0x28, 0x61, - 0xd5, 0xdd, 0x86, 0xd5, 0xd8, 0x23, 0xf8, 0x25, 0xb3, 0xe7, 0xa6, 0xbc, 0x84, 0xa0, 0x26, 0x31, - 0x8a, 0xfd, 0x56, 0x78, 0x53, 0xd7, 0x78, 0xf3, 0x0c, 0x1a, 0x29, 0xb2, 0x52, 0xac, 0xf9, 0xb3, - 0x01, 0x8b, 0x2c, 0xb1, 0xdd, 0x15, 0x33, 0x5f, 0x42, 0xeb, 0xc0, 0x1f, 0xed, 0x7b, 0xc4, 0x7d, - 0x3d, 0xe6, 0x59, 0x53, 0xd4, 0xe1, 0xaa, 0xf4, 0xee, 0x14, 0xa2, 0xe8, 0x53, 0xcb, 0xc7, 0x81, - 0x84, 0xa6, 0x94, 0x46, 0x67, 0xd0, 0x3a, 0xf1, 0x67, 0x52, 0xe9, 0xee, 0x34, 0x20, 0x43, 0xad, - 0x6a, 0x50, 0xbb, 0xb0, 0xa4, 0xec, 0x53, 0x0a, 0xec, 0xdf, 0x0d, 0xf6, 0xce, 0x96, 0x2e, 0xc3, - 0x22, 0x57, 0x8d, 0x4b, 0xe3, 0x61, 0x72, 0x79, 0x81, 0x76, 0xb6, 0xe4, 0xfa, 0xa3, 0xe9, 0x44, - 0xe4, 0x53, 0x45, 0x66, 0xbf, 0x87, 0x85, 0xb4, 0x4d, 0x63, 0x91, 0xfe, 0x17, 0x90, 0x94, 0x58, - 0x64, 0xfd, 0xdb, 0xd0, 0xee, 0xe0, 0x73, 0xcf, 0xcf, 0xb3, 0x24, 0x27, 0x2f, 0xe0, 0x53, 0xb5, - 0x88, 0x4f, 0xf6, 0x7f, 0xf8, 0x51, 0x28, 0x5b, 0xa8, 0x54, 0x1e, 0xd9, 0x05, 0xc8, 0xd6, 0x10, - 0xd9, 0x64, 0x89, 0xcf, 0xc8, 0x9c, 0x28, 0x0d, 0xf9, 0x14, 0x89, 0xa5, 0xcf, 0x6e, 0x3e, 0xe9, - 0x9e, 0x49, 0xdd, 0xb4, 0x0e, 0x73, 0xb4, 0x79, 0xea, 0x7d, 0xf5, 0xc2, 0xe9, 0x80, 0xdd, 0x62, - 0xb4, 0x15, 0x49, 0x88, 0xbe, 0x2b, 0xb9, 0x51, 0x64, 0xfa, 0x9c, 0xf2, 0xd9, 0x08, 0xfb, 0x0c, - 0x9a, 0xd9, 0xfb, 0xf5, 0xfd, 0x20, 0xdd, 0x1a, 0x43, 0x1d, 0xf9, 0x8d, 0xbe, 0x9c, 0x63, 0x1f, - 0x7f, 0x68, 0xf0, 0x13, 0x02, 0x3d, 0x4d, 0xcf, 0x3f, 0xf6, 0xa2, 0xb3, 0xca, 0x67, 0xa9, 0x4f, - 0xa0, 0xd6, 0x67, 0x05, 0x52, 0x12, 0xa2, 0x2e, 0xb4, 0xd4, 0x77, 0x3a, 0xb4, 0x2e, 0xd8, 0xad, - 0xbf, 0x24, 0x5a, 0x66, 0x71, 0x07, 0x09, 0x29, 0x00, 0xe9, 0xd5, 0x3f, 0x01, 0xa0, 0x7e, 0x84, - 0x48, 0x00, 0xe8, 0x9f, 0x07, 0x7e, 0xca, 0x0e, 0xca, 0xf4, 0xbd, 0x1d, 0x65, 0x38, 0xe5, 0x47, - 0x7d, 0x6b, 0xad, 0x48, 0xcc, 0xa7, 0xcb, 0xcf, 0xcd, 0xc9, 0x74, 0xed, 0x71, 0x3d, 0x99, 0x9e, - 0x7b, 0xf7, 0x7e, 0xc1, 0x8a, 0x5a, 0xe5, 0x15, 0xc9, 0x4c, 0x77, 0xd2, 0x5e, 0x27, 0xac, 0xcf, - 0x6f, 0xe8, 0x21, 0x21, 0x72, 0x18, 0xa1, 0xf5, 0x1b, 0x26, 0xfa, 0xba, 0x8c, 0x5a, 0xbf, 0xf2, - 0x59, 0xdf, 0xb8, 0xa5, 0x97, 0x84, 0xa8, 0xc7, 0x32, 0xa4, 0xba, 0x60, 0x31, 0x04, 0xb6, 0x9a, - 0x75, 0x53, 0x17, 0x09, 0xd1, 0x2f, 0xe1, 0xb3, 0xc2, 0x2b, 0x1b, 0xda, 0x10, 0xb1, 0x70, 0xc3, - 0xad, 0xd4, 0xfa, 0xe6, 0xad, 0xfd, 0xdc, 0x80, 0x83, 0x62, 0x03, 0x0e, 0x6e, 0x34, 0x60, 0xd1, - 0xb3, 0xda, 0x73, 0x68, 0x2a, 0xef, 0x4a, 0x68, 0x2d, 0x1d, 0xab, 0x3c, 0x9c, 0x59, 0xeb, 0x85, - 0x72, 0x4e, 0x42, 0xe9, 0x7e, 0xa2, 0x45, 0x81, 0xc8, 0x30, 0x5a, 0x14, 0xa4, 0x59, 0xa2, 0x9b, - 0x5e, 0xe1, 0x44, 0x6d, 0x9f, 0x44, 0x41, 0xee, 0x2e, 0x62, 0x99, 0xc5, 0x1d, 0x24, 0x44, 0x4f, - 0xd8, 0x17, 0x11, 0x71, 0x97, 0x44, 0x2b, 0x7c, 0x9c, 0x72, 0x51, 0xb5, 0x56, 0xf3, 0x42, 0x12, - 0xa2, 0x1f, 0xc2, 0x42, 0x5a, 0x03, 0x23, 0x71, 0xe1, 0x97, 0xcb, 0x79, 0x6b, 0x25, 0x27, 0x23, - 0x21, 0xfa, 0x3e, 0xcc, 0x27, 0x20, 0xd0, 0xb2, 0x0a, 0x8a, 0xce, 0x41, 0xba, 0x88, 0x84, 0x68, - 0x07, 0xe6, 0x44, 0xd1, 0x84, 0x44, 0x6a, 0xc9, 0xaa, 0x3b, 0x6b, 0x59, 0x93, 0x70, 0x60, 0xd9, - 0x19, 0x88, 0xf4, 0xb4, 0x99, 0x01, 0x53, 0x8b, 0x81, 0xa7, 0xd0, 0x90, 0xea, 0x83, 0xc4, 0x11, - 0x6a, 0x69, 0x92, 0x38, 0x42, 0x2f, 0x24, 0x9e, 0x43, 0x53, 0x39, 0xf3, 0x50, 0x16, 0xf7, 0x4a, - 0xa9, 0x60, 0xad, 0x17, 0xca, 0xd3, 0xa8, 0x51, 0x0e, 0x02, 0x29, 0x6a, 0xf4, 0x23, 0x47, 0x8a, - 0x9a, 0xfc, 0xd9, 0xf1, 0x04, 0x20, 0xcb, 0x56, 0x89, 0x43, 0x95, 0xe3, 0xc1, 0x5a, 0xcd, 0x0b, - 0x49, 0xd8, 0x69, 0xfe, 0xaa, 0xb1, 0xc3, 0x3e, 0xfd, 0xfe, 0x84, 0xfe, 0x79, 0xfd, 0x88, 0x7d, - 0xd7, 0xfd, 0xc1, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x34, 0x9a, 0x78, 0xde, 0x13, 0x1e, 0x00, - 0x00, +var fileDescriptor_user_1b2c9183e940b6c0 = []byte{ + // 1922 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, + 0x15, 0x57, 0xdb, 0xce, 0x24, 0x79, 0x8e, 0x1d, 0xa7, 0x26, 0x3b, 0xe9, 0x6d, 0x60, 0x08, 0xad, + 0x65, 0x37, 0x1a, 0x09, 0x07, 0x66, 0x11, 0x83, 0x16, 0xc1, 0x6e, 0xec, 0x64, 0x2c, 0x23, 0x26, + 0xb1, 0xda, 0x33, 0x08, 0x21, 0xa4, 0xa8, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0x76, + 0x66, 0xc2, 0x65, 0x11, 0x1f, 0x37, 0x2e, 0x9c, 0x58, 0x38, 0xf0, 0x77, 0x70, 0x87, 0x13, 0x57, + 0x4e, 0x20, 0x24, 0xfe, 0x95, 0x55, 0x7d, 0x74, 0x77, 0x55, 0x75, 0x3b, 0xf1, 0x74, 0xa2, 0xb9, + 0x24, 0xae, 0x57, 0x5f, 0xbf, 0xf7, 0xde, 0xef, 0xbd, 0x7a, 0x55, 0x0d, 0x9b, 0x73, 0x82, 0xa3, + 0x7d, 0xfa, 0xa7, 0x1d, 0x46, 0x41, 0x1c, 0xa0, 0x1a, 0xfd, 0x6d, 0x7d, 0xeb, 0x24, 0xc4, 0xfe, + 0x69, 0xff, 0xc5, 0x7e, 0x78, 0x39, 0xd9, 0x67, 0x1d, 0xfb, 0x64, 0x7c, 0x79, 0xfa, 0x9a, 0xec, + 0xbf, 0x26, 0x7c, 0xa0, 0xf5, 0xd1, 0xe2, 0x21, 0x91, 0x1b, 0x86, 0x38, 0x12, 0x03, 0xed, 0x9f, + 0x00, 0x74, 0x83, 0xd9, 0x2c, 0xf0, 0x1d, 0x4c, 0x42, 0x64, 0xc2, 0x2a, 0x8e, 0xa2, 0x6e, 0x30, + 0xc6, 0xa6, 0xb1, 0x6b, 0xec, 0xad, 0x38, 0x49, 0x13, 0x3d, 0x82, 0x07, 0x38, 0x8a, 0x5e, 0x90, + 0x89, 0x59, 0xd9, 0x35, 0xf6, 0xd6, 0x1d, 0xd1, 0xb2, 0x7f, 0x0d, 0xcd, 0x43, 0x3c, 0xc5, 0x31, + 0x7e, 0x45, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x02, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, + 0x62, 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, + 0x95, 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, + 0xb3, 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, + 0x0e, 0xf5, 0xa7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x40, 0xeb, 0xb9, 0xeb, + 0x4d, 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, + 0x54, 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, + 0x70, 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x8f, 0x01, 0x72, 0xe0, 0x25, 0x89, + 0x7d, 0x0d, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x05, 0x1e, 0x5d, 0x52, 0xd8, 0x7b, + 0xb0, 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xec, 0xa2, 0x6a, + 0xde, 0x45, 0xff, 0x37, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, + 0x00, 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xf4, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, + 0xf4, 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, + 0xbd, 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, + 0x50, 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0xcf, 0x03, 0x6a, 0xdb, 0xc7, + 0x00, 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x8e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, + 0xa0, 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x0a, + 0x47, 0xa7, 0x6e, 0xe8, 0x9d, 0x86, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, + 0xdb, 0x80, 0xad, 0x57, 0xe1, 0xd8, 0x15, 0xe1, 0x2c, 0x54, 0x7f, 0x06, 0x6b, 0x49, 0x53, 0xc0, + 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x6d, 0x36, 0x09, 0xf2, 0x36, 0x91, 0x44, 0xa8, 0x07, 0xad, 0xc9, + 0x34, 0x38, 0x73, 0xa7, 0x0e, 0x1e, 0x5d, 0xbd, 0x20, 0x93, 0x93, 0x30, 0x66, 0xf9, 0x82, 0x6e, + 0x3f, 0x09, 0x82, 0xc9, 0x14, 0xf3, 0x6c, 0x77, 0x36, 0x3f, 0x6f, 0xf7, 0xfd, 0xf8, 0xe3, 0xa7, + 0x3f, 0x77, 0xa7, 0x73, 0xec, 0xe4, 0x26, 0xd9, 0xcf, 0x01, 0xe9, 0x4a, 0x95, 0x31, 0xaf, 0xfd, + 0xdf, 0x2a, 0x6c, 0x74, 0x03, 0xff, 0x0a, 0x47, 0x84, 0x61, 0x64, 0x7e, 0x7d, 0xed, 0xe3, 0x48, + 0xc9, 0x14, 0xb2, 0x08, 0x7d, 0x08, 0x4d, 0x79, 0x46, 0x6a, 0x07, 0x4d, 0x4a, 0xd9, 0x25, 0x69, + 0x59, 0x65, 0x59, 0x5a, 0x92, 0xd0, 0x7c, 0x26, 0xcf, 0x78, 0x79, 0x1d, 0x62, 0x66, 0x8b, 0x15, + 0x27, 0x27, 0xa7, 0xcc, 0x17, 0x80, 0x56, 0x38, 0xf3, 0x05, 0x16, 0x13, 0x56, 0x7b, 0x51, 0x30, + 0x0f, 0xfb, 0x87, 0xe6, 0x03, 0xd6, 0x91, 0x34, 0xa9, 0x1e, 0xaf, 0xfc, 0x08, 0xbb, 0xe3, 0x2e, + 0x0d, 0x01, 0x73, 0x95, 0x2d, 0x2c, 0x8b, 0x68, 0xd4, 0x1c, 0x46, 0xee, 0x79, 0xfc, 0x12, 0xbf, + 0x89, 0x5f, 0x7a, 0x33, 0x6c, 0xae, 0xed, 0x1a, 0x7b, 0x55, 0x47, 0x15, 0x52, 0x7f, 0xf7, 0xc9, + 0xc0, 0xf3, 0x7d, 0x3c, 0x36, 0xd7, 0x77, 0x8d, 0xbd, 0x35, 0x27, 0x6d, 0x23, 0x1b, 0x36, 0x0e, + 0xe2, 0xd8, 0x1d, 0x5d, 0xe0, 0x31, 0x23, 0x12, 0x30, 0x08, 0x8a, 0x8c, 0xee, 0xd2, 0x27, 0x83, + 0xc8, 0xbb, 0x72, 0x63, 0xdc, 0xbd, 0x70, 0x63, 0xb3, 0xce, 0x16, 0x51, 0x85, 0x14, 0x2d, 0x03, + 0x7e, 0x10, 0x33, 0x33, 0x6c, 0x70, 0xb4, 0x92, 0x88, 0xee, 0xd5, 0x27, 0xc7, 0x41, 0xdc, 0xf7, + 0x99, 0xd4, 0x6c, 0xb0, 0x65, 0x14, 0x19, 0x6a, 0x42, 0xe5, 0xe8, 0x8d, 0xd9, 0x64, 0x28, 0x2a, + 0x47, 0x6f, 0xec, 0xbf, 0x1a, 0x80, 0x86, 0x38, 0x96, 0xad, 0x49, 0xb9, 0xff, 0x03, 0xd5, 0xe5, + 0x82, 0x27, 0x28, 0xe1, 0x89, 0x34, 0x58, 0xa5, 0xc6, 0x13, 0x68, 0xf9, 0x41, 0xec, 0x9d, 0x7b, + 0xa3, 0xcc, 0x61, 0x15, 0xee, 0x30, 0x5d, 0xbe, 0x44, 0x7a, 0xe8, 0xc1, 0xc3, 0x1c, 0xb6, 0x52, + 0x14, 0xfe, 0x97, 0x01, 0xad, 0x21, 0x8e, 0x33, 0x66, 0x51, 0x1d, 0xdf, 0x29, 0x8d, 0x73, 0x56, + 0xa9, 0x2d, 0x67, 0x95, 0x95, 0xbc, 0x55, 0x8e, 0x60, 0x4b, 0xd3, 0xa5, 0x94, 0x4d, 0x7e, 0x63, + 0x00, 0xea, 0xe5, 0x3d, 0x9f, 0xd7, 0xd9, 0x28, 0xd4, 0x59, 0xb3, 0x5e, 0x25, 0x6f, 0xbd, 0xdb, + 0xfd, 0xfb, 0x05, 0x3c, 0xec, 0xdd, 0x87, 0x7f, 0x73, 0x74, 0xad, 0x2c, 0x47, 0x57, 0xfb, 0x77, + 0x46, 0x0e, 0x01, 0x59, 0x8e, 0x1a, 0xb4, 0xe6, 0x50, 0x0c, 0x42, 0x44, 0xad, 0xa2, 0x8b, 0x97, + 0x30, 0xc3, 0x6f, 0x0d, 0xd8, 0xce, 0xa3, 0x28, 0x65, 0x88, 0x1f, 0x42, 0x43, 0x59, 0x46, 0x94, + 0x17, 0x45, 0x96, 0x50, 0x07, 0xda, 0xbf, 0x82, 0x47, 0xbc, 0x7a, 0x2b, 0x61, 0x0c, 0x4d, 0xc5, + 0x4a, 0x5e, 0xc5, 0x3f, 0x18, 0xb0, 0x53, 0xb8, 0xfc, 0x3b, 0xd6, 0xf2, 0x9f, 0x06, 0x98, 0x1d, + 0x37, 0x1e, 0x5d, 0x0c, 0x0b, 0xbc, 0x9e, 0x5b, 0xd6, 0x58, 0x72, 0xd9, 0x25, 0x82, 0xa1, 0x28, + 0x05, 0x54, 0x97, 0x4b, 0x01, 0xb5, 0xa2, 0xc0, 0x79, 0x7f, 0x81, 0x16, 0xa5, 0xec, 0x69, 0xc2, + 0xea, 0x70, 0x3e, 0x1a, 0x61, 0x92, 0x90, 0x38, 0x69, 0xd2, 0x43, 0x95, 0x5f, 0x1c, 0x58, 0x51, + 0xb5, 0xee, 0x88, 0x96, 0xdd, 0x87, 0x86, 0x83, 0x89, 0x37, 0xf1, 0xa9, 0x7a, 0xd4, 0x76, 0xc9, + 0xe9, 0x3b, 0x4e, 0xea, 0x4e, 0xde, 0x5a, 0x82, 0x1a, 0x1d, 0x68, 0xca, 0x4b, 0x95, 0xca, 0x65, + 0x3f, 0x4d, 0xeb, 0xd6, 0xce, 0x75, 0x7f, 0x7c, 0x37, 0x3c, 0x5f, 0x1a, 0x50, 0xa3, 0x83, 0xe9, + 0x71, 0x3a, 0x88, 0x82, 0x73, 0x6f, 0x8a, 0x07, 0x17, 0x41, 0x1c, 0x88, 0x85, 0x14, 0x19, 0x3d, + 0xfa, 0x8f, 0xbd, 0xd1, 0xa5, 0xef, 0xce, 0x70, 0x52, 0xea, 0x25, 0x6d, 0x09, 0x42, 0x55, 0x81, + 0xf0, 0x18, 0xa0, 0x1b, 0x61, 0x37, 0xc6, 0xac, 0xa2, 0xe0, 0xde, 0x95, 0x24, 0xd4, 0x1b, 0x7d, + 0xd2, 0x99, 0x06, 0xa3, 0x4b, 0x96, 0xfd, 0xd7, 0x9c, 0xa4, 0x69, 0x8f, 0xd2, 0x6a, 0x99, 0xab, + 0x59, 0xf2, 0x82, 0xc5, 0x2e, 0xde, 0x22, 0x47, 0x02, 0x1f, 0xcb, 0x6c, 0xcf, 0xe4, 0xf6, 0x9f, + 0x0d, 0xd8, 0x12, 0xbb, 0x90, 0xce, 0xf5, 0xb1, 0x3b, 0xc3, 0xe2, 0x6a, 0x48, 0x25, 0xb4, 0x99, + 0x5c, 0x0d, 0x93, 0x36, 0x3a, 0x04, 0x18, 0xb8, 0x13, 0xcf, 0x97, 0x73, 0xef, 0x07, 0x05, 0xa5, + 0xb2, 0x83, 0x3f, 0x9f, 0x63, 0x12, 0x67, 0x63, 0x1d, 0x69, 0xde, 0x12, 0x79, 0xf2, 0x2f, 0xfc, + 0xc4, 0x52, 0x90, 0x91, 0x10, 0xed, 0xc2, 0x0a, 0x05, 0x9e, 0x84, 0xab, 0xac, 0x11, 0xef, 0x40, + 0x47, 0x05, 0x00, 0xbf, 0x5d, 0x08, 0x90, 0x84, 0x81, 0x4f, 0xf0, 0x02, 0x84, 0x89, 0x0d, 0xe6, + 0x33, 0x22, 0x62, 0x37, 0x6d, 0xdb, 0x7f, 0x37, 0x60, 0xe3, 0x60, 0x1a, 0xf3, 0x78, 0xbf, 0x13, + 0x01, 0xe9, 0x88, 0xc1, 0x45, 0xe0, 0xe3, 0xe3, 0xf9, 0xec, 0x0c, 0x47, 0x6c, 0xa7, 0xaa, 0x23, + 0x8b, 0x14, 0xd6, 0xd5, 0x34, 0xd6, 0x6d, 0xc3, 0xca, 0xd1, 0xcc, 0xf5, 0xa6, 0xa2, 0x72, 0xe0, + 0x0d, 0xe9, 0x4a, 0x32, 0x16, 0x55, 0x70, 0xda, 0xb6, 0x0f, 0xa0, 0x21, 0x21, 0x2f, 0xc3, 0x29, + 0xfb, 0x4f, 0x06, 0xd4, 0x13, 0xcf, 0x24, 0x47, 0x86, 0xa4, 0xa4, 0x91, 0x57, 0xf2, 0x7e, 0x38, + 0x23, 0xb3, 0xb2, 0xaa, 0xb2, 0xd2, 0xfe, 0x87, 0x01, 0x1b, 0x19, 0xa6, 0x3b, 0x86, 0x4a, 0xb5, + 0x28, 0x54, 0x34, 0x5e, 0x55, 0xef, 0x83, 0x57, 0x35, 0x8d, 0x57, 0x5f, 0x1a, 0x00, 0x07, 0xe3, + 0x71, 0xc2, 0xaa, 0xdb, 0x0d, 0xab, 0xb1, 0x47, 0xf0, 0x4b, 0x66, 0xcf, 0xa2, 0xbc, 0x84, 0xa0, + 0x26, 0x31, 0x8a, 0xfd, 0x56, 0x78, 0xb3, 0xa2, 0xf1, 0xe6, 0x53, 0xa8, 0xa7, 0xc8, 0x4a, 0xb1, + 0xe6, 0x8f, 0x06, 0x6c, 0xb0, 0xc4, 0x76, 0x5b, 0xcc, 0x7c, 0x08, 0xcd, 0x23, 0x7f, 0x7c, 0xe8, + 0x11, 0xf7, 0x6c, 0xca, 0xb3, 0xa6, 0xa8, 0xc3, 0x55, 0xe9, 0xed, 0x29, 0x44, 0xd1, 0xa7, 0x96, + 0x8f, 0x03, 0x09, 0x4d, 0x29, 0x8d, 0xce, 0xa1, 0xf9, 0xca, 0x5f, 0x4a, 0xa5, 0xdb, 0xd3, 0x80, + 0x0c, 0xb5, 0xaa, 0x41, 0xed, 0xc2, 0xa6, 0xb2, 0x4f, 0x29, 0xb0, 0x7f, 0x33, 0xd8, 0x83, 0x5d, + 0xba, 0x0c, 0x8b, 0x5c, 0x35, 0x2e, 0x8d, 0xfb, 0xc9, 0xe5, 0x05, 0xda, 0xd9, 0x92, 0xeb, 0x8f, + 0xe7, 0x33, 0x91, 0x4f, 0x15, 0x99, 0xfd, 0x05, 0xac, 0xa7, 0x6d, 0x1a, 0x8b, 0xf4, 0xbf, 0x80, + 0xa4, 0xc4, 0x22, 0xeb, 0x7f, 0x02, 0xad, 0x0e, 0x9e, 0x78, 0x7e, 0x9e, 0x25, 0x39, 0x79, 0x01, + 0x9f, 0xaa, 0x45, 0x7c, 0xb2, 0xff, 0xc3, 0x8f, 0x42, 0xd9, 0x42, 0xa5, 0xf2, 0xc8, 0x3e, 0x40, + 0xb6, 0x86, 0xc8, 0x26, 0x9b, 0x7c, 0x46, 0xe6, 0x44, 0x69, 0xc8, 0xbb, 0x48, 0x2c, 0x03, 0x76, + 0xf3, 0x49, 0xf7, 0x4c, 0xea, 0xa6, 0x1d, 0x58, 0xa5, 0xcd, 0x53, 0xef, 0xed, 0x0b, 0xa7, 0x23, + 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, 0x8e, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, + 0xec, 0x73, 0x68, 0x64, 0x0f, 0xe1, 0x77, 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe4, 0xc7, 0xfe, 0x72, + 0x8e, 0x7d, 0xfa, 0xbf, 0x3a, 0x3f, 0x21, 0xd0, 0x27, 0xe9, 0xf9, 0xc7, 0x5e, 0x74, 0xb6, 0xf9, + 0x2c, 0xf5, 0x2d, 0xd5, 0x7a, 0xaf, 0x40, 0x4a, 0x42, 0xd4, 0x85, 0xa6, 0xfa, 0x4e, 0x87, 0x76, + 0x04, 0xbb, 0xf5, 0x27, 0x49, 0xcb, 0x2c, 0xee, 0x20, 0x21, 0x05, 0x20, 0x7d, 0x3e, 0x48, 0x00, + 0xa8, 0x5f, 0x33, 0x12, 0x00, 0xfa, 0x77, 0x86, 0x1f, 0xb3, 0x83, 0x32, 0x7d, 0xb8, 0x47, 0x19, + 0x4e, 0xf9, 0xeb, 0x80, 0xf5, 0xa8, 0x48, 0xcc, 0xa7, 0xcb, 0xef, 0xd6, 0xc9, 0x74, 0xed, 0x95, + 0x3e, 0x99, 0x9e, 0x7b, 0x40, 0x7f, 0xce, 0x8a, 0x5a, 0xe5, 0x15, 0xc9, 0x4c, 0x77, 0xd2, 0x5e, + 0x27, 0xac, 0xf7, 0x17, 0xf4, 0x90, 0x10, 0x39, 0x8c, 0xd0, 0xfa, 0x0d, 0x13, 0x7d, 0x5d, 0x46, + 0xad, 0x5f, 0xf9, 0xac, 0x6f, 0xdc, 0xd0, 0x4b, 0x42, 0xd4, 0x67, 0x19, 0x52, 0x5d, 0xb0, 0x18, + 0x02, 0x5b, 0xcd, 0x5a, 0xd4, 0x45, 0x42, 0xf4, 0x0b, 0x78, 0xaf, 0xf0, 0xca, 0x86, 0x1e, 0x8b, + 0x58, 0x58, 0x70, 0x2b, 0xb5, 0xbe, 0x79, 0x63, 0x3f, 0x37, 0xe0, 0xb0, 0xd8, 0x80, 0xc3, 0x85, + 0x06, 0x2c, 0x7a, 0x56, 0xfb, 0x0c, 0x1a, 0xca, 0xbb, 0x12, 0x7a, 0x94, 0x8e, 0x55, 0x1e, 0xce, + 0xac, 0x9d, 0x42, 0x39, 0x27, 0xa1, 0x74, 0x3f, 0xd1, 0xa2, 0x40, 0x64, 0x18, 0x2d, 0x0a, 0xd2, + 0x2c, 0xd1, 0x4d, 0xaf, 0x70, 0xa2, 0xb6, 0x4f, 0xa2, 0x20, 0x77, 0x17, 0xb1, 0xcc, 0xe2, 0x0e, + 0x12, 0xa2, 0x67, 0xec, 0xd3, 0x8a, 0xb8, 0x4b, 0xa2, 0x87, 0x7c, 0x9c, 0x72, 0x51, 0xb5, 0xb6, + 0xf3, 0x42, 0x12, 0xa2, 0xef, 0xc3, 0x7a, 0x5a, 0x03, 0x23, 0x71, 0xe1, 0x97, 0xcb, 0x79, 0xeb, + 0x61, 0x4e, 0x46, 0x42, 0xf4, 0x3d, 0x58, 0x4b, 0x40, 0xa0, 0x2d, 0x15, 0x14, 0x9d, 0x83, 0x74, + 0x11, 0x09, 0x51, 0x1b, 0x56, 0x45, 0xd1, 0x84, 0x44, 0x6a, 0xc9, 0xaa, 0x3b, 0x6b, 0x4b, 0x93, + 0x70, 0x60, 0xd9, 0x19, 0x88, 0xf4, 0xb4, 0x99, 0x01, 0x53, 0x8b, 0x81, 0x4f, 0xa0, 0x2e, 0xd5, + 0x07, 0x89, 0x23, 0xd4, 0xd2, 0x24, 0x71, 0x84, 0x5e, 0x48, 0x7c, 0x06, 0x0d, 0xe5, 0xcc, 0x43, + 0x59, 0xdc, 0x2b, 0xa5, 0x82, 0xb5, 0x53, 0x28, 0x4f, 0xa3, 0x46, 0x39, 0x08, 0xa4, 0xa8, 0xd1, + 0x8f, 0x1c, 0x29, 0x6a, 0xf2, 0x67, 0xc7, 0x33, 0x80, 0x2c, 0x5b, 0x25, 0x0e, 0x55, 0x8e, 0x07, + 0x6b, 0x3b, 0x2f, 0x64, 0x74, 0xda, 0x96, 0xf2, 0xec, 0xf3, 0x28, 0x98, 0x75, 0xdd, 0xd1, 0x05, + 0x7e, 0xab, 0xcc, 0xdc, 0x69, 0xfc, 0xb2, 0xde, 0x66, 0x5f, 0xac, 0x7f, 0x44, 0xff, 0x9c, 0x3d, + 0x60, 0xdf, 0x5d, 0x3e, 0xfe, 0x2a, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xf3, 0x37, 0xab, 0xca, 0x1e, + 0x00, 0x00, } diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 3fbfd0162..f28a1673e 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -1,5 +1,6 @@ syntax = "proto3"; import "Open_IM/pkg/proto/sdk_ws/ws.proto"; +import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; option go_package = "./user;user"; package user; @@ -62,6 +63,7 @@ message UpdateUserInfoReq{ server_api_params.UserInfo UserInfo = 1; string OpUserID = 2; string operationID = 3; + google.protobuf.Int32Value globalRecvMsgOpt = 4; } message UpdateUserInfoResp{ CommonResp commonResp = 1; From 41833712f0a1f88a20fbce271f61bf4f2407a1e0 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 11:45:52 +0800 Subject: [PATCH 567/752] has read default->true --- config/config.yaml | 4 ++-- go.sum | 60 ++++++++++++++++------------------------------ 2 files changed, 23 insertions(+), 41 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 2f78bd49d..a3e836a15 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -231,9 +231,9 @@ reliablestorage: false #消息缓存时间 msgCacheTimeout: 1800 #群聊已读开启 -groupMessageHasReadReceiptEnable: false +groupMessageHasReadReceiptEnable: true #单聊已读开启 -singleMessageHasReadReceiptEnable: false +singleMessageHasReadReceiptEnable: true #token config tokenpolicy: diff --git a/go.sum b/go.sum index 1d74a3093..ac8ee760f 100644 --- a/go.sum +++ b/go.sum @@ -3,10 +3,10 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/Shopify/sarama v1.32.0 h1:P+RUjEaRU0GMMbYexGMDyrMkLhbbBVUVISDywi+IlFU= -github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= -github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= -github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= +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= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -46,7 +46,6 @@ github.com/antonfisher/nested-logrus-formatter v1.3.0/go.mod h1:6WTfyWFkBc9+zyBa github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= 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= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= @@ -71,7 +70,6 @@ github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmf github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -102,15 +100,11 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM= -github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc= -github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -165,8 +159,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -175,9 +169,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -185,7 +178,6 @@ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= @@ -236,10 +228,10 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= 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.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +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/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4= -github.com/klauspost/compress v1.14.4/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= @@ -247,9 +239,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -272,7 +263,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -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= @@ -314,8 +304,8 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= -github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= +github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -325,33 +315,25 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= 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/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 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= @@ -384,14 +366,14 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/scram v1.1.0 h1:d70R37I0HrDLsafRrMBXyrD4lmQbCHE873t00Vr0gm0= -github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg/scram v1.0.3/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -424,8 +406,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -459,9 +441,10 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -579,7 +562,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 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/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= From 1b1f4464eeedf8bf53b4daf980f9de2efa3661c5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 11:53:43 +0800 Subject: [PATCH 568/752] GlobalRecvMsgOpt --- go.sum | 12 ++ pkg/proto/user/user.pb.go | 370 +++++++++++++++++--------------------- pkg/proto/user/user.proto | 4 - 3 files changed, 180 insertions(+), 206 deletions(-) diff --git a/go.sum b/go.sum index 1d74a3093..da2ea714b 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,11 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= +github.com/Shopify/sarama v1.29.0/go.mod h1:2QpgD79wpdAESqNQMxNc0KYMkycd4slxGdV3TWSVqrU= github.com/Shopify/sarama v1.32.0 h1:P+RUjEaRU0GMMbYexGMDyrMkLhbbBVUVISDywi+IlFU= github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -102,6 +105,7 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns= github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -165,6 +169,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -236,6 +241,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= 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.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4= @@ -314,6 +320,7 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -392,6 +399,8 @@ github.com/xdg-go/scram v1.1.0 h1:d70R37I0HrDLsafRrMBXyrD4lmQbCHE873t00Vr0gm0= github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg/scram v1.0.3/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -424,6 +433,7 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -459,7 +469,9 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index b6ae8daf0..ec740001b 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -37,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{0} + return fileDescriptor_user_94f030505f068262, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -84,7 +84,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{1} + return fileDescriptor_user_94f030505f068262, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{2} + return fileDescriptor_user_94f030505f068262, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{3} + return fileDescriptor_user_94f030505f068262, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -229,7 +229,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{4} + return fileDescriptor_user_94f030505f068262, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -276,7 +276,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{5} + return fileDescriptor_user_94f030505f068262, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{6} + return fileDescriptor_user_94f030505f068262, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{6, 0} + return fileDescriptor_user_94f030505f068262, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -422,7 +422,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{7} + return fileDescriptor_user_94f030505f068262, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -475,7 +475,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{8} + return fileDescriptor_user_94f030505f068262, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -523,7 +523,7 @@ func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{9} + return fileDescriptor_user_94f030505f068262, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -582,7 +582,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{10} + return fileDescriptor_user_94f030505f068262, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -633,7 +633,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{11} + return fileDescriptor_user_94f030505f068262, []int{11} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -764,7 +764,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{12} + return fileDescriptor_user_94f030505f068262, []int{12} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -816,7 +816,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{13} + return fileDescriptor_user_94f030505f068262, []int{13} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -858,7 +858,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{14} + return fileDescriptor_user_94f030505f068262, []int{14} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -924,7 +924,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{15} + return fileDescriptor_user_94f030505f068262, []int{15} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -964,7 +964,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{16} + return fileDescriptor_user_94f030505f068262, []int{16} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1017,7 +1017,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{17} + return fileDescriptor_user_94f030505f068262, []int{17} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1064,7 +1064,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{18} + return fileDescriptor_user_94f030505f068262, []int{18} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1117,7 +1117,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{19} + return fileDescriptor_user_94f030505f068262, []int{19} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1163,7 +1163,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{20} + return fileDescriptor_user_94f030505f068262, []int{20} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1209,7 +1209,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{21} + return fileDescriptor_user_94f030505f068262, []int{21} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1257,7 +1257,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{22} + return fileDescriptor_user_94f030505f068262, []int{22} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1318,7 +1318,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{23} + return fileDescriptor_user_94f030505f068262, []int{23} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1371,7 +1371,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{24} + return fileDescriptor_user_94f030505f068262, []int{24} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1416,7 +1416,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{25} + return fileDescriptor_user_94f030505f068262, []int{25} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1455,7 +1455,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{26} + return fileDescriptor_user_94f030505f068262, []int{26} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1504,7 +1504,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{27} + return fileDescriptor_user_94f030505f068262, []int{27} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1571,7 +1571,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{28} + return fileDescriptor_user_94f030505f068262, []int{28} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1618,7 +1618,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{29} + return fileDescriptor_user_94f030505f068262, []int{29} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1672,7 +1672,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{30} + return fileDescriptor_user_94f030505f068262, []int{30} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1729,7 +1729,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{31} + return fileDescriptor_user_94f030505f068262, []int{31} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1802,7 +1802,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{32} + return fileDescriptor_user_94f030505f068262, []int{32} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1842,7 +1842,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{33} + return fileDescriptor_user_94f030505f068262, []int{33} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1897,7 +1897,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{34} + return fileDescriptor_user_94f030505f068262, []int{34} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -1960,7 +1960,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{35} + return fileDescriptor_user_94f030505f068262, []int{35} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2026,7 +2026,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{36} + return fileDescriptor_user_94f030505f068262, []int{36} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2067,7 +2067,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{37} + return fileDescriptor_user_94f030505f068262, []int{37} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2126,7 +2126,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{38} + return fileDescriptor_user_94f030505f068262, []int{38} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2166,7 +2166,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{39} + return fileDescriptor_user_94f030505f068262, []int{39} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2218,7 +2218,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{40} + return fileDescriptor_user_94f030505f068262, []int{40} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2258,7 +2258,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{41} + return fileDescriptor_user_94f030505f068262, []int{41} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2312,7 +2312,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{42} + return fileDescriptor_user_94f030505f068262, []int{42} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2367,7 +2367,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{43} + return fileDescriptor_user_94f030505f068262, []int{43} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2427,7 +2427,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{44} + return fileDescriptor_user_94f030505f068262, []int{44} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2472,7 +2472,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{45} + return fileDescriptor_user_94f030505f068262, []int{45} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2512,7 +2512,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{46} + return fileDescriptor_user_94f030505f068262, []int{46} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2564,7 +2564,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{47} + return fileDescriptor_user_94f030505f068262, []int{47} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -2676,7 +2676,6 @@ type UserClient interface { GetBlockUsers(ctx context.Context, in *GetBlockUsersReq, opts ...grpc.CallOption) (*GetBlockUsersResp, error) GetBlockUserById(ctx context.Context, in *GetBlockUserByIdReq, opts ...grpc.CallOption) (*GetBlockUserByIdResp, error) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ...grpc.CallOption) (*DeleteUserResp, error) - GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) } type userClient struct { @@ -2885,15 +2884,6 @@ func (c *userClient) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ... return out, nil } -func (c *userClient) GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) { - out := new(GetUserInfoResp) - err := grpc.Invoke(ctx, "/user.user/GetUserInfoFromCache", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // Server API for User service type UserServer interface { @@ -2919,7 +2909,6 @@ type UserServer interface { GetBlockUsers(context.Context, *GetBlockUsersReq) (*GetBlockUsersResp, error) GetBlockUserById(context.Context, *GetBlockUserByIdReq) (*GetBlockUserByIdResp, error) DeleteUser(context.Context, *DeleteUserReq) (*DeleteUserResp, error) - GetUserInfoFromCache(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) } func RegisterUserServer(s *grpc.Server, srv UserServer) { @@ -3322,24 +3311,6 @@ func _User_DeleteUser_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } -func _User_GetUserInfoFromCache_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetUserInfoReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UserServer).GetUserInfoFromCache(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/user.user/GetUserInfoFromCache", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UserServer).GetUserInfoFromCache(ctx, req.(*GetUserInfoReq)) - } - return interceptor(ctx, in, info, handler) -} - var _User_serviceDesc = grpc.ServiceDesc{ ServiceName: "user.user", HandlerType: (*UserServer)(nil), @@ -3432,138 +3403,133 @@ var _User_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteUser", Handler: _User_DeleteUser_Handler, }, - { - MethodName: "GetUserInfoFromCache", - Handler: _User_GetUserInfoFromCache_Handler, - }, }, Streams: []grpc.StreamDesc{}, Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_1b2c9183e940b6c0) } +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_94f030505f068262) } -var fileDescriptor_user_1b2c9183e940b6c0 = []byte{ - // 1922 bytes of a gzipped FileDescriptorProto +var fileDescriptor_user_94f030505f068262 = []byte{ + // 1906 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, 0x15, 0x57, 0xdb, 0xce, 0x24, 0x79, 0x8e, 0x1d, 0xa7, 0x26, 0x3b, 0xe9, 0x6d, 0x60, 0x08, 0xad, 0x65, 0x37, 0x1a, 0x09, 0x07, 0x66, 0x11, 0x83, 0x16, 0xc1, 0x6e, 0xec, 0x64, 0x2c, 0x23, 0x26, - 0xb1, 0xda, 0x33, 0x08, 0x21, 0xa4, 0xa8, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0x76, - 0x66, 0xc2, 0x65, 0x11, 0x1f, 0x37, 0x2e, 0x9c, 0x58, 0x38, 0xf0, 0x77, 0x70, 0x87, 0x13, 0x57, - 0x4e, 0x20, 0x24, 0xfe, 0x95, 0x55, 0x7d, 0x74, 0x77, 0x55, 0x75, 0x3b, 0xf1, 0x74, 0xa2, 0xb9, - 0x24, 0xae, 0x57, 0x5f, 0xbf, 0xf7, 0xde, 0xef, 0xbd, 0x7a, 0x55, 0x0d, 0x9b, 0x73, 0x82, 0xa3, - 0x7d, 0xfa, 0xa7, 0x1d, 0x46, 0x41, 0x1c, 0xa0, 0x1a, 0xfd, 0x6d, 0x7d, 0xeb, 0x24, 0xc4, 0xfe, - 0x69, 0xff, 0xc5, 0x7e, 0x78, 0x39, 0xd9, 0x67, 0x1d, 0xfb, 0x64, 0x7c, 0x79, 0xfa, 0x9a, 0xec, - 0xbf, 0x26, 0x7c, 0xa0, 0xf5, 0xd1, 0xe2, 0x21, 0x91, 0x1b, 0x86, 0x38, 0x12, 0x03, 0xed, 0x9f, - 0x00, 0x74, 0x83, 0xd9, 0x2c, 0xf0, 0x1d, 0x4c, 0x42, 0x64, 0xc2, 0x2a, 0x8e, 0xa2, 0x6e, 0x30, - 0xc6, 0xa6, 0xb1, 0x6b, 0xec, 0xad, 0x38, 0x49, 0x13, 0x3d, 0x82, 0x07, 0x38, 0x8a, 0x5e, 0x90, - 0x89, 0x59, 0xd9, 0x35, 0xf6, 0xd6, 0x1d, 0xd1, 0xb2, 0x7f, 0x0d, 0xcd, 0x43, 0x3c, 0xc5, 0x31, - 0x7e, 0x45, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x02, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, - 0x62, 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, - 0x95, 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, - 0xb3, 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, - 0x0e, 0xf5, 0xa7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x40, 0xeb, 0xb9, 0xeb, - 0x4d, 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, - 0x54, 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, - 0x70, 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x8f, 0x01, 0x72, 0xe0, 0x25, 0x89, - 0x7d, 0x0d, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x05, 0x1e, 0x5d, 0x52, 0xd8, 0x7b, - 0xb0, 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xec, 0xa2, 0x6a, - 0xde, 0x45, 0xff, 0x37, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, - 0x00, 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xf4, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, - 0xf4, 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, - 0xbd, 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, - 0x50, 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0xcf, 0x03, 0x6a, 0xdb, 0xc7, - 0x00, 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x8e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, - 0xa0, 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x0a, - 0x47, 0xa7, 0x6e, 0xe8, 0x9d, 0x86, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, - 0xdb, 0x80, 0xad, 0x57, 0xe1, 0xd8, 0x15, 0xe1, 0x2c, 0x54, 0x7f, 0x06, 0x6b, 0x49, 0x53, 0xc0, - 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x6d, 0x36, 0x09, 0xf2, 0x36, 0x91, 0x44, 0xa8, 0x07, 0xad, 0xc9, - 0x34, 0x38, 0x73, 0xa7, 0x0e, 0x1e, 0x5d, 0xbd, 0x20, 0x93, 0x93, 0x30, 0x66, 0xf9, 0x82, 0x6e, - 0x3f, 0x09, 0x82, 0xc9, 0x14, 0xf3, 0x6c, 0x77, 0x36, 0x3f, 0x6f, 0xf7, 0xfd, 0xf8, 0xe3, 0xa7, - 0x3f, 0x77, 0xa7, 0x73, 0xec, 0xe4, 0x26, 0xd9, 0xcf, 0x01, 0xe9, 0x4a, 0x95, 0x31, 0xaf, 0xfd, - 0xdf, 0x2a, 0x6c, 0x74, 0x03, 0xff, 0x0a, 0x47, 0x84, 0x61, 0x64, 0x7e, 0x7d, 0xed, 0xe3, 0x48, - 0xc9, 0x14, 0xb2, 0x08, 0x7d, 0x08, 0x4d, 0x79, 0x46, 0x6a, 0x07, 0x4d, 0x4a, 0xd9, 0x25, 0x69, - 0x59, 0x65, 0x59, 0x5a, 0x92, 0xd0, 0x7c, 0x26, 0xcf, 0x78, 0x79, 0x1d, 0x62, 0x66, 0x8b, 0x15, - 0x27, 0x27, 0xa7, 0xcc, 0x17, 0x80, 0x56, 0x38, 0xf3, 0x05, 0x16, 0x13, 0x56, 0x7b, 0x51, 0x30, - 0x0f, 0xfb, 0x87, 0xe6, 0x03, 0xd6, 0x91, 0x34, 0xa9, 0x1e, 0xaf, 0xfc, 0x08, 0xbb, 0xe3, 0x2e, - 0x0d, 0x01, 0x73, 0x95, 0x2d, 0x2c, 0x8b, 0x68, 0xd4, 0x1c, 0x46, 0xee, 0x79, 0xfc, 0x12, 0xbf, - 0x89, 0x5f, 0x7a, 0x33, 0x6c, 0xae, 0xed, 0x1a, 0x7b, 0x55, 0x47, 0x15, 0x52, 0x7f, 0xf7, 0xc9, - 0xc0, 0xf3, 0x7d, 0x3c, 0x36, 0xd7, 0x77, 0x8d, 0xbd, 0x35, 0x27, 0x6d, 0x23, 0x1b, 0x36, 0x0e, - 0xe2, 0xd8, 0x1d, 0x5d, 0xe0, 0x31, 0x23, 0x12, 0x30, 0x08, 0x8a, 0x8c, 0xee, 0xd2, 0x27, 0x83, - 0xc8, 0xbb, 0x72, 0x63, 0xdc, 0xbd, 0x70, 0x63, 0xb3, 0xce, 0x16, 0x51, 0x85, 0x14, 0x2d, 0x03, - 0x7e, 0x10, 0x33, 0x33, 0x6c, 0x70, 0xb4, 0x92, 0x88, 0xee, 0xd5, 0x27, 0xc7, 0x41, 0xdc, 0xf7, - 0x99, 0xd4, 0x6c, 0xb0, 0x65, 0x14, 0x19, 0x6a, 0x42, 0xe5, 0xe8, 0x8d, 0xd9, 0x64, 0x28, 0x2a, - 0x47, 0x6f, 0xec, 0xbf, 0x1a, 0x80, 0x86, 0x38, 0x96, 0xad, 0x49, 0xb9, 0xff, 0x03, 0xd5, 0xe5, - 0x82, 0x27, 0x28, 0xe1, 0x89, 0x34, 0x58, 0xa5, 0xc6, 0x13, 0x68, 0xf9, 0x41, 0xec, 0x9d, 0x7b, - 0xa3, 0xcc, 0x61, 0x15, 0xee, 0x30, 0x5d, 0xbe, 0x44, 0x7a, 0xe8, 0xc1, 0xc3, 0x1c, 0xb6, 0x52, - 0x14, 0xfe, 0x97, 0x01, 0xad, 0x21, 0x8e, 0x33, 0x66, 0x51, 0x1d, 0xdf, 0x29, 0x8d, 0x73, 0x56, - 0xa9, 0x2d, 0x67, 0x95, 0x95, 0xbc, 0x55, 0x8e, 0x60, 0x4b, 0xd3, 0xa5, 0x94, 0x4d, 0x7e, 0x63, - 0x00, 0xea, 0xe5, 0x3d, 0x9f, 0xd7, 0xd9, 0x28, 0xd4, 0x59, 0xb3, 0x5e, 0x25, 0x6f, 0xbd, 0xdb, - 0xfd, 0xfb, 0x05, 0x3c, 0xec, 0xdd, 0x87, 0x7f, 0x73, 0x74, 0xad, 0x2c, 0x47, 0x57, 0xfb, 0x77, - 0x46, 0x0e, 0x01, 0x59, 0x8e, 0x1a, 0xb4, 0xe6, 0x50, 0x0c, 0x42, 0x44, 0xad, 0xa2, 0x8b, 0x97, - 0x30, 0xc3, 0x6f, 0x0d, 0xd8, 0xce, 0xa3, 0x28, 0x65, 0x88, 0x1f, 0x42, 0x43, 0x59, 0x46, 0x94, - 0x17, 0x45, 0x96, 0x50, 0x07, 0xda, 0xbf, 0x82, 0x47, 0xbc, 0x7a, 0x2b, 0x61, 0x0c, 0x4d, 0xc5, - 0x4a, 0x5e, 0xc5, 0x3f, 0x18, 0xb0, 0x53, 0xb8, 0xfc, 0x3b, 0xd6, 0xf2, 0x9f, 0x06, 0x98, 0x1d, - 0x37, 0x1e, 0x5d, 0x0c, 0x0b, 0xbc, 0x9e, 0x5b, 0xd6, 0x58, 0x72, 0xd9, 0x25, 0x82, 0xa1, 0x28, - 0x05, 0x54, 0x97, 0x4b, 0x01, 0xb5, 0xa2, 0xc0, 0x79, 0x7f, 0x81, 0x16, 0xa5, 0xec, 0x69, 0xc2, - 0xea, 0x70, 0x3e, 0x1a, 0x61, 0x92, 0x90, 0x38, 0x69, 0xd2, 0x43, 0x95, 0x5f, 0x1c, 0x58, 0x51, - 0xb5, 0xee, 0x88, 0x96, 0xdd, 0x87, 0x86, 0x83, 0x89, 0x37, 0xf1, 0xa9, 0x7a, 0xd4, 0x76, 0xc9, - 0xe9, 0x3b, 0x4e, 0xea, 0x4e, 0xde, 0x5a, 0x82, 0x1a, 0x1d, 0x68, 0xca, 0x4b, 0x95, 0xca, 0x65, - 0x3f, 0x4d, 0xeb, 0xd6, 0xce, 0x75, 0x7f, 0x7c, 0x37, 0x3c, 0x5f, 0x1a, 0x50, 0xa3, 0x83, 0xe9, - 0x71, 0x3a, 0x88, 0x82, 0x73, 0x6f, 0x8a, 0x07, 0x17, 0x41, 0x1c, 0x88, 0x85, 0x14, 0x19, 0x3d, - 0xfa, 0x8f, 0xbd, 0xd1, 0xa5, 0xef, 0xce, 0x70, 0x52, 0xea, 0x25, 0x6d, 0x09, 0x42, 0x55, 0x81, - 0xf0, 0x18, 0xa0, 0x1b, 0x61, 0x37, 0xc6, 0xac, 0xa2, 0xe0, 0xde, 0x95, 0x24, 0xd4, 0x1b, 0x7d, - 0xd2, 0x99, 0x06, 0xa3, 0x4b, 0x96, 0xfd, 0xd7, 0x9c, 0xa4, 0x69, 0x8f, 0xd2, 0x6a, 0x99, 0xab, - 0x59, 0xf2, 0x82, 0xc5, 0x2e, 0xde, 0x22, 0x47, 0x02, 0x1f, 0xcb, 0x6c, 0xcf, 0xe4, 0xf6, 0x9f, - 0x0d, 0xd8, 0x12, 0xbb, 0x90, 0xce, 0xf5, 0xb1, 0x3b, 0xc3, 0xe2, 0x6a, 0x48, 0x25, 0xb4, 0x99, - 0x5c, 0x0d, 0x93, 0x36, 0x3a, 0x04, 0x18, 0xb8, 0x13, 0xcf, 0x97, 0x73, 0xef, 0x07, 0x05, 0xa5, - 0xb2, 0x83, 0x3f, 0x9f, 0x63, 0x12, 0x67, 0x63, 0x1d, 0x69, 0xde, 0x12, 0x79, 0xf2, 0x2f, 0xfc, - 0xc4, 0x52, 0x90, 0x91, 0x10, 0xed, 0xc2, 0x0a, 0x05, 0x9e, 0x84, 0xab, 0xac, 0x11, 0xef, 0x40, - 0x47, 0x05, 0x00, 0xbf, 0x5d, 0x08, 0x90, 0x84, 0x81, 0x4f, 0xf0, 0x02, 0x84, 0x89, 0x0d, 0xe6, - 0x33, 0x22, 0x62, 0x37, 0x6d, 0xdb, 0x7f, 0x37, 0x60, 0xe3, 0x60, 0x1a, 0xf3, 0x78, 0xbf, 0x13, - 0x01, 0xe9, 0x88, 0xc1, 0x45, 0xe0, 0xe3, 0xe3, 0xf9, 0xec, 0x0c, 0x47, 0x6c, 0xa7, 0xaa, 0x23, - 0x8b, 0x14, 0xd6, 0xd5, 0x34, 0xd6, 0x6d, 0xc3, 0xca, 0xd1, 0xcc, 0xf5, 0xa6, 0xa2, 0x72, 0xe0, - 0x0d, 0xe9, 0x4a, 0x32, 0x16, 0x55, 0x70, 0xda, 0xb6, 0x0f, 0xa0, 0x21, 0x21, 0x2f, 0xc3, 0x29, - 0xfb, 0x4f, 0x06, 0xd4, 0x13, 0xcf, 0x24, 0x47, 0x86, 0xa4, 0xa4, 0x91, 0x57, 0xf2, 0x7e, 0x38, - 0x23, 0xb3, 0xb2, 0xaa, 0xb2, 0xd2, 0xfe, 0x87, 0x01, 0x1b, 0x19, 0xa6, 0x3b, 0x86, 0x4a, 0xb5, - 0x28, 0x54, 0x34, 0x5e, 0x55, 0xef, 0x83, 0x57, 0x35, 0x8d, 0x57, 0x5f, 0x1a, 0x00, 0x07, 0xe3, - 0x71, 0xc2, 0xaa, 0xdb, 0x0d, 0xab, 0xb1, 0x47, 0xf0, 0x4b, 0x66, 0xcf, 0xa2, 0xbc, 0x84, 0xa0, - 0x26, 0x31, 0x8a, 0xfd, 0x56, 0x78, 0xb3, 0xa2, 0xf1, 0xe6, 0x53, 0xa8, 0xa7, 0xc8, 0x4a, 0xb1, - 0xe6, 0x8f, 0x06, 0x6c, 0xb0, 0xc4, 0x76, 0x5b, 0xcc, 0x7c, 0x08, 0xcd, 0x23, 0x7f, 0x7c, 0xe8, - 0x11, 0xf7, 0x6c, 0xca, 0xb3, 0xa6, 0xa8, 0xc3, 0x55, 0xe9, 0xed, 0x29, 0x44, 0xd1, 0xa7, 0x96, - 0x8f, 0x03, 0x09, 0x4d, 0x29, 0x8d, 0xce, 0xa1, 0xf9, 0xca, 0x5f, 0x4a, 0xa5, 0xdb, 0xd3, 0x80, - 0x0c, 0xb5, 0xaa, 0x41, 0xed, 0xc2, 0xa6, 0xb2, 0x4f, 0x29, 0xb0, 0x7f, 0x33, 0xd8, 0x83, 0x5d, - 0xba, 0x0c, 0x8b, 0x5c, 0x35, 0x2e, 0x8d, 0xfb, 0xc9, 0xe5, 0x05, 0xda, 0xd9, 0x92, 0xeb, 0x8f, - 0xe7, 0x33, 0x91, 0x4f, 0x15, 0x99, 0xfd, 0x05, 0xac, 0xa7, 0x6d, 0x1a, 0x8b, 0xf4, 0xbf, 0x80, - 0xa4, 0xc4, 0x22, 0xeb, 0x7f, 0x02, 0xad, 0x0e, 0x9e, 0x78, 0x7e, 0x9e, 0x25, 0x39, 0x79, 0x01, - 0x9f, 0xaa, 0x45, 0x7c, 0xb2, 0xff, 0xc3, 0x8f, 0x42, 0xd9, 0x42, 0xa5, 0xf2, 0xc8, 0x3e, 0x40, - 0xb6, 0x86, 0xc8, 0x26, 0x9b, 0x7c, 0x46, 0xe6, 0x44, 0x69, 0xc8, 0xbb, 0x48, 0x2c, 0x03, 0x76, - 0xf3, 0x49, 0xf7, 0x4c, 0xea, 0xa6, 0x1d, 0x58, 0xa5, 0xcd, 0x53, 0xef, 0xed, 0x0b, 0xa7, 0x23, - 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, 0x8e, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, - 0xec, 0x73, 0x68, 0x64, 0x0f, 0xe1, 0x77, 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe4, 0xc7, 0xfe, 0x72, - 0x8e, 0x7d, 0xfa, 0xbf, 0x3a, 0x3f, 0x21, 0xd0, 0x27, 0xe9, 0xf9, 0xc7, 0x5e, 0x74, 0xb6, 0xf9, - 0x2c, 0xf5, 0x2d, 0xd5, 0x7a, 0xaf, 0x40, 0x4a, 0x42, 0xd4, 0x85, 0xa6, 0xfa, 0x4e, 0x87, 0x76, - 0x04, 0xbb, 0xf5, 0x27, 0x49, 0xcb, 0x2c, 0xee, 0x20, 0x21, 0x05, 0x20, 0x7d, 0x3e, 0x48, 0x00, - 0xa8, 0x5f, 0x33, 0x12, 0x00, 0xfa, 0x77, 0x86, 0x1f, 0xb3, 0x83, 0x32, 0x7d, 0xb8, 0x47, 0x19, - 0x4e, 0xf9, 0xeb, 0x80, 0xf5, 0xa8, 0x48, 0xcc, 0xa7, 0xcb, 0xef, 0xd6, 0xc9, 0x74, 0xed, 0x95, - 0x3e, 0x99, 0x9e, 0x7b, 0x40, 0x7f, 0xce, 0x8a, 0x5a, 0xe5, 0x15, 0xc9, 0x4c, 0x77, 0xd2, 0x5e, - 0x27, 0xac, 0xf7, 0x17, 0xf4, 0x90, 0x10, 0x39, 0x8c, 0xd0, 0xfa, 0x0d, 0x13, 0x7d, 0x5d, 0x46, - 0xad, 0x5f, 0xf9, 0xac, 0x6f, 0xdc, 0xd0, 0x4b, 0x42, 0xd4, 0x67, 0x19, 0x52, 0x5d, 0xb0, 0x18, - 0x02, 0x5b, 0xcd, 0x5a, 0xd4, 0x45, 0x42, 0xf4, 0x0b, 0x78, 0xaf, 0xf0, 0xca, 0x86, 0x1e, 0x8b, - 0x58, 0x58, 0x70, 0x2b, 0xb5, 0xbe, 0x79, 0x63, 0x3f, 0x37, 0xe0, 0xb0, 0xd8, 0x80, 0xc3, 0x85, - 0x06, 0x2c, 0x7a, 0x56, 0xfb, 0x0c, 0x1a, 0xca, 0xbb, 0x12, 0x7a, 0x94, 0x8e, 0x55, 0x1e, 0xce, - 0xac, 0x9d, 0x42, 0x39, 0x27, 0xa1, 0x74, 0x3f, 0xd1, 0xa2, 0x40, 0x64, 0x18, 0x2d, 0x0a, 0xd2, - 0x2c, 0xd1, 0x4d, 0xaf, 0x70, 0xa2, 0xb6, 0x4f, 0xa2, 0x20, 0x77, 0x17, 0xb1, 0xcc, 0xe2, 0x0e, - 0x12, 0xa2, 0x67, 0xec, 0xd3, 0x8a, 0xb8, 0x4b, 0xa2, 0x87, 0x7c, 0x9c, 0x72, 0x51, 0xb5, 0xb6, - 0xf3, 0x42, 0x12, 0xa2, 0xef, 0xc3, 0x7a, 0x5a, 0x03, 0x23, 0x71, 0xe1, 0x97, 0xcb, 0x79, 0xeb, - 0x61, 0x4e, 0x46, 0x42, 0xf4, 0x3d, 0x58, 0x4b, 0x40, 0xa0, 0x2d, 0x15, 0x14, 0x9d, 0x83, 0x74, - 0x11, 0x09, 0x51, 0x1b, 0x56, 0x45, 0xd1, 0x84, 0x44, 0x6a, 0xc9, 0xaa, 0x3b, 0x6b, 0x4b, 0x93, - 0x70, 0x60, 0xd9, 0x19, 0x88, 0xf4, 0xb4, 0x99, 0x01, 0x53, 0x8b, 0x81, 0x4f, 0xa0, 0x2e, 0xd5, - 0x07, 0x89, 0x23, 0xd4, 0xd2, 0x24, 0x71, 0x84, 0x5e, 0x48, 0x7c, 0x06, 0x0d, 0xe5, 0xcc, 0x43, - 0x59, 0xdc, 0x2b, 0xa5, 0x82, 0xb5, 0x53, 0x28, 0x4f, 0xa3, 0x46, 0x39, 0x08, 0xa4, 0xa8, 0xd1, - 0x8f, 0x1c, 0x29, 0x6a, 0xf2, 0x67, 0xc7, 0x33, 0x80, 0x2c, 0x5b, 0x25, 0x0e, 0x55, 0x8e, 0x07, - 0x6b, 0x3b, 0x2f, 0x64, 0x74, 0xda, 0x96, 0xf2, 0xec, 0xf3, 0x28, 0x98, 0x75, 0xdd, 0xd1, 0x05, - 0x7e, 0xab, 0xcc, 0xdc, 0x69, 0xfc, 0xb2, 0xde, 0x66, 0x5f, 0xac, 0x7f, 0x44, 0xff, 0x9c, 0x3d, - 0x60, 0xdf, 0x5d, 0x3e, 0xfe, 0x2a, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xf3, 0x37, 0xab, 0xca, 0x1e, + 0xb1, 0xda, 0x13, 0x84, 0x10, 0x52, 0xd4, 0xb1, 0x2b, 0x4e, 0x2b, 0x76, 0x77, 0x6f, 0x57, 0x3b, + 0x33, 0xe1, 0xb2, 0x88, 0x8f, 0x1b, 0x17, 0x4e, 0xbb, 0x70, 0xe0, 0xef, 0xe0, 0x0e, 0x27, 0xae, + 0x9c, 0xe0, 0xc2, 0xbf, 0x82, 0xea, 0xa3, 0xbb, 0xab, 0xaa, 0xdb, 0x89, 0xe9, 0x44, 0x73, 0x49, + 0x5c, 0xaf, 0xbe, 0x7e, 0xef, 0xbd, 0xdf, 0x7b, 0xf5, 0xaa, 0x1a, 0x36, 0xe7, 0x04, 0x47, 0xfb, + 0xf4, 0x4f, 0x3b, 0x8c, 0x82, 0x38, 0x40, 0x35, 0xfa, 0xdb, 0xfa, 0xd6, 0x49, 0x88, 0xfd, 0xb3, + 0xfe, 0xab, 0xfd, 0xf0, 0x6a, 0xb2, 0xcf, 0x3a, 0xf6, 0xc9, 0xf8, 0xea, 0xec, 0x0d, 0xd9, 0x7f, + 0x43, 0xf8, 0x40, 0xeb, 0xa3, 0xc5, 0x43, 0x22, 0x37, 0x0c, 0x71, 0x24, 0x06, 0xda, 0x3f, 0x01, + 0xe8, 0x06, 0xb3, 0x59, 0xe0, 0x3b, 0x98, 0x84, 0xc8, 0x84, 0x55, 0x1c, 0x45, 0xdd, 0x60, 0x8c, + 0x4d, 0x63, 0xd7, 0xd8, 0x5b, 0x71, 0x92, 0x26, 0x7a, 0x02, 0x8f, 0x70, 0x14, 0xbd, 0x22, 0x13, + 0xb3, 0xb2, 0x6b, 0xec, 0xad, 0x3b, 0xa2, 0x65, 0xff, 0x1a, 0x9a, 0x87, 0x78, 0x8a, 0x63, 0x7c, + 0x4a, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x06, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, 0x62, + 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, 0x95, + 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, 0xb3, + 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, 0x0e, + 0xf5, 0xe7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x41, 0xeb, 0xa5, 0xeb, 0x4d, + 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, 0x54, + 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, 0x70, + 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x4f, 0x01, 0x72, 0xe0, 0x25, 0x89, 0x7d, + 0x03, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x25, 0x1e, 0x5d, 0x51, 0xd8, 0x7b, 0xb0, + 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xee, 0xa2, 0x6a, 0xde, + 0x45, 0xff, 0x35, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, 0x00, + 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xfc, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, 0xf4, + 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, 0xbd, + 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, 0x50, + 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0x2f, 0x02, 0x6a, 0xdb, 0xa7, 0x00, + 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x9e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, 0xa0, + 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x1a, 0x47, + 0x67, 0x6e, 0xe8, 0x9d, 0x85, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xcb, + 0x80, 0xad, 0xd3, 0x70, 0xec, 0x8a, 0x70, 0x16, 0xaa, 0xbf, 0x80, 0xb5, 0xa4, 0x29, 0x60, 0xdc, + 0xba, 0x64, 0x3a, 0xf8, 0x2e, 0x9b, 0x04, 0x79, 0x9b, 0x48, 0x22, 0xd4, 0x83, 0xd6, 0x64, 0x1a, + 0x9c, 0xbb, 0x53, 0x07, 0x8f, 0xae, 0x5f, 0x91, 0xc9, 0x49, 0x18, 0xb3, 0x7c, 0x41, 0xb7, 0x9f, + 0x04, 0xc1, 0x64, 0x8a, 0x79, 0xb6, 0x3b, 0x9f, 0x5f, 0xb4, 0xfb, 0x7e, 0xfc, 0xf1, 0xf3, 0x9f, + 0xbb, 0xd3, 0x39, 0x76, 0x72, 0x93, 0xec, 0x97, 0x80, 0x74, 0xa5, 0xca, 0x98, 0xd7, 0xfe, 0x4f, + 0x15, 0x36, 0xba, 0x81, 0x7f, 0x8d, 0x23, 0xc2, 0x30, 0x32, 0xbf, 0xbe, 0xf1, 0x71, 0xa4, 0x64, + 0x0a, 0x59, 0x84, 0x3e, 0x84, 0xa6, 0x3c, 0x23, 0xb5, 0x83, 0x26, 0xa5, 0xec, 0x92, 0xb4, 0xac, + 0xb2, 0x2c, 0x2d, 0x49, 0x68, 0x3e, 0x93, 0x67, 0xbc, 0xbe, 0x09, 0x31, 0xb3, 0xc5, 0x8a, 0x93, + 0x93, 0x53, 0xe6, 0x0b, 0x40, 0x2b, 0x9c, 0xf9, 0x02, 0x8b, 0x09, 0xab, 0xbd, 0x28, 0x98, 0x87, + 0xfd, 0x43, 0xf3, 0x11, 0xeb, 0x48, 0x9a, 0x54, 0x8f, 0x53, 0x3f, 0xc2, 0xee, 0xb8, 0x4b, 0x43, + 0xc0, 0x5c, 0x65, 0x0b, 0xcb, 0x22, 0x1a, 0x35, 0x87, 0x91, 0x7b, 0x11, 0xbf, 0xc6, 0x6f, 0xe3, + 0xd7, 0xde, 0x0c, 0x9b, 0x6b, 0xbb, 0xc6, 0x5e, 0xd5, 0x51, 0x85, 0xd4, 0xdf, 0x7d, 0x32, 0xf0, + 0x7c, 0x1f, 0x8f, 0xcd, 0xf5, 0x5d, 0x63, 0x6f, 0xcd, 0x49, 0xdb, 0xc8, 0x86, 0x8d, 0x83, 0x38, + 0x76, 0x47, 0x97, 0x78, 0xcc, 0x88, 0x04, 0x0c, 0x82, 0x22, 0xa3, 0xbb, 0xf4, 0xc9, 0x20, 0xf2, + 0xae, 0xdd, 0x18, 0x77, 0x2f, 0xdd, 0xd8, 0xac, 0xb3, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, + 0xc4, 0xcc, 0x0c, 0x1b, 0x1c, 0xad, 0x24, 0xa2, 0x7b, 0xf5, 0xc9, 0x71, 0x10, 0xf7, 0x7d, 0x26, + 0x35, 0x1b, 0x6c, 0x19, 0x45, 0x86, 0x9a, 0x50, 0x39, 0x7a, 0x6b, 0x36, 0x19, 0x8a, 0xca, 0xd1, + 0x5b, 0xfb, 0x2f, 0x06, 0xa0, 0x21, 0x8e, 0x65, 0x6b, 0x52, 0xee, 0xff, 0x40, 0x75, 0xb9, 0xe0, + 0x09, 0x4a, 0x78, 0x22, 0x0d, 0x56, 0xa9, 0xf1, 0x0c, 0x5a, 0x7e, 0x10, 0x7b, 0x17, 0xde, 0x28, + 0x73, 0x58, 0x85, 0x3b, 0x4c, 0x97, 0x2f, 0x91, 0x1e, 0x7a, 0xf0, 0x38, 0x87, 0xad, 0x14, 0x85, + 0xff, 0x69, 0x40, 0x6b, 0x88, 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, + 0xcb, 0x59, 0x65, 0x25, 0x6f, 0x95, 0x23, 0xd8, 0xd2, 0x74, 0x29, 0x65, 0x93, 0xdf, 0x18, 0x80, + 0x7a, 0x79, 0xcf, 0xe7, 0x75, 0x36, 0x0a, 0x75, 0xd6, 0xac, 0x57, 0xc9, 0x5b, 0xef, 0x6e, 0xff, + 0x7e, 0x01, 0x8f, 0x7b, 0x0f, 0xe1, 0xdf, 0x1c, 0x5d, 0x2b, 0xcb, 0xd1, 0xd5, 0xfe, 0x9d, 0x91, + 0x43, 0x40, 0x96, 0xa3, 0x06, 0xad, 0x39, 0x14, 0x83, 0x10, 0x51, 0xab, 0xe8, 0xe2, 0x25, 0xcc, + 0xf0, 0x5b, 0x03, 0xb6, 0xf3, 0x28, 0x4a, 0x19, 0xe2, 0x87, 0xd0, 0x50, 0x96, 0x11, 0xe5, 0x45, + 0x91, 0x25, 0xd4, 0x81, 0xf6, 0xaf, 0xe0, 0x09, 0xaf, 0xde, 0x4a, 0x18, 0x43, 0x53, 0xb1, 0x92, + 0x57, 0xf1, 0x0f, 0x06, 0xec, 0x14, 0x2e, 0xff, 0x8e, 0xb5, 0xfc, 0x87, 0x01, 0x66, 0xc7, 0x8d, + 0x47, 0x97, 0xc3, 0x02, 0xaf, 0xe7, 0x96, 0x35, 0x96, 0x5c, 0x76, 0x89, 0x60, 0x28, 0x4a, 0x01, + 0xd5, 0xe5, 0x52, 0x40, 0xad, 0x28, 0x70, 0xde, 0x5f, 0xa0, 0x45, 0x29, 0x7b, 0x9a, 0xb0, 0x3a, + 0x9c, 0x8f, 0x46, 0x98, 0x24, 0x24, 0x4e, 0x9a, 0xf4, 0x50, 0xe5, 0x17, 0x07, 0x56, 0x54, 0xad, + 0x3b, 0xa2, 0x65, 0xf7, 0xa1, 0xe1, 0x60, 0xe2, 0x4d, 0x7c, 0xaa, 0x1e, 0xb5, 0x5d, 0x72, 0xfa, + 0x8e, 0x93, 0xba, 0x93, 0xb7, 0x96, 0xa0, 0x46, 0x07, 0x9a, 0xf2, 0x52, 0xa5, 0x72, 0xd9, 0x4f, + 0xd3, 0xba, 0xb5, 0x73, 0xd3, 0x1f, 0xdf, 0x0f, 0xcf, 0x57, 0x06, 0xd4, 0xe8, 0x60, 0x7a, 0x9c, + 0x0e, 0xa2, 0xe0, 0xc2, 0x9b, 0xe2, 0xc1, 0x65, 0x10, 0x07, 0x62, 0x21, 0x45, 0x46, 0x8f, 0xfe, + 0x63, 0x6f, 0x74, 0xe5, 0xbb, 0x33, 0x9c, 0x94, 0x7a, 0x49, 0x5b, 0x82, 0x50, 0x55, 0x20, 0x3c, + 0x05, 0xe8, 0x46, 0xd8, 0x8d, 0x31, 0xab, 0x28, 0xb8, 0x77, 0x25, 0x09, 0xf5, 0x46, 0x9f, 0x74, + 0xa6, 0xc1, 0xe8, 0x8a, 0x65, 0xff, 0x35, 0x27, 0x69, 0xda, 0xa3, 0xb4, 0x5a, 0xe6, 0x6a, 0x96, + 0xbc, 0x60, 0xb1, 0x8b, 0xb7, 0xc8, 0x91, 0xc0, 0xc7, 0x32, 0xdb, 0x33, 0xb9, 0xfd, 0xa5, 0x01, + 0x5b, 0x62, 0x17, 0xd2, 0xb9, 0x39, 0x76, 0x67, 0x58, 0x5c, 0x0d, 0xa9, 0x84, 0x36, 0x93, 0xab, + 0x61, 0xd2, 0x46, 0x87, 0x00, 0x03, 0x77, 0xe2, 0xf9, 0x72, 0xee, 0xfd, 0xa0, 0xa0, 0x54, 0x76, + 0xf0, 0xe7, 0x73, 0x4c, 0xe2, 0x6c, 0xac, 0x23, 0xcd, 0x5b, 0x22, 0x4f, 0xfe, 0x99, 0x9f, 0x58, + 0x0a, 0x32, 0x12, 0xa2, 0x5d, 0x58, 0xa1, 0xc0, 0x93, 0x70, 0x95, 0x35, 0xe2, 0x1d, 0xe8, 0xa8, + 0x00, 0xe0, 0xb7, 0x0b, 0x01, 0x92, 0x30, 0xf0, 0x09, 0x5e, 0x80, 0x30, 0xb1, 0xc1, 0x7c, 0x46, + 0x44, 0xec, 0xa6, 0x6d, 0xfb, 0x6f, 0x06, 0x6c, 0x1c, 0x4c, 0x63, 0x1e, 0xef, 0xf7, 0x22, 0x20, + 0x1d, 0x31, 0xb8, 0x0c, 0x7c, 0x7c, 0x3c, 0x9f, 0x9d, 0xe3, 0x88, 0xed, 0x54, 0x75, 0x64, 0x91, + 0xc2, 0xba, 0x9a, 0xc6, 0xba, 0x6d, 0x58, 0x39, 0x9a, 0xb9, 0xde, 0x54, 0x54, 0x0e, 0xbc, 0x21, + 0x5d, 0x49, 0xc6, 0xa2, 0x0a, 0x4e, 0xdb, 0xf6, 0x01, 0x34, 0x24, 0xe4, 0x65, 0x38, 0x65, 0xff, + 0xc9, 0x80, 0x7a, 0xe2, 0x99, 0xe4, 0xc8, 0x90, 0x94, 0x34, 0xf2, 0x4a, 0x3e, 0x0c, 0x67, 0x64, + 0x56, 0x56, 0x55, 0x56, 0xda, 0x7f, 0x37, 0x60, 0x23, 0xc3, 0x74, 0xcf, 0x50, 0xa9, 0x16, 0x85, + 0x8a, 0xc6, 0xab, 0xea, 0x43, 0xf0, 0xaa, 0xa6, 0xf1, 0xea, 0x2b, 0x03, 0xe0, 0x60, 0x3c, 0x4e, + 0x58, 0x75, 0xb7, 0x61, 0x35, 0xf6, 0x08, 0x7e, 0xc9, 0xec, 0x59, 0x94, 0x97, 0x10, 0xd4, 0x24, + 0x46, 0xb1, 0xdf, 0x0a, 0x6f, 0x56, 0x34, 0xde, 0x7c, 0x0a, 0xf5, 0x14, 0x59, 0x29, 0xd6, 0xfc, + 0xd1, 0x80, 0x0d, 0x96, 0xd8, 0xee, 0x8a, 0x99, 0x0f, 0xa1, 0x79, 0xe4, 0x8f, 0x0f, 0x3d, 0xe2, + 0x9e, 0x4f, 0x79, 0xd6, 0x14, 0x75, 0xb8, 0x2a, 0xbd, 0x3b, 0x85, 0x28, 0xfa, 0xd4, 0xf2, 0x71, + 0x20, 0xa1, 0x29, 0xa5, 0xd1, 0x05, 0x34, 0x4f, 0xfd, 0xa5, 0x54, 0xba, 0x3b, 0x0d, 0xc8, 0x50, + 0xab, 0x1a, 0xd4, 0x2e, 0x6c, 0x2a, 0xfb, 0x94, 0x02, 0xfb, 0x57, 0x83, 0x3d, 0xd8, 0xa5, 0xcb, + 0xb0, 0xc8, 0x55, 0xe3, 0xd2, 0x78, 0x98, 0x5c, 0x5e, 0xa0, 0x9d, 0x2d, 0xb9, 0xfe, 0x78, 0x3e, + 0x13, 0xf9, 0x54, 0x91, 0xd9, 0x5f, 0xc0, 0x7a, 0xda, 0xa6, 0xb1, 0x48, 0xff, 0x0b, 0x48, 0x4a, + 0x2c, 0xb2, 0xfe, 0x67, 0xd0, 0xea, 0xe0, 0x89, 0xe7, 0xe7, 0x59, 0x92, 0x93, 0x17, 0xf0, 0xa9, + 0x5a, 0xc4, 0x27, 0xfb, 0xdf, 0xfc, 0x28, 0x94, 0x2d, 0x54, 0x2a, 0x8f, 0xec, 0x03, 0x64, 0x6b, + 0x88, 0x6c, 0xb2, 0xc9, 0x67, 0x64, 0x4e, 0x94, 0x86, 0xbc, 0x8b, 0xc4, 0x32, 0x60, 0x37, 0x9f, + 0x74, 0xcf, 0xa4, 0x6e, 0xda, 0x81, 0x55, 0xda, 0x3c, 0xf3, 0xfe, 0xff, 0xc2, 0xe9, 0x88, 0xdd, + 0x62, 0xb4, 0x15, 0x49, 0x88, 0xbe, 0x23, 0xb9, 0x51, 0x64, 0xfa, 0x9c, 0xf2, 0xd9, 0x08, 0xfb, + 0x02, 0x1a, 0xd9, 0x43, 0xf8, 0xfd, 0x20, 0xdd, 0x1a, 0x43, 0x1d, 0xf9, 0xb1, 0xbf, 0x9c, 0x63, + 0x9f, 0x7f, 0x59, 0xe7, 0x27, 0x04, 0xfa, 0x24, 0x3d, 0xff, 0xd8, 0x8b, 0xce, 0x36, 0x9f, 0xa5, + 0xbe, 0xa5, 0x5a, 0xef, 0x15, 0x48, 0x49, 0x88, 0xba, 0xd0, 0x54, 0xdf, 0xe9, 0xd0, 0x8e, 0x60, + 0xb7, 0xfe, 0x24, 0x69, 0x99, 0xc5, 0x1d, 0x24, 0xa4, 0x00, 0xa4, 0xcf, 0x07, 0x09, 0x00, 0xf5, + 0x6b, 0x46, 0x02, 0x40, 0xff, 0xce, 0xf0, 0x63, 0x76, 0x50, 0xa6, 0x0f, 0xf7, 0x28, 0xc3, 0x29, + 0x7f, 0x1d, 0xb0, 0x9e, 0x14, 0x89, 0xf9, 0x74, 0xf9, 0xdd, 0x3a, 0x99, 0xae, 0xbd, 0xd2, 0x27, + 0xd3, 0x73, 0x0f, 0xe8, 0x2f, 0x59, 0x51, 0xab, 0xbc, 0x22, 0x99, 0xe9, 0x4e, 0xda, 0xeb, 0x84, + 0xf5, 0xfe, 0x82, 0x1e, 0x12, 0x22, 0x87, 0x11, 0x5a, 0xbf, 0x61, 0xa2, 0xaf, 0xcb, 0xa8, 0xf5, + 0x2b, 0x9f, 0xf5, 0x8d, 0x5b, 0x7a, 0x49, 0x88, 0xfa, 0x2c, 0x43, 0xaa, 0x0b, 0x16, 0x43, 0x60, + 0xab, 0x59, 0x8b, 0xba, 0x48, 0x88, 0x7e, 0x01, 0xef, 0x15, 0x5e, 0xd9, 0xd0, 0x53, 0x11, 0x0b, + 0x0b, 0x6e, 0xa5, 0xd6, 0x37, 0x6f, 0xed, 0xe7, 0x06, 0x1c, 0x16, 0x1b, 0x70, 0xb8, 0xd0, 0x80, + 0x45, 0xcf, 0x6a, 0x9f, 0x41, 0x43, 0x79, 0x57, 0x42, 0x4f, 0xd2, 0xb1, 0xca, 0xc3, 0x99, 0xb5, + 0x53, 0x28, 0xe7, 0x24, 0x94, 0xee, 0x27, 0x5a, 0x14, 0x88, 0x0c, 0xa3, 0x45, 0x41, 0x9a, 0x25, + 0xba, 0xe9, 0x15, 0x4e, 0xd4, 0xf6, 0x49, 0x14, 0xe4, 0xee, 0x22, 0x96, 0x59, 0xdc, 0x41, 0x42, + 0xf4, 0x82, 0x7d, 0x5a, 0x11, 0x77, 0x49, 0xf4, 0x98, 0x8f, 0x53, 0x2e, 0xaa, 0xd6, 0x76, 0x5e, + 0x48, 0x42, 0xf4, 0x7d, 0x58, 0x4f, 0x6b, 0x60, 0x24, 0x2e, 0xfc, 0x72, 0x39, 0x6f, 0x3d, 0xce, + 0xc9, 0x48, 0x88, 0xbe, 0x07, 0x6b, 0x09, 0x08, 0xb4, 0xa5, 0x82, 0xa2, 0x73, 0x90, 0x2e, 0x22, + 0x21, 0x6a, 0xc3, 0xaa, 0x28, 0x9a, 0x90, 0x48, 0x2d, 0x59, 0x75, 0x67, 0x6d, 0x69, 0x12, 0x0e, + 0x2c, 0x3b, 0x03, 0x91, 0x9e, 0x36, 0x33, 0x60, 0x6a, 0x31, 0xf0, 0x09, 0xd4, 0xa5, 0xfa, 0x20, + 0x71, 0x84, 0x5a, 0x9a, 0x24, 0x8e, 0xd0, 0x0b, 0x89, 0xcf, 0xa0, 0xa1, 0x9c, 0x79, 0x28, 0x8b, + 0x7b, 0xa5, 0x54, 0xb0, 0x76, 0x0a, 0xe5, 0x69, 0xd4, 0x28, 0x07, 0x81, 0x14, 0x35, 0xfa, 0x91, + 0x23, 0x45, 0x4d, 0xfe, 0xec, 0x78, 0x01, 0x90, 0x65, 0xab, 0xc4, 0xa1, 0xca, 0xf1, 0x60, 0x6d, + 0xe7, 0x85, 0x24, 0xec, 0x34, 0x7e, 0x59, 0x6f, 0xb3, 0x8f, 0xcd, 0x3f, 0xa2, 0x7f, 0xce, 0x1f, + 0xb1, 0x4f, 0x26, 0x1f, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x5b, 0xa4, 0x32, 0x85, 0x1e, 0x00, 0x00, } diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index f28a1673e..2f591aed6 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -317,8 +317,4 @@ service user { rpc GetBlockUsers(GetBlockUsersReq) returns (GetBlockUsersResp); rpc GetBlockUserById(GetBlockUserByIdReq) returns (GetBlockUserByIdResp); rpc DeleteUser(DeleteUserReq) returns (DeleteUserResp); - - - rpc GetUserInfoFromCache(GetUserInfoReq) returns(GetUserInfoResp); - } From 310997f9784763a2722129a834136a45d886ee22 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 12:04:57 +0800 Subject: [PATCH 569/752] update chat.pb --- pkg/proto/chat/chat.pb.go | 163 +++++++++++++++++++++++++++----------- pkg/proto/chat/chat.proto | 8 ++ 2 files changed, 123 insertions(+), 48 deletions(-) diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index b3d53675f..b69f57018 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -37,7 +37,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{0} + return fileDescriptor_chat_64077d68a66b2cfd, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{1} + return fileDescriptor_chat_64077d68a66b2cfd, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{2} + return fileDescriptor_chat_64077d68a66b2cfd, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -178,6 +178,68 @@ func (m *PushMsgDataToMQ) GetPushToUserID() string { return "" } +type MsgDataToMongoByMQ struct { + LastSeq uint64 `protobuf:"varint,1,opt,name=lastSeq" json:"lastSeq,omitempty"` + AggregationID string `protobuf:"bytes,2,opt,name=aggregationID" json:"aggregationID,omitempty"` + MessageList []*MsgDataToMQ `protobuf:"bytes,3,rep,name=messageList" json:"messageList,omitempty"` + TriggerID string `protobuf:"bytes,4,opt,name=triggerID" json:"triggerID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MsgDataToMongoByMQ) Reset() { *m = MsgDataToMongoByMQ{} } +func (m *MsgDataToMongoByMQ) String() string { return proto.CompactTextString(m) } +func (*MsgDataToMongoByMQ) ProtoMessage() {} +func (*MsgDataToMongoByMQ) Descriptor() ([]byte, []int) { + return fileDescriptor_chat_64077d68a66b2cfd, []int{3} +} +func (m *MsgDataToMongoByMQ) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgDataToMongoByMQ.Unmarshal(m, b) +} +func (m *MsgDataToMongoByMQ) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgDataToMongoByMQ.Marshal(b, m, deterministic) +} +func (dst *MsgDataToMongoByMQ) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDataToMongoByMQ.Merge(dst, src) +} +func (m *MsgDataToMongoByMQ) XXX_Size() int { + return xxx_messageInfo_MsgDataToMongoByMQ.Size(m) +} +func (m *MsgDataToMongoByMQ) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDataToMongoByMQ.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDataToMongoByMQ proto.InternalMessageInfo + +func (m *MsgDataToMongoByMQ) GetLastSeq() uint64 { + if m != nil { + return m.LastSeq + } + return 0 +} + +func (m *MsgDataToMongoByMQ) GetAggregationID() string { + if m != nil { + return m.AggregationID + } + return "" +} + +func (m *MsgDataToMongoByMQ) GetMessageList() []*MsgDataToMQ { + if m != nil { + return m.MessageList + } + return nil +} + +func (m *MsgDataToMongoByMQ) GetTriggerID() string { + if m != nil { + return m.TriggerID + } + return "" +} + // message PullMessageReq { // string UserID = 1; // int64 SeqBegin = 2; @@ -210,7 +272,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{3} + return fileDescriptor_chat_64077d68a66b2cfd, []int{4} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -258,7 +320,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{4} + return fileDescriptor_chat_64077d68a66b2cfd, []int{5} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -319,7 +381,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{5} + return fileDescriptor_chat_64077d68a66b2cfd, []int{6} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -375,7 +437,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{6} + return fileDescriptor_chat_64077d68a66b2cfd, []int{7} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -443,7 +505,7 @@ func (m *ClearMsgReq) Reset() { *m = ClearMsgReq{} } func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) } func (*ClearMsgReq) ProtoMessage() {} func (*ClearMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{7} + return fileDescriptor_chat_64077d68a66b2cfd, []int{8} } func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b) @@ -496,7 +558,7 @@ func (m *ClearMsgResp) Reset() { *m = ClearMsgResp{} } func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) } func (*ClearMsgResp) ProtoMessage() {} func (*ClearMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{8} + return fileDescriptor_chat_64077d68a66b2cfd, []int{9} } func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b) @@ -534,6 +596,7 @@ func init() { proto.RegisterType((*MsgDataToMQ)(nil), "pbChat.MsgDataToMQ") proto.RegisterType((*MsgDataToDB)(nil), "pbChat.MsgDataToDB") proto.RegisterType((*PushMsgDataToMQ)(nil), "pbChat.PushMsgDataToMQ") + proto.RegisterType((*MsgDataToMongoByMQ)(nil), "pbChat.MsgDataToMongoByMQ") proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "pbChat.GetMaxAndMinSeqReq") proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "pbChat.GetMaxAndMinSeqResp") proto.RegisterType((*SendMsgReq)(nil), "pbChat.SendMsgReq") @@ -746,44 +809,48 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_9735d58eeaab60cd) } +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_64077d68a66b2cfd) } -var fileDescriptor_chat_9735d58eeaab60cd = []byte{ - // 563 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xc1, 0x6e, 0xda, 0x40, - 0x10, 0x95, 0x43, 0x42, 0x92, 0x71, 0x22, 0xa4, 0x4d, 0x14, 0x59, 0x3e, 0x39, 0x96, 0x5a, 0xa1, - 0x56, 0x32, 0x12, 0x6d, 0x4f, 0xbd, 0xb4, 0xe0, 0xa8, 0x42, 0xaa, 0x9b, 0xc4, 0xd0, 0x4b, 0x2f, - 0x74, 0x03, 0x23, 0x63, 0x01, 0xf6, 0xe2, 0x31, 0x25, 0x6d, 0xbf, 0xa1, 0xe7, 0x1e, 0xfb, 0xab, - 0x95, 0x77, 0x0d, 0x18, 0x8c, 0x14, 0xd4, 0x43, 0x2f, 0x96, 0xde, 0xdb, 0xf1, 0x7b, 0x6f, 0x76, - 0x47, 0x03, 0xb5, 0xc1, 0x88, 0xa7, 0x8d, 0xec, 0xe3, 0x88, 0x24, 0x4e, 0x63, 0x56, 0x15, 0x0f, - 0xed, 0x11, 0x4f, 0xcd, 0xeb, 0x5b, 0x81, 0x51, 0xbf, 0xe3, 0x35, 0xc4, 0x38, 0x68, 0xc8, 0xa3, - 0x06, 0x0d, 0xc7, 0xfd, 0x05, 0x35, 0x16, 0xa4, 0x4a, 0xed, 0x9f, 0xa0, 0x7b, 0x14, 0xb8, 0x3c, - 0xe5, 0xbd, 0xd8, 0xbb, 0x67, 0x97, 0x70, 0x94, 0xc6, 0x63, 0x8c, 0x0c, 0xcd, 0xd2, 0xea, 0xa7, - 0xbe, 0x02, 0xcc, 0x02, 0x3d, 0x16, 0x98, 0xf0, 0x34, 0x8c, 0xa3, 0x8e, 0x6b, 0x1c, 0xc8, 0xb3, - 0x22, 0xc5, 0x5e, 0xc3, 0xf1, 0x54, 0xc9, 0x18, 0x15, 0x4b, 0xab, 0xeb, 0x4d, 0xd3, 0x21, 0x4c, - 0xbe, 0x61, 0xd2, 0xe7, 0x22, 0xec, 0x0b, 0x9e, 0xf0, 0x29, 0x39, 0xb9, 0x91, 0xbf, 0x2c, 0xb5, - 0xb1, 0x60, 0xee, 0xb6, 0x8a, 0x22, 0xda, 0xde, 0x22, 0x4f, 0x87, 0xb3, 0x7f, 0x69, 0x50, 0xbb, - 0x9b, 0xd3, 0xa8, 0xd8, 0xa8, 0x05, 0xfa, 0x6d, 0xe1, 0x2f, 0xd5, 0x6e, 0x91, 0x2a, 0xa6, 0x39, - 0xd8, 0x3f, 0x8d, 0x0d, 0x67, 0x62, 0x4e, 0xa3, 0x5e, 0xfc, 0x99, 0x30, 0xe9, 0xb8, 0xf2, 0x36, - 0x4e, 0xfd, 0x0d, 0xce, 0xfe, 0x04, 0xec, 0x03, 0xa6, 0x1e, 0x7f, 0x7c, 0x1f, 0x0d, 0xbd, 0x30, - 0xea, 0xe2, 0xcc, 0xc7, 0x19, 0xbb, 0x82, 0x6a, 0xfe, 0x8f, 0x0a, 0x93, 0xa3, 0xed, 0xa4, 0x07, - 0xa5, 0xa4, 0xf6, 0x02, 0x2e, 0x4a, 0x7a, 0x24, 0x98, 0x01, 0xc7, 0x37, 0x49, 0xd2, 0x8e, 0x87, - 0x28, 0x15, 0x8f, 0xfc, 0x25, 0xcc, 0xac, 0x6e, 0x92, 0xc4, 0xa3, 0x20, 0x57, 0xcb, 0x51, 0xc6, - 0x7b, 0xfc, 0xb1, 0x8b, 0x33, 0x19, 0xfb, 0xdc, 0xcf, 0x91, 0xe4, 0xa5, 0xae, 0x71, 0x98, 0xf3, - 0x12, 0xd9, 0x3f, 0x00, 0xba, 0x18, 0x0d, 0x3d, 0x0a, 0xb2, 0x06, 0xfe, 0xef, 0xec, 0xfc, 0xd1, - 0x40, 0x5f, 0x99, 0xab, 0x6e, 0x71, 0xb3, 0x5b, 0x5c, 0x77, 0x8b, 0x1b, 0xdd, 0x2a, 0x94, 0x25, - 0x53, 0x3e, 0x1e, 0x05, 0x1d, 0x57, 0xb6, 0x76, 0xea, 0x17, 0xa9, 0xac, 0x62, 0x30, 0x09, 0x31, - 0x4a, 0x55, 0xc5, 0x91, 0xaa, 0x28, 0x50, 0xcc, 0x84, 0x13, 0xc2, 0x68, 0xd8, 0x0b, 0xa7, 0x68, - 0x54, 0x2d, 0xad, 0x5e, 0xf1, 0x57, 0xd8, 0x1e, 0x80, 0xde, 0x9e, 0x20, 0x4f, 0xf2, 0xeb, 0xb9, - 0x82, 0xea, 0x7c, 0xe3, 0x7d, 0x15, 0xca, 0x24, 0x62, 0x91, 0xbf, 0xbc, 0x0a, 0xb8, 0xc2, 0xdb, - 0x97, 0x57, 0x29, 0xcf, 0xf6, 0x3b, 0x38, 0x5b, 0x9b, 0xfc, 0xcb, 0x35, 0x34, 0x7f, 0x57, 0xe0, - 0x30, 0xdb, 0x16, 0xec, 0x2b, 0xd4, 0xb6, 0xc6, 0x88, 0x3d, 0xdb, 0xf1, 0x12, 0xe5, 0xd1, 0x35, - 0x9f, 0xef, 0x53, 0x46, 0x82, 0xc5, 0x70, 0x79, 0x37, 0x9f, 0x4c, 0x3c, 0x24, 0xe2, 0x01, 0xb6, - 0xbe, 0x77, 0x71, 0xf6, 0x31, 0xa4, 0x94, 0xbd, 0xd8, 0xf1, 0xff, 0xae, 0xc2, 0xcc, 0xeb, 0xe5, - 0xde, 0xb5, 0x24, 0x58, 0x13, 0x8e, 0xf3, 0x19, 0x61, 0xcc, 0x51, 0x4b, 0xd1, 0x59, 0x4f, 0xac, - 0x79, 0x51, 0xe2, 0x48, 0xb0, 0x7b, 0x00, 0x17, 0x27, 0x1e, 0x05, 0x32, 0x9a, 0xb5, 0xc3, 0x6e, - 0x7d, 0x9c, 0x89, 0x5c, 0x3f, 0x51, 0x41, 0x82, 0xbd, 0x81, 0x93, 0xe5, 0x23, 0xb1, 0x95, 0x67, - 0x61, 0x36, 0xcc, 0xcb, 0x32, 0x49, 0xa2, 0x55, 0xfb, 0x72, 0xee, 0xc8, 0xb5, 0xfe, 0x56, 0x9d, - 0x3e, 0x54, 0xe5, 0xce, 0x7e, 0xf5, 0x37, 0x00, 0x00, 0xff, 0xff, 0xee, 0x03, 0xc5, 0x33, 0xf1, - 0x05, 0x00, 0x00, +var fileDescriptor_chat_64077d68a66b2cfd = []byte{ + // 636 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x41, 0x6f, 0xda, 0x4c, + 0x10, 0x95, 0x43, 0x42, 0x92, 0x71, 0x22, 0xa4, 0x4d, 0x14, 0x21, 0xf4, 0x1d, 0x1c, 0xeb, 0x6b, + 0x85, 0x5a, 0x09, 0x24, 0xda, 0x9c, 0x7a, 0x69, 0x09, 0x51, 0x15, 0xa9, 0x6e, 0x12, 0x93, 0x5e, + 0x7a, 0xa1, 0x9b, 0x30, 0x5a, 0xac, 0x80, 0xbd, 0xec, 0x98, 0x26, 0x69, 0x7f, 0x43, 0xcf, 0x3d, + 0xf6, 0xdc, 0x7f, 0x59, 0xed, 0xae, 0x01, 0x83, 0x91, 0x82, 0x7a, 0xe8, 0x05, 0xe9, 0xbd, 0x7d, + 0xbc, 0x99, 0x37, 0x3b, 0x2b, 0x43, 0xe5, 0x76, 0xc0, 0xd3, 0xa6, 0xfe, 0x69, 0x48, 0x95, 0xa4, + 0x09, 0x2b, 0xcb, 0x9b, 0xd3, 0x01, 0x4f, 0x6b, 0xc7, 0x17, 0x12, 0xe3, 0xde, 0x79, 0xd0, 0x94, + 0x77, 0xa2, 0x69, 0x8e, 0x9a, 0xd4, 0xbf, 0xeb, 0xdd, 0x53, 0xf3, 0x9e, 0xac, 0xd4, 0xff, 0x0e, + 0x6e, 0x40, 0xa2, 0xc3, 0x53, 0x7e, 0x9d, 0x04, 0x57, 0xec, 0x10, 0xb6, 0xd2, 0xe4, 0x0e, 0xe3, + 0xaa, 0xe3, 0x39, 0xf5, 0xdd, 0xd0, 0x02, 0xe6, 0x81, 0x9b, 0x48, 0x54, 0x3c, 0x8d, 0x92, 0xf8, + 0xbc, 0x53, 0xdd, 0x30, 0x67, 0x79, 0x8a, 0xbd, 0x86, 0xed, 0x91, 0xb5, 0xa9, 0x96, 0x3c, 0xa7, + 0xee, 0xb6, 0x6a, 0x0d, 0x42, 0xf5, 0x15, 0x55, 0x8f, 0xcb, 0xa8, 0x27, 0xb9, 0xe2, 0x23, 0x6a, + 0x64, 0x85, 0xc2, 0xa9, 0xd4, 0xc7, 0x5c, 0xf1, 0x4e, 0x3b, 0x6f, 0xe2, 0xac, 0x6d, 0xf2, 0x74, + 0x73, 0xfe, 0x0f, 0x07, 0x2a, 0x97, 0x13, 0x1a, 0xe4, 0x83, 0x7a, 0xe0, 0x5e, 0xe4, 0xfe, 0x65, + 0xe3, 0xe6, 0xa9, 0x7c, 0x37, 0x1b, 0xeb, 0x77, 0xe3, 0xc3, 0x9e, 0x9c, 0xd0, 0xe0, 0x3a, 0xf9, + 0x44, 0xa8, 0xce, 0x3b, 0x66, 0x1a, 0xbb, 0xe1, 0x02, 0xe7, 0xff, 0x76, 0x80, 0xcd, 0x7b, 0x49, + 0x62, 0x91, 0xb4, 0x1f, 0x83, 0x2b, 0x56, 0x85, 0xed, 0x21, 0xa7, 0xb4, 0x8b, 0x63, 0xd3, 0xce, + 0x66, 0x38, 0x85, 0xec, 0x7f, 0xd8, 0xe7, 0x42, 0x28, 0x14, 0x8b, 0x21, 0x17, 0x49, 0x76, 0x02, + 0xee, 0x08, 0x89, 0xb8, 0xc0, 0x0f, 0x11, 0xa5, 0xd5, 0x92, 0x57, 0xaa, 0xbb, 0xad, 0x83, 0x86, + 0xdd, 0x85, 0x46, 0x2e, 0x7c, 0x98, 0xd7, 0xb1, 0xff, 0x60, 0x37, 0x55, 0x91, 0x10, 0xa6, 0xdd, + 0x4d, 0x63, 0x3c, 0x27, 0xfc, 0x8f, 0xc0, 0xde, 0x63, 0x1a, 0xf0, 0x87, 0x77, 0x71, 0x3f, 0x88, + 0xe2, 0x2e, 0x8e, 0x43, 0x1c, 0xb3, 0x23, 0x28, 0x67, 0xf9, 0xec, 0xe0, 0x32, 0xb4, 0x3c, 0xd5, + 0x8d, 0xc2, 0x54, 0xfd, 0x7b, 0x38, 0x28, 0xf8, 0x91, 0xd4, 0xd9, 0xcf, 0x94, 0x3a, 0x4d, 0xfa, + 0x68, 0x1c, 0xb7, 0xc2, 0x29, 0xd4, 0xa5, 0xce, 0x94, 0x0a, 0x48, 0x64, 0x6e, 0x19, 0xd2, 0x7c, + 0xc0, 0x1f, 0xf4, 0xb0, 0xf4, 0x88, 0xf7, 0xc3, 0x0c, 0x19, 0xde, 0xf8, 0x9a, 0x2c, 0x9a, 0x37, + 0xc8, 0xff, 0x06, 0xd0, 0xc5, 0xb8, 0x1f, 0x90, 0xd0, 0x01, 0xfe, 0xed, 0x9e, 0xff, 0x72, 0xc0, + 0x9d, 0x15, 0xb7, 0x69, 0x71, 0x31, 0x2d, 0xce, 0xd3, 0xe2, 0x42, 0x5a, 0x8b, 0x74, 0x67, 0xb6, + 0x4e, 0x40, 0x62, 0x76, 0x4d, 0x79, 0x4a, 0x2b, 0x6e, 0x87, 0x11, 0xc6, 0xa9, 0x55, 0x6c, 0x59, + 0x45, 0x8e, 0x62, 0x35, 0xd8, 0x21, 0x8c, 0xfb, 0xd7, 0xd1, 0x08, 0xab, 0x65, 0xcf, 0xa9, 0x97, + 0xc2, 0x19, 0xf6, 0x6f, 0xc1, 0x3d, 0x1d, 0x22, 0x57, 0xd9, 0x78, 0x8e, 0xa0, 0x3c, 0x59, 0xb8, + 0x5f, 0x8b, 0xb4, 0x45, 0x22, 0xb3, 0x9b, 0xb7, 0x0d, 0xce, 0xf0, 0xf2, 0xf0, 0x4a, 0xc5, 0x77, + 0xf8, 0x16, 0xf6, 0xe6, 0x45, 0xfe, 0x66, 0x0c, 0xad, 0x9f, 0x25, 0xd8, 0xd4, 0xdb, 0xcc, 0xbe, + 0x40, 0x65, 0x69, 0x8d, 0xd8, 0xb3, 0x15, 0x37, 0x51, 0x5c, 0xdd, 0xda, 0xf3, 0x75, 0x64, 0x24, + 0x59, 0x02, 0x87, 0x97, 0x93, 0xe1, 0x30, 0xb0, 0x2f, 0xa5, 0xfd, 0xd8, 0xc5, 0xb1, 0x79, 0x2e, + 0x2f, 0x56, 0xfc, 0x7f, 0x95, 0x50, 0xd7, 0x7a, 0xb9, 0xb6, 0x96, 0x24, 0x6b, 0xc1, 0x76, 0xb6, + 0x23, 0x8c, 0x4d, 0x1f, 0xed, 0x7c, 0x63, 0x6b, 0x07, 0x05, 0x8e, 0x24, 0xbb, 0x02, 0xe8, 0xe0, + 0x30, 0x20, 0x61, 0x5a, 0xf3, 0x56, 0x94, 0x9b, 0x1f, 0x6b, 0x93, 0xe3, 0x27, 0x14, 0x24, 0xd9, + 0x09, 0xec, 0x4c, 0x2f, 0x89, 0xcd, 0x6a, 0xe6, 0x76, 0xa3, 0x76, 0x58, 0x24, 0x49, 0xb6, 0x2b, + 0x9f, 0xf7, 0x1b, 0xe6, 0x13, 0xf4, 0xc6, 0x9e, 0xde, 0x94, 0xcd, 0xf7, 0xe5, 0xd5, 0x9f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x88, 0x55, 0xa7, 0xa7, 0x9d, 0x06, 0x00, 0x00, } diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index 5fd88be5c..74ea0f396 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -22,6 +22,14 @@ message PushMsgDataToMQ{ server_api_params.MsgData msgData = 2; string pushToUserID = 3; } +message MsgDataToMongoByMQ{ + uint64 lastSeq =1; + string aggregationID = 2; + repeated MsgDataToMQ messageList = 3; + string triggerID = 4; + + +} //message PullMessageReq { // string UserID = 1; From 5e51eebe8abd04af6d601db7737bc4191657bcc5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 12:21:49 +0800 Subject: [PATCH 570/752] msg handle --- config/config.yaml | 3 +++ docker-compose.yaml | 2 +- internal/msg_transfer/logic/init.go | 2 ++ .../logic/online_history_msg_handler.go | 16 +++++++++----- pkg/common/config/config.go | 4 ++++ pkg/common/db/model.go | 22 +++++++++---------- 6 files changed, 32 insertions(+), 17 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index a3e836a15..85c5bc9f1 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -47,6 +47,9 @@ kafka: ws2mschatoffline: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat_offline" + msgtomongo: + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + topic: "msg_to_mongo" ms2pschat: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" diff --git a/docker-compose.yaml b/docker-compose.yaml index 4a419ae1b..e1d2a98b2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_CREATE_TOPICS: "ws2ms_chat:2:1,ms2ps_chat:2:1" + KAFKA_CREATE_TOPICS: "ws2ms_chat:2:1,ms2ps_chat:2:1,msg_to_mongo:2:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 8829906e4..65457878c 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -22,6 +22,7 @@ var ( persistentCH PersistentConsumerHandler historyCH OnlineHistoryConsumerHandler producer *kafka.Producer + producerToMongo *kafka.Producer cmdCh chan Cmd2Value onlineTopicStatus int w *sync.Mutex @@ -43,6 +44,7 @@ func Init() { statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) producer = kafka.NewKafkaProducer(config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.Ms2pschat.Topic) + producerToMongo = kafka.NewKafkaProducer(config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.MsgToMongo.Topic) } func Run() { //register mysqlConsumerHandler to diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index afacf097c..42684c7ff 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -155,11 +155,17 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { - hashCode := getHashCode(aggregationID) - channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) - //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} + pid, offset, err := producerToMongo.SendMessage(&pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID) + if err != nil { + log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) + } else { + // log.NewWarn(m.OperationID, "sendMsgToKafka client msgID ", m.MsgData.ClientMsgID) + } + //hashCode := getHashCode(aggregationID) + //channelID := hashCode % ChannelNum + //log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) + ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + //och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { for { diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index dff8a693e..0618ca7d7 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -203,6 +203,10 @@ type config struct { Addr []string `yaml:"addr"` Topic string `yaml:"topic"` } + MsgToMongo struct { + Addr []string `yaml:"addr"` + Topic string `yaml:"topic"` + } Ms2pschat struct { Addr []string `yaml:"addr"` Topic string `yaml:"topic"` diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 2418e7658..92bbca353 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.Client + rdb *go_redis.ClusterClient } func key(dbAddress, dbName string) string { @@ -112,17 +112,17 @@ func init() { // ) // }, //} - DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, - Password: config.Config.Redis.DBPassWord, // no password set - DB: 0, // use default DB - PoolSize: 100, // 连接池大小 - }) - //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - // Addrs: []string{config.Config.Redis.DBAddress}, - // PoolSize: 100, - // Password: config.Config.Redis.DBPassWord, + //DB.rdb = go_redis.NewClient(&go_redis.Options{ + // Addr: config.Config.Redis.DBAddress, + // Password: config.Config.Redis.DBPassWord, // no password set + // DB: 0, // use default DB + // PoolSize: 100, // 连接池大小 //}) + DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + Addrs: []string{config.Config.Redis.DBAddress}, + PoolSize: 50, + //Password: config.Config.Redis.DBPassWord, + }) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() _, err = DB.rdb.Ping(ctx).Result() From b6634d26d1b72027bdeafaf8474369ff9563b521 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 12:36:00 +0800 Subject: [PATCH 571/752] Merge branch 'superGroup' of github.com:OpenIMSDK/Open-IM-Server into superGroup --- internal/push/logic/push_to_client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 2664a39da..f02f6679e 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -65,6 +65,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { // save invitation info for offline push if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) + return } for _, v := range wsResult { if v.ResultCode == 0 { From 7e6e214f08c6c274bb72f593dff51654d5d86a2c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 12:41:31 +0800 Subject: [PATCH 572/752] add global recv opt --- internal/rpc/user/user.go | 17 ++++++++++++----- .../db/mysql_model/im_mysql_model/user_model.go | 14 +++++++++++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index bfe458dce..922ddc09d 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -391,12 +391,19 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } + err = imdb.UpdateUserInfoByMap(user, m) + if err != nil { + log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + } else { + err := imdb.UpdateUserInfo(user) + if err != nil { + log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } } - err := imdb.UpdateUserInfo(user, m) - if err != nil { - log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) client := pbFriend.NewFriendClient(etcdConn) newReq := &pbFriend.GetFriendListReq{ diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index e58ed8327..8882f6931 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -96,16 +96,24 @@ func GetUserNameByUserID(userID string) (string, error) { return user.Nickname, nil } -func UpdateUserInfo(user db.User, m ...map[string]interface{}) error { +func UpdateUserInfo(user db.User) error { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return err } dbConn.LogMode(false) err = dbConn.Table("users").Where("user_id=?", user.UserID).Update(&user).Error - if len(m) > 0 { - err = dbConn.Table("users").Where("user_id=?", user.UserID).Updates(m[0]).Error + + return err +} + +func UpdateUserInfoByMap(user db.User, m map[string]interface{}) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err } + dbConn.LogMode(false) + err = dbConn.Table("users").Where("user_id=?", user.UserID).Updates(m).Error return err } From 0a44a8e78a04747cc2acd02d9596f9e6f4d4cb71 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 12:53:39 +0800 Subject: [PATCH 573/752] add global recv opt --- internal/rpc/msg/send_msg.go | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 3dc98c3a7..6b6f33198 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -462,13 +462,29 @@ func returnMsg(replay *pbChat.SendMsgResp, pb *pbChat.SendMsgReq, errCode int32, } func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType int, pb *pbChat.SendMsgReq) bool { - conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) - opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) - if err != nil && err != go_redis.Nil { - log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), err.Error()) - return true + opt, err := db.DB.GetUserGlobalMsgRecvOpt(userID) + if err != nil { + log.NewError(pb.OperationID, "GetUserGlobalMsgRecvOpt from redis err", userID, pb.String(), err.Error()) + } switch opt { + case constant.ReceiveMessage: + case constant.NotReceiveMessage: + return false + case constant.ReceiveNotNotifyMessage: + if pb.MsgData.Options == nil { + pb.MsgData.Options = make(map[string]bool, 10) + } + utils.SetSwitchFromOptions(pb.MsgData.Options, constant.IsOfflinePush, false) + return true + } + conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) + singleOpt, sErr := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) + if sErr != nil && sErr != go_redis.Nil { + log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), sErr.Error()) + return true + } + switch singleOpt { case constant.ReceiveMessage: return true case constant.NotReceiveMessage: From 96d3ae86cc22d7bd94e659ce89179a4c199059fd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 13:41:18 +0800 Subject: [PATCH 574/752] Merge branch 'superGroup' of github.com:OpenIMSDK/Open-IM-Server into superGroup --- pkg/common/db/model.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 92bbca353..a6ed0408a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.ClusterClient + rdb *go_redis.Client } func key(dbAddress, dbName string) string { @@ -112,17 +112,17 @@ func init() { // ) // }, //} - //DB.rdb = go_redis.NewClient(&go_redis.Options{ - // Addr: config.Config.Redis.DBAddress, - // Password: config.Config.Redis.DBPassWord, // no password set - // DB: 0, // use default DB - // PoolSize: 100, // 连接池大小 - //}) - DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - Addrs: []string{config.Config.Redis.DBAddress}, - PoolSize: 50, - //Password: config.Config.Redis.DBPassWord, + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 }) + //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + // Addrs: []string{config.Config.Redis.DBAddress}, + // PoolSize: 50, + //Password: config.Config.Redis.DBPassWord, + //}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() _, err = DB.rdb.Ping(ctx).Result() From dbc2713495687fbff5689e9594a2fd4126b647ed Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:09:28 +0800 Subject: [PATCH 575/752] Handling exception: getcdv3.GetConn == nil --- internal/api/auth/auth.go | 24 ++- internal/api/chat/del_msg.go | 16 +- internal/api/chat/get_max_min_seq.go | 9 +- internal/api/conversation/conversation.go | 56 +++++- internal/api/friend/friend.go | 92 +++++++-- internal/api/group/group.go | 176 +++++++++++++++--- internal/api/group/super_group.go | 16 +- internal/api/manage/management_chat.go | 28 ++- internal/api/manage/management_user.go | 24 ++- internal/api/office/tag.go | 56 +++++- internal/cms_api/message_cms/message.go | 40 +++- internal/cms_api/statistics/statistics.go | 70 +++++-- internal/msg_gateway/gate/batch_push.go | 8 +- internal/msg_gateway/gate/logic.go | 46 ++++- .../logic/online_history_msg_handler.go | 2 +- internal/rpc/user/user.go | 8 +- pkg/common/constant/error.go | 1 + pkg/grpc-etcdv3/getcdv3/resolver.go | 33 ++-- 18 files changed, 588 insertions(+), 117 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 66a0c3825..84beaa32b 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -36,7 +36,13 @@ func UserRegister(c *gin.Context) { //copier.Copy(req.UserInfo, ¶ms) req.OperationID = params.OperationID log.NewInfo(req.OperationID, "UserRegister args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewAuthClient(etcdConn) reply, err := client.UserRegister(context.Background(), req) if err != nil { @@ -84,7 +90,13 @@ func UserToken(c *gin.Context) { } req := &rpc.UserTokenReq{Platform: params.Platform, FromUserID: params.UserID, OperationID: params.OperationID} log.NewInfo(req.OperationID, "UserToken args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewAuthClient(etcdConn) reply, err := client.UserToken(context.Background(), req) if err != nil { @@ -148,7 +160,13 @@ func ForceLogout(c *gin.Context) { } log.NewInfo(req.OperationID, "ForceLogout args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewAuthClient(etcdConn) reply, err := client.ForceLogout(context.Background(), req) if err != nil { diff --git a/internal/api/chat/del_msg.go b/internal/api/chat/del_msg.go index bad553938..cb13f3dca 100644 --- a/internal/api/chat/del_msg.go +++ b/internal/api/chat/del_msg.go @@ -30,7 +30,13 @@ func DelMsg(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, &req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) } - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID) + if grpcConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } msgClient := rpc.NewChatClient(grpcConn) respPb, err := msgClient.DelMsgList(context.Background(), &reqPb) if err != nil { @@ -67,7 +73,13 @@ func ClearMsg(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewChatClient(etcdConn) RpcResp, err := client.ClearMsg(context.Background(), req) if err != nil { diff --git a/internal/api/chat/get_max_min_seq.go b/internal/api/chat/get_max_min_seq.go index 5cca7c775..410a6ffb0 100644 --- a/internal/api/chat/get_max_min_seq.go +++ b/internal/api/chat/get_max_min_seq.go @@ -35,7 +35,14 @@ func GetSeq(c *gin.Context) { pbData := sdk_ws.GetMaxAndMinSeqReq{} pbData.UserID = params.SendID pbData.OperationID = params.OperationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, pbData.OperationID) + if grpcConn == nil { + errMsg := pbData.OperationID + " getcdv3.GetConn == nil" + log.NewError(pbData.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.GetMaxAndMinSeq(context.Background(), &pbData) if err != nil { diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go index 2e1709847..b60b89ed4 100644 --- a/internal/api/conversation/conversation.go +++ b/internal/api/conversation/conversation.go @@ -32,7 +32,13 @@ func SetConversation(c *gin.Context) { if err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -63,7 +69,13 @@ func ModifyConversationField(c *gin.Context) { if err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbConversation.NewConversationClient(etcdConn) respPb, err := client.ModifyConversationField(context.Background(), &reqPb) if err != nil { @@ -92,7 +104,13 @@ func BatchSetConversations(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.BatchSetConversations(context.Background(), &reqPb) if err != nil { @@ -124,7 +142,13 @@ func GetAllConversations(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.GetAllConversations(context.Background(), &reqPb) if err != nil { @@ -156,7 +180,13 @@ func GetConversation(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.GetConversation(context.Background(), &reqPb) if err != nil { @@ -188,7 +218,13 @@ func GetConversations(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.GetConversations(context.Background(), &reqPb) if err != nil { @@ -220,7 +256,13 @@ func SetRecvMsgOpt(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetRecvMsgOpt(context.Background(), &reqPb) if err != nil { diff --git a/internal/api/friend/friend.go b/internal/api/friend/friend.go index 58cf37f7f..e756983a9 100644 --- a/internal/api/friend/friend.go +++ b/internal/api/friend/friend.go @@ -36,7 +36,7 @@ func AddBlack(c *gin.Context) { } log.NewInfo(params.OperationID, "AddBlacklist args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.AddBlacklist(context.Background(), req) if err != nil { @@ -69,8 +69,14 @@ func ImportFriend(c *gin.Context) { } log.NewInfo(req.OperationID, "ImportFriend args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.ImportFriend(context.Background(), req) if err != nil { @@ -114,7 +120,13 @@ func AddFriend(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "AddFriend args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.AddFriend(context.Background(), req) if err != nil { @@ -153,7 +165,14 @@ func AddFriendResponse(c *gin.Context) { utils.CopyStructFields(req, ¶ms) log.NewInfo(req.CommID.OperationID, "AddFriendResponse args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.AddFriendResponse(context.Background(), req) if err != nil { @@ -189,7 +208,13 @@ func DeleteFriend(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "DeleteFriend args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.DeleteFriend(context.Background(), req) if err != nil { @@ -225,7 +250,13 @@ func GetBlacklist(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetBlacklist args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetBlacklist(context.Background(), req) if err != nil { @@ -268,7 +299,13 @@ func SetFriendRemark(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "SetFriendComment args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.SetFriendRemark(context.Background(), req) if err != nil { @@ -303,7 +340,14 @@ func RemoveBlack(c *gin.Context) { } log.NewInfo(req.CommID.OperationID, "RemoveBlacklist args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.RemoveBlacklist(context.Background(), req) if err != nil { @@ -338,7 +382,13 @@ func IsFriend(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "IsFriend args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.IsFriend(context.Background(), req) if err != nil { @@ -375,7 +425,13 @@ func GetFriendList(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetFriendList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetFriendList(context.Background(), req) if err != nil { @@ -413,7 +469,13 @@ func GetFriendApplyList(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetFriendApplyList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetFriendApplyList(context.Background(), req) @@ -451,7 +513,13 @@ func GetSelfFriendApplyList(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetSelfApplyList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetSelfApplyList(context.Background(), req) if err != nil { diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 529e7494c..d9b1bf9ff 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -43,7 +43,13 @@ func KickGroupMember(c *gin.Context) { log.NewInfo(req.OperationID, "KickGroupMember args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.KickGroupMember(context.Background(), req) if err != nil { @@ -88,7 +94,13 @@ func GetGroupMembersInfo(c *gin.Context) { log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupMembersInfo(context.Background(), req) @@ -126,7 +138,13 @@ func GetGroupMemberList(c *gin.Context) { log.NewInfo(req.OperationID, "GetGroupMemberList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupMemberList(context.Background(), req) @@ -165,7 +183,13 @@ func GetGroupAllMemberList(c *gin.Context) { log.NewInfo(req.OperationID, "GetGroupAllMember args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupAllMember(context.Background(), req) if err != nil { @@ -202,7 +226,13 @@ func GetJoinedGroupList(c *gin.Context) { log.NewInfo(req.OperationID, "GetJoinedGroupList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetJoinedGroupList(context.Background(), req) if err != nil { @@ -239,7 +269,13 @@ func InviteUserToGroup(c *gin.Context) { log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.InviteUserToGroup(context.Background(), req) if err != nil { @@ -291,7 +327,13 @@ func CreateGroup(c *gin.Context) { log.NewInfo(req.OperationID, "CreateGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.CreateGroup(context.Background(), req) if err != nil { @@ -328,7 +370,13 @@ func GetRecvGroupApplicationList(c *gin.Context) { //} log.NewInfo(req.OperationID, "GetGroupApplicationList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.GetGroupApplicationList(context.Background(), req) if err != nil { @@ -359,7 +407,13 @@ func GetUserReqGroupApplicationList(c *gin.Context) { // return //} log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetUserReqApplicationList(context.Background(), req) if err != nil { @@ -395,7 +449,13 @@ func GetGroupsInfo(c *gin.Context) { } log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupsInfo(context.Background(), req) if err != nil { @@ -433,7 +493,13 @@ func ApplicationGroupResponse(c *gin.Context) { log.NewInfo(req.OperationID, "ApplicationGroupResponse args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.GroupApplicationResponse(context.Background(), req) if err != nil { @@ -468,7 +534,13 @@ func JoinGroup(c *gin.Context) { } log.NewInfo(req.OperationID, "JoinGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.JoinGroup(context.Background(), req) @@ -504,7 +576,13 @@ func QuitGroup(c *gin.Context) { log.NewInfo(req.OperationID, "QuitGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.QuitGroup(context.Background(), req) if err != nil { @@ -540,7 +618,13 @@ func SetGroupInfo(c *gin.Context) { log.NewInfo(req.OperationID, "SetGroupInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.SetGroupInfo(context.Background(), req) if err != nil { @@ -575,7 +659,13 @@ func TransferGroupOwner(c *gin.Context) { log.NewInfo(req.OperationID, "TransferGroupOwner args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.TransferGroupOwner(context.Background(), req) if err != nil { @@ -611,7 +701,13 @@ func DismissGroup(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.DismissGroup(context.Background(), req) if err != nil { @@ -647,7 +743,13 @@ func MuteGroupMember(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.MuteGroupMember(context.Background(), req) if err != nil { @@ -683,7 +785,13 @@ func CancelMuteGroupMember(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.CancelMuteGroupMember(context.Background(), req) if err != nil { @@ -719,7 +827,13 @@ func MuteGroup(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.MuteGroup(context.Background(), req) if err != nil { @@ -755,7 +869,13 @@ func CancelMuteGroup(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.CancelMuteGroup(context.Background(), req) if err != nil { @@ -793,7 +913,13 @@ func SetGroupMemberNickname(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.SetGroupMemberNickname(context.Background(), req) if err != nil { @@ -846,7 +972,13 @@ func SetGroupMemberInfo(c *gin.Context) { reqPb.RoleLevel = &wrappers.Int32Value{Value: *req.RoleLevel} } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) respPb, err := client.SetGroupMemberInfo(context.Background(), reqPb) if err != nil { diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index c3b177dae..b5c123700 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -31,7 +31,13 @@ func GetJoinedSuperGroupList(c *gin.Context) { return } reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID, OpUserID: opUserID, UserID: req.FromUserID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb) if err != nil { @@ -61,7 +67,13 @@ func GetSuperGroupsInfo(c *gin.Context) { return } reqPb := rpc.GetSuperGroupsInfoReq{OperationID: req.OperationID, OpUserID: opUserID, GroupIDList: req.GroupIDList} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) rpcResp, err := client.GetSuperGroupsInfo(context.Background(), &reqPb) if err != nil { diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 5ed04bf7e..6c9cd5ece 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -138,7 +138,7 @@ func ManagementSendMsg(c *gin.Context) { log.Error(c.PostForm("operationID"), "data args validate err", err.Error()) return } - log.NewInfo("", data, params) + log.NewInfo(params.OperationID, data, params) token := c.Request.Header.Get("token") claims, err := token_verify.ParseToken(token, params.OperationID) if err != nil { @@ -169,12 +169,18 @@ func ManagementSendMsg(c *gin.Context) { log.NewInfo(params.OperationID, "Ws call success to ManagementSendMsgReq", params) pbData := newUserSendMsgReq(¶ms) - log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) + log.Info(params.OperationID, "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, params.OperationID) + if etcdConn == nil { + errMsg := params.OperationID + "getcdv3.GetConn == nil" + log.NewError(params.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbChat.NewChatClient(etcdConn) - log.Info("", "", "api ManagementSendMsg call, api call rpc...") + log.Info(params.OperationID, "", "api ManagementSendMsg call, api call rpc...") RpcResp, err := client.SendMsg(context.Background(), pbData) if err != nil { @@ -182,7 +188,7 @@ func ManagementSendMsg(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"}) return } - log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String()) + log.Info(params.OperationID, "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String()) resp := api.ManagementSendMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, ResultList: server_api_params.UserSendMsgResp{ServerMsgID: RpcResp.ServerMsgID, ClientMsgID: RpcResp.ClientMsgID, SendTime: RpcResp.SendTime}} log.Info(params.OperationID, "ManagementSendMsg return", resp) c.JSON(http.StatusOK, resp) @@ -239,7 +245,7 @@ func ManagementBatchSendMsg(c *gin.Context) { log.Error(c.PostForm("operationID"), "data args validate err", err.Error()) return } - log.NewInfo("", data, params) + log.NewInfo(params.OperationID, data, params) token := c.Request.Header.Get("token") claims, err := token_verify.ParseToken(token, params.OperationID) if err != nil { @@ -256,8 +262,14 @@ func ManagementBatchSendMsg(c *gin.Context) { for _, recvID := range params.RecvIDList { pbData := newUserSendMsgReq(¶ms.ManagementSendMsgReq) pbData.MsgData.RecvID = recvID - log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + log.Info(params.OperationID, "", "api ManagementSendMsg call start..., ", pbData.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, params.OperationID) + if etcdConn == nil { + errMsg := params.OperationID + "getcdv3.GetConn == nil" + log.NewError(params.OperationID, errMsg) + resp.Data.FailedIDList = append(resp.Data.FailedIDList, recvID) + continue + } client := pbChat.NewChatClient(etcdConn) rpcResp, err := client.SendMsg(context.Background(), pbData) if err != nil { diff --git a/internal/api/manage/management_user.go b/internal/api/manage/management_user.go index 6fc9d161d..62d2d6651 100644 --- a/internal/api/manage/management_user.go +++ b/internal/api/manage/management_user.go @@ -42,7 +42,13 @@ func DeleteUser(c *gin.Context) { } log.NewInfo(params.OperationID, "DeleteUser args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.DeleteUsers(context.Background(), req) @@ -78,7 +84,13 @@ func GetAllUsersUid(c *gin.Context) { } log.NewInfo(params.OperationID, "GetAllUsersUid args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetAllUserID(context.Background(), req) if err != nil { @@ -114,7 +126,13 @@ func AccountCheck(c *gin.Context) { } log.NewInfo(params.OperationID, "AccountCheck args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.AccountCheck(context.Background(), req) diff --git a/internal/api/office/tag.go b/internal/api/office/tag.go index 02278f60e..9617d381d 100644 --- a/internal/api/office/tag.go +++ b/internal/api/office/tag.go @@ -42,7 +42,13 @@ func GetUserTags(c *gin.Context) { reqPb.UserID = userID reqPb.OperationID = req.OperationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserTags(context.Background(), &reqPb) if err != nil { @@ -89,7 +95,13 @@ func CreateTag(c *gin.Context) { } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.CreateTag(context.Background(), &reqPb) if err != nil { @@ -131,7 +143,13 @@ func DeleteTag(c *gin.Context) { } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.DeleteTag(context.Background(), &reqPb) if err != nil { @@ -173,7 +191,13 @@ func SetTag(c *gin.Context) { } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.SetTag(context.Background(), &reqPb) if err != nil { @@ -215,7 +239,13 @@ func SendMsg2Tag(c *gin.Context) { } reqPb.SendID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.SendMsg2Tag(context.Background(), &reqPb) if err != nil { @@ -259,7 +289,13 @@ func GetTagSendLogs(c *gin.Context) { PageNumber: req.PageNumber, ShowNumber: req.ShowNumber, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) maxSizeOption := grpc.MaxCallRecvMsgSize(1024 * 1024 * 20) respPb, err := client.GetTagSendLogs(context.Background(), &reqPb, maxSizeOption) @@ -308,7 +344,13 @@ func GetUserTagByID(c *gin.Context) { reqPb.UserID = userID reqPb.OperationID = req.OperationID reqPb.TagID = req.TagID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserTagByID(context.Background(), &reqPb) if err != nil { diff --git a/internal/cms_api/message_cms/message.go b/internal/cms_api/message_cms/message.go index 0a56bb99a..bd5949771 100644 --- a/internal/cms_api/message_cms/message.go +++ b/internal/cms_api/message_cms/message.go @@ -10,6 +10,7 @@ import ( pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "net/http" "strings" "Open_IM/pkg/common/constant" @@ -21,7 +22,14 @@ func BroadcastMessage(c *gin.Context) { var ( reqPb pbMessage.BoradcastMessageReq ) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) _, err := client.BoradcastMessage(context.Background(), &reqPb) if err != nil { @@ -36,7 +44,14 @@ func MassSendMassage(c *gin.Context) { var ( reqPb pbMessage.MassSendMessageReq ) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) _, err := client.MassSendMessage(context.Background(), &reqPb) if err != nil { @@ -51,7 +66,14 @@ func WithdrawMessage(c *gin.Context) { var ( reqPb pbMessage.WithdrawMessageReq ) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) _, err := client.WithdrawMessage(context.Background(), &reqPb) if err != nil { @@ -78,8 +100,14 @@ func GetChatLogs(c *gin.Context) { ShowNumber: int32(req.ShowNumber), } utils.CopyStructFields(&reqPb, &req) - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) respPb, err := client.GetChatLogs(context.Background(), &reqPb) if err != nil { @@ -106,6 +134,6 @@ func GetChatLogs(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.ChatLogsNum = int(respPb.ChatLogsNum) - log.NewInfo("", utils.GetSelfFuncName(), "resp", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } diff --git a/internal/cms_api/statistics/statistics.go b/internal/cms_api/statistics/statistics.go index 89fb6056b..b33bdee12 100644 --- a/internal/cms_api/statistics/statistics.go +++ b/internal/cms_api/statistics/statistics.go @@ -10,6 +10,7 @@ import ( pb "Open_IM/pkg/proto/statistics" "Open_IM/pkg/utils" "context" + "net/http" "strings" "github.com/gin-gonic/gin" @@ -27,9 +28,16 @@ func GetMessagesStatistics(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetMessageStatistics(context.Background(), &reqPb) if err != nil { @@ -58,7 +66,7 @@ func GetMessagesStatistics(c *gin.Context) { MessageNum: int(v.Num), }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -74,13 +82,20 @@ func GetUserStatistics(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetUserStatistics(context.Background(), &reqPb) if err != nil { - log.NewError("0", utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error()) + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } @@ -115,7 +130,7 @@ func GetUserStatistics(c *gin.Context) { TotalUserNum: int(v.Num), }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -131,9 +146,16 @@ func GetGroupStatistics(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetGroupStatistics(context.Background(), &reqPb) if err != nil { @@ -165,7 +187,7 @@ func GetGroupStatistics(c *gin.Context) { }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -181,9 +203,16 @@ func GetActiveUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetActiveUser(context.Background(), &reqPb) if err != nil { @@ -192,7 +221,7 @@ func GetActiveUser(c *gin.Context) { return } utils.CopyStructFields(&resp.ActiveUserList, respPb.Users) - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -208,13 +237,20 @@ func GetActiveGroup(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetActiveGroup(context.Background(), &reqPb) if err != nil { - log.NewError("0", utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error()) + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } @@ -229,6 +265,6 @@ func GetActiveGroup(c *gin.Context) { MessageNum: int(group.MessageNum), }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 6640fa485..76055d23b 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -89,7 +89,13 @@ func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, u rpcReq.SeqList = seqList rpcReq.UserID = userID rpcReq.OperationID = operationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, rpcReq.OperationID) + if grpcConn == nil { + errMsg := "getcdv3.GetConn == nil" + log.NewError(rpcReq.OperationID, errMsg) + return nil + } + msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) if err != nil { diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 95b6fd85c..2ece3bd94 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -68,7 +68,15 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { rpcReq.UserID = m.SendID rpcReq.OperationID = m.OperationID log.Debug(m.OperationID, "Ws call success to getMaxAndMinSeq", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList) - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, rpcReq.OperationID) + if grpcConn == nil { + errMsg := rpcReq.OperationID + "getcdv3.GetConn == nil" + nReply.ErrCode = 500 + nReply.ErrMsg = errMsg + log.NewError(rpcReq.OperationID, errMsg) + ws.getSeqResp(conn, m, nReply) + return + } msgClient := pbChat.NewChatClient(grpcConn) rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) if err != nil { @@ -115,7 +123,15 @@ func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { rpcReq.OperationID = m.OperationID rpcReq.GroupSeqList = data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList) - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, m.OperationID) + if grpcConn == nil { + errMsg := rpcReq.OperationID + "getcdv3.GetConn == nil" + nReply.ErrCode = 500 + nReply.ErrMsg = errMsg + log.NewError(rpcReq.OperationID, errMsg) + ws.pullMsgBySeqListResp(conn, m, nReply) + return + } msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) if err != nil { @@ -166,7 +182,15 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { MsgData: &data, } log.NewInfo(m.OperationID, "Ws call success to sendMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, data) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, m.OperationID) + if etcdConn == nil { + errMsg := m.OperationID + "getcdv3.GetConn == nil" + nReply.ErrCode = 500 + nReply.ErrMsg = errMsg + log.NewError(m.OperationID, errMsg) + ws.sendMsgResp(conn, m, nReply) + return + } client := pbChat.NewChatClient(etcdConn) reply, err := client.SendMsg(context.Background(), &pbData) if err != nil { @@ -209,7 +233,13 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg, m.OperationID) if isPass { signalResp := pbRtc.SignalResp{} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName, m.OperationID) + if etcdConn == nil { + errMsg := m.OperationID + "getcdv3.GetConn == nil" + log.NewError(m.OperationID, errMsg) + ws.sendSignalMsgResp(conn, 204, errMsg, m, &signalResp) + return + } rtcClient := pbRtc.NewRtcServiceClient(etcdConn) req := &pbRtc.SignalMessageAssembleReq{ SignalReq: pData.(*pbRtc.SignalReq), @@ -233,7 +263,13 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { } log.NewInfo(m.OperationID, utils.GetSelfFuncName(), "pbData: ", pbData) log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, msgData) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, m.OperationID) + if etcdConn == nil { + errMsg := m.OperationID + "getcdv3.GetConn == nil" + log.NewError(m.OperationID, errMsg) + ws.sendSignalMsgResp(conn, 200, errMsg, m, &signalResp) + return + } client := pbChat.NewChatClient(etcdConn) reply, err := client.SendMsg(context.Background(), &pbData) if err != nil { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index afacf097c..c5e85b4e4 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -538,7 +538,7 @@ func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { log.Info(message.OperationID, "msg_transfer send message to push", "message", message.String()) rpcPushMsg := pbPush.PushMsgReq{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID} mqPushMsg := pbMsg.PushMsgDataToMQ{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID} - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName, message.OperationID) if grpcConn == nil { log.Error(rpcPushMsg.OperationID, "rpc dial failed", "push data", rpcPushMsg.String()) pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID, rpcPushMsg.OperationID) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index bfe458dce..0d7a2fc82 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -397,7 +397,13 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } + client := pbFriend.NewFriendClient(etcdConn) newReq := &pbFriend.GetFriendListReq{ CommID: &pbFriend.CommID{OperationID: req.OperationID, FromUserID: req.UserInfo.UserID, OpUserID: req.OpUserID}, diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index 52c1253e1..08a3c23f8 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -56,6 +56,7 @@ var ( ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} ErrMessageHasReadDisable = ErrInfo{ErrCode: 811, ErrMsg: "message has read disable"} + ErrInternal = ErrInfo{ErrCode: 812, ErrMsg: "internal error"} ) var ( diff --git a/pkg/grpc-etcdv3/getcdv3/resolver.go b/pkg/grpc-etcdv3/getcdv3/resolver.go index 5d7f9e828..b72df5fc9 100644 --- a/pkg/grpc-etcdv3/getcdv3/resolver.go +++ b/pkg/grpc-etcdv3/getcdv3/resolver.go @@ -2,6 +2,7 @@ package getcdv3 import ( "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "context" "fmt" "go.etcd.io/etcd/api/v3/mvccpb" @@ -32,12 +33,13 @@ var ( rwNameResolverMutex sync.RWMutex ) -func NewResolver(schema, etcdAddr, serviceName string) (*Resolver, error) { +func NewResolver(schema, etcdAddr, serviceName string, operationID string) (*Resolver, error) { etcdCli, err := clientv3.New(clientv3.Config{ Endpoints: strings.Split(etcdAddr, ","), }) if err != nil { - return nil, err + log.Error(operationID, "etcd client v3 failed") + return nil, utils.Wrap(err, "") } var r Resolver @@ -51,18 +53,11 @@ func NewResolver(schema, etcdAddr, serviceName string) (*Resolver, error) { conn, err := grpc.DialContext(ctx, GetPrefix(schema, serviceName), grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name)), grpc.WithInsecure()) - log.Debug("", "etcd key ", GetPrefix(schema, serviceName)) - - //conn, err := grpc.Dial( - // GetPrefix(schema, serviceName), - // grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name)), - // grpc.WithInsecure(), - // grpc.WithTimeout(time.Duration(5)*time.Second), - //) + log.Debug(operationID, "etcd key ", GetPrefix(schema, serviceName)) if err == nil { r.grpcClientConn = conn } - return &r, err + return &r, utils.Wrap(err, "") } func (r1 *Resolver) ResolveNow(rn resolver.ResolveNowOptions) { @@ -71,12 +66,12 @@ func (r1 *Resolver) ResolveNow(rn resolver.ResolveNowOptions) { func (r1 *Resolver) Close() { } -func GetConn(schema, etcdaddr, serviceName string) *grpc.ClientConn { +func GetConn(schema, etcdaddr, serviceName string, operationID string) *grpc.ClientConn { rwNameResolverMutex.RLock() r, ok := nameResolver[schema+serviceName] rwNameResolverMutex.RUnlock() if ok { - log.Debug("", "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) + log.Debug(operationID, "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) return r.grpcClientConn } @@ -84,18 +79,18 @@ func GetConn(schema, etcdaddr, serviceName string) *grpc.ClientConn { r, ok = nameResolver[schema+serviceName] if ok { rwNameResolverMutex.Unlock() - log.Debug("", "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) + log.Debug(operationID, "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) return r.grpcClientConn } - r, err := NewResolver(schema, etcdaddr, serviceName) + r, err := NewResolver(schema, etcdaddr, serviceName, operationID) if err != nil { - log.Error("", "etcd failed ", schema, etcdaddr, serviceName) + log.Error(operationID, "etcd failed ", schema, etcdaddr, serviceName, err.Error()) rwNameResolverMutex.Unlock() return nil } - log.Debug("", "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) + log.Debug(operationID, "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) nameResolver[schema+serviceName] = r rwNameResolverMutex.Unlock() return r.grpcClientConn @@ -220,7 +215,7 @@ func GetConn4Unique(schema, etcdaddr, servicename string) []*grpc.ClientConn { allConn := make([]*grpc.ClientConn, 0) for _, v := range allService { - r := GetConn(schema, etcdaddr, v) + r := GetConn(schema, etcdaddr, v, "0") allConn = append(allConn, r) } @@ -233,7 +228,7 @@ var ( ) func GetconnFactory(schema, etcdaddr, servicename string) (*grpc.ClientConn, error) { - c := GetConn(schema, etcdaddr, servicename) + c := GetConn(schema, etcdaddr, servicename, "0") if c != nil { return c, nil } else { From 02c594d4ece2a193c2011b3c3fbd2373e7a3d1db Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:26:03 +0800 Subject: [PATCH 576/752] Handling exception: getcdv3.GetConn == nil --- internal/rpc/msg/send_msg.go | 44 +++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 6b6f33198..c20407604 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -74,7 +74,13 @@ func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) } log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, data.OperationID) + if etcdConn == nil { + errMsg := data.OperationID + "getcdv3.GetConn == nil" + log.NewError(data.OperationID, errMsg) + return true, 0, "" + } + cacheClient := cacheRpc.NewCacheClient(etcdConn) cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) if err != nil { @@ -91,7 +97,12 @@ func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) if config.Config.MessageVerify.FriendVerify { reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, data.OperationID) + if etcdConn == nil { + errMsg := data.OperationID + "getcdv3.GetConn == nil" + log.NewError(data.OperationID, errMsg) + return true, 0, "" + } cacheClient := cacheRpc.NewCacheClient(etcdConn) cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) if err != nil { @@ -243,7 +254,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) } getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pb.OperationID, GroupID: pb.MsgData.GroupID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, msgToMQSingle.OperationID) + if etcdConn == nil { + errMsg := msgToMQSingle.OperationID + "getcdv3.GetConn == nil" + log.NewError(msgToMQSingle.OperationID, errMsg) + return returnMsg(&replay, pb, 201, errMsg, "", 0) + } client := pbCache.NewCacheClient(etcdConn) cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) if err != nil { @@ -351,7 +367,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S conversationReq.UserIDList = pb.MsgData.AtUserIDList conversation.GroupAtType = constant.AtMe } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, pb.OperationID) + if etcdConn == nil { + errMsg := pb.OperationID + "getcdv3.GetConn == nil" + log.NewError(pb.OperationID, errMsg) + return + } client := pbConversation.NewConversationClient(etcdConn) conversationReply, err := client.ModifyConversationField(context.Background(), &conversationReq) if err != nil { @@ -362,7 +383,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S if tag { conversationReq.UserIDList = utils.DifferenceString(atUserID, memberUserIDList) conversation.GroupAtType = constant.AtAll - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, pb.OperationID) + if etcdConn == nil { + errMsg := pb.OperationID + "getcdv3.GetConn == nil" + log.NewError(pb.OperationID, errMsg) + return + } client := pbConversation.NewConversationClient(etcdConn) conversationReply, err := client.ModifyConversationField(context.Background(), &conversationReq) if err != nil { @@ -794,7 +820,13 @@ func Notification(n *NotificationMsg) { offlineInfo.Ex = ex msg.OfflinePushInfo = &offlineInfo req.MsgData = &msg - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return + } + client := pbChat.NewChatClient(etcdConn) reply, err := client.SendMsg(context.Background(), &req) if err != nil { From 90442e3e39fee450ea06b3cabd116cd6ce417eeb Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:27:57 +0800 Subject: [PATCH 577/752] Handling exception: getcdv3.GetConn == nil --- internal/rpc/msg/tag_send_msg.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/tag_send_msg.go b/internal/rpc/msg/tag_send_msg.go index a79a90ec6..7354961db 100644 --- a/internal/rpc/msg/tag_send_msg.go +++ b/internal/rpc/msg/tag_send_msg.go @@ -33,7 +33,13 @@ func TagSendMessage(operationID string, user *db.User, recvID, content string, s msgData.SenderPlatformID = senderPlatformID req.MsgData = &msgData req.OperationID = operationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, operationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return + } + client := pbChat.NewChatClient(etcdConn) respPb, err := client.SendMsg(context.Background(), &req) if err != nil { From 56cf46a3a4611ecbfd0b61eca0dbe450d7eccf22 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:31:41 +0800 Subject: [PATCH 578/752] Handling exception: getcdv3.GetConn == nil --- internal/api/chat/pull_msg.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/api/chat/pull_msg.go b/internal/api/chat/pull_msg.go index 787ae7141..3e1a2314f 100644 --- a/internal/api/chat/pull_msg.go +++ b/internal/api/chat/pull_msg.go @@ -51,7 +51,13 @@ func PullMsgBySeqList(c *gin.Context) { pbData.OperationID = params.OperationID pbData.SeqList = params.SeqList - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, pbData.OperationID) + if grpcConn == nil { + errMsg := pbData.OperationID + "getcdv3.GetConn == nil" + log.NewError(pbData.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &pbData) if err != nil { From eab9e4ab9290431db23a874629fdd58ce8859a16 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:33:52 +0800 Subject: [PATCH 579/752] Handling exception: getcdv3.GetConn == nil --- internal/api/office/work_moments.go | 74 +++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/internal/api/office/work_moments.go b/internal/api/office/work_moments.go index 82716a4f8..ae4863b75 100644 --- a/internal/api/office/work_moments.go +++ b/internal/api/office/work_moments.go @@ -44,7 +44,14 @@ func CreateOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.WorkMoment.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.CreateOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -89,7 +96,14 @@ func DeleteOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.DeleteOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -133,7 +147,13 @@ func LikeOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.LikeOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -177,7 +197,13 @@ func CommentOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.CommentOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -219,7 +245,13 @@ func DeleteComment(c *gin.Context) { return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.DeleteComment(context.Background(), &reqPb) if err != nil { @@ -262,7 +294,13 @@ func GetWorkMomentByID(c *gin.Context) { reqPb.OperationID = req.OperationID reqPb.OpUserID = userID reqPb.WorkMomentID = req.WorkMomentID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetWorkMomentByID(context.Background(), &reqPb) if err != nil { @@ -314,7 +352,13 @@ func GetUserWorkMoments(c *gin.Context) { } reqPb.OpUserID = opUserID reqPb.UserID = req.UserID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserWorkMoments(context.Background(), &reqPb) if err != nil { @@ -411,7 +455,13 @@ func GetUserFriendWorkMoments(c *gin.Context) { ShowNumber: req.ShowNumber, } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserFriendWorkMoments(context.Background(), &reqPb) if err != nil { @@ -506,7 +556,13 @@ func SetUserWorkMomentsLevel(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.SetUserWorkMomentsLevel(context.Background(), &reqPb) if err != nil { From 50df9bdf4e528d922a84dcdbf27a3b472e3e0fcd Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:35:24 +0800 Subject: [PATCH 580/752] Handling exception: getcdv3.GetConn == nil --- internal/api/user/user.go | 48 ++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 9f9e5d70a..3a760d4ec 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -38,7 +38,13 @@ func GetUsersInfoFromCache(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetUserInfo(context.Background(), req) if err != nil { @@ -80,7 +86,13 @@ func GetFriendIDListFromCache(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := cacheRpc.NewCacheClient(etcdConn) respPb, err := client.GetFriendIDListFromCache(context.Background(), &reqPb) if err != nil { @@ -116,7 +128,13 @@ func GetBlackIDListFromCache(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := cacheRpc.NewCacheClient(etcdConn) respPb, err := client.GetBlackIDListFromCache(context.Background(), &reqPb) if err != nil { @@ -151,7 +169,13 @@ func GetUsersInfo(c *gin.Context) { log.NewInfo(params.OperationID, "GetUserInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetUserInfo(context.Background(), req) if err != nil { @@ -194,7 +218,13 @@ func UpdateUserInfo(c *gin.Context) { if params.GlobalRecvMsgOpt != nil { req.GlobalRecvMsgOpt.Value = *params.GlobalRecvMsgOpt } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.UpdateUserInfo(context.Background(), req) if err != nil { @@ -231,7 +261,13 @@ func GetSelfUserInfo(c *gin.Context) { req.UserIDList = append(req.UserIDList, req.OpUserID) log.NewInfo(params.OperationID, "GetUserInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetUserInfo(context.Background(), req) if err != nil { From 066a7041d8d7b7399c7af690ec4a6e7fa900a0fe Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:36:59 +0800 Subject: [PATCH 581/752] Handling exception: getcdv3.GetConn == nil --- internal/push/logic/push_to_client.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index f82c484bb..7f94e7870 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -147,7 +147,13 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) log.Debug(pushMsg.OperationID, "Get super group msg from msg_transfer And push msg", pushMsg.String()) getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pushMsg.OperationID, GroupID: pushMsg.MsgData.GroupID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, pushMsg.OperationID) + if etcdConn == nil { + errMsg := pushMsg.OperationID + "getcdv3.GetConn == nil" + log.NewError(pushMsg.OperationID, errMsg) + return + } + client := pbCache.NewCacheClient(etcdConn) cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) if err != nil { From 8d3d41831d11c120dfeabd21e3533c1c020876ff Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:39:31 +0800 Subject: [PATCH 582/752] Handling exception: getcdv3.GetConn == nil --- internal/demo/register/onboarding_process.go | 28 +++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 42e579d70..a4da17259 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -50,7 +50,12 @@ func createOrganizationUser(operationID, userID, userName string) error { log.NewInfo(operationID, utils.GetSelfFuncName(), userID) }() log.NewInfo(operationID, utils.GetSelfFuncName(), "start createOrganizationUser") - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return errors.New(errMsg) + } client := organizationRpc.NewOrganizationClient(etcdConn) req := &organizationRpc.CreateOrganizationUserReq{ OrganizationUser: &commonPb.OrganizationUser{ @@ -85,7 +90,12 @@ func joinTestDepartment(operationID, userID, departmentID string) error { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID) }() - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return errors.New(errMsg) + } client := organizationRpc.NewOrganizationClient(etcdConn) req := &organizationRpc.CreateDepartmentMemberReq{ DepartmentMember: &commonPb.DepartmentMember{ @@ -112,7 +122,12 @@ func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), departmentID) }() - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return nil, errors.New(errMsg) + } client := organizationRpc.NewOrganizationClient(etcdConn) req := organizationRpc.GetDepartmentParentIDListReq{ DepartmentID: departmentID, @@ -146,7 +161,12 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupIDList) }() - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return + } client := groupRpc.NewGroupClient(etcdConn) for _, groupID := range groupIDList { req := &groupRpc.InviteUserToGroupReq{ From b3dcff2d76dc857ad489c37d36fbcf2204528d70 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 14:45:39 +0800 Subject: [PATCH 583/752] redis interface --- config/config.yaml | 1 + pkg/common/config/config.go | 1 + pkg/common/db/model.go | 44 ++++++++++++++++++++++++------------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 85c5bc9f1..4d9569d07 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -39,6 +39,7 @@ redis: dbMaxActive: 0 dbIdleTimeout: 120 dbPassWord: openIM #redis密码 建议修改 + enableCluster: false kafka: ws2mschat: diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 0618ca7d7..185236744 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -102,6 +102,7 @@ type config struct { DBMaxActive int `yaml:"dbMaxActive"` DBIdleTimeout int `yaml:"dbIdleTimeout"` DBPassWord string `yaml:"dbPassWord"` + EnableCluster bool `yaml:"enableCluster"` } RpcPort struct { OpenImUserPort []int `yaml:"openImUserPort"` diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index a6ed0408a..895bea53a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,14 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.Client + rdb go_redis.UniversalClient +} + +type RedisClient struct { + client *go_redis.Client + cluster *go_redis.ClusterClient + go_redis.UniversalClient + enableCluster bool } func key(dbAddress, dbName string) string { @@ -112,22 +119,29 @@ func init() { // ) // }, //} - DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, - Password: config.Config.Redis.DBPassWord, // no password set - DB: 0, // use default DB - PoolSize: 100, // 连接池大小 - }) - //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - // Addrs: []string{config.Config.Redis.DBAddress}, - // PoolSize: 50, - //Password: config.Config.Redis.DBPassWord, - //}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - _, err = DB.rdb.Ping(ctx).Result() - if err != nil { - panic(err.Error()) + if config.Config.Redis.EnableCluster { + DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + Addrs: []string{config.Config.Redis.DBAddress}, + PoolSize: 50, + Password: config.Config.Redis.DBPassWord, + }) + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } + } else { + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 + }) + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } } } From 57d96b85f1edffa702c776c963e0f4f8f496d32b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 14:47:39 +0800 Subject: [PATCH 584/752] add global recv opt --- pkg/common/db/model.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 895bea53a..bc8af133d 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -125,7 +125,6 @@ func init() { DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ Addrs: []string{config.Config.Redis.DBAddress}, PoolSize: 50, - Password: config.Config.Redis.DBPassWord, }) _, err = DB.rdb.Ping(ctx).Result() if err != nil { From 89aef130a555733b2eb6f6da515ce64225525fca Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:51:36 +0800 Subject: [PATCH 585/752] Handling exception: getcdv3.GetConn == nil --- internal/rpc/group/group.go | 121 +++++++++++++++++++++++++++++++----- 1 file changed, 104 insertions(+), 17 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 79c186013..147e06b63 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -187,7 +187,12 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR GroupID: groupId, OperationID: req.OperationID, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.CreateGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -332,7 +337,12 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite c.IsNotInGroup = false c.Ex = v.Ex reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -349,7 +359,12 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite c.GroupID = req.GroupID c.IsNotInGroup = false reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -371,7 +386,12 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite GroupID: req.GroupID, OperationID: req.OperationID, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -550,7 +570,14 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou c.GroupID = req.GroupID c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + resp.ErrCode = constant.ErrInternal.ErrCode + resp.ErrMsg = errMsg + return &resp, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -574,7 +601,12 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou GroupID: req.GroupID, OperationID: req.OperationID, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.ReduceGroupMemberFromCache(context.Background(), reduceGroupMemberFromCacheReq) if err != nil { @@ -731,7 +763,12 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G c.Ex = conversation.Ex } reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -740,7 +777,12 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String()) } addGroupMemberToCacheReq := &pbCache.AddGroupMemberToCacheReq{OperationID: req.OperationID, GroupID: req.GroupID, UserIDList: []string{req.FromUserID}} - etcdCacheConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdCacheConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } cacheClient := pbCache.NewCacheClient(etcdCacheConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -834,7 +876,12 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) c.GroupID = req.GroupID c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -848,7 +895,12 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) GroupID: req.GroupID, OperationID: req.OperationID, } - etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } cacheClient := pbCache.NewCacheClient(etcdConnCache) cacheResp, err := cacheClient.ReduceGroupMemberFromCache(context.Background(), reduceGroupMemberFromCacheReq) if err != nil { @@ -936,7 +988,12 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf if req.GroupInfo.Notification != "" { //get group member user id getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: req.OperationID, GroupID: req.GroupInfo.GroupID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, http.WrapError(constant.ErrInternal) + } client := pbCache.NewCacheClient(etcdConn) cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) if err != nil { @@ -960,7 +1017,12 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf conversationReq.FieldType = constant.FieldGroupAtType conversation.GroupAtType = constant.GroupNotification conversationReq.UserIDList = cacheResp.UserIDList - nEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + nEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, http.WrapError(constant.ErrInternal) + } nClient := pbConversation.NewConversationClient(nEtcdConn) conversationReply, err := nClient.ModifyConversationField(context.Background(), &conversationReq) if err != nil { @@ -1156,7 +1218,12 @@ func (s *groupServer) OperateUserRole(_ context.Context, req *pbGroup.OperateUse log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMaster failed", err.Error()) return resp, http.WrapError(constant.ErrDB) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } client := pbGroup.NewGroupClient(etcdConn) var reqPb pbGroup.TransferGroupOwnerReq reqPb.OperationID = req.OperationID @@ -1237,7 +1304,12 @@ func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.Remo c.GroupID = req.GroupId c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -1252,7 +1324,12 @@ func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.Remo GroupID: req.GroupId, OperationID: req.OperationID, } - etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConnCache == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } cacheClient := pbCache.NewCacheClient(etcdConnCache) cacheResp, err := cacheClient.ReduceGroupMemberFromCache(context.Background(), reduceGroupMemberFromCacheReq) if err != nil { @@ -1308,7 +1385,12 @@ func (s *groupServer) AddGroupMembersCMS(_ context.Context, req *pbGroup.AddGrou GroupID: req.GroupId, OperationID: req.OperationId, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationId) + if etcdConn == nil { + errMsg := req.OperationId + "getcdv3.GetConn == nil" + log.NewError(req.OperationId, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -1393,7 +1475,12 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou c.GroupID = req.GroupID c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { From 98821c95b6ab25593071a6ee6151baa04d4e9d6f Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:55:38 +0800 Subject: [PATCH 586/752] Handling exception: getcdv3.GetConn == nil --- internal/rpc/friend/firend.go | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/internal/rpc/friend/firend.go b/internal/rpc/friend/firend.go index 4e3172b44..5c2c2a359 100644 --- a/internal/rpc/friend/firend.go +++ b/internal/rpc/friend/firend.go @@ -99,7 +99,12 @@ func (s *friendServer) AddBlacklist(ctx context.Context, req *pbFriend.AddBlackl } log.NewInfo(req.CommID.OperationID, "AddBlacklist rpc ok ", req.CommID.FromUserID, req.CommID.ToUserID) reqAddBlackUserToCache := &pbCache.AddBlackUserToCacheReq{UserID: req.CommID.FromUserID, BlackUserID: req.CommID.ToUserID, OperationID: req.CommID.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.AddBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddBlackUserToCache(context.Background(), reqAddBlackUserToCache) if err != nil { @@ -263,7 +268,12 @@ func (s *friendServer) AddFriendResponse(ctx context.Context, req *pbFriend.AddF } // cache rpc addFriendToCacheReq := &pbCache.AddFriendToCacheReq{OperationID: req.CommID.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbCache.NewCacheClient(etcdConn) addFriendToCacheReq.UserID = req.CommID.ToUserID addFriendToCacheReq.FriendID = req.CommID.FromUserID @@ -318,7 +328,12 @@ func (s *friendServer) DeleteFriend(ctx context.Context, req *pbFriend.DeleteFri } log.NewInfo(req.CommID.OperationID, "DeleteFriend rpc ok") reduceFriendFromCache := &pbCache.ReduceFriendFromCacheReq{OperationID: req.CommID.OperationID, UserID: req.CommID.FromUserID, FriendID: req.CommID.ToUserID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.DeleteFriendResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbCache.NewCacheClient(etcdConn) respPb, err := client.ReduceFriendFromCache(context.Background(), reduceFriendFromCache) if err != nil { @@ -399,7 +414,13 @@ func (s *friendServer) RemoveBlacklist(ctx context.Context, req *pbFriend.Remove } log.NewInfo(req.CommID.OperationID, "rpc RemoveBlacklist ok ") reqReduceBlackUserFromCache := &pbCache.ReduceBlackUserFromCacheReq{UserID: req.CommID.FromUserID, BlackUserID: req.CommID.ToUserID, OperationID: req.CommID.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.RemoveBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } + cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.ReduceBlackUserFromCache(context.Background(), reqReduceBlackUserFromCache) if err != nil { From 966cb2491149598e9e6b200f5534e723a5d8be7f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 15:02:29 +0800 Subject: [PATCH 587/752] add global recv opt --- docker-compose.yaml | 2 +- script/path_info.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index e1d2a98b2..e75b022a4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_CREATE_TOPICS: "ws2ms_chat:2:1,ms2ps_chat:2:1,msg_to_mongo:2:1" + KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:2:1,msg_to_mongo:2:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" diff --git a/script/path_info.cfg b/script/path_info.cfg index 0a47f51fd..17382cbfd 100644 --- a/script/path_info.cfg +++ b/script/path_info.cfg @@ -16,7 +16,7 @@ push_source_root="../cmd/open_im_push/" msg_transfer_name="open_im_msg_transfer" msg_transfer_binary_root="../bin/" msg_transfer_source_root="../cmd/open_im_msg_transfer/" -msg_transfer_service_num=2 +msg_transfer_service_num=4 sdk_server_name="open_im_sdk_server" From 167ebd6975d8a9c3fee74cd9808fe502b264d9dd Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:09:37 +0800 Subject: [PATCH 588/752] Handling exception: getcdv3.GetConn == nil --- internal/api/organization/organization.go | 98 +++++++++++-- internal/cms_api/admin/admin.go | 10 +- internal/cms_api/group/group.go | 164 ++++++++++++++++++---- 3 files changed, 231 insertions(+), 41 deletions(-) diff --git a/internal/api/organization/organization.go b/internal/api/organization/organization.go index 9d134a253..5998fb0dd 100644 --- a/internal/api/organization/organization.go +++ b/internal/api/organization/organization.go @@ -36,7 +36,14 @@ func CreateDepartment(c *gin.Context) { } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.CreateDepartment(context.Background(), req) if err != nil { @@ -72,7 +79,14 @@ func UpdateDepartment(c *gin.Context) { } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.UpdateDepartment(context.Background(), req) if err != nil { @@ -106,7 +120,13 @@ func GetSubDepartment(c *gin.Context) { } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.GetSubDepartment(context.Background(), req) if err != nil { @@ -144,7 +164,13 @@ func DeleteDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.DeleteDepartment(context.Background(), req) if err != nil { @@ -180,7 +206,13 @@ func CreateOrganizationUser(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.CreateOrganizationUser(context.Background(), req) if err != nil { @@ -215,7 +247,13 @@ func UpdateOrganizationUser(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.UpdateOrganizationUser(context.Background(), req) if err != nil { @@ -251,7 +289,13 @@ func CreateDepartmentMember(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.CreateDepartmentMember(context.Background(), req) if err != nil { @@ -286,7 +330,13 @@ func GetUserInDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.GetUserInDepartment(context.Background(), req) if err != nil { @@ -322,7 +372,13 @@ func UpdateUserInDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.UpdateUserInDepartment(context.Background(), req) if err != nil { @@ -357,7 +413,13 @@ func DeleteOrganizationUser(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.DeleteOrganizationUser(context.Background(), req) if err != nil { @@ -392,7 +454,13 @@ func GetDepartmentMember(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.GetDepartmentMember(context.Background(), req) if err != nil { @@ -427,7 +495,13 @@ func DeleteUserInDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.DeleteUserInDepartment(context.Background(), req) if err != nil { diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index ff8882369..a741c8016 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -12,6 +12,7 @@ import ( "context" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" + "net/http" "strings" "github.com/gin-gonic/gin" @@ -68,7 +69,14 @@ func AdminLogin(c *gin.Context) { } reqPb.Secret = req.Secret reqPb.AdminID = req.AdminName - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAdminCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAdminCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbAdmin.NewAdminCMSClient(etcdConn) respPb, err := client.AdminLogin(context.Background(), &reqPb) if err != nil { diff --git a/internal/cms_api/group/group.go b/internal/cms_api/group/group.go index 69b9e32fc..5d0508910 100644 --- a/internal/cms_api/group/group.go +++ b/internal/cms_api/group/group.go @@ -10,6 +10,7 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "net/http" "strings" pbGroup "Open_IM/pkg/proto/group" @@ -28,9 +29,16 @@ func GetGroupById(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroupById(context.Background(), &reqPb) if err != nil { @@ -60,10 +68,17 @@ func GetGroups(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.Pagination = &commonPb.RequestPagination{} utils.CopyStructFields(&reqPb.Pagination, req) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroups(context.Background(), &reqPb) if err != nil { @@ -101,11 +116,18 @@ func GetGroupByName(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupName = req.GroupName reqPb.Pagination = &commonPb.RequestPagination{} utils.CopyStructFields(&reqPb.Pagination, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroup(context.Background(), &reqPb) if err != nil { @@ -143,7 +165,8 @@ func CreateGroup(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupInfo = &commonPb.GroupInfo{} reqPb.GroupInfo.GroupName = req.GroupName reqPb.GroupInfo.CreatorUserID = req.GroupMasterId @@ -155,7 +178,13 @@ func CreateGroup(c *gin.Context) { RoleLevel: 1, }) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.CreateGroup(context.Background(), &reqPb) if err != nil { @@ -176,10 +205,18 @@ func BanGroupChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupBanChat - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -201,10 +238,17 @@ func BanPrivateChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupBanPrivateChat - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -225,10 +269,17 @@ func OpenGroupChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupOk - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -249,10 +300,18 @@ func OpenPrivateChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupOk - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -274,14 +333,21 @@ func GetGroupMembers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.Pagination = &commonPb.RequestPagination{ PageNumber: int32(req.PageNumber), ShowNumber: int32(req.ShowNumber), } reqPb.GroupId = req.GroupId reqPb.UserName = req.UserName - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroupMembersCMS(context.Background(), &reqPb) if err != nil { @@ -317,10 +383,17 @@ func AddGroupMembers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } + reqPb.OperationId = utils.OperationIDGenerator() log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) reqPb.UserIds = req.Members reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationId) + if etcdConn == nil { + errMsg := reqPb.OperationId + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationId, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.AddGroupMembersCMS(context.Background(), &reqPb) if err != nil { @@ -345,10 +418,17 @@ func RemoveGroupMembers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.UserIds = req.Members reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.RemoveGroupMembersCMS(context.Background(), &reqPb) if err != nil { @@ -373,9 +453,16 @@ func DeleteGroup(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.DeleteGroup(context.Background(), &reqPb) if err != nil { @@ -397,11 +484,18 @@ func SetGroupMaster(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.UserId = req.UserId reqPb.RoleLevel = constant.GroupOwner - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateUserRole(context.Background(), &reqPb) if err != nil { @@ -423,11 +517,18 @@ func SetGroupOrdinaryUsers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.UserId = req.UserId reqPb.RoleLevel = constant.GroupOrdinaryUsers - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateUserRole(context.Background(), &reqPb) if err != nil { @@ -444,7 +545,8 @@ func AlterGroupInfo(c *gin.Context) { _ cms_api_struct.SetGroupMasterResponse reqPb pbGroup.SetGroupInfoReq ) - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) if err := c.BindJSON(&req); err != nil { log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) @@ -459,7 +561,13 @@ func AlterGroupInfo(c *gin.Context) { FaceURL: req.ProfilePhoto, GroupType: int32(req.GroupType), } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.SetGroupInfo(context.Background(), &reqPb) if err != nil { From abb9ebaf76abcced023e7a68628280b879c102e1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:10:15 +0800 Subject: [PATCH 589/752] Handling exception: getcdv3.GetConn == nil --- internal/cms_api/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/cms_api/group/group.go b/internal/cms_api/group/group.go index 5d0508910..8eb53a8bf 100644 --- a/internal/cms_api/group/group.go +++ b/internal/cms_api/group/group.go @@ -72,7 +72,7 @@ func GetGroups(c *gin.Context) { log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.Pagination = &commonPb.RequestPagination{} utils.CopyStructFields(&reqPb.Pagination, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) if etcdConn == nil { errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" log.NewError(reqPb.OperationID, errMsg) From d058cacb38505ca88e2ffe58132f28b079db8179 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:19:39 +0800 Subject: [PATCH 590/752] Handling exception: getcdv3.GetConn == nil --- internal/api/chat/send_msg.go | 12 +- internal/cms_api/user/user.go | 142 +++++++++++++++++----- internal/rpc/organization/organization.go | 23 +++- 3 files changed, 139 insertions(+), 38 deletions(-) diff --git a/internal/api/chat/send_msg.go b/internal/api/chat/send_msg.go index b75cd0ddd..af5bf5d7b 100644 --- a/internal/api/chat/send_msg.go +++ b/internal/api/chat/send_msg.go @@ -69,9 +69,15 @@ func SendMsg(c *gin.Context) { token := c.Request.Header.Get("token") log.NewInfo(params.OperationID, "api call success to sendMsgReq", params) pbData := newUserSendMsgReq(token, ¶ms) - log.Info("", "", "api SendMsg call start..., [data: %s]", pbData.String()) + log.Info(params.OperationID, "", "api SendMsg call start..., [data: %s]", pbData.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, params.OperationID) + if etcdConn == nil { + errMsg := params.OperationID + "getcdv3.GetConn == nil" + log.NewError(params.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbChat.NewChatClient(etcdConn) log.Info("", "", "api SendMsg call, api call rpc...") @@ -82,7 +88,7 @@ func SendMsg(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "SendMsg rpc failed, " + err.Error()}) return } - log.Info("", "", "api SendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String()) + log.Info(params.OperationID, "", "api SendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String()) c.JSON(http.StatusOK, gin.H{ "errCode": reply.ErrCode, diff --git a/internal/cms_api/user/user.go b/internal/cms_api/user/user.go index f8d96e35e..09513a98e 100644 --- a/internal/cms_api/user/user.go +++ b/internal/cms_api/user/user.go @@ -29,9 +29,17 @@ func GetUserById(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pb.NewUserClient(etcdConn) respPb, err := client.GetUserById(context.Background(), &reqPb) if err != nil { @@ -44,7 +52,7 @@ func GetUserById(c *gin.Context) { return } utils.CopyStructFields(&resp, respPb.User) - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -54,7 +62,8 @@ func GetUsersByName(c *gin.Context) { resp cms_api_struct.GetUsersByNameResponse reqPb pb.GetUsersByNameReq ) - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) if err := c.ShouldBindQuery(&req); err != nil { log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) @@ -65,7 +74,13 @@ func GetUsersByName(c *gin.Context) { PageNumber: int32(req.PageNumber), ShowNumber: int32(req.ShowNumber), } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetUsersByName(context.Background(), &reqPb) if err != nil { @@ -77,7 +92,7 @@ func GetUsersByName(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.UserNums = respPb.UserNums - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -93,9 +108,16 @@ func GetUsers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.Pagination, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetUsers(context.Background(), &reqPb) if err != nil { @@ -106,7 +128,7 @@ func GetUsers(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.UserNums = respPb.UserNums - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -122,15 +144,22 @@ func ResignUser(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": http.StatusBadRequest, "errMsg": err.Error()}) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.ResignUser(context.Background(), &reqPb) if err != nil { openIMHttp.RespHttp200(c, err, resp) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -145,13 +174,20 @@ func AlterUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.AlterUser(context.Background(), &reqPb) if err != nil { - log.NewError("0", "microserver failed ", err.Error()) + log.NewError(reqPb.OperationID, "microserver failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) } openIMHttp.RespHttp200(c, constant.OK, nil) @@ -167,9 +203,16 @@ func AddUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.AddUser(context.Background(), &reqPb) if err != nil { @@ -191,9 +234,16 @@ func BlockUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) fmt.Println(reqPb) _, err := client.BlockUser(context.Background(), &reqPb) @@ -215,16 +265,23 @@ func UnblockUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.UnBlockUser(context.Background(), &reqPb) if err != nil { openIMHttp.RespHttp200(c, err, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -241,10 +298,17 @@ func GetBlockUsers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.Pagination, &req) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "blockUsers", reqPb.Pagination, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetBlockUsers(context.Background(), &reqPb) if err != nil { @@ -268,7 +332,7 @@ func GetBlockUsers(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.UserNums = respPb.UserNums - log.NewInfo("", utils.GetSelfFuncName(), "req: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -283,20 +347,27 @@ func GetBlockUserById(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.UserId = req.UserId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetBlockUserById(context.Background(), &reqPb) if err != nil { - log.NewError("0", "GetBlockUserById rpc failed ", err.Error()) + log.NewError(reqPb.OperationID, "GetBlockUserById rpc failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } resp.EndDisableTime = respPb.BlockUser.EndDisableTime resp.BeginDisableTime = respPb.BlockUser.BeginDisableTime utils.CopyStructFields(&resp, respPb.BlockUser.User) - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -310,13 +381,20 @@ func DeleteUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.UserId = req.UserId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.DeleteUser(context.Background(), &reqPb) if err != nil { - log.NewError("0", "DeleteUser rpc failed ", err.Error()) + log.NewError(reqPb.OperationID, "DeleteUser rpc failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 8f07867e9..81659ef60 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -114,7 +114,14 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", *resp) chat.OrganizationNotificationToAll(req.OpUserID, req.OperationID) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + resp.ErrCode = constant.ErrInternal.ErrCode + resp.ErrMsg = errMsg + return resp, nil + } client := groupRpc.NewGroupClient(etcdConn) createGroupReq := &groupRpc.CreateGroupReq{ InitMemberList: []*groupRpc.GroupAddMemberInfo{}, @@ -228,7 +235,12 @@ func (s *organizationServer) CreateOrganizationUser(ctx context.Context, req *rp utils.CopyStructFields(authReq.UserInfo, req.OrganizationUser) authReq.OperationID = req.OperationID if req.IsRegister { - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbAuth.NewAuthClient(etcdConn) reply, err := client.UserRegister(context.Background(), authReq) if err != nil { @@ -269,7 +281,12 @@ func (s *organizationServer) UpdateOrganizationUser(ctx context.Context, req *rp authReq := &pbAuth.UserRegisterReq{UserInfo: &open_im_sdk.UserInfo{}} utils.CopyStructFields(authReq.UserInfo, req.OrganizationUser) authReq.OperationID = req.OperationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &rpc.UpdateOrganizationUserResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbAuth.NewAuthClient(etcdConn) reply, err := client.UserRegister(context.Background(), authReq) From 8c963c669b651ddb2a9877edcca5a4cf3c0883e2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 15:21:46 +0800 Subject: [PATCH 591/752] redis interface --- internal/rpc/msg/send_msg.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index c20407604..08d3006ca 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -72,6 +72,9 @@ func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) if utils.IsContain(data.MsgData.SendID, config.Config.Manager.AppManagerUid) { return true, 0, "" } + if data.MsgData.ContentType <= constant.FriendApplicationNotification && data.MsgData.ContentType >= constant.FriendApplicationApprovedNotification { + return true, 0, "" + } log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, data.OperationID) From 24f2ffe82d6806f3e4470e6a99de3b5eea4a292c Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:21:53 +0800 Subject: [PATCH 592/752] Handling exception: getcdv3.GetConn == nil --- internal/rpc/office/office.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index b75c97edd..71a6db68b 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -205,7 +205,15 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR } var groupUserIDList []string for _, groupID := range req.GroupList { - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + resp.CommonResp.ErrCode = constant.ErrInternal.ErrCode + resp.CommonResp.ErrMsg = errMsg + return resp, nil + } + cacheClient := pbCache.NewCacheClient(etcdConn) req := pbCache.GetGroupMemberIDListFromCacheReq{ OperationID: req.OperationID, From e2f7dd67a20e17f7a31c22fbfac2322ea41b224b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 15:29:48 +0800 Subject: [PATCH 593/752] add global recv opt --- pkg/common/db/model.go | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index bc8af133d..b4b77ecc2 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb go_redis.UniversalClient + rdb *go_redis.ClusterClient } type RedisClient struct { @@ -130,18 +130,19 @@ func init() { if err != nil { panic(err.Error()) } - } else { - DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, - Password: config.Config.Redis.DBPassWord, // no password set - DB: 0, // use default DB - PoolSize: 100, // 连接池大小 - }) - _, err = DB.rdb.Ping(ctx).Result() - if err != nil { - panic(err.Error()) - } } + //} else { + // DB.rdb = go_redis.NewClient(&go_redis.Options{ + // Addr: config.Config.Redis.DBAddress, + // Password: config.Config.Redis.DBPassWord, // no password set + // DB: 0, // use default DB + // PoolSize: 100, // 连接池大小 + // }) + // _, err = DB.rdb.Ping(ctx).Result() + // if err != nil { + // panic(err.Error()) + // } + //} } func createMongoIndex(client *mongo.Client, collection string, isUnique bool, keys ...string) error { From 28721c7d20a562e2f4c74e6535b29e18201262e6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 15:34:58 +0800 Subject: [PATCH 594/752] add global recv opt --- pkg/common/db/model.go | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index b4b77ecc2..bc8af133d 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.ClusterClient + rdb go_redis.UniversalClient } type RedisClient struct { @@ -130,19 +130,18 @@ func init() { if err != nil { panic(err.Error()) } + } else { + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 + }) + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } } - //} else { - // DB.rdb = go_redis.NewClient(&go_redis.Options{ - // Addr: config.Config.Redis.DBAddress, - // Password: config.Config.Redis.DBPassWord, // no password set - // DB: 0, // use default DB - // PoolSize: 100, // 连接池大小 - // }) - // _, err = DB.rdb.Ping(ctx).Result() - // if err != nil { - // panic(err.Error()) - // } - //} } func createMongoIndex(client *mongo.Client, collection string, isUnique bool, keys ...string) error { From 19bbd9b5282b7bcc5f644b41f0495a328d0e52c7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 16:12:41 +0800 Subject: [PATCH 595/752] fix bug --- internal/api/user/user.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 3a760d4ec..52781ae8b 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -197,6 +197,8 @@ func GetUsersInfo(c *gin.Context) { func UpdateUserInfo(c *gin.Context) { params := api.UpdateSelfUserInfoReq{} + var t int32 + params.GlobalRecvMsgOpt = &t if err := c.BindJSON(¶ms); err != nil { log.NewError("0", "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) From 9503766a689f0bbedc32fd8633d26be624b85796 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 16:20:50 +0800 Subject: [PATCH 596/752] fix bug --- internal/api/user/user.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 52781ae8b..f3cc8bdf7 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -15,6 +15,7 @@ import ( "Open_IM/pkg/utils" "context" "github.com/gin-gonic/gin" + "github.com/golang/protobuf/ptypes/wrappers" "net/http" "strings" ) @@ -197,8 +198,6 @@ func GetUsersInfo(c *gin.Context) { func UpdateUserInfo(c *gin.Context) { params := api.UpdateSelfUserInfoReq{} - var t int32 - params.GlobalRecvMsgOpt = &t if err := c.BindJSON(¶ms); err != nil { log.NewError("0", "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) @@ -218,7 +217,7 @@ func UpdateUserInfo(c *gin.Context) { } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) if params.GlobalRecvMsgOpt != nil { - req.GlobalRecvMsgOpt.Value = *params.GlobalRecvMsgOpt + req.GlobalRecvMsgOpt = &wrappers.Int32Value{Value: *params.GlobalRecvMsgOpt} } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) if etcdConn == nil { From 4e11c7a9e27e4965c240215d3ec3d3a590ccc73c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 16:44:12 +0800 Subject: [PATCH 597/752] fix bug --- internal/rpc/user/user.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 7c274bddc..21883a8d7 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -385,7 +385,7 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI } m := make(map[string]interface{}, 1) if req.GlobalRecvMsgOpt != nil { - m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt + m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt.Value err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) From 5ea620a4cd830a52476abca201deb7788d4f5ec2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 16:49:21 +0800 Subject: [PATCH 598/752] fix bug --- internal/api/third/minio_storage_credential.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index f294d6ba3..542c99ba7 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -87,7 +87,7 @@ func MinioUploadFile(c *gin.Context) { log.Debug(req.OperationID, utils.GetSelfFuncName(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, newType, MinioClient.EndpointURL()) _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType}) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error") + log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error", err.Error()) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "upload file error" + err.Error()}) return } From 7ea7dffd4aa81be9ce96c4537826a37173a7ec07 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 17:57:44 +0800 Subject: [PATCH 599/752] fix bug --- internal/rpc/user/user.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 21883a8d7..b38dfa57d 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -385,6 +385,7 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI } m := make(map[string]interface{}, 1) if req.GlobalRecvMsgOpt != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.GlobalRecvMsgOpt, "set GlobalRecvMsgOpt") m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt.Value err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) if err != nil { From a50001364f1980fe67b8520f11e25847e1c896e5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 18:59:17 +0800 Subject: [PATCH 600/752] user proto modify --- pkg/proto/user/user.proto | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 2f591aed6..67b7e3da6 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -68,6 +68,14 @@ message UpdateUserInfoReq{ message UpdateUserInfoResp{ CommonResp commonResp = 1; } +message SetGlobalRecvMessageOptReq{ + string userID = 1; + string operationID = 2; + int32 opt = 3; +} +message SetGlobalRecvMessageOptResp{ + CommonResp commonResp = 1; +} message Conversation{ string OwnerUserID = 1; From 479679a1c6f58d3e31509c47ef2de944bcc2db6b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 19:02:08 +0800 Subject: [PATCH 601/752] user proto modify --- pkg/proto/user/user.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 67b7e3da6..3b14ad177 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -303,6 +303,7 @@ message DeleteUserResp { service user { rpc GetUserInfo(GetUserInfoReq) returns(GetUserInfoResp); rpc UpdateUserInfo(UpdateUserInfoReq) returns(UpdateUserInfoResp); + rpc SetGlobalRecvMessageOpt(SetGlobalRecvMessageOptReq) returns(SetGlobalRecvMessageOptResp); rpc DeleteUsers(DeleteUsersReq)returns(DeleteUsersResp); rpc GetAllUserID(GetAllUserIDReq)returns(GetAllUserIDResp); From a15e644a51fd6c4240a5006acd58295bb3384325 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 19:09:13 +0800 Subject: [PATCH 602/752] fix bug --- pkg/proto/user/user.pb.go | 489 ++++++++++++++++++++++++-------------- pkg/proto/user/user.proto | 2 - 2 files changed, 304 insertions(+), 187 deletions(-) diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index ec740001b..f833cefc7 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -7,7 +7,6 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import sdk_ws "Open_IM/pkg/proto/sdk_ws" -import wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" import ( context "golang.org/x/net/context" @@ -37,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{0} + return fileDescriptor_user_ffbbc34a94bb8978, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -84,7 +83,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{1} + return fileDescriptor_user_ffbbc34a94bb8978, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -137,7 +136,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{2} + return fileDescriptor_user_ffbbc34a94bb8978, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -183,7 +182,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{3} + return fileDescriptor_user_ffbbc34a94bb8978, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -229,7 +228,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{4} + return fileDescriptor_user_ffbbc34a94bb8978, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -276,7 +275,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{5} + return fileDescriptor_user_ffbbc34a94bb8978, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -329,7 +328,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{6} + return fileDescriptor_user_ffbbc34a94bb8978, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -375,7 +374,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{6, 0} + return fileDescriptor_user_ffbbc34a94bb8978, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -422,7 +421,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{7} + return fileDescriptor_user_ffbbc34a94bb8978, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -475,7 +474,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{8} + return fileDescriptor_user_ffbbc34a94bb8978, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -510,20 +509,19 @@ func (m *GetUserInfoResp) GetUserInfoList() []*sdk_ws.UserInfo { } type UpdateUserInfoReq struct { - UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` - OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` - GlobalRecvMsgOpt *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{9} + return fileDescriptor_user_ffbbc34a94bb8978, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -564,13 +562,6 @@ func (m *UpdateUserInfoReq) GetOperationID() string { return "" } -func (m *UpdateUserInfoReq) GetGlobalRecvMsgOpt() *wrapperspb.Int32Value { - if m != nil { - return m.GlobalRecvMsgOpt - } - return nil -} - type UpdateUserInfoResp struct { CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -582,7 +573,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{10} + return fileDescriptor_user_ffbbc34a94bb8978, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -609,6 +600,98 @@ func (m *UpdateUserInfoResp) GetCommonResp() *CommonResp { return nil } +type SetGlobalRecvMessageOptReq struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` + Opt int32 `protobuf:"varint,3,opt,name=opt" json:"opt,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetGlobalRecvMessageOptReq) Reset() { *m = SetGlobalRecvMessageOptReq{} } +func (m *SetGlobalRecvMessageOptReq) String() string { return proto.CompactTextString(m) } +func (*SetGlobalRecvMessageOptReq) ProtoMessage() {} +func (*SetGlobalRecvMessageOptReq) Descriptor() ([]byte, []int) { + return fileDescriptor_user_ffbbc34a94bb8978, []int{11} +} +func (m *SetGlobalRecvMessageOptReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGlobalRecvMessageOptReq.Unmarshal(m, b) +} +func (m *SetGlobalRecvMessageOptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGlobalRecvMessageOptReq.Marshal(b, m, deterministic) +} +func (dst *SetGlobalRecvMessageOptReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGlobalRecvMessageOptReq.Merge(dst, src) +} +func (m *SetGlobalRecvMessageOptReq) XXX_Size() int { + return xxx_messageInfo_SetGlobalRecvMessageOptReq.Size(m) +} +func (m *SetGlobalRecvMessageOptReq) XXX_DiscardUnknown() { + xxx_messageInfo_SetGlobalRecvMessageOptReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGlobalRecvMessageOptReq proto.InternalMessageInfo + +func (m *SetGlobalRecvMessageOptReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *SetGlobalRecvMessageOptReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *SetGlobalRecvMessageOptReq) GetOpt() int32 { + if m != nil { + return m.Opt + } + return 0 +} + +type SetGlobalRecvMessageOptResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetGlobalRecvMessageOptResp) Reset() { *m = SetGlobalRecvMessageOptResp{} } +func (m *SetGlobalRecvMessageOptResp) String() string { return proto.CompactTextString(m) } +func (*SetGlobalRecvMessageOptResp) ProtoMessage() {} +func (*SetGlobalRecvMessageOptResp) Descriptor() ([]byte, []int) { + return fileDescriptor_user_ffbbc34a94bb8978, []int{12} +} +func (m *SetGlobalRecvMessageOptResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGlobalRecvMessageOptResp.Unmarshal(m, b) +} +func (m *SetGlobalRecvMessageOptResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGlobalRecvMessageOptResp.Marshal(b, m, deterministic) +} +func (dst *SetGlobalRecvMessageOptResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGlobalRecvMessageOptResp.Merge(dst, src) +} +func (m *SetGlobalRecvMessageOptResp) XXX_Size() int { + return xxx_messageInfo_SetGlobalRecvMessageOptResp.Size(m) +} +func (m *SetGlobalRecvMessageOptResp) XXX_DiscardUnknown() { + xxx_messageInfo_SetGlobalRecvMessageOptResp.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGlobalRecvMessageOptResp proto.InternalMessageInfo + +func (m *SetGlobalRecvMessageOptResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + type Conversation struct { OwnerUserID string `protobuf:"bytes,1,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"` ConversationID string `protobuf:"bytes,2,opt,name=ConversationID" json:"ConversationID,omitempty"` @@ -633,7 +716,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{11} + return fileDescriptor_user_ffbbc34a94bb8978, []int{13} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -764,7 +847,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{12} + return fileDescriptor_user_ffbbc34a94bb8978, []int{14} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -816,7 +899,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{13} + return fileDescriptor_user_ffbbc34a94bb8978, []int{15} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -858,7 +941,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{14} + return fileDescriptor_user_ffbbc34a94bb8978, []int{16} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -924,7 +1007,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{15} + return fileDescriptor_user_ffbbc34a94bb8978, []int{17} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -964,7 +1047,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{16} + return fileDescriptor_user_ffbbc34a94bb8978, []int{18} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1017,7 +1100,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{17} + return fileDescriptor_user_ffbbc34a94bb8978, []int{19} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1064,7 +1147,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{18} + return fileDescriptor_user_ffbbc34a94bb8978, []int{20} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1117,7 +1200,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{19} + return fileDescriptor_user_ffbbc34a94bb8978, []int{21} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1163,7 +1246,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{20} + return fileDescriptor_user_ffbbc34a94bb8978, []int{22} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1209,7 +1292,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{21} + return fileDescriptor_user_ffbbc34a94bb8978, []int{23} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1257,7 +1340,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{22} + return fileDescriptor_user_ffbbc34a94bb8978, []int{24} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1318,7 +1401,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{23} + return fileDescriptor_user_ffbbc34a94bb8978, []int{25} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1371,7 +1454,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{24} + return fileDescriptor_user_ffbbc34a94bb8978, []int{26} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1416,7 +1499,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{25} + return fileDescriptor_user_ffbbc34a94bb8978, []int{27} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1455,7 +1538,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{26} + return fileDescriptor_user_ffbbc34a94bb8978, []int{28} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1504,7 +1587,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{27} + return fileDescriptor_user_ffbbc34a94bb8978, []int{29} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1571,7 +1654,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{28} + return fileDescriptor_user_ffbbc34a94bb8978, []int{30} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1618,7 +1701,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{29} + return fileDescriptor_user_ffbbc34a94bb8978, []int{31} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1672,7 +1755,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{30} + return fileDescriptor_user_ffbbc34a94bb8978, []int{32} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1729,7 +1812,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{31} + return fileDescriptor_user_ffbbc34a94bb8978, []int{33} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1802,7 +1885,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{32} + return fileDescriptor_user_ffbbc34a94bb8978, []int{34} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1842,7 +1925,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{33} + return fileDescriptor_user_ffbbc34a94bb8978, []int{35} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1897,7 +1980,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{34} + return fileDescriptor_user_ffbbc34a94bb8978, []int{36} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -1960,7 +2043,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{35} + return fileDescriptor_user_ffbbc34a94bb8978, []int{37} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2026,7 +2109,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{36} + return fileDescriptor_user_ffbbc34a94bb8978, []int{38} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2067,7 +2150,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{37} + return fileDescriptor_user_ffbbc34a94bb8978, []int{39} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2126,7 +2209,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{38} + return fileDescriptor_user_ffbbc34a94bb8978, []int{40} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2166,7 +2249,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{39} + return fileDescriptor_user_ffbbc34a94bb8978, []int{41} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2218,7 +2301,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{40} + return fileDescriptor_user_ffbbc34a94bb8978, []int{42} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2258,7 +2341,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{41} + return fileDescriptor_user_ffbbc34a94bb8978, []int{43} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2312,7 +2395,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{42} + return fileDescriptor_user_ffbbc34a94bb8978, []int{44} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2367,7 +2450,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{43} + return fileDescriptor_user_ffbbc34a94bb8978, []int{45} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2427,7 +2510,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{44} + return fileDescriptor_user_ffbbc34a94bb8978, []int{46} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2472,7 +2555,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{45} + return fileDescriptor_user_ffbbc34a94bb8978, []int{47} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2512,7 +2595,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{46} + return fileDescriptor_user_ffbbc34a94bb8978, []int{48} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2564,7 +2647,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{47} + return fileDescriptor_user_ffbbc34a94bb8978, []int{49} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -2604,6 +2687,8 @@ func init() { proto.RegisterType((*GetUserInfoResp)(nil), "user.GetUserInfoResp") proto.RegisterType((*UpdateUserInfoReq)(nil), "user.UpdateUserInfoReq") proto.RegisterType((*UpdateUserInfoResp)(nil), "user.UpdateUserInfoResp") + proto.RegisterType((*SetGlobalRecvMessageOptReq)(nil), "user.SetGlobalRecvMessageOptReq") + proto.RegisterType((*SetGlobalRecvMessageOptResp)(nil), "user.SetGlobalRecvMessageOptResp") proto.RegisterType((*Conversation)(nil), "user.Conversation") proto.RegisterType((*SetConversationReq)(nil), "user.SetConversationReq") proto.RegisterType((*SetConversationResp)(nil), "user.SetConversationResp") @@ -2656,6 +2741,7 @@ const _ = grpc.SupportPackageIsVersion4 type UserClient interface { GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*UpdateUserInfoResp, error) + SetGlobalRecvMessageOpt(ctx context.Context, in *SetGlobalRecvMessageOptReq, opts ...grpc.CallOption) (*SetGlobalRecvMessageOptResp, error) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error) GetAllUserID(ctx context.Context, in *GetAllUserIDReq, opts ...grpc.CallOption) (*GetAllUserIDResp, error) AccountCheck(ctx context.Context, in *AccountCheckReq, opts ...grpc.CallOption) (*AccountCheckResp, error) @@ -2704,6 +2790,15 @@ func (c *userClient) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, return out, nil } +func (c *userClient) SetGlobalRecvMessageOpt(ctx context.Context, in *SetGlobalRecvMessageOptReq, opts ...grpc.CallOption) (*SetGlobalRecvMessageOptResp, error) { + out := new(SetGlobalRecvMessageOptResp) + err := grpc.Invoke(ctx, "/user.user/SetGlobalRecvMessageOpt", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *userClient) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error) { out := new(DeleteUsersResp) err := grpc.Invoke(ctx, "/user.user/DeleteUsers", in, out, c.cc, opts...) @@ -2889,6 +2984,7 @@ func (c *userClient) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ... type UserServer interface { GetUserInfo(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*UpdateUserInfoResp, error) + SetGlobalRecvMessageOpt(context.Context, *SetGlobalRecvMessageOptReq) (*SetGlobalRecvMessageOptResp, error) DeleteUsers(context.Context, *DeleteUsersReq) (*DeleteUsersResp, error) GetAllUserID(context.Context, *GetAllUserIDReq) (*GetAllUserIDResp, error) AccountCheck(context.Context, *AccountCheckReq) (*AccountCheckResp, error) @@ -2951,6 +3047,24 @@ func _User_UpdateUserInfo_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _User_SetGlobalRecvMessageOpt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetGlobalRecvMessageOptReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).SetGlobalRecvMessageOpt(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/SetGlobalRecvMessageOpt", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).SetGlobalRecvMessageOpt(ctx, req.(*SetGlobalRecvMessageOptReq)) + } + return interceptor(ctx, in, info, handler) +} + func _User_DeleteUsers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeleteUsersReq) if err := dec(in); err != nil { @@ -3323,6 +3437,10 @@ var _User_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateUserInfo", Handler: _User_UpdateUserInfo_Handler, }, + { + MethodName: "SetGlobalRecvMessageOpt", + Handler: _User_SetGlobalRecvMessageOpt_Handler, + }, { MethodName: "DeleteUsers", Handler: _User_DeleteUsers_Handler, @@ -3408,128 +3526,129 @@ var _User_serviceDesc = grpc.ServiceDesc{ Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_94f030505f068262) } +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_ffbbc34a94bb8978) } -var fileDescriptor_user_94f030505f068262 = []byte{ - // 1906 bytes of a gzipped FileDescriptorProto +var fileDescriptor_user_ffbbc34a94bb8978 = []byte{ + // 1922 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, - 0x15, 0x57, 0xdb, 0xce, 0x24, 0x79, 0x8e, 0x1d, 0xa7, 0x26, 0x3b, 0xe9, 0x6d, 0x60, 0x08, 0xad, - 0x65, 0x37, 0x1a, 0x09, 0x07, 0x66, 0x11, 0x83, 0x16, 0xc1, 0x6e, 0xec, 0x64, 0x2c, 0x23, 0x26, - 0xb1, 0xda, 0x13, 0x84, 0x10, 0x52, 0xd4, 0xb1, 0x2b, 0x4e, 0x2b, 0x76, 0x77, 0x6f, 0x57, 0x3b, - 0x33, 0xe1, 0xb2, 0x88, 0x8f, 0x1b, 0x17, 0x4e, 0xbb, 0x70, 0xe0, 0xef, 0xe0, 0x0e, 0x27, 0xae, - 0x9c, 0xe0, 0xc2, 0xbf, 0x82, 0xea, 0xa3, 0xbb, 0xab, 0xaa, 0xdb, 0x89, 0xe9, 0x44, 0x73, 0x49, - 0x5c, 0xaf, 0xbe, 0x7e, 0xef, 0xbd, 0xdf, 0x7b, 0xf5, 0xaa, 0x1a, 0x36, 0xe7, 0x04, 0x47, 0xfb, - 0xf4, 0x4f, 0x3b, 0x8c, 0x82, 0x38, 0x40, 0x35, 0xfa, 0xdb, 0xfa, 0xd6, 0x49, 0x88, 0xfd, 0xb3, - 0xfe, 0xab, 0xfd, 0xf0, 0x6a, 0xb2, 0xcf, 0x3a, 0xf6, 0xc9, 0xf8, 0xea, 0xec, 0x0d, 0xd9, 0x7f, - 0x43, 0xf8, 0x40, 0xeb, 0xa3, 0xc5, 0x43, 0x22, 0x37, 0x0c, 0x71, 0x24, 0x06, 0xda, 0x3f, 0x01, - 0xe8, 0x06, 0xb3, 0x59, 0xe0, 0x3b, 0x98, 0x84, 0xc8, 0x84, 0x55, 0x1c, 0x45, 0xdd, 0x60, 0x8c, - 0x4d, 0x63, 0xd7, 0xd8, 0x5b, 0x71, 0x92, 0x26, 0x7a, 0x02, 0x8f, 0x70, 0x14, 0xbd, 0x22, 0x13, - 0xb3, 0xb2, 0x6b, 0xec, 0xad, 0x3b, 0xa2, 0x65, 0xff, 0x1a, 0x9a, 0x87, 0x78, 0x8a, 0x63, 0x7c, - 0x4a, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x06, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, 0x62, - 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, 0x95, - 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, 0xb3, - 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, 0x0e, - 0xf5, 0xe7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x41, 0xeb, 0xa5, 0xeb, 0x4d, - 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, 0x54, - 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, 0x70, - 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x4f, 0x01, 0x72, 0xe0, 0x25, 0x89, 0x7d, - 0x03, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x25, 0x1e, 0x5d, 0x51, 0xd8, 0x7b, 0xb0, - 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xee, 0xa2, 0x6a, 0xde, - 0x45, 0xff, 0x35, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, 0x00, - 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xfc, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, 0xf4, - 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, 0xbd, - 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, 0x50, - 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0x2f, 0x02, 0x6a, 0xdb, 0xa7, 0x00, - 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x9e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, 0xa0, - 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x1a, 0x47, - 0x67, 0x6e, 0xe8, 0x9d, 0x85, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xcb, - 0x80, 0xad, 0xd3, 0x70, 0xec, 0x8a, 0x70, 0x16, 0xaa, 0xbf, 0x80, 0xb5, 0xa4, 0x29, 0x60, 0xdc, - 0xba, 0x64, 0x3a, 0xf8, 0x2e, 0x9b, 0x04, 0x79, 0x9b, 0x48, 0x22, 0xd4, 0x83, 0xd6, 0x64, 0x1a, - 0x9c, 0xbb, 0x53, 0x07, 0x8f, 0xae, 0x5f, 0x91, 0xc9, 0x49, 0x18, 0xb3, 0x7c, 0x41, 0xb7, 0x9f, - 0x04, 0xc1, 0x64, 0x8a, 0x79, 0xb6, 0x3b, 0x9f, 0x5f, 0xb4, 0xfb, 0x7e, 0xfc, 0xf1, 0xf3, 0x9f, - 0xbb, 0xd3, 0x39, 0x76, 0x72, 0x93, 0xec, 0x97, 0x80, 0x74, 0xa5, 0xca, 0x98, 0xd7, 0xfe, 0x4f, - 0x15, 0x36, 0xba, 0x81, 0x7f, 0x8d, 0x23, 0xc2, 0x30, 0x32, 0xbf, 0xbe, 0xf1, 0x71, 0xa4, 0x64, - 0x0a, 0x59, 0x84, 0x3e, 0x84, 0xa6, 0x3c, 0x23, 0xb5, 0x83, 0x26, 0xa5, 0xec, 0x92, 0xb4, 0xac, - 0xb2, 0x2c, 0x2d, 0x49, 0x68, 0x3e, 0x93, 0x67, 0xbc, 0xbe, 0x09, 0x31, 0xb3, 0xc5, 0x8a, 0x93, - 0x93, 0x53, 0xe6, 0x0b, 0x40, 0x2b, 0x9c, 0xf9, 0x02, 0x8b, 0x09, 0xab, 0xbd, 0x28, 0x98, 0x87, - 0xfd, 0x43, 0xf3, 0x11, 0xeb, 0x48, 0x9a, 0x54, 0x8f, 0x53, 0x3f, 0xc2, 0xee, 0xb8, 0x4b, 0x43, - 0xc0, 0x5c, 0x65, 0x0b, 0xcb, 0x22, 0x1a, 0x35, 0x87, 0x91, 0x7b, 0x11, 0xbf, 0xc6, 0x6f, 0xe3, - 0xd7, 0xde, 0x0c, 0x9b, 0x6b, 0xbb, 0xc6, 0x5e, 0xd5, 0x51, 0x85, 0xd4, 0xdf, 0x7d, 0x32, 0xf0, - 0x7c, 0x1f, 0x8f, 0xcd, 0xf5, 0x5d, 0x63, 0x6f, 0xcd, 0x49, 0xdb, 0xc8, 0x86, 0x8d, 0x83, 0x38, - 0x76, 0x47, 0x97, 0x78, 0xcc, 0x88, 0x04, 0x0c, 0x82, 0x22, 0xa3, 0xbb, 0xf4, 0xc9, 0x20, 0xf2, - 0xae, 0xdd, 0x18, 0x77, 0x2f, 0xdd, 0xd8, 0xac, 0xb3, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, - 0xc4, 0xcc, 0x0c, 0x1b, 0x1c, 0xad, 0x24, 0xa2, 0x7b, 0xf5, 0xc9, 0x71, 0x10, 0xf7, 0x7d, 0x26, - 0x35, 0x1b, 0x6c, 0x19, 0x45, 0x86, 0x9a, 0x50, 0x39, 0x7a, 0x6b, 0x36, 0x19, 0x8a, 0xca, 0xd1, - 0x5b, 0xfb, 0x2f, 0x06, 0xa0, 0x21, 0x8e, 0x65, 0x6b, 0x52, 0xee, 0xff, 0x40, 0x75, 0xb9, 0xe0, - 0x09, 0x4a, 0x78, 0x22, 0x0d, 0x56, 0xa9, 0xf1, 0x0c, 0x5a, 0x7e, 0x10, 0x7b, 0x17, 0xde, 0x28, - 0x73, 0x58, 0x85, 0x3b, 0x4c, 0x97, 0x2f, 0x91, 0x1e, 0x7a, 0xf0, 0x38, 0x87, 0xad, 0x14, 0x85, - 0xff, 0x69, 0x40, 0x6b, 0x88, 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, - 0xcb, 0x59, 0x65, 0x25, 0x6f, 0x95, 0x23, 0xd8, 0xd2, 0x74, 0x29, 0x65, 0x93, 0xdf, 0x18, 0x80, - 0x7a, 0x79, 0xcf, 0xe7, 0x75, 0x36, 0x0a, 0x75, 0xd6, 0xac, 0x57, 0xc9, 0x5b, 0xef, 0x6e, 0xff, - 0x7e, 0x01, 0x8f, 0x7b, 0x0f, 0xe1, 0xdf, 0x1c, 0x5d, 0x2b, 0xcb, 0xd1, 0xd5, 0xfe, 0x9d, 0x91, - 0x43, 0x40, 0x96, 0xa3, 0x06, 0xad, 0x39, 0x14, 0x83, 0x10, 0x51, 0xab, 0xe8, 0xe2, 0x25, 0xcc, - 0xf0, 0x5b, 0x03, 0xb6, 0xf3, 0x28, 0x4a, 0x19, 0xe2, 0x87, 0xd0, 0x50, 0x96, 0x11, 0xe5, 0x45, - 0x91, 0x25, 0xd4, 0x81, 0xf6, 0xaf, 0xe0, 0x09, 0xaf, 0xde, 0x4a, 0x18, 0x43, 0x53, 0xb1, 0x92, - 0x57, 0xf1, 0x0f, 0x06, 0xec, 0x14, 0x2e, 0xff, 0x8e, 0xb5, 0xfc, 0x87, 0x01, 0x66, 0xc7, 0x8d, - 0x47, 0x97, 0xc3, 0x02, 0xaf, 0xe7, 0x96, 0x35, 0x96, 0x5c, 0x76, 0x89, 0x60, 0x28, 0x4a, 0x01, - 0xd5, 0xe5, 0x52, 0x40, 0xad, 0x28, 0x70, 0xde, 0x5f, 0xa0, 0x45, 0x29, 0x7b, 0x9a, 0xb0, 0x3a, - 0x9c, 0x8f, 0x46, 0x98, 0x24, 0x24, 0x4e, 0x9a, 0xf4, 0x50, 0xe5, 0x17, 0x07, 0x56, 0x54, 0xad, - 0x3b, 0xa2, 0x65, 0xf7, 0xa1, 0xe1, 0x60, 0xe2, 0x4d, 0x7c, 0xaa, 0x1e, 0xb5, 0x5d, 0x72, 0xfa, - 0x8e, 0x93, 0xba, 0x93, 0xb7, 0x96, 0xa0, 0x46, 0x07, 0x9a, 0xf2, 0x52, 0xa5, 0x72, 0xd9, 0x4f, - 0xd3, 0xba, 0xb5, 0x73, 0xd3, 0x1f, 0xdf, 0x0f, 0xcf, 0x57, 0x06, 0xd4, 0xe8, 0x60, 0x7a, 0x9c, - 0x0e, 0xa2, 0xe0, 0xc2, 0x9b, 0xe2, 0xc1, 0x65, 0x10, 0x07, 0x62, 0x21, 0x45, 0x46, 0x8f, 0xfe, - 0x63, 0x6f, 0x74, 0xe5, 0xbb, 0x33, 0x9c, 0x94, 0x7a, 0x49, 0x5b, 0x82, 0x50, 0x55, 0x20, 0x3c, - 0x05, 0xe8, 0x46, 0xd8, 0x8d, 0x31, 0xab, 0x28, 0xb8, 0x77, 0x25, 0x09, 0xf5, 0x46, 0x9f, 0x74, - 0xa6, 0xc1, 0xe8, 0x8a, 0x65, 0xff, 0x35, 0x27, 0x69, 0xda, 0xa3, 0xb4, 0x5a, 0xe6, 0x6a, 0x96, - 0xbc, 0x60, 0xb1, 0x8b, 0xb7, 0xc8, 0x91, 0xc0, 0xc7, 0x32, 0xdb, 0x33, 0xb9, 0xfd, 0xa5, 0x01, - 0x5b, 0x62, 0x17, 0xd2, 0xb9, 0x39, 0x76, 0x67, 0x58, 0x5c, 0x0d, 0xa9, 0x84, 0x36, 0x93, 0xab, - 0x61, 0xd2, 0x46, 0x87, 0x00, 0x03, 0x77, 0xe2, 0xf9, 0x72, 0xee, 0xfd, 0xa0, 0xa0, 0x54, 0x76, - 0xf0, 0xe7, 0x73, 0x4c, 0xe2, 0x6c, 0xac, 0x23, 0xcd, 0x5b, 0x22, 0x4f, 0xfe, 0x99, 0x9f, 0x58, - 0x0a, 0x32, 0x12, 0xa2, 0x5d, 0x58, 0xa1, 0xc0, 0x93, 0x70, 0x95, 0x35, 0xe2, 0x1d, 0xe8, 0xa8, - 0x00, 0xe0, 0xb7, 0x0b, 0x01, 0x92, 0x30, 0xf0, 0x09, 0x5e, 0x80, 0x30, 0xb1, 0xc1, 0x7c, 0x46, - 0x44, 0xec, 0xa6, 0x6d, 0xfb, 0x6f, 0x06, 0x6c, 0x1c, 0x4c, 0x63, 0x1e, 0xef, 0xf7, 0x22, 0x20, - 0x1d, 0x31, 0xb8, 0x0c, 0x7c, 0x7c, 0x3c, 0x9f, 0x9d, 0xe3, 0x88, 0xed, 0x54, 0x75, 0x64, 0x91, - 0xc2, 0xba, 0x9a, 0xc6, 0xba, 0x6d, 0x58, 0x39, 0x9a, 0xb9, 0xde, 0x54, 0x54, 0x0e, 0xbc, 0x21, - 0x5d, 0x49, 0xc6, 0xa2, 0x0a, 0x4e, 0xdb, 0xf6, 0x01, 0x34, 0x24, 0xe4, 0x65, 0x38, 0x65, 0xff, - 0xc9, 0x80, 0x7a, 0xe2, 0x99, 0xe4, 0xc8, 0x90, 0x94, 0x34, 0xf2, 0x4a, 0x3e, 0x0c, 0x67, 0x64, - 0x56, 0x56, 0x55, 0x56, 0xda, 0x7f, 0x37, 0x60, 0x23, 0xc3, 0x74, 0xcf, 0x50, 0xa9, 0x16, 0x85, - 0x8a, 0xc6, 0xab, 0xea, 0x43, 0xf0, 0xaa, 0xa6, 0xf1, 0xea, 0x2b, 0x03, 0xe0, 0x60, 0x3c, 0x4e, - 0x58, 0x75, 0xb7, 0x61, 0x35, 0xf6, 0x08, 0x7e, 0xc9, 0xec, 0x59, 0x94, 0x97, 0x10, 0xd4, 0x24, - 0x46, 0xb1, 0xdf, 0x0a, 0x6f, 0x56, 0x34, 0xde, 0x7c, 0x0a, 0xf5, 0x14, 0x59, 0x29, 0xd6, 0xfc, - 0xd1, 0x80, 0x0d, 0x96, 0xd8, 0xee, 0x8a, 0x99, 0x0f, 0xa1, 0x79, 0xe4, 0x8f, 0x0f, 0x3d, 0xe2, - 0x9e, 0x4f, 0x79, 0xd6, 0x14, 0x75, 0xb8, 0x2a, 0xbd, 0x3b, 0x85, 0x28, 0xfa, 0xd4, 0xf2, 0x71, - 0x20, 0xa1, 0x29, 0xa5, 0xd1, 0x05, 0x34, 0x4f, 0xfd, 0xa5, 0x54, 0xba, 0x3b, 0x0d, 0xc8, 0x50, - 0xab, 0x1a, 0xd4, 0x2e, 0x6c, 0x2a, 0xfb, 0x94, 0x02, 0xfb, 0x57, 0x83, 0x3d, 0xd8, 0xa5, 0xcb, - 0xb0, 0xc8, 0x55, 0xe3, 0xd2, 0x78, 0x98, 0x5c, 0x5e, 0xa0, 0x9d, 0x2d, 0xb9, 0xfe, 0x78, 0x3e, - 0x13, 0xf9, 0x54, 0x91, 0xd9, 0x5f, 0xc0, 0x7a, 0xda, 0xa6, 0xb1, 0x48, 0xff, 0x0b, 0x48, 0x4a, - 0x2c, 0xb2, 0xfe, 0x67, 0xd0, 0xea, 0xe0, 0x89, 0xe7, 0xe7, 0x59, 0x92, 0x93, 0x17, 0xf0, 0xa9, - 0x5a, 0xc4, 0x27, 0xfb, 0xdf, 0xfc, 0x28, 0x94, 0x2d, 0x54, 0x2a, 0x8f, 0xec, 0x03, 0x64, 0x6b, - 0x88, 0x6c, 0xb2, 0xc9, 0x67, 0x64, 0x4e, 0x94, 0x86, 0xbc, 0x8b, 0xc4, 0x32, 0x60, 0x37, 0x9f, - 0x74, 0xcf, 0xa4, 0x6e, 0xda, 0x81, 0x55, 0xda, 0x3c, 0xf3, 0xfe, 0xff, 0xc2, 0xe9, 0x88, 0xdd, - 0x62, 0xb4, 0x15, 0x49, 0x88, 0xbe, 0x23, 0xb9, 0x51, 0x64, 0xfa, 0x9c, 0xf2, 0xd9, 0x08, 0xfb, - 0x02, 0x1a, 0xd9, 0x43, 0xf8, 0xfd, 0x20, 0xdd, 0x1a, 0x43, 0x1d, 0xf9, 0xb1, 0xbf, 0x9c, 0x63, - 0x9f, 0x7f, 0x59, 0xe7, 0x27, 0x04, 0xfa, 0x24, 0x3d, 0xff, 0xd8, 0x8b, 0xce, 0x36, 0x9f, 0xa5, - 0xbe, 0xa5, 0x5a, 0xef, 0x15, 0x48, 0x49, 0x88, 0xba, 0xd0, 0x54, 0xdf, 0xe9, 0xd0, 0x8e, 0x60, - 0xb7, 0xfe, 0x24, 0x69, 0x99, 0xc5, 0x1d, 0x24, 0xa4, 0x00, 0xa4, 0xcf, 0x07, 0x09, 0x00, 0xf5, - 0x6b, 0x46, 0x02, 0x40, 0xff, 0xce, 0xf0, 0x63, 0x76, 0x50, 0xa6, 0x0f, 0xf7, 0x28, 0xc3, 0x29, - 0x7f, 0x1d, 0xb0, 0x9e, 0x14, 0x89, 0xf9, 0x74, 0xf9, 0xdd, 0x3a, 0x99, 0xae, 0xbd, 0xd2, 0x27, - 0xd3, 0x73, 0x0f, 0xe8, 0x2f, 0x59, 0x51, 0xab, 0xbc, 0x22, 0x99, 0xe9, 0x4e, 0xda, 0xeb, 0x84, - 0xf5, 0xfe, 0x82, 0x1e, 0x12, 0x22, 0x87, 0x11, 0x5a, 0xbf, 0x61, 0xa2, 0xaf, 0xcb, 0xa8, 0xf5, - 0x2b, 0x9f, 0xf5, 0x8d, 0x5b, 0x7a, 0x49, 0x88, 0xfa, 0x2c, 0x43, 0xaa, 0x0b, 0x16, 0x43, 0x60, - 0xab, 0x59, 0x8b, 0xba, 0x48, 0x88, 0x7e, 0x01, 0xef, 0x15, 0x5e, 0xd9, 0xd0, 0x53, 0x11, 0x0b, - 0x0b, 0x6e, 0xa5, 0xd6, 0x37, 0x6f, 0xed, 0xe7, 0x06, 0x1c, 0x16, 0x1b, 0x70, 0xb8, 0xd0, 0x80, - 0x45, 0xcf, 0x6a, 0x9f, 0x41, 0x43, 0x79, 0x57, 0x42, 0x4f, 0xd2, 0xb1, 0xca, 0xc3, 0x99, 0xb5, - 0x53, 0x28, 0xe7, 0x24, 0x94, 0xee, 0x27, 0x5a, 0x14, 0x88, 0x0c, 0xa3, 0x45, 0x41, 0x9a, 0x25, - 0xba, 0xe9, 0x15, 0x4e, 0xd4, 0xf6, 0x49, 0x14, 0xe4, 0xee, 0x22, 0x96, 0x59, 0xdc, 0x41, 0x42, - 0xf4, 0x82, 0x7d, 0x5a, 0x11, 0x77, 0x49, 0xf4, 0x98, 0x8f, 0x53, 0x2e, 0xaa, 0xd6, 0x76, 0x5e, - 0x48, 0x42, 0xf4, 0x7d, 0x58, 0x4f, 0x6b, 0x60, 0x24, 0x2e, 0xfc, 0x72, 0x39, 0x6f, 0x3d, 0xce, - 0xc9, 0x48, 0x88, 0xbe, 0x07, 0x6b, 0x09, 0x08, 0xb4, 0xa5, 0x82, 0xa2, 0x73, 0x90, 0x2e, 0x22, - 0x21, 0x6a, 0xc3, 0xaa, 0x28, 0x9a, 0x90, 0x48, 0x2d, 0x59, 0x75, 0x67, 0x6d, 0x69, 0x12, 0x0e, - 0x2c, 0x3b, 0x03, 0x91, 0x9e, 0x36, 0x33, 0x60, 0x6a, 0x31, 0xf0, 0x09, 0xd4, 0xa5, 0xfa, 0x20, - 0x71, 0x84, 0x5a, 0x9a, 0x24, 0x8e, 0xd0, 0x0b, 0x89, 0xcf, 0xa0, 0xa1, 0x9c, 0x79, 0x28, 0x8b, - 0x7b, 0xa5, 0x54, 0xb0, 0x76, 0x0a, 0xe5, 0x69, 0xd4, 0x28, 0x07, 0x81, 0x14, 0x35, 0xfa, 0x91, - 0x23, 0x45, 0x4d, 0xfe, 0xec, 0x78, 0x01, 0x90, 0x65, 0xab, 0xc4, 0xa1, 0xca, 0xf1, 0x60, 0x6d, - 0xe7, 0x85, 0x24, 0xec, 0x34, 0x7e, 0x59, 0x6f, 0xb3, 0x8f, 0xcd, 0x3f, 0xa2, 0x7f, 0xce, 0x1f, - 0xb1, 0x4f, 0x26, 0x1f, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x5b, 0xa4, 0x32, 0x85, 0x1e, + 0x15, 0x57, 0xfb, 0x63, 0x92, 0x3c, 0xc7, 0x8e, 0x53, 0x93, 0x9d, 0xf4, 0xf6, 0xc2, 0xe0, 0x6d, + 0x2d, 0x4b, 0x34, 0x12, 0x09, 0x0c, 0x88, 0x41, 0x8b, 0x60, 0x37, 0x76, 0x32, 0x96, 0x11, 0x93, + 0x58, 0xed, 0x19, 0x09, 0x21, 0x44, 0xd4, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0xf6, + 0x7c, 0x70, 0x59, 0xc4, 0xc7, 0x05, 0x71, 0xe1, 0xc4, 0xc2, 0x81, 0xbf, 0x83, 0x3b, 0x9c, 0xf8, + 0x0f, 0xe0, 0xc2, 0x9f, 0xc1, 0x15, 0xd5, 0x47, 0x77, 0x57, 0x55, 0xb7, 0x63, 0xd3, 0x89, 0xe6, + 0x92, 0xb8, 0x5e, 0x7d, 0xfd, 0xde, 0x7b, 0xbf, 0xf7, 0xea, 0x55, 0x35, 0xec, 0x2c, 0x08, 0x8e, + 0x8e, 0xe8, 0x9f, 0xc3, 0x30, 0x0a, 0xe2, 0x00, 0xd5, 0xe8, 0x6f, 0xeb, 0xc3, 0xf3, 0x10, 0xfb, + 0x17, 0x83, 0x67, 0x47, 0xe1, 0xf5, 0xf4, 0x88, 0x75, 0x1c, 0x91, 0xc9, 0xf5, 0xc5, 0x6b, 0x72, + 0xf4, 0x9a, 0xf0, 0x81, 0xf6, 0x8f, 0x00, 0x7a, 0xc1, 0x7c, 0x1e, 0xf8, 0x0e, 0x26, 0x21, 0x32, + 0x61, 0x03, 0x47, 0x51, 0x2f, 0x98, 0x60, 0xd3, 0xe8, 0x18, 0x07, 0x75, 0x27, 0x69, 0xa2, 0x07, + 0x70, 0x0f, 0x47, 0xd1, 0x33, 0x32, 0x35, 0x2b, 0x1d, 0xe3, 0x60, 0xcb, 0x11, 0x2d, 0xfb, 0x97, + 0xd0, 0x3a, 0xc1, 0x33, 0x1c, 0xe3, 0x17, 0x04, 0x47, 0xc4, 0xc1, 0x9f, 0xa3, 0x47, 0xd0, 0xce, + 0x24, 0x83, 0x93, 0x9f, 0x78, 0x24, 0x36, 0x2b, 0x9d, 0xea, 0xc1, 0x96, 0x93, 0x93, 0x23, 0x0b, + 0x36, 0xcf, 0x43, 0xde, 0x36, 0xab, 0x6c, 0xdd, 0xb4, 0x8d, 0x3a, 0xd0, 0x38, 0x0f, 0x71, 0xe4, + 0xc6, 0x5e, 0xe0, 0x0f, 0x4e, 0xcc, 0x1a, 0xeb, 0x96, 0x45, 0x76, 0x00, 0x3b, 0xca, 0xde, 0x24, + 0x44, 0xdf, 0x92, 0xd5, 0x61, 0x3a, 0x34, 0x1e, 0xb7, 0x0f, 0x99, 0x61, 0x32, 0xb9, 0x23, 0xab, + 0xfc, 0x08, 0xda, 0x4f, 0x5d, 0x6f, 0x86, 0x27, 0x79, 0xb8, 0xba, 0xdc, 0x3e, 0x87, 0x9d, 0x3e, + 0x8e, 0x8f, 0x67, 0x33, 0x2e, 0xa3, 0xda, 0x5a, 0xb0, 0x19, 0x24, 0x1a, 0x18, 0x5c, 0x83, 0x40, + 0xd2, 0x20, 0x90, 0x34, 0xe0, 0x86, 0x93, 0x45, 0xf6, 0x04, 0xda, 0xea, 0x82, 0xa5, 0x54, 0x78, + 0x08, 0x90, 0x03, 0x2f, 0x49, 0xec, 0xb7, 0xb0, 0x73, 0x3c, 0x1e, 0x07, 0x0b, 0x3f, 0xee, 0x5d, + 0xe1, 0xf1, 0x35, 0x85, 0x7d, 0x00, 0x3b, 0xec, 0xb7, 0x34, 0xcf, 0x60, 0xf3, 0x74, 0xb1, 0xe2, + 0xa2, 0xca, 0xcd, 0x2e, 0xaa, 0xe6, 0x5d, 0xf4, 0x1f, 0x03, 0xda, 0xea, 0xde, 0x5c, 0xc3, 0xf1, + 0x1a, 0x1a, 0x66, 0x63, 0x50, 0x1f, 0xc0, 0xc1, 0x64, 0x31, 0x8b, 0x53, 0x0d, 0x1b, 0x8f, 0xbf, + 0xc1, 0x67, 0xe8, 0xab, 0x1f, 0x8e, 0x3c, 0x7f, 0x3a, 0x63, 0x94, 0x18, 0xc5, 0x6e, 0xbc, 0x20, + 0x8e, 0x34, 0xd5, 0x1a, 0x42, 0x5b, 0xef, 0xa7, 0xd4, 0x5e, 0xc8, 0x0e, 0x14, 0x2d, 0xf4, 0x11, + 0x34, 0x5d, 0xbe, 0x38, 0x1f, 0x28, 0xd4, 0x57, 0x85, 0xb6, 0x0f, 0xad, 0x3e, 0x8e, 0x99, 0x41, + 0xfc, 0xcb, 0x80, 0xda, 0xf6, 0x21, 0xc0, 0x42, 0x37, 0xab, 0x24, 0xb9, 0xa5, 0x45, 0x7f, 0x6b, + 0x30, 0x12, 0x66, 0x1b, 0x96, 0x32, 0xe8, 0xa7, 0xb0, 0x9d, 0xac, 0xc0, 0x50, 0x56, 0x99, 0x49, + 0x3f, 0x38, 0x24, 0x38, 0x7a, 0x85, 0xa3, 0x0b, 0x37, 0xf4, 0x2e, 0x42, 0x37, 0x72, 0xe7, 0xe4, + 0x30, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xde, 0x80, 0xdd, 0x17, 0xe1, 0xc4, 0x15, 0xe1, 0x2c, 0x54, + 0x7f, 0x02, 0x9b, 0x49, 0x53, 0xc0, 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x2a, 0x9b, 0x04, 0x79, 0x9b, + 0xc8, 0x61, 0xf4, 0x14, 0x90, 0x8e, 0xa5, 0x8c, 0x55, 0xec, 0x2b, 0xb0, 0x46, 0x38, 0xee, 0xcf, + 0x82, 0x97, 0xee, 0xcc, 0xc1, 0xe3, 0x57, 0xcf, 0x30, 0x21, 0xee, 0x14, 0x9f, 0x87, 0x31, 0x55, + 0x6e, 0x19, 0x4f, 0x56, 0x86, 0x39, 0x6a, 0x43, 0x35, 0x08, 0x63, 0x86, 0xbc, 0xee, 0xd0, 0x9f, + 0xf6, 0x39, 0x7c, 0xb0, 0x74, 0xa7, 0x52, 0xd0, 0xff, 0x5d, 0x85, 0xed, 0x5e, 0xe0, 0xbf, 0xc2, + 0x11, 0x61, 0xbb, 0x32, 0x26, 0xbd, 0xf6, 0x71, 0xa4, 0xe4, 0x26, 0x59, 0x84, 0x3e, 0x86, 0x96, + 0x3c, 0x23, 0x85, 0xae, 0x49, 0x29, 0x9f, 0x19, 0x44, 0x32, 0x3d, 0x4f, 0x95, 0x90, 0x24, 0x34, + 0x83, 0xca, 0x33, 0x9e, 0xbf, 0x0d, 0x31, 0xcb, 0xd6, 0x75, 0x27, 0x27, 0xa7, 0x36, 0x14, 0x80, + 0xea, 0xdc, 0x86, 0x02, 0x8b, 0x09, 0x1b, 0xfd, 0x28, 0x58, 0x84, 0x83, 0x13, 0xf3, 0x1e, 0xeb, + 0x48, 0x9a, 0x54, 0x8f, 0x17, 0x7e, 0x84, 0xdd, 0x49, 0x8f, 0x06, 0x9d, 0xb9, 0xc1, 0x16, 0x96, + 0x45, 0x34, 0x4e, 0x4f, 0x22, 0xf7, 0x32, 0x7e, 0x8e, 0xdf, 0xc4, 0xcf, 0xbd, 0x39, 0x36, 0x37, + 0x3b, 0xc6, 0x41, 0xd5, 0x51, 0x85, 0x94, 0x61, 0x03, 0x32, 0xf4, 0x7c, 0x1f, 0x4f, 0xcc, 0xad, + 0x8e, 0x71, 0xb0, 0xe9, 0xa4, 0x6d, 0x64, 0xc3, 0xf6, 0x71, 0x1c, 0xbb, 0xe3, 0x2b, 0x3c, 0x61, + 0xd4, 0x05, 0x06, 0x41, 0x91, 0xd1, 0x5d, 0x06, 0x64, 0x18, 0x79, 0xaf, 0xdc, 0x18, 0xf7, 0xae, + 0xdc, 0xd8, 0x6c, 0xb0, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, 0xc7, 0xcc, 0x0c, 0xdb, 0x1c, + 0xad, 0x24, 0xa2, 0x7b, 0x0d, 0xc8, 0x59, 0x10, 0x0f, 0x7c, 0x26, 0x35, 0x9b, 0x6c, 0x19, 0x45, + 0x86, 0x5a, 0x50, 0x39, 0x7d, 0x63, 0xb6, 0x18, 0x8a, 0xca, 0xe9, 0x1b, 0xfb, 0x2f, 0x06, 0xa0, + 0x11, 0x8e, 0x65, 0x6b, 0x52, 0x42, 0x7e, 0x4f, 0x75, 0xb9, 0xe0, 0x09, 0x4a, 0x78, 0x22, 0x0d, + 0x56, 0xa9, 0xf1, 0x08, 0xda, 0x7e, 0x10, 0x7b, 0x97, 0xde, 0x38, 0x73, 0x58, 0x85, 0x3b, 0x4c, + 0x97, 0xaf, 0x91, 0x90, 0xfa, 0x70, 0x3f, 0x87, 0xad, 0x14, 0x85, 0xff, 0x69, 0x40, 0x7b, 0x84, + 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, 0xeb, 0x59, 0xa5, 0x9e, 0xb7, + 0xca, 0x29, 0xec, 0x6a, 0xba, 0x94, 0xb2, 0xc9, 0xaf, 0x0c, 0x40, 0xfd, 0xbc, 0xe7, 0xf3, 0x3a, + 0x1b, 0x85, 0x3a, 0x6b, 0xd6, 0xab, 0xe4, 0xad, 0xb7, 0xda, 0xbf, 0x5f, 0xc0, 0xfd, 0xfe, 0x5d, + 0xf8, 0x37, 0x47, 0xd7, 0xca, 0x7a, 0x74, 0xb5, 0x7f, 0x63, 0xe4, 0x10, 0x90, 0xf5, 0xa8, 0x41, + 0xab, 0x1c, 0xc5, 0x20, 0x44, 0x54, 0x47, 0xba, 0x78, 0x0d, 0x33, 0xfc, 0xda, 0x80, 0xbd, 0x3c, + 0x8a, 0x52, 0x86, 0xf8, 0x3e, 0x34, 0x95, 0x65, 0x44, 0x41, 0x53, 0x64, 0x09, 0x75, 0xa0, 0xfd, + 0x73, 0x78, 0xc0, 0xeb, 0xc5, 0x12, 0xc6, 0xd0, 0x54, 0xac, 0xe4, 0x55, 0xfc, 0x9d, 0x01, 0xfb, + 0x85, 0xcb, 0xbf, 0x63, 0x2d, 0xff, 0x61, 0x80, 0xd9, 0x75, 0xe3, 0xf1, 0xd5, 0xa8, 0xc0, 0xeb, + 0xb9, 0x65, 0x8d, 0x35, 0x97, 0x5d, 0x23, 0x18, 0x8a, 0x52, 0x40, 0x75, 0xbd, 0x14, 0x50, 0x2b, + 0x0a, 0x9c, 0xf7, 0x97, 0x68, 0x51, 0xca, 0x9e, 0x26, 0x6c, 0x8c, 0x16, 0xe3, 0x31, 0x26, 0x09, + 0x89, 0x93, 0x26, 0x3d, 0x54, 0xf9, 0x55, 0x85, 0x95, 0x71, 0x5b, 0x8e, 0x68, 0xd9, 0x03, 0x68, + 0x3a, 0x98, 0x78, 0x53, 0x9f, 0xaa, 0x27, 0x2a, 0x18, 0xa6, 0xe9, 0x24, 0xa9, 0x60, 0x78, 0x6b, + 0x0d, 0x6a, 0x74, 0xa1, 0x25, 0x2f, 0x55, 0x2a, 0x97, 0xfd, 0x38, 0xad, 0x94, 0xbb, 0x6f, 0x07, + 0x93, 0xdb, 0xe1, 0xf9, 0xd2, 0x80, 0x1a, 0x1d, 0x4c, 0x8f, 0xd3, 0x61, 0x14, 0x5c, 0x7a, 0x33, + 0x3c, 0xbc, 0x0a, 0xe2, 0x40, 0x2c, 0xa4, 0xc8, 0xe8, 0xd1, 0x7f, 0xe6, 0x8d, 0xaf, 0x7d, 0x77, + 0x8e, 0x93, 0xe2, 0x32, 0x69, 0x4b, 0x10, 0xaa, 0x0a, 0x84, 0x87, 0x00, 0xbd, 0x08, 0xbb, 0x31, + 0x66, 0x15, 0x05, 0xf7, 0xae, 0x24, 0xa1, 0xde, 0x18, 0x90, 0xee, 0x2c, 0x18, 0x5f, 0xb3, 0xec, + 0xbf, 0xe9, 0x24, 0x4d, 0x7b, 0x9c, 0xd6, 0xe7, 0x5c, 0xcd, 0x92, 0x57, 0x3a, 0x76, 0x83, 0x17, + 0x39, 0x12, 0xf8, 0x58, 0x66, 0x7b, 0x26, 0xb7, 0xff, 0x64, 0xc0, 0xae, 0xd8, 0x85, 0x74, 0xdf, + 0x9e, 0xb9, 0x73, 0x2c, 0x2e, 0xa3, 0x54, 0x42, 0x9b, 0xc9, 0x65, 0x34, 0x69, 0xa3, 0x13, 0x80, + 0xa1, 0x3b, 0xf5, 0x7c, 0x39, 0xf7, 0x7e, 0x54, 0x50, 0x9c, 0x3b, 0xf8, 0xf3, 0x05, 0x26, 0x71, + 0x36, 0xd6, 0x91, 0xe6, 0xad, 0x91, 0x27, 0xff, 0xcc, 0x4f, 0x2c, 0x05, 0x19, 0x09, 0x51, 0x07, + 0xea, 0x14, 0x78, 0x12, 0xae, 0xb2, 0x46, 0xbc, 0x03, 0x9d, 0x16, 0x00, 0xfc, 0x7a, 0x21, 0x40, + 0x12, 0x06, 0x3e, 0xc1, 0x4b, 0x10, 0x26, 0x36, 0x58, 0xcc, 0x89, 0x88, 0xdd, 0xb4, 0x6d, 0xff, + 0xcd, 0x80, 0xed, 0xe3, 0x59, 0xcc, 0xe3, 0xfd, 0x56, 0x04, 0xa4, 0x23, 0x86, 0x57, 0x81, 0x8f, + 0xcf, 0x16, 0xf3, 0x97, 0x38, 0x62, 0x3b, 0x55, 0x1d, 0x59, 0xa4, 0xb0, 0xae, 0xa6, 0xb1, 0x6e, + 0x0f, 0xea, 0xa7, 0x73, 0xd7, 0x9b, 0x89, 0xca, 0x81, 0x37, 0xa4, 0x4b, 0xd0, 0x44, 0x54, 0xc1, + 0x69, 0xdb, 0x3e, 0x86, 0xa6, 0x84, 0xbc, 0x0c, 0xa7, 0xec, 0x3f, 0x1a, 0xd0, 0x48, 0x3c, 0x93, + 0x1c, 0x19, 0x92, 0x92, 0x46, 0x5e, 0xc9, 0xbb, 0xe1, 0x8c, 0xcc, 0xca, 0xaa, 0xca, 0x4a, 0xfb, + 0xef, 0x06, 0x6c, 0x67, 0x98, 0x6e, 0x19, 0x2a, 0xd5, 0xa2, 0x50, 0xd1, 0x78, 0x55, 0xbd, 0x0b, + 0x5e, 0xd5, 0x34, 0x5e, 0x7d, 0x69, 0x00, 0x1c, 0x4f, 0x26, 0x09, 0xab, 0x56, 0x1b, 0x56, 0x63, + 0x8f, 0xe0, 0x97, 0xcc, 0x9e, 0x65, 0x79, 0x09, 0x41, 0x4d, 0x62, 0x14, 0xfb, 0xad, 0xf0, 0xa6, + 0xae, 0xf1, 0xe6, 0x53, 0x68, 0xa4, 0xc8, 0x4a, 0xb1, 0xe6, 0x0f, 0x06, 0x6c, 0xb3, 0xc4, 0xb6, + 0x2a, 0x66, 0x3e, 0x86, 0xd6, 0xa9, 0x3f, 0x39, 0xf1, 0x88, 0xfb, 0x72, 0xc6, 0xb3, 0xa6, 0xa8, + 0xc3, 0x55, 0xe9, 0xea, 0x14, 0xa2, 0xe8, 0x53, 0xcb, 0xc7, 0x81, 0x84, 0xa6, 0x94, 0x46, 0x97, + 0xd0, 0x7a, 0xe1, 0xaf, 0xa5, 0xd2, 0xea, 0x34, 0x20, 0x43, 0xad, 0x6a, 0x50, 0x7b, 0xb0, 0xa3, + 0xec, 0x53, 0x0a, 0xec, 0x5f, 0x0d, 0xf6, 0x44, 0x98, 0x2e, 0xc3, 0x22, 0x57, 0x8d, 0x4b, 0xe3, + 0x6e, 0x72, 0x79, 0x81, 0x76, 0xb6, 0xe4, 0xfa, 0xb3, 0xc5, 0x5c, 0xe4, 0x53, 0x45, 0x66, 0x7f, + 0x01, 0x5b, 0x69, 0x9b, 0xc6, 0x22, 0xfd, 0x2f, 0x20, 0x29, 0xb1, 0xc8, 0xfa, 0x1f, 0x41, 0xbb, + 0x8b, 0xa7, 0x9e, 0x9f, 0x67, 0x49, 0x4e, 0x5e, 0xc0, 0xa7, 0x6a, 0x11, 0x9f, 0xec, 0x7f, 0xf1, + 0xa3, 0x50, 0xb6, 0x50, 0xa9, 0x3c, 0x72, 0x04, 0x90, 0xad, 0x21, 0xb2, 0xc9, 0x0e, 0x9f, 0x91, + 0x39, 0x51, 0x1a, 0xf2, 0x2e, 0x12, 0xcb, 0x90, 0xdd, 0x7c, 0xd2, 0x3d, 0x93, 0xba, 0x69, 0x1f, + 0x36, 0x68, 0xf3, 0xc2, 0xfb, 0xff, 0x0b, 0xa7, 0x53, 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, + 0xa6, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, 0xec, 0x4b, 0x68, 0x66, 0x4f, 0xef, 0xb7, + 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe5, 0xcf, 0x0b, 0xe5, 0x1c, 0xfb, 0xf8, 0xbf, 0x0d, 0x7e, 0x42, + 0xa0, 0x4f, 0xd2, 0xf3, 0x8f, 0xbd, 0xe8, 0xec, 0xf1, 0x59, 0xea, 0xeb, 0xad, 0xf5, 0x5e, 0x81, + 0x94, 0x84, 0xa8, 0x07, 0x2d, 0xf5, 0x89, 0x11, 0xed, 0x0b, 0x76, 0xeb, 0x8f, 0xa0, 0x96, 0x59, + 0xdc, 0x41, 0x42, 0xf4, 0x0b, 0xd8, 0x5f, 0xf2, 0xea, 0x87, 0x3a, 0x7c, 0xd2, 0xf2, 0xe7, 0x47, + 0xeb, 0xc3, 0x15, 0x23, 0x48, 0x48, 0x15, 0x94, 0x3e, 0x88, 0x24, 0x0a, 0xaa, 0xdf, 0x67, 0x12, + 0x05, 0xf5, 0x2f, 0x27, 0x3f, 0x64, 0x07, 0x71, 0xfa, 0x29, 0x02, 0x65, 0x76, 0x90, 0xbf, 0x77, + 0x58, 0x0f, 0x8a, 0xc4, 0x7c, 0xba, 0xfc, 0x12, 0x9f, 0x4c, 0xd7, 0xbe, 0x3b, 0x24, 0xd3, 0x73, + 0x9f, 0x04, 0x9e, 0xb2, 0xa2, 0x59, 0x79, 0xa5, 0x32, 0xd3, 0x9d, 0xb4, 0xd7, 0x0f, 0xeb, 0xfd, + 0x25, 0x3d, 0x24, 0x44, 0x0e, 0x0b, 0x18, 0xfd, 0x06, 0x8b, 0xbe, 0x22, 0xa3, 0xd6, 0xaf, 0x94, + 0xd6, 0x57, 0x6f, 0xe8, 0x25, 0x21, 0x1a, 0xb0, 0x0c, 0xac, 0x2e, 0x58, 0x0c, 0x81, 0xad, 0x66, + 0x2d, 0xeb, 0x22, 0x21, 0xfa, 0x29, 0xbc, 0x57, 0x78, 0x25, 0x44, 0x0f, 0x45, 0xac, 0x2d, 0xb9, + 0xf5, 0x5a, 0x5f, 0xbb, 0xb1, 0x9f, 0x1b, 0x70, 0x54, 0x6c, 0xc0, 0xd1, 0x52, 0x03, 0x16, 0x3d, + 0xdb, 0x7d, 0x06, 0x4d, 0xe5, 0xdd, 0x0a, 0x3d, 0x48, 0xc7, 0x2a, 0x0f, 0x73, 0xd6, 0x7e, 0xa1, + 0x9c, 0x93, 0x50, 0xba, 0xff, 0x68, 0x51, 0x26, 0x32, 0x98, 0x16, 0x65, 0x69, 0x16, 0xea, 0xa5, + 0x57, 0x44, 0x71, 0x77, 0x48, 0xa2, 0x2c, 0x77, 0xd7, 0xb1, 0xcc, 0xe2, 0x0e, 0x12, 0xa2, 0x27, + 0xec, 0x63, 0x91, 0xb8, 0xab, 0xa2, 0xfb, 0x7c, 0x9c, 0x72, 0x11, 0xb6, 0xf6, 0xf2, 0x42, 0x12, + 0xa2, 0xef, 0xc2, 0x56, 0x5a, 0x63, 0x23, 0xf1, 0xa0, 0x20, 0x5f, 0x17, 0xac, 0xfb, 0x39, 0x19, + 0x09, 0xd1, 0xb7, 0x61, 0x33, 0x01, 0x81, 0x76, 0x55, 0x50, 0x74, 0x0e, 0xd2, 0x45, 0x24, 0x44, + 0x87, 0xb0, 0x21, 0x8a, 0x32, 0x24, 0x52, 0x57, 0x56, 0x3d, 0x5a, 0xbb, 0x9a, 0x84, 0x03, 0xcb, + 0xce, 0x58, 0xa4, 0xa7, 0xe5, 0x0c, 0x98, 0x5a, 0x6c, 0x7c, 0x02, 0x0d, 0xa9, 0xfe, 0x48, 0x1c, + 0xa1, 0x96, 0x3e, 0x89, 0x23, 0xf4, 0x42, 0xe5, 0x33, 0x68, 0x2a, 0x67, 0x2a, 0xca, 0xe2, 0x5e, + 0x29, 0x45, 0xac, 0xfd, 0x42, 0x79, 0x1a, 0x35, 0xca, 0x41, 0x23, 0x45, 0x8d, 0x7e, 0xa4, 0x49, + 0x51, 0x93, 0x3f, 0x9b, 0x9e, 0x00, 0x64, 0xd9, 0x2a, 0x71, 0xa8, 0x72, 0xfc, 0x58, 0x7b, 0x79, + 0x21, 0x09, 0xbb, 0xcd, 0x9f, 0x35, 0x0e, 0xd9, 0x57, 0xf1, 0x1f, 0xd0, 0x3f, 0x2f, 0xef, 0xb1, + 0x4f, 0xde, 0xdf, 0xf9, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x77, 0x7a, 0xcc, 0x2e, 0x1f, 0x00, 0x00, } diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 3b14ad177..8cbe2f708 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -1,6 +1,5 @@ syntax = "proto3"; import "Open_IM/pkg/proto/sdk_ws/ws.proto"; -import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; option go_package = "./user;user"; package user; @@ -63,7 +62,6 @@ message UpdateUserInfoReq{ server_api_params.UserInfo UserInfo = 1; string OpUserID = 2; string operationID = 3; - google.protobuf.Int32Value globalRecvMsgOpt = 4; } message UpdateUserInfoResp{ CommonResp commonResp = 1; From e9ac9faa496eb9028847a7eb2fd5222c9066946a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 19:12:50 +0800 Subject: [PATCH 603/752] user proto modify --- pkg/proto/user/user.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 8cbe2f708..fa7025b28 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -69,7 +69,7 @@ message UpdateUserInfoResp{ message SetGlobalRecvMessageOptReq{ string userID = 1; string operationID = 2; - int32 opt = 3; + int32 globalRecvMsgOpt = 3; } message SetGlobalRecvMessageOptResp{ CommonResp commonResp = 1; From 7bbf2b200bbe2e5027dd1852fd2bfa7ce2d6bcc1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 19:18:17 +0800 Subject: [PATCH 604/752] fix bug --- pkg/proto/user/user.pb.go | 346 +++++++++++++++++++------------------- 1 file changed, 173 insertions(+), 173 deletions(-) diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index f833cefc7..41e69b7f9 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{0} + return fileDescriptor_user_f1112695e0d68005, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -83,7 +83,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{1} + return fileDescriptor_user_f1112695e0d68005, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -136,7 +136,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{2} + return fileDescriptor_user_f1112695e0d68005, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -182,7 +182,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{3} + return fileDescriptor_user_f1112695e0d68005, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -228,7 +228,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{4} + return fileDescriptor_user_f1112695e0d68005, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{5} + return fileDescriptor_user_f1112695e0d68005, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -328,7 +328,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{6} + return fileDescriptor_user_f1112695e0d68005, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -374,7 +374,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{6, 0} + return fileDescriptor_user_f1112695e0d68005, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -421,7 +421,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{7} + return fileDescriptor_user_f1112695e0d68005, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -474,7 +474,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{8} + return fileDescriptor_user_f1112695e0d68005, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -521,7 +521,7 @@ func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{9} + return fileDescriptor_user_f1112695e0d68005, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -573,7 +573,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{10} + return fileDescriptor_user_f1112695e0d68005, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -603,7 +603,7 @@ func (m *UpdateUserInfoResp) GetCommonResp() *CommonResp { type SetGlobalRecvMessageOptReq struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - Opt int32 `protobuf:"varint,3,opt,name=opt" json:"opt,omitempty"` + GlobalRecvMsgOpt int32 `protobuf:"varint,3,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -613,7 +613,7 @@ func (m *SetGlobalRecvMessageOptReq) Reset() { *m = SetGlobalRecvMessage func (m *SetGlobalRecvMessageOptReq) String() string { return proto.CompactTextString(m) } func (*SetGlobalRecvMessageOptReq) ProtoMessage() {} func (*SetGlobalRecvMessageOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{11} + return fileDescriptor_user_f1112695e0d68005, []int{11} } func (m *SetGlobalRecvMessageOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGlobalRecvMessageOptReq.Unmarshal(m, b) @@ -647,9 +647,9 @@ func (m *SetGlobalRecvMessageOptReq) GetOperationID() string { return "" } -func (m *SetGlobalRecvMessageOptReq) GetOpt() int32 { +func (m *SetGlobalRecvMessageOptReq) GetGlobalRecvMsgOpt() int32 { if m != nil { - return m.Opt + return m.GlobalRecvMsgOpt } return 0 } @@ -665,7 +665,7 @@ func (m *SetGlobalRecvMessageOptResp) Reset() { *m = SetGlobalRecvMessag func (m *SetGlobalRecvMessageOptResp) String() string { return proto.CompactTextString(m) } func (*SetGlobalRecvMessageOptResp) ProtoMessage() {} func (*SetGlobalRecvMessageOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{12} + return fileDescriptor_user_f1112695e0d68005, []int{12} } func (m *SetGlobalRecvMessageOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGlobalRecvMessageOptResp.Unmarshal(m, b) @@ -716,7 +716,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{13} + return fileDescriptor_user_f1112695e0d68005, []int{13} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -847,7 +847,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{14} + return fileDescriptor_user_f1112695e0d68005, []int{14} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -899,7 +899,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{15} + return fileDescriptor_user_f1112695e0d68005, []int{15} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -941,7 +941,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{16} + return fileDescriptor_user_f1112695e0d68005, []int{16} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -1007,7 +1007,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{17} + return fileDescriptor_user_f1112695e0d68005, []int{17} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -1047,7 +1047,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{18} + return fileDescriptor_user_f1112695e0d68005, []int{18} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1100,7 +1100,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{19} + return fileDescriptor_user_f1112695e0d68005, []int{19} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1147,7 +1147,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{20} + return fileDescriptor_user_f1112695e0d68005, []int{20} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1200,7 +1200,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{21} + return fileDescriptor_user_f1112695e0d68005, []int{21} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1246,7 +1246,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{22} + return fileDescriptor_user_f1112695e0d68005, []int{22} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1292,7 +1292,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{23} + return fileDescriptor_user_f1112695e0d68005, []int{23} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1340,7 +1340,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{24} + return fileDescriptor_user_f1112695e0d68005, []int{24} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1401,7 +1401,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{25} + return fileDescriptor_user_f1112695e0d68005, []int{25} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1454,7 +1454,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{26} + return fileDescriptor_user_f1112695e0d68005, []int{26} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1499,7 +1499,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{27} + return fileDescriptor_user_f1112695e0d68005, []int{27} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1538,7 +1538,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{28} + return fileDescriptor_user_f1112695e0d68005, []int{28} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1587,7 +1587,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{29} + return fileDescriptor_user_f1112695e0d68005, []int{29} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1654,7 +1654,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{30} + return fileDescriptor_user_f1112695e0d68005, []int{30} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1701,7 +1701,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{31} + return fileDescriptor_user_f1112695e0d68005, []int{31} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1755,7 +1755,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{32} + return fileDescriptor_user_f1112695e0d68005, []int{32} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1812,7 +1812,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{33} + return fileDescriptor_user_f1112695e0d68005, []int{33} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1885,7 +1885,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{34} + return fileDescriptor_user_f1112695e0d68005, []int{34} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1925,7 +1925,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{35} + return fileDescriptor_user_f1112695e0d68005, []int{35} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1980,7 +1980,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{36} + return fileDescriptor_user_f1112695e0d68005, []int{36} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -2043,7 +2043,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{37} + return fileDescriptor_user_f1112695e0d68005, []int{37} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2109,7 +2109,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{38} + return fileDescriptor_user_f1112695e0d68005, []int{38} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2150,7 +2150,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{39} + return fileDescriptor_user_f1112695e0d68005, []int{39} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2209,7 +2209,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{40} + return fileDescriptor_user_f1112695e0d68005, []int{40} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2249,7 +2249,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{41} + return fileDescriptor_user_f1112695e0d68005, []int{41} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2301,7 +2301,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{42} + return fileDescriptor_user_f1112695e0d68005, []int{42} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2341,7 +2341,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{43} + return fileDescriptor_user_f1112695e0d68005, []int{43} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2395,7 +2395,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{44} + return fileDescriptor_user_f1112695e0d68005, []int{44} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2450,7 +2450,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{45} + return fileDescriptor_user_f1112695e0d68005, []int{45} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2510,7 +2510,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{46} + return fileDescriptor_user_f1112695e0d68005, []int{46} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2555,7 +2555,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{47} + return fileDescriptor_user_f1112695e0d68005, []int{47} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2595,7 +2595,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{48} + return fileDescriptor_user_f1112695e0d68005, []int{48} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2647,7 +2647,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{49} + return fileDescriptor_user_f1112695e0d68005, []int{49} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -3526,129 +3526,129 @@ var _User_serviceDesc = grpc.ServiceDesc{ Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_ffbbc34a94bb8978) } +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_f1112695e0d68005) } -var fileDescriptor_user_ffbbc34a94bb8978 = []byte{ - // 1922 bytes of a gzipped FileDescriptorProto +var fileDescriptor_user_f1112695e0d68005 = []byte{ + // 1923 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, 0x15, 0x57, 0xfb, 0x63, 0x92, 0x3c, 0xc7, 0x8e, 0x53, 0x93, 0x9d, 0xf4, 0xf6, 0xc2, 0xe0, 0x6d, 0x2d, 0x4b, 0x34, 0x12, 0x09, 0x0c, 0x88, 0x41, 0x8b, 0x60, 0x37, 0x76, 0x32, 0x96, 0x11, 0x93, 0x58, 0xed, 0x19, 0x09, 0x21, 0x44, 0xd4, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0xf6, - 0x7c, 0x70, 0x59, 0xc4, 0xc7, 0x05, 0x71, 0xe1, 0xc4, 0xc2, 0x81, 0xbf, 0x83, 0x3b, 0x9c, 0xf8, - 0x0f, 0xe0, 0xc2, 0x9f, 0xc1, 0x15, 0xd5, 0x47, 0x77, 0x57, 0x55, 0xb7, 0x63, 0xd3, 0x89, 0xe6, - 0x92, 0xb8, 0x5e, 0x7d, 0xfd, 0xde, 0x7b, 0xbf, 0xf7, 0xea, 0x55, 0x35, 0xec, 0x2c, 0x08, 0x8e, - 0x8e, 0xe8, 0x9f, 0xc3, 0x30, 0x0a, 0xe2, 0x00, 0xd5, 0xe8, 0x6f, 0xeb, 0xc3, 0xf3, 0x10, 0xfb, - 0x17, 0x83, 0x67, 0x47, 0xe1, 0xf5, 0xf4, 0x88, 0x75, 0x1c, 0x91, 0xc9, 0xf5, 0xc5, 0x6b, 0x72, - 0xf4, 0x9a, 0xf0, 0x81, 0xf6, 0x8f, 0x00, 0x7a, 0xc1, 0x7c, 0x1e, 0xf8, 0x0e, 0x26, 0x21, 0x32, - 0x61, 0x03, 0x47, 0x51, 0x2f, 0x98, 0x60, 0xd3, 0xe8, 0x18, 0x07, 0x75, 0x27, 0x69, 0xa2, 0x07, - 0x70, 0x0f, 0x47, 0xd1, 0x33, 0x32, 0x35, 0x2b, 0x1d, 0xe3, 0x60, 0xcb, 0x11, 0x2d, 0xfb, 0x97, - 0xd0, 0x3a, 0xc1, 0x33, 0x1c, 0xe3, 0x17, 0x04, 0x47, 0xc4, 0xc1, 0x9f, 0xa3, 0x47, 0xd0, 0xce, - 0x24, 0x83, 0x93, 0x9f, 0x78, 0x24, 0x36, 0x2b, 0x9d, 0xea, 0xc1, 0x96, 0x93, 0x93, 0x23, 0x0b, - 0x36, 0xcf, 0x43, 0xde, 0x36, 0xab, 0x6c, 0xdd, 0xb4, 0x8d, 0x3a, 0xd0, 0x38, 0x0f, 0x71, 0xe4, - 0xc6, 0x5e, 0xe0, 0x0f, 0x4e, 0xcc, 0x1a, 0xeb, 0x96, 0x45, 0x76, 0x00, 0x3b, 0xca, 0xde, 0x24, - 0x44, 0xdf, 0x92, 0xd5, 0x61, 0x3a, 0x34, 0x1e, 0xb7, 0x0f, 0x99, 0x61, 0x32, 0xb9, 0x23, 0xab, - 0xfc, 0x08, 0xda, 0x4f, 0x5d, 0x6f, 0x86, 0x27, 0x79, 0xb8, 0xba, 0xdc, 0x3e, 0x87, 0x9d, 0x3e, - 0x8e, 0x8f, 0x67, 0x33, 0x2e, 0xa3, 0xda, 0x5a, 0xb0, 0x19, 0x24, 0x1a, 0x18, 0x5c, 0x83, 0x40, - 0xd2, 0x20, 0x90, 0x34, 0xe0, 0x86, 0x93, 0x45, 0xf6, 0x04, 0xda, 0xea, 0x82, 0xa5, 0x54, 0x78, - 0x08, 0x90, 0x03, 0x2f, 0x49, 0xec, 0xb7, 0xb0, 0x73, 0x3c, 0x1e, 0x07, 0x0b, 0x3f, 0xee, 0x5d, - 0xe1, 0xf1, 0x35, 0x85, 0x7d, 0x00, 0x3b, 0xec, 0xb7, 0x34, 0xcf, 0x60, 0xf3, 0x74, 0xb1, 0xe2, - 0xa2, 0xca, 0xcd, 0x2e, 0xaa, 0xe6, 0x5d, 0xf4, 0x1f, 0x03, 0xda, 0xea, 0xde, 0x5c, 0xc3, 0xf1, - 0x1a, 0x1a, 0x66, 0x63, 0x50, 0x1f, 0xc0, 0xc1, 0x64, 0x31, 0x8b, 0x53, 0x0d, 0x1b, 0x8f, 0xbf, - 0xc1, 0x67, 0xe8, 0xab, 0x1f, 0x8e, 0x3c, 0x7f, 0x3a, 0x63, 0x94, 0x18, 0xc5, 0x6e, 0xbc, 0x20, + 0x7c, 0x70, 0x59, 0xb4, 0xc0, 0x05, 0x71, 0xe1, 0xc4, 0xc0, 0x81, 0xbf, 0x83, 0x3b, 0x9c, 0xf8, + 0x0f, 0xe0, 0xc2, 0x9f, 0xc1, 0x15, 0xd5, 0x47, 0x77, 0x57, 0x55, 0xb7, 0x63, 0x6f, 0x67, 0x34, + 0x97, 0xc4, 0xf5, 0xea, 0xa3, 0xdf, 0xef, 0xbd, 0xdf, 0x7b, 0xf5, 0xaa, 0x0a, 0x76, 0x16, 0x04, + 0x47, 0x47, 0xf4, 0xcf, 0x61, 0x18, 0x05, 0x71, 0x80, 0x6a, 0xf4, 0xb7, 0xf5, 0xe1, 0x79, 0x88, + 0xfd, 0x8b, 0xc1, 0x93, 0xa3, 0xf0, 0x7a, 0x7a, 0xc4, 0x3a, 0x8e, 0xc8, 0xe4, 0xfa, 0xe2, 0x25, + 0x39, 0x7a, 0x49, 0xf8, 0x40, 0xfb, 0x27, 0x00, 0xbd, 0x60, 0x3e, 0x0f, 0x7c, 0x07, 0x93, 0x10, + 0x99, 0xb0, 0x81, 0xa3, 0xa8, 0x17, 0x4c, 0xb0, 0x69, 0x74, 0x8c, 0x83, 0xba, 0x93, 0x34, 0xd1, + 0x3d, 0xb8, 0x83, 0xa3, 0xe8, 0x09, 0x99, 0x9a, 0x95, 0x8e, 0x71, 0xb0, 0xe5, 0x88, 0x96, 0xfd, + 0x6b, 0x68, 0x9d, 0xe0, 0x19, 0x8e, 0xf1, 0x33, 0x82, 0x23, 0xe2, 0xe0, 0xcf, 0xd1, 0x03, 0x68, + 0x67, 0x92, 0xc1, 0xc9, 0xcf, 0x3c, 0x12, 0x9b, 0x95, 0x4e, 0xf5, 0x60, 0xcb, 0xc9, 0xc9, 0x91, + 0x05, 0x9b, 0xe7, 0x21, 0x6f, 0x9b, 0x55, 0xb6, 0x6e, 0xda, 0x46, 0x1d, 0x68, 0x9c, 0x87, 0x38, + 0x72, 0x63, 0x2f, 0xf0, 0x07, 0x27, 0x66, 0x8d, 0x75, 0xcb, 0x22, 0x3b, 0x80, 0x1d, 0xe5, 0xdb, + 0x24, 0x44, 0xdf, 0x91, 0xe1, 0x30, 0x0c, 0x8d, 0x87, 0xed, 0x43, 0x66, 0x98, 0x4c, 0xee, 0xc8, + 0x90, 0x1f, 0x40, 0xfb, 0xb1, 0xeb, 0xcd, 0xf0, 0x24, 0xaf, 0xae, 0x2e, 0xb7, 0xcf, 0x61, 0xa7, + 0x8f, 0xe3, 0xe3, 0xd9, 0x8c, 0xcb, 0x28, 0x5a, 0x0b, 0x36, 0x83, 0x04, 0x81, 0xc1, 0x11, 0x04, + 0x12, 0x82, 0x40, 0x42, 0xc0, 0x0d, 0x27, 0x8b, 0xec, 0x09, 0xb4, 0xd5, 0x05, 0x4b, 0x41, 0xb8, + 0x0f, 0x90, 0x53, 0x5e, 0x92, 0xd8, 0xaf, 0x61, 0xe7, 0x78, 0x3c, 0x0e, 0x16, 0x7e, 0xdc, 0xbb, + 0xc2, 0xe3, 0x6b, 0xaa, 0xf6, 0x01, 0xec, 0xb0, 0xdf, 0xd2, 0x3c, 0x83, 0xcd, 0xd3, 0xc5, 0x8a, + 0x8b, 0x2a, 0x37, 0xbb, 0xa8, 0x9a, 0x77, 0xd1, 0x7f, 0x0d, 0x68, 0xab, 0xdf, 0xe6, 0x08, 0xc7, + 0x6b, 0x20, 0xcc, 0xc6, 0xa0, 0x3e, 0x80, 0x83, 0xc9, 0x62, 0x16, 0xa7, 0x08, 0x1b, 0x0f, 0xbf, + 0xc5, 0x67, 0xe8, 0xab, 0x1f, 0x8e, 0x3c, 0x7f, 0x3a, 0x63, 0x94, 0x18, 0xc5, 0x6e, 0xbc, 0x20, 0x8e, 0x34, 0xd5, 0x1a, 0x42, 0x5b, 0xef, 0xa7, 0xd4, 0x5e, 0xc8, 0x0e, 0x14, 0x2d, 0xf4, 0x11, - 0x34, 0x5d, 0xbe, 0x38, 0x1f, 0x28, 0xd4, 0x57, 0x85, 0xb6, 0x0f, 0xad, 0x3e, 0x8e, 0x99, 0x41, - 0xfc, 0xcb, 0x80, 0xda, 0xf6, 0x21, 0xc0, 0x42, 0x37, 0xab, 0x24, 0xb9, 0xa5, 0x45, 0x7f, 0x6b, - 0x30, 0x12, 0x66, 0x1b, 0x96, 0x32, 0xe8, 0xa7, 0xb0, 0x9d, 0xac, 0xc0, 0x50, 0x56, 0x99, 0x49, - 0x3f, 0x38, 0x24, 0x38, 0x7a, 0x85, 0xa3, 0x0b, 0x37, 0xf4, 0x2e, 0x42, 0x37, 0x72, 0xe7, 0xe4, - 0x30, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xde, 0x80, 0xdd, 0x17, 0xe1, 0xc4, 0x15, 0xe1, 0x2c, 0x54, - 0x7f, 0x02, 0x9b, 0x49, 0x53, 0xc0, 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x2a, 0x9b, 0x04, 0x79, 0x9b, - 0xc8, 0x61, 0xf4, 0x14, 0x90, 0x8e, 0xa5, 0x8c, 0x55, 0xec, 0x2b, 0xb0, 0x46, 0x38, 0xee, 0xcf, - 0x82, 0x97, 0xee, 0xcc, 0xc1, 0xe3, 0x57, 0xcf, 0x30, 0x21, 0xee, 0x14, 0x9f, 0x87, 0x31, 0x55, - 0x6e, 0x19, 0x4f, 0x56, 0x86, 0x39, 0x6a, 0x43, 0x35, 0x08, 0x63, 0x86, 0xbc, 0xee, 0xd0, 0x9f, - 0xf6, 0x39, 0x7c, 0xb0, 0x74, 0xa7, 0x52, 0xd0, 0xff, 0x5d, 0x85, 0xed, 0x5e, 0xe0, 0xbf, 0xc2, - 0x11, 0x61, 0xbb, 0x32, 0x26, 0xbd, 0xf6, 0x71, 0xa4, 0xe4, 0x26, 0x59, 0x84, 0x3e, 0x86, 0x96, - 0x3c, 0x23, 0x85, 0xae, 0x49, 0x29, 0x9f, 0x19, 0x44, 0x32, 0x3d, 0x4f, 0x95, 0x90, 0x24, 0x34, - 0x83, 0xca, 0x33, 0x9e, 0xbf, 0x0d, 0x31, 0xcb, 0xd6, 0x75, 0x27, 0x27, 0xa7, 0x36, 0x14, 0x80, - 0xea, 0xdc, 0x86, 0x02, 0x8b, 0x09, 0x1b, 0xfd, 0x28, 0x58, 0x84, 0x83, 0x13, 0xf3, 0x1e, 0xeb, - 0x48, 0x9a, 0x54, 0x8f, 0x17, 0x7e, 0x84, 0xdd, 0x49, 0x8f, 0x06, 0x9d, 0xb9, 0xc1, 0x16, 0x96, - 0x45, 0x34, 0x4e, 0x4f, 0x22, 0xf7, 0x32, 0x7e, 0x8e, 0xdf, 0xc4, 0xcf, 0xbd, 0x39, 0x36, 0x37, - 0x3b, 0xc6, 0x41, 0xd5, 0x51, 0x85, 0x94, 0x61, 0x03, 0x32, 0xf4, 0x7c, 0x1f, 0x4f, 0xcc, 0xad, - 0x8e, 0x71, 0xb0, 0xe9, 0xa4, 0x6d, 0x64, 0xc3, 0xf6, 0x71, 0x1c, 0xbb, 0xe3, 0x2b, 0x3c, 0x61, - 0xd4, 0x05, 0x06, 0x41, 0x91, 0xd1, 0x5d, 0x06, 0x64, 0x18, 0x79, 0xaf, 0xdc, 0x18, 0xf7, 0xae, - 0xdc, 0xd8, 0x6c, 0xb0, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, 0xc7, 0xcc, 0x0c, 0xdb, 0x1c, - 0xad, 0x24, 0xa2, 0x7b, 0x0d, 0xc8, 0x59, 0x10, 0x0f, 0x7c, 0x26, 0x35, 0x9b, 0x6c, 0x19, 0x45, - 0x86, 0x5a, 0x50, 0x39, 0x7d, 0x63, 0xb6, 0x18, 0x8a, 0xca, 0xe9, 0x1b, 0xfb, 0x2f, 0x06, 0xa0, - 0x11, 0x8e, 0x65, 0x6b, 0x52, 0x42, 0x7e, 0x4f, 0x75, 0xb9, 0xe0, 0x09, 0x4a, 0x78, 0x22, 0x0d, - 0x56, 0xa9, 0xf1, 0x08, 0xda, 0x7e, 0x10, 0x7b, 0x97, 0xde, 0x38, 0x73, 0x58, 0x85, 0x3b, 0x4c, - 0x97, 0xaf, 0x91, 0x90, 0xfa, 0x70, 0x3f, 0x87, 0xad, 0x14, 0x85, 0xff, 0x69, 0x40, 0x7b, 0x84, - 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, 0xeb, 0x59, 0xa5, 0x9e, 0xb7, - 0xca, 0x29, 0xec, 0x6a, 0xba, 0x94, 0xb2, 0xc9, 0xaf, 0x0c, 0x40, 0xfd, 0xbc, 0xe7, 0xf3, 0x3a, - 0x1b, 0x85, 0x3a, 0x6b, 0xd6, 0xab, 0xe4, 0xad, 0xb7, 0xda, 0xbf, 0x5f, 0xc0, 0xfd, 0xfe, 0x5d, - 0xf8, 0x37, 0x47, 0xd7, 0xca, 0x7a, 0x74, 0xb5, 0x7f, 0x63, 0xe4, 0x10, 0x90, 0xf5, 0xa8, 0x41, - 0xab, 0x1c, 0xc5, 0x20, 0x44, 0x54, 0x47, 0xba, 0x78, 0x0d, 0x33, 0xfc, 0xda, 0x80, 0xbd, 0x3c, - 0x8a, 0x52, 0x86, 0xf8, 0x3e, 0x34, 0x95, 0x65, 0x44, 0x41, 0x53, 0x64, 0x09, 0x75, 0xa0, 0xfd, - 0x73, 0x78, 0xc0, 0xeb, 0xc5, 0x12, 0xc6, 0xd0, 0x54, 0xac, 0xe4, 0x55, 0xfc, 0x9d, 0x01, 0xfb, - 0x85, 0xcb, 0xbf, 0x63, 0x2d, 0xff, 0x61, 0x80, 0xd9, 0x75, 0xe3, 0xf1, 0xd5, 0xa8, 0xc0, 0xeb, - 0xb9, 0x65, 0x8d, 0x35, 0x97, 0x5d, 0x23, 0x18, 0x8a, 0x52, 0x40, 0x75, 0xbd, 0x14, 0x50, 0x2b, - 0x0a, 0x9c, 0xf7, 0x97, 0x68, 0x51, 0xca, 0x9e, 0x26, 0x6c, 0x8c, 0x16, 0xe3, 0x31, 0x26, 0x09, - 0x89, 0x93, 0x26, 0x3d, 0x54, 0xf9, 0x55, 0x85, 0x95, 0x71, 0x5b, 0x8e, 0x68, 0xd9, 0x03, 0x68, - 0x3a, 0x98, 0x78, 0x53, 0x9f, 0xaa, 0x27, 0x2a, 0x18, 0xa6, 0xe9, 0x24, 0xa9, 0x60, 0x78, 0x6b, - 0x0d, 0x6a, 0x74, 0xa1, 0x25, 0x2f, 0x55, 0x2a, 0x97, 0xfd, 0x38, 0xad, 0x94, 0xbb, 0x6f, 0x07, - 0x93, 0xdb, 0xe1, 0xf9, 0xd2, 0x80, 0x1a, 0x1d, 0x4c, 0x8f, 0xd3, 0x61, 0x14, 0x5c, 0x7a, 0x33, - 0x3c, 0xbc, 0x0a, 0xe2, 0x40, 0x2c, 0xa4, 0xc8, 0xe8, 0xd1, 0x7f, 0xe6, 0x8d, 0xaf, 0x7d, 0x77, - 0x8e, 0x93, 0xe2, 0x32, 0x69, 0x4b, 0x10, 0xaa, 0x0a, 0x84, 0x87, 0x00, 0xbd, 0x08, 0xbb, 0x31, - 0x66, 0x15, 0x05, 0xf7, 0xae, 0x24, 0xa1, 0xde, 0x18, 0x90, 0xee, 0x2c, 0x18, 0x5f, 0xb3, 0xec, - 0xbf, 0xe9, 0x24, 0x4d, 0x7b, 0x9c, 0xd6, 0xe7, 0x5c, 0xcd, 0x92, 0x57, 0x3a, 0x76, 0x83, 0x17, - 0x39, 0x12, 0xf8, 0x58, 0x66, 0x7b, 0x26, 0xb7, 0xff, 0x64, 0xc0, 0xae, 0xd8, 0x85, 0x74, 0xdf, - 0x9e, 0xb9, 0x73, 0x2c, 0x2e, 0xa3, 0x54, 0x42, 0x9b, 0xc9, 0x65, 0x34, 0x69, 0xa3, 0x13, 0x80, - 0xa1, 0x3b, 0xf5, 0x7c, 0x39, 0xf7, 0x7e, 0x54, 0x50, 0x9c, 0x3b, 0xf8, 0xf3, 0x05, 0x26, 0x71, - 0x36, 0xd6, 0x91, 0xe6, 0xad, 0x91, 0x27, 0xff, 0xcc, 0x4f, 0x2c, 0x05, 0x19, 0x09, 0x51, 0x07, - 0xea, 0x14, 0x78, 0x12, 0xae, 0xb2, 0x46, 0xbc, 0x03, 0x9d, 0x16, 0x00, 0xfc, 0x7a, 0x21, 0x40, - 0x12, 0x06, 0x3e, 0xc1, 0x4b, 0x10, 0x26, 0x36, 0x58, 0xcc, 0x89, 0x88, 0xdd, 0xb4, 0x6d, 0xff, - 0xcd, 0x80, 0xed, 0xe3, 0x59, 0xcc, 0xe3, 0xfd, 0x56, 0x04, 0xa4, 0x23, 0x86, 0x57, 0x81, 0x8f, - 0xcf, 0x16, 0xf3, 0x97, 0x38, 0x62, 0x3b, 0x55, 0x1d, 0x59, 0xa4, 0xb0, 0xae, 0xa6, 0xb1, 0x6e, - 0x0f, 0xea, 0xa7, 0x73, 0xd7, 0x9b, 0x89, 0xca, 0x81, 0x37, 0xa4, 0x4b, 0xd0, 0x44, 0x54, 0xc1, - 0x69, 0xdb, 0x3e, 0x86, 0xa6, 0x84, 0xbc, 0x0c, 0xa7, 0xec, 0x3f, 0x1a, 0xd0, 0x48, 0x3c, 0x93, - 0x1c, 0x19, 0x92, 0x92, 0x46, 0x5e, 0xc9, 0xbb, 0xe1, 0x8c, 0xcc, 0xca, 0xaa, 0xca, 0x4a, 0xfb, - 0xef, 0x06, 0x6c, 0x67, 0x98, 0x6e, 0x19, 0x2a, 0xd5, 0xa2, 0x50, 0xd1, 0x78, 0x55, 0xbd, 0x0b, - 0x5e, 0xd5, 0x34, 0x5e, 0x7d, 0x69, 0x00, 0x1c, 0x4f, 0x26, 0x09, 0xab, 0x56, 0x1b, 0x56, 0x63, - 0x8f, 0xe0, 0x97, 0xcc, 0x9e, 0x65, 0x79, 0x09, 0x41, 0x4d, 0x62, 0x14, 0xfb, 0xad, 0xf0, 0xa6, - 0xae, 0xf1, 0xe6, 0x53, 0x68, 0xa4, 0xc8, 0x4a, 0xb1, 0xe6, 0x0f, 0x06, 0x6c, 0xb3, 0xc4, 0xb6, - 0x2a, 0x66, 0x3e, 0x86, 0xd6, 0xa9, 0x3f, 0x39, 0xf1, 0x88, 0xfb, 0x72, 0xc6, 0xb3, 0xa6, 0xa8, - 0xc3, 0x55, 0xe9, 0xea, 0x14, 0xa2, 0xe8, 0x53, 0xcb, 0xc7, 0x81, 0x84, 0xa6, 0x94, 0x46, 0x97, - 0xd0, 0x7a, 0xe1, 0xaf, 0xa5, 0xd2, 0xea, 0x34, 0x20, 0x43, 0xad, 0x6a, 0x50, 0x7b, 0xb0, 0xa3, - 0xec, 0x53, 0x0a, 0xec, 0x5f, 0x0d, 0xf6, 0x44, 0x98, 0x2e, 0xc3, 0x22, 0x57, 0x8d, 0x4b, 0xe3, - 0x6e, 0x72, 0x79, 0x81, 0x76, 0xb6, 0xe4, 0xfa, 0xb3, 0xc5, 0x5c, 0xe4, 0x53, 0x45, 0x66, 0x7f, - 0x01, 0x5b, 0x69, 0x9b, 0xc6, 0x22, 0xfd, 0x2f, 0x20, 0x29, 0xb1, 0xc8, 0xfa, 0x1f, 0x41, 0xbb, - 0x8b, 0xa7, 0x9e, 0x9f, 0x67, 0x49, 0x4e, 0x5e, 0xc0, 0xa7, 0x6a, 0x11, 0x9f, 0xec, 0x7f, 0xf1, - 0xa3, 0x50, 0xb6, 0x50, 0xa9, 0x3c, 0x72, 0x04, 0x90, 0xad, 0x21, 0xb2, 0xc9, 0x0e, 0x9f, 0x91, - 0x39, 0x51, 0x1a, 0xf2, 0x2e, 0x12, 0xcb, 0x90, 0xdd, 0x7c, 0xd2, 0x3d, 0x93, 0xba, 0x69, 0x1f, - 0x36, 0x68, 0xf3, 0xc2, 0xfb, 0xff, 0x0b, 0xa7, 0x53, 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, - 0xa6, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, 0xec, 0x4b, 0x68, 0x66, 0x4f, 0xef, 0xb7, - 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe5, 0xcf, 0x0b, 0xe5, 0x1c, 0xfb, 0xf8, 0xbf, 0x0d, 0x7e, 0x42, - 0xa0, 0x4f, 0xd2, 0xf3, 0x8f, 0xbd, 0xe8, 0xec, 0xf1, 0x59, 0xea, 0xeb, 0xad, 0xf5, 0x5e, 0x81, - 0x94, 0x84, 0xa8, 0x07, 0x2d, 0xf5, 0x89, 0x11, 0xed, 0x0b, 0x76, 0xeb, 0x8f, 0xa0, 0x96, 0x59, - 0xdc, 0x41, 0x42, 0xf4, 0x0b, 0xd8, 0x5f, 0xf2, 0xea, 0x87, 0x3a, 0x7c, 0xd2, 0xf2, 0xe7, 0x47, - 0xeb, 0xc3, 0x15, 0x23, 0x48, 0x48, 0x15, 0x94, 0x3e, 0x88, 0x24, 0x0a, 0xaa, 0xdf, 0x67, 0x12, - 0x05, 0xf5, 0x2f, 0x27, 0x3f, 0x64, 0x07, 0x71, 0xfa, 0x29, 0x02, 0x65, 0x76, 0x90, 0xbf, 0x77, - 0x58, 0x0f, 0x8a, 0xc4, 0x7c, 0xba, 0xfc, 0x12, 0x9f, 0x4c, 0xd7, 0xbe, 0x3b, 0x24, 0xd3, 0x73, - 0x9f, 0x04, 0x9e, 0xb2, 0xa2, 0x59, 0x79, 0xa5, 0x32, 0xd3, 0x9d, 0xb4, 0xd7, 0x0f, 0xeb, 0xfd, - 0x25, 0x3d, 0x24, 0x44, 0x0e, 0x0b, 0x18, 0xfd, 0x06, 0x8b, 0xbe, 0x22, 0xa3, 0xd6, 0xaf, 0x94, - 0xd6, 0x57, 0x6f, 0xe8, 0x25, 0x21, 0x1a, 0xb0, 0x0c, 0xac, 0x2e, 0x58, 0x0c, 0x81, 0xad, 0x66, - 0x2d, 0xeb, 0x22, 0x21, 0xfa, 0x29, 0xbc, 0x57, 0x78, 0x25, 0x44, 0x0f, 0x45, 0xac, 0x2d, 0xb9, - 0xf5, 0x5a, 0x5f, 0xbb, 0xb1, 0x9f, 0x1b, 0x70, 0x54, 0x6c, 0xc0, 0xd1, 0x52, 0x03, 0x16, 0x3d, - 0xdb, 0x7d, 0x06, 0x4d, 0xe5, 0xdd, 0x0a, 0x3d, 0x48, 0xc7, 0x2a, 0x0f, 0x73, 0xd6, 0x7e, 0xa1, - 0x9c, 0x93, 0x50, 0xba, 0xff, 0x68, 0x51, 0x26, 0x32, 0x98, 0x16, 0x65, 0x69, 0x16, 0xea, 0xa5, - 0x57, 0x44, 0x71, 0x77, 0x48, 0xa2, 0x2c, 0x77, 0xd7, 0xb1, 0xcc, 0xe2, 0x0e, 0x12, 0xa2, 0x27, - 0xec, 0x63, 0x91, 0xb8, 0xab, 0xa2, 0xfb, 0x7c, 0x9c, 0x72, 0x11, 0xb6, 0xf6, 0xf2, 0x42, 0x12, - 0xa2, 0xef, 0xc2, 0x56, 0x5a, 0x63, 0x23, 0xf1, 0xa0, 0x20, 0x5f, 0x17, 0xac, 0xfb, 0x39, 0x19, - 0x09, 0xd1, 0xb7, 0x61, 0x33, 0x01, 0x81, 0x76, 0x55, 0x50, 0x74, 0x0e, 0xd2, 0x45, 0x24, 0x44, - 0x87, 0xb0, 0x21, 0x8a, 0x32, 0x24, 0x52, 0x57, 0x56, 0x3d, 0x5a, 0xbb, 0x9a, 0x84, 0x03, 0xcb, - 0xce, 0x58, 0xa4, 0xa7, 0xe5, 0x0c, 0x98, 0x5a, 0x6c, 0x7c, 0x02, 0x0d, 0xa9, 0xfe, 0x48, 0x1c, - 0xa1, 0x96, 0x3e, 0x89, 0x23, 0xf4, 0x42, 0xe5, 0x33, 0x68, 0x2a, 0x67, 0x2a, 0xca, 0xe2, 0x5e, - 0x29, 0x45, 0xac, 0xfd, 0x42, 0x79, 0x1a, 0x35, 0xca, 0x41, 0x23, 0x45, 0x8d, 0x7e, 0xa4, 0x49, - 0x51, 0x93, 0x3f, 0x9b, 0x9e, 0x00, 0x64, 0xd9, 0x2a, 0x71, 0xa8, 0x72, 0xfc, 0x58, 0x7b, 0x79, - 0x21, 0x09, 0xbb, 0xcd, 0x9f, 0x35, 0x0e, 0xd9, 0x57, 0xf1, 0x1f, 0xd0, 0x3f, 0x2f, 0xef, 0xb1, - 0x4f, 0xde, 0xdf, 0xf9, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x77, 0x7a, 0xcc, 0x2e, 0x1f, - 0x00, 0x00, + 0x34, 0x5d, 0xbe, 0x38, 0x1f, 0x28, 0xe0, 0xab, 0x42, 0xdb, 0x87, 0x56, 0x1f, 0xc7, 0xcc, 0x20, + 0xfe, 0x65, 0x40, 0x6d, 0x7b, 0x1f, 0x60, 0xa1, 0x9b, 0x55, 0x92, 0xdc, 0xd2, 0xa2, 0xbf, 0x33, + 0x18, 0x09, 0xb3, 0x0f, 0x96, 0x32, 0xe8, 0xa7, 0xb0, 0x9d, 0xac, 0xc0, 0xb4, 0xac, 0x32, 0x93, + 0x7e, 0x70, 0x48, 0x70, 0xf4, 0x02, 0x47, 0x17, 0x6e, 0xe8, 0x5d, 0x84, 0x6e, 0xe4, 0xce, 0xc9, + 0x61, 0xfa, 0x21, 0x65, 0x82, 0xfd, 0x07, 0x03, 0x76, 0x9f, 0x85, 0x13, 0x57, 0x84, 0xb3, 0x80, + 0xfe, 0x08, 0x36, 0x93, 0xa6, 0x50, 0xe3, 0xc6, 0x25, 0xd3, 0xc1, 0xab, 0x6c, 0x12, 0xe4, 0x6d, + 0x22, 0x87, 0xd1, 0x63, 0x40, 0xba, 0x2e, 0x65, 0xac, 0x62, 0x7f, 0x69, 0x80, 0x35, 0xc2, 0x71, + 0x7f, 0x16, 0x3c, 0x77, 0x67, 0x0e, 0x1e, 0xbf, 0x78, 0x82, 0x09, 0x71, 0xa7, 0xf8, 0x3c, 0x8c, + 0x29, 0xba, 0x65, 0x44, 0x59, 0x19, 0xe7, 0x34, 0xc9, 0x4c, 0xb3, 0x45, 0xc9, 0xf4, 0x3c, 0x8c, + 0x19, 0x8e, 0xba, 0x93, 0x93, 0xdb, 0xe7, 0xf0, 0xc1, 0x52, 0x1d, 0x4a, 0xa1, 0xfa, 0x4f, 0x15, + 0xb6, 0x7b, 0x81, 0xff, 0x02, 0x47, 0x84, 0xe9, 0xc3, 0x48, 0xf6, 0xd2, 0xc7, 0x91, 0x92, 0xb6, + 0x64, 0x11, 0xfa, 0x18, 0x5a, 0xf2, 0x8c, 0x14, 0x94, 0x26, 0xa5, 0x54, 0xcf, 0x21, 0x92, 0x24, + 0x14, 0xb7, 0x3c, 0xe3, 0xe9, 0xeb, 0x10, 0xb3, 0x44, 0x5e, 0x77, 0x72, 0x72, 0x6a, 0x5d, 0xa1, + 0x50, 0x9d, 0x5b, 0x57, 0xe8, 0x62, 0xc2, 0x46, 0x3f, 0x0a, 0x16, 0xe1, 0xe0, 0xc4, 0xbc, 0xc3, + 0x3a, 0x92, 0x26, 0xc5, 0xf1, 0xcc, 0x8f, 0xb0, 0x3b, 0xe9, 0xd1, 0x78, 0x34, 0x37, 0xd8, 0xc2, + 0xb2, 0x88, 0x86, 0xf0, 0x49, 0xe4, 0x5e, 0xc6, 0x4f, 0xf1, 0xab, 0xf8, 0xa9, 0x37, 0xc7, 0xe6, + 0x66, 0xc7, 0x38, 0xa8, 0x3a, 0xaa, 0x90, 0x92, 0x6f, 0x40, 0x86, 0x9e, 0xef, 0xe3, 0x89, 0xb9, + 0xd5, 0x31, 0x0e, 0x36, 0x9d, 0xb4, 0x8d, 0x6c, 0xd8, 0x3e, 0x8e, 0x63, 0x77, 0x7c, 0x85, 0x27, + 0x8c, 0xd5, 0xc0, 0x54, 0x50, 0x64, 0xf4, 0x2b, 0x03, 0x32, 0x8c, 0xbc, 0x17, 0x6e, 0x8c, 0x7b, + 0x57, 0x6e, 0x6c, 0x36, 0xd8, 0x22, 0xaa, 0x90, 0x6a, 0xcb, 0x14, 0x3f, 0x8e, 0x99, 0x19, 0xb6, + 0xb9, 0xb6, 0x92, 0x88, 0x7e, 0x6b, 0x40, 0xce, 0x82, 0x78, 0xe0, 0x33, 0xa9, 0xd9, 0x64, 0xcb, + 0x28, 0x32, 0xd4, 0x82, 0xca, 0xe9, 0x2b, 0xb3, 0xc5, 0xb4, 0xa8, 0x9c, 0xbe, 0xb2, 0xff, 0x6a, + 0x00, 0x1a, 0xe1, 0x58, 0xb6, 0x26, 0xa5, 0xea, 0x0f, 0x54, 0x97, 0x0b, 0x9e, 0xa0, 0x84, 0x27, + 0xd2, 0x60, 0x95, 0x1a, 0x0f, 0xa0, 0xed, 0x07, 0xb1, 0x77, 0xe9, 0x8d, 0x33, 0x87, 0x55, 0xb8, + 0xc3, 0x74, 0xf9, 0x1a, 0xb9, 0xaa, 0x0f, 0x77, 0x73, 0xba, 0x95, 0xa2, 0xf0, 0xbf, 0x0c, 0x68, + 0x8f, 0x70, 0x9c, 0x31, 0x8b, 0x62, 0x7c, 0xa7, 0x34, 0xce, 0x59, 0xa5, 0xb6, 0x9e, 0x55, 0xea, + 0x79, 0xab, 0x9c, 0xc2, 0xae, 0x86, 0xa5, 0x94, 0x4d, 0x7e, 0x63, 0x00, 0xea, 0xe7, 0x3d, 0x9f, + 0xc7, 0x6c, 0x14, 0x62, 0xd6, 0xac, 0x57, 0xc9, 0x5b, 0x6f, 0xb5, 0x7f, 0xbf, 0x80, 0xbb, 0xfd, + 0xb7, 0xe1, 0xdf, 0x1c, 0x5d, 0x2b, 0xeb, 0xd1, 0xd5, 0xfe, 0xad, 0x91, 0xd3, 0x80, 0xac, 0x47, + 0x0d, 0x5a, 0x00, 0x29, 0x06, 0x21, 0xa2, 0x70, 0xd2, 0xc5, 0x6b, 0x98, 0xe1, 0x4b, 0x03, 0xf6, + 0xf2, 0x5a, 0x94, 0x32, 0xc4, 0x0f, 0xa1, 0xa9, 0x2c, 0x23, 0x6a, 0x9d, 0x22, 0x4b, 0xa8, 0x03, + 0xed, 0x5f, 0xc2, 0x3d, 0x5e, 0x4a, 0x96, 0x30, 0x86, 0x06, 0xb1, 0x92, 0x87, 0xf8, 0x7b, 0x03, + 0xf6, 0x0b, 0x97, 0x7f, 0xc7, 0x28, 0xff, 0x69, 0x80, 0xd9, 0x75, 0xe3, 0xf1, 0xd5, 0xa8, 0xc0, + 0xeb, 0xb9, 0x65, 0x8d, 0x35, 0x97, 0x5d, 0x23, 0x18, 0x8a, 0x52, 0x40, 0x75, 0xbd, 0x14, 0x50, + 0x2b, 0x0a, 0x9c, 0xf7, 0x97, 0xa0, 0x28, 0x65, 0x4f, 0x13, 0x36, 0x46, 0x8b, 0xf1, 0x18, 0x93, + 0x84, 0xc4, 0x49, 0x93, 0x6e, 0xaa, 0xfc, 0x14, 0xc3, 0x2a, 0xbc, 0x2d, 0x47, 0xb4, 0xec, 0x01, + 0x34, 0x1d, 0x4c, 0xbc, 0xa9, 0x4f, 0xe1, 0x89, 0xda, 0x86, 0x21, 0x9d, 0x24, 0xb5, 0x0d, 0x6f, + 0xad, 0x41, 0x8d, 0x2e, 0xb4, 0xe4, 0xa5, 0x4a, 0xe5, 0xb2, 0x9f, 0xa6, 0x45, 0x74, 0xf7, 0xf5, + 0x60, 0x72, 0x3b, 0x7d, 0xde, 0x18, 0x50, 0xa3, 0x83, 0xe9, 0x76, 0x3a, 0x8c, 0x82, 0x4b, 0x6f, + 0x86, 0x87, 0x57, 0x41, 0x1c, 0x88, 0x85, 0x14, 0x19, 0xdd, 0xfa, 0xcf, 0xbc, 0xf1, 0xb5, 0xef, + 0xce, 0x71, 0x52, 0x77, 0x26, 0x6d, 0x49, 0x85, 0xaa, 0xa2, 0xc2, 0x7d, 0x80, 0x5e, 0x84, 0xdd, + 0x18, 0xb3, 0x8a, 0x82, 0x7b, 0x57, 0x92, 0x50, 0x6f, 0x0c, 0x48, 0x77, 0x16, 0x8c, 0xaf, 0x59, + 0xf6, 0xdf, 0x74, 0x92, 0xa6, 0x3d, 0x4e, 0x4b, 0x77, 0x0e, 0xb3, 0xe4, 0x69, 0x8f, 0x1d, 0xee, + 0x45, 0x8e, 0x04, 0x3e, 0x96, 0xd9, 0x9e, 0xc9, 0xed, 0x3f, 0x1b, 0xb0, 0x2b, 0xbe, 0x42, 0xba, + 0xaf, 0xcf, 0xdc, 0x39, 0x16, 0xe7, 0x54, 0x2a, 0xa1, 0xcd, 0xe4, 0x9c, 0x9a, 0xb4, 0xd1, 0x09, + 0xc0, 0xd0, 0x9d, 0x7a, 0xbe, 0x9c, 0x7b, 0x3f, 0x2a, 0xa8, 0xdb, 0x1d, 0xfc, 0xf9, 0x02, 0x93, + 0x38, 0x1b, 0xeb, 0x48, 0xf3, 0xd6, 0xc8, 0x93, 0x7f, 0xe1, 0x3b, 0x96, 0xa2, 0x19, 0x09, 0x51, + 0x07, 0xea, 0x54, 0xf1, 0x24, 0x5c, 0x65, 0x44, 0xbc, 0x03, 0x9d, 0x16, 0x28, 0xf8, 0xcd, 0x42, + 0x05, 0x49, 0x18, 0xf8, 0x04, 0x2f, 0xd1, 0x30, 0xb1, 0xc1, 0x62, 0x4e, 0x44, 0xec, 0xa6, 0x6d, + 0xfb, 0xef, 0x06, 0x6c, 0x1f, 0xcf, 0x62, 0x1e, 0xef, 0xb7, 0x22, 0x20, 0x1d, 0x31, 0xbc, 0x0a, + 0x7c, 0x7c, 0xb6, 0x98, 0x3f, 0xc7, 0x11, 0xfb, 0x52, 0xd5, 0x91, 0x45, 0x0a, 0xeb, 0x6a, 0x1a, + 0xeb, 0xf6, 0xa0, 0x7e, 0x3a, 0x77, 0xbd, 0x99, 0xa8, 0x1c, 0x78, 0x43, 0x3a, 0x1f, 0x4d, 0x44, + 0x15, 0x9c, 0xb6, 0xed, 0x63, 0x68, 0x4a, 0x9a, 0x97, 0xe1, 0x94, 0xfd, 0x27, 0x03, 0x1a, 0x89, + 0x67, 0x92, 0x2d, 0x43, 0x02, 0x69, 0xe4, 0x41, 0xbe, 0x1d, 0xce, 0xc8, 0xac, 0xac, 0xaa, 0xac, + 0xb4, 0xff, 0x61, 0xc0, 0x76, 0xa6, 0xd3, 0x2d, 0x43, 0xa5, 0x5a, 0x14, 0x2a, 0x1a, 0xaf, 0xaa, + 0x6f, 0x83, 0x57, 0x35, 0x8d, 0x57, 0x6f, 0x0c, 0x80, 0xe3, 0xc9, 0x24, 0x61, 0xd5, 0x6a, 0xc3, + 0x6a, 0xec, 0x11, 0xfc, 0x92, 0xd9, 0xb3, 0x2c, 0x2f, 0x21, 0xa8, 0x49, 0x8c, 0x62, 0xbf, 0x15, + 0xde, 0xd4, 0x35, 0xde, 0x7c, 0x0a, 0x8d, 0x54, 0xb3, 0x52, 0xac, 0xf9, 0xa3, 0x01, 0xdb, 0x2c, + 0xb1, 0xad, 0x8a, 0x99, 0x8f, 0xa1, 0x75, 0xea, 0x4f, 0x4e, 0x3c, 0xe2, 0x3e, 0x9f, 0xf1, 0xac, + 0x29, 0xea, 0x70, 0x55, 0xba, 0x3a, 0x85, 0x28, 0x78, 0x6a, 0xf9, 0x38, 0x90, 0xb4, 0x29, 0x85, + 0xe8, 0x12, 0x5a, 0xcf, 0xfc, 0xb5, 0x20, 0xad, 0x4e, 0x03, 0xb2, 0xaa, 0x55, 0x4d, 0xd5, 0x1e, + 0xec, 0x28, 0xdf, 0x29, 0xa5, 0xec, 0xdf, 0x0c, 0x76, 0x7b, 0x98, 0x2e, 0xc3, 0x22, 0x57, 0x8d, + 0x4b, 0xe3, 0xed, 0xe4, 0xf2, 0x02, 0x74, 0xb6, 0xe4, 0xfa, 0xb3, 0xc5, 0x5c, 0xe4, 0x53, 0x45, + 0x66, 0x7f, 0x01, 0x5b, 0x69, 0x9b, 0xc6, 0x22, 0xfd, 0x2f, 0x54, 0x52, 0x62, 0x91, 0xf5, 0x3f, + 0x80, 0x76, 0x17, 0x4f, 0x3d, 0x3f, 0xcf, 0x92, 0x9c, 0xbc, 0x80, 0x4f, 0xd5, 0x22, 0x3e, 0xd9, + 0xff, 0xe6, 0x5b, 0xa1, 0x6c, 0xa1, 0x52, 0x79, 0xe4, 0x08, 0x20, 0x5b, 0x43, 0x64, 0x93, 0x1d, + 0x3e, 0x23, 0x73, 0xa2, 0x34, 0xe4, 0x5d, 0x24, 0x96, 0x21, 0x3b, 0xf9, 0xa4, 0xdf, 0x4c, 0xea, + 0xa6, 0x7d, 0xd8, 0xa0, 0xcd, 0x0b, 0xef, 0xab, 0x17, 0x4e, 0xa7, 0xec, 0x14, 0xa3, 0xad, 0x48, + 0x42, 0xf4, 0x6d, 0xc9, 0x8d, 0x22, 0xd3, 0xe7, 0xc0, 0x67, 0x23, 0xec, 0x4b, 0x68, 0x66, 0xb7, + 0xf2, 0xb7, 0x53, 0xe9, 0xc6, 0x18, 0xea, 0xca, 0x2f, 0x0f, 0xe5, 0x1c, 0xfb, 0xf0, 0x7f, 0x0d, + 0xbe, 0x43, 0xa0, 0x4f, 0xd2, 0xfd, 0x8f, 0xdd, 0xe8, 0xec, 0xf1, 0x59, 0xea, 0xc5, 0xae, 0xf5, + 0x5e, 0x81, 0x94, 0x84, 0xa8, 0x07, 0x2d, 0xf5, 0xf6, 0x11, 0xed, 0x0b, 0x76, 0xeb, 0xf7, 0xa3, + 0x96, 0x59, 0xdc, 0x41, 0x42, 0xf4, 0x2b, 0xd8, 0x5f, 0x72, 0xeb, 0x87, 0x3a, 0x7c, 0xd2, 0xf2, + 0x8b, 0x49, 0xeb, 0xc3, 0x15, 0x23, 0x48, 0x48, 0x01, 0x4a, 0x6f, 0x25, 0x09, 0x40, 0xf5, 0xe9, + 0x26, 0x01, 0xa8, 0x3f, 0xaa, 0xfc, 0x98, 0x6d, 0xc4, 0xe9, 0x2b, 0x05, 0xca, 0xec, 0x20, 0x3f, + 0x85, 0x58, 0xf7, 0x8a, 0xc4, 0x7c, 0xba, 0x7c, 0x49, 0x9f, 0x4c, 0xd7, 0x9e, 0x24, 0x92, 0xe9, + 0xb9, 0xd7, 0x82, 0xc7, 0xac, 0x68, 0x56, 0x6e, 0xa9, 0xcc, 0xf4, 0x4b, 0xda, 0xed, 0x87, 0xf5, + 0xfe, 0x92, 0x1e, 0x12, 0x22, 0x87, 0x05, 0x8c, 0x7e, 0x82, 0x45, 0x5f, 0x93, 0xb5, 0xd6, 0x8f, + 0x94, 0xd6, 0xd7, 0x6f, 0xe8, 0x25, 0x21, 0x1a, 0xb0, 0x0c, 0xac, 0x2e, 0x58, 0xac, 0x02, 0x5b, + 0xcd, 0x5a, 0xd6, 0x45, 0x42, 0xf4, 0x73, 0x78, 0xaf, 0xf0, 0x48, 0x88, 0xee, 0x8b, 0x58, 0x5b, + 0x72, 0xea, 0xb5, 0xbe, 0x71, 0x63, 0x3f, 0x37, 0xe0, 0xa8, 0xd8, 0x80, 0xa3, 0xa5, 0x06, 0x2c, + 0xba, 0xb6, 0xfb, 0x0c, 0x9a, 0xca, 0xbd, 0x15, 0xba, 0x97, 0x8e, 0x55, 0x2e, 0xe6, 0xac, 0xfd, + 0x42, 0x39, 0x27, 0xa1, 0x74, 0xfe, 0xd1, 0xa2, 0x4c, 0x64, 0x30, 0x2d, 0xca, 0xd2, 0x2c, 0xd4, + 0x4b, 0x8f, 0x88, 0xe2, 0xec, 0x90, 0x44, 0x59, 0xee, 0xac, 0x63, 0x99, 0xc5, 0x1d, 0x24, 0x44, + 0x8f, 0xd8, 0x3b, 0x92, 0x38, 0xab, 0xa2, 0xbb, 0x7c, 0x9c, 0x72, 0x10, 0xb6, 0xf6, 0xf2, 0x42, + 0x12, 0xa2, 0xef, 0xc3, 0x56, 0x5a, 0x63, 0x23, 0x71, 0xa1, 0x20, 0x1f, 0x17, 0xac, 0xbb, 0x39, + 0x19, 0x09, 0xd1, 0x77, 0x61, 0x33, 0x51, 0x02, 0xed, 0xaa, 0x4a, 0xd1, 0x39, 0x48, 0x17, 0x91, + 0x10, 0x1d, 0xc2, 0x86, 0x28, 0xca, 0x90, 0x48, 0x5d, 0x59, 0xf5, 0x68, 0xed, 0x6a, 0x12, 0xae, + 0x58, 0xb6, 0xc7, 0x22, 0x3d, 0x2d, 0x67, 0x8a, 0xa9, 0xc5, 0xc6, 0x27, 0xd0, 0x90, 0xea, 0x8f, + 0xc4, 0x11, 0x6a, 0xe9, 0x93, 0x38, 0x42, 0x2f, 0x54, 0x3e, 0x83, 0xa6, 0xb2, 0xa7, 0xa2, 0x2c, + 0xee, 0x95, 0x52, 0xc4, 0xda, 0x2f, 0x94, 0xa7, 0x51, 0xa3, 0x6c, 0x34, 0x52, 0xd4, 0xe8, 0x5b, + 0x9a, 0x14, 0x35, 0xf9, 0xbd, 0xe9, 0x11, 0x40, 0x96, 0xad, 0x12, 0x87, 0x2a, 0xdb, 0x8f, 0xb5, + 0x97, 0x17, 0x92, 0xb0, 0xdb, 0xfc, 0x45, 0xe3, 0x90, 0x3d, 0x98, 0xff, 0x88, 0xfe, 0x79, 0x7e, + 0x87, 0xbd, 0x86, 0x7f, 0xef, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x32, 0x71, 0xc8, 0xa6, 0x49, + 0x1f, 0x00, 0x00, } From 20851f2a966859b45c12805c5e49181e1b0e93fb Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 19:26:09 +0800 Subject: [PATCH 605/752] fix bug --- internal/api/user/user.go | 4 ---- internal/rpc/user/user.go | 25 +++++-------------------- pkg/base_info/public_struct.go | 17 ++++++++--------- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index f3cc8bdf7..af93416b4 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -15,7 +15,6 @@ import ( "Open_IM/pkg/utils" "context" "github.com/gin-gonic/gin" - "github.com/golang/protobuf/ptypes/wrappers" "net/http" "strings" ) @@ -216,9 +215,6 @@ func UpdateUserInfo(c *gin.Context) { return } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) - if params.GlobalRecvMsgOpt != nil { - req.GlobalRecvMsgOpt = &wrappers.Int32Value{Value: *params.GlobalRecvMsgOpt} - } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) if etcdConn == nil { errMsg := req.OperationID + "getcdv3.GetConn == nil" diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index b38dfa57d..86bd07c5b 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -383,26 +383,11 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI if req.UserInfo.Birth != 0 { user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth)) } - m := make(map[string]interface{}, 1) - if req.GlobalRecvMsgOpt != nil { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.GlobalRecvMsgOpt, "set GlobalRecvMsgOpt") - m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt.Value - err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } - err = imdb.UpdateUserInfoByMap(user, m) - if err != nil { - log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } - } else { - err := imdb.UpdateUserInfo(user) - if err != nil { - log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } + + err := imdb.UpdateUserInfo(user) + if err != nil { + log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.OperationID) if etcdConn == nil { diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 89e2be936..2950dbea8 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -6,15 +6,14 @@ import ( ) type ApiUserInfo struct { - UserID string `json:"userID" binding:"required,min=1,max=64"` - Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` - FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` - Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` - PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` - Birth uint32 `json:"birth" binding:"omitempty"` - Email string `json:"email" binding:"omitempty,max=64"` - GlobalRecvMsgOpt *int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` - Ex string `json:"ex" binding:"omitempty,max=1024"` + UserID string `json:"userID" binding:"required,min=1,max=64"` + Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` + FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` + Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` + PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` + Birth uint32 `json:"birth" binding:"omitempty"` + Email string `json:"email" binding:"omitempty,max=64"` + Ex string `json:"ex" binding:"omitempty,max=1024"` } //type Conversation struct { From 29dbb369613dd397ff8847e607bd4d9c44b0cf90 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 19:33:35 +0800 Subject: [PATCH 606/752] user proto modify --- cmd/open_im_api/main.go | 3 ++- internal/api/user/user.go | 38 ++++++++++++++++++++++++++++++++ internal/rpc/user/user.go | 21 ++++++++++++++++++ pkg/base_info/user_api_struct.go | 8 ++++++- script/start_all.sh | 2 +- 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index e8cf2e799..8b3818aa8 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -38,7 +38,8 @@ func main() { // user routing group, which handles user registration and login services userRouterGroup := r.Group("/user") { - userRouterGroup.POST("/update_user_info", user.UpdateUserInfo) //1 + userRouterGroup.POST("/update_user_info", user.UpdateUserInfo) //1 + userRouterGroup.POST("/set_global_msg_recv_opt", user.SetGlobalRecvMessageOpt) userRouterGroup.POST("/get_users_info", user.GetUsersInfo) //1 userRouterGroup.POST("/get_self_user_info", user.GetSelfUserInfo) //1 userRouterGroup.POST("/get_users_online_status", user.GetUsersOnlineStatus) //1 diff --git a/internal/api/user/user.go b/internal/api/user/user.go index af93416b4..ac40059d3 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -233,6 +233,44 @@ func UpdateUserInfo(c *gin.Context) { log.NewInfo(req.OperationID, "UpdateUserInfo api return ", resp) c.JSON(http.StatusOK, resp) } +func SetGlobalRecvMessageOpt(c *gin.Context) { + params := api.SetGlobalRecvMessageOptReq{} + if err := c.BindJSON(¶ms); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + req := &rpc.SetGlobalRecvMessageOptReq{} + utils.CopyStructFields(req, ¶ms) + req.OperationID = params.OperationID + var ok bool + var errInfo string + ok, req.UserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + log.NewInfo(params.OperationID, "SetGlobalRecvMessageOpt args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewUserClient(etcdConn) + RpcResp, err := client.SetGlobalRecvMessageOpt(context.Background(), req) + if err != nil { + log.NewError(req.OperationID, "SetGlobalRecvMessageOpt failed ", err.Error(), req.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"}) + return + } + resp := api.UpdateUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}} + log.NewInfo(req.OperationID, "SetGlobalRecvMessageOpt api return ", resp) + c.JSON(http.StatusOK, resp) +} func GetSelfUserInfo(c *gin.Context) { params := api.GetSelfUserInfoReq{} diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 86bd07c5b..fa733cbe4 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -433,7 +433,28 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI //} return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{}}, nil } +func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.SetGlobalRecvMessageOptReq) (*pbUser.SetGlobalRecvMessageOptResp, error) { + log.NewInfo(req.OperationID, "SetGlobalRecvMessageOpt args ", req.String()) + var user db.User + user.UserID = req.UserID + m := make(map[string]interface{}, 1) + + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.GlobalRecvMsgOpt, "set GlobalRecvMsgOpt") + m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt + err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetGlobalRecvMessageOpt failed ", err.Error(), user) + return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + err = imdb.UpdateUserInfoByMap(user, m) + if err != nil { + log.NewError(req.OperationID, "SetGlobalRecvMessageOpt failed ", err.Error(), user) + return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + chat.UserInfoUpdatedNotification(req.OperationID, req.UserID, req.UserID) + return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{}}, nil +} func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string, operationID string, opUserID string) { joinedGroupIDList, err := imdb.GetJoinedGroupIDListByUserID(userID) if err != nil { diff --git a/pkg/base_info/user_api_struct.go b/pkg/base_info/user_api_struct.go index b517f24de..45c8cb22d 100644 --- a/pkg/base_info/user_api_struct.go +++ b/pkg/base_info/user_api_struct.go @@ -18,7 +18,13 @@ type UpdateSelfUserInfoReq struct { ApiUserInfo OperationID string `json:"operationID" binding:"required"` } - +type SetGlobalRecvMessageOptReq struct { + OperationID string `json:"operationID" binding:"required"` + GlobalRecvMsgOpt *int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` +} +type SetGlobalRecvMessageOptResp struct { + CommResp +} type UpdateUserInfoResp struct { CommResp } diff --git a/script/start_all.sh b/script/start_all.sh index bf7170d68..9fcbd1c6a 100644 --- a/script/start_all.sh +++ b/script/start_all.sh @@ -5,10 +5,10 @@ #fixme Put the shell script name here need_to_start_server_shell=( start_rpc_service.sh - msg_gateway_start.sh push_start.sh msg_transfer_start.sh sdk_svr_start.sh + msg_gateway_start.sh demo_svr_start.sh ) time=`date +"%Y-%m-%d %H:%M:%S"` From 903c39206ffb04731d24af52538cd56d71e35d9d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 20:35:27 +0800 Subject: [PATCH 607/752] msg transfer handle change --- config/config.yaml | 2 +- internal/msg_transfer/logic/init.go | 6 +- .../logic/online_history_msg_handler.go | 136 +++++++----------- .../logic/online_msg_to_mongo_handler.go | 79 ++++++++++ pkg/common/config/config.go | 8 +- 5 files changed, 139 insertions(+), 92 deletions(-) create mode 100644 internal/msg_transfer/logic/online_msg_to_mongo_handler.go diff --git a/config/config.yaml b/config/config.yaml index 4d9569d07..3143f3a0b 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -55,8 +55,8 @@ kafka: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" consumergroupid: + msgToRedis: redis msgToMongo: mongo - msgToMongoOffline: mongo_offline msgToMySql: mysql msgToPush: push diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 65457878c..177745c6f 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -4,7 +4,6 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/kafka" - "Open_IM/pkg/common/log" "Open_IM/pkg/statistics" "fmt" "sync" @@ -20,7 +19,8 @@ const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler - historyCH OnlineHistoryConsumerHandler + historyCH OnlineHistoryRedisConsumerHandler + historyMongoCH OnlineHistoryMongoConsumerHandler producer *kafka.Producer producerToMongo *kafka.Producer cmdCh chan Cmd2Value @@ -39,7 +39,6 @@ func Init() { persistentCH.Init() historyCH.Init(cmdCh) onlineTopicStatus = OnlineTopicVacancy - log.Debug("come msg transfer ts", config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline, config.Config.Kafka.Ws2mschatOffline.Topic) //offlineHistoryCH.Init(cmdCh) statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) @@ -54,6 +53,7 @@ func Run() { fmt.Println("not start mysql consumer") } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) + go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) } func SetOnlineTopicStatus(status int) { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index a1544549d..908d28b27 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -9,10 +9,8 @@ import ( "Open_IM/pkg/grpc-etcdv3/getcdv3" pbMsg "Open_IM/pkg/proto/chat" pbPush "Open_IM/pkg/proto/push" - server_api_params "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "errors" "github.com/Shopify/sarama" "github.com/golang/protobuf/proto" "hash/crc32" @@ -36,28 +34,21 @@ type Cmd2Value struct { Cmd int Value interface{} } -type OnlineHistoryConsumerHandler struct { +type OnlineHistoryRedisConsumerHandler struct { msgHandle map[string]fcb historyConsumerGroup *kfk.MConsumerGroup - cmdCh chan Cmd2Value chArrays [ChannelNum]chan Cmd2Value - chMongoArrays [ChannelNum]chan Cmd2Value msgDistributionCh chan Cmd2Value } -func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { +func (och *OnlineHistoryRedisConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle = make(map[string]fcb) och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel go och.MessagesDistributionHandle() - och.cmdCh = cmdCh for i := 0; i < ChannelNum; i++ { och.chArrays[i] = make(chan Cmd2Value, 50) go och.Run(i) } - for i := 0; i < ChannelNum; i++ { - och.chMongoArrays[i] = make(chan Cmd2Value, 10000) - go och.MongoMessageRun(i) - } if config.Config.ReliableStorage { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2Mongo } else { @@ -66,34 +57,10 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { } och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, - config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) + config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToRedis) } -func (och *OnlineHistoryConsumerHandler) TriggerCmd(status int) { - operationID := utils.OperationIDGenerator() - err := sendCmd(och.cmdCh, Cmd2Value{Cmd: status, Value: ""}, 1) - if err != nil { - log.Error(operationID, "TriggerCmd failed ", err.Error(), status) - return - } - log.Debug(operationID, "TriggerCmd success", status) - -} -func sendCmd(ch chan Cmd2Value, value Cmd2Value, timeout int64) error { - var flag = 0 - select { - case ch <- value: - flag = 1 - case <-time.After(time.Second * time.Duration(timeout)): - flag = 2 - } - if flag == 1 { - return nil - } else { - return errors.New("send cmd timeout") - } -} -func (och *OnlineHistoryConsumerHandler) Run(channelID int) { +func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { for { select { case cmd := <-och.chArrays[channelID]: @@ -154,7 +121,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } } -func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { +func (och *OnlineHistoryRedisConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { pid, offset, err := producerToMongo.SendMessage(&pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID) if err != nil { log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) @@ -167,47 +134,48 @@ func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID stri ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { //och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } -func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { - for { - select { - case cmd := <-och.chMongoArrays[channelID]: - switch cmd.Cmd { - case MongoMessages: - msgChannelValue := cmd.Value.(MsgChannelValue) - msgList := msgChannelValue.msgList - triggerID := msgChannelValue.triggerID - aggregationID := msgChannelValue.aggregationID - lastSeq := msgChannelValue.lastSeq - err := db.DB.BatchInsertChat2DB(aggregationID, msgList, triggerID, lastSeq) - if err != nil { - log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) - } - for _, v := range msgList { - if v.MsgData.ContentType == constant.DeleteMessageNotification { - tips := server_api_params.TipsComm{} - DeleteMessageTips := server_api_params.DeleteMessageTips{} - err := proto.Unmarshal(v.MsgData.Content, &tips) - if err != nil { - log.NewError(triggerID, "tips unmarshal err:", err.Error(), v.String()) - continue - } - err = proto.Unmarshal(tips.Detail, &DeleteMessageTips) - if err != nil { - log.NewError(triggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) - continue - } - if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { - log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) - } - } - } - } - } - } -} +//func (och *OnlineHistoryRedisConsumerHandler) MongoMessageRun(channelID int) { +// for { +// select { +// case cmd := <-och.chMongoArrays[channelID]: +// switch cmd.Cmd { +// case MongoMessages: +// msgChannelValue := cmd.Value.(MsgChannelValue) +// msgList := msgChannelValue.msgList +// triggerID := msgChannelValue.triggerID +// aggregationID := msgChannelValue.aggregationID +// lastSeq := msgChannelValue.lastSeq +// err := db.DB.BatchInsertChat2DB(aggregationID, msgList, triggerID, lastSeq) +// if err != nil { +// log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) +// } +// for _, v := range msgList { +// if v.MsgData.ContentType == constant.DeleteMessageNotification { +// tips := server_api_params.TipsComm{} +// DeleteMessageTips := server_api_params.DeleteMessageTips{} +// err := proto.Unmarshal(v.MsgData.Content, &tips) +// if err != nil { +// log.NewError(triggerID, "tips unmarshal err:", err.Error(), v.String()) +// continue +// } +// err = proto.Unmarshal(tips.Detail, &DeleteMessageTips) +// if err != nil { +// log.NewError(triggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) +// continue +// } +// if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { +// log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) +// } +// +// } +// } +// } +// } +// } +//} -func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { +func (och *OnlineHistoryRedisConsumerHandler) MessagesDistributionHandle() { for { aggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) select { @@ -253,7 +221,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { } } -func (mc *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { +func (mc *OnlineHistoryRedisConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value now := time.Now() msgFromMQ := pbMsg.MsgDataToMQ{} @@ -325,7 +293,7 @@ func (mc *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Consumer log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) } -func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { +func (och *OnlineHistoryRedisConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) @@ -365,10 +333,10 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * } } -func (OnlineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } -func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } +func (OnlineHistoryRedisConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } +func (OnlineHistoryRedisConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } -//func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +//func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, // claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group // log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) // for msg := range claim.Messages() { @@ -385,7 +353,7 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error // return nil //} -func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group for { @@ -480,7 +448,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS return nil } -//func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +//func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, // claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group // // for { diff --git a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go new file mode 100644 index 000000000..1d71b8a1c --- /dev/null +++ b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go @@ -0,0 +1,79 @@ +package logic + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + kfk "Open_IM/pkg/common/kafka" + "Open_IM/pkg/common/log" + pbMsg "Open_IM/pkg/proto/chat" + server_api_params "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "github.com/Shopify/sarama" + "github.com/golang/protobuf/proto" +) + +type OnlineHistoryMongoConsumerHandler struct { + msgHandle map[string]fcb + historyConsumerGroup *kfk.MConsumerGroup +} + +func (och *OnlineHistoryMongoConsumerHandler) Init(cmdCh chan Cmd2Value) { + och.msgHandle = make(map[string]fcb) + och.msgHandle[config.Config.Kafka.MsgToMongo.Topic] = och.handleChatWs2Mongo + och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, + OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToMongo.Topic}, + config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) + +} +func (mc *OnlineHistoryMongoConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) { + msg := cMsg.Value + msgFromMQ := pbMsg.MsgDataToMongoByMQ{} + err := proto.Unmarshal(msg, &msgFromMQ) + if err != nil { + log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) + return + } + err = db.DB.BatchInsertChat2DB(msgFromMQ.AggregationID, msgFromMQ.MessageList, msgFromMQ.TriggerID, msgFromMQ.LastSeq) + if err != nil { + log.NewError(msgFromMQ.TriggerID, "single data insert to mongo err", err.Error(), msgFromMQ.MessageList) + } + for _, v := range msgFromMQ.MessageList { + if v.MsgData.ContentType == constant.DeleteMessageNotification { + tips := server_api_params.TipsComm{} + DeleteMessageTips := server_api_params.DeleteMessageTips{} + err := proto.Unmarshal(v.MsgData.Content, &tips) + if err != nil { + log.NewError(msgFromMQ.TriggerID, "tips unmarshal err:", err.Error(), v.String()) + continue + } + err = proto.Unmarshal(tips.Detail, &DeleteMessageTips) + if err != nil { + log.NewError(msgFromMQ.TriggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) + continue + } + if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { + log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) + } + + } + } +} + +func (OnlineHistoryMongoConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } +func (OnlineHistoryMongoConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } + +func (och *OnlineHistoryMongoConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, + claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group + log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) + for msg := range claim.Messages() { + log.NewDebug("", "kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) + if len(msg.Value) != 0 { + och.msgHandle[msg.Topic](msg, string(msg.Key), sess) + } else { + log.Error("", "mongo msg get from kafka but is nil", msg.Key) + } + sess.MarkMessage(msg, "") + } + return nil +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 185236744..de0d1597e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -213,10 +213,10 @@ type config struct { Topic string `yaml:"topic"` } ConsumerGroupID struct { - MsgToMongo string `yaml:"msgToMongo"` - MsgToMongoOffline string `yaml:"msgToMongoOffline"` - MsgToMySql string `yaml:"msgToMySql"` - MsgToPush string `yaml:"msgToPush"` + MsgToRedis string `yaml:"msgToRedis"` + MsgToMongo string `yaml:"msgToMongo"` + MsgToMySql string `yaml:"msgToMySql"` + MsgToPush string `yaml:"msgToPush"` } } Secret string `yaml:"secret"` From 8e3f090ffeae9b3832916c3062ef0e1cfac62f96 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 21:15:24 +0800 Subject: [PATCH 608/752] msg transfer handle change --- internal/msg_transfer/logic/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 177745c6f..168bfe785 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -53,7 +53,7 @@ func Run() { fmt.Println("not start mysql consumer") } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) - go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) + //go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) } func SetOnlineTopicStatus(status int) { From d1049b802254c7c2e885ec8a9e6d01ad20b78240 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 10:36:46 +0800 Subject: [PATCH 609/752] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 519b1f021..8c6807820 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -302,6 +302,6 @@ func GetRandomDepartmentID() (string, error) { return "", err } department := &db.Department{} - err = dbConn.Model(department).Where("related_group_id != ? AND parent_id != ?", "", "").Take(department).Error + err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ?", "").First(department).Error return department.DepartmentID, err } From 573937e1e5d240ecddeb1ba037ded028b1e5461f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:37:43 +0800 Subject: [PATCH 610/752] msg transfer handle change --- internal/msg_transfer/logic/init.go | 3 ++- internal/msg_transfer/logic/online_msg_to_mongo_handler.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 168bfe785..38d0e5b66 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -38,6 +38,7 @@ func Init() { w = new(sync.Mutex) persistentCH.Init() historyCH.Init(cmdCh) + historyMongoCH.Init() onlineTopicStatus = OnlineTopicVacancy //offlineHistoryCH.Init(cmdCh) statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) @@ -53,7 +54,7 @@ func Run() { fmt.Println("not start mysql consumer") } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) - //go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) + go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) } func SetOnlineTopicStatus(status int) { diff --git a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go index 1d71b8a1c..dae6571f8 100644 --- a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go +++ b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go @@ -18,7 +18,7 @@ type OnlineHistoryMongoConsumerHandler struct { historyConsumerGroup *kfk.MConsumerGroup } -func (och *OnlineHistoryMongoConsumerHandler) Init(cmdCh chan Cmd2Value) { +func (och *OnlineHistoryMongoConsumerHandler) Init() { och.msgHandle = make(map[string]fcb) och.msgHandle[config.Config.Kafka.MsgToMongo.Topic] = och.handleChatWs2Mongo och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, From 365d282119a5cfffaa24d1efc0e812063c3d52e2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:39:02 +0800 Subject: [PATCH 611/752] compose file update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index e75b022a4..52d488f4a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:2:1,msg_to_mongo:2:1" + KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" From ed3b62480c01e97a804d8177a8d0818e83bc8a69 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 17 Jun 2022 10:43:24 +0800 Subject: [PATCH 612/752] log for etcd --- internal/rpc/msg/group_notification.go | 5 ++--- pkg/grpc-etcdv3/getcdv3/register.go | 23 +++++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 1b511dd0d..65aabffb9 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -101,7 +101,7 @@ func setPublicUserInfo(userID string, publicUserInfo *open_im_sdk.PublicUserInfo } func groupNotification(contentType int32, m proto.Message, sendID, groupID, recvUserID, operationID string) { - log.Info(operationID, utils.GetSelfFuncName(), "args: ", contentType) + log.Info(operationID, utils.GetSelfFuncName(), "args: ", contentType, sendID, groupID, recvUserID) var err error var tips open_im_sdk.TipsComm @@ -126,10 +126,9 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv if from != nil { nickname = from.Nickname } - to, err := imdb.GetUserByUserID(recvUserID) if err != nil { - log.Error(operationID, "GetUserByUserID failed ", err.Error(), recvUserID) + log.NewWarn(operationID, "GetUserByUserID failed ", err.Error(), recvUserID) } toNickname := "" if to != nil { diff --git a/pkg/grpc-etcdv3/getcdv3/register.go b/pkg/grpc-etcdv3/getcdv3/register.go index af96ffc29..7d877e058 100644 --- a/pkg/grpc-etcdv3/getcdv3/register.go +++ b/pkg/grpc-etcdv3/getcdv3/register.go @@ -2,6 +2,7 @@ package getcdv3 import ( "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "context" "fmt" clientv3 "go.etcd.io/etcd/client/v3" @@ -38,12 +39,15 @@ func RegisterEtcd4Unique(schema, etcdAddr, myHost string, myPort int, serviceNam //etcdAddr separated by commas func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName string, ttl int) error { + operationID := utils.OperationIDGenerator() + args := schema + " " + etcdAddr + " " + myHost + " " + serviceName + " " + utils.Int32ToString(int32(myPort)) ttl = ttl * 3 cli, err := clientv3.New(clientv3.Config{ Endpoints: strings.Split(etcdAddr, ","), DialTimeout: 5 * time.Second}) - log.Info("", "RegisterEtcd, ", schema, etcdAddr, myHost, myPort, serviceName, ttl) + log.Info(operationID, "RegisterEtcd args: ", args, ttl) if err != nil { + log.Error(operationID, "clientv3.New failed ", args, ttl, err.Error()) return fmt.Errorf("create etcd clientv3 client failed, errmsg:%v, etcd addr:%s", err, etcdAddr) } @@ -51,8 +55,10 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin ctx, cancel := context.WithCancel(context.Background()) resp, err := cli.Grant(ctx, int64(ttl)) if err != nil { + log.Error(operationID, "Grant failed ", err.Error(), ctx, ttl) return fmt.Errorf("grant failed") } + log.Info(operationID, "Grant ok, resp ID ", resp.ID) // schema:///serviceName/ip:port ->ip:port serviceValue := net.JoinHostPort(myHost, strconv.Itoa(myPort)) @@ -60,24 +66,26 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin //set key->value if _, err := cli.Put(ctx, serviceKey, serviceValue, clientv3.WithLease(resp.ID)); err != nil { + log.Error(operationID, "cli.Put failed ", err.Error(), ctx, args, resp.ID) return fmt.Errorf("put failed, errmsg:%v, key:%s, value:%s", err, serviceKey, serviceValue) } //keepalive kresp, err := cli.KeepAlive(ctx, resp.ID) if err != nil { + log.Error(operationID, "KeepAlive failed ", err.Error(), args, resp.ID) return fmt.Errorf("keepalive failed, errmsg:%v, lease id:%d", err, resp.ID) } - //log.Info("", "RegisterEtcd ok ") + log.Info(operationID, "RegisterEtcd ok ", args) go func() { for { select { case pv, ok := <-kresp: if ok == true { - log.Debug("", "KeepAlive kresp ok", pv) + log.Debug(operationID, "KeepAlive kresp ok", pv) } else { - log.Error("", "KeepAlive kresp failed", pv) + log.Error(operationID, "KeepAlive kresp failed", pv) t := time.NewTicker(time.Duration(ttl/2) * time.Second) for { select { @@ -86,17 +94,16 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin ctx, _ := context.WithCancel(context.Background()) resp, err := cli.Grant(ctx, int64(ttl)) if err != nil { - log.Error("", "Grant failed ", err.Error()) + log.Error(operationID, "Grant failed ", err.Error()) continue } if _, err := cli.Put(ctx, serviceKey, serviceValue, clientv3.WithLease(resp.ID)); err != nil { - log.Error("", "etcd Put failed ", err.Error(), serviceKey, serviceValue, resp.ID) + log.Error(operationID, "etcd Put failed ", err.Error(), args, "resp ID: ", resp.ID) continue } else { - log.Info("", "etcd Put ok", serviceKey, serviceValue, resp.ID) + log.Info(operationID, "etcd Put ok ", args, "resp ID: ", resp.ID) } - } } } From 52ae2c3655bf9aa95f8896b1c582f572d1884cb0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 10:44:23 +0800 Subject: [PATCH 613/752] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 8c6807820..52b5bf245 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -302,6 +302,6 @@ func GetRandomDepartmentID() (string, error) { return "", err } department := &db.Department{} - err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ?", "").First(department).Error + err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ? AND department_id != ?", "", "0").First(department).Error return department.DepartmentID, err } From fd256a6c28ec0893bc55e773e0fe9d4007d5b33b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:50:15 +0800 Subject: [PATCH 614/752] config file update --- config/config.yaml | 6 +++--- pkg/common/config/config.go | 32 ++++++++++++++++---------------- pkg/common/db/model.go | 8 ++++---- test/mongo/cmd/main.go | 4 ++-- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 3143f3a0b..17991eef1 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -23,7 +23,7 @@ mysql: mongo: dbUri: ""#当dbUri值不为空则直接使用该值 - dbAddress: [ 127.0.0.1:37017 ] #mongo地址 目前仅支持单机,默认即可 + dbAddress: 127.0.0.1:37017 #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 dbDirect: false dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 @@ -34,12 +34,12 @@ mongo: dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 redis: - dbAddress: 127.0.0.1:16379 #redis地址 目前仅支持单机,默认即可 + dbAddress: [ 127.0.0.1:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 dbPassWord: openIM #redis密码 建议修改 - enableCluster: false + enableCluster: false #如果外部redis以集群方式启动,需要打开此开关 kafka: ws2mschat: diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index de0d1597e..39ee0f9fb 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -85,24 +85,24 @@ type config struct { DBMaxLifeTime int `yaml:"dbMaxLifeTime"` } Mongo struct { - DBUri string `yaml:"dbUri"` - DBAddress []string `yaml:"dbAddress"` - DBDirect bool `yaml:"dbDirect"` - DBTimeout int `yaml:"dbTimeout"` - DBDatabase string `yaml:"dbDatabase"` - DBSource string `yaml:"dbSource"` - DBUserName string `yaml:"dbUserName"` - DBPassword string `yaml:"dbPassword"` - DBMaxPoolSize int `yaml:"dbMaxPoolSize"` - DBRetainChatRecords int `yaml:"dbRetainChatRecords"` + DBUri string `yaml:"dbUri"` + DBAddress string `yaml:"dbAddress"` + DBDirect bool `yaml:"dbDirect"` + DBTimeout int `yaml:"dbTimeout"` + DBDatabase string `yaml:"dbDatabase"` + DBSource string `yaml:"dbSource"` + DBUserName string `yaml:"dbUserName"` + DBPassword string `yaml:"dbPassword"` + DBMaxPoolSize int `yaml:"dbMaxPoolSize"` + DBRetainChatRecords int `yaml:"dbRetainChatRecords"` } Redis struct { - DBAddress string `yaml:"dbAddress"` - DBMaxIdle int `yaml:"dbMaxIdle"` - DBMaxActive int `yaml:"dbMaxActive"` - DBIdleTimeout int `yaml:"dbIdleTimeout"` - DBPassWord string `yaml:"dbPassWord"` - EnableCluster bool `yaml:"enableCluster"` + DBAddress []string `yaml:"dbAddress"` + DBMaxIdle int `yaml:"dbMaxIdle"` + DBMaxActive int `yaml:"dbMaxActive"` + DBIdleTimeout int `yaml:"dbIdleTimeout"` + DBPassWord string `yaml:"dbPassWord"` + EnableCluster bool `yaml:"enableCluster"` } RpcPort struct { OpenImUserPort []int `yaml:"openImUserPort"` diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index bc8af133d..61912b670 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -56,11 +56,11 @@ func init() { uri = config.Config.Mongo.DBUri } else { if config.Config.Mongo.DBPassword != "" && config.Config.Mongo.DBUserName != "" { - uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress[0], + uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } else { uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d", - config.Config.Mongo.DBAddress[0], config.Config.Mongo.DBDatabase, + config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } } @@ -123,7 +123,7 @@ func init() { defer cancel() if config.Config.Redis.EnableCluster { DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - Addrs: []string{config.Config.Redis.DBAddress}, + Addrs: config.Config.Redis.DBAddress, PoolSize: 50, }) _, err = DB.rdb.Ping(ctx).Result() @@ -132,7 +132,7 @@ func init() { } } else { DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, + Addr: config.Config.Redis.DBAddress[0], Password: config.Config.Redis.DBPassWord, // no password set DB: 0, // use default DB PoolSize: 100, // 连接池大小 diff --git a/test/mongo/cmd/main.go b/test/mongo/cmd/main.go index 2a8d41523..e2c6e99b8 100644 --- a/test/mongo/cmd/main.go +++ b/test/mongo/cmd/main.go @@ -17,11 +17,11 @@ func init() { uri = config.Config.Mongo.DBUri } else { if config.Config.Mongo.DBPassword != "" && config.Config.Mongo.DBUserName != "" { - uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress[0], + uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } else { uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d", - config.Config.Mongo.DBAddress[0], config.Config.Mongo.DBDatabase, + config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } } From 92cb2e7eab44e220d3c8b74fc9f56943555f822d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:59:50 +0800 Subject: [PATCH 615/752] config file update --- config/config.yaml | 4 ++-- pkg/common/config/config.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 17991eef1..a12f8af3d 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -55,8 +55,8 @@ kafka: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" consumergroupid: - msgToRedis: redis - msgToMongo: mongo + msgToTransfer: mongo + msgToMongo: mongo_ex msgToMySql: mysql msgToPush: push diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 39ee0f9fb..780ecee9c 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -213,7 +213,7 @@ type config struct { Topic string `yaml:"topic"` } ConsumerGroupID struct { - MsgToRedis string `yaml:"msgToRedis"` + MsgToRedis string `yaml:"msgToTransfer"` MsgToMongo string `yaml:"msgToMongo"` MsgToMySql string `yaml:"msgToMySql"` MsgToPush string `yaml:"msgToPush"` From 7fbdff391c107bdcb76b62523f41e49f9555783b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 11:09:48 +0800 Subject: [PATCH 616/752] fix bug --- internal/demo/register/onboarding_process.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a4da17259..62630e126 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -261,7 +261,7 @@ func randomEnglishName() string { } func randomPosition() string { - l := []string{"Golang工程师", "前端工程师", "后端工程师", "产品经理", "测试开发工程师", "运维开发工程师"} + l := []string{"后端工程师", "前端工程师", "设计师"} rand.Seed(time.Now().UnixNano()) index := rand.Intn(len(l) - 1) return l[index] From 9443ed5d49d74f9002acfe155d1ecf9f34c869dc Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 17 Jun 2022 11:49:29 +0800 Subject: [PATCH 617/752] log for etcd --- pkg/grpc-etcdv3/getcdv3/register.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/grpc-etcdv3/getcdv3/register.go b/pkg/grpc-etcdv3/getcdv3/register.go index 7d877e058..4d9e3ee27 100644 --- a/pkg/grpc-etcdv3/getcdv3/register.go +++ b/pkg/grpc-etcdv3/getcdv3/register.go @@ -83,9 +83,9 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin select { case pv, ok := <-kresp: if ok == true { - log.Debug(operationID, "KeepAlive kresp ok", pv) + log.Debug(operationID, "KeepAlive kresp ok", pv, args) } else { - log.Error(operationID, "KeepAlive kresp failed", pv) + log.Error(operationID, "KeepAlive kresp failed ", pv, args) t := time.NewTicker(time.Duration(ttl/2) * time.Second) for { select { @@ -94,15 +94,15 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin ctx, _ := context.WithCancel(context.Background()) resp, err := cli.Grant(ctx, int64(ttl)) if err != nil { - log.Error(operationID, "Grant failed ", err.Error()) + log.Error(operationID, "Grant failed ", err.Error(), args) continue } if _, err := cli.Put(ctx, serviceKey, serviceValue, clientv3.WithLease(resp.ID)); err != nil { - log.Error(operationID, "etcd Put failed ", err.Error(), args, "resp ID: ", resp.ID) + log.Error(operationID, "etcd Put failed ", err.Error(), args, " resp ID: ", resp.ID) continue } else { - log.Info(operationID, "etcd Put ok ", args, "resp ID: ", resp.ID) + log.Info(operationID, "etcd Put ok ", args, " resp ID: ", resp.ID) } } } From c5eb8a3f9bf2f72430ce89b15a57b9f8a83caf79 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 12:09:42 +0800 Subject: [PATCH 618/752] =?UTF-8?q?=E5=85=A5=E8=81=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.yaml | 1 + internal/rpc/msg/group_notification.go | 20 +++++++++++-------- pkg/common/config/config.go | 5 +++-- .../mysql_model/im_mysql_model/user_model.go | 6 +++++- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index a12f8af3d..fcf70aaf6 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -222,6 +222,7 @@ manager: #app管理员userID和对应的secret 建议修改。 用于管理后台登录,也可以用户管理后台对应的api appManagerUid: [ "openIM123456","openIM654321", "openIM333", "openIMAdmin"] secrets: [ "openIM1","openIM2", "openIM333", "openIMAdmin"] + appSysNotificationName: "系统通知" secret: tuoyun # 多端互踢策略 diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 65aabffb9..d2c6172fa 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -117,15 +117,19 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv } tips.JsonDetail, _ = marshaler.MarshalToString(m) + var nickname string + if utils.IsContain(sendID, config.Config.Manager.AppManagerUid) { + nickname = sendID + } else { + from, err := imdb.GetUserByUserID(sendID) + if err != nil { + log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) + } + if from != nil { + nickname = from.Nickname + } + } - from, err := imdb.GetUserByUserID(sendID) - if err != nil { - log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) - } - nickname := "" - if from != nil { - nickname = from.Nickname - } to, err := imdb.GetUserByUserID(recvUserID) if err != nil { log.NewWarn(operationID, "GetUserByUserID failed ", err.Error(), recvUserID) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 780ecee9c..2163e7619 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -191,8 +191,9 @@ type config struct { } } Manager struct { - AppManagerUid []string `yaml:"appManagerUid"` - Secrets []string `yaml:"secrets"` + AppManagerUid []string `yaml:"appManagerUid"` + Secrets []string `yaml:"secrets"` + AppSysNotificationName string `yaml:"appSysNotificationName"` } Kafka struct { diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index 8882f6931..1598bac4e 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -22,7 +22,11 @@ func init() { } var appMgr db.User appMgr.UserID = v - appMgr.Nickname = "AppManager" + utils.IntToString(k+1) + if k == 0 { + appMgr.Nickname = config.Config.Manager.AppSysNotificationName + } else { + appMgr.Nickname = "AppManager" + utils.IntToString(k+1) + } appMgr.AppMangerLevel = constant.AppAdmin err = UserRegister(appMgr) if err != nil { From 007065b40ec52da5921849ca75b301a57cc0c103 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 12:36:05 +0800 Subject: [PATCH 619/752] =?UTF-8?q?=E5=85=A5=E8=81=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/demo/register/onboarding_process.go | 2 +- internal/rpc/msg/group_notification.go | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 62630e126..647fbe3c5 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -174,7 +174,7 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { GroupID: groupID, Reason: "register auto join", InvitedUserIDList: []string{userID}, - OpUserID: config.Config.Manager.AppManagerUid[0], + OpUserID: config.Config.Manager.AppManagerUid[1], } resp, err := client.InviteUserToGroup(context.Background(), req) if err != nil { diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index d2c6172fa..258764485 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -36,7 +36,6 @@ func setOpUserInfo(opUserID, groupID string, groupMemberInfo *open_im_sdk.GroupM return utils.Wrap(err, "") } } - user, err := imdb.GetUserByUserID(opUserID) if err != nil { return utils.Wrap(err, "") @@ -118,16 +117,13 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv tips.JsonDetail, _ = marshaler.MarshalToString(m) var nickname string - if utils.IsContain(sendID, config.Config.Manager.AppManagerUid) { - nickname = sendID - } else { - from, err := imdb.GetUserByUserID(sendID) - if err != nil { - log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) - } - if from != nil { - nickname = from.Nickname - } + + from, err := imdb.GetUserByUserID(sendID) + if err != nil { + log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) + } + if from != nil { + nickname = from.Nickname } to, err := imdb.GetUserByUserID(recvUserID) From 9b5bd477608c95b70d3187dd57c88ad5fb1316f4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 12:39:26 +0800 Subject: [PATCH 620/752] config file update --- internal/push/logic/push_to_client.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 7f94e7870..439cc1028 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -69,9 +69,11 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { return } } - if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) - return + if pushMsg.MsgData.ContentType == constant.SignalingNotification { + if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) + return + } } //Use offline push messaging var UIDList []string From 3451d22460ae7ea21901447f02815446f1f62b52 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 13:14:38 +0800 Subject: [PATCH 621/752] signal --- internal/push/logic/push_to_client.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index f02f6679e..e0dedb9c6 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -63,9 +63,11 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { successCount++ if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { // save invitation info for offline push - if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) - return + if pushMsg.MsgData.ContentType == constant.SignalingNotification { + if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) + return + } } for _, v := range wsResult { if v.ResultCode == 0 { From 5601212f5886dd70baf1e9c2361a095b84e42804 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 15:48:40 +0800 Subject: [PATCH 622/752] config file update --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index fcf70aaf6..923b95591 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -234,7 +234,7 @@ chatpersistencemysql: true #可靠性存储 reliablestorage: false #消息缓存时间 -msgCacheTimeout: 1800 +msgCacheTimeout: 86400 #群聊已读开启 groupMessageHasReadReceiptEnable: true #单聊已读开启 From f82f9567c2613eef192269dda31dd58cd8f9ca09 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 15:56:19 +0800 Subject: [PATCH 623/752] merge super 2 tuoyun --- internal/push/logic/push_to_client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index d83556c3b..ea7a435de 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -13,6 +13,7 @@ import ( "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbCache "Open_IM/pkg/proto/cache" pbPush "Open_IM/pkg/proto/push" pbRelay "Open_IM/pkg/proto/relay" pbRtc "Open_IM/pkg/proto/rtc" From 134087c672662f17856c9c60cded33bf5239534a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 17:11:59 +0800 Subject: [PATCH 624/752] v2.1.0 --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 52d488f4a..0e180c442 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -99,7 +99,7 @@ services: command: /usr/local/bin/etcd --name etcd0 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 --initial-cluster etcd0=http://0.0.0.0:2380 --initial-cluster-token tkn --initial-cluster-state new open_im_server: - image: openim/open_im_server:v2.0.10 + image: openim/open_im_server:v2.1.0 container_name: open_im_server volumes: - ./logs:/Open-IM-Server/logs From b80f510de5e64d3592afd1219ea01c5f0ef29fc0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 20 Jun 2022 11:57:53 +0800 Subject: [PATCH 625/752] quit superGroup add notification --- internal/rpc/group/group.go | 88 ++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 147e06b63..f51e0edc4 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -849,45 +849,58 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) (*pbGroup.QuitGroupResp, error) { log.NewInfo(req.OperationID, "QuitGroup args ", req.String()) - _, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.OpUserID) + groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), req.GroupID, req.OpUserID) + log.NewError(req.OperationID, "ReduceGroupMemberFromCache rpc call failed ", err.Error()) return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } + if groupInfo.GroupType != constant.SuperGroup { + _, err = imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.OpUserID) + if err != nil { + log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), req.GroupID, req.OpUserID) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } - err = imdb.DeleteGroupMemberByGroupIDAndUserID(req.GroupID, req.OpUserID) - if err != nil { - log.NewError(req.OperationID, "DeleteGroupMemberByGroupIdAndUserId failed ", err.Error(), req.GroupID, req.OpUserID) - return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } + err = imdb.DeleteGroupMemberByGroupIDAndUserID(req.GroupID, req.OpUserID) + if err != nil { + log.NewError(req.OperationID, "DeleteGroupMemberByGroupIdAndUserId failed ", err.Error(), req.GroupID, req.OpUserID) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } - err = db.DB.DelGroupMember(req.GroupID, req.OpUserID) - if err != nil { - log.NewError(req.OperationID, "DelGroupMember failed ", req.GroupID, req.OpUserID) - // return &pbGroup.CommonResp{ErrorCode: constant.ErrQuitGroup.ErrCode, ErrorMsg: constant.ErrQuitGroup.ErrMsg}, nil - } - //modify quitter conversation info - var reqPb pbUser.SetConversationReq - var c pbUser.Conversation - reqPb.OperationID = req.OperationID - c.OwnerUserID = req.OpUserID - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsNotInGroup = true - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) - if etcdConn == nil { - errMsg := req.OperationID + "getcdv3.GetConn == nil" - log.NewError(req.OperationID, errMsg) - return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil - } - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error()) + err = db.DB.DelGroupMember(req.GroupID, req.OpUserID) + if err != nil { + log.NewError(req.OperationID, "DelGroupMember failed ", req.GroupID, req.OpUserID) + // return &pbGroup.CommonResp{ErrorCode: constant.ErrQuitGroup.ErrCode, ErrorMsg: constant.ErrQuitGroup.ErrMsg}, nil + } + //modify quitter conversation info + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + reqPb.OperationID = req.OperationID + c.OwnerUserID = req.OpUserID + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = true + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error()) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String()) + } } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String()) + okUserIDList := []string{req.OpUserID} + if err := db.DB.RemoverUserFromSuperGroup(req.GroupID, okUserIDList); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, okUserIDList, err.Error()) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } } reduceGroupMemberFromCacheReq := &pbCache.ReduceGroupMemberFromCacheReq{ @@ -896,7 +909,7 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) OperationID: req.OperationID, } etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) - if etcdConn == nil { + if etcdConnCache == nil { errMsg := req.OperationID + "getcdv3.GetConn == nil" log.NewError(req.OperationID, errMsg) return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil @@ -912,7 +925,12 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - chat.MemberQuitNotification(req) + if groupInfo.GroupType != constant.SuperGroup { + chat.MemberQuitNotification(req) + } else { + chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) + } + log.NewInfo(req.OperationID, "rpc QuitGroup return ", pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}) return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil } From f42a2c94349348d1d78f4102561abfd7788b65e3 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 20 Jun 2022 18:12:02 +0800 Subject: [PATCH 626/752] kickoff --- internal/msg_gateway/gate/logic.go | 21 +++++++++++-- internal/msg_gateway/gate/rpc_server.go | 4 ++- internal/msg_gateway/gate/ws_server.go | 19 ++++++++++++ internal/utils/jwt_token_test.go | 10 +++---- pkg/common/constant/constant.go | 4 +++ pkg/common/constant/error.go | 40 ++++++++++++++----------- pkg/common/token_verify/jwt_token.go | 13 ++++---- 7 files changed, 77 insertions(+), 34 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 2ece3bd94..60ba0ab2c 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -3,6 +3,7 @@ package gate import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" @@ -170,7 +171,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { sendMsgAllCountLock.Lock() sendMsgAllCount++ sendMsgAllCountLock.Unlock() - log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) + log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID) nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg, m.OperationID) @@ -181,7 +182,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { OperationID: m.OperationID, MsgData: &data, } - log.NewInfo(m.OperationID, "Ws call success to sendMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, data) + log.NewInfo(m.OperationID, "Ws call success to sendMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, data.String()) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, m.OperationID) if etcdConn == nil { errMsg := m.OperationID + "getcdv3.GetConn == nil" @@ -331,3 +332,19 @@ func (ws *WServer) sendErrMsg(conn *UserConn, errCode int32, errMsg string, reqI } ws.sendMsg(conn, mReply) } + +func SetTokenKicked(userID string, platformID int, operationID string) { + m, err := db.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) + if err != nil { + log.Error(operationID, "GetTokenMapByUidPid failed ", err.Error(), userID, constant.PlatformIDToName(platformID)) + return + } + for k, _ := range m { + m[k] = constant.KickedToken + } + err = db.DB.SetTokenMapByUidPid(userID, platformID, m) + if err != nil { + log.Error(operationID, "SetTokenMapByUidPid failed ", err.Error(), userID, constant.PlatformIDToName(platformID)) + return + } +} diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 6b851b8f0..6c7ec7809 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -292,11 +292,13 @@ func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOffl oldConnMap := ws.getUserAllCons(v) if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] ws.sendKickMsg(conn, &UserConn{}) + conn.Close() } + SetTokenKicked(v, int(req.PlatformID), req.OperationID) } return &pbRelay.KickUserOfflineResp{}, nil - } + func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) if err != nil { diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 223270197..aaffb68d6 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -289,6 +289,24 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation query := r.URL.Query() if len(query["token"]) != 0 && len(query["sendID"]) != 0 && len(query["platformID"]) != 0 { if ok, err, msg := token_verify.WsVerifyToken(query["token"][0], query["sendID"][0], query["platformID"][0], operationID); !ok { + switch err { + case constant.ErrTokenExpired: + status = int(constant.ErrTokenExpired.ErrCode) + case constant.ErrTokenInvalid: + status = int(constant.ErrTokenInvalid.ErrCode) + case constant.ErrTokenMalformed: + status = int(constant.ErrTokenMalformed.ErrCode) + case constant.ErrTokenNotValidYet: + status = int(constant.ErrTokenNotValidYet.ErrCode) + case constant.ErrTokenUnknown: + status = int(constant.ErrTokenUnknown.ErrCode) + case constant.ErrTokenKicked: + status = int(constant.ErrTokenKicked.ErrCode) + case constant.ErrTokenDifferentPlatformID: + status = int(constant.ErrTokenDifferentPlatformID.ErrCode) + case constant.ErrTokenDifferentUserID: + status = int(constant.ErrTokenDifferentUserID.ErrCode) + } log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error()) w.Header().Set("Sec-Websocket-Version", "13") w.Header().Set("ws_err_msg", err.Error()) @@ -299,6 +317,7 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation return true } } else { + status = int(constant.ErrArgs.ErrCode) log.Error(operationID, "Args err ", "query ", query) w.Header().Set("Sec-Websocket-Version", "13") errMsg := "args err, need token, sendID, platformID" diff --git a/internal/utils/jwt_token_test.go b/internal/utils/jwt_token_test.go index da53a2a36..fe7a6b320 100644 --- a/internal/utils/jwt_token_test.go +++ b/internal/utils/jwt_token_test.go @@ -38,7 +38,7 @@ func Test_CreateToken(t *testing.T) { platform := int32(1) now := time.Now().Unix() - tokenString, expiresAt, err := token_verify.CreateToken(uid, platform) + tokenString, expiresAt, err := token_verify.CreateToken(uid, int(platform)) assert.NotEmpty(t, tokenString) assert.Equal(t, expiresAt, 604800+now) @@ -48,7 +48,7 @@ func Test_CreateToken(t *testing.T) { func Test_VerifyToken(t *testing.T) { uid := "1" platform := int32(1) - tokenString, _, _ := token_verify.CreateToken(uid, platform) + tokenString, _, _ := token_verify.CreateToken(uid, int(platform)) result, _ := token_verify.VerifyToken(tokenString, uid) assert.True(t, result) result, _ = token_verify.VerifyToken(tokenString, "2") @@ -58,7 +58,7 @@ func Test_VerifyToken(t *testing.T) { func Test_ParseRedisInterfaceToken(t *testing.T) { uid := "1" platform := int32(1) - tokenString, _, _ := token_verify.CreateToken(uid, platform) + tokenString, _, _ := token_verify.CreateToken(uid, int(platform)) claims, err := token_verify.ParseRedisInterfaceToken([]uint8(tokenString)) assert.Nil(t, err) @@ -66,7 +66,7 @@ func Test_ParseRedisInterfaceToken(t *testing.T) { // timeout config.Config.TokenPolicy.AccessExpire = -80 - tokenString, _, _ = token_verify.CreateToken(uid, platform) + tokenString, _, _ = token_verify.CreateToken(uid, int(platform)) claims, err = token_verify.ParseRedisInterfaceToken([]uint8(tokenString)) assert.Equal(t, err, constant.ExpiredToken) assert.Nil(t, claims) @@ -75,7 +75,7 @@ func Test_ParseRedisInterfaceToken(t *testing.T) { func Test_ParseToken(t *testing.T) { uid := "1" platform := int32(1) - tokenString, _, _ := token_verify.CreateToken(uid, platform) + tokenString, _, _ := token_verify.CreateToken(uid, int(platform)) claims, err := token_verify.ParseToken(tokenString, "") if err == nil { assert.Equal(t, claims.UID, uid) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 324e4e8bc..5f95063a9 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -283,6 +283,10 @@ func GroupIsBanPrivateChat(status int32) bool { return true } +const ( + TokenKicked = 1001 +) + const BigVersion = "v2" const LogFileName = "OpenIM.log" diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index 08a3c23f8..fa5f3c68b 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -42,12 +42,14 @@ var ( // ErrQuitGroup = ErrInfo{621, "Failed to quit the group"} // ErrSetGroupInfo = ErrInfo{622, "Failed to set group info"} // ErrParam = ErrInfo{700, "param failed"} - ErrTokenExpired = ErrInfo{701, TokenExpiredMsg.Error()} - ErrTokenInvalid = ErrInfo{702, TokenInvalidMsg.Error()} - ErrTokenMalformed = ErrInfo{703, TokenMalformedMsg.Error()} - ErrTokenNotValidYet = ErrInfo{704, TokenNotValidYetMsg.Error()} - ErrTokenUnknown = ErrInfo{705, TokenUnknownMsg.Error()} - ErrTokenKicked = ErrInfo{706, TokenUserKickedMsg.Error()} + ErrTokenExpired = ErrInfo{701, TokenExpiredMsg.Error()} + ErrTokenInvalid = ErrInfo{702, TokenInvalidMsg.Error()} + ErrTokenMalformed = ErrInfo{703, TokenMalformedMsg.Error()} + ErrTokenNotValidYet = ErrInfo{704, TokenNotValidYetMsg.Error()} + ErrTokenUnknown = ErrInfo{705, TokenUnknownMsg.Error()} + ErrTokenKicked = ErrInfo{706, TokenUserKickedMsg.Error()} + ErrTokenDifferentPlatformID = ErrInfo{707, TokenDifferentPlatformIDMsg.Error()} + ErrTokenDifferentUserID = ErrInfo{708, TokenDifferentUserIDMsg.Error()} ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} @@ -60,18 +62,20 @@ var ( ) var ( - ParseTokenMsg = errors.New("parse token failed") - TokenExpiredMsg = errors.New("token is timed out, please log in again") - TokenInvalidMsg = errors.New("token has been invalidated") - TokenNotValidYetMsg = errors.New("token not active yet") - TokenMalformedMsg = errors.New("that's not even a token") - TokenUnknownMsg = errors.New("couldn't handle this token") - TokenUserKickedMsg = errors.New("user has been kicked") - AccessMsg = errors.New("no permission") - StatusMsg = errors.New("status is abnormal") - DBMsg = errors.New("db failed") - ArgsMsg = errors.New("args failed") - CallBackMsg = errors.New("callback failed") + ParseTokenMsg = errors.New("parse token failed") + TokenExpiredMsg = errors.New("token is timed out, please log in again") + TokenInvalidMsg = errors.New("token has been invalidated") + TokenNotValidYetMsg = errors.New("token not active yet") + TokenMalformedMsg = errors.New("that's not even a token") + TokenUnknownMsg = errors.New("couldn't handle this token") + TokenUserKickedMsg = errors.New("user has been kicked") + TokenDifferentPlatformIDMsg = errors.New("different platformID") + TokenDifferentUserIDMsg = errors.New("different userID") + AccessMsg = errors.New("no permission") + StatusMsg = errors.New("status is abnormal") + DBMsg = errors.New("db failed") + ArgsMsg = errors.New("args failed") + CallBackMsg = errors.New("callback failed") ThirdPartyMsg = errors.New("third party error") ) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 54a1b4274..3d93ccb44 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -188,7 +188,7 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { return nil, utils.Wrap(&constant.ErrTokenInvalid, "get token from redis err") } if m == nil { - log.NewError(operationID, "get token from redis err", "m is nil", tokensString) + log.NewError(operationID, "get token from redis err, not in redis ", "m is nil", tokensString) return nil, utils.Wrap(&constant.ErrTokenInvalid, "get token from redis err") } if v, ok := m[tokensString]; ok { @@ -196,13 +196,9 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { case constant.NormalToken: log.NewDebug(operationID, "this is normal return", claims) return claims, nil - case constant.InValidToken: - return nil, utils.Wrap(&constant.ErrTokenInvalid, "") case constant.KickedToken: log.Error(operationID, "this token has been kicked by other same terminal ", constant.ErrTokenKicked) return nil, utils.Wrap(&constant.ErrTokenKicked, "this token has been kicked by other same terminal ") - case constant.ExpiredToken: - return nil, utils.Wrap(&constant.ErrTokenExpired, "") default: return nil, utils.Wrap(&constant.ErrTokenUnknown, "") } @@ -244,20 +240,21 @@ func VerifyToken(token, uid string) (bool, error) { log.NewDebug("", claims.UID, claims.Platform) return true, nil } + func WsVerifyToken(token, uid string, platformID string, operationID string) (bool, error, string) { argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + platformID claims, err := ParseToken(token, operationID) if err != nil { - errMsg := "parse token err " + argMsg + errMsg := "parse token err " + err.Error() + argMsg return false, utils.Wrap(err, errMsg), errMsg } if claims.UID != uid { errMsg := " uid is not same to token uid " + " claims.UID " + claims.UID + argMsg - return false, utils.Wrap(&constant.ErrTokenUnknown, errMsg), errMsg + return false, utils.Wrap(&constant.ErrTokenDifferentUserID, errMsg), errMsg } if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { errMsg := " platform is not same to token platform " + argMsg + "claims platformID " + claims.Platform - return false, utils.Wrap(&constant.ErrTokenUnknown, errMsg), errMsg + return false, utils.Wrap(&constant.ErrTokenDifferentPlatformID, errMsg), errMsg } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) return true, nil, "" From b242aac7cdfc116c9e7c19279a4a7d4c9c6c08e9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Jun 2022 11:27:39 +0800 Subject: [PATCH 627/752] jpush add config for ios env mode --- config/config.yaml | 1 + internal/push/jpush/push.go | 2 +- pkg/common/config/config.go | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 923b95591..617d5b557 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -261,6 +261,7 @@ messageverify: iospush: pushSound: "xxx" badgeCount: true + production: true callback: # callback url 需要自行更换callback url diff --git a/internal/push/jpush/push.go b/internal/push/jpush/push.go index 833174de5..060b11d78 100644 --- a/internal/push/jpush/push.go +++ b/internal/push/jpush/push.go @@ -51,7 +51,7 @@ func (j *JPush) Push(accounts []string, alert, detailContent, operationID string var me requestBody.Message me.SetMsgContent(detailContent) var o requestBody.Options - o.SetApnsProduction(false) + o.SetApnsProduction(config.Config.IOSPush.Production) var po requestBody.PushObj po.SetPlatform(&pf) po.SetAudience(&au) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 2163e7619..9f6b4ba18 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -238,6 +238,7 @@ type config struct { IOSPush struct { PushSound string `yaml:"pushSound"` BadgeCount bool `yaml:"badgeCount"` + Production bool `yaml:"production"` } Callback struct { From 7783e5b7cfdb602a328b6345f82e935be6e8381c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Jun 2022 11:28:02 +0800 Subject: [PATCH 628/752] jpush add config for ios env mode --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 617d5b557..d30e21afa 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -261,7 +261,7 @@ messageverify: iospush: pushSound: "xxx" badgeCount: true - production: true + production: false callback: # callback url 需要自行更换callback url From 49797ce6abd110a6fd55336123e6223c70b5b338 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 14:54:42 +0800 Subject: [PATCH 629/752] super group notification --- internal/rpc/group/group.go | 22 +++++++++++++++----- internal/rpc/msg/super_group_notification.go | 6 +++--- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index f51e0edc4..946002363 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -208,8 +208,11 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR if req.GroupInfo.GroupType != constant.SuperGroup { chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) } else { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, groupId) - + go func() { + for _, v := range okUserIDList { + chat.SuperGroupNotification(req.OperationID, v, v) + } + }() } return resp, nil } else { @@ -406,7 +409,11 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite if groupInfo.GroupType != constant.SuperGroup { chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) } else { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) + go func() { + for _, v := range req.InvitedUserIDList { + chat.SuperGroupNotification(req.OperationID, v, v) + } + }() } log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") @@ -620,7 +627,12 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou if groupInfo.GroupType != constant.SuperGroup { chat.MemberKickedNotification(req, okUserIDList) } else { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) + go func() { + for _, v := range req.KickedUserIDList { + chat.SuperGroupNotification(req.OperationID, v, v) + } + }() + } log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String()) return &resp, nil @@ -928,7 +940,7 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) if groupInfo.GroupType != constant.SuperGroup { chat.MemberQuitNotification(req) } else { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) + chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.OpUserID) } log.NewInfo(req.OperationID, "rpc QuitGroup return ", pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}) diff --git a/internal/rpc/msg/super_group_notification.go b/internal/rpc/msg/super_group_notification.go index 52e2e17a2..9369c7910 100644 --- a/internal/rpc/msg/super_group_notification.go +++ b/internal/rpc/msg/super_group_notification.go @@ -9,7 +9,7 @@ import ( //"github.com/golang/protobuf/proto" ) -func SuperGroupNotification(operationID, sendID, groupID string) { +func SuperGroupNotification(operationID, sendID, recvID string) { //var tips sdk.TipsComm //var err error @@ -21,10 +21,10 @@ func SuperGroupNotification(operationID, sendID, groupID string) { //tips.JsonDetail, _ = marshaler.MarshalToString(m) n := &NotificationMsg{ SendID: sendID, - RecvID: groupID, + RecvID: recvID, MsgFrom: constant.SysMsgType, ContentType: constant.SuperGroupUpdateNotification, - SessionType: constant.SuperGroupChatType, + SessionType: constant.SingleChatType, OperationID: operationID, } //n.Content, err = proto.Marshal(&tips) From c3bdd2f288637afc44bf48087883499e654e0a91 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 16:36:34 +0800 Subject: [PATCH 630/752] debug --- internal/api/auth/auth.go | 2 +- internal/msg_gateway/gate/ws_server.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 84beaa32b..605cc890b 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -100,7 +100,7 @@ func UserToken(c *gin.Context) { client := rpc.NewAuthClient(etcdConn) reply, err := client.UserToken(context.Background(), req) if err != nil { - errMsg := req.OperationID + " UserToken failed " + err.Error() + req.String() + errMsg := req.OperationID + " UserToken failed " + err.Error() + " req: " + req.String() log.NewError(req.OperationID, errMsg) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index aaffb68d6..774b8555f 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -11,6 +11,7 @@ import ( "encoding/gob" go_redis "github.com/go-redis/redis/v8" "net/http" + "reflect" "sync" "time" @@ -307,7 +308,7 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation case constant.ErrTokenDifferentUserID: status = int(constant.ErrTokenDifferentUserID.ErrCode) } - log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error()) + log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error(), "type: ", reflect.TypeOf(err)) w.Header().Set("Sec-Websocket-Version", "13") w.Header().Set("ws_err_msg", err.Error()) http.Error(w, err.Error(), status) From 08d95512300090db9e374b488628c1f0203acf9c Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 16:50:18 +0800 Subject: [PATCH 631/752] debug --- go.mod | 1 + go.sum | 2 ++ internal/msg_gateway/gate/ws_server.go | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index e34d69ab0..dc695a9bb 100644 --- a/go.mod +++ b/go.mod @@ -45,6 +45,7 @@ require ( google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.27.1 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/errgo.v2 v2.1.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/ini.v1 v1.66.2 // indirect gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 diff --git a/go.sum b/go.sum index ac8ee760f..7b996f80d 100644 --- a/go.sum +++ b/go.sum @@ -562,6 +562,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +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/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 774b8555f..3836dec4d 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -10,6 +10,7 @@ import ( "bytes" "encoding/gob" go_redis "github.com/go-redis/redis/v8" + "gopkg.in/errgo.v2/errors" "net/http" "reflect" "sync" @@ -308,7 +309,7 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation case constant.ErrTokenDifferentUserID: status = int(constant.ErrTokenDifferentUserID.ErrCode) } - log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error(), "type: ", reflect.TypeOf(err)) + log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error(), "type: ", reflect.TypeOf(errors.Cause(err))) w.Header().Set("Sec-Websocket-Version", "13") w.Header().Set("ws_err_msg", err.Error()) http.Error(w, err.Error(), status) From 9b76eb6b55cb0497ff381fc3cee17c0537efae70 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 17:15:24 +0800 Subject: [PATCH 632/752] debug --- internal/msg_gateway/gate/ws_server.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 3836dec4d..453619cf3 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -12,7 +12,6 @@ import ( go_redis "github.com/go-redis/redis/v8" "gopkg.in/errgo.v2/errors" "net/http" - "reflect" "sync" "time" @@ -291,7 +290,7 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation query := r.URL.Query() if len(query["token"]) != 0 && len(query["sendID"]) != 0 && len(query["platformID"]) != 0 { if ok, err, msg := token_verify.WsVerifyToken(query["token"][0], query["sendID"][0], query["platformID"][0], operationID); !ok { - switch err { + switch errors.Cause(err) { case constant.ErrTokenExpired: status = int(constant.ErrTokenExpired.ErrCode) case constant.ErrTokenInvalid: @@ -309,7 +308,7 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation case constant.ErrTokenDifferentUserID: status = int(constant.ErrTokenDifferentUserID.ErrCode) } - log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error(), "type: ", reflect.TypeOf(errors.Cause(err))) + log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error()) w.Header().Set("Sec-Websocket-Version", "13") w.Header().Set("ws_err_msg", err.Error()) http.Error(w, err.Error(), status) From 59a53c7c734b300a167b41e6a5061668d684d224 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 21 Jun 2022 17:37:22 +0800 Subject: [PATCH 633/752] fix bug --- pkg/common/db/mongoModel.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 4576c26b5..7a4685b9e 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -984,12 +984,19 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, Upsert: &upsert, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") + //_, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) + //if err != nil { + // session.AbortTransaction(ctx) + // return utils.Wrap(err, "transaction failed") + //} + for _, userID := range initMemberIDList { + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + } - session.CommitTransaction(ctx) return err } From 68e611794ba18c6845ef7c6c0537a9af732d4b28 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 18:15:22 +0800 Subject: [PATCH 634/752] debug --- internal/msg_gateway/gate/ws_server.go | 42 +++++++++++++++----------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 453619cf3..26d1d052e 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -10,7 +10,9 @@ import ( "bytes" "encoding/gob" go_redis "github.com/go-redis/redis/v8" - "gopkg.in/errgo.v2/errors" + "github.com/pkg/errors" + + //"gopkg.in/errgo.v2/errors" "net/http" "sync" "time" @@ -290,25 +292,29 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation query := r.URL.Query() if len(query["token"]) != 0 && len(query["sendID"]) != 0 && len(query["platformID"]) != 0 { if ok, err, msg := token_verify.WsVerifyToken(query["token"][0], query["sendID"][0], query["platformID"][0], operationID); !ok { - switch errors.Cause(err) { - case constant.ErrTokenExpired: - status = int(constant.ErrTokenExpired.ErrCode) - case constant.ErrTokenInvalid: - status = int(constant.ErrTokenInvalid.ErrCode) - case constant.ErrTokenMalformed: - status = int(constant.ErrTokenMalformed.ErrCode) - case constant.ErrTokenNotValidYet: - status = int(constant.ErrTokenNotValidYet.ErrCode) - case constant.ErrTokenUnknown: + if errors.Is(err, constant.ErrTokenUnknown) { status = int(constant.ErrTokenUnknown.ErrCode) - case constant.ErrTokenKicked: - status = int(constant.ErrTokenKicked.ErrCode) - case constant.ErrTokenDifferentPlatformID: - status = int(constant.ErrTokenDifferentPlatformID.ErrCode) - case constant.ErrTokenDifferentUserID: - status = int(constant.ErrTokenDifferentUserID.ErrCode) } - log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error()) + //switch errors.Cause(err) { + //case constant.ErrTokenExpired: + // status = int(constant.ErrTokenExpired.ErrCode) + //case constant.ErrTokenInvalid: + // status = int(constant.ErrTokenInvalid.ErrCode) + //case constant.ErrTokenMalformed: + // status = int(constant.ErrTokenMalformed.ErrCode) + //case constant.ErrTokenNotValidYet: + // status = int(constant.ErrTokenNotValidYet.ErrCode) + //case constant.ErrTokenUnknown: + // status = int(constant.ErrTokenUnknown.ErrCode) + //case constant.ErrTokenKicked: + // status = int(constant.ErrTokenKicked.ErrCode) + //case constant.ErrTokenDifferentPlatformID: + // status = int(constant.ErrTokenDifferentPlatformID.ErrCode) + //case constant.ErrTokenDifferentUserID: + // status = int(constant.ErrTokenDifferentUserID.ErrCode) + //} + + log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error(), "status: ", status) w.Header().Set("Sec-Websocket-Version", "13") w.Header().Set("ws_err_msg", err.Error()) http.Error(w, err.Error(), status) From 8e9ad57173e2c9eb3862eea85ba71cb5e1d3c79f Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 18:36:34 +0800 Subject: [PATCH 635/752] debug --- pkg/common/token_verify/jwt_token.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 3d93ccb44..c2b7dde77 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -8,6 +8,7 @@ import ( "Open_IM/pkg/utils" go_redis "github.com/go-redis/redis/v8" "github.com/golang-jwt/jwt/v4" + "github.com/pkg/errors" "time" ) @@ -178,6 +179,11 @@ func ParseTokenGetUserID(token string, operationID string) (error, string) { func ParseToken(tokensString, operationID string) (claims *Claims, err error) { claims, err = GetClaimFromToken(tokensString) if err != nil { + if errors.Is(err, constant.ErrTokenUnknown) { + errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() + log.Error(operationID, errMsg) + } + log.NewError(operationID, "token validate err", err.Error(), tokensString) return nil, utils.Wrap(err, "") } @@ -245,6 +251,11 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + platformID claims, err := ParseToken(token, operationID) if err != nil { + if errors.Is(err, constant.ErrTokenUnknown) { + errMsg := "ParseToken failed ErrTokenUnknown " + err.Error() + log.Error(operationID, errMsg) + } + errMsg := "parse token err " + err.Error() + argMsg return false, utils.Wrap(err, errMsg), errMsg } From 5527f7c78a36e4b123223d8774d776dfaa14938f Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 18:49:01 +0800 Subject: [PATCH 636/752] debug --- pkg/common/token_verify/jwt_token.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index c2b7dde77..4cc5be510 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -255,6 +255,11 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo errMsg := "ParseToken failed ErrTokenUnknown " + err.Error() log.Error(operationID, errMsg) } + e := errors.Unwrap(err) + if errors.Is(e, constant.ErrTokenUnknown) { + errMsg := "ParseToken failed ErrTokenUnknown " + e.Error() + log.Error(operationID, errMsg) + } errMsg := "parse token err " + err.Error() + argMsg return false, utils.Wrap(err, errMsg), errMsg From c993bb2f5e042b9941ec96e91bcd1ded125f565e Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 18:58:57 +0800 Subject: [PATCH 637/752] debug --- pkg/common/token_verify/jwt_token.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 4cc5be510..1deeed2de 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -9,6 +9,7 @@ import ( go_redis "github.com/go-redis/redis/v8" "github.com/golang-jwt/jwt/v4" "github.com/pkg/errors" + "reflect" "time" ) @@ -183,8 +184,13 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() log.Error(operationID, errMsg) } + e := errors.Unwrap(err) + if errors.Is(e, constant.ErrTokenUnknown) { + errMsg := "ParseToken failed ErrTokenUnknown " + e.Error() + log.Error(operationID, errMsg) + } - log.NewError(operationID, "token validate err", err.Error(), tokensString) + log.NewError(operationID, "token validate err", err.Error(), tokensString, "type ", reflect.TypeOf(err), "type2: ", reflect.TypeOf(e)) return nil, utils.Wrap(err, "") } From 7f4e21d4ba60965955214d4e0030d3f4a5600183 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 19:24:09 +0800 Subject: [PATCH 638/752] debug --- pkg/common/constant/error.go | 28 +--------------------------- pkg/common/token_verify/jwt_token.go | 6 ++++++ 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index fa5f3c68b..10d8a219c 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -12,36 +12,10 @@ var ( OK = ErrInfo{0, ""} ErrServer = ErrInfo{500, "server error"} - // ErrMysql = ErrInfo{100, ""} - // ErrMongo = ErrInfo{110, ""} - // ErrRedis = ErrInfo{120, ""} ErrParseToken = ErrInfo{700, ParseTokenMsg.Error()} - // ErrCreateToken = ErrInfo{201, "Create token failed"} - // ErrAppServerKey = ErrInfo{300, "key error"} + ErrTencentCredential = ErrInfo{400, ThirdPartyMsg.Error()} - // ErrorUserRegister = ErrInfo{600, "User registration failed"} - // ErrAccountExists = ErrInfo{601, "The account is already registered and cannot be registered again"} - // ErrUserPassword = ErrInfo{602, "User password error"} - // ErrRefreshToken = ErrInfo{605, "Failed to refresh token"} - // ErrAddFriend = ErrInfo{606, "Failed to add friends"} - // ErrAgreeToAddFriend = ErrInfo{607, "Failed to agree application"} - // ErrAddFriendToBlack = ErrInfo{608, "Failed to add friends to the blacklist"} - // ErrGetBlackList = ErrInfo{609, "Failed to get blacklist"} - // ErrDeleteFriend = ErrInfo{610, "Failed to delete friend"} - // ErrGetFriendApplyList = ErrInfo{611, "Failed to get friend application list"} - // ErrGetFriendList = ErrInfo{612, "Failed to get friend list"} - // ErrRemoveBlackList = ErrInfo{613, "Failed to remove blacklist"} - // ErrSearchUserInfo = ErrInfo{614, "Can't find the user information"} - // ErrDelAppleDeviceToken = ErrInfo{615, ""} - // ErrModifyUserInfo = ErrInfo{616, "update user some attribute failed"} - // ErrSetFriendComment = ErrInfo{617, "set friend comment failed"} - // ErrSearchUserInfoFromTheGroup = ErrInfo{618, "There is no such group or the user not in the group"} - // ErrCreateGroup = ErrInfo{619, "create group chat failed"} - // ErrJoinGroupApplication = ErrInfo{620, "Failed to apply to join the group"} - // ErrQuitGroup = ErrInfo{621, "Failed to quit the group"} - // ErrSetGroupInfo = ErrInfo{622, "Failed to set group info"} - // ErrParam = ErrInfo{700, "param failed"} ErrTokenExpired = ErrInfo{701, TokenExpiredMsg.Error()} ErrTokenInvalid = ErrInfo{702, TokenInvalidMsg.Error()} ErrTokenMalformed = ErrInfo{703, TokenMalformedMsg.Error()} diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 1deeed2de..e5808e5bc 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -184,6 +184,12 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() log.Error(operationID, errMsg) } + info := err.(constant.ErrInfo) + if info == constant.ErrTokenUnknown { + errMsg := "info == constant.ErrTokenUnknown " + err.Error() + log.Error(operationID, errMsg) + } + e := errors.Unwrap(err) if errors.Is(e, constant.ErrTokenUnknown) { errMsg := "ParseToken failed ErrTokenUnknown " + e.Error() From 06c523ea81c84adb902179b9c35d818ffaec6b16 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 19:38:13 +0800 Subject: [PATCH 639/752] debug --- pkg/common/token_verify/jwt_token.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index e5808e5bc..46a7c0334 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -184,11 +184,11 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() log.Error(operationID, errMsg) } - info := err.(constant.ErrInfo) - if info == constant.ErrTokenUnknown { - errMsg := "info == constant.ErrTokenUnknown " + err.Error() - log.Error(operationID, errMsg) - } + //info := err.(constant.ErrInfo) + //if info == constant.ErrTokenUnknown { + // errMsg := "info == constant.ErrTokenUnknown " + err.Error() + // log.Error(operationID, errMsg) + //} e := errors.Unwrap(err) if errors.Is(e, constant.ErrTokenUnknown) { From 1bfae7627ed20373c4ab6c3c8c2a3f7a6db506df Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 19:39:46 +0800 Subject: [PATCH 640/752] debug --- pkg/common/token_verify/jwt_token.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 46a7c0334..4f357ae98 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -181,7 +181,7 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { claims, err = GetClaimFromToken(tokensString) if err != nil { if errors.Is(err, constant.ErrTokenUnknown) { - errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() + errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() log.Error(operationID, errMsg) } //info := err.(constant.ErrInfo) From c2686beb9b49a92dccd9b5153210c1b9492ba0f2 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 19:44:02 +0800 Subject: [PATCH 641/752] debug --- pkg/common/token_verify/jwt_token.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 4f357ae98..d98824b14 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -101,23 +101,23 @@ func GetClaimFromToken(tokensString string) (*Claims, error) { if err != nil { if ve, ok := err.(*jwt.ValidationError); ok { if ve.Errors&jwt.ValidationErrorMalformed != 0 { - return nil, &constant.ErrTokenMalformed + return nil, constant.ErrTokenMalformed } else if ve.Errors&jwt.ValidationErrorExpired != 0 { - return nil, &constant.ErrTokenExpired + return nil, constant.ErrTokenExpired } else if ve.Errors&jwt.ValidationErrorNotValidYet != 0 { - return nil, &constant.ErrTokenNotValidYet + return nil, constant.ErrTokenNotValidYet } else { - return nil, &constant.ErrTokenUnknown + return nil, constant.ErrTokenUnknown } } else { - return nil, &constant.ErrTokenNotValidYet + return nil, constant.ErrTokenNotValidYet } } else { if claims, ok := token.Claims.(*Claims); ok && token.Valid { //log.NewDebug("", claims.UID, claims.Platform) return claims, nil } - return nil, &constant.ErrTokenNotValidYet + return nil, constant.ErrTokenNotValidYet } } @@ -184,11 +184,11 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() log.Error(operationID, errMsg) } - //info := err.(constant.ErrInfo) - //if info == constant.ErrTokenUnknown { - // errMsg := "info == constant.ErrTokenUnknown " + err.Error() - // log.Error(operationID, errMsg) - //} + info := err.(constant.ErrInfo) + if info == constant.ErrTokenUnknown { + errMsg := "info == constant.ErrTokenUnknown " + err.Error() + log.Error(operationID, errMsg) + } e := errors.Unwrap(err) if errors.Is(e, constant.ErrTokenUnknown) { From 0fe838d58898802901ce194d8e305725dd0db009 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Jun 2022 19:46:58 +0800 Subject: [PATCH 642/752] compose limit memory --- docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yaml b/docker-compose.yaml index 0e180c442..4cc16b977 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -20,6 +20,7 @@ services: ports: - 37017:27017 container_name: mongo + command: --wiredTigerCacheSizeGB 5 volumes: - ./components/mongodb/data/db:/data/db - ./components/mongodb/data/logs:/data/logs From d99d7ac63cfd9d7828b55066881e1cd0303c180a Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 19:48:26 +0800 Subject: [PATCH 643/752] debug --- pkg/common/token_verify/jwt_token.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index d98824b14..40aba4a88 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -185,10 +185,7 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { log.Error(operationID, errMsg) } info := err.(constant.ErrInfo) - if info == constant.ErrTokenUnknown { - errMsg := "info == constant.ErrTokenUnknown " + err.Error() - log.Error(operationID, errMsg) - } + log.Error(operationID, "detail info , ", info.ErrCode, info.ErrMsg) e := errors.Unwrap(err) if errors.Is(e, constant.ErrTokenUnknown) { From 1a3b5d018a99faa71fb17d28204aa8c4d277e884 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 19:57:48 +0800 Subject: [PATCH 644/752] Handling token exceptions --- internal/msg_gateway/gate/ws_server.go | 21 +++++++++++++ pkg/common/token_verify/jwt_token.go | 42 +++++++++++++------------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 26d1d052e..6f51ca993 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -292,9 +292,30 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operation query := r.URL.Query() if len(query["token"]) != 0 && len(query["sendID"]) != 0 && len(query["platformID"]) != 0 { if ok, err, msg := token_verify.WsVerifyToken(query["token"][0], query["sendID"][0], query["platformID"][0], operationID); !ok { + if errors.Is(err, constant.ErrTokenExpired) { + status = int(constant.ErrTokenExpired.ErrCode) + } + if errors.Is(err, constant.ErrTokenInvalid) { + status = int(constant.ErrTokenInvalid.ErrCode) + } + if errors.Is(err, constant.ErrTokenMalformed) { + status = int(constant.ErrTokenMalformed.ErrCode) + } + if errors.Is(err, constant.ErrTokenNotValidYet) { + status = int(constant.ErrTokenNotValidYet.ErrCode) + } if errors.Is(err, constant.ErrTokenUnknown) { status = int(constant.ErrTokenUnknown.ErrCode) } + if errors.Is(err, constant.ErrTokenKicked) { + status = int(constant.ErrTokenKicked.ErrCode) + } + if errors.Is(err, constant.ErrTokenDifferentPlatformID) { + status = int(constant.ErrTokenDifferentPlatformID.ErrCode) + } + if errors.Is(err, constant.ErrTokenDifferentUserID) { + status = int(constant.ErrTokenDifferentUserID.ErrCode) + } //switch errors.Cause(err) { //case constant.ErrTokenExpired: // status = int(constant.ErrTokenExpired.ErrCode) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 40aba4a88..474657b50 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -180,18 +180,18 @@ func ParseTokenGetUserID(token string, operationID string) (error, string) { func ParseToken(tokensString, operationID string) (claims *Claims, err error) { claims, err = GetClaimFromToken(tokensString) if err != nil { - if errors.Is(err, constant.ErrTokenUnknown) { - errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() - log.Error(operationID, errMsg) - } - info := err.(constant.ErrInfo) - log.Error(operationID, "detail info , ", info.ErrCode, info.ErrMsg) - - e := errors.Unwrap(err) - if errors.Is(e, constant.ErrTokenUnknown) { - errMsg := "ParseToken failed ErrTokenUnknown " + e.Error() - log.Error(operationID, errMsg) - } + //if errors.Is(err, constant.ErrTokenUnknown) { + // errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error() + // log.Error(operationID, errMsg) + //} + //info := err.(constant.ErrInfo) + //log.Error(operationID, "detail info , ", info.ErrCode, info.ErrMsg) + // + //e := errors.Unwrap(err) + //if errors.Is(e, constant.ErrTokenUnknown) { + // errMsg := "ParseToken failed ErrTokenUnknown " + e.Error() + // log.Error(operationID, errMsg) + //} log.NewError(operationID, "token validate err", err.Error(), tokensString, "type ", reflect.TypeOf(err), "type2: ", reflect.TypeOf(e)) return nil, utils.Wrap(err, "") @@ -260,15 +260,15 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + platformID claims, err := ParseToken(token, operationID) if err != nil { - if errors.Is(err, constant.ErrTokenUnknown) { - errMsg := "ParseToken failed ErrTokenUnknown " + err.Error() - log.Error(operationID, errMsg) - } - e := errors.Unwrap(err) - if errors.Is(e, constant.ErrTokenUnknown) { - errMsg := "ParseToken failed ErrTokenUnknown " + e.Error() - log.Error(operationID, errMsg) - } + //if errors.Is(err, constant.ErrTokenUnknown) { + // errMsg := "ParseToken failed ErrTokenUnknown " + err.Error() + // log.Error(operationID, errMsg) + //} + //e := errors.Unwrap(err) + //if errors.Is(e, constant.ErrTokenUnknown) { + // errMsg := "ParseToken failed ErrTokenUnknown " + e.Error() + // log.Error(operationID, errMsg) + //} errMsg := "parse token err " + err.Error() + argMsg return false, utils.Wrap(err, errMsg), errMsg From ac7c0015db36f9253927fb5126b2e315c3de671a Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 20:00:03 +0800 Subject: [PATCH 645/752] Handling token exceptions --- pkg/common/token_verify/jwt_token.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 474657b50..4490316b1 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -8,7 +8,6 @@ import ( "Open_IM/pkg/utils" go_redis "github.com/go-redis/redis/v8" "github.com/golang-jwt/jwt/v4" - "github.com/pkg/errors" "reflect" "time" ) From f34fedd82212115d5fef2b71b5ab57f4de85c89d Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 20:13:19 +0800 Subject: [PATCH 646/752] Handling token exceptions --- pkg/common/token_verify/jwt_token.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 4490316b1..5869dc48b 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -274,11 +274,11 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo } if claims.UID != uid { errMsg := " uid is not same to token uid " + " claims.UID " + claims.UID + argMsg - return false, utils.Wrap(&constant.ErrTokenDifferentUserID, errMsg), errMsg + return false, utils.Wrap(constant.ErrTokenDifferentUserID, errMsg), errMsg } if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { errMsg := " platform is not same to token platform " + argMsg + "claims platformID " + claims.Platform - return false, utils.Wrap(&constant.ErrTokenDifferentPlatformID, errMsg), errMsg + return false, utils.Wrap(constant.ErrTokenDifferentPlatformID, errMsg), errMsg } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) return true, nil, "" From af152aa9b9e25362584eaaa00df6ae283a55bf86 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 20:16:01 +0800 Subject: [PATCH 647/752] Handling token exceptions --- pkg/common/token_verify/jwt_token.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 5869dc48b..a2c0e4549 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -8,7 +8,6 @@ import ( "Open_IM/pkg/utils" go_redis "github.com/go-redis/redis/v8" "github.com/golang-jwt/jwt/v4" - "reflect" "time" ) @@ -192,7 +191,6 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { // log.Error(operationID, errMsg) //} - log.NewError(operationID, "token validate err", err.Error(), tokensString, "type ", reflect.TypeOf(err), "type2: ", reflect.TypeOf(e)) return nil, utils.Wrap(err, "") } From 910876f32335f80fa298d495c8517a5a5a27fe0a Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 20:25:13 +0800 Subject: [PATCH 648/752] Handling token exceptions --- pkg/common/token_verify/jwt_token.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index a2c0e4549..8785969c4 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -197,11 +197,11 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { m, err := commonDB.DB.GetTokenMapByUidPid(claims.UID, claims.Platform) if err != nil { log.NewError(operationID, "get token from redis err", err.Error(), tokensString) - return nil, utils.Wrap(&constant.ErrTokenInvalid, "get token from redis err") + return nil, utils.Wrap(constant.ErrTokenInvalid, "get token from redis err") } if m == nil { log.NewError(operationID, "get token from redis err, not in redis ", "m is nil", tokensString) - return nil, utils.Wrap(&constant.ErrTokenInvalid, "get token from redis err") + return nil, utils.Wrap(constant.ErrTokenInvalid, "get token from redis err") } if v, ok := m[tokensString]; ok { switch v { @@ -210,13 +210,13 @@ func ParseToken(tokensString, operationID string) (claims *Claims, err error) { return claims, nil case constant.KickedToken: log.Error(operationID, "this token has been kicked by other same terminal ", constant.ErrTokenKicked) - return nil, utils.Wrap(&constant.ErrTokenKicked, "this token has been kicked by other same terminal ") + return nil, utils.Wrap(constant.ErrTokenKicked, "this token has been kicked by other same terminal ") default: - return nil, utils.Wrap(&constant.ErrTokenUnknown, "") + return nil, utils.Wrap(constant.ErrTokenUnknown, "") } } log.NewError(operationID, "redis token map not find", constant.ErrTokenUnknown) - return nil, utils.Wrap(&constant.ErrTokenUnknown, "redis token map not find") + return nil, utils.Wrap(constant.ErrTokenUnknown, "redis token map not find") } //func MakeTheTokenInvalid(currentClaims *Claims, platformClass string) (bool, error) { @@ -254,7 +254,7 @@ func VerifyToken(token, uid string) (bool, error) { } func WsVerifyToken(token, uid string, platformID string, operationID string) (bool, error, string) { - argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + platformID + argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + constant.PlatformIDToName(utils.StringToInt(platformID) claims, err := ParseToken(token, operationID) if err != nil { //if errors.Is(err, constant.ErrTokenUnknown) { @@ -275,7 +275,7 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo return false, utils.Wrap(constant.ErrTokenDifferentUserID, errMsg), errMsg } if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { - errMsg := " platform is not same to token platform " + argMsg + "claims platformID " + claims.Platform + errMsg := " platform is not same to token platform " + argMsg + " claims platformID " + claims.Platform return false, utils.Wrap(constant.ErrTokenDifferentPlatformID, errMsg), errMsg } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) From 9337d150b9cf721bbc9e1358e1aaf6c7ac85b4c7 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 20:25:34 +0800 Subject: [PATCH 649/752] Handling token exceptions --- pkg/common/token_verify/jwt_token.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 8785969c4..0d23cee31 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -254,7 +254,7 @@ func VerifyToken(token, uid string) (bool, error) { } func WsVerifyToken(token, uid string, platformID string, operationID string) (bool, error, string) { - argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + constant.PlatformIDToName(utils.StringToInt(platformID) + argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + constant.PlatformIDToName(utils.StringToInt(platformID)) claims, err := ParseToken(token, operationID) if err != nil { //if errors.Is(err, constant.ErrTokenUnknown) { From a62388759a2956cded17fdba65019cf4002f4920 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 21 Jun 2022 20:29:20 +0800 Subject: [PATCH 650/752] Handling token exceptions --- pkg/common/token_verify/jwt_token.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 0d23cee31..476c26a70 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -254,7 +254,7 @@ func VerifyToken(token, uid string) (bool, error) { } func WsVerifyToken(token, uid string, platformID string, operationID string) (bool, error, string) { - argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + constant.PlatformIDToName(utils.StringToInt(platformID)) + argMsg := "args: token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + constant.PlatformIDToName(utils.StringToInt(platformID)) claims, err := ParseToken(token, operationID) if err != nil { //if errors.Is(err, constant.ErrTokenUnknown) { @@ -271,11 +271,11 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo return false, utils.Wrap(err, errMsg), errMsg } if claims.UID != uid { - errMsg := " uid is not same to token uid " + " claims.UID " + claims.UID + argMsg + errMsg := " uid is not same to token uid " + argMsg + " claims.UID: " + claims.UID return false, utils.Wrap(constant.ErrTokenDifferentUserID, errMsg), errMsg } if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { - errMsg := " platform is not same to token platform " + argMsg + " claims platformID " + claims.Platform + errMsg := " platform is not same to token platform " + argMsg + " claims platformID: " + claims.Platform return false, utils.Wrap(constant.ErrTokenDifferentPlatformID, errMsg), errMsg } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) From af7dde61d6bf1b0d8b9260143d6ae2aeba1170c9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Jun 2022 21:13:27 +0800 Subject: [PATCH 651/752] model update --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index da5ec2127..e8db10c12 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -95,7 +95,7 @@ func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]i } func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - return d.rdb.HMSet(context.Background(), key, m).Err() + return d.rdb.HSet(context.Background(), key, m).Err() } func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) From 34fe9596a99459d4647a77ef09a8a61c8fad06b4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Jun 2022 21:22:35 +0800 Subject: [PATCH 652/752] test --- pkg/common/db/redisModel_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index f90cd99cd..cd82aca03 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -16,7 +16,8 @@ func Test_SetTokenMapByUidPid(t *testing.T) { m["test1"] = 1 m["test2"] = 2 m["2332"] = 4 - _ = DB.SetTokenMapByUidPid("1234", 2, m) + err := DB.SetTokenMapByUidPid("1234", 2, m) + assert.Nil(t, err) } func Test_GetTokenMapByUidPid(t *testing.T) { From 2f2f72fe4b431dba269bcc8da226e5e5192e02d6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Jun 2022 21:27:00 +0800 Subject: [PATCH 653/752] test --- pkg/common/db/newRedisModel.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index e8db10c12..f90ab6f2d 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -95,7 +95,11 @@ func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]i } func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - return d.rdb.HSet(context.Background(), key, m).Err() + mm := make(map[string]interface{}) + for k, v := range m { + mm[k] = v + } + return d.rdb.HSet(context.Background(), key, mm).Err() } func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) From 6b78b756382c0f97ad04a5f3cebf393f29491061 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 22 Jun 2022 19:48:35 +0800 Subject: [PATCH 654/752] fix bug --- internal/demo/register/onboarding_process.go | 26 +++++++++++--------- internal/demo/register/set_password.go | 2 +- internal/rpc/msg/send_msg.go | 18 ++++++++------ internal/rpc/user/user.go | 2 +- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 647fbe3c5..e7c4574e7 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -21,7 +21,7 @@ import ( "time" ) -func onboardingProcess(operationID, userID, userName string) { +func onboardingProcess(operationID, userID, userName, faceURL string) { if err := createOrganizationUser(operationID, userID, userName); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "createOrganizationUser failed", err.Error()) } @@ -40,7 +40,7 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) } log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) - joinGroups(operationID, userID, userName, groupIDList) + joinGroups(operationID, userID, userName, faceURL, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") oaNotification(operationID, userID) } @@ -157,7 +157,7 @@ func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error return getDepartmentParentIDListResp.GroupIDList, nil } -func joinGroups(operationID, userID, userName string, groupIDList []string) { +func joinGroups(operationID, userID, userName, faceURL string, groupIDList []string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupIDList) }() @@ -185,12 +185,12 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { log.NewError(req.OperationID, utils.GetSelfFuncName(), resp) continue } - onboardingProcessNotification(operationID, userID, groupID, userName) + onboardingProcessNotification(operationID, userID, groupID, userName, faceURL) } } // welcome user join department notification -func onboardingProcessNotification(operationID, userID, groupID, userName string) { +func onboardingProcessNotification(operationID, userID, groupID, userName, faceURL string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupID) }() @@ -204,13 +204,15 @@ func onboardingProcessNotification(operationID, userID, groupID, userName string //} welcomeString := fmt.Sprintf("欢迎%s加入部门", userName) notification := &msg.NotificationMsg{ - SendID: userID, - RecvID: groupID, - Content: []byte(welcomeString), - MsgFrom: constant.UserMsgType, - ContentType: constant.Text, - SessionType: constant.GroupChatType, - OperationID: operationID, + SendID: userID, + RecvID: groupID, + Content: []byte(welcomeString), + MsgFrom: constant.UserMsgType, + ContentType: constant.Text, + SessionType: constant.GroupChatType, + OperationID: operationID, + SenderNickname: userName, + SenderFaceURL: faceURL, } // notification user join group diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 545a489d3..1eb97ae37 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -96,7 +96,7 @@ func SetPassword(c *gin.Context) { } log.Info(params.OperationID, "end setPassword", account, params.Password) // demo onboarding - onboardingProcess(params.OperationID, userID, params.Nickname) + onboardingProcess(params.OperationID, userID, params.Nickname, params.FaceURL) c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken}) return } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 08d3006ca..118b7bd01 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -553,13 +553,15 @@ func modifyMessageByUserMessageReceiveOptoptimization(userID, sourceID string, s } type NotificationMsg struct { - SendID string - RecvID string - Content []byte // open_im_sdk.TipsComm - MsgFrom int32 - ContentType int32 - SessionType int32 - OperationID string + SendID string + RecvID string + Content []byte // open_im_sdk.TipsComm + MsgFrom int32 + ContentType int32 + SessionType int32 + OperationID string + SenderNickname string + SenderFaceURL string } func Notification(n *NotificationMsg) { @@ -579,6 +581,8 @@ func Notification(n *NotificationMsg) { msg.CreateTime = utils.GetCurrentTimestampByMill() msg.ClientMsgID = utils.GetMsgID(n.SendID) msg.Options = make(map[string]bool, 7) + msg.SenderNickname = n.SenderNickname + msg.SenderFaceURL = n.SenderFaceURL switch n.SessionType { case constant.GroupChatType, constant.SuperGroupChatType: msg.RecvID = "" diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index fa733cbe4..0d33301bf 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -284,7 +284,7 @@ func (s *userServer) SetRecvMsgOpt(ctx context.Context, req *pbUser.SetRecvMsgOp stringList := strings.Split(req.ConversationID, "_") if len(stringList) > 1 { switch stringList[0] { - case "single_": + case "single": conversation.UserID = stringList[1] conversation.ConversationType = constant.SingleChatType case "group": From 2372340e0d2a0cb1f936166f6e7a75ec7f73f9c9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 22 Jun 2022 20:13:26 +0800 Subject: [PATCH 655/752] fix bug --- internal/demo/register/onboarding_process.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index e7c4574e7..f96312b37 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -22,6 +22,7 @@ import ( ) func onboardingProcess(operationID, userID, userName, faceURL string) { + log.NewInfo(operationID, utils.GetSelfFuncName(), userName, userID, faceURL) if err := createOrganizationUser(operationID, userID, userName); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "createOrganizationUser failed", err.Error()) } @@ -39,7 +40,6 @@ func onboardingProcess(operationID, userID, userName, faceURL string) { if err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) } - log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) joinGroups(operationID, userID, userName, faceURL, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") oaNotification(operationID, userID) From bb8dcd8b61fc133bfad3ee216db6cde13089cc9e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 22 Jun 2022 20:19:37 +0800 Subject: [PATCH 656/752] fix bug --- internal/demo/register/set_password.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 1eb97ae37..41a6bd155 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -87,7 +87,7 @@ func SetPassword(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": "register failed: " + openIMRegisterResp.ErrMsg}) return } - log.Info(params.OperationID, "begin store mysql", account, params.Password) + log.Info(params.OperationID, "begin store mysql", account, params.Password, params.FaceURL, params.Nickname) err = im_mysql_model.SetPassword(account, params.Password, params.Ex, userID) if err != nil { log.NewError(params.OperationID, "set phone number password error", account, "err", err.Error()) From c4ea10d0af46448f42f71232878840855f400537 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 22 Jun 2022 20:23:04 +0800 Subject: [PATCH 657/752] fix bug --- internal/demo/register/set_password.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 41a6bd155..9e954f63a 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -87,7 +87,7 @@ func SetPassword(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": "register failed: " + openIMRegisterResp.ErrMsg}) return } - log.Info(params.OperationID, "begin store mysql", account, params.Password, params.FaceURL, params.Nickname) + log.Info(params.OperationID, "begin store mysql", account, params.Password, "info", params.FaceURL, params.Nickname) err = im_mysql_model.SetPassword(account, params.Password, params.Ex, userID) if err != nil { log.NewError(params.OperationID, "set phone number password error", account, "err", err.Error()) From 218340e13839188f40da84b7848e44d4c0cc28a5 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Thu, 23 Jun 2022 09:24:05 +0800 Subject: [PATCH 658/752] Rpc Register IP --- internal/msg_gateway/gate/rpc_server.go | 4 +++- internal/push/logic/push_rpc_server.go | 2 +- internal/rpc/admin_cms/admin_cms.go | 2 +- internal/rpc/auth/auth.go | 3 ++- internal/rpc/cache/cache.go | 2 +- internal/rpc/conversation/conversaion.go | 2 +- internal/rpc/group/group.go | 2 +- internal/rpc/message_cms/message_cms.go | 2 +- internal/rpc/msg/rpcChat.go | 2 +- internal/rpc/office/office.go | 2 +- internal/rpc/organization/organization.go | 2 +- internal/rpc/statistics/statistics.go | 2 +- internal/rpc/user/user.go | 2 +- 13 files changed, 16 insertions(+), 13 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 6c7ec7809..c8eb15538 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -55,7 +55,7 @@ func (r *RPCServer) run() { defer srv.GracefulStop() pbRelay.RegisterOnlineMessageRelayServiceServer(srv, r) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { @@ -291,9 +291,11 @@ func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOffl for _, v := range req.KickUserIDList { oldConnMap := ws.getUserAllCons(v) if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] + log.NewWarn(req.OperationID, "send kick msg, close connection ", req.PlatformID, v) ws.sendKickMsg(conn, &UserConn{}) conn.Close() } + log.NewWarn(req.OperationID, "SetTokenKicked ", v, req.PlatformID, req.OperationID) SetTokenKicked(v, int(req.PlatformID), req.OperationID) } return &pbRelay.KickUserOfflineResp{}, nil diff --git a/internal/push/logic/push_rpc_server.go b/internal/push/logic/push_rpc_server.go index 8fbf4e7d1..08939ef1a 100644 --- a/internal/push/logic/push_rpc_server.go +++ b/internal/push/logic/push_rpc_server.go @@ -44,7 +44,7 @@ func (r *RPCServer) run() { srv := grpc.NewServer() defer srv.GracefulStop() pbPush.RegisterPushMsgServiceServer(srv, r) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/admin_cms/admin_cms.go b/internal/rpc/admin_cms/admin_cms.go index ed744b312..4a97f94e1 100644 --- a/internal/rpc/admin_cms/admin_cms.go +++ b/internal/rpc/admin_cms/admin_cms.go @@ -56,7 +56,7 @@ func (s *adminCMSServer) Run() { defer srv.GracefulStop() //Service registers with etcd pbAdminCMS.RegisterAdminCMSServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 38a27dfcf..31c0cd62b 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -134,7 +134,7 @@ func (rpc *rpcAuth) Run() { //service registers with etcd pbAuth.RegisterAuthServer(srv, rpc) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { @@ -142,6 +142,7 @@ func (rpc *rpcAuth) Run() { } } log.NewInfo("", "rpcRegisterIP", rpcRegisterIP) + err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10) if err != nil { log.NewError(operationID, "RegisterEtcd failed ", err.Error(), diff --git a/internal/rpc/cache/cache.go b/internal/rpc/cache/cache.go index 2d58d190a..79d86f2b8 100644 --- a/internal/rpc/cache/cache.go +++ b/internal/rpc/cache/cache.go @@ -65,7 +65,7 @@ func (s *cacheServer) Run() { defer srv.GracefulStop() pbCache.RegisterCacheServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index 3c68e5c46..9ea7efcc0 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -157,7 +157,7 @@ func (rpc *rpcConversation) Run() { //service registers with etcd pbConversation.RegisterConversationServer(srv, rpc) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 946002363..63fc077d1 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -66,7 +66,7 @@ func (s *groupServer) Run() { pbGroup.RegisterGroupServer(srv, s) rpcRegisterIP := config.Config.RpcRegisterIP - if rpcRegisterIP == "" { + if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { log.Error("", "GetLocalIP failed ", err.Error()) diff --git a/internal/rpc/message_cms/message_cms.go b/internal/rpc/message_cms/message_cms.go index 4f983e787..44fdca1e4 100644 --- a/internal/rpc/message_cms/message_cms.go +++ b/internal/rpc/message_cms/message_cms.go @@ -63,7 +63,7 @@ func (s *messageCMSServer) Run() { defer srv.GracefulStop() //Service registers with etcd pbMessageCMS.RegisterMessageCMSServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index cc65a4612..e7ae283ab 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -64,7 +64,7 @@ func (rpc *rpcChat) Run() { srv := grpc.NewServer() defer srv.GracefulStop() - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP pbChat.RegisterChatServer(srv, rpc) if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index 71a6db68b..ace207322 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -71,7 +71,7 @@ func (s *officeServer) Run() { defer srv.GracefulStop() //Service registers with etcd pbOffice.RegisterOfficeServiceServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 81659ef60..db423caa0 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -61,7 +61,7 @@ func (s *organizationServer) Run() { defer srv.GracefulStop() //Service registers with etcd rpc.RegisterOrganizationServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/statistics/statistics.go b/internal/rpc/statistics/statistics.go index b1811cb48..920fc9d73 100644 --- a/internal/rpc/statistics/statistics.go +++ b/internal/rpc/statistics/statistics.go @@ -67,7 +67,7 @@ func (s *statisticsServer) Run() { defer srv.GracefulStop() //Service registers with etcd pbStatistics.RegisterUserServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index fa733cbe4..d6feaff9a 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -62,7 +62,7 @@ func (s *userServer) Run() { defer srv.GracefulStop() //Service registers with etcd pbUser.RegisterUserServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { From ddddbf6987713e39b128e1cf1dfd49782ac56e1c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Jun 2022 10:18:44 +0800 Subject: [PATCH 659/752] remove old redis module --- .../db/{newRedisModel.go => RedisModel.go} | 19 + pkg/common/db/redisModel.go | 334 ------------------ 2 files changed, 19 insertions(+), 334 deletions(-) rename pkg/common/db/{newRedisModel.go => RedisModel.go} (94%) delete mode 100644 pkg/common/db/redisModel.go diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/RedisModel.go similarity index 94% rename from pkg/common/db/newRedisModel.go rename to pkg/common/db/RedisModel.go index f90ab6f2d..c96fe08b4 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/RedisModel.go @@ -18,6 +18,25 @@ import ( "strconv" "time" ) +const ( + accountTempCode = "ACCOUNT_TEMP_CODE" + resetPwdTempCode = "RESET_PWD_TEMP_CODE" + userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq + appleDeviceToken = "DEVICE_TOKEN" + userMinSeq = "REDIS_USER_MIN_SEQ:" + uidPidToken = "UID_PID_TOKEN_STATUS:" + conversationReceiveMessageOpt = "CON_RECV_MSG_OPT:" + getuiToken = "GETUI_TOKEN" + userInfoCache = "USER_INFO_CACHE:" + friendRelationCache = "FRIEND_RELATION_CACHE:" + blackListCache = "BLACK_LIST_CACHE:" + groupCache = "GROUP_CACHE:" + messageCache = "MESSAGE_CACHE:" + SignalCache = "SIGNAL_CACHE:" + SignalListCache = "SIGNAL_LIST_CACHE:" + GlobalMsgRecvOpt = "GLOBAL_MSG_RECV_OPT" +) + //func (d * DataBases)pubMessage(channel, msg string) { // d.rdb.Publish(context.Background(),channel,msg) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go deleted file mode 100644 index c986d408f..000000000 --- a/pkg/common/db/redisModel.go +++ /dev/null @@ -1,334 +0,0 @@ -package db - -const ( - accountTempCode = "ACCOUNT_TEMP_CODE" - resetPwdTempCode = "RESET_PWD_TEMP_CODE" - userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq - appleDeviceToken = "DEVICE_TOKEN" - userMinSeq = "REDIS_USER_MIN_SEQ:" - uidPidToken = "UID_PID_TOKEN_STATUS:" - conversationReceiveMessageOpt = "CON_RECV_MSG_OPT:" - getuiToken = "GETUI_TOKEN" - userInfoCache = "USER_INFO_CACHE:" - friendRelationCache = "FRIEND_RELATION_CACHE:" - blackListCache = "BLACK_LIST_CACHE:" - groupCache = "GROUP_CACHE:" - messageCache = "MESSAGE_CACHE:" - SignalCache = "SIGNAL_CACHE:" - SignalListCache = "SIGNAL_LIST_CACHE:" - GlobalMsgRecvOpt = "GLOBAL_MSG_RECV_OPT" -) - -//func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { -// con := d.redisPool.Get() -// if err := con.Err(); err != nil { -// log2.Error("", "", "redis cmd = %v, err = %v", cmd, err) -// return nil, err -// } -// defer con.Close() -// -// params := make([]interface{}, 0) -// params = append(params, key) -// -// if len(args) > 0 { -// for _, v := range args { -// params = append(params, v) -// } -// } -// -// return con.Do(cmd, params...) -//} - -//func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { -// key := accountTempCode + account -// return redis.Bool(d.Exec("EXISTS", key)) -//} -//func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { -// key := accountTempCode + account -// _, err = d.Exec("SET", key, code, "ex", ttl) -// return err -//} -//func (d *DataBases) GetAccountCode(account string) (string, error) { -// key := accountTempCode + account -// return redis.String(d.Exec("GET", key)) -//} -// -////Perform seq auto-increment operation of user messages -//func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { -// key := userIncrSeq + uid -// return redis.Uint64(d.Exec("INCR", key)) -//} -// -////Get the largest Seq -//func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { -// key := userIncrSeq + uid -// return redis.Uint64(d.Exec("GET", key)) -//} -// -////set the largest Seq -//func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { -// key := userIncrSeq + uid -// _, err := d.Exec("SET", key, maxSeq) -// return err -//} -// -////Set the user's minimum seq -//func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { -// key := userMinSeq + uid -// _, err = d.Exec("SET", key, minSeq) -// return err -//} -// -////Get the smallest Seq -//func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { -// key := userMinSeq + uid -// return redis.Uint64(d.Exec("GET", key)) -//} -// -// -////Store userid and platform class to redis -//func (d *DataBases) AddTokenFlag(userID string, platformID int, token string, flag int) error { -// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) -// log2.NewDebug("", "add token key is ", key) -// _, err1 := d.Exec("HSet", key, token, flag) -// return err1 -//} -// -//func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) { -// key := uidPidToken + userID + ":" + platformID -// log2.NewDebug("", "get token key is ", key) -// return redis.IntMap(d.Exec("HGETALL", key)) -//} -//func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { -// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) -// _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) -// return err -//} -//func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { -// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) -// _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) -// return err -//} -// -//func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { -// key := conversationReceiveMessageOpt + userID -// _, err := d.Exec("HSet", key, conversationID, opt) -// return err -//} -// -//func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { -// key := conversationReceiveMessageOpt + userID -// return redis.Int(d.Exec("HGet", key, conversationID)) -//} -//func (d *DataBases) GetMultiConversationMsgOpt(userID string, conversationIDs []string) (m map[string]int, err error) { -// m = make(map[string]int) -// key := conversationReceiveMessageOpt + userID -// i, err := redis.Ints(d.Exec("hmget", key, redis.Args{}.Add().AddFlat(conversationIDs)...)) -// if err != nil { -// return m, err -// } -// for k, v := range conversationIDs { -// m[v] = i[k] -// } -// return m, nil -// -//} - -//func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { -// _, err := d.Exec("SET", getuiToken, token, "ex", expireTime) -// return err -//} -// -//func (d *DataBases) GetGetuiToken() (string, error) { -// result, err := redis.String(d.Exec("GET", getuiToken)) -// return result, err -//} - -func (d *DataBases) SearchContentType() { - -} - -//func (d *DataBases) SetUserInfoToCache(userID string, m map[string]interface{}) error { -// _, err := d.Exec("hmset", userInfoCache+userID, redis.Args{}.Add().AddFlat(m)...) -// return err -//} -// -//func (d *DataBases) GetUserInfoFromCache(userID string) (*pbCommon.UserInfo, error) { -// result, err := redis.String(d.Exec("hgetall", userInfoCache+userID)) -// log2.NewInfo("", result) -// if err != nil { -// return nil, err -// } -// userInfo := &pbCommon.UserInfo{} -// err = json.Unmarshal([]byte(result), userInfo) -// return userInfo, err -//} - -//func (d *DataBases) AddFriendToCache(userID string, friendIDList ...string) error { -// var IDList []interface{} -// for _, id := range friendIDList { -// IDList = append(IDList, id) -// } -// _, err := d.Exec("SADD", friendRelationCache+userID, IDList...) -// return err -//} - -//func (d *DataBases) ReduceFriendToCache(userID string, friendIDList ...string) error { -// var IDList []interface{} -// for _, id := range friendIDList { -// IDList = append(IDList, id) -// } -// _, err := d.Exec("SREM", friendRelationCache+userID, IDList...) -// return err -//} - -//func (d *DataBases) GetFriendIDListFromCache(userID string) ([]string, error) { -// result, err := redis.Strings(d.Exec("SMEMBERS", friendRelationCache+userID)) -// return result, err -//} -// -//func (d *DataBases) AddBlackUserToCache(userID string, blackList ...string) error { -// var IDList []interface{} -// for _, id := range blackList { -// IDList = append(IDList, id) -// } -// _, err := d.Exec("SADD", blackListCache+userID, IDList...) -// return err -//} - -//func (d *DataBases) ReduceBlackUserFromCache(userID string, blackList ...string) error { -// var IDList []interface{} -// for _, id := range blackList { -// IDList = append(IDList, id) -// } -// _, err := d.Exec("SREM", blackListCache+userID, IDList...) -// return err -//} - -//func (d *DataBases) GetBlackListFromCache(userID string) ([]string, error) { -// result, err := redis.Strings(d.Exec("SMEMBERS", blackListCache+userID)) -// return result, err -//} - -//func (d *DataBases) AddGroupMemberToCache(groupID string, userIDList ...string) error { -// var IDList []interface{} -// for _, id := range userIDList { -// IDList = append(IDList, id) -// } -// _, err := d.Exec("SADD", groupCache+groupID, IDList...) -// return err -//} - -//func (d *DataBases) ReduceGroupMemberFromCache(groupID string, userIDList ...string) error { -// var IDList []interface{} -// for _, id := range userIDList { -// IDList = append(IDList, id) -// } -// _, err := d.Exec("SREM", groupCache+groupID, IDList...) -// return err -//} - -//func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, error) { -// result, err := redis.Strings(d.Exec("SMEMBERS", groupCache+groupID)) -// return result, err -//} - -//func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { -// for _, v := range seqList { -// //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 -// key := messageCache + userID + "_" + strconv.Itoa(int(v)) -// -// result, err := redis.String(d.Exec("GET", key)) -// if err != nil { -// errResult = err -// failedSeqList = append(failedSeqList, v) -// log2.NewWarn(operationID, "redis get message error:", err.Error(), v) -// } else { -// msg := pbCommon.MsgData{} -// err = jsonpb.UnmarshalString(result, &msg) -// if err != nil { -// errResult = err -// failedSeqList = append(failedSeqList, v) -// log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) -// } else { -// log2.NewDebug(operationID, "redis get msg is ", msg.String()) -// seqMsg = append(seqMsg, &msg) -// } -// -// } -// } -// return seqMsg, failedSeqList, errResult -//} - -//func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { -// var failedList []pbChat.MsgDataToMQ -// for _, msg := range msgList { -// key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) -// s, err := utils.Pb2String(msg.MsgData) -// if err != nil { -// log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) -// continue -// } -// log2.NewDebug(operationID, "convert string is ", s) -// _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) -// if err != nil { -// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s) -// failedList = append(failedList, *msg) -// } -// } -// if len(failedList) != 0 { -// return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) -// } -// return nil -//} - -//func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { -// for _, seq := range seqList { -// key := messageCache + uid + "_" + strconv.Itoa(int(seq)) -// result, err := redis.String(d.Exec("GET", key)) -// if err != nil { -// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key) -// continue -// } -// log2.Debug(operationID, utils.GetSelfFuncName(), "del result", result) -// var msg pbCommon.MsgData -// err = utils.String2Pb(result, &msg) -// log2.NewDebug(operationID, utils.GetSelfFuncName(), "msg", msg) -// if err != nil { -// log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) -// continue -// } -// msg.Status = constant.MsgDeleted -// s, err := utils.Pb2String(&msg) -// if err != nil { -// log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) -// continue -// } -// _, err = d.Exec("SET", key, s) -// if err != nil { -// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, msg, s) -// } -// } -//} - -//func (d *DataBases) CacheSignalInfo(msg *pbCommon.MsgData) error { -// key := SignalCache + msg.ClientMsgID -// _, err := d.Exec("SET", key, msg.Content, "ex", config.Config.Rtc.SignalTimeout) -// return err -//} -// -//func (d *DataBases) GetSignalInfoFromCache(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { -// key := SignalCache + clientMsgID -// result, err := redis.Bytes(d.Exec("GET", key)) -// log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result, string(result)) -// if err != nil { -// return nil, err -// } -// req := &pbRtc.SignalReq{} -// if err = proto.Unmarshal(result, req); err != nil { -// return nil, err -// } -// req2 := req.Payload.(*pbRtc.SignalReq_Invite) -// invitationInfo = req2.Invite -// return invitationInfo, err -//} From b7f257daf1ed5a46a49b57d3b6b374334b97106b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Jun 2022 11:06:17 +0800 Subject: [PATCH 660/752] compose file update --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 4cc16b977..0b159bfd8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -20,7 +20,7 @@ services: ports: - 37017:27017 container_name: mongo - command: --wiredTigerCacheSizeGB 5 + command: --wiredTigerCacheSizeGB 1 volumes: - ./components/mongodb/data/db:/data/db - ./components/mongodb/data/logs:/data/logs @@ -45,7 +45,7 @@ services: volumes: - ./components/redis/data:/data #redis config file - #- ./components/redis/config/redis.conf:/usr/local/redis/config/redis.conf + - ./components/redis/config/redis.conf:/usr/local/redis/config/redis.conf environment: TZ: Asia/Shanghai restart: always From 5b8ef3a17c1735db1ec8343714eb66872a292b26 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Thu, 23 Jun 2022 18:56:52 +0800 Subject: [PATCH 661/752] verification gor joining group chat --- internal/api/group/group.go | 4 + internal/rpc/group/group.go | 119 ++++- internal/rpc/msg/group_notification.go | 21 +- pkg/base_info/group_api_struct.go | 16 +- pkg/common/constant/constant.go | 6 + pkg/common/db/model_struct.go | 21 +- pkg/proto/sdk_ws/ws.pb.go | 612 +++++++++++++------------ pkg/proto/sdk_ws/ws.proto | 3 + 8 files changed, 468 insertions(+), 334 deletions(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index d9b1bf9ff..d8bf2f5aa 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -606,6 +606,10 @@ func SetGroupInfo(c *gin.Context) { utils.CopyStructFields(req.GroupInfo, ¶ms) req.OperationID = params.OperationID + if params.NeedVerification != nil { + req.GroupInfo.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification} + } + var ok bool var errInfo string ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 63fc077d1..eec4a71b4 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -258,7 +258,6 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (*pbGroup.InviteUserToGroupResp, error) { log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String()) - if !imdb.IsExistGroupMember(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { log.NewError(req.OperationID, "no permission InviteUserToGroup ", req.GroupID, req.OpUserID) return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil @@ -273,12 +272,45 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite errMsg := " group status is dismissed " return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrStatus.ErrCode, ErrMsg: errMsg}, nil } + var resp pbGroup.InviteUserToGroupResp + if groupInfo.NeedVerification == constant.AllNeedVerification && + !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { + var resp pbGroup.InviteUserToGroupResp + joinReq := pbGroup.JoinGroupReq{} + for _, v := range req.InvitedUserIDList { + var groupRequest db.GroupRequest + groupRequest.UserID = v + groupRequest.GroupID = req.GroupID + err = imdb.InsertIntoGroupRequest(groupRequest) + if err != nil { + var resultNode pbGroup.Id2Result + resultNode.Result = -1 + resultNode.UserID = v + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + + continue + log.NewError(req.OperationID, "InsertIntoGroupRequest failed ", err.Error(), groupRequest) + // return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } else { + var resultNode pbGroup.Id2Result + resultNode.Result = 0 + resultNode.UserID = v + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + joinReq.GroupID = req.GroupID + joinReq.OperationID = req.OperationID + joinReq.OpUserID = v + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + chat.JoinGroupApplicationNotification(&joinReq) + } + } + log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp) + return &resp, nil + } // //from User: invite: applicant //to user: invite: invited var okUserIDList []string if groupInfo.GroupType != constant.SuperGroup { - var resp pbGroup.InviteUserToGroupResp for _, v := range req.InvitedUserIDList { var resultNode pbGroup.Id2Result resultNode.UserID = v @@ -416,8 +448,8 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite }() } - log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") - return &pbGroup.InviteUserToGroupResp{}, nil + log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp) + return &resp, nil } func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) { @@ -836,26 +868,70 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrStatus.ErrCode, ErrMsg: errMsg}}, nil } + if groupInfo.NeedVerification == constant.Directly { + us, err := imdb.GetUserByUserID(req.OpUserID) + if err != nil { + log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OpUserID) + return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + //to group member + groupMember := db.GroupMember{GroupID: req.GroupID, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} + utils.CopyStructFields(&groupMember, us) + err = imdb.InsertIntoGroupMember(groupMember) + if err != nil { + log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) + return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + if groupInfo.GroupType != constant.SuperGroup { + addGroupMemberToCacheReq := &pbCache.AddGroupMemberToCacheReq{ + UserIDList: []string{req.OpUserID}, + GroupID: req.GroupID, + OperationID: req.OperationID, + } + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: constant.ErrInternal.ErrMsg}}, nil + } + cacheClient := pbCache.NewCacheClient(etcdConn) + cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) + if err != nil { + log.NewError(req.OperationID, "AddGroupMemberToCache rpc call failed ", err.Error()) + return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(req.OperationID, "AddGroupMemberToCache rpc logic call failed ", cacheResp.String()) + return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + chat.MemberEnterDirectlyNotification(req.GroupID, req.OpUserID, req.OperationID) + log.NewInfo(req.OperationID, "JoinGroup rpc return ") + return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil + } else { + log.Error(req.OperationID, "JoinGroup rpc failed, group type: ", groupInfo.GroupType) + return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}}, nil + } + } + var groupRequest db.GroupRequest groupRequest.UserID = req.OpUserID groupRequest.ReqMsg = req.ReqMessage groupRequest.GroupID = req.GroupID - err = imdb.InsertIntoGroupRequest(groupRequest) if err != nil { - log.NewError(req.OperationID, "UpdateGroupRequest ", err.Error(), groupRequest) + log.NewError(req.OperationID, "InsertIntoGroupRequest failed ", err.Error(), groupRequest) return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - _, err = imdb.GetGroupMemberListByGroupIDAndRoleLevel(req.GroupID, constant.GroupOwner) - if err != nil { - log.NewError(req.OperationID, "GetGroupMemberListByGroupIDAndRoleLevel failed ", err.Error(), req.GroupID, constant.GroupOwner) - return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil - } + // + //_, err = imdb.GetGroupMemberListByGroupIDAndRoleLevel(req.GroupID, constant.GroupOwner) + //if err != nil { + // log.NewError(req.OperationID, "GetGroupMemberListByGroupIDAndRoleLevel failed ", err.Error(), req.GroupID, constant.GroupOwner) + // return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil + //} chat.JoinGroupApplicationNotification(req) - - log.NewInfo(req.OperationID, "ReceiveJoinApplicationNotification rpc return ") + log.NewInfo(req.OperationID, "JoinGroup rpc return ") return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil } @@ -1003,6 +1079,21 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf changedType = changedType | (1 << 3) faceURL = req.GroupInfo.FaceURL } + + if req.GroupInfo.NeedVerification != nil { + changedType = changedType | (1 << 4) + m := make(map[string]interface{}) + m["need_verification"] = req.GroupInfo.NeedVerification.Value + if err := imdb.UpdateGroupInfoDefaultZero(req.GroupInfo.GroupID, m); err != nil { + log.NewError(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), m) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB) + } + } + + // + //if req.RoleLevel != nil { + // + //} //only administrators can set group information var groupInfo db.Group utils.CopyStructFields(&groupInfo, req.GroupInfo) @@ -1013,7 +1104,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf } log.NewInfo(req.OperationID, "SetGroupInfo rpc return ", pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}) if changedType != 0 { - chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL) + chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL, req.GroupInfo.NeedVerification) } if req.GroupInfo.Notification != "" { //get group member user id diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 258764485..002c17db9 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -12,6 +12,7 @@ import ( "Open_IM/pkg/utils" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" + "google.golang.org/protobuf/types/known/wrapperspb" ) //message GroupCreatedTips{ @@ -231,7 +232,7 @@ func GroupCreatedNotification(operationID, opUserID, groupID string, initMemberL // notification := "" // introduction := "" // faceURL := "" -func GroupInfoSetNotification(operationID, opUserID, groupID string, groupName, notification, introduction, faceURL string) { +func GroupInfoSetNotification(operationID, opUserID, groupID string, groupName, notification, introduction, faceURL string, needVerification *wrapperspb.Int32Value) { GroupInfoChangedTips := open_im_sdk.GroupInfoSetTips{Group: &open_im_sdk.GroupInfo{}, OpUser: &open_im_sdk.GroupMemberFullInfo{}} if err := setGroupInfo(groupID, GroupInfoChangedTips.Group); err != nil { log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID) @@ -241,6 +242,8 @@ func GroupInfoSetNotification(operationID, opUserID, groupID string, groupName, GroupInfoChangedTips.Group.Notification = notification GroupInfoChangedTips.Group.Introduction = introduction GroupInfoChangedTips.Group.FaceURL = faceURL + GroupInfoChangedTips.Group.NeedVerification = needVerification + if err := setOpUserInfo(opUserID, groupID, GroupInfoChangedTips.OpUser); err != nil { log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID) return @@ -553,9 +556,21 @@ func MemberEnterNotification(req *pbGroup.GroupApplicationResponseReq) { return } if err := setGroupMemberInfo(req.GroupID, req.FromUserID, MemberEnterTips.EntrantUser); err != nil { - log.Error(req.OperationID, "setOpUserInfo failed ", err.Error(), req.OpUserID, req.GroupID, MemberEnterTips.EntrantUser) + log.Error(req.OperationID, "setGroupMemberInfo failed ", err.Error(), req.OpUserID, req.GroupID, MemberEnterTips.EntrantUser) return } groupNotification(constant.MemberEnterNotification, &MemberEnterTips, req.OpUserID, req.GroupID, "", req.OperationID) - +} + +func MemberEnterDirectlyNotification(groupID string, entrantUserID string, operationID string) { + MemberEnterTips := open_im_sdk.MemberEnterTips{Group: &open_im_sdk.GroupInfo{}, EntrantUser: &open_im_sdk.GroupMemberFullInfo{}} + if err := setGroupInfo(groupID, MemberEnterTips.Group); err != nil { + log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID, MemberEnterTips.Group) + return + } + if err := setGroupMemberInfo(groupID, entrantUserID, MemberEnterTips.EntrantUser); err != nil { + log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, entrantUserID, MemberEnterTips.EntrantUser) + return + } + groupNotification(constant.MemberEnterNotification, &MemberEnterTips, entrantUserID, groupID, "", operationID) } diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index e00f6daf0..1053bff52 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -157,14 +157,16 @@ type QuitGroupResp struct { } type SetGroupInfoReq struct { - GroupID string `json:"groupID" binding:"required"` - GroupName string `json:"groupName"` - Notification string `json:"notification"` - Introduction string `json:"introduction"` - FaceURL string `json:"faceURL"` - Ex string `json:"ex"` - OperationID string `json:"operationID" binding:"required"` + GroupID string `json:"groupID" binding:"required"` + GroupName string `json:"groupName"` + Notification string `json:"notification"` + Introduction string `json:"introduction"` + FaceURL string `json:"faceURL"` + Ex string `json:"ex"` + OperationID string `json:"operationID" binding:"required"` + NeedVerification *int32 `json:"needVerification" binding "oneof=0 1"` } + type SetGroupInfoResp struct { CommResp } diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 5f95063a9..fdb1dcb83 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -267,6 +267,12 @@ const ( ReliableNotificationMsg = 3 ) +const ( + ApplyNeedVerificationInviteDirectly = 0 // 申请需要同意 邀请直接进 + AllNeedVerification = 1 //所有人进群需要验证,除了群主管理员邀请进群 + Directly = 2 //直接进群 +) + const FriendAcceptTip = "You have successfully become friends, so start chatting" func GroupIsBanChat(status int32) bool { diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 7bb337775..e3c86ad27 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -76,16 +76,17 @@ func (FriendRequest) TableName() string { type Group struct { //`json:"operationID" binding:"required"` //`protobuf:"bytes,1,opt,name=GroupID" json:"GroupID,omitempty"` `json:"operationID" binding:"required"` - GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"` - GroupName string `gorm:"column:name;size:255" json:"groupName"` - Notification string `gorm:"column:notification;size:255" json:"notification"` - Introduction string `gorm:"column:introduction;size:255" json:"introduction"` - FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"` - CreateTime time.Time `gorm:"column:create_time"` - Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"` - Status int32 `gorm:"column:status"` - CreatorUserID string `gorm:"column:creator_user_id;size:64"` - GroupType int32 `gorm:"column:group_type"` + GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"` + GroupName string `gorm:"column:name;size:255" json:"groupName"` + Notification string `gorm:"column:notification;size:255" json:"notification"` + Introduction string `gorm:"column:introduction;size:255" json:"introduction"` + FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"` + CreateTime time.Time `gorm:"column:create_time"` + Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"` + Status int32 `gorm:"column:status"` + CreatorUserID string `gorm:"column:creator_user_id;size:64"` + GroupType int32 `gorm:"column:group_type"` + NeedVerification int32 `gorm:"column:need_verification"` } //message GroupMemberFullInfo { diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index f508ee69b..bd8209463 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -6,6 +6,7 @@ package server_api_params // import "Open_IM/pkg/proto/sdk_ws" import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" +import wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -19,28 +20,29 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type GroupInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` - Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` - Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` - FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` - OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` - CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` - GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` + Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` + Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` + FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` + OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` + CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` + MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` + Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` + Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` + CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` + GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` + NeedVerification *wrapperspb.Int32Value `protobuf:"bytes,13,opt,name=needVerification" json:"needVerification,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{0} + return fileDescriptor_ws_b2c8e6212334433f, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -144,6 +146,13 @@ func (m *GroupInfo) GetGroupType() int32 { return 0 } +func (m *GroupInfo) GetNeedVerification() *wrapperspb.Int32Value { + if m != nil { + return m.NeedVerification + } + return nil +} + type GroupMemberFullInfo struct { GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` @@ -165,7 +174,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{1} + return fileDescriptor_ws_b2c8e6212334433f, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +286,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{2} + return fileDescriptor_ws_b2c8e6212334433f, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -353,7 +362,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{3} + return fileDescriptor_ws_b2c8e6212334433f, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -467,7 +476,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{4} + return fileDescriptor_ws_b2c8e6212334433f, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -552,7 +561,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{5} + return fileDescriptor_ws_b2c8e6212334433f, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -633,7 +642,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{6} + return fileDescriptor_ws_b2c8e6212334433f, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -741,7 +750,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{7} + return fileDescriptor_ws_b2c8e6212334433f, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -886,7 +895,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{8} + return fileDescriptor_ws_b2c8e6212334433f, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -997,7 +1006,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{9} + return fileDescriptor_ws_b2c8e6212334433f, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1111,7 +1120,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{10} + return fileDescriptor_ws_b2c8e6212334433f, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1192,7 +1201,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{11} + return fileDescriptor_ws_b2c8e6212334433f, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1238,7 +1247,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{12} + return fileDescriptor_ws_b2c8e6212334433f, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1287,7 +1296,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{13} + return fileDescriptor_ws_b2c8e6212334433f, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1346,7 +1355,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{14} + return fileDescriptor_ws_b2c8e6212334433f, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1384,7 +1393,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{15} + return fileDescriptor_ws_b2c8e6212334433f, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1425,7 +1434,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{16} + return fileDescriptor_ws_b2c8e6212334433f, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1486,7 +1495,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{17} + return fileDescriptor_ws_b2c8e6212334433f, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1539,7 +1548,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{18} + return fileDescriptor_ws_b2c8e6212334433f, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1588,7 +1597,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{19} + return fileDescriptor_ws_b2c8e6212334433f, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1656,7 +1665,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{20} + return fileDescriptor_ws_b2c8e6212334433f, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1727,7 +1736,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{21} + return fileDescriptor_ws_b2c8e6212334433f, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1902,7 +1911,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{22} + return fileDescriptor_ws_b2c8e6212334433f, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1970,7 +1979,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{23} + return fileDescriptor_ws_b2c8e6212334433f, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2027,7 +2036,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{24} + return fileDescriptor_ws_b2c8e6212334433f, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2096,7 +2105,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{25} + return fileDescriptor_ws_b2c8e6212334433f, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2151,7 +2160,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{26} + return fileDescriptor_ws_b2c8e6212334433f, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2207,7 +2216,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{27} + return fileDescriptor_ws_b2c8e6212334433f, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2262,7 +2271,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{28} + return fileDescriptor_ws_b2c8e6212334433f, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2317,7 +2326,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{29} + return fileDescriptor_ws_b2c8e6212334433f, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2373,7 +2382,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{30} + return fileDescriptor_ws_b2c8e6212334433f, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2436,7 +2445,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{31} + return fileDescriptor_ws_b2c8e6212334433f, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2499,7 +2508,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{32} + return fileDescriptor_ws_b2c8e6212334433f, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2561,7 +2570,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{33} + return fileDescriptor_ws_b2c8e6212334433f, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2615,7 +2624,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{34} + return fileDescriptor_ws_b2c8e6212334433f, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2671,7 +2680,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{35} + return fileDescriptor_ws_b2c8e6212334433f, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2740,7 +2749,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{36} + return fileDescriptor_ws_b2c8e6212334433f, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2801,7 +2810,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{37} + return fileDescriptor_ws_b2c8e6212334433f, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2855,7 +2864,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{38} + return fileDescriptor_ws_b2c8e6212334433f, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2910,7 +2919,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{39} + return fileDescriptor_ws_b2c8e6212334433f, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2970,7 +2979,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{40} + return fileDescriptor_ws_b2c8e6212334433f, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3017,7 +3026,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{41} + return fileDescriptor_ws_b2c8e6212334433f, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3070,7 +3079,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{42} + return fileDescriptor_ws_b2c8e6212334433f, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3116,7 +3125,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{43} + return fileDescriptor_ws_b2c8e6212334433f, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3156,7 +3165,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{44} + return fileDescriptor_ws_b2c8e6212334433f, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3203,7 +3212,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{45} + return fileDescriptor_ws_b2c8e6212334433f, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3251,7 +3260,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{46} + return fileDescriptor_ws_b2c8e6212334433f, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3304,7 +3313,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{47} + return fileDescriptor_ws_b2c8e6212334433f, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3342,7 +3351,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{48} + return fileDescriptor_ws_b2c8e6212334433f, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3380,7 +3389,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{49} + return fileDescriptor_ws_b2c8e6212334433f, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3418,7 +3427,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{50} + return fileDescriptor_ws_b2c8e6212334433f, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3457,7 +3466,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{51} + return fileDescriptor_ws_b2c8e6212334433f, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3496,7 +3505,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{52} + return fileDescriptor_ws_b2c8e6212334433f, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3536,7 +3545,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{53} + return fileDescriptor_ws_b2c8e6212334433f, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3591,7 +3600,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{54} + return fileDescriptor_ws_b2c8e6212334433f, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3645,7 +3654,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{55} + return fileDescriptor_ws_b2c8e6212334433f, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3691,7 +3700,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{56} + return fileDescriptor_ws_b2c8e6212334433f, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3744,7 +3753,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{57} + return fileDescriptor_ws_b2c8e6212334433f, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4011,7 +4020,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{58} + return fileDescriptor_ws_b2c8e6212334433f, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4280,7 +4289,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{59} + return fileDescriptor_ws_b2c8e6212334433f, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4383,7 +4392,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{60} + return fileDescriptor_ws_b2c8e6212334433f, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4438,7 +4447,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{61} + return fileDescriptor_ws_b2c8e6212334433f, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4499,7 +4508,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{62} + return fileDescriptor_ws_b2c8e6212334433f, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4554,7 +4563,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{63} + return fileDescriptor_ws_b2c8e6212334433f, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4615,7 +4624,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{64} + return fileDescriptor_ws_b2c8e6212334433f, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4670,7 +4679,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{65} + return fileDescriptor_ws_b2c8e6212334433f, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4728,7 +4737,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{66} + return fileDescriptor_ws_b2c8e6212334433f, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4763,7 +4772,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{67} + return fileDescriptor_ws_b2c8e6212334433f, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4831,7 +4840,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{68} + return fileDescriptor_ws_b2c8e6212334433f, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4885,7 +4894,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{69} + return fileDescriptor_ws_b2c8e6212334433f, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4936,7 +4945,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{70} + return fileDescriptor_ws_b2c8e6212334433f, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4971,7 +4980,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{71} + return fileDescriptor_ws_b2c8e6212334433f, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5036,7 +5045,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{72} + return fileDescriptor_ws_b2c8e6212334433f, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5070,7 +5079,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{73} + return fileDescriptor_ws_b2c8e6212334433f, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5130,7 +5139,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_3940a0d922f4ad30, []int{74} + return fileDescriptor_ws_b2c8e6212334433f, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5246,215 +5255,218 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_3940a0d922f4ad30) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_b2c8e6212334433f) } -var fileDescriptor_ws_3940a0d922f4ad30 = []byte{ - // 3298 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, - 0xf1, 0xff, 0x77, 0x8f, 0x67, 0xec, 0xa9, 0xf1, 0x67, 0xef, 0xc6, 0x99, 0xbf, 0xff, 0x9b, 0xfd, - 0x9b, 0x8e, 0x15, 0x42, 0x80, 0x4d, 0x94, 0x10, 0x09, 0xf2, 0xb1, 0xc8, 0x1f, 0xd9, 0x8f, 0x64, - 0xc7, 0x76, 0x7a, 0x76, 0x09, 0x22, 0x48, 0xa1, 0x3d, 0xfd, 0x3c, 0xee, 0xb8, 0xa7, 0xbb, 0xdd, - 0x1f, 0xde, 0x5d, 0x2e, 0x48, 0x41, 0x42, 0xdc, 0x38, 0x71, 0xe1, 0x82, 0xc4, 0x05, 0x81, 0xa2, - 0x08, 0x21, 0x90, 0x38, 0x20, 0x84, 0x10, 0x37, 0x2e, 0x20, 0x71, 0x41, 0xdc, 0x38, 0x73, 0xe5, - 0x80, 0x84, 0x04, 0x7a, 0x55, 0xaf, 0xbb, 0xdf, 0xeb, 0xee, 0xb1, 0x67, 0x2d, 0x2b, 0xbb, 0xd1, - 0x72, 0x9b, 0xaa, 0x7e, 0x55, 0xaf, 0x5e, 0xfd, 0xea, 0xbd, 0xaa, 0xf7, 0x31, 0xb0, 0x10, 0x3b, - 0x87, 0xef, 0xdd, 0x8d, 0x9f, 0xbf, 0x1b, 0x5f, 0x09, 0xa3, 0x20, 0x09, 0x8c, 0xa5, 0x98, 0x45, - 0xc7, 0x2c, 0x7a, 0xcf, 0x0e, 0xdd, 0xf7, 0x42, 0x3b, 0xb2, 0x47, 0xb1, 0xf9, 0x0f, 0x1d, 0xda, - 0xd7, 0xa3, 0x20, 0x0d, 0x6f, 0xfa, 0xfb, 0x81, 0xd1, 0x85, 0xe9, 0x21, 0x12, 0x5b, 0x5d, 0x6d, - 0x55, 0x7b, 0xb6, 0x6d, 0x65, 0xa4, 0x71, 0x09, 0xda, 0xf8, 0x73, 0xdb, 0x1e, 0xb1, 0xae, 0x8e, - 0xdf, 0x0a, 0x86, 0x61, 0xc2, 0xac, 0x1f, 0x24, 0xee, 0xbe, 0x3b, 0xb0, 0x13, 0x37, 0xf0, 0xbb, - 0x0d, 0x6c, 0xa0, 0xf0, 0x78, 0x1b, 0xd7, 0x4f, 0xa2, 0xc0, 0x49, 0x07, 0xd8, 0x66, 0x8a, 0xda, - 0xc8, 0x3c, 0xde, 0xff, 0xbe, 0x3d, 0x60, 0x77, 0xac, 0x5b, 0xdd, 0x26, 0xf5, 0x2f, 0x48, 0x63, - 0x15, 0x3a, 0xc1, 0x5d, 0x9f, 0x45, 0x77, 0x62, 0x16, 0xdd, 0xdc, 0xea, 0xb6, 0xf0, 0xab, 0xcc, - 0x32, 0x2e, 0x03, 0x0c, 0x22, 0x66, 0x27, 0xec, 0xb6, 0x3b, 0x62, 0xdd, 0xe9, 0x55, 0xed, 0xd9, - 0x39, 0x4b, 0xe2, 0x70, 0x0d, 0x23, 0x36, 0xda, 0x63, 0xd1, 0x66, 0x90, 0xfa, 0x49, 0x77, 0x06, - 0x1b, 0xc8, 0x2c, 0x63, 0x1e, 0x74, 0x76, 0xaf, 0xdb, 0x46, 0xd5, 0x3a, 0xbb, 0x67, 0x2c, 0x43, - 0x2b, 0x4e, 0xec, 0x24, 0x8d, 0xbb, 0xb0, 0xaa, 0x3d, 0xdb, 0xb4, 0x04, 0x65, 0xac, 0xc1, 0x1c, - 0xea, 0x0d, 0x32, 0x6b, 0x3a, 0x28, 0xa2, 0x32, 0x73, 0x8f, 0xdd, 0xbe, 0x1f, 0xb2, 0xee, 0x2c, - 0x2a, 0x28, 0x18, 0xe6, 0x5f, 0x74, 0xb8, 0x80, 0x7e, 0xef, 0xa1, 0x01, 0xd7, 0x52, 0xcf, 0x3b, - 0x05, 0x81, 0x65, 0x68, 0xa5, 0xd4, 0x1d, 0xb9, 0x5f, 0x50, 0xbc, 0x9f, 0x28, 0xf0, 0xd8, 0x2d, - 0x76, 0xcc, 0x3c, 0x74, 0x7c, 0xd3, 0x2a, 0x18, 0xc6, 0x0a, 0xcc, 0xbc, 0x1f, 0xb8, 0x3e, 0xfa, - 0x64, 0x0a, 0x3f, 0xe6, 0x34, 0xff, 0xe6, 0xbb, 0x83, 0x43, 0x9f, 0x43, 0x4a, 0xee, 0xce, 0x69, - 0x19, 0x89, 0x96, 0x8a, 0xc4, 0x33, 0x30, 0x6f, 0x87, 0x61, 0xcf, 0xf6, 0x87, 0x2c, 0xa2, 0x4e, - 0xa7, 0x51, 0x6f, 0x89, 0xcb, 0xf1, 0xe0, 0x3d, 0xf5, 0x83, 0x34, 0x1a, 0x30, 0x74, 0x77, 0xd3, - 0x92, 0x38, 0x5c, 0x4f, 0x10, 0xb2, 0x48, 0x72, 0x23, 0x79, 0xbe, 0xc4, 0x15, 0xa8, 0x40, 0x8e, - 0x0a, 0xc7, 0x31, 0x4d, 0xd8, 0x1b, 0xbe, 0x83, 0x83, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x1d, - 0x0d, 0xe6, 0x77, 0xd3, 0x3d, 0xcf, 0x1d, 0xa0, 0x0a, 0xee, 0xd6, 0xc2, 0x79, 0x9a, 0xe2, 0x3c, - 0xd9, 0x05, 0xfa, 0x78, 0x17, 0x34, 0x54, 0x17, 0x2c, 0x43, 0x6b, 0xc8, 0x7c, 0x87, 0x45, 0xc2, - 0xa5, 0x82, 0x12, 0xa6, 0x36, 0x33, 0x53, 0xcd, 0xdf, 0xe9, 0x30, 0xf3, 0x31, 0x9b, 0xb0, 0x0a, - 0x9d, 0xf0, 0x20, 0xf0, 0xd9, 0x76, 0xca, 0xc3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0x8b, 0xd0, 0xdc, - 0x73, 0xa3, 0xe4, 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb2, 0x5d, 0x02, 0xb3, 0x6d, - 0x11, 0x21, 0x06, 0x34, 0x93, 0xfb, 0x5e, 0x9d, 0x63, 0xed, 0xca, 0x1c, 0xab, 0xc6, 0x06, 0xd4, - 0xc6, 0xc6, 0x73, 0xb0, 0x38, 0xf4, 0x82, 0x3d, 0xdb, 0xb3, 0xd8, 0xe0, 0xb8, 0x17, 0x0f, 0x77, - 0xc2, 0x04, 0x81, 0x6c, 0x5a, 0x15, 0xbe, 0xf9, 0x4f, 0x0d, 0xe0, 0x5a, 0xe4, 0x32, 0xdf, 0x41, - 0x37, 0x96, 0x16, 0x02, 0xad, 0xba, 0x10, 0x2c, 0x43, 0x2b, 0x62, 0x23, 0x3b, 0x3a, 0xcc, 0x26, - 0x0a, 0x51, 0x25, 0xe3, 0x1b, 0x15, 0xe3, 0x5f, 0x05, 0xd8, 0xc7, 0x7e, 0xb8, 0x1e, 0x74, 0x6b, - 0xe7, 0xc5, 0xff, 0xbb, 0x52, 0x59, 0x32, 0xaf, 0x64, 0x88, 0x5a, 0x52, 0x73, 0x3e, 0x0b, 0x6d, - 0xc7, 0x11, 0xc1, 0xde, 0xa4, 0x59, 0x98, 0x33, 0x6a, 0x62, 0xbd, 0x75, 0x42, 0xac, 0x4f, 0xe7, - 0x01, 0xf4, 0x77, 0x0d, 0xda, 0x1b, 0x9e, 0x3d, 0x38, 0x9c, 0x70, 0xe8, 0xea, 0x10, 0xf5, 0xca, - 0x10, 0xaf, 0xc3, 0xdc, 0x1e, 0x57, 0x97, 0x0d, 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x53, 0x35, 0xa3, - 0x54, 0x27, 0x90, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, - 0x87, 0xfb, 0x27, 0x1d, 0x66, 0x71, 0x51, 0xb4, 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, - 0xd2, 0xcc, 0x54, 0x6d, 0x52, 0x53, 0x73, 0x11, 0xe3, 0x15, 0xb1, 0x04, 0xa3, 0xbc, 0x8e, 0xf2, - 0x97, 0x6a, 0xe4, 0xf3, 0xfc, 0x67, 0x15, 0xcd, 0x79, 0xba, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, - 0x8b, 0x53, 0x2f, 0x11, 0x2b, 0xab, 0xc2, 0xa3, 0x48, 0x3b, 0xea, 0xc5, 0x43, 0x91, 0xcc, 0x04, - 0xc5, 0xbd, 0x43, 0xed, 0xf8, 0x27, 0x1a, 0x7a, 0xc1, 0xe0, 0x93, 0x3a, 0x62, 0x47, 0x88, 0x10, - 0x4d, 0xc1, 0x8c, 0x2c, 0xfa, 0x14, 0x5e, 0xa3, 0x40, 0x50, 0x78, 0x1c, 0x62, 0xa2, 0x51, 0x01, - 0x65, 0x31, 0x89, 0x53, 0x4e, 0x62, 0xe6, 0x5f, 0x1b, 0x30, 0x47, 0xd3, 0x27, 0x73, 0xea, 0x65, - 0x1e, 0xe7, 0xc1, 0x48, 0x89, 0x22, 0x89, 0xc3, 0xad, 0xe0, 0xd4, 0xb6, 0xba, 0x28, 0x29, 0x3c, - 0x1e, 0x8a, 0x9c, 0xbe, 0xa6, 0x2c, 0x4e, 0x32, 0x2b, 0xeb, 0xe5, 0xba, 0xbc, 0x48, 0x49, 0x1c, - 0xbe, 0xec, 0x25, 0x81, 0x12, 0x1d, 0x39, 0xcd, 0x65, 0x93, 0x20, 0xef, 0x9f, 0xe2, 0x43, 0xe2, - 0x70, 0xff, 0x26, 0x41, 0xd6, 0x37, 0x39, 0xa9, 0x60, 0x90, 0x66, 0xd1, 0x2f, 0xa5, 0x9d, 0x9c, - 0xae, 0xa0, 0xda, 0x3e, 0x11, 0x55, 0x50, 0x50, 0x55, 0x27, 0x57, 0xa7, 0x32, 0xb9, 0xd6, 0x60, - 0x8e, 0xf4, 0x64, 0x41, 0x3f, 0x4b, 0x65, 0x81, 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, - 0xba, 0xf3, 0x63, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, 0xb9, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x46, - 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, 0x55, 0x78, 0x72, 0x4e, 0xd1, 0xd5, 0x9c, 0x62, - 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, - 0xe6, 0x39, 0x23, 0x88, 0x1c, 0x91, 0x65, 0x9a, 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0xf1, - 0xd3, 0xa2, 0x1c, 0xa0, 0x72, 0x4f, 0xad, 0xd7, 0x9e, 0x83, 0xc5, 0x38, 0xdd, 0x2b, 0x06, 0xb7, - 0x9d, 0x8e, 0x44, 0xb8, 0x57, 0xf8, 0xdc, 0xa9, 0x54, 0xc8, 0xf1, 0x46, 0x94, 0x96, 0x0a, 0x46, - 0xb9, 0x82, 0x30, 0x3f, 0xd4, 0x61, 0x71, 0x27, 0x1a, 0xda, 0xbe, 0xfb, 0x4d, 0x2c, 0x4d, 0x71, - 0x01, 0x3f, 0x4b, 0x7a, 0x5e, 0x85, 0x0e, 0xf3, 0x87, 0x9e, 0x1b, 0x1f, 0x6c, 0x17, 0x7e, 0x93, - 0x59, 0xb2, 0xb3, 0xa7, 0xc6, 0x25, 0xf0, 0xa6, 0x92, 0xc0, 0x97, 0xa1, 0x35, 0x0a, 0xf6, 0x5c, - 0x2f, 0x8b, 0x7b, 0x41, 0x61, 0xcc, 0x33, 0x8f, 0x61, 0x26, 0xcf, 0x63, 0x3e, 0x63, 0x14, 0x49, - 0x7d, 0xa6, 0x36, 0xa9, 0xb7, 0xe5, 0xa4, 0xae, 0x3a, 0x1e, 0x2a, 0x8e, 0x27, 0x77, 0x75, 0x72, - 0x77, 0xfd, 0x56, 0x83, 0xc5, 0xc2, 0xdd, 0x54, 0xaf, 0x8e, 0x75, 0x57, 0x39, 0x02, 0xf5, 0x9a, - 0x08, 0xcc, 0xe3, 0xa6, 0x21, 0xc7, 0x0d, 0x8f, 0xb4, 0x20, 0x76, 0xa5, 0xbd, 0x41, 0x4e, 0xf3, - 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, 0xd0, 0x5b, 0x4a, 0x85, 0x5e, 0xce, 0xa3, 0xbf, - 0xd2, 0xe0, 0x22, 0x47, 0xb9, 0x32, 0x8c, 0x1d, 0x58, 0x0c, 0x4a, 0x91, 0x20, 0x12, 0xcd, 0xd3, - 0x35, 0x89, 0xa2, 0x1c, 0x34, 0x56, 0x45, 0x98, 0x2b, 0x74, 0x4a, 0x9d, 0x88, 0xcc, 0x53, 0xa7, - 0xb0, 0x6c, 0x8f, 0x55, 0x11, 0x36, 0x7f, 0xad, 0xc1, 0x22, 0xa5, 0x36, 0x69, 0x9e, 0x9f, 0xbb, - 0xd9, 0xef, 0xc0, 0xc5, 0x72, 0xcf, 0xb7, 0xdc, 0x38, 0xe9, 0xea, 0xab, 0x8d, 0x49, 0x4d, 0xaf, - 0x55, 0xc0, 0xe7, 0xda, 0x93, 0xbb, 0xa9, 0xe7, 0xf5, 0x58, 0x1c, 0xdb, 0x43, 0xb6, 0x71, 0xbf, - 0xcf, 0x8e, 0xf8, 0x07, 0x8b, 0x1d, 0x8d, 0x8d, 0x21, 0x5e, 0xe7, 0x60, 0xa1, 0xe0, 0x06, 0x7e, - 0x1e, 0x42, 0x32, 0x8b, 0x4f, 0xab, 0x98, 0xf4, 0x74, 0x1b, 0xab, 0x0d, 0x9e, 0x42, 0x05, 0x69, - 0x7c, 0x03, 0x66, 0x31, 0x87, 0x8b, 0x6e, 0xba, 0x53, 0x38, 0x80, 0xd7, 0x6a, 0xab, 0x86, 0x5a, - 0xab, 0xa8, 0x1a, 0x10, 0xf4, 0x1b, 0x7e, 0x12, 0xdd, 0xb7, 0x14, 0x8d, 0x2b, 0xef, 0xc2, 0x52, - 0xa5, 0x89, 0xb1, 0x08, 0x8d, 0x43, 0x76, 0x5f, 0x8c, 0x83, 0xff, 0x34, 0x5e, 0x80, 0xe6, 0xb1, - 0xed, 0xa5, 0x4c, 0xa0, 0xbf, 0x52, 0x63, 0x81, 0xb0, 0xd9, 0xa2, 0x86, 0xaf, 0xe8, 0x5f, 0xd4, - 0xcc, 0xa7, 0xf3, 0x81, 0xc9, 0x63, 0xd4, 0x94, 0x31, 0x9a, 0x6f, 0x41, 0xa7, 0x17, 0x0f, 0xb7, - 0xec, 0xc4, 0xc6, 0x86, 0xaf, 0x41, 0x67, 0x54, 0x90, 0xd8, 0xb8, 0xbe, 0x3f, 0x21, 0x64, 0xc9, - 0xcd, 0xcd, 0x3f, 0xea, 0xd0, 0xad, 0x77, 0x45, 0x1c, 0x72, 0x1b, 0x58, 0x14, 0x6d, 0x06, 0x0e, - 0xc3, 0xa1, 0x35, 0xad, 0x8c, 0xe4, 0xd8, 0xb1, 0x28, 0xe2, 0x39, 0x4c, 0x14, 0xd9, 0x44, 0x19, - 0x57, 0x60, 0xca, 0xcb, 0x60, 0x39, 0xd9, 0x0a, 0x6c, 0x67, 0x8c, 0x60, 0x11, 0xbd, 0x2b, 0x0d, - 0x48, 0x60, 0xb6, 0x3e, 0x31, 0x66, 0x71, 0x48, 0xa0, 0x49, 0x3a, 0x08, 0xb8, 0x8a, 0xea, 0x95, - 0x01, 0x3c, 0x51, 0xdb, 0xb4, 0x06, 0xc0, 0x2f, 0xa8, 0x00, 0x5e, 0x1e, 0x3f, 0x94, 0x32, 0x88, - 0x21, 0x18, 0xd7, 0x59, 0xd2, 0xb3, 0xef, 0xad, 0xfb, 0x4e, 0xcf, 0xf5, 0xfb, 0xec, 0x88, 0x47, - 0xfb, 0x2a, 0x74, 0xc4, 0x56, 0x3e, 0x87, 0xa9, 0x6d, 0xc9, 0xac, 0xb1, 0x3b, 0xfc, 0xd2, 0x7c, - 0x68, 0x54, 0xe6, 0x83, 0x79, 0x15, 0x66, 0xe5, 0xee, 0x30, 0x89, 0xd8, 0xf7, 0xfa, 0xec, 0x08, - 0x07, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0xd8, 0x42, 0xec, 0x0d, 0x04, 0x65, 0xfe, 0x41, 0x87, 0x0b, - 0x15, 0x93, 0xe3, 0xf0, 0x41, 0xf5, 0xc8, 0xf1, 0xd2, 0x18, 0x17, 0x2f, 0x53, 0x4a, 0xbc, 0x1c, - 0xc2, 0x12, 0x81, 0x24, 0x75, 0xdd, 0x6d, 0x62, 0x00, 0xbc, 0x5e, 0x57, 0xaa, 0x57, 0x8d, 0x14, - 0xd8, 0x4b, 0x5c, 0x02, 0xbf, 0xaa, 0x77, 0x85, 0xc1, 0x72, 0x7d, 0xe3, 0x1a, 0xf8, 0x5f, 0x56, - 0xe1, 0xff, 0xff, 0x3a, 0xf8, 0x65, 0x4b, 0x24, 0xfc, 0x8f, 0x60, 0x81, 0x2f, 0xaa, 0x7d, 0xe6, - 0x3b, 0xbd, 0x78, 0x88, 0x8e, 0x5c, 0x85, 0x0e, 0xc9, 0xf7, 0xe2, 0x61, 0xb1, 0x75, 0x93, 0x58, - 0xbc, 0xc5, 0xc0, 0x73, 0xf9, 0xe2, 0x89, 0x2d, 0xc4, 0xa2, 0x27, 0xb1, 0x78, 0x82, 0x8c, 0x99, - 0x38, 0xf5, 0xe0, 0xde, 0x6d, 0x58, 0x39, 0x6d, 0x7e, 0xd0, 0x82, 0x69, 0x11, 0x8d, 0x98, 0x14, - 0xf9, 0x6e, 0x39, 0x5f, 0x56, 0x89, 0xa2, 0xba, 0x76, 0x70, 0x5c, 0x84, 0x17, 0x51, 0xf2, 0x91, - 0x53, 0x43, 0x3d, 0x72, 0x2a, 0xd9, 0x34, 0x55, 0xb5, 0xa9, 0x34, 0xae, 0x66, 0x75, 0x5c, 0xbc, - 0x8c, 0xc3, 0xca, 0x66, 0xd7, 0xb3, 0x93, 0xfd, 0x20, 0x1a, 0x89, 0xcd, 0x6f, 0xd3, 0xaa, 0xf0, - 0x79, 0xe9, 0x48, 0xbc, 0xbc, 0xf6, 0xa7, 0x14, 0x5e, 0xe2, 0xf2, 0x4a, 0x9b, 0x38, 0xd9, 0x1e, - 0x80, 0x4e, 0x28, 0x54, 0x26, 0xd9, 0x16, 0xc7, 0x6e, 0xe0, 0x63, 0x15, 0x4a, 0xa5, 0xbe, 0xcc, - 0xe2, 0x23, 0x1f, 0xc5, 0xc3, 0x6b, 0x51, 0x30, 0x12, 0xe7, 0x14, 0x19, 0x89, 0x23, 0x0f, 0xfc, - 0x24, 0xab, 0x60, 0xe9, 0x6c, 0x42, 0x66, 0x71, 0x59, 0x41, 0x62, 0x9d, 0x3f, 0x6b, 0x65, 0x24, - 0x8f, 0xa5, 0x98, 0x1d, 0x89, 0xe2, 0x9d, 0xff, 0x54, 0x90, 0x5b, 0x50, 0x91, 0x2b, 0x55, 0x63, - 0x8b, 0xf8, 0x55, 0xae, 0xc6, 0x8a, 0x12, 0x67, 0x49, 0x29, 0x71, 0xd6, 0x61, 0x3a, 0x08, 0xf9, - 0xf4, 0x8f, 0xbb, 0x06, 0x4e, 0x97, 0x4f, 0x8f, 0x5f, 0xa0, 0xae, 0xec, 0x50, 0x4b, 0x9a, 0x18, - 0x99, 0x9c, 0x71, 0x0b, 0x16, 0x82, 0xfd, 0x7d, 0xcf, 0xf5, 0xd9, 0x6e, 0x1a, 0x1f, 0xe0, 0x26, - 0xf9, 0x02, 0x06, 0xbb, 0x59, 0x57, 0x44, 0xa8, 0x2d, 0xad, 0xb2, 0x28, 0xaf, 0xfc, 0xec, 0x84, - 0x36, 0x39, 0xb8, 0xc0, 0x5d, 0xc4, 0x05, 0x4e, 0xe1, 0xe1, 0xd9, 0x9d, 0xb4, 0xd0, 0x3f, 0x81, - 0x8e, 0x93, 0x59, 0x2b, 0xaf, 0xc0, 0xac, 0x6c, 0x6c, 0xcd, 0xc4, 0xbc, 0x28, 0x4f, 0xcc, 0x19, - 0x79, 0xde, 0x7d, 0x5f, 0x83, 0x85, 0x92, 0x99, 0xbc, 0x75, 0xe2, 0x26, 0x1e, 0x13, 0x1a, 0x88, - 0xe0, 0x3b, 0x1d, 0x87, 0xc5, 0x03, 0x31, 0x11, 0xf0, 0xb7, 0xa8, 0x19, 0x1b, 0xf9, 0x59, 0x97, - 0x09, 0xb3, 0xee, 0x4e, 0x9f, 0x2b, 0xea, 0x07, 0xa9, 0xef, 0xe4, 0xe7, 0xd5, 0x12, 0x8f, 0x07, - 0xa2, 0xbb, 0xd3, 0xdf, 0xb0, 0x9d, 0x21, 0xa3, 0x53, 0xe5, 0x26, 0xda, 0xa4, 0x32, 0x4d, 0x07, - 0x66, 0x6e, 0xbb, 0x61, 0xbc, 0x19, 0x8c, 0x46, 0x1c, 0x4e, 0x87, 0x25, 0xbc, 0x26, 0xd7, 0x70, - 0xf0, 0x82, 0xe2, 0x9e, 0x71, 0xd8, 0xbe, 0x9d, 0x7a, 0x09, 0x6f, 0x9a, 0x4d, 0x7f, 0x89, 0x85, - 0xe7, 0xa9, 0x71, 0xe0, 0x6f, 0x91, 0x34, 0xd9, 0x29, 0x71, 0xcc, 0xdf, 0xeb, 0xb0, 0x88, 0xab, - 0xdb, 0x26, 0x06, 0x8f, 0x83, 0x42, 0x2f, 0x42, 0x13, 0x27, 0xb3, 0xa8, 0x0e, 0x4f, 0x3e, 0xfd, - 0xa0, 0xa6, 0xc6, 0x55, 0x68, 0x05, 0x21, 0x96, 0x94, 0xb4, 0xf4, 0x3d, 0x33, 0x4e, 0x48, 0x3d, - 0xba, 0xb6, 0x84, 0x94, 0x71, 0x0d, 0x60, 0x54, 0x54, 0x90, 0x54, 0x08, 0x4c, 0xaa, 0x43, 0x92, - 0xe4, 0xce, 0xcd, 0x73, 0x5c, 0x7e, 0x7e, 0xdd, 0xb0, 0x54, 0xa6, 0xb1, 0x0d, 0xf3, 0x68, 0xf6, - 0x4e, 0x76, 0x0c, 0x86, 0x18, 0x4c, 0xde, 0x63, 0x49, 0xda, 0xfc, 0x91, 0x26, 0xdc, 0xc8, 0xbf, - 0xf6, 0x19, 0xf9, 0xbe, 0x70, 0x89, 0x76, 0x26, 0x97, 0xac, 0xc0, 0xcc, 0x28, 0x95, 0x4e, 0xe5, - 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0x26, 0x86, 0xc8, 0xfc, 0xb1, 0x06, 0xdd, 0x37, 0x03, 0xd7, - 0xc7, 0x0f, 0xeb, 0x61, 0xe8, 0x89, 0x4b, 0x96, 0x33, 0x63, 0xfe, 0x65, 0x68, 0xdb, 0xa4, 0xc6, - 0x4f, 0x04, 0xec, 0x13, 0x9c, 0xb4, 0x15, 0x32, 0xd2, 0xa1, 0x49, 0x43, 0x3e, 0x34, 0x31, 0x3f, - 0xd2, 0x60, 0x9e, 0x9c, 0xf2, 0x76, 0xea, 0x26, 0x67, 0xb6, 0x6f, 0x03, 0x66, 0x8e, 0x52, 0x37, - 0x39, 0x43, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0x33, 0x0d, 0x2e, 0x95, - 0xdd, 0xba, 0x3e, 0x18, 0xb0, 0xf0, 0x61, 0x4e, 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, - 0x6b, 0xb2, 0xc5, 0xde, 0x67, 0x83, 0x47, 0xd7, 0xe4, 0x6f, 0xeb, 0xf0, 0xbf, 0xd7, 0xf3, 0x89, - 0x77, 0x3b, 0xb2, 0xfd, 0x78, 0x9f, 0x45, 0xd1, 0x43, 0xb4, 0xf7, 0x16, 0xcc, 0xf9, 0xec, 0x6e, - 0x61, 0x93, 0x98, 0x8e, 0x93, 0xaa, 0x51, 0x85, 0x27, 0x5b, 0xbb, 0xcc, 0x7f, 0x69, 0xb0, 0x48, - 0x7a, 0xde, 0x72, 0x07, 0x87, 0x0f, 0x71, 0xf0, 0xdb, 0x30, 0x7f, 0x88, 0x16, 0x70, 0xea, 0x0c, - 0xcb, 0x76, 0x49, 0x7a, 0xc2, 0xe1, 0xff, 0x5b, 0x83, 0x25, 0x52, 0x74, 0xd3, 0x3f, 0x76, 0x1f, - 0x66, 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x9c, 0xd1, 0x01, 0x65, 0xf1, 0x09, 0x3d, 0xf0, 0x4b, - 0x0d, 0x16, 0x48, 0xd3, 0x1b, 0x7e, 0xc2, 0xa2, 0x33, 0x8f, 0xff, 0x06, 0x74, 0x98, 0x9f, 0x44, - 0xb6, 0x7f, 0x96, 0x15, 0x52, 0x16, 0x9d, 0x70, 0x91, 0xfc, 0x48, 0x03, 0x03, 0x55, 0x6d, 0xb9, - 0xf1, 0xc8, 0x8d, 0xe3, 0x87, 0x08, 0xdd, 0x64, 0x06, 0xff, 0x40, 0x87, 0x8b, 0x92, 0x96, 0x5e, - 0x9a, 0x3c, 0xea, 0x26, 0x1b, 0x5b, 0xd0, 0xe6, 0x35, 0x82, 0x7c, 0x1b, 0x39, 0x69, 0x47, 0x85, - 0x20, 0xaf, 0x62, 0x91, 0xe8, 0xb3, 0x41, 0xe0, 0x3b, 0x31, 0x16, 0x47, 0x73, 0x96, 0xc2, 0xe3, - 0xcb, 0xd0, 0x8a, 0xa4, 0x66, 0xd3, 0xf6, 0x07, 0xcc, 0x7b, 0x6c, 0x5c, 0x64, 0xfe, 0x54, 0x83, - 0x79, 0x6a, 0xf2, 0xe8, 0x0f, 0x99, 0xe7, 0x7a, 0x0a, 0xe4, 0x4f, 0x0c, 0x4a, 0x3c, 0xbc, 0x96, - 0x25, 0x2d, 0x72, 0x5d, 0xfd, 0xe8, 0x86, 0xd6, 0x0d, 0xe8, 0x0c, 0x0e, 0x6c, 0x7f, 0x78, 0xa6, - 0xe0, 0x92, 0x45, 0xcd, 0x04, 0x9e, 0x94, 0x0f, 0xe0, 0x37, 0xe9, 0x13, 0x0e, 0xff, 0xa5, 0xd2, - 0x50, 0x4e, 0x7c, 0x6d, 0xf0, 0x60, 0x4e, 0x3f, 0x84, 0x25, 0xba, 0xf5, 0x95, 0x6a, 0x42, 0xa3, - 0x0b, 0xd3, 0xb6, 0x43, 0xc7, 0x10, 0x1a, 0x0a, 0x65, 0xa4, 0x7a, 0x9f, 0x2f, 0x9e, 0x77, 0x15, - 0xf7, 0xf9, 0x97, 0x01, 0x6c, 0xc7, 0x79, 0x27, 0x88, 0x1c, 0xd7, 0xcf, 0x0a, 0x7c, 0x89, 0x63, - 0xbe, 0x09, 0xb3, 0xd7, 0xa2, 0x60, 0x74, 0x5b, 0xba, 0xbf, 0x3d, 0xf1, 0x86, 0x59, 0xbe, 0xfb, - 0xd5, 0xd5, 0xbb, 0x5f, 0xf3, 0xeb, 0xf0, 0x44, 0xc5, 0x70, 0x74, 0xd6, 0x26, 0x5d, 0x4b, 0x67, - 0x9d, 0x88, 0x90, 0xa9, 0x3b, 0x97, 0x93, 0x6d, 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0xaa, - 0xa8, 0x5f, 0x0f, 0xc3, 0x28, 0x38, 0x16, 0x98, 0x9c, 0x47, 0x37, 0x6a, 0xf1, 0xab, 0x97, 0x8b, - 0xdf, 0x5a, 0x23, 0x94, 0x82, 0xfd, 0x63, 0x30, 0xe2, 0x27, 0x1a, 0x2c, 0x08, 0x23, 0x1c, 0x47, - 0x74, 0xfb, 0x32, 0xb4, 0xe8, 0x49, 0x8b, 0xe8, 0xf0, 0xa9, 0xda, 0x0e, 0xb3, 0xa7, 0x38, 0x96, - 0x68, 0x5c, 0x8d, 0x48, 0xbd, 0x6e, 0x46, 0x7d, 0x29, 0x0f, 0xf6, 0x89, 0x1f, 0x9d, 0x08, 0x01, - 0xf3, 0xab, 0x59, 0x30, 0x6f, 0x31, 0x8f, 0x9d, 0xa7, 0x8f, 0xcc, 0x3b, 0x30, 0x8f, 0xef, 0x6b, - 0x0a, 0x1f, 0x9c, 0x8b, 0xda, 0x77, 0x60, 0x11, 0xd5, 0x9e, 0xbb, 0xbd, 0xf9, 0xec, 0xe0, 0xfe, - 0x91, 0x97, 0x92, 0x73, 0xd1, 0xfe, 0x79, 0xb8, 0x90, 0xf9, 0xfe, 0x4e, 0xe8, 0xe4, 0x87, 0x48, - 0x63, 0xee, 0xe9, 0xcc, 0x17, 0x60, 0x79, 0x33, 0xf0, 0x8f, 0x59, 0x14, 0xd3, 0x45, 0x22, 0x8a, - 0x64, 0x12, 0xca, 0xe4, 0x17, 0x94, 0xf9, 0x3e, 0xac, 0xc8, 0x12, 0x7d, 0x96, 0xec, 0x46, 0xee, - 0xb1, 0x24, 0x25, 0x0e, 0xa8, 0x35, 0xe5, 0x80, 0xba, 0x38, 0xd0, 0xd6, 0x95, 0x03, 0xed, 0x4b, - 0xd0, 0x76, 0x63, 0xa1, 0x00, 0x83, 0x6a, 0xc6, 0x2a, 0x18, 0xa6, 0x0d, 0x4b, 0xe4, 0x7e, 0x71, - 0x61, 0x84, 0x5d, 0xac, 0xc0, 0x0c, 0xc5, 0x54, 0xde, 0x49, 0x4e, 0x8f, 0xbd, 0x7e, 0x19, 0x7b, - 0xd9, 0x68, 0xf6, 0x61, 0x49, 0x3c, 0xaa, 0xd9, 0xb5, 0x87, 0xae, 0x4f, 0x8b, 0xec, 0x65, 0x80, - 0xd0, 0x1e, 0x66, 0x0f, 0xf0, 0xe8, 0xda, 0x4c, 0xe2, 0xf0, 0xef, 0xf1, 0x41, 0x70, 0x57, 0x7c, - 0xd7, 0xe9, 0x7b, 0xc1, 0x31, 0xbf, 0x02, 0x86, 0xc5, 0xe2, 0x30, 0xf0, 0x63, 0x26, 0x69, 0x5d, - 0x85, 0xce, 0x66, 0x1a, 0x45, 0xcc, 0xe7, 0x5d, 0x65, 0x2f, 0xcc, 0x64, 0x16, 0xd7, 0xdb, 0x2f, - 0xf4, 0xd2, 0x11, 0xbb, 0xc4, 0x31, 0x7f, 0xd8, 0x80, 0x76, 0xdf, 0x1d, 0xfa, 0xb6, 0x67, 0xb1, - 0x23, 0xe3, 0x35, 0x68, 0xd1, 0x96, 0x45, 0x44, 0x4a, 0xdd, 0x91, 0x2f, 0xb5, 0xa6, 0xbd, 0x99, - 0xc5, 0x8e, 0x6e, 0xfc, 0x8f, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0xdd, 0xa4, 0x23, 0x28, - 0x91, 0xbf, 0x3e, 0x73, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x03, 0x2c, 0x69, - 0xc4, 0xf2, 0x30, 0xde, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, - 0x99, 0x7a, 0xbc, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xbc, 0x13, - 0x8a, 0xb3, 0xc3, 0xf1, 0xd2, 0x37, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, - 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, - 0x60, 0x3b, 0xe6, 0x87, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, - 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x7e, 0x3d, 0x48, 0x9f, 0x9d, 0x14, 0x24, 0xd2, 0x56, 0x82, 0xe9, - 0x6a, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0xae, 0x96, 0x80, 0x5a, 0x3b, 0x15, - 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5a, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x6a, - 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0xfe, 0xac, 0xc3, 0x3c, 0xba, 0x8c, 0x6e, - 0x61, 0xfd, 0xfd, 0x00, 0xef, 0x03, 0xd0, 0x5d, 0xea, 0x1b, 0x4d, 0x95, 0x69, 0x7c, 0x0e, 0x96, - 0x88, 0xc1, 0xa4, 0xeb, 0x12, 0x1d, 0xaf, 0x4b, 0xaa, 0x1f, 0xf0, 0x82, 0x28, 0x8d, 0x93, 0x60, - 0xb4, 0x65, 0x27, 0x76, 0x56, 0x7c, 0x15, 0x1c, 0xf9, 0xfa, 0x6e, 0xaa, 0xf2, 0x62, 0x3c, 0x0a, - 0x82, 0x51, 0x7e, 0x2f, 0x27, 0x28, 0x2e, 0x91, 0xb8, 0x23, 0x16, 0xa4, 0x89, 0x58, 0x26, 0x32, - 0x92, 0xde, 0x51, 0x39, 0xae, 0x8d, 0x97, 0x5e, 0xe2, 0x91, 0x51, 0xce, 0xc0, 0x95, 0xad, 0xb8, - 0xc4, 0x13, 0x2f, 0xba, 0x0b, 0xce, 0x04, 0x17, 0x6e, 0xf8, 0x1f, 0x00, 0x37, 0x71, 0xe5, 0xc7, - 0x47, 0x4d, 0x4b, 0xe1, 0x99, 0x7f, 0xd3, 0xe0, 0xc2, 0xae, 0x1d, 0x25, 0xee, 0xc0, 0x0d, 0x6d, - 0x3f, 0xe9, 0xb1, 0xc4, 0xc6, 0x71, 0x2a, 0x8f, 0x39, 0xb5, 0x07, 0x7b, 0xcc, 0xb9, 0x0b, 0x0b, - 0x43, 0x75, 0x07, 0xf2, 0x80, 0x9b, 0x87, 0xb2, 0xb8, 0xf2, 0x32, 0xb5, 0xf1, 0xc0, 0x2f, 0x53, - 0xcd, 0xef, 0xea, 0xb0, 0x50, 0x5a, 0x5e, 0x4f, 0xcc, 0x4d, 0xeb, 0x00, 0x6e, 0x1e, 0x6a, 0x27, - 0x1c, 0xd0, 0xab, 0xf1, 0x68, 0x49, 0x42, 0x75, 0xb7, 0x7d, 0x8d, 0xb3, 0xdf, 0xf6, 0xdd, 0x80, - 0x4e, 0x58, 0x80, 0x74, 0xc2, 0xfe, 0xa8, 0x06, 0x4a, 0x4b, 0x16, 0x35, 0xdf, 0x85, 0xa5, 0xca, - 0x2a, 0x86, 0xd7, 0x76, 0xc1, 0x21, 0xf3, 0xf3, 0x6b, 0x3b, 0x4e, 0x48, 0x01, 0xad, 0x97, 0x03, - 0xda, 0x73, 0x8f, 0xe5, 0x67, 0xf2, 0x82, 0x34, 0xbf, 0xa7, 0xc3, 0x72, 0x7d, 0x06, 0x7a, 0x5c, - 0xdd, 0xbd, 0x07, 0xdd, 0x71, 0xab, 0xfd, 0xb9, 0x79, 0xbd, 0x88, 0xee, 0x3c, 0x57, 0x3f, 0xae, - 0xee, 0xbe, 0x90, 0x45, 0xb7, 0x94, 0x0e, 0xcd, 0x5f, 0xe4, 0xfe, 0xc9, 0xab, 0x91, 0xc7, 0xd4, - 0x3f, 0xc6, 0x73, 0xb0, 0x48, 0xc3, 0x94, 0x9e, 0x87, 0x50, 0x71, 0x5b, 0xe1, 0x17, 0x2b, 0x85, - 0x54, 0x1a, 0x9c, 0x5b, 0xcc, 0xfe, 0x46, 0xcb, 0x30, 0xc9, 0x6b, 0xbc, 0x4f, 0x14, 0x26, 0x45, - 0xa4, 0x49, 0x85, 0x8f, 0x14, 0x69, 0x79, 0xed, 0xf9, 0xdf, 0x48, 0x3b, 0x3d, 0xd2, 0x72, 0x5f, - 0x4a, 0x45, 0xa0, 0xf9, 0x2d, 0x98, 0xdb, 0x62, 0x5e, 0x2f, 0x1e, 0x66, 0xef, 0x57, 0xcf, 0x75, - 0x33, 0x59, 0x7e, 0xe5, 0x37, 0x55, 0x7d, 0xe5, 0xb7, 0x01, 0xf3, 0xb2, 0x01, 0x67, 0x79, 0x9f, - 0xb9, 0x71, 0xe9, 0x6b, 0x2b, 0x57, 0x9e, 0xa7, 0xff, 0x85, 0xbe, 0x5a, 0x71, 0xe2, 0x5e, 0x0b, - 0xff, 0x27, 0xfa, 0xd2, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xce, 0x12, 0x67, 0xe3, 0x3a, 0x3a, - 0x00, 0x00, +var fileDescriptor_ws_b2c8e6212334433f = []byte{ + // 3359 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x24, 0x47, + 0x15, 0xa7, 0x7b, 0x3c, 0x63, 0xcf, 0x1b, 0x8f, 0x3d, 0xee, 0xdd, 0x38, 0x83, 0xd9, 0x2c, 0xa6, + 0x63, 0x25, 0x4b, 0x00, 0x6f, 0xb4, 0x21, 0x12, 0xe4, 0x63, 0x91, 0x3f, 0xb2, 0x1f, 0xc9, 0x8e, + 0xed, 0xf4, 0xec, 0x26, 0x88, 0x20, 0x2d, 0xed, 0xe9, 0xf2, 0xb8, 0xe3, 0x9e, 0xae, 0x76, 0x7f, + 0x78, 0x77, 0xb9, 0x20, 0x05, 0x09, 0x71, 0xe3, 0xc4, 0x85, 0x0b, 0x12, 0x17, 0x04, 0x8a, 0x22, + 0x84, 0x40, 0xe2, 0x80, 0x22, 0x84, 0xb8, 0x71, 0x01, 0x89, 0x0b, 0xe2, 0xc6, 0x99, 0x7f, 0x00, + 0x09, 0x09, 0x54, 0xaf, 0xaa, 0xbb, 0xab, 0xba, 0x7b, 0xec, 0x59, 0xcb, 0xca, 0x6e, 0xb4, 0xdc, + 0xe6, 0xbd, 0xae, 0xf7, 0xea, 0xd5, 0xfb, 0xbd, 0xaa, 0xf7, 0xea, 0x63, 0x60, 0x3e, 0x72, 0x0e, + 0xee, 0xde, 0x8b, 0x2e, 0xdf, 0x8b, 0x56, 0x83, 0x90, 0xc6, 0xd4, 0x58, 0x88, 0x48, 0x78, 0x44, + 0xc2, 0xbb, 0x76, 0xe0, 0xde, 0x0d, 0xec, 0xd0, 0x1e, 0x45, 0x4b, 0xcf, 0x6f, 0x07, 0xc4, 0xbf, + 0x7b, 0xb3, 0x77, 0x39, 0x38, 0x18, 0x5e, 0xc6, 0x56, 0x97, 0x53, 0xa9, 0xd0, 0x0e, 0x02, 0x12, + 0x0a, 0x59, 0xf3, 0xe3, 0x1a, 0x34, 0xaf, 0x87, 0x34, 0x09, 0x6e, 0xfa, 0x7b, 0xd4, 0xe8, 0xc2, + 0xf4, 0x10, 0x89, 0xcd, 0xae, 0xb6, 0xac, 0x5d, 0x6a, 0x5a, 0x29, 0x69, 0x5c, 0x80, 0x26, 0xfe, + 0xdc, 0xb2, 0x47, 0xa4, 0xab, 0xe3, 0xb7, 0x9c, 0x61, 0x98, 0x30, 0xeb, 0xd3, 0xd8, 0xdd, 0x73, + 0x07, 0x76, 0xec, 0x52, 0xbf, 0x5b, 0xc3, 0x06, 0x0a, 0x8f, 0xb5, 0x71, 0xfd, 0x38, 0xa4, 0x4e, + 0x32, 0xc0, 0x36, 0x53, 0xbc, 0x8d, 0xcc, 0x63, 0xfd, 0xef, 0xd9, 0x03, 0x72, 0xc7, 0xba, 0xd5, + 0xad, 0xf3, 0xfe, 0x05, 0x69, 0x2c, 0x43, 0x8b, 0xde, 0xf3, 0x49, 0x78, 0x27, 0x22, 0xe1, 0xcd, + 0xcd, 0x6e, 0x03, 0xbf, 0xca, 0x2c, 0xe3, 0x22, 0xc0, 0x20, 0x24, 0x76, 0x4c, 0x6e, 0xbb, 0x23, + 0xd2, 0x9d, 0x5e, 0xd6, 0x2e, 0xb5, 0x2d, 0x89, 0xc3, 0x34, 0x8c, 0xc8, 0x68, 0x97, 0x84, 0x1b, + 0x34, 0xf1, 0xe3, 0xee, 0x0c, 0x36, 0x90, 0x59, 0xc6, 0x1c, 0xe8, 0xe4, 0x7e, 0xb7, 0x89, 0xaa, + 0x75, 0x72, 0xdf, 0x58, 0x84, 0x46, 0x14, 0xdb, 0x71, 0x12, 0x75, 0x61, 0x59, 0xbb, 0x54, 0xb7, + 0x04, 0x65, 0xac, 0x40, 0x1b, 0xf5, 0xd2, 0xd4, 0x9a, 0x16, 0x8a, 0xa8, 0xcc, 0xcc, 0x63, 0xb7, + 0x1f, 0x04, 0xa4, 0x3b, 0x8b, 0x0a, 0x72, 0x86, 0x71, 0x1d, 0x3a, 0x3e, 0x21, 0xce, 0x3b, 0x24, + 0xcc, 0xbd, 0xd6, 0x5e, 0xd6, 0x2e, 0xb5, 0xae, 0x7c, 0x6e, 0x75, 0x48, 0xe9, 0xd0, 0x23, 0x1c, + 0xa0, 0xdd, 0x64, 0x6f, 0xf5, 0xa6, 0x1f, 0xbf, 0x74, 0xe5, 0x1d, 0xdb, 0x4b, 0x88, 0x55, 0x12, + 0x32, 0xff, 0xae, 0xc3, 0x39, 0x04, 0xb0, 0x87, 0x23, 0xb9, 0x96, 0x78, 0xde, 0x09, 0x50, 0x2e, + 0x42, 0x23, 0xe1, 0x76, 0x73, 0x1c, 0x05, 0xc5, 0x0c, 0x0e, 0xa9, 0x47, 0x6e, 0x91, 0x23, 0xe2, + 0x21, 0x82, 0x75, 0x2b, 0x67, 0x18, 0x4b, 0x30, 0xf3, 0x3e, 0x75, 0x7d, 0x74, 0xee, 0x14, 0x7e, + 0xcc, 0x68, 0xf6, 0xcd, 0x77, 0x07, 0x07, 0x3e, 0x8b, 0x0d, 0x8e, 0x5b, 0x46, 0xcb, 0x90, 0x36, + 0x54, 0x48, 0x9f, 0x83, 0x39, 0x3b, 0x08, 0x7a, 0xb6, 0x3f, 0x24, 0x21, 0xef, 0x74, 0x1a, 0xf5, + 0x16, 0xb8, 0x0c, 0x58, 0xd6, 0x53, 0x9f, 0x26, 0xe1, 0x80, 0x20, 0x6e, 0x75, 0x4b, 0xe2, 0x30, + 0x3d, 0x34, 0x20, 0xa1, 0x84, 0x07, 0x87, 0xb0, 0xc0, 0x15, 0xf0, 0x42, 0x06, 0x2f, 0x0b, 0x88, + 0x24, 0x26, 0x6f, 0xf8, 0x0e, 0x0e, 0xaa, 0x25, 0x02, 0x22, 0x67, 0x99, 0x3f, 0xd0, 0x60, 0x6e, + 0x27, 0xd9, 0xf5, 0xdc, 0x01, 0xaa, 0x60, 0x6e, 0xcd, 0x9d, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, + 0x8f, 0x77, 0x41, 0x4d, 0x75, 0xc1, 0x22, 0x34, 0x86, 0xc4, 0x77, 0x48, 0x28, 0x5c, 0x2a, 0x28, + 0x61, 0x6a, 0x3d, 0x35, 0xd5, 0xfc, 0xa3, 0x0e, 0x33, 0x9f, 0xb0, 0x09, 0xcb, 0xd0, 0x0a, 0xf6, + 0xa9, 0x4f, 0xb6, 0x12, 0x16, 0x56, 0xc2, 0x16, 0x99, 0x65, 0x9c, 0x87, 0xfa, 0xae, 0x1b, 0xc6, + 0xfb, 0x88, 0x6b, 0xdb, 0xe2, 0x04, 0xe3, 0x92, 0x91, 0xed, 0x72, 0x30, 0x9b, 0x16, 0x27, 0xc4, + 0x80, 0x66, 0x32, 0xdf, 0xab, 0x93, 0xb5, 0x59, 0x9a, 0xac, 0xe5, 0xd8, 0x80, 0xca, 0xd8, 0x78, + 0x01, 0x3a, 0x43, 0x8f, 0xee, 0xda, 0x9e, 0x45, 0x06, 0x47, 0xbd, 0x68, 0xb8, 0x1d, 0xc4, 0x08, + 0x64, 0xdd, 0x2a, 0xf1, 0xcd, 0x7f, 0x6b, 0x00, 0xd7, 0x42, 0x97, 0xf8, 0x0e, 0xba, 0xb1, 0xb0, + 0xa2, 0x68, 0xe5, 0x15, 0x65, 0x11, 0x1a, 0x21, 0x19, 0xd9, 0xe1, 0x41, 0x3a, 0x51, 0x38, 0x55, + 0x30, 0xbe, 0x56, 0x32, 0xfe, 0x55, 0x80, 0x3d, 0xec, 0x87, 0xe9, 0x41, 0xb7, 0xb2, 0x59, 0x5d, + 0x5a, 0xa4, 0x57, 0x53, 0x44, 0x2d, 0xa9, 0x39, 0x9b, 0x85, 0xb6, 0xe3, 0x88, 0x60, 0xaf, 0xf3, + 0x59, 0x98, 0x31, 0x2a, 0x62, 0xbd, 0x71, 0x4c, 0xac, 0x4f, 0x67, 0x01, 0xf4, 0x2f, 0x0d, 0x9a, + 0xeb, 0x9e, 0x3d, 0x38, 0x98, 0x70, 0xe8, 0xea, 0x10, 0xf5, 0xd2, 0x10, 0xaf, 0x43, 0x7b, 0x97, + 0xa9, 0x4b, 0x87, 0x80, 0x5e, 0x68, 0x5d, 0xf9, 0x42, 0xc5, 0x28, 0xd5, 0x09, 0x64, 0xa9, 0x72, + 0xea, 0x70, 0xa7, 0x4e, 0x1e, 0x6e, 0xfd, 0x98, 0xe1, 0x36, 0xb2, 0xe1, 0xfe, 0x55, 0x87, 0x59, + 0x5c, 0x14, 0x2d, 0x72, 0x98, 0x90, 0x28, 0x36, 0x5e, 0x87, 0x99, 0x24, 0x35, 0x55, 0x9b, 0xd4, + 0xd4, 0x4c, 0xc4, 0x78, 0x45, 0xac, 0xe5, 0x28, 0xaf, 0xa3, 0xfc, 0x85, 0x0a, 0xf9, 0x2c, 0x91, + 0x5a, 0x79, 0x73, 0x96, 0xf7, 0xf6, 0x6d, 0xdf, 0xf1, 0x88, 0x45, 0xa2, 0xc4, 0x8b, 0xc5, 0xca, + 0xaa, 0xf0, 0x78, 0xa4, 0x1d, 0xf6, 0xa2, 0xa1, 0xc8, 0x8a, 0x82, 0x62, 0xde, 0xe1, 0xed, 0xd8, + 0x27, 0x3e, 0xf4, 0x9c, 0xc1, 0x26, 0x75, 0x48, 0x0e, 0x11, 0x21, 0x3e, 0x05, 0x53, 0x32, 0xef, + 0x53, 0x78, 0x8d, 0x07, 0x82, 0xc2, 0x63, 0x10, 0x73, 0x1a, 0x15, 0xf0, 0x74, 0x28, 0x71, 0x8a, + 0xd9, 0xd0, 0xfc, 0x47, 0x0d, 0xda, 0x7c, 0xfa, 0xa4, 0x4e, 0xbd, 0xc8, 0xe2, 0x9c, 0x8e, 0x94, + 0x28, 0x92, 0x38, 0xcc, 0x0a, 0x46, 0x6d, 0xa9, 0x8b, 0x92, 0xc2, 0x63, 0xa1, 0xc8, 0xe8, 0x6b, + 0xca, 0xe2, 0x24, 0xb3, 0xd2, 0x5e, 0xae, 0xcb, 0x8b, 0x94, 0xc4, 0x61, 0xcb, 0x5e, 0x4c, 0x95, + 0xe8, 0xc8, 0x68, 0x26, 0x1b, 0xd3, 0xac, 0x7f, 0x1e, 0x1f, 0x12, 0x87, 0xf9, 0x37, 0xa6, 0x69, + 0xdf, 0xdc, 0x49, 0x39, 0x83, 0x6b, 0x16, 0xfd, 0xf2, 0xb4, 0x93, 0xd1, 0x25, 0x54, 0x9b, 0xc7, + 0xa2, 0x0a, 0x0a, 0xaa, 0xea, 0xe4, 0x6a, 0x95, 0x26, 0xd7, 0x0a, 0xb4, 0xb9, 0x9e, 0x34, 0xe8, + 0x67, 0x79, 0x7d, 0xa1, 0x30, 0xd5, 0xd8, 0x68, 0x17, 0x63, 0x43, 0x45, 0x77, 0x6e, 0x0c, 0xba, + 0xf3, 0x19, 0xba, 0xbf, 0xd6, 0x01, 0x36, 0x49, 0x60, 0x87, 0xf1, 0x88, 0xf8, 0x31, 0x1b, 0x9e, + 0x93, 0x51, 0x19, 0xb8, 0x0a, 0x4f, 0xce, 0x29, 0xba, 0x9a, 0x53, 0x0c, 0x98, 0x42, 0x87, 0x73, + 0x34, 0xf1, 0x37, 0x73, 0x66, 0x60, 0x87, 0x5c, 0x1b, 0x0f, 0xf2, 0x8c, 0x66, 0x39, 0x83, 0x86, + 0x8e, 0xc8, 0x32, 0x75, 0x8b, 0x13, 0x6c, 0xf2, 0xe7, 0xfd, 0x61, 0x15, 0xd5, 0xe0, 0x39, 0x40, + 0xe5, 0x9e, 0x58, 0xf8, 0xbd, 0x00, 0x9d, 0x28, 0xd9, 0xcd, 0x07, 0xb7, 0x95, 0x8c, 0x44, 0xb8, + 0x97, 0xf8, 0xcc, 0xa9, 0xbc, 0x22, 0x64, 0x8d, 0x78, 0x5a, 0xca, 0x19, 0xc5, 0x0a, 0xc2, 0xfc, + 0x50, 0x87, 0xce, 0x76, 0x38, 0xb4, 0x7d, 0xf7, 0xbb, 0x58, 0x8c, 0xe1, 0x02, 0x7e, 0x9a, 0xf4, + 0xbc, 0x0c, 0x2d, 0xe2, 0x0f, 0x3d, 0x37, 0xda, 0xdf, 0xca, 0xfd, 0x26, 0xb3, 0x64, 0x67, 0x4f, + 0x8d, 0x4b, 0xe0, 0x75, 0x25, 0x81, 0x2f, 0x42, 0x63, 0x44, 0x77, 0x5d, 0x2f, 0x8d, 0x7b, 0x41, + 0x61, 0xcc, 0x13, 0x8f, 0x60, 0x26, 0xcf, 0x62, 0x3e, 0x65, 0xe4, 0x49, 0x7d, 0xa6, 0x32, 0xa9, + 0x37, 0xe5, 0xa4, 0xae, 0x3a, 0x1e, 0x4a, 0x8e, 0xe7, 0xee, 0x6a, 0x65, 0xee, 0xfa, 0x83, 0x06, + 0x9d, 0xdc, 0xdd, 0xbc, 0x5e, 0x1d, 0xeb, 0xae, 0x62, 0x04, 0xea, 0x15, 0x11, 0x98, 0xc5, 0x4d, + 0x4d, 0x8e, 0x1b, 0x16, 0x69, 0x34, 0x72, 0xa5, 0x4d, 0x46, 0x46, 0xb3, 0xde, 0x3c, 0x62, 0x4b, + 0xce, 0xe2, 0x94, 0x54, 0xea, 0x37, 0x94, 0x52, 0xbf, 0x98, 0x47, 0x7f, 0xa7, 0xc1, 0x79, 0x86, + 0x72, 0x69, 0x18, 0xdb, 0xd0, 0xa1, 0x85, 0x48, 0x10, 0x89, 0xe6, 0xd9, 0x8a, 0x44, 0x51, 0x0c, + 0x1a, 0xab, 0x24, 0xcc, 0x14, 0x3a, 0x85, 0x4e, 0x44, 0xe6, 0xa9, 0x52, 0x58, 0xb4, 0xc7, 0x2a, + 0x09, 0x9b, 0xbf, 0xd7, 0xa0, 0xc3, 0x53, 0x9b, 0x34, 0xcf, 0xcf, 0xdc, 0xec, 0x77, 0xe1, 0x7c, + 0xb1, 0xe7, 0x5b, 0x6e, 0x14, 0x77, 0xf5, 0xe5, 0xda, 0xa4, 0xa6, 0x57, 0x2a, 0x60, 0x73, 0xed, + 0xe9, 0x9d, 0xc4, 0xf3, 0x7a, 0x24, 0x8a, 0xec, 0x21, 0x59, 0x7f, 0xd0, 0x27, 0x87, 0xec, 0x83, + 0x45, 0x0e, 0xc7, 0xc6, 0x10, 0xab, 0x73, 0xb0, 0x50, 0x70, 0xa9, 0x9f, 0x85, 0x90, 0xcc, 0x62, + 0xd3, 0x2a, 0xe2, 0x7a, 0xba, 0xb5, 0xe5, 0x1a, 0x4b, 0xa1, 0x82, 0x34, 0xbe, 0x03, 0xb3, 0x98, + 0xc3, 0x45, 0x37, 0xdd, 0x29, 0x1c, 0xc0, 0x6b, 0x95, 0x55, 0x43, 0xa5, 0x55, 0xbc, 0x1a, 0x10, + 0xf4, 0x1b, 0x7e, 0x1c, 0x3e, 0xb0, 0x14, 0x8d, 0x4b, 0xef, 0xc1, 0x42, 0xa9, 0x89, 0xd1, 0x81, + 0xda, 0x01, 0x79, 0x20, 0xc6, 0xc1, 0x7e, 0x1a, 0x2f, 0x42, 0xfd, 0x88, 0xed, 0xfd, 0x04, 0xfa, + 0x4b, 0x15, 0x16, 0x08, 0x9b, 0x2d, 0xde, 0xf0, 0x15, 0xfd, 0x6b, 0x9a, 0xf9, 0x6c, 0x36, 0x30, + 0x79, 0x8c, 0x9a, 0x32, 0x46, 0xf3, 0x2d, 0x68, 0xf5, 0xa2, 0xe1, 0xa6, 0x1d, 0xdb, 0xd8, 0xf0, + 0x35, 0x68, 0x8d, 0x72, 0x12, 0x1b, 0x57, 0xf7, 0x27, 0x84, 0x2c, 0xb9, 0xb9, 0xf9, 0x17, 0x1d, + 0xba, 0xd5, 0xae, 0x88, 0x02, 0x66, 0x03, 0x09, 0xc3, 0x0d, 0xea, 0x10, 0x1c, 0x5a, 0xdd, 0x4a, + 0x49, 0x86, 0x1d, 0x09, 0x43, 0x96, 0xc3, 0x44, 0x91, 0xcd, 0x29, 0x63, 0x15, 0xa6, 0xbc, 0x14, + 0x96, 0xe3, 0xad, 0xc0, 0x76, 0xc6, 0x08, 0x3a, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xb5, 0x89, + 0x31, 0x8b, 0x02, 0x0e, 0x9a, 0xa4, 0x83, 0x03, 0x57, 0x52, 0xbd, 0x34, 0x80, 0xa7, 0x2a, 0x9b, + 0x56, 0x00, 0xf8, 0x55, 0x15, 0xc0, 0x8b, 0xe3, 0x87, 0x52, 0x04, 0x31, 0x00, 0xe3, 0x3a, 0x89, + 0x7b, 0xf6, 0xfd, 0x35, 0xdf, 0xe9, 0xb9, 0x7e, 0x9f, 0x1c, 0xb2, 0x68, 0x5f, 0x86, 0x96, 0xd8, + 0xca, 0x67, 0x30, 0x35, 0x2d, 0x99, 0x35, 0x76, 0x87, 0x5f, 0x98, 0x0f, 0xb5, 0xd2, 0x7c, 0x30, + 0xaf, 0xc2, 0xac, 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x7e, 0x9f, 0x1c, 0xe2, 0x80, 0xda, 0x96, 0xa0, + 0x90, 0x8f, 0x2d, 0xc4, 0xde, 0x40, 0x50, 0xe6, 0x9f, 0x75, 0x38, 0x57, 0x32, 0x39, 0x0a, 0x1e, + 0x56, 0x8f, 0x1c, 0x2f, 0xb5, 0x71, 0xf1, 0x32, 0xa5, 0xc4, 0xcb, 0x01, 0x2c, 0x70, 0x90, 0xa4, + 0xae, 0xbb, 0x75, 0x0c, 0x80, 0xd7, 0xab, 0x4a, 0xf5, 0xb2, 0x91, 0x02, 0x7b, 0x89, 0xcb, 0xc1, + 0x2f, 0xeb, 0x5d, 0x22, 0xb0, 0x58, 0xdd, 0xb8, 0x02, 0xfe, 0x97, 0x55, 0xf8, 0x3f, 0x5f, 0x05, + 0xbf, 0x6c, 0x89, 0x84, 0xff, 0x21, 0xcc, 0xb3, 0x45, 0xb5, 0x4f, 0x7c, 0xa7, 0x17, 0x0d, 0xd1, + 0x91, 0xcb, 0xd0, 0xe2, 0xf2, 0xbd, 0x68, 0x98, 0x6f, 0xdd, 0x24, 0x16, 0x6b, 0x31, 0xf0, 0x5c, + 0xb6, 0x78, 0x62, 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x96, 0x20, 0x23, 0x22, 0x4e, 0x3d, 0x98, 0x77, + 0x6b, 0x56, 0x46, 0x9b, 0x1f, 0x34, 0x60, 0x5a, 0x44, 0x23, 0x26, 0x45, 0xb6, 0x5b, 0xce, 0x96, + 0x55, 0x4e, 0xf1, 0xba, 0x76, 0x70, 0x94, 0x87, 0x17, 0xa7, 0xe4, 0x23, 0xa7, 0x9a, 0x7a, 0xe4, + 0x54, 0xb0, 0x69, 0xaa, 0x6c, 0x53, 0x61, 0x5c, 0xf5, 0xf2, 0xb8, 0x58, 0x19, 0x87, 0x95, 0xcd, + 0x8e, 0x67, 0xc7, 0x7b, 0x34, 0x1c, 0x89, 0xcd, 0x6f, 0xdd, 0x2a, 0xf1, 0x59, 0xe9, 0xc8, 0x79, + 0x59, 0xed, 0xcf, 0x53, 0x78, 0x81, 0xcb, 0x2a, 0x6d, 0xce, 0x49, 0xf7, 0x00, 0xfc, 0x84, 0x42, + 0x65, 0x72, 0xdb, 0xa2, 0xc8, 0xa5, 0x3e, 0x56, 0xa1, 0xbc, 0xd4, 0x97, 0x59, 0x6c, 0xe4, 0xa3, + 0x68, 0x78, 0x2d, 0xa4, 0x23, 0x71, 0x4e, 0x91, 0x92, 0x38, 0x72, 0xea, 0xc7, 0x69, 0x05, 0xcb, + 0xcf, 0x26, 0x64, 0x16, 0x93, 0x15, 0x24, 0xd6, 0xf9, 0xb3, 0x56, 0x4a, 0xb2, 0x58, 0x8a, 0xc8, + 0xa1, 0x28, 0xde, 0xd9, 0x4f, 0x05, 0xb9, 0x79, 0x15, 0xb9, 0x42, 0x35, 0xd6, 0xc1, 0xaf, 0x72, + 0x35, 0x96, 0x97, 0x38, 0x0b, 0x4a, 0x89, 0xb3, 0x06, 0xd3, 0x34, 0x60, 0xd3, 0x3f, 0xea, 0x1a, + 0x38, 0x5d, 0x9e, 0x1f, 0xbf, 0x40, 0xad, 0x6e, 0xf3, 0x96, 0x7c, 0x62, 0xa4, 0x72, 0xc6, 0x2d, + 0x98, 0xa7, 0x7b, 0x7b, 0x9e, 0xeb, 0x93, 0x9d, 0x24, 0xda, 0xc7, 0x4d, 0xf2, 0x39, 0x0c, 0x76, + 0xb3, 0xaa, 0x88, 0x50, 0x5b, 0x5a, 0x45, 0x51, 0x56, 0xf9, 0xd9, 0x31, 0xdf, 0xe4, 0xe0, 0x02, + 0x77, 0x1e, 0x17, 0x38, 0x85, 0x87, 0x67, 0x77, 0xd2, 0x42, 0xff, 0x14, 0x3a, 0x4e, 0x66, 0x2d, + 0xbd, 0x02, 0xb3, 0xb2, 0xb1, 0x15, 0x13, 0xf3, 0xbc, 0x3c, 0x31, 0x67, 0xe4, 0x79, 0xf7, 0x63, + 0x0d, 0xe6, 0x0b, 0x66, 0xb2, 0xd6, 0xb1, 0x1b, 0x7b, 0x44, 0x68, 0xe0, 0x04, 0xdb, 0xe9, 0x38, + 0x24, 0x1a, 0x88, 0x89, 0x80, 0xbf, 0x45, 0xcd, 0x58, 0xcb, 0xce, 0xba, 0x4c, 0x98, 0x75, 0xb7, + 0xfb, 0x4c, 0x51, 0x9f, 0x26, 0xbe, 0x93, 0x1d, 0x7c, 0x4b, 0x3c, 0x16, 0x88, 0xee, 0x76, 0x7f, + 0xdd, 0x76, 0x86, 0x84, 0x1f, 0x4f, 0xd7, 0xd1, 0x26, 0x95, 0x69, 0x3a, 0x30, 0x73, 0xdb, 0x0d, + 0xa2, 0x0d, 0x3a, 0x1a, 0x31, 0x38, 0x1d, 0x12, 0xb3, 0x9a, 0x5c, 0xc3, 0xc1, 0x0b, 0x8a, 0x79, + 0xc6, 0x21, 0x7b, 0x76, 0xe2, 0xc5, 0xac, 0x69, 0x3a, 0xfd, 0x25, 0x16, 0x9e, 0xa7, 0x46, 0xd4, + 0xdf, 0xe4, 0xd2, 0xdc, 0x4e, 0x89, 0x63, 0xfe, 0x49, 0x87, 0x0e, 0xae, 0x6e, 0x1b, 0x18, 0x3c, + 0x0e, 0x0a, 0x5d, 0x81, 0x3a, 0x4e, 0x66, 0x51, 0x1d, 0x1e, 0x7f, 0xfa, 0xc1, 0x9b, 0x1a, 0x57, + 0xa1, 0x41, 0x03, 0x2c, 0x29, 0xf9, 0xd2, 0xf7, 0xdc, 0x38, 0x21, 0xf5, 0xe8, 0xda, 0x12, 0x52, + 0xc6, 0x35, 0x80, 0x51, 0x5e, 0x41, 0xf2, 0x42, 0x60, 0x52, 0x1d, 0x92, 0x24, 0x73, 0x6e, 0x96, + 0xe3, 0xb2, 0xf3, 0xeb, 0x9a, 0xa5, 0x32, 0x8d, 0x2d, 0x98, 0x43, 0xb3, 0xb7, 0xd3, 0x63, 0x30, + 0xc4, 0x60, 0xf2, 0x1e, 0x0b, 0xd2, 0xe6, 0xcf, 0x34, 0xe1, 0x46, 0xf6, 0xb5, 0x4f, 0xb8, 0xef, + 0x73, 0x97, 0x68, 0xa7, 0x72, 0xc9, 0x12, 0xcc, 0x8c, 0x12, 0xe9, 0x54, 0xae, 0x66, 0x65, 0x74, + 0x0e, 0x51, 0x6d, 0x62, 0x88, 0xcc, 0x9f, 0x6b, 0xd0, 0x7d, 0x93, 0xba, 0x3e, 0x7e, 0x58, 0x0b, + 0x02, 0x4f, 0x5c, 0x2b, 0x9c, 0x1a, 0xf3, 0x6f, 0x40, 0xd3, 0xe6, 0x6a, 0xfc, 0x58, 0xc0, 0x3e, + 0xc1, 0x49, 0x5b, 0x2e, 0x23, 0x1d, 0x9a, 0xd4, 0xe4, 0x43, 0x13, 0xf3, 0x23, 0x0d, 0xe6, 0xb8, + 0x53, 0xde, 0x4e, 0xdc, 0xf8, 0xd4, 0xf6, 0xad, 0xc3, 0xcc, 0x61, 0xe2, 0xc6, 0xa7, 0x88, 0xca, + 0x4c, 0xae, 0x1c, 0x4f, 0xb5, 0x8a, 0x78, 0x32, 0x7f, 0xa5, 0xc1, 0x85, 0xa2, 0x5b, 0xd7, 0x06, + 0x03, 0x12, 0x3c, 0xca, 0x29, 0xa5, 0x1c, 0x1a, 0x4d, 0x15, 0x0e, 0x8d, 0x2a, 0x4d, 0xb6, 0xc8, + 0xfb, 0x64, 0xf0, 0xf8, 0x9a, 0xfc, 0x7d, 0x1d, 0x3e, 0x7b, 0x3d, 0x9b, 0x78, 0xb7, 0x43, 0xdb, + 0x8f, 0xf6, 0x48, 0x18, 0x3e, 0x42, 0x7b, 0x6f, 0x41, 0xdb, 0x27, 0xf7, 0x72, 0x9b, 0xc4, 0x74, + 0x9c, 0x54, 0x8d, 0x2a, 0x3c, 0xd9, 0xda, 0x65, 0xfe, 0x47, 0x83, 0x0e, 0xd7, 0xf3, 0x96, 0x3b, + 0x38, 0x78, 0x84, 0x83, 0xdf, 0x82, 0xb9, 0x03, 0xb4, 0x80, 0x51, 0xa7, 0x58, 0xb6, 0x0b, 0xd2, + 0x13, 0x0e, 0xff, 0xbf, 0x1a, 0x2c, 0x70, 0x45, 0x37, 0xfd, 0x23, 0xf7, 0x51, 0x06, 0xeb, 0x0e, + 0xcc, 0xbb, 0xdc, 0x84, 0x53, 0x3a, 0xa0, 0x28, 0x3e, 0xa1, 0x07, 0x7e, 0xab, 0xc1, 0x3c, 0xd7, + 0xf4, 0x86, 0x1f, 0x93, 0xf0, 0xd4, 0xe3, 0xbf, 0x01, 0x2d, 0xe2, 0xc7, 0xa1, 0xed, 0x9f, 0x66, + 0x85, 0x94, 0x45, 0x27, 0x5c, 0x24, 0x3f, 0xd2, 0xc0, 0x40, 0x55, 0x9b, 0x6e, 0x34, 0x72, 0xa3, + 0xe8, 0x11, 0x42, 0x37, 0x99, 0xc1, 0x3f, 0xd1, 0xe1, 0xbc, 0xa4, 0xa5, 0x97, 0xc4, 0x8f, 0xbb, + 0xc9, 0xc6, 0x26, 0x34, 0x59, 0x8d, 0x20, 0xdf, 0x46, 0x4e, 0xda, 0x51, 0x2e, 0xc8, 0xaa, 0x58, + 0x24, 0xfa, 0x64, 0x40, 0x7d, 0x27, 0xc2, 0xe2, 0xa8, 0x6d, 0x29, 0x3c, 0xb6, 0x0c, 0x2d, 0x49, + 0x6a, 0x36, 0x6c, 0x7f, 0x40, 0xbc, 0x27, 0xc6, 0x45, 0xe6, 0x2f, 0x35, 0x98, 0xe3, 0x4d, 0x1e, + 0xff, 0x21, 0xb3, 0x5c, 0xcf, 0x03, 0xf9, 0x53, 0x83, 0x12, 0x0b, 0xaf, 0x45, 0x49, 0x8b, 0x5c, + 0x57, 0x3f, 0xbe, 0xa1, 0x75, 0x03, 0x5a, 0x83, 0x7d, 0xdb, 0x1f, 0x9e, 0x2a, 0xb8, 0x64, 0x51, + 0x33, 0x86, 0xa7, 0xe5, 0x03, 0xf8, 0x0d, 0xfe, 0x09, 0x87, 0xff, 0x52, 0x61, 0x28, 0xc7, 0xbe, + 0x36, 0x78, 0x38, 0xa7, 0x1f, 0xc0, 0x02, 0xbf, 0xf5, 0x95, 0x6a, 0x42, 0xa3, 0x0b, 0xd3, 0xb6, + 0xc3, 0x8f, 0x21, 0x34, 0x14, 0x4a, 0x49, 0xf5, 0x3e, 0x5f, 0xbc, 0x13, 0xcb, 0xef, 0xf3, 0x2f, + 0x02, 0xd8, 0x8e, 0xf3, 0x2e, 0x0d, 0x1d, 0xd7, 0x4f, 0x0b, 0x7c, 0x89, 0x63, 0xbe, 0x09, 0xb3, + 0xd7, 0x42, 0x3a, 0xba, 0x2d, 0xdd, 0xdf, 0x1e, 0x7b, 0xc3, 0x2c, 0xdf, 0xfd, 0xea, 0xea, 0xdd, + 0xaf, 0xf9, 0x6d, 0x78, 0xaa, 0x64, 0x38, 0x3a, 0x6b, 0x83, 0x5f, 0x4b, 0xa7, 0x9d, 0x88, 0x90, + 0xa9, 0x3a, 0x97, 0x93, 0x6d, 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0x29, 0xa9, 0x5f, 0x0b, + 0x82, 0x90, 0x1e, 0x09, 0x4c, 0xce, 0xa2, 0x1b, 0xb5, 0xf8, 0xd5, 0x8b, 0xc5, 0x6f, 0xa5, 0x11, + 0x4a, 0xc1, 0xfe, 0x09, 0x18, 0xf1, 0x0b, 0x0d, 0xe6, 0x85, 0x11, 0x8e, 0x23, 0xba, 0x7d, 0x19, + 0x1a, 0xfc, 0x49, 0x8b, 0xe8, 0xf0, 0x99, 0xca, 0x0e, 0xd3, 0xa7, 0x38, 0x96, 0x68, 0x5c, 0x8e, + 0x48, 0xbd, 0x6a, 0x46, 0x7d, 0x3d, 0x0b, 0xf6, 0x89, 0x1f, 0x9d, 0x08, 0x01, 0xf3, 0x9b, 0x69, + 0x30, 0x6f, 0x12, 0x8f, 0x9c, 0xa5, 0x8f, 0xcc, 0x3b, 0x30, 0x87, 0xef, 0x6b, 0x72, 0x1f, 0x9c, + 0x89, 0xda, 0x77, 0xa1, 0x83, 0x6a, 0xcf, 0xdc, 0xde, 0x6c, 0x76, 0x30, 0xff, 0xc8, 0x4b, 0xc9, + 0x99, 0x68, 0xff, 0x0a, 0x9c, 0x4b, 0x7d, 0x7f, 0x27, 0x70, 0xb2, 0x43, 0xa4, 0x31, 0xf7, 0x74, + 0xe6, 0x8b, 0xb0, 0xb8, 0x41, 0xfd, 0x23, 0x12, 0x46, 0xfc, 0x22, 0x11, 0x45, 0x52, 0x09, 0x65, + 0xf2, 0x0b, 0xca, 0x7c, 0x1f, 0x96, 0x64, 0x89, 0x3e, 0x89, 0x77, 0x42, 0xf7, 0x48, 0x92, 0x12, + 0x07, 0xd4, 0x9a, 0x72, 0x40, 0x9d, 0x1f, 0x68, 0xeb, 0xca, 0x81, 0xf6, 0x05, 0x68, 0xba, 0x91, + 0x50, 0x80, 0x41, 0x35, 0x63, 0xe5, 0x0c, 0xd3, 0x86, 0x05, 0xee, 0x7e, 0x71, 0x61, 0x84, 0x5d, + 0x2c, 0xc1, 0x0c, 0x8f, 0xa9, 0xac, 0x93, 0x8c, 0x1e, 0x7b, 0xfd, 0x32, 0xf6, 0xb2, 0xd1, 0xec, + 0xc3, 0x82, 0x78, 0x54, 0xb3, 0x63, 0x0f, 0x5d, 0x9f, 0x2f, 0xb2, 0x17, 0x01, 0x02, 0x7b, 0x98, + 0x3e, 0xc0, 0xe3, 0xd7, 0x66, 0x12, 0x87, 0x7d, 0x8f, 0xf6, 0xe9, 0x3d, 0xf1, 0x5d, 0xe7, 0xdf, + 0x73, 0x8e, 0xf9, 0x0e, 0x18, 0x16, 0x89, 0x02, 0xea, 0x47, 0x44, 0xd2, 0xba, 0x0c, 0xad, 0x8d, + 0x24, 0x0c, 0x89, 0xcf, 0xba, 0x4a, 0x5f, 0x98, 0xc9, 0x2c, 0xa6, 0xb7, 0x9f, 0xeb, 0xe5, 0x47, + 0xec, 0x12, 0xc7, 0xfc, 0x69, 0x0d, 0x9a, 0x7d, 0x77, 0xe8, 0xdb, 0x9e, 0x45, 0x0e, 0x8d, 0xd7, + 0xa0, 0xc1, 0xb7, 0x2c, 0x22, 0x52, 0xaa, 0x8e, 0x7c, 0x79, 0x6b, 0xbe, 0x37, 0xb3, 0xc8, 0xe1, + 0x8d, 0xcf, 0x58, 0x42, 0xc6, 0x78, 0x1b, 0xda, 0xfc, 0xd7, 0x4d, 0x7e, 0x04, 0x25, 0xf2, 0xd7, + 0x17, 0x4f, 0x50, 0x22, 0x5a, 0x73, 0x5d, 0xaa, 0x06, 0x66, 0xd0, 0x00, 0x4b, 0x1a, 0xb1, 0x3c, + 0x8c, 0x37, 0x88, 0x57, 0x3e, 0xc2, 0x20, 0x2e, 0xc3, 0xa4, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, + 0xbc, 0x34, 0x3f, 0xcb, 0x11, 0xd2, 0x5c, 0x86, 0x49, 0xef, 0x27, 0xfe, 0xf0, 0x4e, 0x20, 0xce, + 0x0e, 0xc7, 0x4b, 0xdf, 0xc0, 0x66, 0x42, 0x9a, 0xcb, 0x30, 0xe9, 0x10, 0x17, 0x6f, 0x74, 0xfa, + 0x71, 0xd2, 0x7c, 0x8d, 0x17, 0xd2, 0x5c, 0x66, 0xbd, 0x09, 0xd3, 0x81, 0xfd, 0xc0, 0xa3, 0xb6, + 0x63, 0x7e, 0x58, 0x03, 0x48, 0x1b, 0x46, 0x58, 0xe8, 0x28, 0x10, 0xad, 0x9c, 0x08, 0x51, 0xe0, + 0x3d, 0x90, 0x40, 0xea, 0x57, 0x83, 0xf4, 0xa5, 0x49, 0x41, 0xe2, 0xda, 0x0a, 0x30, 0x5d, 0x2d, + 0xc0, 0xb4, 0x72, 0x22, 0x4c, 0xc2, 0x28, 0x01, 0xd4, 0xd5, 0x02, 0x50, 0x2b, 0x27, 0x02, 0x25, + 0xe4, 0x05, 0x54, 0x57, 0x0b, 0x50, 0xad, 0x9c, 0x08, 0x95, 0x90, 0x17, 0x60, 0x5d, 0x2d, 0x80, + 0xb5, 0x72, 0x22, 0x58, 0x42, 0xbe, 0x0c, 0xd7, 0xdf, 0x74, 0x98, 0x43, 0x97, 0xf1, 0x5b, 0x58, + 0x7f, 0x8f, 0xe2, 0x7d, 0x00, 0xba, 0x4b, 0x7d, 0xa3, 0xa9, 0x32, 0x8d, 0x2f, 0xc3, 0x02, 0x67, + 0x10, 0xe9, 0xba, 0x44, 0xc7, 0xeb, 0x92, 0xf2, 0x07, 0xbc, 0x20, 0x4a, 0xa2, 0x98, 0x8e, 0x36, + 0xed, 0xd8, 0x4e, 0x8b, 0xaf, 0x9c, 0x23, 0x5f, 0xdf, 0x4d, 0x95, 0x5e, 0x8c, 0x87, 0x94, 0x8e, + 0xb2, 0x7b, 0x39, 0x41, 0x31, 0x89, 0xd8, 0x1d, 0x11, 0x9a, 0xc4, 0x62, 0x99, 0x48, 0x49, 0xfe, + 0x8e, 0xca, 0x71, 0x6d, 0xbc, 0xf4, 0x12, 0x8f, 0x8c, 0x32, 0x06, 0xae, 0x6c, 0xf9, 0x25, 0x9e, + 0x78, 0xd1, 0x9d, 0x73, 0x26, 0xb8, 0x70, 0xc3, 0x3f, 0x13, 0xb8, 0xb1, 0x2b, 0x3f, 0x3e, 0xaa, + 0x5b, 0x0a, 0xcf, 0xfc, 0xa7, 0x06, 0xe7, 0x76, 0xec, 0x30, 0x76, 0x07, 0x6e, 0x60, 0xfb, 0x71, + 0x8f, 0xc4, 0x36, 0x8e, 0x53, 0x79, 0xcc, 0xa9, 0x3d, 0xdc, 0x63, 0xce, 0x1d, 0x98, 0x1f, 0xaa, + 0x3b, 0x90, 0x87, 0xdc, 0x3c, 0x14, 0xc5, 0x95, 0x97, 0xa9, 0xb5, 0x87, 0x7e, 0x99, 0x6a, 0xfe, + 0x50, 0x87, 0xf9, 0xc2, 0xf2, 0x7a, 0x6c, 0x6e, 0x5a, 0x03, 0x70, 0xb3, 0x50, 0x3b, 0xe6, 0x80, + 0x5e, 0x8d, 0x47, 0x4b, 0x12, 0xaa, 0xba, 0xed, 0xab, 0x9d, 0xfe, 0xb6, 0xef, 0x06, 0xb4, 0x82, + 0x1c, 0xa4, 0x63, 0xf6, 0x47, 0x15, 0x50, 0x5a, 0xb2, 0xa8, 0xf9, 0x1e, 0x2c, 0x94, 0x56, 0x31, + 0xbc, 0xb6, 0xa3, 0x07, 0xc4, 0xcf, 0xae, 0xed, 0x18, 0x21, 0x05, 0xb4, 0x5e, 0x0c, 0x68, 0xcf, + 0x3d, 0x92, 0x9f, 0xc9, 0x0b, 0xd2, 0xfc, 0x91, 0x0e, 0x8b, 0xd5, 0x19, 0xe8, 0x49, 0x75, 0xf7, + 0x2e, 0x74, 0xc7, 0xad, 0xf6, 0x67, 0xe6, 0xf5, 0x3c, 0xba, 0xb3, 0x5c, 0xfd, 0xa4, 0xba, 0xfb, + 0x5c, 0x1a, 0xdd, 0x52, 0x3a, 0x34, 0x7f, 0x93, 0xf9, 0x27, 0xab, 0x46, 0x9e, 0x50, 0xff, 0x18, + 0x2f, 0x40, 0x87, 0x0f, 0x53, 0x7a, 0x1e, 0xc2, 0x8b, 0xdb, 0x12, 0x3f, 0x5f, 0x29, 0xa4, 0xd2, + 0xe0, 0xcc, 0x62, 0xf6, 0x63, 0x2d, 0xc5, 0x24, 0xab, 0xf1, 0x3e, 0x55, 0x98, 0xe4, 0x91, 0x26, + 0x15, 0x3e, 0x52, 0xa4, 0x65, 0xb5, 0xe7, 0xff, 0x23, 0xed, 0xe4, 0x48, 0xcb, 0x7c, 0x29, 0x15, + 0x81, 0xe6, 0xf7, 0xa0, 0xbd, 0x49, 0xbc, 0x5e, 0x34, 0x4c, 0xdf, 0xaf, 0x9e, 0xe9, 0x66, 0xb2, + 0xf8, 0xca, 0x6f, 0xaa, 0xfc, 0xca, 0x6f, 0x1d, 0xe6, 0x64, 0x03, 0x4e, 0xf3, 0x3e, 0x73, 0xfd, + 0xc2, 0xb7, 0x96, 0x56, 0xc5, 0x7f, 0x4a, 0x5f, 0x2d, 0x39, 0x71, 0xb7, 0x81, 0x7f, 0x5e, 0x7c, + 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x71, 0xaf, 0x27, 0xac, 0x3a, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index c82785aac..22e5ea01b 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -1,7 +1,9 @@ syntax = "proto3"; +import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; option go_package = "./sdk_ws;server_api_params"; package server_api_params; + ////////////////////////////////base/////////////////////////////// @@ -18,6 +20,7 @@ message GroupInfo{ int32 status = 10; string creatorUserID = 11; int32 groupType = 12; + google.protobuf.Int32Value needVerification = 13; } From 87dbdc07d1907360e4ff15d90caaa27797d7ac06 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Fri, 24 Jun 2022 15:52:37 +0800 Subject: [PATCH 662/752] verification joining group chat --- cmd/Open-IM-SDK-Core | 2 +- pkg/base_info/group_api_struct.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 588c9bb77..6fc6be9eb 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 588c9bb77b9bd89a9261964006568b8655233cb6 +Subproject commit 6fc6be9eb996aec24781a3905aeb2c9550a5a041 diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index 1053bff52..20017ef57 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -164,7 +164,7 @@ type SetGroupInfoReq struct { FaceURL string `json:"faceURL"` Ex string `json:"ex"` OperationID string `json:"operationID" binding:"required"` - NeedVerification *int32 `json:"needVerification" binding "oneof=0 1"` + NeedVerification *int32 `json:"needVerification" binding "oneof=0 1 2"` } type SetGroupInfoResp struct { From 99062805ecb19173d5379af898bc3a8c9ad3af1b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Jun 2022 17:45:33 +0800 Subject: [PATCH 663/752] add swagger demo --- cmd/open_im_api/docs/docs.go | 85 +++++++++++ cmd/open_im_api/docs/swagger.json | 62 ++++++++ cmd/open_im_api/docs/swagger.yaml | 42 ++++++ cmd/open_im_api/main.go | 5 + config/config.yaml | 16 +- go.mod | 18 ++- go.sum | 140 +++++++++++++++--- internal/api/user/user.go | 9 ++ internal/demo/register/login.go | 3 +- internal/demo/register/reset_password.go | 5 +- internal/demo/register/send_code.go | 13 +- internal/demo/register/set_password.go | 3 +- internal/demo/register/verify.go | 3 +- pkg/common/config/config.go | 3 + pkg/common/db/model_struct.go | 1 + .../mysql_model/im_mysql_model/demo_model.go | 9 +- 16 files changed, 367 insertions(+), 50 deletions(-) create mode 100644 cmd/open_im_api/docs/docs.go create mode 100644 cmd/open_im_api/docs/swagger.json create mode 100644 cmd/open_im_api/docs/swagger.yaml diff --git a/cmd/open_im_api/docs/docs.go b/cmd/open_im_api/docs/docs.go new file mode 100644 index 000000000..b98043991 --- /dev/null +++ b/cmd/open_im_api/docs/docs.go @@ -0,0 +1,85 @@ +// Package docs GENERATED BY SWAG; DO NOT EDIT +// This file was generated by swaggo/swag +package docs + +import "github.com/swaggo/swag" + +const docTemplate = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{escape .Description}}", + "title": "{{.Title}}", + "termsOfService": "http://swagger.io/terms/", + "contact": { + "name": "API Support", + "url": "http://www.swagger.io/support", + "email": "support@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": { + "/hello": { + "get": { + "description": "向你说Hello", + "consumes": [ + "application/json" + ], + "tags": [ + "测试" + ], + "summary": "测试SayHello", + "parameters": [ + { + "type": "string", + "description": "人名", + "name": "who", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "{\"msg\": \"hello Razeen\"}", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"msg\": \"who are you\"}", + "schema": { + "type": "string" + } + } + } + } + } + }, + "securityDefinitions": { + "BasicAuth": { + "type": "basic" + } + } +}` + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ + Version: "1.0", + Host: "localhost:8080", + BasePath: "/api/v1", + Schemes: []string{}, + Title: "Swagger Example API", + Description: "This is a sample server celler server.", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, +} + +func init() { + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) +} diff --git a/cmd/open_im_api/docs/swagger.json b/cmd/open_im_api/docs/swagger.json new file mode 100644 index 000000000..732efb5a6 --- /dev/null +++ b/cmd/open_im_api/docs/swagger.json @@ -0,0 +1,62 @@ +{ + "swagger": "2.0", + "info": { + "description": "This is a sample server celler server.", + "title": "Swagger Example API", + "termsOfService": "http://swagger.io/terms/", + "contact": { + "name": "API Support", + "url": "http://www.swagger.io/support", + "email": "support@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "1.0" + }, + "host": "localhost:8080", + "basePath": "/api/v1", + "paths": { + "/hello": { + "get": { + "description": "向你说Hello", + "consumes": [ + "application/json" + ], + "tags": [ + "测试" + ], + "summary": "测试SayHello", + "parameters": [ + { + "type": "string", + "description": "人名", + "name": "who", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "{\"msg\": \"hello Razeen\"}", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"msg\": \"who are you\"}", + "schema": { + "type": "string" + } + } + } + } + } + }, + "securityDefinitions": { + "BasicAuth": { + "type": "basic" + } + } +} \ No newline at end of file diff --git a/cmd/open_im_api/docs/swagger.yaml b/cmd/open_im_api/docs/swagger.yaml new file mode 100644 index 000000000..3ce9f7598 --- /dev/null +++ b/cmd/open_im_api/docs/swagger.yaml @@ -0,0 +1,42 @@ +basePath: /api/v1 +host: localhost:8080 +info: + contact: + email: support@swagger.io + name: API Support + url: http://www.swagger.io/support + description: This is a sample server celler server. + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + termsOfService: http://swagger.io/terms/ + title: Swagger Example API + version: "1.0" +paths: + /hello: + get: + consumes: + - application/json + description: 向你说Hello + parameters: + - description: 人名 + in: query + name: who + required: true + type: string + responses: + "200": + description: '{"msg": "hello Razeen"}' + schema: + type: string + "400": + description: '{"msg": "who are you"}' + schema: + type: string + summary: 测试SayHello + tags: + - 测试 +securityDefinitions: + BasicAuth: + type: basic +swagger: "2.0" diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 8b3818aa8..8a78a2eda 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -1,6 +1,7 @@ package main import ( + _ "Open_IM/cmd/open_im_api/docs" apiAuth "Open_IM/internal/api/auth" apiChat "Open_IM/internal/api/chat" "Open_IM/internal/api/conversation" @@ -16,6 +17,9 @@ import ( "Open_IM/pkg/utils" "flag" "fmt" + //_ "github.com/razeencheng/demo-go/swaggo-gin/docs" + swaggerFiles "github.com/swaggo/files" + ginSwagger "github.com/swaggo/gin-swagger" "io" "os" "strconv" @@ -35,6 +39,7 @@ func main() { r.Use(utils.CorsHandler()) log.Info("load config: ", config.Config) + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) // user routing group, which handles user registration and login services userRouterGroup := r.Group("/user") { diff --git a/config/config.yaml b/config/config.yaml index d30e21afa..4f76d00c4 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -6,12 +6,12 @@ serverversion: 2.0.0 #---------------Infrastructure configuration---------------------# etcd: etcdSchema: openim #默认即可 - etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 + etcdAddr: [ 43.128.5.63:2379 ] #单机部署时,默认即可 k8sMod: false #开启k8s模式 使用pod里面环境变量请求services调用服务 而并非etcd mysql: - dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 + dbMysqlAddress: [ 103.116.45.174:13306 ] #mysql地址 目前仅支持单机,默认即可 dbMysqlUserName: root #mysql用户名,建议修改 dbMysqlPassword: openIM # mysql密码,建议修改 dbMysqlDatabaseName: openIM_v2 #默认即可 @@ -23,7 +23,7 @@ mysql: mongo: dbUri: ""#当dbUri值不为空则直接使用该值 - dbAddress: 127.0.0.1:37017 #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 + dbAddress: 103.116.45.174:37017 #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 dbDirect: false dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 @@ -34,7 +34,7 @@ mongo: dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 redis: - dbAddress: [ 127.0.0.1:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 + dbAddress: [ 103.116.45.174:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 @@ -43,16 +43,16 @@ redis: kafka: ws2mschat: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat" ws2mschatoffline: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat_offline" msgtomongo: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 topic: "msg_to_mongo" ms2pschat: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" consumergroupid: msgToTransfer: mongo diff --git a/go.mod b/go.mod index dc695a9bb..8f76f27d1 100644 --- a/go.mod +++ b/go.mod @@ -11,8 +11,8 @@ require ( github.com/antonfisher/nested-logrus-formatter v1.3.0 github.com/bwmarrin/snowflake v0.3.0 github.com/fatih/structs v1.1.0 - github.com/gin-gonic/gin v1.7.0 - github.com/go-playground/validator/v10 v10.4.1 + github.com/gin-gonic/gin v1.8.1 + github.com/go-playground/validator/v10 v10.11.0 github.com/go-redis/redis/v8 v8.11.5 github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/gogo/protobuf v1.3.2 @@ -32,24 +32,28 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 github.com/pkg/errors v0.9.1 + github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 - github.com/stretchr/testify v1.7.0 + github.com/stretchr/testify v1.7.2 + github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe + github.com/swaggo/gin-swagger v1.5.0 + github.com/swaggo/swag v1.8.3 github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca go.etcd.io/etcd/api/v3 v3.5.4 go.etcd.io/etcd/client/v3 v3.5.4 go.mongodb.org/mongo-driver v1.8.3 golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb - golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd + golang.org/x/net v0.0.0-20220622184535-263ec571b305 + golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 // indirect google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 // indirect google.golang.org/grpc v1.45.0 - google.golang.org/protobuf v1.27.1 + google.golang.org/protobuf v1.28.0 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect - gopkg.in/errgo.v2 v2.1.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/ini.v1 v1.66.2 // indirect gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b + gopkg.in/yaml.v3 v3.0.1 ) replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0 diff --git a/go.sum b/go.sum index 7b996f80d..4ade64fa9 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,17 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= 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= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/agiledragon/gomonkey/v2 v2.3.1/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -47,6 +52,7 @@ github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zK 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= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -70,6 +76,7 @@ github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmf github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -106,24 +113,46 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/gzip v0.0.5 h1:mhnVU32YnnBh2LPH2iqRqsA/eR7SAqRaD388jL2s/j0= +github.com/gin-contrib/gzip v0.0.5/go.mod h1:OPIK6HR0Um2vNmBUTlayD7qle4yVVRZT0PyhdUigrKk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/contrib v0.0.0-20201101042839-6a891bf89f19/go.mod h1:iqneQ2Df3omzIVTkIfn7c1acsVnMGiSLn4XF5Blh3Yg= +github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.6 h1:ich1RQ3WDbfoeTqTAb+5EIxNmpKVJZWBNah9RAT0jIQ= +github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= +github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -132,6 +161,8 @@ github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -161,6 +192,7 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -178,8 +210,10 @@ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= @@ -221,8 +255,9 @@ github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= @@ -239,14 +274,16 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4= @@ -256,10 +293,14 @@ github.com/lestrrat-go/strftime v1.0.4/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7 github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= @@ -278,8 +319,9 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ 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= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +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/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= @@ -304,8 +346,17 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= +github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -327,13 +378,20 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373 h1:GYc9bfYcmMu/AGU5SltIcp3RBwlH6ulrVgfgaJxk7YE= +github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373/go.mod h1:qHoO4lIChpZ5hj7O9KWRbRyUzzIQdlxLHF6v3l/yDig= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= 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/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 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= @@ -354,18 +412,31 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe h1:K8pHPVoTgxFJt1lXuIzzOX7zZhZFldJQK/CgKx9BFIc= +github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe/go.mod h1:lKJPbtWzJ9JhsTN1k1gZgleJWY/cqq0psdoMmaThG3w= +github.com/swaggo/gin-swagger v1.5.0 h1:hlLbxPj6qvbtX2wpbsZuOIlcnPRCUDGccA0zMKVNpME= +github.com/swaggo/gin-swagger v1.5.0/go.mod h1:3mKpZClKx7mnUGsiwJeEkNhnr1VHMkMaTAXIoFYUXrA= +github.com/swaggo/swag v1.8.1/go.mod h1:ugemnJsPZm/kRwFUnzBlbHRd0JY9zE1M4F+uy2pAaPQ= +github.com/swaggo/swag v1.8.2/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= +github.com/swaggo/swag v1.8.3 h1:3pZSSCQ//gAH88lfmxM3Cd1+JCsxV8Md6f36b9hrZ5s= +github.com/swaggo/swag v1.8.3/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= 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= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= @@ -380,6 +451,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg= @@ -406,8 +479,12 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -419,6 +496,9 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -443,10 +523,16 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220615171555-694bf12d69de/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220622184535-263ec571b305 h1:dAgbJ2SP4jD6XYfMNLVj0BF21jo2PjChrtGaAvF5M3I= +golang.org/x/net v0.0.0-20220622184535-263ec571b305/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -484,12 +570,20 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 h1:wEZYwx+kK+KlZ0hpvP2Ls1Xr4+RWnlzGFwPP0aiDjIU= +golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -515,6 +609,10 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -551,8 +649,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= @@ -562,7 +661,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= 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/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= @@ -585,8 +683,10 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/internal/api/user/user.go b/internal/api/user/user.go index ac40059d3..e272ae646 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -195,6 +195,14 @@ func GetUsersInfo(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 更新用户信息 +// @Description 向你说Hello +// @Tags 测试 +// @Accept json +// @Param who query string true "人名" +// @Success 200 {string} string "{"msg": "hello Razeen"}" +// @Failure 400 {string} string "{"msg": "who are you"}" +// @Router /update_user_info [post] func UpdateUserInfo(c *gin.Context) { params := api.UpdateSelfUserInfoReq{} if err := c.BindJSON(¶ms); err != nil { @@ -233,6 +241,7 @@ func UpdateUserInfo(c *gin.Context) { log.NewInfo(req.OperationID, "UpdateUserInfo api return ", resp) c.JSON(http.StatusOK, resp) } + func SetGlobalRecvMessageOpt(c *gin.Context) { params := api.SetGlobalRecvMessageOptReq{} if err := c.BindJSON(¶ms); err != nil { diff --git a/internal/demo/register/login.go b/internal/demo/register/login.go index 4f0ea5cbd..4c475f57d 100644 --- a/internal/demo/register/login.go +++ b/internal/demo/register/login.go @@ -20,6 +20,7 @@ type ParamsLogin struct { Password string `json:"password"` Platform int32 `json:"platform"` OperationID string `json:"operationID" binding:"required"` + AreaCode string `json:"areaCode"` } func Login(c *gin.Context) { @@ -35,7 +36,7 @@ func Login(c *gin.Context) { account = params.PhoneNumber } - r, err := im_mysql_model.GetRegister(account) + r, err := im_mysql_model.GetRegister(account, params.AreaCode) if err != nil { log.NewError(params.OperationID, "user have not register", params.Password, account, err.Error()) c.JSON(http.StatusOK, gin.H{"errCode": constant.NotRegistered, "errMsg": "Mobile phone number is not registered"}) diff --git a/internal/demo/register/reset_password.go b/internal/demo/register/reset_password.go index aee1a7cf5..dc5f9a6ca 100644 --- a/internal/demo/register/reset_password.go +++ b/internal/demo/register/reset_password.go @@ -16,6 +16,7 @@ type resetPasswordRequest struct { Email string `json:"email"` PhoneNumber string `json:"phoneNumber"` NewPassword string `json:"newPassword" binding:"required"` + AreaCode string `json:"areaCode"` OperationID string `json:"operationID"` } @@ -34,7 +35,7 @@ func ResetPassword(c *gin.Context) { account = req.PhoneNumber } if req.VerificationCode != config.Config.Demo.SuperCode { - accountKey := account + "_" + constant.VerificationCodeForResetSuffix + accountKey := req.AreaCode + account + "_" + constant.VerificationCodeForResetSuffix v, err := db.DB.GetAccountCode(accountKey) if err != nil || v != req.VerificationCode { log.NewError(req.OperationID, "password Verification code error", account, req.VerificationCode, v) @@ -42,7 +43,7 @@ func ResetPassword(c *gin.Context) { return } } - user, err := im_mysql_model.GetRegister(account) + user, err := im_mysql_model.GetRegister(account, req.AreaCode) if err != nil || user.Account == "" { if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index 089a55800..9661e2ed1 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -22,6 +22,7 @@ type paramsVerificationCode struct { PhoneNumber string `json:"phoneNumber"` OperationID string `json:"operationID" binding:"required"` UsedFor int `json:"usedFor"` + AreaCode string `json:"areaCode"` } func SendVerificationCode(c *gin.Context) { @@ -37,28 +38,28 @@ func SendVerificationCode(c *gin.Context) { } else { account = params.PhoneNumber } - var accountKey string + var accountKey = params.AreaCode + account if params.UsedFor == 0 { params.UsedFor = constant.VerificationCodeForRegister } switch params.UsedFor { case constant.VerificationCodeForRegister: - _, err := im_mysql_model.GetRegister(account) + _, err := im_mysql_model.GetRegister(account, params.AreaCode) if err == nil { log.NewError(params.OperationID, "The phone number has been registered", params) c.JSON(http.StatusOK, gin.H{"errCode": constant.HasRegistered, "errMsg": "The phone number has been registered"}) return } - ok, err := db.DB.JudgeAccountEXISTS(account) + ok, err := db.DB.JudgeAccountEXISTS(accountKey) if ok || err != nil { log.NewError(params.OperationID, "The phone number has been registered", params) c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": "The phone number has been registered"}) return } - accountKey = account + "_" + constant.VerificationCodeForRegisterSuffix + accountKey += "_" + constant.VerificationCodeForRegisterSuffix case constant.VerificationCodeForReset: - accountKey = account + "_" + constant.VerificationCodeForResetSuffix + accountKey += "_" + constant.VerificationCodeForResetSuffix } rand.Seed(time.Now().UnixNano()) code := 100000 + rand.Intn(900000) @@ -90,7 +91,7 @@ func SendVerificationCode(c *gin.Context) { } sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ - PhoneNumbers: tea.String(account), + PhoneNumbers: tea.String(accountKey), SignName: tea.String(config.Config.Demo.AliSMSVerify.SignName), TemplateCode: tea.String(config.Config.Demo.AliSMSVerify.VerificationCodeTemplateCode), TemplateParam: tea.String(fmt.Sprintf("{\"code\":\"%d\"}", code)), diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 9e954f63a..f022d2580 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -27,6 +27,7 @@ type ParamsSetPassword struct { Ex string `json:"ex"` FaceURL string `json:"faceURL"` OperationID string `json:"operationID" binding:"required"` + AreaCode string `json:"areaCode"` } func SetPassword(c *gin.Context) { @@ -88,7 +89,7 @@ func SetPassword(c *gin.Context) { return } log.Info(params.OperationID, "begin store mysql", account, params.Password, "info", params.FaceURL, params.Nickname) - err = im_mysql_model.SetPassword(account, params.Password, params.Ex, userID) + err = im_mysql_model.SetPassword(account, params.Password, params.Ex, userID, params.AreaCode) if err != nil { log.NewError(params.OperationID, "set phone number password error", account, "err", err.Error()) c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": err.Error()}) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index fd16223e0..6fae4a84f 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -16,6 +16,7 @@ type paramsCertification struct { VerificationCode string `json:"verificationCode"` OperationID string `json:"operationID" binding:"required"` UsedFor int `json:"usedFor"` + AreaCode string `json:"areaCode"` } func Verify(c *gin.Context) { @@ -31,7 +32,7 @@ func Verify(c *gin.Context) { if params.Email != "" { account = params.Email } else { - account = params.PhoneNumber + account = params.AreaCode + params.PhoneNumber } if params.VerificationCode == config.Config.Demo.SuperCode { diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 9f6b4ba18..eaee6b3db 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -1,6 +1,7 @@ package config import ( + "fmt" "io/ioutil" "os" "path/filepath" @@ -486,6 +487,8 @@ type PDefaultTips struct { func init() { cfgName := os.Getenv("CONFIG_NAME") + fmt.Println(Root, cfgName) + if len(cfgName) == 0 { cfgName = Root + "/config/config.yaml" } diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index e3c86ad27..b256a2161 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -7,6 +7,7 @@ type Register struct { Password string `gorm:"column:password;type:varchar(255)" json:"password"` Ex string `gorm:"column:ex;size:1024" json:"ex"` UserID string `gorm:"column:user_id;type:varchar(255)" json:"userID"` + AreaCode string `gorm:"column:area_code;type:varchar(255)"` } // diff --git a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go index 278e8bd7f..09d04b46d 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go @@ -5,22 +5,23 @@ import ( _ "github.com/jinzhu/gorm" ) -func GetRegister(account string) (*db.Register, error) { +func GetRegister(account, areaCode string) (*db.Register, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return nil, err } var r db.Register - return &r, dbConn.Table("registers").Where("account = ?", - account).Take(&r).Error + return &r, dbConn.Table("registers").Where("account = ? or account =? and area_code=?", + account, account, areaCode).Take(&r).Error } -func SetPassword(account, password, ex, userID string) error { +func SetPassword(account, password, ex, userID, areaCode string) error { r := db.Register{ Account: account, Password: password, Ex: ex, UserID: userID, + AreaCode: areaCode, } dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { From 278d09e4db298c226eacb07f6fa4a715235c0562 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Jun 2022 17:46:50 +0800 Subject: [PATCH 664/752] add swagger demo --- config/config.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 4f76d00c4..d30e21afa 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -6,12 +6,12 @@ serverversion: 2.0.0 #---------------Infrastructure configuration---------------------# etcd: etcdSchema: openim #默认即可 - etcdAddr: [ 43.128.5.63:2379 ] #单机部署时,默认即可 + etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 k8sMod: false #开启k8s模式 使用pod里面环境变量请求services调用服务 而并非etcd mysql: - dbMysqlAddress: [ 103.116.45.174:13306 ] #mysql地址 目前仅支持单机,默认即可 + dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 dbMysqlUserName: root #mysql用户名,建议修改 dbMysqlPassword: openIM # mysql密码,建议修改 dbMysqlDatabaseName: openIM_v2 #默认即可 @@ -23,7 +23,7 @@ mysql: mongo: dbUri: ""#当dbUri值不为空则直接使用该值 - dbAddress: 103.116.45.174:37017 #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 + dbAddress: 127.0.0.1:37017 #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 dbDirect: false dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 @@ -34,7 +34,7 @@ mongo: dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 redis: - dbAddress: [ 103.116.45.174:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 + dbAddress: [ 127.0.0.1:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 @@ -43,16 +43,16 @@ redis: kafka: ws2mschat: - addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat" ws2mschatoffline: - addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat_offline" msgtomongo: - addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "msg_to_mongo" ms2pschat: - addr: [ 103.116.45.174:9092 ] #kafka配置,默认即可 + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" consumergroupid: msgToTransfer: mongo From 79907b374a7b056a7433dad395a51a4bc116700c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Jun 2022 18:33:52 +0800 Subject: [PATCH 665/752] alter demo --- internal/api/user/user.go | 6 +++--- internal/demo/register/onboarding_process.go | 9 ++++++--- internal/demo/register/set_password.go | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index e272ae646..19acb90cb 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -195,9 +195,9 @@ func GetUsersInfo(c *gin.Context) { c.JSON(http.StatusOK, resp) } -// @Summary 更新用户信息 -// @Description 向你说Hello -// @Tags 测试 +// @Summary 修改用户信息 +// @Description 修改用户信息 +// @Tags 修改用户信息 // @Accept json // @Param who query string true "人名" // @Success 200 {string} string "{"msg": "hello Razeen"}" diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index f96312b37..87ac49981 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -21,9 +21,9 @@ import ( "time" ) -func onboardingProcess(operationID, userID, userName, faceURL string) { +func onboardingProcess(operationID, userID, userName, faceURL, phoneNumber, email string) { log.NewInfo(operationID, utils.GetSelfFuncName(), userName, userID, faceURL) - if err := createOrganizationUser(operationID, userID, userName); err != nil { + if err := createOrganizationUser(operationID, userID, userName, phoneNumber, email); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "createOrganizationUser failed", err.Error()) } departmentID, err := imdb.GetRandomDepartmentID() @@ -45,7 +45,7 @@ func onboardingProcess(operationID, userID, userName, faceURL string) { oaNotification(operationID, userID) } -func createOrganizationUser(operationID, userID, userName string) error { +func createOrganizationUser(operationID, userID, userName, phoneNumber, email string) error { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID) }() @@ -64,6 +64,9 @@ func createOrganizationUser(operationID, userID, userName string) error { EnglishName: randomEnglishName(), Gender: constant.Male, CreateTime: uint32(time.Now().Unix()), + Telephone: phoneNumber, + Mobile: phoneNumber, + Email: email, }, OperationID: operationID, OpUserID: config.Config.Manager.AppManagerUid[0], diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index f022d2580..45538bcaf 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -97,7 +97,7 @@ func SetPassword(c *gin.Context) { } log.Info(params.OperationID, "end setPassword", account, params.Password) // demo onboarding - onboardingProcess(params.OperationID, userID, params.Nickname, params.FaceURL) + onboardingProcess(params.OperationID, userID, params.Nickname, params.FaceURL, params.AreaCode+params.PhoneNumber, params.Email) c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken}) return } From 79b1a801b5f7a414295649679cdbd8795b814143 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Jun 2022 18:46:21 +0800 Subject: [PATCH 666/752] demo --- internal/demo/register/onboarding_process.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 87ac49981..38a0d44e9 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -72,11 +72,7 @@ func createOrganizationUser(operationID, userID, userName, phoneNumber, email st OpUserID: config.Config.Manager.AppManagerUid[0], IsRegister: false, } - if strings.Contains("@", userID) { - req.OrganizationUser.Email = userID - } else { - req.OrganizationUser.Telephone = userID - } + resp, err := client.CreateOrganizationUser(context.Background(), req) if err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) From cfcc5c10959fa6da873245d762bc6df70c4806ee Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 24 Jun 2022 19:04:06 +0800 Subject: [PATCH 667/752] test --- config/config.yaml | 11 +++++- .../register/CreateTencentSMSClient_test.go | 14 ++++++++ internal/demo/register/send_code.go | 36 +++++++++++++++++++ pkg/common/config/config.go | 10 ++++++ 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 internal/demo/register/CreateTencentSMSClient_test.go diff --git a/config/config.yaml b/config/config.yaml index d30e21afa..d604191aa 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -689,11 +689,20 @@ demo: listenIP: 0.0.0.0 #demo对外服务端口,默认即可,需要开放此端口或做nginx转发 openImDemoPort: [ 10004 ] - alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改 + alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,enable为true则必须修改,阿里云为默认短信验证方式 accessKeyId: LTAI5tJPkn4HuuePdiLdGqe7 accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV signName: 托云信息技术 verificationCodeTemplateCode: SMS_226810164 + enable: true + tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 + appID: 1400529182 + region: ap-chengdu + secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC1 + secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe1 + signName: "" + verificationCodeTemplateCode: 1449250 + enable: true superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 # second codeTTL: 300 diff --git a/internal/demo/register/CreateTencentSMSClient_test.go b/internal/demo/register/CreateTencentSMSClient_test.go new file mode 100644 index 000000000..7c3a06fd7 --- /dev/null +++ b/internal/demo/register/CreateTencentSMSClient_test.go @@ -0,0 +1,14 @@ +package register + +import ( + "fmt" + "github.com/stretchr/testify/assert" + "testing" +) + +func Test_CreateTencentSMSClient(t *testing.T) { + result, err := CreateTencentSMSClient() + assert.Nil(t, err) + fmt.Println("return result is ", result) + +} diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index 089a55800..fc24e9bdd 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -6,11 +6,16 @@ import ( "Open_IM/pkg/common/db" "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" + "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/client" dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v2/client" "github.com/alibabacloud-go/tea/tea" "github.com/gin-gonic/gin" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111" "gopkg.in/gomail.v2" "math/rand" "net/http" @@ -128,3 +133,34 @@ func CreateClient(accessKeyId *string, accessKeySecret *string) (result *dysmsap result, err = dysmsapi20170525.NewClient(c) return result, err } +func CreateTencentSMSClient() (string, error) { + credential := common.NewCredential( + config.Config.Demo.TencentSMS.SecretID, + config.Config.Demo.TencentSMS.SecretKey, + ) + cpf := profile.NewClientProfile() + client, err := sms.NewClient(credential, config.Config.Demo.TencentSMS.Region, cpf) + if err != nil { + + } + request := sms.NewSendSmsRequest() + request.SmsSdkAppId = common.StringPtr(config.Config.Demo.TencentSMS.AppID) + request.SignName = common.StringPtr(config.Config.Demo.TencentSMS.SignName) + request.TemplateId = common.StringPtr(config.Config.Demo.TencentSMS.VerificationCodeTemplateCode) + request.TemplateParamSet = common.StringPtrs([]string{"1234"}) + request.PhoneNumberSet = common.StringPtrs([]string{"+8613711112222"}) + // 通过client对象调用想要访问的接口,需要传入请求对象 + response, err := client.SendSms(request) + // 非SDK异常,直接失败。实际代码中可以加入其他的处理。 + if err != nil { + log.Error("test", "send code to tencent err", err.Error()) + } + // 处理异常 + if _, ok := err.(*errors.TencentCloudSDKError); ok { + log.Error("test", "An API error has returned:", err.Error()) + return "", err + } + + b, _ := json.Marshal(response.Response) + return string(b), nil +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 9f6b4ba18..4fb8a9276 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -452,6 +452,16 @@ type config struct { AccessKeySecret string `yaml:"accessKeySecret"` SignName string `yaml:"signName"` VerificationCodeTemplateCode string `yaml:"verificationCodeTemplateCode"` + Enable bool `yaml:"enable"` + } + TencentSMS struct { + AppID string `yaml:"appID"` + Region string `yaml:"region"` + SecretID string `yaml:"secretID"` + SecretKey string `yaml:"secretKey"` + SignName string `yaml:"signName"` + VerificationCodeTemplateCode string `yaml:"verificationCodeTemplateCode"` + Enable bool `yaml:"enable"` } SuperCode string `yaml:"superCode"` CodeTTL int `yaml:"codeTTL"` From ceb0f778b899f96eaa3fc6e2755aa4d96038821e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 24 Jun 2022 19:49:01 +0800 Subject: [PATCH 668/752] test --- config/config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index d604191aa..3f4fd0974 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -697,9 +697,9 @@ demo: enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 1400529182 - region: ap-chengdu - secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC1 - secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe1 + region: "" + secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV + secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH signName: "" verificationCodeTemplateCode: 1449250 enable: true From 1d2da05f668cc813c7538d7146e59998094e4a29 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 24 Jun 2022 19:52:52 +0800 Subject: [PATCH 669/752] test --- go.mod | 5 ++++- go.sum | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 8f76f27d1..8c4a15a96 100644 --- a/go.mod +++ b/go.mod @@ -32,13 +32,16 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 github.com/pkg/errors v0.9.1 - github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373 + github.com/prometheus/client_golang v1.11.1 + github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373 // indirect github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.2 github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe github.com/swaggo/gin-swagger v1.5.0 github.com/swaggo/swag v1.8.3 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.428 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.428 github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca go.etcd.io/etcd/api/v3 v3.5.4 go.etcd.io/etcd/client/v3 v3.5.4 diff --git a/go.sum b/go.sum index 4ade64fa9..893bfa1f6 100644 --- a/go.sum +++ b/go.sum @@ -51,6 +51,7 @@ github.com/antonfisher/nested-logrus-formatter v1.3.0/go.mod h1:6WTfyWFkBc9+zyBa github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= 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= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= @@ -304,6 +305,7 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +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= @@ -366,17 +368,21 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373 h1:GYc9bfYcmMu/AGU5SltIcp3RBwlH6ulrVgfgaJxk7YE= github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373/go.mod h1:qHoO4lIChpZ5hj7O9KWRbRyUzzIQdlxLHF6v3l/yDig= @@ -424,6 +430,11 @@ github.com/swaggo/swag v1.8.1/go.mod h1:ugemnJsPZm/kRwFUnzBlbHRd0JY9zE1M4F+uy2pA github.com/swaggo/swag v1.8.2/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= github.com/swaggo/swag v1.8.3 h1:3pZSSCQ//gAH88lfmxM3Cd1+JCsxV8Md6f36b9hrZ5s= github.com/swaggo/swag v1.8.3/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= +github.com/tencentcloud/tencentcloud-sdk-go v1.0.428 h1:9FpC650MixevaUWZf6EfvVbNMn8bpL5A+rllTtusZXc= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.428 h1:146Tg+UznuAJbNLZXo34QksEhCSj0m5+9qwdpViL1lU= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.428/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.428 h1:HPgQZFVh69foPdKzyFg7Zx8IA1IDrjAXOwALy+ueYv8= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.428/go.mod h1:Rso2ljUOZ0uwlIY6G8wL/hhPdj6iTcjYaLE7tbR48Fk= 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= From 57e11c781bf4b396bc44f9f814aa2c2798c7837b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 24 Jun 2022 20:01:37 +0800 Subject: [PATCH 670/752] test --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 3f4fd0974..864a31a20 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -697,7 +697,7 @@ demo: enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 1400529182 - region: "" + region: "ap-chengdu" secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH signName: "" From a6c63e7968e6bcfe113c2350c4d51948eaf78806 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Jun 2022 20:29:53 +0800 Subject: [PATCH 671/752] swagger init --- cmd/open_im_api/docs/docs.go | 131 ++++++++++++++++++++++-------- cmd/open_im_api/docs/swagger.json | 126 ++++++++++++++++++++-------- cmd/open_im_api/docs/swagger.yaml | 100 ++++++++++++++++------- internal/api/user/user.go | 16 ++-- 4 files changed, 274 insertions(+), 99 deletions(-) diff --git a/cmd/open_im_api/docs/docs.go b/cmd/open_im_api/docs/docs.go index b98043991..cea8c2481 100644 --- a/cmd/open_im_api/docs/docs.go +++ b/cmd/open_im_api/docs/docs.go @@ -10,72 +10,139 @@ const docTemplate = `{ "info": { "description": "{{escape .Description}}", "title": "{{.Title}}", - "termsOfService": "http://swagger.io/terms/", - "contact": { - "name": "API Support", - "url": "http://www.swagger.io/support", - "email": "support@swagger.io" - }, - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - }, + "contact": {}, "version": "{{.Version}}" }, "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { - "/hello": { - "get": { - "description": "向你说Hello", + "/user/update_user_info": { + "post": { + "description": "修改用户信息 userID faceURL等", "consumes": [ "application/json" ], - "tags": [ - "测试" + "produces": [ + "application/json" ], - "summary": "测试SayHello", + "tags": [ + "用户信息" + ], + "summary": "修改用户信息", + "operationId": "UpdateUserInfo", "parameters": [ { "type": "string", - "description": "人名", - "name": "who", - "in": "query", + "description": "im token", + "name": "token", + "in": "header", "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateSelfUserInfoReq" + } } ], "responses": { - "200": { - "description": "{\"msg\": \"hello Razeen\"}", + "0": { + "description": "", "schema": { - "type": "string" + "$ref": "#/definitions/base_info.UpdateUserInfoResp" } }, "400": { - "description": "{\"msg\": \"who are you\"}", + "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "type": "string" + "$ref": "#/definitions/base_info.UpdateUserInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInfoResp" } } } } } }, - "securityDefinitions": { - "BasicAuth": { - "type": "basic" + "definitions": { + "base_info.UpdateSelfUserInfoReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "email": { + "type": "string", + "maxLength": 64 + }, + "ex": { + "type": "string", + "maxLength": 1024 + }, + "faceURL": { + "type": "string", + "maxLength": 1024 + }, + "gender": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "nickname": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "operationID": { + "type": "string" + }, + "phoneNumber": { + "type": "string", + "maxLength": 32 + }, + "userID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + } + } + }, + "base_info.UpdateUserInfoResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } } } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ - Version: "1.0", - Host: "localhost:8080", - BasePath: "/api/v1", + Version: "", + Host: "", + BasePath: "", Schemes: []string{}, - Title: "Swagger Example API", - Description: "This is a sample server celler server.", + Title: "", + Description: "", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, } diff --git a/cmd/open_im_api/docs/swagger.json b/cmd/open_im_api/docs/swagger.json index 732efb5a6..a15524326 100644 --- a/cmd/open_im_api/docs/swagger.json +++ b/cmd/open_im_api/docs/swagger.json @@ -1,62 +1,124 @@ { "swagger": "2.0", "info": { - "description": "This is a sample server celler server.", - "title": "Swagger Example API", - "termsOfService": "http://swagger.io/terms/", - "contact": { - "name": "API Support", - "url": "http://www.swagger.io/support", - "email": "support@swagger.io" - }, - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - }, - "version": "1.0" + "contact": {} }, - "host": "localhost:8080", - "basePath": "/api/v1", "paths": { - "/hello": { - "get": { - "description": "向你说Hello", + "/user/update_user_info": { + "post": { + "description": "修改用户信息 userID faceURL等", "consumes": [ "application/json" ], - "tags": [ - "测试" + "produces": [ + "application/json" ], - "summary": "测试SayHello", + "tags": [ + "用户信息" + ], + "summary": "修改用户信息", + "operationId": "UpdateUserInfo", "parameters": [ { "type": "string", - "description": "人名", - "name": "who", - "in": "query", + "description": "im token", + "name": "token", + "in": "header", "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateSelfUserInfoReq" + } } ], "responses": { - "200": { - "description": "{\"msg\": \"hello Razeen\"}", + "0": { + "description": "", "schema": { - "type": "string" + "$ref": "#/definitions/base_info.UpdateUserInfoResp" } }, "400": { - "description": "{\"msg\": \"who are you\"}", + "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "type": "string" + "$ref": "#/definitions/base_info.UpdateUserInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInfoResp" } } } } } }, - "securityDefinitions": { - "BasicAuth": { - "type": "basic" + "definitions": { + "base_info.UpdateSelfUserInfoReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "email": { + "type": "string", + "maxLength": 64 + }, + "ex": { + "type": "string", + "maxLength": 1024 + }, + "faceURL": { + "type": "string", + "maxLength": 1024 + }, + "gender": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "nickname": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "operationID": { + "type": "string" + }, + "phoneNumber": { + "type": "string", + "maxLength": 32 + }, + "userID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + } + } + }, + "base_info.UpdateUserInfoResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } } } } \ No newline at end of file diff --git a/cmd/open_im_api/docs/swagger.yaml b/cmd/open_im_api/docs/swagger.yaml index 3ce9f7598..9803f031a 100644 --- a/cmd/open_im_api/docs/swagger.yaml +++ b/cmd/open_im_api/docs/swagger.yaml @@ -1,42 +1,84 @@ -basePath: /api/v1 -host: localhost:8080 +definitions: + base_info.UpdateSelfUserInfoReq: + properties: + birth: + type: integer + email: + maxLength: 64 + type: string + ex: + maxLength: 1024 + type: string + faceURL: + maxLength: 1024 + type: string + gender: + enum: + - 0 + - 1 + - 2 + type: integer + nickname: + maxLength: 64 + minLength: 1 + type: string + operationID: + type: string + phoneNumber: + maxLength: 32 + type: string + userID: + maxLength: 64 + minLength: 1 + type: string + required: + - operationID + - userID + type: object + base_info.UpdateUserInfoResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object info: - contact: - email: support@swagger.io - name: API Support - url: http://www.swagger.io/support - description: This is a sample server celler server. - license: - name: Apache 2.0 - url: http://www.apache.org/licenses/LICENSE-2.0.html - termsOfService: http://swagger.io/terms/ - title: Swagger Example API - version: "1.0" + contact: {} paths: - /hello: - get: + /user/update_user_info: + post: consumes: - application/json - description: 向你说Hello + description: 修改用户信息 userID faceURL等 + operationId: UpdateUserInfo parameters: - - description: 人名 - in: query - name: who + - description: im token + in: header + name: token required: true type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.UpdateSelfUserInfoReq' + produces: + - application/json responses: - "200": - description: '{"msg": "hello Razeen"}' + "0": + description: "" schema: - type: string + $ref: '#/definitions/base_info.UpdateUserInfoResp' "400": - description: '{"msg": "who are you"}' + description: errCode为400 一般为参数输入错误, token未带上等 schema: - type: string - summary: 测试SayHello + $ref: '#/definitions/base_info.UpdateUserInfoResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.UpdateUserInfoResp' + summary: 修改用户信息 tags: - - 测试 -securityDefinitions: - BasicAuth: - type: basic + - 用户信息 swagger: "2.0" diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 19acb90cb..8ce38b809 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -196,13 +196,17 @@ func GetUsersInfo(c *gin.Context) { } // @Summary 修改用户信息 -// @Description 修改用户信息 -// @Tags 修改用户信息 +// @Description 修改用户信息 userID faceURL等 +// @Tags 用户信息 +// @ID UpdateUserInfo // @Accept json -// @Param who query string true "人名" -// @Success 200 {string} string "{"msg": "hello Razeen"}" -// @Failure 400 {string} string "{"msg": "who are you"}" -// @Router /update_user_info [post] +// @Param token header string true "im token" +// @Param req body api.UpdateSelfUserInfoReq true "请求" +// @Produce json +// @Success 0 {object} api.UpdateUserInfoResp +// @Failure 500 {object} api.UpdateUserInfoResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.UpdateUserInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /user/update_user_info [post] func UpdateUserInfo(c *gin.Context) { params := api.UpdateSelfUserInfoReq{} if err := c.BindJSON(¶ms); err != nil { From cf15bd36977873357f31465efb1923c2fa022972 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 27 Jun 2022 11:32:43 +0800 Subject: [PATCH 672/752] Adjust api router --- cmd/open_im_api/main.go | 10 +++++----- go.mod | 7 +++++-- go.sum | 17 ----------------- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 8a78a2eda..18b4f4c5a 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -51,6 +51,9 @@ func main() { userRouterGroup.POST("/get_users_info_from_cache", user.GetUsersInfoFromCache) userRouterGroup.POST("/get_user_friend_from_cache", user.GetFriendIDListFromCache) userRouterGroup.POST("/get_black_list_from_cache", user.GetBlackIDListFromCache) + userRouterGroup.POST("/get_all_users_uid", manage.GetAllUsersUid) //1 + userRouterGroup.POST("/account_check", manage.AccountCheck) //1 + // userRouterGroup.POST("/get_users_online_status", manage.GetUsersOnlineStatus) //1 } //friend routing group friendRouterGroup := r.Group("/friend") @@ -130,16 +133,13 @@ func main() { chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) chatGroup.POST("/del_msg", apiChat.DelMsg) chatGroup.POST("/clear_msg", apiChat.ClearMsg) + chatGroup.POST("/send_msg", manage.ManagementSendMsg) + chatGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg) } //Manager managementGroup := r.Group("/manager") { managementGroup.POST("/delete_user", manage.DeleteUser) //1 - managementGroup.POST("/send_msg", manage.ManagementSendMsg) - managementGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg) - managementGroup.POST("/get_all_users_uid", manage.GetAllUsersUid) //1 - managementGroup.POST("/account_check", manage.AccountCheck) //1 - managementGroup.POST("/get_users_online_status", manage.GetUsersOnlineStatus) //1 } //Conversation conversationGroup := r.Group("/conversation") diff --git a/go.mod b/go.mod index 8c4a15a96..5fefcb9d6 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,8 @@ require ( github.com/bwmarrin/snowflake v0.3.0 github.com/fatih/structs v1.1.0 github.com/gin-gonic/gin v1.8.1 + github.com/go-openapi/spec v0.20.6 // indirect + github.com/go-openapi/swag v0.21.1 // indirect github.com/go-playground/validator/v10 v10.11.0 github.com/go-redis/redis/v8 v8.11.5 github.com/go-sql-driver/mysql v1.6.0 // indirect @@ -31,9 +33,8 @@ require ( github.com/mitchellh/mapstructure v1.4.2 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 + github.com/pelletier/go-toml/v2 v2.0.2 // indirect github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.11.1 - github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373 // indirect github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.2 @@ -46,9 +47,11 @@ require ( go.etcd.io/etcd/api/v3 v3.5.4 go.etcd.io/etcd/client/v3 v3.5.4 go.mongodb.org/mongo-driver v1.8.3 + golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb golang.org/x/net v0.0.0-20220622184535-263ec571b305 golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 // indirect + golang.org/x/tools v0.1.11 // indirect google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 // indirect google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 diff --git a/go.sum b/go.sum index 893bfa1f6..26318f86c 100644 --- a/go.sum +++ b/go.sum @@ -51,9 +51,7 @@ github.com/antonfisher/nested-logrus-formatter v1.3.0/go.mod h1:6WTfyWFkBc9+zyBa github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= 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= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -118,7 +116,6 @@ github.com/gin-contrib/gzip v0.0.5 h1:mhnVU32YnnBh2LPH2iqRqsA/eR7SAqRaD388jL2s/j github.com/gin-contrib/gzip v0.0.5/go.mod h1:OPIK6HR0Um2vNmBUTlayD7qle4yVVRZT0PyhdUigrKk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/contrib v0.0.0-20201101042839-6a891bf89f19/go.mod h1:iqneQ2Df3omzIVTkIfn7c1acsVnMGiSLn4XF5Blh3Yg= github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= @@ -193,7 +190,6 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -211,10 +207,8 @@ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= @@ -305,7 +299,6 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -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= @@ -368,24 +361,18 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373 h1:GYc9bfYcmMu/AGU5SltIcp3RBwlH6ulrVgfgaJxk7YE= -github.com/razeencheng/demo-go/swaggo-gin v0.0.0-20220621231537-0a4e9bb56373/go.mod h1:qHoO4lIChpZ5hj7O9KWRbRyUzzIQdlxLHF6v3l/yDig= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= @@ -427,10 +414,8 @@ github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe/go.mod h1:lKJPbtWzJ9J github.com/swaggo/gin-swagger v1.5.0 h1:hlLbxPj6qvbtX2wpbsZuOIlcnPRCUDGccA0zMKVNpME= github.com/swaggo/gin-swagger v1.5.0/go.mod h1:3mKpZClKx7mnUGsiwJeEkNhnr1VHMkMaTAXIoFYUXrA= github.com/swaggo/swag v1.8.1/go.mod h1:ugemnJsPZm/kRwFUnzBlbHRd0JY9zE1M4F+uy2pAaPQ= -github.com/swaggo/swag v1.8.2/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= github.com/swaggo/swag v1.8.3 h1:3pZSSCQ//gAH88lfmxM3Cd1+JCsxV8Md6f36b9hrZ5s= github.com/swaggo/swag v1.8.3/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= -github.com/tencentcloud/tencentcloud-sdk-go v1.0.428 h1:9FpC650MixevaUWZf6EfvVbNMn8bpL5A+rllTtusZXc= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.428 h1:146Tg+UznuAJbNLZXo34QksEhCSj0m5+9qwdpViL1lU= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.428/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.428 h1:HPgQZFVh69foPdKzyFg7Zx8IA1IDrjAXOwALy+ueYv8= @@ -541,7 +526,6 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220615171555-694bf12d69de/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220622184535-263ec571b305 h1:dAgbJ2SP4jD6XYfMNLVj0BF21jo2PjChrtGaAvF5M3I= golang.org/x/net v0.0.0-20220622184535-263ec571b305/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -592,7 +576,6 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 h1:wEZYwx+kK+KlZ0hpvP2Ls1Xr4+RWnlzGFwPP0aiDjIU= golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= From 25704e5ddd7cc6b899e0e67f22dd4fbfb0ef2224 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 27 Jun 2022 12:19:54 +0800 Subject: [PATCH 673/752] docker-compose --- config/config.yaml | 4 ++-- docker-compose.yaml | 22 +++++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 864a31a20..d608e1951 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -28,8 +28,8 @@ mongo: dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 dbSource: admin - dbUserName: #mongo用户名,建议先不设置 - dbPassword: #mongo密码,建议先不设置 + dbUserName: openIM #mongo用户名,建议先不设置 + dbPassword: openIM #mongo密码,建议先不设置 dbMaxPoolSize: 100 dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 diff --git a/docker-compose.yaml b/docker-compose.yaml index 0b159bfd8..b75dc33de 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -29,11 +29,8 @@ services: - TZ=Asia/Shanghai # cache - wiredTigerCacheSizeGB=1 -# environment: -# - MONGO_INITDB_ROOT_USERNAME=openIM -# - MONGO_INITDB_ROOT_PASSWORD=openIM - - + - MONGO_INITDB_ROOT_USERNAME=openIM + - MONGO_INITDB_ROOT_PASSWORD=openIM #TZ: Asia/Shanghai restart: always @@ -99,6 +96,21 @@ services: restart: always command: /usr/local/bin/etcd --name etcd0 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 --initial-cluster etcd0=http://0.0.0.0:2380 --initial-cluster-token tkn --initial-cluster-state new + minio: + image: minio/minio + ports: + - 10005:9000 + - 9090:9090 + container_name: minio + volumes: + - /mnt/data:/data + - /mnt/config:/root/.minio + environment: + MINIO_ROOT_USER: user12345 + MINIO_ROOT_PASSWORD: key12345 + restart: always + command: minio server /data --console-address ':9090' + open_im_server: image: openim/open_im_server:v2.1.0 container_name: open_im_server From ccd7be727630f3ee38a15f5e10f81e30bd9fd12d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 27 Jun 2022 13:20:31 +0800 Subject: [PATCH 674/752] docker-compose --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index b75dc33de..63cc05e83 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -20,7 +20,7 @@ services: ports: - 37017:27017 container_name: mongo - command: --wiredTigerCacheSizeGB 1 + command: --wiredTigerCacheSizeGB 1 --auth volumes: - ./components/mongodb/data/db:/data/db - ./components/mongodb/data/logs:/data/logs From 919eacc0a9afabb343899f0a323f8540c76fb7a6 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 27 Jun 2022 13:22:35 +0800 Subject: [PATCH 675/752] docker-compose --- docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yaml b/docker-compose.yaml index 63cc05e83..33322160d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -126,6 +126,7 @@ services: - mongodb - redis - etcd + - minio network_mode: "host" logging: driver: json-file From 7280ef42a996216be6bfe1d1d4307dd80b62b4b8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 27 Jun 2022 13:24:21 +0800 Subject: [PATCH 676/752] docker-compose --- config/config.yaml | 4 ++-- docker-compose.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index d608e1951..4f5b60536 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -28,8 +28,8 @@ mongo: dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 dbSource: admin - dbUserName: openIM #mongo用户名,建议先不设置 - dbPassword: openIM #mongo密码,建议先不设置 + dbUserName: #mongo用户名,建议先不设置 + dbPassword: #mongo密码,建议先不设置 dbMaxPoolSize: 100 dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 diff --git a/docker-compose.yaml b/docker-compose.yaml index 33322160d..e3af24080 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -20,7 +20,7 @@ services: ports: - 37017:27017 container_name: mongo - command: --wiredTigerCacheSizeGB 1 --auth + command: --wiredTigerCacheSizeGB 1 volumes: - ./components/mongodb/data/db:/data/db - ./components/mongodb/data/logs:/data/logs @@ -29,8 +29,8 @@ services: - TZ=Asia/Shanghai # cache - wiredTigerCacheSizeGB=1 - - MONGO_INITDB_ROOT_USERNAME=openIM - - MONGO_INITDB_ROOT_PASSWORD=openIM +# - MONGO_INITDB_ROOT_USERNAME=openIM +# - MONGO_INITDB_ROOT_PASSWORD=openIM #TZ: Asia/Shanghai restart: always From 226108f5587d848446b766917ac60104372e319c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 27 Jun 2022 13:31:37 +0800 Subject: [PATCH 677/752] docker-compose --- cmd/open_im_api/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 18b4f4c5a..42b715180 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -133,7 +133,7 @@ func main() { chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) chatGroup.POST("/del_msg", apiChat.DelMsg) chatGroup.POST("/clear_msg", apiChat.ClearMsg) - chatGroup.POST("/send_msg", manage.ManagementSendMsg) + chatGroup.POST("/manage_send_msg", manage.ManagementSendMsg) chatGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg) } //Manager From 5207e268dec18dd51c107e32879a09ed0527bb28 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 28 Jun 2022 10:29:14 +0800 Subject: [PATCH 678/752] swagger doc --- cmd/open_im_api/docs/docs.go | 2160 +++++++++++++++++++++++- cmd/open_im_api/docs/swagger.json | 2160 +++++++++++++++++++++++- cmd/open_im_api/docs/swagger.yaml | 1433 +++++++++++++++- internal/api/manage/management_user.go | 30 +- internal/api/office/tag.go | 128 +- internal/api/office/work_moments.go | 187 +- internal/api/user/user.go | 64 +- pkg/base_info/office_struct.go | 4 +- pkg/base_info/public_struct.go | 4 +- pkg/base_info/work_moments_struct.go | 18 +- 10 files changed, 6094 insertions(+), 94 deletions(-) diff --git a/cmd/open_im_api/docs/docs.go b/cmd/open_im_api/docs/docs.go index cea8c2481..5919ca314 100644 --- a/cmd/open_im_api/docs/docs.go +++ b/cmd/open_im_api/docs/docs.go @@ -16,6 +16,1140 @@ const docTemplate = `{ "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { + "/office/comment_one_work_moment": { + "post": { + "description": "评论一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "评论一条工作圈", + "operationId": "CommentOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + } + } + } + } + }, + "/office/create_one_work_moment": { + "post": { + "description": "用户创建一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "创建一条工作圈", + "operationId": "CreateOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求 atUserList likeUserList permissionGroupList permissionUserList 字段中userName可以不填", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + } + } + } + } + }, + "/office/create_tag": { + "post": { + "description": "创建标签", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "创建标签", + "operationId": "CreateTag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateTagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateTagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateTagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateTagResp" + } + } + } + } + }, + "/office/delete_comment": { + "post": { + "description": "删除一条评论", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "删除一条评论", + "operationId": "DeleteComment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentResp" + } + } + } + } + }, + "/office/delete_one_work_moment": { + "post": { + "description": "根据用户工作圈ID删除一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "删除一条工作圈", + "operationId": "DeleteOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + } + } + } + } + }, + "/office/delete_tag": { + "post": { + "description": "根据标签ID创建标签", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "删除标签", + "operationId": "DeleteTag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteTagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteTagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteTagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteTagResp" + } + } + } + } + }, + "/office/get_send_tag_log": { + "post": { + "description": "分页获取发送历史记录", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "获取发送历史记录", + "operationId": "GetTagSendLogs", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsResp" + } + } + } + } + }, + "/office/get_user_friend_work_moments": { + "post": { + "description": "查询用户工作圈页面", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "查询自己大工作圈页面", + "operationId": "GetUserFriendWorkMoments", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + } + } + } + } + }, + "/office/get_user_tag_by_id": { + "post": { + "description": "通过标签id获取该用户的标签信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "获取该用户的标签信息", + "operationId": "GetUserTagByID", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDResp" + } + } + } + } + }, + "/office/get_user_tags": { + "post": { + "description": "用户获取自己的所有的标签", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "获取用户标签信息", + "operationId": "GetUserTags", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsResp" + } + } + } + } + }, + "/office/get_user_work_moments": { + "post": { + "description": "查询用户工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "查询用户工作圈", + "operationId": "GetUserWorkMoments", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + } + } + } + } + }, + "/office/get_work_moment_by_id": { + "post": { + "description": "通过ID获取工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "通过ID获取工作圈", + "operationId": "GetWorkMomentByID", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + } + } + } + } + }, + "/office/like_one_work_moment": { + "post": { + "description": "工作圈ID点赞一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "点赞一条工作圈", + "operationId": "LikeOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + } + } + } + } + }, + "/office/send_msg_to_tag": { + "post": { + "description": "对标签用户发送消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "发送标签消息", + "operationId": "SendMsg2Tag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagResp" + } + } + } + } + }, + "/office/set_tag": { + "post": { + "description": "根据标签ID修改标签用户列表, 名称", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "修改标签", + "operationId": "SetTag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetTagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetTagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetTagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetTagResp" + } + } + } + } + }, + "/user/account_check": { + "post": { + "description": "传入UserIDList检查列表账户注册状态,并且返回结果", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "检查列表账户注册状态,并且返回结果", + "operationId": "AccountCheck", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AccountCheckReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AccountCheckResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AccountCheckResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AccountCheckResp" + } + } + } + } + }, + "/user/get_all_users_uid": { + "post": { + "description": "获取所有用户uid列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取所有用户uid列表", + "operationId": "GetAllUsersUid", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidResp" + } + } + } + } + }, + "/user/get_self_user_info": { + "post": { + "description": "传入ID获取自己的信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取自己的信息", + "operationId": "GetSelfUserInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + } + } + } + } + }, + "/user/get_users_info": { + "post": { + "description": "根据用户列表批量获取用户信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取用户信息", + "operationId": "GetUsersInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + } + } + } + } + }, + "/user/get_users_online_status": { + "post": { + "description": "获取用户在线状态", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取用户在线状态", + "operationId": "GetUsersOnlineStatus", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + } + } + } + } + }, + "/user/set_global_msg_recv_opt": { + "post": { + "description": "设置全局免打扰", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "设置全局免打扰", + "operationId": "SetGlobalRecvMessageOpt", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + } + } + } + } + }, "/user/update_user_info": { "post": { "description": "修改用户信息 userID faceURL等", @@ -26,7 +1160,7 @@ const docTemplate = `{ "application/json" ], "tags": [ - "用户信息" + "用户相关" ], "summary": "修改用户信息", "operationId": "UpdateUserInfo", @@ -39,7 +1173,7 @@ const docTemplate = `{ "required": true }, { - "description": "请求", + "description": "请求体", "name": "req", "in": "body", "required": true, @@ -72,6 +1206,776 @@ const docTemplate = `{ } }, "definitions": { + "base_info.AccountCheckReq": { + "type": "object", + "required": [ + "checkUserIDList", + "operationID" + ], + "properties": { + "checkUserIDList": { + "type": "array", + "maxItems": 100, + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.AccountCheckResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/user.AccountCheckResp_SingleUserStatus" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.Comment": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "contentID": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "replyUserID": { + "type": "string" + }, + "replyUserName": { + "type": "string" + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "base_info.CommentOneWorkMomentReq": { + "type": "object", + "required": [ + "content", + "operationID", + "replyUserID", + "workMomentID" + ], + "properties": { + "content": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "replyUserID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.CommentOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CreateOneWorkMomentReq": { + "type": "object", + "properties": { + "operationID": { + "type": "string" + }, + "workMoment": { + "$ref": "#/definitions/office.WorkMoment" + } + } + }, + "base_info.CreateOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CreateTagReq": { + "type": "object", + "required": [ + "operationID", + "tagName", + "userIDList" + ], + "properties": { + "operationID": { + "type": "string" + }, + "tagName": { + "description": "tag名称", + "type": "string" + }, + "userIDList": { + "description": "用户ID列表", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "base_info.CreateTagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.DeleteCommentReq": { + "type": "object", + "required": [ + "contentID", + "operationID", + "workMomentID" + ], + "properties": { + "contentID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.DeleteCommentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.DeleteOneWorkMomentReq": { + "type": "object", + "required": [ + "operationID", + "workMomentID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.DeleteOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.DeleteTagReq": { + "type": "object", + "required": [ + "operationID", + "tagID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "tagID": { + "type": "string" + } + } + }, + "base_info.DeleteTagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetAllUsersUidReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "operationID": { + "type": "string" + } + } + }, + "base_info.GetAllUsersUidResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetSelfUserInfoReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.GetSelfUserInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetTagSendLogsReq": { + "type": "object", + "required": [ + "operationID", + "pageNumber", + "showNumber" + ], + "properties": { + "operationID": { + "type": "string" + }, + "pageNumber": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + } + } + }, + "base_info.GetTagSendLogsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "currentPage": { + "type": "integer" + }, + "logs": { + "type": "array", + "items": { + "$ref": "#/definitions/office.TagSendLog" + } + }, + "showNumber": { + "type": "integer" + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserFriendWorkMomentsReq": { + "type": "object", + "required": [ + "operationID", + "pageNumber", + "showNumber" + ], + "properties": { + "operationID": { + "type": "string" + }, + "pageNumber": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + } + } + }, + "base_info.GetUserFriendWorkMomentsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "currentPage": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + }, + "workMoments": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMoment" + } + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserTagByIDReq": { + "type": "object", + "required": [ + "operationID", + "tagID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "tagID": { + "type": "string" + } + } + }, + "base_info.GetUserTagByIDResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/office.Tag" + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserTagsReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "operationID": { + "type": "string" + } + } + }, + "base_info.GetUserTagsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/office.Tag" + } + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserWorkMomentsReq": { + "type": "object", + "required": [ + "operationID", + "pageNumber", + "showNumber" + ], + "properties": { + "operationID": { + "type": "string" + }, + "pageNumber": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.GetUserWorkMomentsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "currentPage": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + }, + "workMoments": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMoment" + } + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUsersInfoReq": { + "type": "object", + "required": [ + "operationID", + "userIDList" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userIDList": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "base_info.GetUsersInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUsersOnlineStatusReq": { + "type": "object", + "required": [ + "operationID", + "userIDList" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userIDList": { + "type": "array", + "maxItems": 200, + "items": { + "type": "string" + } + } + } + }, + "base_info.GetUsersOnlineStatusResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/pbRelay.GetUsersOnlineStatusResp_SuccessResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetWorkMomentByIDReq": { + "type": "object", + "required": [ + "operationID", + "workMomentID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.GetWorkMomentByIDResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "workMoment": { + "$ref": "#/definitions/base_info.WorkMoment" + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.LikeOneWorkMomentReq": { + "type": "object", + "required": [ + "operationID", + "workMomentID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.LikeOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SendMsg2TagReq": { + "type": "object", + "required": [ + "content", + "operationID", + "senderPlatformID" + ], + "properties": { + "content": { + "type": "string" + }, + "groupList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "senderPlatformID": { + "type": "integer" + }, + "tagList": { + "type": "array", + "items": { + "type": "string" + } + }, + "userList": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "base_info.SendMsg2TagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SetGlobalRecvMessageOptReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "globalRecvMsgOpt": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.SetGlobalRecvMessageOptResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SetTagReq": { + "type": "object", + "required": [ + "operationID", + "tagID" + ], + "properties": { + "increaseUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "newName": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "reduceUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "tagID": { + "type": "string" + } + } + }, + "base_info.SetTagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateSelfUserInfoReq": { "type": "object", "required": [ @@ -131,6 +2035,258 @@ const docTemplate = `{ "type": "string" } } + }, + "base_info.WorkMoment": { + "type": "object", + "properties": { + "atUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMomentUser" + } + }, + "comments": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.Comment" + } + }, + "content": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "faceURL": { + "type": "string" + }, + "likeUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMomentUser" + } + }, + "permission": { + "type": "integer" + }, + "permissionUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMomentUser" + } + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.WorkMomentUser": { + "type": "object", + "properties": { + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "office.Comment": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "contentID": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "faceURL": { + "type": "string" + }, + "replyUserID": { + "type": "string" + }, + "replyUserName": { + "type": "string" + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "office.PermissionGroup": { + "type": "object", + "properties": { + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + } + } + }, + "office.Tag": { + "type": "object", + "properties": { + "tagID": { + "type": "string" + }, + "tagName": { + "type": "string" + }, + "userList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.TagUser" + } + } + } + }, + "office.TagSendLog": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "sendTime": { + "type": "integer" + }, + "userList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.TagUser" + } + } + } + }, + "office.TagUser": { + "type": "object", + "properties": { + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "office.WorkMoment": { + "type": "object", + "properties": { + "atUserList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.WorkMomentUser" + } + }, + "comments": { + "type": "array", + "items": { + "$ref": "#/definitions/office.Comment" + } + }, + "content": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "faceURL": { + "type": "string" + }, + "likeUserList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.WorkMomentUser" + } + }, + "permission": { + "type": "integer" + }, + "permissionGroupList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.PermissionGroup" + } + }, + "permissionUserList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.WorkMomentUser" + } + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "office.WorkMomentUser": { + "type": "object", + "properties": { + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "pbRelay.GetUsersOnlineStatusResp_SuccessDetail": { + "type": "object", + "properties": { + "platform": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "pbRelay.GetUsersOnlineStatusResp_SuccessResult": { + "type": "object", + "properties": { + "detailPlatformStatus": { + "type": "array", + "items": { + "$ref": "#/definitions/pbRelay.GetUsersOnlineStatusResp_SuccessDetail" + } + }, + "status": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "user.AccountCheckResp_SingleUserStatus": { + "type": "object", + "properties": { + "accountStatus": { + "type": "string" + }, + "userID": { + "type": "string" + } + } } } }` diff --git a/cmd/open_im_api/docs/swagger.json b/cmd/open_im_api/docs/swagger.json index a15524326..4a6c587da 100644 --- a/cmd/open_im_api/docs/swagger.json +++ b/cmd/open_im_api/docs/swagger.json @@ -4,6 +4,1140 @@ "contact": {} }, "paths": { + "/office/comment_one_work_moment": { + "post": { + "description": "评论一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "评论一条工作圈", + "operationId": "CommentOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + } + } + } + } + }, + "/office/create_one_work_moment": { + "post": { + "description": "用户创建一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "创建一条工作圈", + "operationId": "CreateOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求 atUserList likeUserList permissionGroupList permissionUserList 字段中userName可以不填", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + } + } + } + } + }, + "/office/create_tag": { + "post": { + "description": "创建标签", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "创建标签", + "operationId": "CreateTag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateTagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateTagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateTagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateTagResp" + } + } + } + } + }, + "/office/delete_comment": { + "post": { + "description": "删除一条评论", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "删除一条评论", + "operationId": "DeleteComment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteCommentResp" + } + } + } + } + }, + "/office/delete_one_work_moment": { + "post": { + "description": "根据用户工作圈ID删除一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "删除一条工作圈", + "operationId": "DeleteOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + } + } + } + } + }, + "/office/delete_tag": { + "post": { + "description": "根据标签ID创建标签", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "删除标签", + "operationId": "DeleteTag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteTagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteTagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteTagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteTagResp" + } + } + } + } + }, + "/office/get_send_tag_log": { + "post": { + "description": "分页获取发送历史记录", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "获取发送历史记录", + "operationId": "GetTagSendLogs", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetTagSendLogsResp" + } + } + } + } + }, + "/office/get_user_friend_work_moments": { + "post": { + "description": "查询用户工作圈页面", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "查询自己大工作圈页面", + "operationId": "GetUserFriendWorkMoments", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + } + } + } + } + }, + "/office/get_user_tag_by_id": { + "post": { + "description": "通过标签id获取该用户的标签信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "获取该用户的标签信息", + "operationId": "GetUserTagByID", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagByIDResp" + } + } + } + } + }, + "/office/get_user_tags": { + "post": { + "description": "用户获取自己的所有的标签", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "获取用户标签信息", + "operationId": "GetUserTags", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserTagsResp" + } + } + } + } + }, + "/office/get_user_work_moments": { + "post": { + "description": "查询用户工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "查询用户工作圈", + "operationId": "GetUserWorkMoments", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + } + } + } + } + }, + "/office/get_work_moment_by_id": { + "post": { + "description": "通过ID获取工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "通过ID获取工作圈", + "operationId": "GetWorkMomentByID", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + } + } + } + } + }, + "/office/like_one_work_moment": { + "post": { + "description": "工作圈ID点赞一条工作圈", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "工作圈" + ], + "summary": "点赞一条工作圈", + "operationId": "LikeOneWorkMoment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + } + } + } + } + }, + "/office/send_msg_to_tag": { + "post": { + "description": "对标签用户发送消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "发送标签消息", + "operationId": "SendMsg2Tag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SendMsg2TagResp" + } + } + } + } + }, + "/office/set_tag": { + "post": { + "description": "根据标签ID修改标签用户列表, 名称", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "标签" + ], + "summary": "修改标签", + "operationId": "SetTag", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetTagReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetTagResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetTagResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetTagResp" + } + } + } + } + }, + "/user/account_check": { + "post": { + "description": "传入UserIDList检查列表账户注册状态,并且返回结果", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "检查列表账户注册状态,并且返回结果", + "operationId": "AccountCheck", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AccountCheckReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AccountCheckResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AccountCheckResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AccountCheckResp" + } + } + } + } + }, + "/user/get_all_users_uid": { + "post": { + "description": "获取所有用户uid列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取所有用户uid列表", + "operationId": "GetAllUsersUid", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetAllUsersUidResp" + } + } + } + } + }, + "/user/get_self_user_info": { + "post": { + "description": "传入ID获取自己的信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取自己的信息", + "operationId": "GetSelfUserInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + } + } + } + } + }, + "/user/get_users_info": { + "post": { + "description": "根据用户列表批量获取用户信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取用户信息", + "operationId": "GetUsersInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + } + } + } + } + }, + "/user/get_users_online_status": { + "post": { + "description": "获取用户在线状态", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "获取用户在线状态", + "operationId": "GetUsersOnlineStatus", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + } + } + } + } + }, + "/user/set_global_msg_recv_opt": { + "post": { + "description": "设置全局免打扰", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "用户相关" + ], + "summary": "设置全局免打扰", + "operationId": "SetGlobalRecvMessageOpt", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求体", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + } + } + } + } + }, "/user/update_user_info": { "post": { "description": "修改用户信息 userID faceURL等", @@ -14,7 +1148,7 @@ "application/json" ], "tags": [ - "用户信息" + "用户相关" ], "summary": "修改用户信息", "operationId": "UpdateUserInfo", @@ -27,7 +1161,7 @@ "required": true }, { - "description": "请求", + "description": "请求体", "name": "req", "in": "body", "required": true, @@ -60,6 +1194,776 @@ } }, "definitions": { + "base_info.AccountCheckReq": { + "type": "object", + "required": [ + "checkUserIDList", + "operationID" + ], + "properties": { + "checkUserIDList": { + "type": "array", + "maxItems": 100, + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.AccountCheckResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/user.AccountCheckResp_SingleUserStatus" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.Comment": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "contentID": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "replyUserID": { + "type": "string" + }, + "replyUserName": { + "type": "string" + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "base_info.CommentOneWorkMomentReq": { + "type": "object", + "required": [ + "content", + "operationID", + "replyUserID", + "workMomentID" + ], + "properties": { + "content": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "replyUserID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.CommentOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CreateOneWorkMomentReq": { + "type": "object", + "properties": { + "operationID": { + "type": "string" + }, + "workMoment": { + "$ref": "#/definitions/office.WorkMoment" + } + } + }, + "base_info.CreateOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CreateTagReq": { + "type": "object", + "required": [ + "operationID", + "tagName", + "userIDList" + ], + "properties": { + "operationID": { + "type": "string" + }, + "tagName": { + "description": "tag名称", + "type": "string" + }, + "userIDList": { + "description": "用户ID列表", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "base_info.CreateTagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.DeleteCommentReq": { + "type": "object", + "required": [ + "contentID", + "operationID", + "workMomentID" + ], + "properties": { + "contentID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.DeleteCommentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.DeleteOneWorkMomentReq": { + "type": "object", + "required": [ + "operationID", + "workMomentID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.DeleteOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.DeleteTagReq": { + "type": "object", + "required": [ + "operationID", + "tagID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "tagID": { + "type": "string" + } + } + }, + "base_info.DeleteTagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetAllUsersUidReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "operationID": { + "type": "string" + } + } + }, + "base_info.GetAllUsersUidResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetSelfUserInfoReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.GetSelfUserInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetTagSendLogsReq": { + "type": "object", + "required": [ + "operationID", + "pageNumber", + "showNumber" + ], + "properties": { + "operationID": { + "type": "string" + }, + "pageNumber": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + } + } + }, + "base_info.GetTagSendLogsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "currentPage": { + "type": "integer" + }, + "logs": { + "type": "array", + "items": { + "$ref": "#/definitions/office.TagSendLog" + } + }, + "showNumber": { + "type": "integer" + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserFriendWorkMomentsReq": { + "type": "object", + "required": [ + "operationID", + "pageNumber", + "showNumber" + ], + "properties": { + "operationID": { + "type": "string" + }, + "pageNumber": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + } + } + }, + "base_info.GetUserFriendWorkMomentsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "currentPage": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + }, + "workMoments": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMoment" + } + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserTagByIDReq": { + "type": "object", + "required": [ + "operationID", + "tagID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "tagID": { + "type": "string" + } + } + }, + "base_info.GetUserTagByIDResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/office.Tag" + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserTagsReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "operationID": { + "type": "string" + } + } + }, + "base_info.GetUserTagsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/office.Tag" + } + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUserWorkMomentsReq": { + "type": "object", + "required": [ + "operationID", + "pageNumber", + "showNumber" + ], + "properties": { + "operationID": { + "type": "string" + }, + "pageNumber": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.GetUserWorkMomentsResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "currentPage": { + "type": "integer" + }, + "showNumber": { + "type": "integer" + }, + "workMoments": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMoment" + } + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUsersInfoReq": { + "type": "object", + "required": [ + "operationID", + "userIDList" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userIDList": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "base_info.GetUsersInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetUsersOnlineStatusReq": { + "type": "object", + "required": [ + "operationID", + "userIDList" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userIDList": { + "type": "array", + "maxItems": 200, + "items": { + "type": "string" + } + } + } + }, + "base_info.GetUsersOnlineStatusResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/pbRelay.GetUsersOnlineStatusResp_SuccessResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetWorkMomentByIDReq": { + "type": "object", + "required": [ + "operationID", + "workMomentID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.GetWorkMomentByIDResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "workMoment": { + "$ref": "#/definitions/base_info.WorkMoment" + } + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.LikeOneWorkMomentReq": { + "type": "object", + "required": [ + "operationID", + "workMomentID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.LikeOneWorkMomentResp": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SendMsg2TagReq": { + "type": "object", + "required": [ + "content", + "operationID", + "senderPlatformID" + ], + "properties": { + "content": { + "type": "string" + }, + "groupList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "senderPlatformID": { + "type": "integer" + }, + "tagList": { + "type": "array", + "items": { + "type": "string" + } + }, + "userList": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "base_info.SendMsg2TagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SetGlobalRecvMessageOptReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "globalRecvMsgOpt": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.SetGlobalRecvMessageOptResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SetTagReq": { + "type": "object", + "required": [ + "operationID", + "tagID" + ], + "properties": { + "increaseUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "newName": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "reduceUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "tagID": { + "type": "string" + } + } + }, + "base_info.SetTagResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateSelfUserInfoReq": { "type": "object", "required": [ @@ -119,6 +2023,258 @@ "type": "string" } } + }, + "base_info.WorkMoment": { + "type": "object", + "properties": { + "atUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMomentUser" + } + }, + "comments": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.Comment" + } + }, + "content": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "faceURL": { + "type": "string" + }, + "likeUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMomentUser" + } + }, + "permission": { + "type": "integer" + }, + "permissionUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.WorkMomentUser" + } + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "base_info.WorkMomentUser": { + "type": "object", + "properties": { + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "office.Comment": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "contentID": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "faceURL": { + "type": "string" + }, + "replyUserID": { + "type": "string" + }, + "replyUserName": { + "type": "string" + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "office.PermissionGroup": { + "type": "object", + "properties": { + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + } + } + }, + "office.Tag": { + "type": "object", + "properties": { + "tagID": { + "type": "string" + }, + "tagName": { + "type": "string" + }, + "userList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.TagUser" + } + } + } + }, + "office.TagSendLog": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "sendTime": { + "type": "integer" + }, + "userList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.TagUser" + } + } + } + }, + "office.TagUser": { + "type": "object", + "properties": { + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "office.WorkMoment": { + "type": "object", + "properties": { + "atUserList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.WorkMomentUser" + } + }, + "comments": { + "type": "array", + "items": { + "$ref": "#/definitions/office.Comment" + } + }, + "content": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "faceURL": { + "type": "string" + }, + "likeUserList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.WorkMomentUser" + } + }, + "permission": { + "type": "integer" + }, + "permissionGroupList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.PermissionGroup" + } + }, + "permissionUserList": { + "type": "array", + "items": { + "$ref": "#/definitions/office.WorkMomentUser" + } + }, + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "workMomentID": { + "type": "string" + } + } + }, + "office.WorkMomentUser": { + "type": "object", + "properties": { + "userID": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "pbRelay.GetUsersOnlineStatusResp_SuccessDetail": { + "type": "object", + "properties": { + "platform": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "pbRelay.GetUsersOnlineStatusResp_SuccessResult": { + "type": "object", + "properties": { + "detailPlatformStatus": { + "type": "array", + "items": { + "$ref": "#/definitions/pbRelay.GetUsersOnlineStatusResp_SuccessDetail" + } + }, + "status": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "user.AccountCheckResp_SingleUserStatus": { + "type": "object", + "properties": { + "accountStatus": { + "type": "string" + }, + "userID": { + "type": "string" + } + } } } } \ No newline at end of file diff --git a/cmd/open_im_api/docs/swagger.yaml b/cmd/open_im_api/docs/swagger.yaml index 9803f031a..c8b35f1c6 100644 --- a/cmd/open_im_api/docs/swagger.yaml +++ b/cmd/open_im_api/docs/swagger.yaml @@ -1,4 +1,512 @@ definitions: + base_info.AccountCheckReq: + properties: + checkUserIDList: + items: + type: string + maxItems: 100 + type: array + operationID: + type: string + required: + - checkUserIDList + - operationID + type: object + base_info.AccountCheckResp: + properties: + data: + items: + $ref: '#/definitions/user.AccountCheckResp_SingleUserStatus' + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.Comment: + properties: + content: + type: string + contentID: + type: string + createTime: + type: integer + replyUserID: + type: string + replyUserName: + type: string + userID: + type: string + userName: + type: string + type: object + base_info.CommentOneWorkMomentReq: + properties: + content: + type: string + operationID: + type: string + replyUserID: + type: string + workMomentID: + type: string + required: + - content + - operationID + - replyUserID + - workMomentID + type: object + base_info.CommentOneWorkMomentResp: + properties: + data: + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.CreateOneWorkMomentReq: + properties: + operationID: + type: string + workMoment: + $ref: '#/definitions/office.WorkMoment' + type: object + base_info.CreateOneWorkMomentResp: + properties: + data: + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.CreateTagReq: + properties: + operationID: + type: string + tagName: + description: tag名称 + type: string + userIDList: + description: 用户ID列表 + items: + type: string + type: array + required: + - operationID + - tagName + - userIDList + type: object + base_info.CreateTagResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.DeleteCommentReq: + properties: + contentID: + type: string + operationID: + type: string + workMomentID: + type: string + required: + - contentID + - operationID + - workMomentID + type: object + base_info.DeleteCommentResp: + properties: + data: + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.DeleteOneWorkMomentReq: + properties: + operationID: + type: string + workMomentID: + type: string + required: + - operationID + - workMomentID + type: object + base_info.DeleteOneWorkMomentResp: + properties: + data: + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.DeleteTagReq: + properties: + operationID: + type: string + tagID: + type: string + required: + - operationID + - tagID + type: object + base_info.DeleteTagResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetAllUsersUidReq: + properties: + operationID: + type: string + required: + - operationID + type: object + base_info.GetAllUsersUidResp: + properties: + data: + items: + type: string + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetSelfUserInfoReq: + properties: + operationID: + type: string + userID: + type: string + required: + - operationID + - userID + type: object + base_info.GetSelfUserInfoResp: + properties: + data: + additionalProperties: true + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetTagSendLogsReq: + properties: + operationID: + type: string + pageNumber: + type: integer + showNumber: + type: integer + required: + - operationID + - pageNumber + - showNumber + type: object + base_info.GetTagSendLogsResp: + properties: + data: + properties: + currentPage: + type: integer + logs: + items: + $ref: '#/definitions/office.TagSendLog' + type: array + showNumber: + type: integer + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetUserFriendWorkMomentsReq: + properties: + operationID: + type: string + pageNumber: + type: integer + showNumber: + type: integer + required: + - operationID + - pageNumber + - showNumber + type: object + base_info.GetUserFriendWorkMomentsResp: + properties: + data: + properties: + currentPage: + type: integer + showNumber: + type: integer + workMoments: + items: + $ref: '#/definitions/base_info.WorkMoment' + type: array + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetUserTagByIDReq: + properties: + operationID: + type: string + tagID: + type: string + required: + - operationID + - tagID + type: object + base_info.GetUserTagByIDResp: + properties: + data: + properties: + tag: + $ref: '#/definitions/office.Tag' + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetUserTagsReq: + properties: + operationID: + type: string + required: + - operationID + type: object + base_info.GetUserTagsResp: + properties: + data: + properties: + tags: + items: + $ref: '#/definitions/office.Tag' + type: array + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetUserWorkMomentsReq: + properties: + operationID: + type: string + pageNumber: + type: integer + showNumber: + type: integer + userID: + type: string + required: + - operationID + - pageNumber + - showNumber + type: object + base_info.GetUserWorkMomentsResp: + properties: + data: + properties: + currentPage: + type: integer + showNumber: + type: integer + workMoments: + items: + $ref: '#/definitions/base_info.WorkMoment' + type: array + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetUsersInfoReq: + properties: + operationID: + type: string + userIDList: + items: + type: string + type: array + required: + - operationID + - userIDList + type: object + base_info.GetUsersInfoResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetUsersOnlineStatusReq: + properties: + operationID: + type: string + userIDList: + items: + type: string + maxItems: 200 + type: array + required: + - operationID + - userIDList + type: object + base_info.GetUsersOnlineStatusResp: + properties: + data: + items: + $ref: '#/definitions/pbRelay.GetUsersOnlineStatusResp_SuccessResult' + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetWorkMomentByIDReq: + properties: + operationID: + type: string + workMomentID: + type: string + required: + - operationID + - workMomentID + type: object + base_info.GetWorkMomentByIDResp: + properties: + data: + properties: + workMoment: + $ref: '#/definitions/base_info.WorkMoment' + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.LikeOneWorkMomentReq: + properties: + operationID: + type: string + workMomentID: + type: string + required: + - operationID + - workMomentID + type: object + base_info.LikeOneWorkMomentResp: + properties: + data: + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.SendMsg2TagReq: + properties: + content: + type: string + groupList: + items: + type: string + type: array + operationID: + type: string + senderPlatformID: + type: integer + tagList: + items: + type: string + type: array + userList: + items: + type: string + type: array + required: + - content + - operationID + - senderPlatformID + type: object + base_info.SendMsg2TagResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.SetGlobalRecvMessageOptReq: + properties: + globalRecvMsgOpt: + enum: + - 0 + - 1 + - 2 + type: integer + operationID: + type: string + required: + - operationID + type: object + base_info.SetGlobalRecvMessageOptResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.SetTagReq: + properties: + increaseUserIDList: + items: + type: string + type: array + newName: + type: string + operationID: + type: string + reduceUserIDList: + items: + type: string + type: array + tagID: + type: string + required: + - operationID + - tagID + type: object + base_info.SetTagResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.UpdateSelfUserInfoReq: properties: birth: @@ -42,9 +550,930 @@ definitions: errMsg: type: string type: object + base_info.WorkMoment: + properties: + atUsers: + items: + $ref: '#/definitions/base_info.WorkMomentUser' + type: array + comments: + items: + $ref: '#/definitions/base_info.Comment' + type: array + content: + type: string + createTime: + type: integer + faceURL: + type: string + likeUsers: + items: + $ref: '#/definitions/base_info.WorkMomentUser' + type: array + permission: + type: integer + permissionUsers: + items: + $ref: '#/definitions/base_info.WorkMomentUser' + type: array + userID: + type: string + userName: + type: string + workMomentID: + type: string + type: object + base_info.WorkMomentUser: + properties: + userID: + type: string + userName: + type: string + type: object + office.Comment: + properties: + content: + type: string + contentID: + type: string + createTime: + type: integer + faceURL: + type: string + replyUserID: + type: string + replyUserName: + type: string + userID: + type: string + userName: + type: string + type: object + office.PermissionGroup: + properties: + groupID: + type: string + groupName: + type: string + type: object + office.Tag: + properties: + tagID: + type: string + tagName: + type: string + userList: + items: + $ref: '#/definitions/office.TagUser' + type: array + type: object + office.TagSendLog: + properties: + content: + type: string + sendTime: + type: integer + userList: + items: + $ref: '#/definitions/office.TagUser' + type: array + type: object + office.TagUser: + properties: + userID: + type: string + userName: + type: string + type: object + office.WorkMoment: + properties: + atUserList: + items: + $ref: '#/definitions/office.WorkMomentUser' + type: array + comments: + items: + $ref: '#/definitions/office.Comment' + type: array + content: + type: string + createTime: + type: integer + faceURL: + type: string + likeUserList: + items: + $ref: '#/definitions/office.WorkMomentUser' + type: array + permission: + type: integer + permissionGroupList: + items: + $ref: '#/definitions/office.PermissionGroup' + type: array + permissionUserList: + items: + $ref: '#/definitions/office.WorkMomentUser' + type: array + userID: + type: string + userName: + type: string + workMomentID: + type: string + type: object + office.WorkMomentUser: + properties: + userID: + type: string + userName: + type: string + type: object + pbRelay.GetUsersOnlineStatusResp_SuccessDetail: + properties: + platform: + type: string + status: + type: string + type: object + pbRelay.GetUsersOnlineStatusResp_SuccessResult: + properties: + detailPlatformStatus: + items: + $ref: '#/definitions/pbRelay.GetUsersOnlineStatusResp_SuccessDetail' + type: array + status: + type: string + userID: + type: string + type: object + user.AccountCheckResp_SingleUserStatus: + properties: + accountStatus: + type: string + userID: + type: string + type: object info: contact: {} paths: + /office/comment_one_work_moment: + post: + consumes: + - application/json + description: 评论一条工作圈 + operationId: CommentOneWorkMoment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CommentOneWorkMomentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CommentOneWorkMomentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CommentOneWorkMomentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CommentOneWorkMomentResp' + summary: 评论一条工作圈 + tags: + - 工作圈 + /office/create_one_work_moment: + post: + consumes: + - application/json + description: 用户创建一条工作圈 + operationId: CreateOneWorkMoment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 atUserList likeUserList permissionGroupList permissionUserList + 字段中userName可以不填 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CreateOneWorkMomentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CreateOneWorkMomentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CreateOneWorkMomentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CreateOneWorkMomentResp' + summary: 创建一条工作圈 + tags: + - 工作圈 + /office/create_tag: + post: + consumes: + - application/json + description: 创建标签 + operationId: CreateTag + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CreateTagReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CreateTagResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CreateTagResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CreateTagResp' + summary: 创建标签 + tags: + - 标签 + /office/delete_comment: + post: + consumes: + - application/json + description: 删除一条评论 + operationId: DeleteComment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DeleteCommentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DeleteCommentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DeleteCommentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DeleteCommentResp' + summary: 删除一条评论 + tags: + - 工作圈 + /office/delete_one_work_moment: + post: + consumes: + - application/json + description: 根据用户工作圈ID删除一条工作圈 + operationId: DeleteOneWorkMoment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DeleteOneWorkMomentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DeleteOneWorkMomentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DeleteOneWorkMomentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DeleteOneWorkMomentResp' + summary: 删除一条工作圈 + tags: + - 工作圈 + /office/delete_tag: + post: + consumes: + - application/json + description: 根据标签ID创建标签 + operationId: DeleteTag + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DeleteTagReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DeleteTagResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DeleteTagResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DeleteTagResp' + summary: 删除标签 + tags: + - 标签 + /office/get_send_tag_log: + post: + consumes: + - application/json + description: 分页获取发送历史记录 + operationId: GetTagSendLogs + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetTagSendLogsReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetTagSendLogsResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetTagSendLogsResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetTagSendLogsResp' + summary: 获取发送历史记录 + tags: + - 标签 + /office/get_user_friend_work_moments: + post: + consumes: + - application/json + description: 查询用户工作圈页面 + operationId: GetUserFriendWorkMoments + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUserFriendWorkMomentsReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetUserFriendWorkMomentsResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetUserFriendWorkMomentsResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetUserFriendWorkMomentsResp' + summary: 查询自己大工作圈页面 + tags: + - 工作圈 + /office/get_user_tag_by_id: + post: + consumes: + - application/json + description: 通过标签id获取该用户的标签信息 + operationId: GetUserTagByID + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUserTagByIDReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetUserTagByIDResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetUserTagByIDResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetUserTagByIDResp' + summary: 获取该用户的标签信息 + tags: + - 标签 + /office/get_user_tags: + post: + consumes: + - application/json + description: 用户获取自己的所有的标签 + operationId: GetUserTags + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUserTagsReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetUserTagsResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetUserTagsResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetUserTagsResp' + summary: 获取用户标签信息 + tags: + - 标签 + /office/get_user_work_moments: + post: + consumes: + - application/json + description: 查询用户工作圈 + operationId: GetUserWorkMoments + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUserWorkMomentsReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetUserWorkMomentsResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetUserWorkMomentsResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetUserWorkMomentsResp' + summary: 查询用户工作圈 + tags: + - 工作圈 + /office/get_work_moment_by_id: + post: + consumes: + - application/json + description: 通过ID获取工作圈 + operationId: GetWorkMomentByID + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetWorkMomentByIDReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetWorkMomentByIDResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetWorkMomentByIDResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetWorkMomentByIDResp' + summary: 通过ID获取工作圈 + tags: + - 工作圈 + /office/like_one_work_moment: + post: + consumes: + - application/json + description: 工作圈ID点赞一条工作圈 + operationId: LikeOneWorkMoment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.LikeOneWorkMomentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.LikeOneWorkMomentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.LikeOneWorkMomentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.LikeOneWorkMomentResp' + summary: 点赞一条工作圈 + tags: + - 工作圈 + /office/send_msg_to_tag: + post: + consumes: + - application/json + description: 对标签用户发送消息 + operationId: SendMsg2Tag + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.SendMsg2TagReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.SendMsg2TagResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.SendMsg2TagResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.SendMsg2TagResp' + summary: 发送标签消息 + tags: + - 标签 + /office/set_tag: + post: + consumes: + - application/json + description: 根据标签ID修改标签用户列表, 名称 + operationId: SetTag + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.SetTagReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.SetTagResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.SetTagResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.SetTagResp' + summary: 修改标签 + tags: + - 标签 + /user/account_check: + post: + consumes: + - application/json + description: 传入UserIDList检查列表账户注册状态,并且返回结果 + operationId: AccountCheck + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求体 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.AccountCheckReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.AccountCheckResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.AccountCheckResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.AccountCheckResp' + summary: 检查列表账户注册状态,并且返回结果 + tags: + - 用户相关 + /user/get_all_users_uid: + post: + consumes: + - application/json + description: 获取所有用户uid列表 + operationId: GetAllUsersUid + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求体 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetAllUsersUidReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetAllUsersUidResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetAllUsersUidResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetAllUsersUidResp' + summary: 获取所有用户uid列表 + tags: + - 用户相关 + /user/get_self_user_info: + post: + consumes: + - application/json + description: 传入ID获取自己的信息 + operationId: GetSelfUserInfo + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求体 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetSelfUserInfoReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetSelfUserInfoResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetSelfUserInfoResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetSelfUserInfoResp' + summary: 获取自己的信息 + tags: + - 用户相关 + /user/get_users_info: + post: + consumes: + - application/json + description: 根据用户列表批量获取用户信息 + operationId: GetUsersInfo + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求体 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUsersInfoReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetUsersInfoResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetUsersInfoResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetUsersInfoResp' + summary: 获取用户信息 + tags: + - 用户相关 + /user/get_users_online_status: + post: + consumes: + - application/json + description: 获取用户在线状态 + operationId: GetUsersOnlineStatus + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求体 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUsersOnlineStatusReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetUsersOnlineStatusResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetUsersOnlineStatusResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetUsersOnlineStatusResp' + summary: 获取用户在线状态 + tags: + - 用户相关 + /user/set_global_msg_recv_opt: + post: + consumes: + - application/json + description: 设置全局免打扰 + operationId: SetGlobalRecvMessageOpt + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求体 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.SetGlobalRecvMessageOptReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.SetGlobalRecvMessageOptResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.SetGlobalRecvMessageOptResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.SetGlobalRecvMessageOptResp' + summary: 设置全局免打扰 + tags: + - 用户相关 /user/update_user_info: post: consumes: @@ -57,7 +1486,7 @@ paths: name: token required: true type: string - - description: 请求 + - description: 请求体 in: body name: req required: true @@ -80,5 +1509,5 @@ paths: $ref: '#/definitions/base_info.UpdateUserInfoResp' summary: 修改用户信息 tags: - - 用户信息 + - 用户相关 swagger: "2.0" diff --git a/internal/api/manage/management_user.go b/internal/api/manage/management_user.go index 62d2d6651..775c31366 100644 --- a/internal/api/manage/management_user.go +++ b/internal/api/manage/management_user.go @@ -64,6 +64,19 @@ func DeleteUser(c *gin.Context) { log.NewInfo(req.OperationID, "DeleteUser api return", resp) c.JSON(http.StatusOK, resp) } + +// @Summary 获取所有用户uid列表 +// @Description 获取所有用户uid列表 +// @Tags 用户相关 +// @ID GetAllUsersUid +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetAllUsersUidReq true "请求体" +// @Produce json +// @Success 0 {object} api.GetAllUsersUidResp +// @Failure 500 {object} api.GetAllUsersUidResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetAllUsersUidResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /user/get_all_users_uid [post] func GetAllUsersUid(c *gin.Context) { params := api.GetAllUsersUidReq{} if err := c.BindJSON(¶ms); err != nil { @@ -79,7 +92,7 @@ func GetAllUsersUid(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -106,6 +119,19 @@ func GetAllUsersUid(c *gin.Context) { c.JSON(http.StatusOK, resp) } + +// @Summary 检查列表账户注册状态,并且返回结果 +// @Description 传入UserIDList检查列表账户注册状态,并且返回结果 +// @Tags 用户相关 +// @ID AccountCheck +// @Accept json +// @Param token header string true "im token" +// @Param req body api.AccountCheckReq true "请求体" +// @Produce json +// @Success 0 {object} api.AccountCheckResp +// @Failure 500 {object} api.AccountCheckResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.AccountCheckResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /user/account_check [post] func AccountCheck(c *gin.Context) { params := api.AccountCheckReq{} if err := c.BindJSON(¶ms); err != nil { @@ -121,7 +147,7 @@ func AccountCheck(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } diff --git a/internal/api/office/tag.go b/internal/api/office/tag.go index 9617d381d..b23c75826 100644 --- a/internal/api/office/tag.go +++ b/internal/api/office/tag.go @@ -1,7 +1,7 @@ package office import ( - apistruct "Open_IM/pkg/base_info" + api "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" @@ -16,10 +16,22 @@ import ( "strings" ) +// @Summary 获取用户标签信息 +// @Description 用户获取自己的所有的标签 +// @Tags 标签 +// @ID GetUserTags +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUserTagsReq true "请求" +// @Produce json +// @Success 0 {object} api.GetUserTagsResp +// @Failure 500 {object} api.GetUserTagsResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetUserTagsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/get_user_tags [post] func GetUserTags(c *gin.Context) { var ( - req apistruct.GetUserTagsReq - resp apistruct.GetUserTagsResp + req api.GetUserTagsReq + resp api.GetUserTagsResp reqPb pbOffice.GetUserTagsReq respPb *pbOffice.GetUserTagsResp ) @@ -36,7 +48,7 @@ func GetUserTags(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -67,10 +79,22 @@ func GetUserTags(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 创建标签 +// @Description 创建标签 +// @Tags 标签 +// @ID CreateTag +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CreateTagReq true "请求" +// @Produce json +// @Success 0 {object} api.CreateTagResp +// @Failure 500 {object} api.CreateTagResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CreateTagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/create_tag [post] func CreateTag(c *gin.Context) { var ( - req apistruct.CreateTagReq - resp apistruct.CreateTagResp + req api.CreateTagReq + resp api.CreateTagResp reqPb pbOffice.CreateTagReq respPb *pbOffice.CreateTagResp ) @@ -90,7 +114,7 @@ func CreateTag(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -115,10 +139,22 @@ func CreateTag(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 删除标签 +// @Description 根据标签ID创建标签 +// @Tags 标签 +// @ID DeleteTag +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DeleteTagReq true "请求" +// @Produce json +// @Success 0 {object} api.DeleteTagResp +// @Failure 500 {object} api.DeleteTagResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DeleteTagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/delete_tag [post] func DeleteTag(c *gin.Context) { var ( - req apistruct.DeleteTagReq - resp apistruct.DeleteTagResp + req api.DeleteTagReq + resp api.DeleteTagResp reqPb pbOffice.DeleteTagReq respPb *pbOffice.DeleteTagResp ) @@ -138,7 +174,7 @@ func DeleteTag(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -163,10 +199,22 @@ func DeleteTag(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 修改标签 +// @Description 根据标签ID修改标签用户列表, 名称 +// @Tags 标签 +// @ID SetTag +// @Accept json +// @Param token header string true "im token" +// @Param req body api.SetTagReq true "请求" +// @Produce json +// @Success 0 {object} api.SetTagResp +// @Failure 500 {object} api.SetTagResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.SetTagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/set_tag [post] func SetTag(c *gin.Context) { var ( - req apistruct.SetTagReq - resp apistruct.SetTagResp + req api.SetTagReq + resp api.SetTagResp reqPb pbOffice.SetTagReq respPb *pbOffice.SetTagResp ) @@ -211,10 +259,22 @@ func SetTag(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 发送标签消息 +// @Description 对标签用户发送消息 +// @Tags 标签 +// @ID SendMsg2Tag +// @Accept json +// @Param token header string true "im token" +// @Param req body api.SendMsg2TagReq true "请求" +// @Produce json +// @Success 0 {object} api.SendMsg2TagResp +// @Failure 500 {object} api.SendMsg2TagResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.SendMsg2TagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/send_msg_to_tag [post] func SendMsg2Tag(c *gin.Context) { var ( - req apistruct.SendMsg2TagReq - resp apistruct.SendMsg2TagResp + req api.SendMsg2TagReq + resp api.SendMsg2TagResp reqPb pbOffice.SendMsg2TagReq respPb *pbOffice.SendMsg2TagResp ) @@ -234,7 +294,7 @@ func SendMsg2Tag(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -259,10 +319,22 @@ func SendMsg2Tag(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取发送历史记录 +// @Description 分页获取发送历史记录 +// @Tags 标签 +// @ID GetTagSendLogs +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetTagSendLogsReq true "请求" +// @Produce json +// @Success 0 {object} api.GetTagSendLogsResp +// @Failure 500 {object} api.GetTagSendLogsResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetTagSendLogsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/get_send_tag_log [post] func GetTagSendLogs(c *gin.Context) { var ( - req apistruct.GetTagSendLogsReq - resp apistruct.GetTagSendLogsResp + req api.GetTagSendLogsReq + resp api.GetTagSendLogsResp reqPb pbOffice.GetTagSendLogsReq respPb *pbOffice.GetTagSendLogsResp ) @@ -279,7 +351,7 @@ func GetTagSendLogs(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -293,7 +365,7 @@ func GetTagSendLogs(c *gin.Context) { if etcdConn == nil { errMsg := req.OperationID + "getcdv3.GetConn == nil" log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } client := pbOffice.NewOfficeServiceClient(etcdConn) @@ -317,10 +389,22 @@ func GetTagSendLogs(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取该用户的标签信息 +// @Description 通过标签id获取该用户的标签信息 +// @Tags 标签 +// @ID GetUserTagByID +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUserTagByIDReq true "请求" +// @Produce json +// @Success 0 {object} api.GetUserTagByIDResp +// @Failure 500 {object} api.GetUserTagByIDResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetUserTagByIDResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/get_user_tag_by_id [post] func GetUserTagByID(c *gin.Context) { var ( - req apistruct.GetUserTagByIDReq - resp apistruct.GetUserTagByIDResp + req api.GetUserTagByIDReq + resp api.GetUserTagByIDResp reqPb pbOffice.GetUserTagByIDReq respPb *pbOffice.GetUserTagByIDResp ) @@ -337,7 +421,7 @@ func GetUserTagByID(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } diff --git a/internal/api/office/work_moments.go b/internal/api/office/work_moments.go index ae4863b75..86b3dc7bf 100644 --- a/internal/api/office/work_moments.go +++ b/internal/api/office/work_moments.go @@ -1,7 +1,7 @@ package office import ( - apiStruct "Open_IM/pkg/base_info" + api "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" @@ -15,10 +15,22 @@ import ( "strings" ) +// @Summary 创建一条工作圈 +// @Description 用户创建一条工作圈 +// @Tags 工作圈 +// @ID CreateOneWorkMoment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CreateOneWorkMomentReq true "请求 atUserList likeUserList permissionGroupList permissionUserList 字段中userName可以不填" +// @Produce json +// @Success 0 {object} api.CreateOneWorkMomentResp +// @Failure 500 {object} api.CreateOneWorkMomentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CreateOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/create_one_work_moment [post] func CreateOneWorkMoment(c *gin.Context) { var ( - req apiStruct.CreateOneWorkMomentReq - resp apiStruct.CreateOneWorkMomentResp + req api.CreateOneWorkMomentReq + resp api.CreateOneWorkMomentResp reqPb pbOffice.CreateOneWorkMomentReq respPb *pbOffice.CreateOneWorkMomentResp ) @@ -36,7 +48,7 @@ func CreateOneWorkMoment(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -59,7 +71,7 @@ func CreateOneWorkMoment(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateOneWorkMoment rpc server failed" + err.Error()}) return } - resp.CommResp = apiStruct.CommResp{ + resp.CommResp = api.CommResp{ ErrCode: respPb.CommonResp.ErrCode, ErrMsg: respPb.CommonResp.ErrMsg, } @@ -67,10 +79,22 @@ func CreateOneWorkMoment(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 删除一条工作圈 +// @Description 根据用户工作圈ID删除一条工作圈 +// @Tags 工作圈 +// @ID DeleteOneWorkMoment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DeleteOneWorkMomentReq true "请求" +// @Produce json +// @Success 0 {object} api.DeleteOneWorkMomentResp +// @Failure 500 {object} api.DeleteOneWorkMomentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DeleteOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/delete_one_work_moment [post] func DeleteOneWorkMoment(c *gin.Context) { var ( - req apiStruct.DeleteOneWorkMomentReq - resp apiStruct.DeleteOneWorkMomentResp + req api.DeleteOneWorkMomentReq + resp api.DeleteOneWorkMomentResp reqPb pbOffice.DeleteOneWorkMomentReq respPb *pbOffice.DeleteOneWorkMomentResp ) @@ -88,7 +112,7 @@ func DeleteOneWorkMoment(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -118,10 +142,22 @@ func DeleteOneWorkMoment(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 点赞一条工作圈 +// @Description 工作圈ID点赞一条工作圈 +// @Tags 工作圈 +// @ID LikeOneWorkMoment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.LikeOneWorkMomentReq true "请求" +// @Produce json +// @Success 0 {object} api.LikeOneWorkMomentResp +// @Failure 500 {object} api.LikeOneWorkMomentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.LikeOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/like_one_work_moment [post] func LikeOneWorkMoment(c *gin.Context) { var ( - req apiStruct.LikeOneWorkMomentReq - resp apiStruct.LikeOneWorkMomentResp + req api.LikeOneWorkMomentReq + resp api.LikeOneWorkMomentResp reqPb pbOffice.LikeOneWorkMomentReq respPb *pbOffice.LikeOneWorkMomentResp ) @@ -168,10 +204,22 @@ func LikeOneWorkMoment(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 评论一条工作圈 +// @Description 评论一条工作圈 +// @Tags 工作圈 +// @ID CommentOneWorkMoment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CommentOneWorkMomentReq true "请求" +// @Produce json +// @Success 0 {object} api.CommentOneWorkMomentResp +// @Failure 500 {object} api.CommentOneWorkMomentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CommentOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/comment_one_work_moment [post] func CommentOneWorkMoment(c *gin.Context) { var ( - req apiStruct.CommentOneWorkMomentReq - resp apiStruct.CommentOneWorkMomentResp + req api.CommentOneWorkMomentReq + resp api.CommentOneWorkMomentResp reqPb pbOffice.CommentOneWorkMomentReq respPb *pbOffice.CommentOneWorkMomentResp ) @@ -218,10 +266,22 @@ func CommentOneWorkMoment(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 删除一条评论 +// @Description 删除一条评论 +// @Tags 工作圈 +// @ID DeleteComment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DeleteCommentReq true "请求" +// @Produce json +// @Success 0 {object} api.DeleteCommentResp +// @Failure 500 {object} api.DeleteCommentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DeleteCommentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/delete_comment [post] func DeleteComment(c *gin.Context) { var ( - req apiStruct.DeleteCommentReq - resp apiStruct.DeleteCommentResp + req api.DeleteCommentReq + resp api.DeleteCommentResp reqPb pbOffice.DeleteCommentReq respPb *pbOffice.DeleteCommentResp ) @@ -266,10 +326,22 @@ func DeleteComment(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 通过ID获取工作圈 +// @Description 通过ID获取工作圈 +// @Tags 工作圈 +// @ID GetWorkMomentByID +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetWorkMomentByIDReq true "请求" +// @Produce json +// @Success 0 {object} api.GetWorkMomentByIDResp +// @Failure 500 {object} api.GetWorkMomentByIDResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetWorkMomentByIDResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/get_work_moment_by_id [post] func GetWorkMomentByID(c *gin.Context) { var ( - req apiStruct.GetWorkMomentByIDReq - resp apiStruct.GetWorkMomentByIDResp + req api.GetWorkMomentByIDReq + resp api.GetWorkMomentByIDResp reqPb pbOffice.GetWorkMomentByIDReq respPb *pbOffice.GetWorkMomentByIDResp ) @@ -311,8 +383,8 @@ func GetWorkMomentByID(c *gin.Context) { if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - resp.Data.WorkMoment = &apiStruct.WorkMoment{LikeUserList: []*apiStruct.WorkMomentUser{}, Comments: []*apiStruct.Comment{}, - AtUserList: []*apiStruct.WorkMomentUser{}, PermissionUserList: []*apiStruct.WorkMomentUser{}} + resp.Data.WorkMoment = &api.WorkMoment{LikeUserList: []*api.WorkMomentUser{}, Comments: []*api.Comment{}, + AtUserList: []*api.WorkMomentUser{}, PermissionUserList: []*api.WorkMomentUser{}} if err := utils.CopyStructFields(&resp.Data.WorkMoment, respPb.WorkMoment); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } @@ -320,10 +392,22 @@ func GetWorkMomentByID(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 查询用户工作圈 +// @Description 查询用户工作圈 +// @Tags 工作圈 +// @ID GetUserWorkMoments +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUserWorkMomentsReq true "请求" +// @Produce json +// @Success 0 {object} api.GetUserWorkMomentsResp +// @Failure 500 {object} api.GetUserWorkMomentsResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetUserWorkMomentsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/get_user_work_moments [post] func GetUserWorkMoments(c *gin.Context) { var ( - req apiStruct.GetUserWorkMomentsReq - resp apiStruct.GetUserWorkMomentsResp + req api.GetUserWorkMomentsReq + resp api.GetUserWorkMomentsResp reqPb pbOffice.GetUserWorkMomentsReq respPb *pbOffice.GetUserWorkMomentsResp ) @@ -366,29 +450,26 @@ func GetUserWorkMoments(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserWorkMoments rpc server failed" + err.Error()}) return } - resp.Data.WorkMoments = []*apiStruct.WorkMoment{} + resp.Data.WorkMoments = []*api.WorkMoment{} if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - //if err := utils.CopyStructFields(&resp.Data.WorkMoments, respPb.WorkMoments); err != nil { - // log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) - //} for _, v := range respPb.WorkMoments { - workMoment := apiStruct.WorkMoment{ + workMoment := api.WorkMoment{ WorkMomentID: v.WorkMomentID, UserID: v.UserID, Content: v.Content, FaceURL: v.FaceURL, UserName: v.UserName, CreateTime: v.CreateTime, - Comments: make([]*apiStruct.Comment, len(v.Comments)), - LikeUserList: make([]*apiStruct.WorkMomentUser, len(v.LikeUserList)), - AtUserList: make([]*apiStruct.WorkMomentUser, len(v.AtUserList)), - PermissionUserList: make([]*apiStruct.WorkMomentUser, len(v.PermissionUserList)), + Comments: make([]*api.Comment, len(v.Comments)), + LikeUserList: make([]*api.WorkMomentUser, len(v.LikeUserList)), + AtUserList: make([]*api.WorkMomentUser, len(v.AtUserList)), + PermissionUserList: make([]*api.WorkMomentUser, len(v.PermissionUserList)), Permission: v.Permission, } for i, comment := range v.Comments { - workMoment.Comments[i] = &apiStruct.Comment{ + workMoment.Comments[i] = &api.Comment{ UserID: comment.UserID, UserName: comment.UserName, ReplyUserID: comment.ReplyUserID, @@ -399,19 +480,19 @@ func GetUserWorkMoments(c *gin.Context) { } } for i, likeUser := range v.LikeUserList { - workMoment.LikeUserList[i] = &apiStruct.WorkMomentUser{ + workMoment.LikeUserList[i] = &api.WorkMomentUser{ UserID: likeUser.UserID, UserName: likeUser.UserName, } } for i, atUser := range v.AtUserList { - workMoment.AtUserList[i] = &apiStruct.WorkMomentUser{ + workMoment.AtUserList[i] = &api.WorkMomentUser{ UserID: atUser.UserID, UserName: atUser.UserName, } } for i, permissionUser := range v.PermissionUserList { - workMoment.PermissionUserList[i] = &apiStruct.WorkMomentUser{ + workMoment.PermissionUserList[i] = &api.WorkMomentUser{ UserID: permissionUser.UserID, UserName: permissionUser.UserName, } @@ -424,10 +505,22 @@ func GetUserWorkMoments(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 查询自己大工作圈页面 +// @Description 查询用户工作圈页面 +// @Tags 工作圈 +// @ID GetUserFriendWorkMoments +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUserFriendWorkMomentsReq true "请求" +// @Produce json +// @Success 0 {object} api.GetUserFriendWorkMomentsResp +// @Failure 500 {object} api.GetUserFriendWorkMomentsResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetUserFriendWorkMomentsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /office/get_user_friend_work_moments [post] func GetUserFriendWorkMoments(c *gin.Context) { var ( - req apiStruct.GetUserFriendWorkMomentsReq - resp apiStruct.GetUserFriendWorkMomentsResp + req api.GetUserFriendWorkMomentsReq + resp api.GetUserFriendWorkMomentsResp reqPb pbOffice.GetUserFriendWorkMomentsReq respPb *pbOffice.GetUserFriendWorkMomentsResp ) @@ -475,23 +568,23 @@ func GetUserFriendWorkMoments(c *gin.Context) { //if err := utils.CopyStructFields(&resp.Data.WorkMoments, respPb.WorkMoments); err != nil { // log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) //} - resp.Data.WorkMoments = []*apiStruct.WorkMoment{} + resp.Data.WorkMoments = []*api.WorkMoment{} for _, v := range respPb.WorkMoments { - workMoment := apiStruct.WorkMoment{ + workMoment := api.WorkMoment{ WorkMomentID: v.WorkMomentID, UserID: v.UserID, Content: v.Content, FaceURL: v.FaceURL, UserName: v.UserName, CreateTime: v.CreateTime, - Comments: make([]*apiStruct.Comment, len(v.Comments)), - LikeUserList: make([]*apiStruct.WorkMomentUser, len(v.LikeUserList)), - AtUserList: make([]*apiStruct.WorkMomentUser, len(v.AtUserList)), - PermissionUserList: make([]*apiStruct.WorkMomentUser, len(v.PermissionUserList)), + Comments: make([]*api.Comment, len(v.Comments)), + LikeUserList: make([]*api.WorkMomentUser, len(v.LikeUserList)), + AtUserList: make([]*api.WorkMomentUser, len(v.AtUserList)), + PermissionUserList: make([]*api.WorkMomentUser, len(v.PermissionUserList)), Permission: v.Permission, } for i, comment := range v.Comments { - workMoment.Comments[i] = &apiStruct.Comment{ + workMoment.Comments[i] = &api.Comment{ UserID: comment.UserID, UserName: comment.UserName, ReplyUserID: comment.ReplyUserID, @@ -502,19 +595,19 @@ func GetUserFriendWorkMoments(c *gin.Context) { } } for i, likeUser := range v.LikeUserList { - workMoment.LikeUserList[i] = &apiStruct.WorkMomentUser{ + workMoment.LikeUserList[i] = &api.WorkMomentUser{ UserID: likeUser.UserID, UserName: likeUser.UserName, } } for i, atUser := range v.AtUserList { - workMoment.AtUserList[i] = &apiStruct.WorkMomentUser{ + workMoment.AtUserList[i] = &api.WorkMomentUser{ UserID: atUser.UserID, UserName: atUser.UserName, } } for i, permissionUser := range v.PermissionUserList { - workMoment.PermissionUserList[i] = &apiStruct.WorkMomentUser{ + workMoment.PermissionUserList[i] = &api.WorkMomentUser{ UserID: permissionUser.UserID, UserName: permissionUser.UserName, } @@ -529,8 +622,8 @@ func GetUserFriendWorkMoments(c *gin.Context) { func SetUserWorkMomentsLevel(c *gin.Context) { var ( - req apiStruct.SetUserWorkMomentsLevelReq - resp apiStruct.SetUserWorkMomentsLevelResp + req api.SetUserWorkMomentsLevelReq + resp api.SetUserWorkMomentsLevelResp reqPb pbOffice.SetUserWorkMomentsLevelReq respPb *pbOffice.SetUserWorkMomentsLevelResp ) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 8ce38b809..d195c4b96 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -35,7 +35,7 @@ func GetUsersInfoFromCache(c *gin.Context) { if !ok { errMsg := "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) @@ -147,6 +147,18 @@ func GetBlackIDListFromCache(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取用户信息 +// @Description 根据用户列表批量获取用户信息 +// @Tags 用户相关 +// @ID GetUsersInfo +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUsersInfoReq true "请求体" +// @Produce json +// @Success 0 {object} api.GetUsersInfoResp +// @Failure 500 {object} api.GetUsersInfoResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetUsersInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /user/get_users_info [post] func GetUsersInfo(c *gin.Context) { params := api.GetUsersInfoReq{} if err := c.BindJSON(¶ms); err != nil { @@ -163,7 +175,7 @@ func GetUsersInfo(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -197,11 +209,11 @@ func GetUsersInfo(c *gin.Context) { // @Summary 修改用户信息 // @Description 修改用户信息 userID faceURL等 -// @Tags 用户信息 +// @Tags 用户相关 // @ID UpdateUserInfo // @Accept json // @Param token header string true "im token" -// @Param req body api.UpdateSelfUserInfoReq true "请求" +// @Param req body api.UpdateSelfUserInfoReq true "请求体" // @Produce json // @Success 0 {object} api.UpdateUserInfoResp // @Failure 500 {object} api.UpdateUserInfoResp "errCode为500 一般为服务器内部错误" @@ -223,7 +235,7 @@ func UpdateUserInfo(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) @@ -246,6 +258,18 @@ func UpdateUserInfo(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 设置全局免打扰 +// @Description 设置全局免打扰 +// @Tags 用户相关 +// @ID SetGlobalRecvMessageOpt +// @Accept json +// @Param token header string true "im token" +// @Param req body api.SetGlobalRecvMessageOptReq true "请求体" +// @Produce json +// @Success 0 {object} api.SetGlobalRecvMessageOptResp +// @Failure 500 {object} api.SetGlobalRecvMessageOptResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.SetGlobalRecvMessageOptResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /user/set_global_msg_recv_opt [post] func SetGlobalRecvMessageOpt(c *gin.Context) { params := api.SetGlobalRecvMessageOptReq{} if err := c.BindJSON(¶ms); err != nil { @@ -262,7 +286,7 @@ func SetGlobalRecvMessageOpt(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } log.NewInfo(params.OperationID, "SetGlobalRecvMessageOpt args ", req.String()) @@ -285,6 +309,18 @@ func SetGlobalRecvMessageOpt(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取自己的信息 +// @Description 传入ID获取自己的信息 +// @Tags 用户相关 +// @ID GetSelfUserInfo +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetSelfUserInfoReq true "请求体" +// @Produce json +// @Success 0 {object} api.GetSelfUserInfoResp +// @Failure 500 {object} api.GetSelfUserInfoResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetSelfUserInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /user/get_self_user_info [post] func GetSelfUserInfo(c *gin.Context) { params := api.GetSelfUserInfoReq{} if err := c.BindJSON(¶ms); err != nil { @@ -302,7 +338,7 @@ func GetSelfUserInfo(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -336,6 +372,18 @@ func GetSelfUserInfo(c *gin.Context) { } +// @Summary 获取用户在线状态 +// @Description 获取用户在线状态 +// @Tags 用户相关 +// @ID GetUsersOnlineStatus +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUsersOnlineStatusReq true "请求体" +// @Produce json +// @Success 0 {object} api.GetUsersOnlineStatusResp +// @Failure 500 {object} api.GetUsersOnlineStatusResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetUsersOnlineStatusResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /user/get_users_online_status [post] func GetUsersOnlineStatus(c *gin.Context) { params := api.GetUsersOnlineStatusReq{} if err := c.BindJSON(¶ms); err != nil { @@ -351,7 +399,7 @@ func GetUsersOnlineStatus(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } diff --git a/pkg/base_info/office_struct.go b/pkg/base_info/office_struct.go index e4dca230d..1e8e174bd 100644 --- a/pkg/base_info/office_struct.go +++ b/pkg/base_info/office_struct.go @@ -16,8 +16,8 @@ type GetUserTagsResp struct { } type CreateTagReq struct { - TagName string `json:"tagName" binding:"required"` - UserIDList []string `json:"userIDList" binding:"required"` + TagName string `json:"tagName" binding:"required"` // tag名称 + UserIDList []string `json:"userIDList" binding:"required"` // 用户ID列表 OperationID string `json:"operationID" binding:"required"` } diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 2950dbea8..824f58043 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -6,8 +6,8 @@ import ( ) type ApiUserInfo struct { - UserID string `json:"userID" binding:"required,min=1,max=64"` - Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` + UserID string `json:"userID" binding:"required,min=1,max=64" swaggo:"true,用户ID,"` + Nickname string `json:"nickname" binding:"omitempty,min=1,max=64" swaggo:"true,my id,19"` FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` diff --git a/pkg/base_info/work_moments_struct.go b/pkg/base_info/work_moments_struct.go index 34f2df8bd..7ff8c6f7d 100644 --- a/pkg/base_info/work_moments_struct.go +++ b/pkg/base_info/work_moments_struct.go @@ -12,7 +12,8 @@ type CreateOneWorkMomentResp struct { } type DeleteOneWorkMomentReq struct { - office.DeleteOneWorkMomentReq + WorkMomentID string `json:"workMomentID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } type DeleteOneWorkMomentResp struct { @@ -21,7 +22,8 @@ type DeleteOneWorkMomentResp struct { } type LikeOneWorkMomentReq struct { - office.LikeOneWorkMomentReq + WorkMomentID string `json:"workMomentID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } type LikeOneWorkMomentResp struct { @@ -30,7 +32,10 @@ type LikeOneWorkMomentResp struct { } type CommentOneWorkMomentReq struct { - office.CommentOneWorkMomentReq + WorkMomentID string `json:"workMomentID" binding:"required"` + ReplyUserID string `json:"replyUserID" binding:"required"` + Content string `json:"content" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } type CommentOneWorkMomentResp struct { @@ -39,7 +44,9 @@ type CommentOneWorkMomentResp struct { } type DeleteCommentReq struct { - office.DeleteCommentReq + WorkMomentID string `json:"workMomentID" binding:"required"` + ContentID string `json:"contentID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } type DeleteCommentResp struct { @@ -54,7 +61,8 @@ type WorkMomentsUserCommonReq struct { } type GetWorkMomentByIDReq struct { - office.GetWorkMomentByIDReq + WorkMomentID string `json:"workMomentID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` } type WorkMoment struct { From 20f78d214f30e01569544bfa45f5606c12055038 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 28 Jun 2022 10:36:27 +0800 Subject: [PATCH 679/752] swagger --- pkg/base_info/work_moments_struct.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/base_info/work_moments_struct.go b/pkg/base_info/work_moments_struct.go index 7ff8c6f7d..1e09d849f 100644 --- a/pkg/base_info/work_moments_struct.go +++ b/pkg/base_info/work_moments_struct.go @@ -33,7 +33,7 @@ type LikeOneWorkMomentResp struct { type CommentOneWorkMomentReq struct { WorkMomentID string `json:"workMomentID" binding:"required"` - ReplyUserID string `json:"replyUserID" binding:"required"` + ReplyUserID string `json:"replyUserID"` Content string `json:"content" binding:"required"` OperationID string `json:"operationID" binding:"required"` } From 5213860919f5745ad7f3d644e3ad137feae1bd02 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 28 Jun 2022 10:38:33 +0800 Subject: [PATCH 680/752] docker-compose --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index e3af24080..f9d48b922 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -29,8 +29,8 @@ services: - TZ=Asia/Shanghai # cache - wiredTigerCacheSizeGB=1 -# - MONGO_INITDB_ROOT_USERNAME=openIM -# - MONGO_INITDB_ROOT_PASSWORD=openIM + - MONGO_INITDB_ROOT_USERNAME=openIM + - MONGO_INITDB_ROOT_PASSWORD=openIM #TZ: Asia/Shanghai restart: always From 9da4da5fd6ee78beeba50c470b32844965f6ca5a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 15:25:26 +0800 Subject: [PATCH 681/752] debug --- cmd/Open-IM-SDK-Core | 2 +- cmd/open_im_demo/main.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 6fc6be9eb..588c9bb77 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 6fc6be9eb996aec24781a3905aeb2c9550a5a041 +Subproject commit 588c9bb77b9bd89a9261964006568b8655233cb6 diff --git a/cmd/open_im_demo/main.go b/cmd/open_im_demo/main.go index 418d578a6..71d3e114c 100644 --- a/cmd/open_im_demo/main.go +++ b/cmd/open_im_demo/main.go @@ -32,6 +32,14 @@ func main() { authRouterGroup.POST("/login", register.Login) authRouterGroup.POST("/reset_password", register.ResetPassword) } + demoRouterGroup := r.Group("/auth") + { + demoRouterGroup.POST("/code", register.SendVerificationCode) + demoRouterGroup.POST("/verify", register.Verify) + demoRouterGroup.POST("/password", register.SetPassword) + demoRouterGroup.POST("/login", register.Login) + demoRouterGroup.POST("/reset_password", register.ResetPassword) + } defaultPorts := config.Config.Demo.Port ginPort := flag.Int("port", defaultPorts[0], "get ginServerPort from cmd,default 42233 as port") flag.Parse() From 5102f8329089ac7a43ffc417a0e26830b042d68e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 15:25:46 +0800 Subject: [PATCH 682/752] debug --- internal/api/group/group.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index d8bf2f5aa..0ce8950db 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -608,6 +608,7 @@ func SetGroupInfo(c *gin.Context) { if params.NeedVerification != nil { req.GroupInfo.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification} + log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfo.NeedVerification) } var ok bool From 722b5d0726e4cf301c1c35934ec04e860c8ff604 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 15:47:55 +0800 Subject: [PATCH 683/752] debug --- internal/rpc/group/group.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index eec4a71b4..171e82829 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -18,6 +18,7 @@ import ( pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" + "github.com/golang/protobuf/ptypes/wrappers" "google.golang.org/grpc" "math/big" "net" @@ -737,11 +738,13 @@ func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbGroup.GetGroupsI } var groupInfo open_im_sdk.GroupInfo cp.GroupDBCopyOpenIM(&groupInfo, groupInfoFromMysql) + //groupInfo.NeedVerification + groupInfo.NeedVerification = &wrappers.Int32Value{Value: groupInfoFromMysql.NeedVerification} groupsInfoList = append(groupsInfoList, &groupInfo) } resp := pbGroup.GetGroupsInfoResp{GroupInfoList: groupsInfoList} - log.NewInfo(req.OperationID, "GetGroupsInfo rpc return ", resp.String()) + log.NewInfo(req.OperationID, "GetGroupsInfo rpc return ", resp.String()) return &resp, nil } From de32c46ea4f40b0f3cf7884a5c7309f3a5a4709b Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 15:54:27 +0800 Subject: [PATCH 684/752] debug --- internal/api/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 0ce8950db..943e0fc96 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -423,8 +423,8 @@ func GetUserReqGroupApplicationList(c *gin.Context) { } log.NewInfo(req.OperationID, RpcResp) resp := api.GetGroupApplicationListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, GroupRequestList: RpcResp.GroupRequestList} - log.NewInfo(req.OperationID, "GetGroupApplicationList api return ", resp) resp.Data = jsonData.JsonDataList(resp.GroupRequestList) + log.NewInfo(req.OperationID, "GetGroupApplicationList api return ", resp) c.JSON(http.StatusOK, resp) } From 3e630a3882a0f53aec4c6cadd4873439a21e5150 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 17:23:20 +0800 Subject: [PATCH 685/752] fix bug --- internal/api/group/group.go | 15 ++++++++++++++- pkg/base_info/group_api_struct.go | 17 ++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 943e0fc96..6f230c847 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -464,12 +464,25 @@ func GetGroupsInfo(c *gin.Context) { return } - resp := api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, GroupInfoList: RpcResp.GroupInfoList} + resp := api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, GroupInfoList: transferGroupInfo(RpcResp.GroupInfoList)} resp.Data = jsonData.JsonDataList(resp.GroupInfoList) log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) c.JSON(http.StatusOK, resp) } +func transferGroupInfo(input []*open_im_sdk.GroupInfo) []*api.GroupInfoAlias { + var result []*api.GroupInfoAlias + for _, v := range input { + t := &api.GroupInfoAlias{} + utils.CopyStructFields(t, &v) + if v.NeedVerification != nil { + t.NeedVerification = v.NeedVerification.Value + } + result = append(result, t) + } + return result +} + //process application func ApplicationGroupResponse(c *gin.Context) { params := api.ApplicationGroupResponseReq{} diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index 20017ef57..61cb8c72a 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -124,9 +124,24 @@ type GetGroupInfoReq struct { } type GetGroupInfoResp struct { CommResp - GroupInfoList []*open_im_sdk.GroupInfo `json:"-"` + GroupInfoList []*GroupInfoAlias `json:"-"` Data []map[string]interface{} `json:"data"` } +type GroupInfoAlias struct { + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` + Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` + Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` + FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` + OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` + CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` + MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` + Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` + Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` + CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` + GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` + NeedVerification int32 `protobuf:"bytes,13,opt,name=needVerification" json:"needVerification,omitempty"` +} type ApplicationGroupResponseReq struct { OperationID string `json:"operationID" binding:"required"` From 92b219769d193fd36e7abe1f1bb18292ca8175cb Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 17:26:18 +0800 Subject: [PATCH 686/752] fix bug --- internal/api/group/super_group.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index b5c123700..9291fc8e5 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -81,7 +81,8 @@ func GetSuperGroupsInfo(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) return } - resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupInfoList}} + + resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: transferGroupInfo(rpcResp.GroupInfoList)}} resp.Data = jsonData.JsonDataList(resp.GroupInfoList) log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) c.JSON(http.StatusOK, resp) From dc9f7dc294f0a28d5227109d771a89080d4b0973 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 18:26:32 +0800 Subject: [PATCH 687/752] fix bug --- internal/api/group/group.go | 26 ++++++++++----------- pkg/base_info/group_api_struct.go | 38 ++++++++++++++++++------------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 6f230c847..73f01ba08 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -464,24 +464,24 @@ func GetGroupsInfo(c *gin.Context) { return } - resp := api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, GroupInfoList: transferGroupInfo(RpcResp.GroupInfoList)} + resp := api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, GroupInfoList: RpcResp.GroupInfoList} resp.Data = jsonData.JsonDataList(resp.GroupInfoList) log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) c.JSON(http.StatusOK, resp) } -func transferGroupInfo(input []*open_im_sdk.GroupInfo) []*api.GroupInfoAlias { - var result []*api.GroupInfoAlias - for _, v := range input { - t := &api.GroupInfoAlias{} - utils.CopyStructFields(t, &v) - if v.NeedVerification != nil { - t.NeedVerification = v.NeedVerification.Value - } - result = append(result, t) - } - return result -} +//func transferGroupInfo(input []*open_im_sdk.GroupInfo) []*api.GroupInfoAlias { +// var result []*api.GroupInfoAlias +// for _, v := range input { +// t := &api.GroupInfoAlias{} +// utils.CopyStructFields(t, &v) +// if v.NeedVerification != nil { +// t.NeedVerification = v.NeedVerification.Value +// } +// result = append(result, t) +// } +// return result +//} //process application func ApplicationGroupResponse(c *gin.Context) { diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index 61cb8c72a..9e65700fe 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -124,24 +124,30 @@ type GetGroupInfoReq struct { } type GetGroupInfoResp struct { CommResp - GroupInfoList []*GroupInfoAlias `json:"-"` + GroupInfoList []*open_im_sdk.GroupInfo `json:"-"` Data []map[string]interface{} `json:"data"` } -type GroupInfoAlias struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` - Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` - Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` - FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` - OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` - CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` - GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` - NeedVerification int32 `protobuf:"bytes,13,opt,name=needVerification" json:"needVerification,omitempty"` -} + +//type GroupInfoAlias struct { +// open_im_sdk.GroupInfo +// NeedVerification int32 `protobuf:"bytes,13,opt,name=needVerification" json:"needVerification,omitempty"` +//} + +//type GroupInfoAlias struct { +// GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` +// GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` +// Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` +// Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` +// FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` +// OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` +// CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` +// MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` +// Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` +// Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` +// CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` +// GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` +// NeedVerification int32 `protobuf:"bytes,13,opt,name=needVerification" json:"needVerification,omitempty"` +//} type ApplicationGroupResponseReq struct { OperationID string `json:"operationID" binding:"required"` From d17d7a792a6bf487f70a899c0a4e34e36cb588f1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 20:39:27 +0800 Subject: [PATCH 688/752] fix bug --- internal/api/group/group.go | 8 +- internal/rpc/group/group.go | 46 +-- pkg/proto/group/group.pb.go | 459 +++++++++++------------ pkg/proto/group/group.proto | 2 +- pkg/proto/sdk_ws/ws.pb.go | 699 ++++++++++++++++++++---------------- pkg/proto/sdk_ws/ws.proto | 12 +- 6 files changed, 663 insertions(+), 563 deletions(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 73f01ba08..74d56346c 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -615,13 +615,13 @@ func SetGroupInfo(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) return } - req := &rpc.SetGroupInfoReq{GroupInfo: &open_im_sdk.GroupInfo{}} - utils.CopyStructFields(req.GroupInfo, ¶ms) + req := &rpc.SetGroupInfoReq{GroupInfoForSet: &open_im_sdk.GroupInfoForSet{}} + utils.CopyStructFields(req.GroupInfoForSet, ¶ms) req.OperationID = params.OperationID if params.NeedVerification != nil { - req.GroupInfo.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification} - log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfo.NeedVerification) + req.GroupInfoForSet.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification} + log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfoForSet.NeedVerification) } var ok bool diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 171e82829..ea46bb005 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -18,7 +18,6 @@ import ( pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" - "github.com/golang/protobuf/ptypes/wrappers" "google.golang.org/grpc" "math/big" "net" @@ -739,7 +738,8 @@ func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbGroup.GetGroupsI var groupInfo open_im_sdk.GroupInfo cp.GroupDBCopyOpenIM(&groupInfo, groupInfoFromMysql) //groupInfo.NeedVerification - groupInfo.NeedVerification = &wrappers.Int32Value{Value: groupInfoFromMysql.NeedVerification} + + groupInfo.NeedVerification = groupInfoFromMysql.NeedVerification groupsInfoList = append(groupsInfoList, &groupInfo) } @@ -1030,9 +1030,9 @@ func hasAccess(req *pbGroup.SetGroupInfoReq) bool { if utils.IsContain(req.OpUserID, config.Config.Manager.AppManagerUid) { return true } - groupUserInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupInfo.GroupID, req.OpUserID) + groupUserInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupInfoForSet.GroupID, req.OpUserID) if err != nil { - log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed, ", err.Error(), req.GroupInfo.GroupID, req.OpUserID) + log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed, ", err.Error(), req.GroupInfoForSet.GroupID, req.OpUserID) return false } @@ -1049,9 +1049,9 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil } - group, err := imdb.GetGroupInfoByGroupID(req.GroupInfo.GroupID) + group, err := imdb.GetGroupInfoByGroupID(req.GroupInfoForSet.GroupID) if err != nil { - log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), req.GroupInfo.GroupID) + log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), req.GroupInfoForSet.GroupID) return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, http.WrapError(constant.ErrDB) } @@ -1066,28 +1066,28 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf notification := "" introduction := "" faceURL := "" - if group.GroupName != req.GroupInfo.GroupName && req.GroupInfo.GroupName != "" { + if group.GroupName != req.GroupInfoForSet.GroupName && req.GroupInfoForSet.GroupName != "" { changedType = 1 - groupName = req.GroupInfo.GroupName + groupName = req.GroupInfoForSet.GroupName } - if group.Notification != req.GroupInfo.Notification && req.GroupInfo.Notification != "" { + if group.Notification != req.GroupInfoForSet.Notification && req.GroupInfoForSet.Notification != "" { changedType = changedType | (1 << 1) - notification = req.GroupInfo.Notification + notification = req.GroupInfoForSet.Notification } - if group.Introduction != req.GroupInfo.Introduction && req.GroupInfo.Introduction != "" { + if group.Introduction != req.GroupInfoForSet.Introduction && req.GroupInfoForSet.Introduction != "" { changedType = changedType | (1 << 2) - introduction = req.GroupInfo.Introduction + introduction = req.GroupInfoForSet.Introduction } - if group.FaceURL != req.GroupInfo.FaceURL && req.GroupInfo.FaceURL != "" { + if group.FaceURL != req.GroupInfoForSet.FaceURL && req.GroupInfoForSet.FaceURL != "" { changedType = changedType | (1 << 3) - faceURL = req.GroupInfo.FaceURL + faceURL = req.GroupInfoForSet.FaceURL } - if req.GroupInfo.NeedVerification != nil { + if req.GroupInfoForSet.NeedVerification != nil { changedType = changedType | (1 << 4) m := make(map[string]interface{}) - m["need_verification"] = req.GroupInfo.NeedVerification.Value - if err := imdb.UpdateGroupInfoDefaultZero(req.GroupInfo.GroupID, m); err != nil { + m["need_verification"] = req.GroupInfoForSet.NeedVerification.Value + if err := imdb.UpdateGroupInfoDefaultZero(req.GroupInfoForSet.GroupID, m); err != nil { log.NewError(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), m) return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB) } @@ -1099,7 +1099,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf //} //only administrators can set group information var groupInfo db.Group - utils.CopyStructFields(&groupInfo, req.GroupInfo) + utils.CopyStructFields(&groupInfo, req.GroupInfoForSet) err = imdb.SetGroupInfo(groupInfo) if err != nil { log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), groupInfo) @@ -1107,11 +1107,11 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf } log.NewInfo(req.OperationID, "SetGroupInfo rpc return ", pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}) if changedType != 0 { - chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL, req.GroupInfo.NeedVerification) + chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfoForSet.GroupID, groupName, notification, introduction, faceURL, req.GroupInfoForSet.NeedVerification) } - if req.GroupInfo.Notification != "" { + if req.GroupInfoForSet.Notification != "" { //get group member user id - getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: req.OperationID, GroupID: req.GroupInfo.GroupID} + getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: req.OperationID, GroupID: req.GroupInfoForSet.GroupID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) if etcdConn == nil { errMsg := req.OperationID + "getcdv3.GetConn == nil" @@ -1132,9 +1132,9 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf conversation := pbConversation.Conversation{ OwnerUserID: req.OpUserID, - ConversationID: utils.GetConversationIDBySessionType(req.GroupInfo.GroupID, constant.GroupChatType), + ConversationID: utils.GetConversationIDBySessionType(req.GroupInfoForSet.GroupID, constant.GroupChatType), ConversationType: constant.GroupChatType, - GroupID: req.GroupInfo.GroupID, + GroupID: req.GroupInfoForSet.GroupID, } conversationReq.Conversation = &conversation conversationReq.OperationID = req.OperationID diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index e7bdc47c5..265ec66d7 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -37,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{0} + return fileDescriptor_group_40c147a29abb4e60, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -83,7 +83,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{1} + return fileDescriptor_group_40c147a29abb4e60, []int{1} } func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) @@ -132,7 +132,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{2} + return fileDescriptor_group_40c147a29abb4e60, []int{2} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -200,7 +200,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{3} + return fileDescriptor_group_40c147a29abb4e60, []int{3} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -254,7 +254,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{4} + return fileDescriptor_group_40c147a29abb4e60, []int{4} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -308,7 +308,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{5} + return fileDescriptor_group_40c147a29abb4e60, []int{5} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -350,19 +350,19 @@ func (m *GetGroupsInfoResp) GetGroupInfoList() []*sdk_ws.GroupInfo { } type SetGroupInfoReq struct { - GroupInfo *sdk_ws.GroupInfo `protobuf:"bytes,1,opt,name=GroupInfo" json:"GroupInfo,omitempty"` - OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + GroupInfoForSet *sdk_ws.GroupInfoForSet `protobuf:"bytes,1,opt,name=groupInfoForSet" json:"groupInfoForSet,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{6} + return fileDescriptor_group_40c147a29abb4e60, []int{6} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -382,9 +382,9 @@ func (m *SetGroupInfoReq) XXX_DiscardUnknown() { var xxx_messageInfo_SetGroupInfoReq proto.InternalMessageInfo -func (m *SetGroupInfoReq) GetGroupInfo() *sdk_ws.GroupInfo { +func (m *SetGroupInfoReq) GetGroupInfoForSet() *sdk_ws.GroupInfoForSet { if m != nil { - return m.GroupInfo + return m.GroupInfoForSet } return nil } @@ -414,7 +414,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{7} + return fileDescriptor_group_40c147a29abb4e60, []int{7} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -454,7 +454,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{8} + return fileDescriptor_group_40c147a29abb4e60, []int{8} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -508,7 +508,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{9} + return fileDescriptor_group_40c147a29abb4e60, []int{9} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -562,7 +562,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{10} + return fileDescriptor_group_40c147a29abb4e60, []int{10} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -615,7 +615,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{11} + return fileDescriptor_group_40c147a29abb4e60, []int{11} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -664,7 +664,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{12} + return fileDescriptor_group_40c147a29abb4e60, []int{12} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -730,7 +730,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{13} + return fileDescriptor_group_40c147a29abb4e60, []int{13} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -771,7 +771,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{14} + return fileDescriptor_group_40c147a29abb4e60, []int{14} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -830,7 +830,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{15} + return fileDescriptor_group_40c147a29abb4e60, []int{15} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -873,7 +873,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{16} + return fileDescriptor_group_40c147a29abb4e60, []int{16} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -946,7 +946,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{17} + return fileDescriptor_group_40c147a29abb4e60, []int{17} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -986,7 +986,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{18} + return fileDescriptor_group_40c147a29abb4e60, []int{18} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -1038,7 +1038,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{19} + return fileDescriptor_group_40c147a29abb4e60, []int{19} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -1080,7 +1080,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{20} + return fileDescriptor_group_40c147a29abb4e60, []int{20} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -1149,7 +1149,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{} func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{21} + return fileDescriptor_group_40c147a29abb4e60, []int{21} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -1211,7 +1211,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{} func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{22} + return fileDescriptor_group_40c147a29abb4e60, []int{22} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -1272,7 +1272,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{23} + return fileDescriptor_group_40c147a29abb4e60, []int{23} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -1328,7 +1328,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{24} + return fileDescriptor_group_40c147a29abb4e60, []int{24} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1395,7 +1395,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} } func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (*Id2Result) ProtoMessage() {} func (*Id2Result) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{25} + return fileDescriptor_group_40c147a29abb4e60, []int{25} } func (m *Id2Result) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Id2Result.Unmarshal(m, b) @@ -1442,7 +1442,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{26} + return fileDescriptor_group_40c147a29abb4e60, []int{26} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1496,7 +1496,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{27} + return fileDescriptor_group_40c147a29abb4e60, []int{27} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1550,7 +1550,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{} func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{28} + return fileDescriptor_group_40c147a29abb4e60, []int{28} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1606,7 +1606,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{29} + return fileDescriptor_group_40c147a29abb4e60, []int{29} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1674,7 +1674,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{30} + return fileDescriptor_group_40c147a29abb4e60, []int{30} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1728,7 +1728,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{31} + return fileDescriptor_group_40c147a29abb4e60, []int{31} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1782,7 +1782,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{32} + return fileDescriptor_group_40c147a29abb4e60, []int{32} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1836,7 +1836,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{33} + return fileDescriptor_group_40c147a29abb4e60, []int{33} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1890,7 +1890,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{34} + return fileDescriptor_group_40c147a29abb4e60, []int{34} } func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) @@ -1944,7 +1944,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{35} + return fileDescriptor_group_40c147a29abb4e60, []int{35} } func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) @@ -1997,7 +1997,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{36} + return fileDescriptor_group_40c147a29abb4e60, []int{36} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -2044,7 +2044,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{37} + return fileDescriptor_group_40c147a29abb4e60, []int{37} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -2097,7 +2097,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{38} + return fileDescriptor_group_40c147a29abb4e60, []int{38} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -2144,7 +2144,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{39} + return fileDescriptor_group_40c147a29abb4e60, []int{39} } func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) @@ -2195,7 +2195,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{} func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{40} + return fileDescriptor_group_40c147a29abb4e60, []int{40} } func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) @@ -2229,7 +2229,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{41} + return fileDescriptor_group_40c147a29abb4e60, []int{41} } func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) @@ -2287,7 +2287,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{42} + return fileDescriptor_group_40c147a29abb4e60, []int{42} } func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) @@ -2319,7 +2319,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{43} + return fileDescriptor_group_40c147a29abb4e60, []int{43} } func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) @@ -2363,7 +2363,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{44} + return fileDescriptor_group_40c147a29abb4e60, []int{44} } func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) @@ -2395,7 +2395,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{45} + return fileDescriptor_group_40c147a29abb4e60, []int{45} } func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) @@ -2440,7 +2440,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{46} + return fileDescriptor_group_40c147a29abb4e60, []int{46} } func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) @@ -2481,7 +2481,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{47} + return fileDescriptor_group_40c147a29abb4e60, []int{47} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -2542,7 +2542,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{48} + return fileDescriptor_group_40c147a29abb4e60, []int{48} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -2597,7 +2597,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{49} + return fileDescriptor_group_40c147a29abb4e60, []int{49} } func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) @@ -2657,7 +2657,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{50} + return fileDescriptor_group_40c147a29abb4e60, []int{50} } func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) @@ -2705,7 +2705,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{51} + return fileDescriptor_group_40c147a29abb4e60, []int{51} } func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) @@ -2765,7 +2765,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{} func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{52} + return fileDescriptor_group_40c147a29abb4e60, []int{52} } func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) @@ -2812,7 +2812,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{53} + return fileDescriptor_group_40c147a29abb4e60, []int{53} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -2864,7 +2864,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{54} + return fileDescriptor_group_40c147a29abb4e60, []int{54} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -2906,7 +2906,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{55} + return fileDescriptor_group_40c147a29abb4e60, []int{55} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -2972,7 +2972,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{56} + return fileDescriptor_group_40c147a29abb4e60, []int{56} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -3013,7 +3013,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{57} + return fileDescriptor_group_40c147a29abb4e60, []int{57} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -3072,7 +3072,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{58} + return fileDescriptor_group_40c147a29abb4e60, []int{58} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -3112,7 +3112,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{59} + return fileDescriptor_group_40c147a29abb4e60, []int{59} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -3164,7 +3164,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{60} + return fileDescriptor_group_40c147a29abb4e60, []int{60} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -3204,7 +3204,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{61} + return fileDescriptor_group_40c147a29abb4e60, []int{61} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -3256,7 +3256,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{62} + return fileDescriptor_group_40c147a29abb4e60, []int{62} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -3298,7 +3298,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{63} + return fileDescriptor_group_40c147a29abb4e60, []int{63} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -3364,7 +3364,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{64} + return fileDescriptor_group_40c147a29abb4e60, []int{64} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -3404,7 +3404,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListReq) ProtoMessage() {} func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{65} + return fileDescriptor_group_40c147a29abb4e60, []int{65} } func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) @@ -3457,7 +3457,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListResp) ProtoMessage() {} func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{66} + return fileDescriptor_group_40c147a29abb4e60, []int{66} } func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) @@ -3504,7 +3504,7 @@ func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} } func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupsInfoReq) ProtoMessage() {} func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{67} + return fileDescriptor_group_40c147a29abb4e60, []int{67} } func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b) @@ -3557,7 +3557,7 @@ func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{} func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupsInfoResp) ProtoMessage() {} func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{68} + return fileDescriptor_group_40c147a29abb4e60, []int{68} } func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b) @@ -3609,7 +3609,7 @@ func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} } func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberInfoReq) ProtoMessage() {} func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{69} + return fileDescriptor_group_40c147a29abb4e60, []int{69} } func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) @@ -3696,7 +3696,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{} func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberInfoResp) ProtoMessage() {} func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_f05abf5eae29d157, []int{70} + return fileDescriptor_group_40c147a29abb4e60, []int{70} } func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b) @@ -4925,156 +4925,157 @@ var _Group_serviceDesc = grpc.ServiceDesc{ Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_f05abf5eae29d157) } +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_40c147a29abb4e60) } -var fileDescriptor_group_f05abf5eae29d157 = []byte{ - // 2362 bytes of a gzipped FileDescriptorProto +var fileDescriptor_group_40c147a29abb4e60 = []byte{ + // 2381 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49, - 0x15, 0x57, 0xdb, 0x99, 0xd8, 0xf3, 0x6c, 0x67, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7, - 0x37, 0x2c, 0x11, 0x2c, 0xb6, 0x70, 0xa4, 0x08, 0x58, 0x44, 0x88, 0xff, 0x24, 0x9e, 0x24, 0xb6, - 0x71, 0x3b, 0xcb, 0x21, 0x12, 0x0a, 0x9d, 0xe9, 0xf2, 0x68, 0xf0, 0x4c, 0x77, 0xbb, 0xab, 0xc7, - 0x0e, 0x5c, 0x56, 0x5c, 0x56, 0x5a, 0x40, 0x02, 0x84, 0xc4, 0x09, 0x09, 0xf6, 0x04, 0x07, 0x0e, - 0x1c, 0xe0, 0x8c, 0xf8, 0x18, 0x5c, 0xf9, 0x02, 0x7c, 0x02, 0x24, 0xd4, 0x55, 0xd5, 0xd5, 0xd5, - 0x5d, 0xd5, 0xed, 0x49, 0x4f, 0xb2, 0xb9, 0xb4, 0x54, 0x55, 0xaf, 0xea, 0xfd, 0xde, 0xab, 0xf7, - 0x5e, 0xd5, 0x7b, 0xd5, 0xb0, 0xd0, 0x0d, 0xfd, 0x61, 0xb0, 0x41, 0xbf, 0xeb, 0x41, 0xe8, 0x47, - 0x3e, 0xaa, 0xd1, 0x86, 0x79, 0xeb, 0x30, 0xc0, 0xde, 0x8b, 0xf6, 0xfe, 0x46, 0x70, 0xda, 0xdd, - 0xa0, 0x23, 0x1b, 0xc4, 0x3d, 0x7d, 0x71, 0x41, 0x36, 0x2e, 0x08, 0xa3, 0x34, 0xbf, 0x5a, 0x4c, - 0x12, 0x3a, 0x41, 0x80, 0x43, 0x4e, 0x68, 0x7d, 0x0f, 0x60, 0xdb, 0x1f, 0x0c, 0x7c, 0xcf, 0xc6, - 0x24, 0x40, 0x2d, 0x98, 0xda, 0x0d, 0xc3, 0x6d, 0xdf, 0xc5, 0x2d, 0x63, 0xcd, 0xb8, 0x53, 0xb3, - 0x93, 0x26, 0x5a, 0x82, 0xab, 0xbb, 0x61, 0xb8, 0x4f, 0xba, 0xad, 0x89, 0x35, 0xe3, 0x4e, 0xdd, - 0xe6, 0x2d, 0xeb, 0x31, 0xa0, 0x47, 0x31, 0xa8, 0x07, 0xae, 0xbb, 0x8f, 0x07, 0x2f, 0x71, 0xd8, - 0xf6, 0x4e, 0xfc, 0x98, 0xfa, 0x13, 0x82, 0xc3, 0xf6, 0x0e, 0x5d, 0xa6, 0x6e, 0xf3, 0x16, 0x5a, - 0x85, 0xba, 0xed, 0xf7, 0xf1, 0x53, 0x7c, 0x8e, 0xfb, 0x74, 0xa1, 0x9a, 0x9d, 0x76, 0x58, 0xff, - 0x35, 0xe0, 0xda, 0x76, 0x88, 0x9d, 0x08, 0xd3, 0x25, 0x6d, 0x7c, 0x86, 0x1e, 0xc0, 0xb5, 0xb6, - 0xd7, 0x8b, 0xd8, 0xd2, 0x4f, 0x7b, 0x24, 0x6a, 0x19, 0x6b, 0x93, 0x77, 0x66, 0x36, 0x57, 0xd6, - 0x99, 0x5e, 0x54, 0xde, 0x76, 0x6e, 0x02, 0xfa, 0x0e, 0xd4, 0x29, 0x55, 0x3c, 0x48, 0x79, 0xce, - 0x6c, 0xae, 0xae, 0x13, 0x1c, 0x9e, 0xe3, 0xf0, 0x85, 0x13, 0xf4, 0x5e, 0x04, 0x4e, 0xe8, 0x0c, - 0xc8, 0xba, 0xa0, 0xb1, 0x53, 0x72, 0xb4, 0x06, 0x33, 0x87, 0x01, 0x0e, 0x9d, 0xa8, 0xe7, 0x7b, - 0xed, 0x9d, 0xd6, 0x24, 0x15, 0x46, 0xee, 0x42, 0x26, 0x4c, 0x1f, 0x06, 0x5c, 0xd6, 0x2b, 0x74, - 0x58, 0xb4, 0xe9, 0xec, 0x0b, 0x0f, 0x87, 0x7c, 0xb8, 0xc6, 0x67, 0xa7, 0x5d, 0xd6, 0xa7, 0xd0, - 0xc8, 0x08, 0x5c, 0x65, 0x0b, 0xb2, 0x02, 0x4e, 0xbe, 0x96, 0x80, 0x56, 0x08, 0xf3, 0x8f, 0x70, - 0x44, 0xdb, 0x84, 0x8e, 0xe1, 0xb3, 0x18, 0x36, 0x23, 0xd8, 0x11, 0x0a, 0xaf, 0xdb, 0x72, 0x57, - 0x5e, 0x2d, 0x13, 0xe5, 0x6a, 0x99, 0xcc, 0xaa, 0xc5, 0xfa, 0xdc, 0x80, 0x85, 0x1c, 0xd3, 0x4a, - 0x72, 0x6f, 0xc1, 0x9c, 0x10, 0x84, 0x22, 0x9d, 0xa4, 0xa6, 0x51, 0x2e, 0x7b, 0x76, 0x8a, 0xf5, - 0x4b, 0x03, 0x1a, 0xc7, 0x1c, 0x4b, 0x22, 0x7f, 0x46, 0x9f, 0xc6, 0xeb, 0x19, 0x8c, 0x2c, 0xf7, - 0x84, 0xc6, 0x1c, 0x4a, 0x8d, 0xc9, 0xda, 0x85, 0xf9, 0x2c, 0x18, 0x12, 0xa0, 0x6f, 0xca, 0x0e, - 0xca, 0xe1, 0x2c, 0x70, 0xeb, 0x4f, 0x07, 0x6c, 0x89, 0xc8, 0xfa, 0x19, 0x98, 0x89, 0x7e, 0x1f, - 0x04, 0x41, 0xbf, 0xd7, 0xa1, 0xeb, 0xc7, 0xf2, 0xc6, 0xe2, 0xc9, 0x10, 0x8d, 0x72, 0x88, 0x9a, - 0x8d, 0xbd, 0x09, 0xf0, 0x30, 0xf4, 0x07, 0x99, 0xad, 0x95, 0x7a, 0xac, 0x3f, 0x18, 0x70, 0xa3, - 0x90, 0x79, 0xa5, 0x6d, 0x7e, 0x02, 0xf3, 0x49, 0x38, 0x18, 0x62, 0x12, 0x49, 0x3b, 0xfd, 0x7e, - 0xd1, 0xae, 0x70, 0x52, 0x5b, 0x99, 0x68, 0x45, 0xb0, 0xfa, 0x08, 0x47, 0x31, 0x56, 0x1b, 0x9f, - 0x69, 0x94, 0x53, 0x14, 0xb8, 0xc6, 0xdb, 0xd7, 0x3f, 0x1a, 0xf0, 0x5e, 0x09, 0xdb, 0x4a, 0xbb, - 0xac, 0xd5, 0xcb, 0x44, 0x55, 0xbd, 0xfc, 0xd3, 0x80, 0xe6, 0xb3, 0xd0, 0xf1, 0xc8, 0x09, 0x0e, - 0xe9, 0x20, 0x8d, 0x52, 0xb1, 0x46, 0x5a, 0x30, 0xc5, 0x5d, 0x9f, 0xab, 0x24, 0x69, 0xa2, 0x0f, - 0xe1, 0xda, 0x61, 0xdf, 0x95, 0x23, 0x1c, 0xd3, 0x4c, 0xae, 0x37, 0xa6, 0x3b, 0xc0, 0x17, 0x32, - 0x1d, 0x53, 0x51, 0xae, 0x37, 0xaf, 0xc7, 0x2b, 0xe5, 0x51, 0xa5, 0x96, 0x8b, 0x2a, 0x4f, 0x60, - 0x49, 0x27, 0x40, 0x35, 0x0f, 0xfa, 0xcc, 0x80, 0xd9, 0xc7, 0x7e, 0xcf, 0x13, 0xe7, 0x50, 0xb1, - 0x16, 0x6e, 0x02, 0xd8, 0xf8, 0x6c, 0x1f, 0x13, 0xe2, 0x74, 0x31, 0xd7, 0x80, 0xd4, 0x53, 0x16, - 0x09, 0x2f, 0x97, 0xd8, 0xda, 0x82, 0x39, 0x09, 0x47, 0x35, 0x61, 0xfe, 0x1d, 0xbb, 0x64, 0xce, - 0x1f, 0xe3, 0x01, 0xdf, 0x23, 0x98, 0xc7, 0x7b, 0x19, 0x85, 0x51, 0xae, 0xf7, 0xbc, 0xf5, 0x4b, - 0x9a, 0x99, 0x54, 0x34, 0x23, 0x85, 0x8a, 0x2b, 0xf9, 0x50, 0x11, 0x8f, 0xef, 0x39, 0x9e, 0xdb, - 0xc7, 0x6e, 0xec, 0xf4, 0x6c, 0x3f, 0xa5, 0x1e, 0x64, 0xc1, 0x2c, 0x6b, 0xd9, 0x98, 0x0c, 0xfb, - 0x51, 0xeb, 0x2a, 0x8d, 0x17, 0x99, 0x3e, 0xeb, 0x08, 0x56, 0x8b, 0x45, 0xab, 0xa6, 0xae, 0x13, - 0x98, 0x3d, 0x1a, 0xf6, 0xa2, 0x11, 0xb6, 0x7e, 0xbc, 0x63, 0x70, 0x0b, 0xe6, 0x24, 0x3e, 0xd5, - 0xb0, 0x7e, 0x61, 0x40, 0x33, 0x89, 0xb6, 0xe9, 0x95, 0xa7, 0x1c, 0xf5, 0x58, 0xa1, 0x2c, 0x0e, - 0x90, 0x0f, 0x7b, 0xfd, 0x08, 0x87, 0x74, 0x43, 0x6b, 0x36, 0x6f, 0xc5, 0xfc, 0x0e, 0xf0, 0xab, - 0xe8, 0x18, 0x9f, 0xd1, 0x9d, 0xac, 0xd9, 0x49, 0xd3, 0xfa, 0xab, 0x01, 0x4b, 0x3a, 0x8c, 0x95, - 0x0e, 0x83, 0x87, 0x00, 0x83, 0xf4, 0x2e, 0xc8, 0x8e, 0x81, 0x0f, 0x8b, 0xc2, 0x1d, 0xe3, 0xf6, - 0x70, 0xd8, 0xef, 0xd3, 0xd3, 0x54, 0x9a, 0x19, 0x73, 0xf6, 0x38, 0x5c, 0x26, 0x47, 0xd2, 0xb4, - 0x7e, 0xa3, 0xc0, 0x15, 0x17, 0xa3, 0xd2, 0x20, 0x20, 0xc1, 0x9a, 0xa0, 0x37, 0x26, 0x99, 0xdd, - 0x78, 0x41, 0xe0, 0x77, 0x06, 0x2c, 0x6b, 0x21, 0xbd, 0x4b, 0x15, 0x5a, 0x7f, 0x33, 0x00, 0x3d, - 0xe9, 0x75, 0x4e, 0x25, 0xba, 0x72, 0x25, 0x7d, 0x0d, 0xe6, 0x63, 0x7a, 0xec, 0x32, 0xc1, 0x25, - 0x55, 0x29, 0xfd, 0x31, 0x78, 0x1b, 0x3b, 0xc4, 0xf7, 0xb8, 0xba, 0x78, 0x2b, 0xaf, 0xac, 0x5a, - 0xb9, 0xcb, 0x5d, 0xcd, 0xb9, 0xdc, 0xc7, 0x50, 0x6f, 0xbb, 0x9b, 0x2c, 0x74, 0x14, 0x1e, 0xf5, - 0x94, 0x35, 0x0d, 0x38, 0x2c, 0x41, 0xe1, 0x2d, 0xeb, 0x53, 0x58, 0x54, 0xc4, 0xad, 0xb4, 0x01, - 0xf7, 0x60, 0x4e, 0xa0, 0x90, 0xf6, 0x60, 0x9e, 0xbb, 0xba, 0x18, 0xb3, 0xb3, 0x64, 0xd6, 0x90, - 0xfa, 0x7a, 0x7c, 0x1c, 0x60, 0x97, 0xa2, 0x48, 0x7c, 0x3d, 0x1b, 0x68, 0x0d, 0x25, 0xd0, 0xae, - 0xc1, 0x8c, 0xaf, 0xc6, 0x29, 0x7f, 0xc4, 0x38, 0xf5, 0x19, 0x73, 0x08, 0x85, 0xef, 0x58, 0xb9, - 0xca, 0xc8, 0xf7, 0xf5, 0x94, 0xdc, 0xfa, 0xbb, 0x01, 0xd7, 0xdb, 0xde, 0x79, 0x2f, 0xc2, 0x31, - 0xb2, 0x67, 0xbe, 0x88, 0xd0, 0x97, 0xc7, 0xe1, 0xe2, 0x43, 0x2a, 0x35, 0xb4, 0x2b, 0x19, 0x43, - 0xfb, 0x08, 0x16, 0x18, 0x2f, 0xd9, 0x5a, 0x6b, 0xd4, 0x5a, 0xd5, 0x81, 0x52, 0xa3, 0xfb, 0xb9, - 0x01, 0x4d, 0x0d, 0xec, 0x2f, 0xd5, 0x74, 0x3c, 0xb8, 0x2e, 0x2e, 0xe5, 0xfd, 0xfe, 0x28, 0xce, - 0x3a, 0xde, 0x85, 0xf7, 0xb7, 0xd2, 0xb9, 0x24, 0x31, 0x7c, 0xa7, 0xf1, 0xea, 0xf7, 0x06, 0x4c, - 0x6f, 0xef, 0x1f, 0x53, 0xb2, 0xb1, 0x72, 0xbc, 0x3b, 0xd0, 0x60, 0xbc, 0x1c, 0x12, 0xe1, 0xf0, - 0xc0, 0x19, 0x24, 0xd7, 0xbe, 0x7c, 0x37, 0xba, 0xcd, 0x33, 0x54, 0xd6, 0xd5, 0x76, 0xb9, 0xaa, - 0xb2, 0x9d, 0x71, 0x78, 0x9f, 0x49, 0x94, 0x15, 0x6f, 0xca, 0x2a, 0xc7, 0x46, 0x57, 0x66, 0xdb, - 0x92, 0x76, 0xa0, 0x1d, 0x80, 0x1f, 0x38, 0xdd, 0x9e, 0x47, 0x55, 0xcd, 0xeb, 0x19, 0xb7, 0x35, - 0xd0, 0xf9, 0xed, 0x3e, 0xa5, 0xb5, 0xa5, 0x79, 0x23, 0x6c, 0xe1, 0x17, 0x06, 0xcc, 0xa6, 0xa8, - 0x48, 0x80, 0xbe, 0x01, 0xf5, 0x44, 0x7d, 0x84, 0x57, 0x61, 0x1a, 0xc9, 0xed, 0x84, 0xf7, 0xdb, - 0x29, 0xc5, 0x1b, 0xc2, 0x29, 0x74, 0x31, 0x1c, 0x10, 0x8a, 0xb2, 0x66, 0xa7, 0x1d, 0xd6, 0x79, - 0x0a, 0x91, 0xc4, 0x9a, 0xcb, 0xf2, 0x34, 0xde, 0x8c, 0x6e, 0xd4, 0x70, 0x62, 0xfd, 0xc9, 0x80, - 0x39, 0x89, 0xf1, 0xbb, 0x52, 0x8e, 0x09, 0xd3, 0x89, 0x2e, 0xb8, 0x6e, 0x44, 0xdb, 0x3a, 0x4c, - 0x6b, 0x2c, 0x1a, 0x77, 0x77, 0xb3, 0xee, 0xee, 0x8e, 0x20, 0xf3, 0x29, 0x34, 0x59, 0x93, 0xd5, - 0xaa, 0x8e, 0x23, 0x27, 0x1a, 0x92, 0xf2, 0x45, 0x97, 0xe0, 0x2a, 0x23, 0x4b, 0x4e, 0x52, 0xd6, - 0x1a, 0xc1, 0xf8, 0x5a, 0xb0, 0xa4, 0x63, 0xc6, 0x32, 0x33, 0xc4, 0x87, 0x68, 0x3a, 0xed, 0xf7, - 0xf1, 0xa5, 0x20, 0x68, 0xd8, 0x72, 0x93, 0xb0, 0xc2, 0x5a, 0xd9, 0x52, 0xe4, 0x64, 0xae, 0x14, - 0x39, 0xc2, 0xa5, 0xac, 0x09, 0x8b, 0x0a, 0x0e, 0x12, 0x58, 0x4f, 0xe1, 0xda, 0x0e, 0xee, 0x63, - 0xa9, 0x84, 0x39, 0x8e, 0xd2, 0x17, 0xa0, 0x91, 0x59, 0x8d, 0x04, 0xd6, 0x3e, 0x34, 0x92, 0x8d, - 0xdd, 0xfa, 0x69, 0xdb, 0x1d, 0x97, 0xc3, 0xfd, 0xb4, 0x00, 0xc8, 0x96, 0x23, 0x01, 0xfa, 0x7a, - 0x1a, 0x28, 0xb9, 0x13, 0x29, 0xb6, 0x2c, 0x08, 0xac, 0x7f, 0x28, 0x29, 0x08, 0xd9, 0xde, 0x3f, - 0x2e, 0x87, 0x65, 0xc2, 0x74, 0xac, 0x34, 0x29, 0x74, 0x8a, 0x76, 0xce, 0x35, 0x26, 0xdf, 0x8c, - 0x0f, 0x6b, 0xf6, 0xef, 0x5f, 0xea, 0x3d, 0x9f, 0xe2, 0x26, 0x01, 0xfa, 0x3e, 0x4c, 0xb1, 0x73, - 0x23, 0x71, 0xe5, 0x51, 0x8f, 0x9b, 0x64, 0x1a, 0xda, 0xd5, 0xf8, 0xf7, 0x57, 0xb4, 0x42, 0xb0, - 0x5c, 0xb5, 0x40, 0x8a, 0x9b, 0x00, 0x8c, 0x83, 0x14, 0xfe, 0xa4, 0x1e, 0xeb, 0x57, 0x06, 0xb4, - 0x6c, 0x3c, 0xf0, 0xcf, 0xf1, 0x6b, 0xa9, 0xbf, 0x05, 0x53, 0xcc, 0x09, 0x08, 0xbf, 0x7f, 0x27, - 0xcd, 0xd7, 0xaa, 0x77, 0xbb, 0xb9, 0x7a, 0xb7, 0x6b, 0xed, 0xc3, 0x4a, 0x01, 0x1a, 0x76, 0xf0, - 0x93, 0x61, 0xa7, 0x83, 0x09, 0xe1, 0x15, 0xe5, 0xa4, 0x19, 0x7b, 0xe8, 0x89, 0xd3, 0xeb, 0x63, - 0x97, 0xa3, 0xe1, 0x2d, 0xeb, 0x73, 0x03, 0x9a, 0x0f, 0x5c, 0xf7, 0x6d, 0x88, 0xe6, 0xaa, 0xa2, - 0xb9, 0xa5, 0xa2, 0x3d, 0x86, 0x25, 0x1d, 0x94, 0x4a, 0x72, 0xf5, 0xa0, 0xb1, 0xd3, 0x23, 0x83, - 0x1e, 0x21, 0x22, 0x46, 0x98, 0x30, 0xed, 0xe7, 0x6a, 0xb2, 0x7e, 0x30, 0xf2, 0xed, 0xbd, 0x05, - 0x53, 0xdd, 0xec, 0xed, 0x96, 0x37, 0xad, 0x5d, 0x98, 0xcf, 0xb2, 0x62, 0x65, 0x86, 0xce, 0x28, - 0x65, 0x86, 0x94, 0xc8, 0xfa, 0x8b, 0x01, 0x68, 0x7f, 0x18, 0xe1, 0xdc, 0x71, 0xf2, 0x96, 0x50, - 0xc7, 0x8a, 0x1b, 0xca, 0x45, 0x23, 0xde, 0x42, 0x16, 0xcc, 0x0e, 0x86, 0x11, 0x76, 0x8f, 0x71, - 0xc7, 0xf7, 0x5c, 0x42, 0xb3, 0xbf, 0x39, 0x3b, 0xd3, 0x67, 0xed, 0xc1, 0xa2, 0x82, 0xb4, 0x9a, - 0xd0, 0xbf, 0x30, 0xa0, 0xb5, 0xed, 0x78, 0x1d, 0xdc, 0x7f, 0xf7, 0xa2, 0x5b, 0x07, 0xb0, 0x52, - 0x80, 0xa5, 0x9a, 0x70, 0x27, 0x30, 0x2b, 0x56, 0x7a, 0x9b, 0x06, 0xb8, 0x05, 0x73, 0x12, 0x9f, - 0x6a, 0x58, 0xfb, 0x80, 0x72, 0xb2, 0xbf, 0x4d, 0xc4, 0x7b, 0xb0, 0xa8, 0x70, 0xab, 0x86, 0xfb, - 0xcf, 0x06, 0xac, 0x1c, 0x67, 0x4e, 0x98, 0x83, 0x5e, 0xe7, 0xd4, 0x73, 0x06, 0xc9, 0x8d, 0xa5, - 0x9b, 0x4d, 0xbd, 0xba, 0x69, 0xea, 0xe5, 0x71, 0xc2, 0xe4, 0x74, 0x4c, 0xda, 0x19, 0xa9, 0x27, - 0xcb, 0xa5, 0xbe, 0xa2, 0x4a, 0x9d, 0x5a, 0x57, 0x2d, 0x63, 0x5d, 0x87, 0x60, 0x16, 0x01, 0xad, - 0x56, 0x97, 0x0c, 0xe9, 0x0b, 0x14, 0x2b, 0x19, 0x1c, 0x0f, 0x03, 0x5e, 0x92, 0x4f, 0xea, 0x15, - 0x39, 0xa0, 0x46, 0x19, 0xd0, 0x89, 0x4c, 0x04, 0x28, 0x11, 0x3f, 0x3e, 0x0c, 0x6f, 0x14, 0x32, - 0xad, 0xb4, 0x83, 0x63, 0x55, 0x2b, 0x2e, 0xe8, 0xb5, 0x28, 0xc5, 0xf1, 0xa5, 0x3d, 0xaf, 0xfe, - 0x9a, 0x5d, 0x6c, 0x14, 0xce, 0xd5, 0x54, 0xf0, 0x26, 0x1e, 0x59, 0xff, 0x33, 0x01, 0xcd, 0xac, - 0x7d, 0x49, 0x15, 0xd5, 0x02, 0x27, 0xa8, 0x60, 0x01, 0x23, 0x38, 0xc0, 0xb7, 0x24, 0xd7, 0xaa, - 0xf1, 0xac, 0xbf, 0xeb, 0xfb, 0xdd, 0x3e, 0x66, 0xbf, 0x43, 0xbc, 0x1c, 0x9e, 0xac, 0x1f, 0x47, - 0x61, 0xcf, 0xeb, 0xfe, 0xd0, 0xe9, 0x0f, 0xb1, 0xe4, 0x78, 0xf7, 0x60, 0xea, 0xc4, 0xe9, 0xe0, - 0x4f, 0xec, 0xa7, 0xb4, 0xc0, 0x73, 0xd9, 0xc4, 0x84, 0x18, 0x7d, 0x1b, 0xea, 0xa1, 0x48, 0x33, - 0xa6, 0xe8, 0xcc, 0x1b, 0xca, 0xcc, 0xb6, 0x17, 0xdd, 0xdd, 0x64, 0x13, 0x53, 0x6a, 0xf4, 0x11, - 0x4c, 0xe0, 0x57, 0xad, 0xe9, 0x11, 0xb8, 0x4d, 0xe0, 0x57, 0xd6, 0x13, 0x58, 0xd2, 0xe9, 0xb8, - 0x92, 0xff, 0x6e, 0xfe, 0x6f, 0x11, 0xd8, 0xbf, 0x26, 0xe8, 0xbb, 0x30, 0xd3, 0x49, 0xff, 0x50, - 0x40, 0xcd, 0x64, 0x5e, 0xe6, 0x37, 0x0d, 0x73, 0x49, 0xd7, 0x4d, 0x02, 0x74, 0x0f, 0xea, 0x3f, - 0x49, 0x9e, 0xaf, 0xd0, 0x22, 0x27, 0x92, 0x1f, 0xd6, 0xcc, 0xeb, 0x6a, 0x27, 0x9b, 0x77, 0x96, - 0xbc, 0x8d, 0x88, 0x79, 0xf2, 0xab, 0x8c, 0x98, 0x97, 0x7d, 0x42, 0xd9, 0x82, 0xb9, 0xae, 0xfc, - 0x67, 0x01, 0x5a, 0x4e, 0xfe, 0x13, 0xc9, 0xfd, 0xe4, 0x60, 0xb6, 0xf4, 0x03, 0x24, 0x40, 0xf7, - 0x61, 0x96, 0x48, 0x8f, 0xf0, 0x28, 0x91, 0x2d, 0xf7, 0x9b, 0x80, 0xb9, 0xac, 0xed, 0x27, 0x01, - 0xfa, 0x31, 0x2c, 0x77, 0xf5, 0x2f, 0xe0, 0xe8, 0x56, 0x8e, 0xab, 0xfa, 0x02, 0x6d, 0x5a, 0x97, - 0x91, 0x90, 0x00, 0x9d, 0xc0, 0x4a, 0xb7, 0xe8, 0x39, 0x19, 0x7d, 0x90, 0x2e, 0x50, 0xf8, 0xce, - 0x6d, 0xde, 0xbe, 0x9c, 0x88, 0x04, 0xe8, 0x08, 0x50, 0xa4, 0xbc, 0xa9, 0xa2, 0x55, 0x3e, 0x57, - 0xfb, 0x5e, 0x6c, 0xbe, 0x57, 0x32, 0x4a, 0x02, 0xd4, 0x81, 0x56, 0xb7, 0xe0, 0xc1, 0x0e, 0x59, - 0x99, 0x9f, 0x7a, 0xb4, 0x8f, 0x95, 0xe6, 0x07, 0x97, 0xd2, 0x30, 0xdc, 0x5d, 0xe5, 0xc5, 0x49, - 0xe0, 0xd6, 0x3e, 0x98, 0x09, 0xdc, 0x05, 0x4f, 0x55, 0xcf, 0x60, 0xb1, 0xab, 0x3e, 0xc1, 0x20, - 0xfd, 0x2c, 0x61, 0x65, 0x37, 0xcb, 0x86, 0x49, 0x80, 0xf6, 0xa0, 0x71, 0x9a, 0x7d, 0x53, 0x40, - 0xc9, 0x9f, 0x4d, 0xea, 0xd3, 0x8a, 0x69, 0x16, 0x0d, 0x09, 0x91, 0x73, 0x45, 0x7a, 0x59, 0x64, - 0xf5, 0xdd, 0x40, 0x16, 0x59, 0x57, 0xdd, 0x3f, 0x80, 0x85, 0x5e, 0xbe, 0x6e, 0x8d, 0x6e, 0x24, - 0xa5, 0x66, 0x4d, 0x21, 0xde, 0x5c, 0x2d, 0x1e, 0x64, 0xeb, 0x75, 0xf3, 0x35, 0x61, 0xb1, 0x9e, - 0xae, 0x3c, 0x6d, 0xae, 0x16, 0x0f, 0x32, 0x47, 0x95, 0x4b, 0x17, 0xc2, 0x51, 0x73, 0xe5, 0x11, - 0x73, 0x59, 0xdb, 0x4f, 0x02, 0x74, 0x17, 0xa6, 0x93, 0x3e, 0x84, 0x72, 0x44, 0xf1, 0xc4, 0x45, - 0xa5, 0x8f, 0x85, 0x26, 0x11, 0x33, 0x50, 0x9e, 0x82, 0xc8, 0xa1, 0x29, 0x5b, 0x21, 0x3c, 0x12, - 0x75, 0x2b, 0xa9, 0xa4, 0x25, 0x36, 0x48, 0x5b, 0x5a, 0x13, 0x1b, 0xa4, 0xaf, 0x85, 0xc5, 0xd6, - 0x93, 0x2b, 0x41, 0x09, 0xeb, 0x51, 0x4b, 0x64, 0xc2, 0x7a, 0x34, 0x55, 0xab, 0x38, 0xca, 0x4b, - 0x75, 0x26, 0x11, 0xe5, 0xb3, 0x95, 0x2c, 0x11, 0xe5, 0x73, 0x25, 0xa9, 0x58, 0x34, 0xb5, 0x92, - 0x52, 0xe0, 0x6e, 0x3c, 0x85, 0x2f, 0x70, 0x37, 0x91, 0x55, 0x3f, 0x87, 0xa6, 0xb6, 0x94, 0x80, - 0xde, 0xe7, 0xf3, 0x8a, 0xca, 0x1e, 0xe6, 0x5a, 0x39, 0x01, 0x83, 0xab, 0xe6, 0xf2, 0x02, 0xae, - 0xb6, 0xe2, 0x20, 0xe0, 0x16, 0x14, 0x01, 0xee, 0xc3, 0xac, 0x9c, 0x67, 0x0b, 0x53, 0xcc, 0xe5, - 0xf9, 0xc2, 0x14, 0x95, 0xa4, 0x7c, 0x0f, 0x1a, 0xb9, 0xcc, 0x4e, 0x6c, 0xa5, 0x9a, 0x7d, 0x8a, - 0xad, 0xd4, 0x25, 0x83, 0xcf, 0xa1, 0xa9, 0xcd, 0x14, 0x85, 0xe6, 0x8a, 0x72, 0x5a, 0xa1, 0xb9, - 0xe2, 0x44, 0xf3, 0x1e, 0xd4, 0x45, 0xb7, 0xb0, 0x7d, 0x39, 0x2b, 0x13, 0xb6, 0x9f, 0x4d, 0x9e, - 0xf6, 0xa0, 0x91, 0x5b, 0x54, 0x48, 0xa7, 0x66, 0x76, 0x42, 0x3a, 0x5d, 0x1a, 0xf6, 0xa3, 0xfc, - 0x2d, 0x27, 0xc9, 0x54, 0xd0, 0x5a, 0xee, 0x38, 0x56, 0x32, 0x2e, 0xf3, 0xd6, 0x25, 0x14, 0xec, - 0xe8, 0x2e, 0x48, 0x21, 0xe4, 0xa3, 0xbb, 0x20, 0xaf, 0x91, 0x8f, 0xee, 0xc2, 0x2c, 0x84, 0xf9, - 0x4a, 0xee, 0x72, 0x2e, 0xfb, 0x8a, 0x9a, 0x31, 0xc8, 0xbe, 0xa2, 0xbb, 0xd5, 0x1f, 0x01, 0x52, - 0x6f, 0x7e, 0x62, 0x49, 0xed, 0xc5, 0x5b, 0x2c, 0xa9, 0xbf, 0x32, 0x6e, 0x35, 0x9e, 0xcf, 0xad, - 0xb3, 0x3f, 0x8f, 0x3f, 0xa6, 0xdf, 0x97, 0x57, 0xe9, 0xbd, 0xf3, 0xee, 0xff, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xce, 0xc7, 0x31, 0xb6, 0x95, 0x2c, 0x00, 0x00, + 0x15, 0x57, 0xdb, 0x1e, 0xdb, 0xf3, 0x6c, 0x67, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7, + 0x37, 0x2c, 0x11, 0x2c, 0xb6, 0x70, 0xa4, 0x08, 0x58, 0x44, 0x88, 0xff, 0xc5, 0x93, 0xf8, 0x0f, + 0xee, 0xc9, 0x72, 0x88, 0x84, 0xc2, 0x64, 0xba, 0x3c, 0x1a, 0x3c, 0xd3, 0xdd, 0xee, 0xea, 0xb1, + 0x03, 0x97, 0x15, 0x97, 0x95, 0x16, 0x21, 0x01, 0x42, 0xe2, 0x04, 0x82, 0x3d, 0xc1, 0x81, 0x03, + 0x07, 0x38, 0x23, 0x3e, 0x06, 0x57, 0xbe, 0x00, 0x9f, 0x00, 0x09, 0x75, 0x55, 0x75, 0x75, 0x75, + 0x57, 0x75, 0x7b, 0xd2, 0x4e, 0x36, 0x97, 0x96, 0xea, 0xd5, 0xab, 0x7a, 0xbf, 0xf7, 0xaa, 0xde, + 0xab, 0x7a, 0xaf, 0x1a, 0x16, 0xba, 0x81, 0x37, 0xf4, 0x37, 0xe8, 0x77, 0xdd, 0x0f, 0xbc, 0xd0, + 0x43, 0x15, 0xda, 0x30, 0xef, 0x1c, 0xfb, 0xd8, 0x7d, 0xd1, 0x3c, 0xdc, 0xf0, 0xcf, 0xba, 0x1b, + 0xb4, 0x67, 0x83, 0x38, 0x67, 0x2f, 0x2e, 0xc9, 0xc6, 0x25, 0x61, 0x9c, 0xe6, 0x57, 0xf3, 0x59, + 0x82, 0xb6, 0xef, 0xe3, 0x80, 0x33, 0x5a, 0xdf, 0x03, 0xd8, 0xf6, 0x06, 0x03, 0xcf, 0xb5, 0x31, + 0xf1, 0x51, 0x03, 0xa6, 0x76, 0x83, 0x60, 0xdb, 0x73, 0x70, 0xc3, 0x58, 0x33, 0xee, 0x55, 0xec, + 0xb8, 0x89, 0x96, 0x60, 0x72, 0x37, 0x08, 0x0e, 0x49, 0xb7, 0x31, 0xb6, 0x66, 0xdc, 0xab, 0xda, + 0xbc, 0x65, 0x3d, 0x01, 0xf4, 0x38, 0x02, 0xf5, 0xc8, 0x71, 0x0e, 0xf1, 0xe0, 0x25, 0x0e, 0x9a, + 0xee, 0xa9, 0x17, 0x71, 0x7f, 0x42, 0x70, 0xd0, 0xdc, 0xa1, 0xd3, 0x54, 0x6d, 0xde, 0x42, 0xab, + 0x50, 0xb5, 0xbd, 0x3e, 0x3e, 0xc0, 0x17, 0xb8, 0x4f, 0x27, 0xaa, 0xd8, 0x09, 0xc1, 0xfa, 0xaf, + 0x01, 0x37, 0xb6, 0x03, 0xdc, 0x0e, 0x31, 0x9d, 0xd2, 0xc6, 0xe7, 0xe8, 0x11, 0xdc, 0x68, 0xba, + 0xbd, 0x90, 0x4d, 0x7d, 0xd0, 0x23, 0x61, 0xc3, 0x58, 0x1b, 0xbf, 0x37, 0xb3, 0xb9, 0xb2, 0xce, + 0xec, 0xa2, 0xca, 0xb6, 0x33, 0x03, 0xd0, 0x77, 0xa0, 0x4a, 0xb9, 0xa2, 0x4e, 0x2a, 0x73, 0x66, + 0x73, 0x75, 0x9d, 0xe0, 0xe0, 0x02, 0x07, 0x2f, 0xda, 0x7e, 0xef, 0x85, 0xdf, 0x0e, 0xda, 0x03, + 0xb2, 0x2e, 0x78, 0xec, 0x84, 0x1d, 0xad, 0xc1, 0xcc, 0xb1, 0x8f, 0x83, 0x76, 0xd8, 0xf3, 0xdc, + 0xe6, 0x4e, 0x63, 0x9c, 0x2a, 0x23, 0x93, 0x90, 0x09, 0xd3, 0xc7, 0x3e, 0xd7, 0x75, 0x82, 0x76, + 0x8b, 0x36, 0x1d, 0x7d, 0xe9, 0xe2, 0x80, 0x77, 0x57, 0xf8, 0xe8, 0x84, 0x64, 0x7d, 0x0a, 0xb5, + 0x94, 0xc2, 0x65, 0x96, 0x20, 0xad, 0xe0, 0xf8, 0x6b, 0x29, 0x68, 0x05, 0x30, 0xff, 0x18, 0x87, + 0xb4, 0x4d, 0x68, 0x1f, 0x3e, 0x8f, 0x60, 0x33, 0x86, 0x1d, 0x61, 0xf0, 0xaa, 0x2d, 0x93, 0xb2, + 0x66, 0x19, 0x2b, 0x36, 0xcb, 0x78, 0xda, 0x2c, 0xd6, 0xe7, 0x06, 0x2c, 0x64, 0x84, 0x96, 0xd2, + 0x7b, 0x0b, 0xe6, 0x84, 0x22, 0x14, 0xe9, 0x38, 0xdd, 0x1a, 0xc5, 0xba, 0xa7, 0x87, 0x58, 0x7f, + 0x30, 0xa0, 0xd6, 0xe2, 0x58, 0x62, 0xfd, 0x0f, 0xa0, 0xd6, 0x8d, 0xdb, 0x7b, 0x5e, 0xd0, 0xc2, + 0x21, 0x45, 0x34, 0xb3, 0x69, 0x15, 0xcd, 0xcc, 0x38, 0xed, 0xec, 0xd0, 0x94, 0x25, 0xc6, 0x34, + 0x1b, 0xa4, 0x70, 0x7b, 0x59, 0xbb, 0x30, 0x9f, 0x86, 0x47, 0x7c, 0xf4, 0x4d, 0xd9, 0x65, 0x39, + 0xb4, 0x05, 0xee, 0x0f, 0x49, 0x87, 0x2d, 0x31, 0x59, 0x3f, 0x03, 0x33, 0xb6, 0xf8, 0x23, 0xdf, + 0xef, 0xf7, 0x3a, 0x74, 0xfe, 0xc8, 0x02, 0x91, 0xc2, 0x32, 0x44, 0xa3, 0x18, 0xa2, 0x66, 0xa9, + 0x6f, 0x03, 0xec, 0x05, 0xde, 0x20, 0xb5, 0xd8, 0x12, 0xc5, 0xfa, 0xbd, 0x01, 0xb7, 0x72, 0x85, + 0x97, 0x5a, 0xf8, 0xa7, 0x30, 0x1f, 0x07, 0x88, 0x21, 0x26, 0xa1, 0xb4, 0xf6, 0xef, 0xe7, 0xad, + 0x10, 0x67, 0xb5, 0x95, 0x81, 0x56, 0x08, 0xab, 0x8f, 0x71, 0x18, 0x61, 0xb5, 0xf1, 0xb9, 0xc6, + 0x38, 0x79, 0xa1, 0xec, 0x7a, 0xeb, 0xfa, 0x47, 0x03, 0xde, 0x2b, 0x10, 0x5b, 0x6a, 0x95, 0xb5, + 0x76, 0x19, 0x2b, 0x6b, 0x97, 0x7f, 0x1a, 0x50, 0x7f, 0x16, 0xb4, 0x5d, 0x72, 0x8a, 0x03, 0xda, + 0x49, 0xe3, 0x56, 0x64, 0x91, 0x06, 0x4c, 0xf1, 0x60, 0xc0, 0x4d, 0x12, 0x37, 0xd1, 0x87, 0x70, + 0xe3, 0xb8, 0xef, 0xc8, 0x31, 0x8f, 0x59, 0x26, 0x43, 0x8d, 0xf8, 0x8e, 0xf0, 0xa5, 0xcc, 0xc7, + 0x4c, 0x94, 0xa1, 0x66, 0xed, 0x38, 0x51, 0x1c, 0x67, 0x2a, 0x99, 0x38, 0xf3, 0x14, 0x96, 0x74, + 0x0a, 0x94, 0xf3, 0xa0, 0xcf, 0x0c, 0x98, 0x7d, 0xe2, 0xf5, 0x5c, 0x71, 0x32, 0xe5, 0x5b, 0xe1, + 0x36, 0x80, 0x8d, 0xcf, 0x0f, 0x31, 0x21, 0xed, 0x2e, 0xe6, 0x16, 0x90, 0x28, 0x45, 0xb1, 0xf1, + 0x6a, 0x8d, 0xad, 0x2d, 0x98, 0x93, 0x70, 0x94, 0x53, 0xe6, 0xdf, 0x91, 0x4b, 0x66, 0xfc, 0x31, + 0xea, 0xf0, 0x5c, 0x82, 0xf9, 0x09, 0x20, 0xa3, 0x30, 0x8a, 0xed, 0x9e, 0xdd, 0xfd, 0x92, 0x65, + 0xc6, 0x15, 0xcb, 0x48, 0xa1, 0x62, 0x22, 0x1b, 0x2a, 0xa2, 0xfe, 0xfd, 0xb6, 0xeb, 0xf4, 0xb1, + 0x13, 0x39, 0x3d, 0x5b, 0x4f, 0x89, 0x82, 0x2c, 0x98, 0x65, 0x2d, 0x1b, 0x93, 0x61, 0x3f, 0x6c, + 0x4c, 0xd2, 0x78, 0x91, 0xa2, 0x59, 0x27, 0xb0, 0x9a, 0xaf, 0x5a, 0x39, 0x73, 0x9d, 0xc2, 0xec, + 0xc9, 0xb0, 0x17, 0x8e, 0xb0, 0xf4, 0xd7, 0x3b, 0x18, 0xb7, 0x60, 0x4e, 0x92, 0x53, 0x0e, 0xeb, + 0x17, 0x06, 0xd4, 0xe3, 0x68, 0x9b, 0x5c, 0x82, 0x8a, 0x51, 0x5f, 0x2b, 0x94, 0x45, 0x01, 0x72, + 0xaf, 0xd7, 0x0f, 0x71, 0x40, 0x17, 0xb4, 0x62, 0xf3, 0x56, 0x24, 0xef, 0x08, 0xbf, 0x0a, 0x5b, + 0xf8, 0x9c, 0xae, 0x64, 0xc5, 0x8e, 0x9b, 0xd6, 0x5f, 0x0d, 0x58, 0xd2, 0x61, 0x2c, 0x75, 0x18, + 0xec, 0x01, 0x0c, 0x92, 0xdb, 0x21, 0x3b, 0x06, 0x3e, 0xcc, 0x0b, 0x77, 0x4c, 0xda, 0xde, 0xb0, + 0xdf, 0xa7, 0xa7, 0xa9, 0x34, 0x32, 0x92, 0xec, 0x72, 0xb8, 0x4c, 0x8f, 0xb8, 0x69, 0xfd, 0x5a, + 0x81, 0x2b, 0xae, 0x4a, 0x85, 0x41, 0x40, 0x82, 0x35, 0x46, 0xef, 0x50, 0xb2, 0xb8, 0xeb, 0x05, + 0x81, 0xdf, 0x1a, 0xb0, 0xac, 0x85, 0xf4, 0x2e, 0x4d, 0x68, 0xfd, 0xcd, 0x00, 0xf4, 0xb4, 0xd7, + 0x39, 0x93, 0xf8, 0x8a, 0x8d, 0xf4, 0x35, 0x98, 0x8f, 0xf8, 0xb1, 0xc3, 0x14, 0x97, 0x4c, 0xa5, + 0xd0, 0x23, 0xf0, 0x36, 0x6e, 0x13, 0xcf, 0xe5, 0xe6, 0xe2, 0xad, 0xac, 0xb1, 0x2a, 0xc5, 0x2e, + 0x37, 0x99, 0x71, 0xb9, 0x8f, 0xa1, 0xda, 0x74, 0x36, 0x59, 0xe8, 0xc8, 0x3d, 0xea, 0xa9, 0x68, + 0x1a, 0x70, 0x58, 0xca, 0xc2, 0x5b, 0xd6, 0xa7, 0xb0, 0xa8, 0xa8, 0x5b, 0x6a, 0x01, 0x1e, 0xc0, + 0x9c, 0x40, 0x21, 0xad, 0xc1, 0x3c, 0x77, 0x75, 0xd1, 0x67, 0xa7, 0xd9, 0xac, 0x21, 0xf5, 0xf5, + 0xe8, 0x38, 0xc0, 0x0e, 0x45, 0x11, 0xfb, 0x7a, 0x3a, 0xd0, 0x1a, 0x4a, 0xa0, 0x5d, 0x83, 0x19, + 0x4f, 0x8d, 0x53, 0xde, 0x88, 0x71, 0xea, 0x33, 0xe6, 0x10, 0x8a, 0xdc, 0x6b, 0x65, 0x2f, 0x23, + 0xdf, 0xe0, 0x13, 0x76, 0xeb, 0xef, 0x06, 0xdc, 0x6c, 0xba, 0x17, 0xbd, 0x10, 0x47, 0xc8, 0x9e, + 0x79, 0x22, 0x42, 0x5f, 0x1d, 0x87, 0xf3, 0x0f, 0xa9, 0x64, 0xa3, 0x4d, 0xa4, 0x36, 0xda, 0x47, + 0xb0, 0xc0, 0x64, 0xc9, 0xbb, 0xb5, 0x42, 0x77, 0xab, 0xda, 0x51, 0xb8, 0xe9, 0x7e, 0x6e, 0x40, + 0x5d, 0x03, 0xfb, 0x4b, 0xdd, 0x3a, 0x2e, 0xdc, 0x14, 0x97, 0xf2, 0x7e, 0x7f, 0x14, 0x67, 0xbd, + 0xde, 0x85, 0xf7, 0x37, 0xd2, 0xb9, 0x24, 0x09, 0x7c, 0xa7, 0xf1, 0xea, 0x77, 0x06, 0x4c, 0x6f, + 0x1f, 0xb6, 0x28, 0x5b, 0x3a, 0x8b, 0x36, 0x5e, 0xaf, 0x4c, 0x70, 0x0f, 0x6a, 0x4c, 0x56, 0x9b, + 0x84, 0x38, 0x38, 0x6a, 0x0f, 0xe2, 0x6b, 0x5f, 0x96, 0x8c, 0xee, 0xf2, 0x9c, 0x95, 0x91, 0x9a, + 0x0e, 0x37, 0x55, 0x9a, 0x18, 0x85, 0xf7, 0x99, 0xd8, 0x58, 0xd1, 0xa2, 0xac, 0x72, 0x6c, 0x74, + 0x66, 0xb6, 0x2c, 0x09, 0x01, 0xed, 0x00, 0xfc, 0xa0, 0xdd, 0xed, 0xb9, 0xd4, 0xd4, 0xbc, 0xc2, + 0x71, 0x57, 0x03, 0x9d, 0xdf, 0xee, 0x13, 0x5e, 0x5b, 0x1a, 0x37, 0xc2, 0x12, 0x7e, 0x61, 0xc0, + 0x6c, 0x82, 0x8a, 0xf8, 0xe8, 0x1b, 0x50, 0x8d, 0xcd, 0x47, 0x78, 0x5d, 0xa6, 0x16, 0xdf, 0x4e, + 0x38, 0xdd, 0x4e, 0x38, 0xde, 0x10, 0x4e, 0x61, 0x8b, 0xe1, 0x80, 0x50, 0x94, 0x15, 0x3b, 0x21, + 0x58, 0x17, 0x09, 0x44, 0x12, 0x59, 0x2e, 0x2d, 0xd3, 0x78, 0x33, 0xb6, 0x51, 0xc3, 0x89, 0xf5, + 0x27, 0x03, 0xe6, 0x24, 0xc1, 0xef, 0xca, 0x38, 0x26, 0x4c, 0xc7, 0xb6, 0xe0, 0xb6, 0x11, 0x6d, + 0xeb, 0x38, 0xa9, 0xba, 0x68, 0xdc, 0xdd, 0x49, 0xbb, 0xbb, 0x33, 0x82, 0xce, 0x67, 0x50, 0x67, + 0x4d, 0x56, 0xbd, 0x6a, 0x85, 0xed, 0x70, 0x48, 0x8a, 0x27, 0x5d, 0x82, 0x49, 0xc6, 0x16, 0x9f, + 0xa4, 0xac, 0x35, 0xc2, 0xe6, 0x6b, 0xc0, 0x92, 0x4e, 0x18, 0xcb, 0xcc, 0x10, 0xef, 0xa2, 0xe9, + 0xb4, 0xd7, 0xc7, 0x57, 0x82, 0xa0, 0x61, 0xcb, 0x89, 0xc3, 0x0a, 0x6b, 0xa5, 0x8b, 0x93, 0xe3, + 0x99, 0xe2, 0xe4, 0x08, 0x97, 0xb2, 0x3a, 0x2c, 0x2a, 0x38, 0x88, 0x6f, 0x1d, 0xc0, 0x8d, 0x1d, + 0xdc, 0xc7, 0x52, 0x51, 0xf3, 0x3a, 0x46, 0x5f, 0x80, 0x5a, 0x6a, 0x36, 0xe2, 0x5b, 0x87, 0x50, + 0x8b, 0x17, 0x76, 0xeb, 0xa7, 0x4d, 0xe7, 0xba, 0x12, 0x1e, 0x26, 0x25, 0x41, 0x36, 0x1d, 0xf1, + 0xd1, 0xd7, 0x93, 0x40, 0xc9, 0x9d, 0x48, 0xd9, 0xcb, 0x82, 0xc1, 0xfa, 0x87, 0x92, 0x82, 0x90, + 0xed, 0xc3, 0x56, 0x31, 0x2c, 0x13, 0xa6, 0x23, 0xa3, 0x49, 0xa1, 0x53, 0xb4, 0x33, 0xae, 0x31, + 0xfe, 0x66, 0x7c, 0x58, 0xb3, 0x7e, 0xff, 0x52, 0xef, 0xf9, 0x14, 0x37, 0xf1, 0xd1, 0xf7, 0x61, + 0x8a, 0x9d, 0x1b, 0xb1, 0x2b, 0x8f, 0x7a, 0xdc, 0xc4, 0xc3, 0xd0, 0xae, 0xc6, 0xbf, 0xbf, 0xa2, + 0x55, 0x82, 0xe5, 0xaa, 0x39, 0x5a, 0xdc, 0x06, 0x60, 0x12, 0xa4, 0xf0, 0x27, 0x51, 0xac, 0x5f, + 0x1a, 0xd0, 0xb0, 0xf1, 0xc0, 0xbb, 0xc0, 0xaf, 0x65, 0xfe, 0x06, 0x4c, 0x31, 0x27, 0x20, 0xfc, + 0xfe, 0x1d, 0x37, 0x5f, 0xab, 0x02, 0xee, 0x64, 0x2a, 0xe0, 0x8e, 0x75, 0x08, 0x2b, 0x39, 0x68, + 0xd8, 0xc1, 0x4f, 0x86, 0x9d, 0x0e, 0x26, 0x84, 0xd7, 0x98, 0xe3, 0x66, 0xe4, 0xa1, 0xa7, 0xed, + 0x5e, 0x1f, 0x3b, 0x1c, 0x0d, 0x6f, 0x59, 0x9f, 0x1b, 0x50, 0x7f, 0xe4, 0x38, 0x6f, 0x43, 0x35, + 0x47, 0x55, 0xcd, 0x29, 0x54, 0xed, 0x09, 0x2c, 0xe9, 0xa0, 0x94, 0xd2, 0xab, 0x07, 0xb5, 0x9d, + 0x1e, 0x19, 0xf4, 0x08, 0x11, 0x31, 0xc2, 0x84, 0x69, 0x2f, 0x53, 0x93, 0xf5, 0xfc, 0x91, 0x6f, + 0xef, 0x0d, 0x98, 0xea, 0xa6, 0x6f, 0xb7, 0xbc, 0x69, 0xed, 0xc2, 0x7c, 0x5a, 0x14, 0x2b, 0x33, + 0x74, 0x46, 0x29, 0x33, 0x24, 0x4c, 0xd6, 0x5f, 0x0c, 0x40, 0x87, 0xc3, 0x10, 0x67, 0x8e, 0x93, + 0xb7, 0x84, 0x3a, 0x32, 0xdc, 0x50, 0x2e, 0x1a, 0xf1, 0x16, 0xb2, 0x60, 0x76, 0x30, 0x0c, 0xb1, + 0xd3, 0xc2, 0x1d, 0xcf, 0x75, 0x08, 0xcd, 0xfe, 0xe6, 0xec, 0x14, 0xcd, 0xda, 0x87, 0x45, 0x05, + 0x69, 0x39, 0xa5, 0x7f, 0x61, 0x40, 0x63, 0xbb, 0xed, 0x76, 0x70, 0xff, 0xdd, 0xab, 0x6e, 0x1d, + 0xc1, 0x4a, 0x0e, 0x96, 0x72, 0xca, 0x9d, 0xc2, 0xac, 0x98, 0xe9, 0x6d, 0x6e, 0xc0, 0x2d, 0x98, + 0x93, 0xe4, 0x94, 0xc3, 0xda, 0x07, 0x94, 0xd1, 0xfd, 0x6d, 0x22, 0xde, 0x87, 0x45, 0x45, 0x5a, + 0x39, 0xdc, 0x7f, 0x36, 0x60, 0xa5, 0x95, 0x3a, 0x61, 0x8e, 0x7a, 0x9d, 0x33, 0xb7, 0x3d, 0x88, + 0x6f, 0x2c, 0xdd, 0x74, 0xea, 0xd5, 0x4d, 0x52, 0x2f, 0x97, 0x33, 0xc6, 0xa7, 0x63, 0xdc, 0x4e, + 0x69, 0x3d, 0x5e, 0xac, 0xf5, 0x84, 0xaa, 0x75, 0xb2, 0xbb, 0x2a, 0xa9, 0xdd, 0x75, 0x0c, 0x66, + 0x1e, 0xd0, 0x72, 0x75, 0xc9, 0x80, 0xbe, 0x40, 0xb1, 0x92, 0x41, 0x6b, 0xe8, 0xf3, 0x92, 0x7c, + 0x5c, 0xaf, 0xc8, 0x00, 0x35, 0x8a, 0x80, 0x8e, 0xa5, 0x22, 0x40, 0x81, 0xfa, 0xd1, 0x61, 0x78, + 0x2b, 0x57, 0x68, 0xa9, 0x15, 0xbc, 0x56, 0xb5, 0xe2, 0x92, 0x5e, 0x8b, 0x12, 0x1c, 0x5f, 0xda, + 0x83, 0xeb, 0xaf, 0xd8, 0xc5, 0x46, 0x91, 0x5c, 0xce, 0x04, 0x6f, 0xe2, 0xd9, 0xf5, 0x3f, 0x63, + 0x50, 0x4f, 0xef, 0x2f, 0xa9, 0xa2, 0x9a, 0xe3, 0x04, 0x25, 0x76, 0xc0, 0x08, 0x0e, 0xf0, 0x2d, + 0xc9, 0xb5, 0x2a, 0x3c, 0xeb, 0xef, 0x7a, 0x5e, 0xb7, 0x8f, 0xd9, 0x0f, 0x12, 0x2f, 0x87, 0xa7, + 0xeb, 0xad, 0x30, 0xe8, 0xb9, 0xdd, 0x1f, 0xb6, 0xfb, 0x43, 0x2c, 0x39, 0xde, 0x03, 0x98, 0x3a, + 0x6d, 0x77, 0xf0, 0x27, 0xf6, 0x01, 0x2d, 0xf0, 0x5c, 0x35, 0x30, 0x66, 0x46, 0xdf, 0x86, 0x6a, + 0x20, 0xd2, 0x8c, 0x29, 0x3a, 0xf2, 0x96, 0x32, 0xb2, 0xe9, 0x86, 0xf7, 0x37, 0xd9, 0xc0, 0x84, + 0x1b, 0x7d, 0x04, 0x63, 0xf8, 0x55, 0x63, 0x7a, 0x04, 0x69, 0x63, 0xf8, 0x95, 0xf5, 0x14, 0x96, + 0x74, 0x36, 0x2e, 0xe5, 0xbf, 0x9b, 0xff, 0x5b, 0x04, 0xf6, 0xf7, 0x09, 0xfa, 0x2e, 0xcc, 0x74, + 0x92, 0x7f, 0x16, 0x50, 0x3d, 0x1e, 0x97, 0xfa, 0x71, 0xc3, 0x5c, 0xd2, 0x91, 0x89, 0x8f, 0x1e, + 0x40, 0xf5, 0x27, 0xf1, 0xf3, 0x15, 0x5a, 0xe4, 0x4c, 0xf2, 0xc3, 0x9a, 0x79, 0x53, 0x25, 0xb2, + 0x71, 0xe7, 0xf1, 0xdb, 0x88, 0x18, 0x27, 0xbf, 0xca, 0x88, 0x71, 0xe9, 0x27, 0x94, 0x2d, 0x98, + 0xeb, 0xca, 0xff, 0x1a, 0xa0, 0xe5, 0xf8, 0xcf, 0x91, 0xcc, 0x6f, 0x0f, 0x66, 0x43, 0xdf, 0x41, + 0x7c, 0xf4, 0x10, 0x66, 0x89, 0xf4, 0x08, 0x8f, 0x62, 0xdd, 0x32, 0x3f, 0x0e, 0x98, 0xcb, 0x5a, + 0x3a, 0xf1, 0xd1, 0x8f, 0x61, 0xb9, 0xab, 0x7f, 0x01, 0x47, 0x77, 0x32, 0x52, 0xd5, 0x17, 0x68, + 0xd3, 0xba, 0x8a, 0x85, 0xf8, 0xe8, 0x14, 0x56, 0xba, 0x79, 0xcf, 0xc9, 0xe8, 0x83, 0x64, 0x82, + 0xdc, 0x77, 0x6e, 0xf3, 0xee, 0xd5, 0x4c, 0xc4, 0x47, 0x27, 0x80, 0x42, 0xe5, 0x4d, 0x15, 0xad, + 0xf2, 0xb1, 0xda, 0xf7, 0x62, 0xf3, 0xbd, 0x82, 0x5e, 0xe2, 0xa3, 0x0e, 0x34, 0xba, 0x39, 0x0f, + 0x76, 0xc8, 0x4a, 0xfd, 0xe6, 0xa3, 0x7d, 0xac, 0x34, 0x3f, 0xb8, 0x92, 0x87, 0xe1, 0xee, 0x2a, + 0x2f, 0x4e, 0x02, 0xb7, 0xf6, 0xc1, 0x4c, 0xe0, 0xce, 0x79, 0xaa, 0x7a, 0x06, 0x8b, 0x5d, 0xf5, + 0x09, 0x06, 0xe9, 0x47, 0x89, 0x5d, 0x76, 0xbb, 0xa8, 0x9b, 0xf8, 0x68, 0x1f, 0x6a, 0x67, 0xe9, + 0x37, 0x05, 0x14, 0xff, 0xeb, 0xa4, 0x3e, 0xad, 0x98, 0x66, 0x5e, 0x97, 0x50, 0x39, 0x53, 0xa4, + 0x97, 0x55, 0x56, 0xdf, 0x0d, 0x64, 0x95, 0x75, 0xd5, 0xfd, 0x23, 0x58, 0xe8, 0x65, 0xeb, 0xd6, + 0xe8, 0x56, 0x5c, 0x6a, 0xd6, 0x14, 0xe2, 0xcd, 0xd5, 0xfc, 0x4e, 0x36, 0x5f, 0x37, 0x5b, 0x13, + 0x16, 0xf3, 0xe9, 0xca, 0xd3, 0xe6, 0x6a, 0x7e, 0x27, 0x73, 0x54, 0xb9, 0x74, 0x21, 0x1c, 0x35, + 0x53, 0x1e, 0x31, 0x97, 0xb5, 0x74, 0xe2, 0xa3, 0xfb, 0x30, 0x1d, 0xd3, 0x10, 0xca, 0x30, 0x45, + 0x03, 0x17, 0x15, 0x1a, 0x0b, 0x4d, 0x22, 0x66, 0xa0, 0x2c, 0x07, 0x91, 0x43, 0x53, 0xba, 0x42, + 0x78, 0x22, 0xea, 0x56, 0x52, 0x49, 0x4b, 0x2c, 0x90, 0xb6, 0xb4, 0x26, 0x16, 0x48, 0x5f, 0x0b, + 0x8b, 0x76, 0x4f, 0xa6, 0x04, 0x25, 0x76, 0x8f, 0x5a, 0x22, 0x13, 0xbb, 0x47, 0x53, 0xb5, 0x8a, + 0xa2, 0xbc, 0x54, 0x67, 0x12, 0x51, 0x3e, 0x5d, 0xc9, 0x12, 0x51, 0x3e, 0x53, 0x92, 0x8a, 0x54, + 0x53, 0x2b, 0x29, 0x39, 0xee, 0xc6, 0x53, 0xf8, 0x1c, 0x77, 0x13, 0x59, 0xf5, 0x73, 0xa8, 0x6b, + 0x4b, 0x09, 0xe8, 0x7d, 0x3e, 0x2e, 0xaf, 0xec, 0x61, 0xae, 0x15, 0x33, 0x30, 0xb8, 0x6a, 0x2e, + 0x2f, 0xe0, 0x6a, 0x2b, 0x0e, 0x02, 0x6e, 0x4e, 0x11, 0xe0, 0x21, 0xcc, 0xca, 0x79, 0xb6, 0xd8, + 0x8a, 0x99, 0x3c, 0x5f, 0x6c, 0x45, 0x25, 0x29, 0xdf, 0x87, 0x5a, 0x26, 0xb3, 0x13, 0x4b, 0xa9, + 0x66, 0x9f, 0x62, 0x29, 0x75, 0xc9, 0xe0, 0x73, 0xa8, 0x6b, 0x33, 0x45, 0x61, 0xb9, 0xbc, 0x9c, + 0x56, 0x58, 0x2e, 0x3f, 0xd1, 0x7c, 0x00, 0x55, 0x41, 0x16, 0x7b, 0x5f, 0xce, 0xca, 0xc4, 0xde, + 0x4f, 0x27, 0x4f, 0xfb, 0x50, 0xcb, 0x4c, 0x2a, 0xb4, 0x53, 0x33, 0x3b, 0xa1, 0x9d, 0x2e, 0x0d, + 0xfb, 0x51, 0xf6, 0x96, 0x13, 0x67, 0x2a, 0x68, 0x2d, 0x73, 0x1c, 0x2b, 0x19, 0x97, 0x79, 0xe7, + 0x0a, 0x0e, 0x76, 0x74, 0xe7, 0xa4, 0x10, 0xf2, 0xd1, 0x9d, 0x93, 0xd7, 0xc8, 0x47, 0x77, 0x6e, + 0x16, 0xc2, 0x7c, 0x25, 0x73, 0x39, 0x97, 0x7d, 0x45, 0xcd, 0x18, 0x64, 0x5f, 0xd1, 0xdd, 0xea, + 0x4f, 0x00, 0xa9, 0x37, 0x3f, 0x31, 0xa5, 0xf6, 0xe2, 0x2d, 0xa6, 0xd4, 0x5f, 0x19, 0xb7, 0x6a, + 0xcf, 0xe7, 0xd6, 0xd9, 0xbf, 0xc8, 0x1f, 0xd3, 0xef, 0xcb, 0x49, 0x7a, 0xef, 0xbc, 0xff, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x70, 0x4b, 0xcf, 0xa7, 0x2c, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index f9c93ee3d..db9d23273 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -43,7 +43,7 @@ message GetGroupsInfoResp{ message SetGroupInfoReq{ - server_api_params.GroupInfo GroupInfo = 1; + server_api_params.GroupInfoForSet groupInfoForSet = 1; string OpUserID = 2; //app manager or group owner string OperationID = 3; } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index bd8209463..2ae3dc2a5 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -20,29 +20,29 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type GroupInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` - Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` - Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` - FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` - OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` - CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` - GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` - NeedVerification *wrapperspb.Int32Value `protobuf:"bytes,13,opt,name=needVerification" json:"needVerification,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` + Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` + Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` + FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` + OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` + CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` + MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` + Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` + Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` + CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` + GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` + NeedVerification int32 `protobuf:"varint,13,opt,name=needVerification" json:"needVerification,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{0} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -146,7 +146,93 @@ func (m *GroupInfo) GetGroupType() int32 { return 0 } -func (m *GroupInfo) GetNeedVerification() *wrapperspb.Int32Value { +func (m *GroupInfo) GetNeedVerification() int32 { + if m != nil { + return m.NeedVerification + } + return 0 +} + +type GroupInfoForSet struct { + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` + Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` + Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` + FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` + Ex string `protobuf:"bytes,6,opt,name=ex" json:"ex,omitempty"` + NeedVerification *wrapperspb.Int32Value `protobuf:"bytes,7,opt,name=needVerification" json:"needVerification,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupInfoForSet) Reset() { *m = GroupInfoForSet{} } +func (m *GroupInfoForSet) String() string { return proto.CompactTextString(m) } +func (*GroupInfoForSet) ProtoMessage() {} +func (*GroupInfoForSet) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{1} +} +func (m *GroupInfoForSet) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupInfoForSet.Unmarshal(m, b) +} +func (m *GroupInfoForSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupInfoForSet.Marshal(b, m, deterministic) +} +func (dst *GroupInfoForSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupInfoForSet.Merge(dst, src) +} +func (m *GroupInfoForSet) XXX_Size() int { + return xxx_messageInfo_GroupInfoForSet.Size(m) +} +func (m *GroupInfoForSet) XXX_DiscardUnknown() { + xxx_messageInfo_GroupInfoForSet.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupInfoForSet proto.InternalMessageInfo + +func (m *GroupInfoForSet) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *GroupInfoForSet) GetGroupName() string { + if m != nil { + return m.GroupName + } + return "" +} + +func (m *GroupInfoForSet) GetNotification() string { + if m != nil { + return m.Notification + } + return "" +} + +func (m *GroupInfoForSet) GetIntroduction() string { + if m != nil { + return m.Introduction + } + return "" +} + +func (m *GroupInfoForSet) GetFaceURL() string { + if m != nil { + return m.FaceURL + } + return "" +} + +func (m *GroupInfoForSet) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +func (m *GroupInfoForSet) GetNeedVerification() *wrapperspb.Int32Value { if m != nil { return m.NeedVerification } @@ -174,7 +260,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{1} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{2} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -286,7 +372,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{2} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{3} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -362,7 +448,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{3} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{4} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -476,7 +562,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{4} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{5} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -561,7 +647,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{5} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{6} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -642,7 +728,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{6} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{7} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -750,7 +836,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{7} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{8} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -895,7 +981,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{8} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{9} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -1006,7 +1092,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{9} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{10} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1120,7 +1206,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{10} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{11} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1201,7 +1287,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{11} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{12} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1247,7 +1333,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{12} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{13} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1296,7 +1382,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{13} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{14} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1355,7 +1441,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{14} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{15} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1393,7 +1479,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{15} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{16} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1434,7 +1520,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{16} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{17} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1495,7 +1581,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{17} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{18} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1548,7 +1634,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{18} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{19} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1597,7 +1683,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{19} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{20} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1665,7 +1751,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{20} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{21} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1736,7 +1822,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{21} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{22} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1911,7 +1997,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{22} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{23} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1979,7 +2065,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{23} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{24} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2036,7 +2122,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{24} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{25} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2105,7 +2191,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{25} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{26} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2160,7 +2246,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{26} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{27} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2216,7 +2302,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{27} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{28} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2271,7 +2357,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{28} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{29} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2326,7 +2412,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{29} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{30} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2382,7 +2468,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{30} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{31} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2445,7 +2531,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{31} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{32} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2508,7 +2594,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{32} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{33} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2570,7 +2656,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{33} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{34} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2624,7 +2710,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{34} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{35} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2680,7 +2766,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{35} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{36} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2749,7 +2835,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{36} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{37} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2810,7 +2896,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{37} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{38} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2864,7 +2950,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{38} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{39} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2919,7 +3005,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{39} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{40} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2979,7 +3065,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{40} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{41} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3026,7 +3112,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{41} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{42} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3079,7 +3165,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{42} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{43} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3125,7 +3211,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{43} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{44} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3165,7 +3251,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{44} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{45} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3212,7 +3298,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{45} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{46} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3260,7 +3346,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{46} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{47} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3313,7 +3399,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{47} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{48} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3351,7 +3437,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{48} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{49} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3389,7 +3475,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{49} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{50} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3427,7 +3513,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{50} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{51} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3466,7 +3552,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{51} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{52} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3505,7 +3591,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{52} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{53} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3545,7 +3631,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{53} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{54} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3600,7 +3686,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{54} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{55} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3654,7 +3740,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{55} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{56} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3700,7 +3786,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{56} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{57} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3753,7 +3839,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{57} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{58} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4020,7 +4106,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{58} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{59} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4289,7 +4375,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{59} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{60} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4392,7 +4478,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{60} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{61} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4447,7 +4533,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{61} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{62} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4508,7 +4594,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{62} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{63} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4563,7 +4649,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{63} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{64} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4624,7 +4710,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{64} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{65} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4679,7 +4765,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{65} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{66} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4737,7 +4823,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{66} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{67} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4772,7 +4858,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{67} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{68} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4840,7 +4926,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{68} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{69} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4894,7 +4980,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{69} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{70} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4945,7 +5031,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{70} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{71} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4980,7 +5066,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{71} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{72} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5045,7 +5131,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{72} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{73} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5079,7 +5165,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{73} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{74} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5139,7 +5225,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_b2c8e6212334433f, []int{74} + return fileDescriptor_ws_a65b1a9a9ba03d6e, []int{75} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5175,6 +5261,7 @@ func (m *DelMsgListResp) GetErrMsg() string { func init() { proto.RegisterType((*GroupInfo)(nil), "server_api_params.GroupInfo") + proto.RegisterType((*GroupInfoForSet)(nil), "server_api_params.GroupInfoForSet") proto.RegisterType((*GroupMemberFullInfo)(nil), "server_api_params.GroupMemberFullInfo") proto.RegisterType((*PublicUserInfo)(nil), "server_api_params.PublicUserInfo") proto.RegisterType((*UserInfo)(nil), "server_api_params.UserInfo") @@ -5255,218 +5342,220 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_b2c8e6212334433f) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_a65b1a9a9ba03d6e) } -var fileDescriptor_ws_b2c8e6212334433f = []byte{ - // 3359 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x24, 0x47, - 0x15, 0xa7, 0x7b, 0x3c, 0x63, 0xcf, 0x1b, 0x8f, 0x3d, 0xee, 0xdd, 0x38, 0x83, 0xd9, 0x2c, 0xa6, - 0x63, 0x25, 0x4b, 0x00, 0x6f, 0xb4, 0x21, 0x12, 0xe4, 0x63, 0x91, 0x3f, 0xb2, 0x1f, 0xc9, 0x8e, - 0xed, 0xf4, 0xec, 0x26, 0x88, 0x20, 0x2d, 0xed, 0xe9, 0xf2, 0xb8, 0xe3, 0x9e, 0xae, 0x76, 0x7f, - 0x78, 0x77, 0xb9, 0x20, 0x05, 0x09, 0x71, 0xe3, 0xc4, 0x85, 0x0b, 0x12, 0x17, 0x04, 0x8a, 0x22, - 0x84, 0x40, 0xe2, 0x80, 0x22, 0x84, 0xb8, 0x71, 0x01, 0x89, 0x0b, 0xe2, 0xc6, 0x99, 0x7f, 0x00, - 0x09, 0x09, 0x54, 0xaf, 0xaa, 0xbb, 0xab, 0xba, 0x7b, 0xec, 0x59, 0xcb, 0xca, 0x6e, 0xb4, 0xdc, - 0xe6, 0xbd, 0xae, 0xf7, 0xea, 0xd5, 0xfb, 0xbd, 0xaa, 0xf7, 0xea, 0x63, 0x60, 0x3e, 0x72, 0x0e, - 0xee, 0xde, 0x8b, 0x2e, 0xdf, 0x8b, 0x56, 0x83, 0x90, 0xc6, 0xd4, 0x58, 0x88, 0x48, 0x78, 0x44, - 0xc2, 0xbb, 0x76, 0xe0, 0xde, 0x0d, 0xec, 0xd0, 0x1e, 0x45, 0x4b, 0xcf, 0x6f, 0x07, 0xc4, 0xbf, - 0x7b, 0xb3, 0x77, 0x39, 0x38, 0x18, 0x5e, 0xc6, 0x56, 0x97, 0x53, 0xa9, 0xd0, 0x0e, 0x02, 0x12, - 0x0a, 0x59, 0xf3, 0xe3, 0x1a, 0x34, 0xaf, 0x87, 0x34, 0x09, 0x6e, 0xfa, 0x7b, 0xd4, 0xe8, 0xc2, - 0xf4, 0x10, 0x89, 0xcd, 0xae, 0xb6, 0xac, 0x5d, 0x6a, 0x5a, 0x29, 0x69, 0x5c, 0x80, 0x26, 0xfe, - 0xdc, 0xb2, 0x47, 0xa4, 0xab, 0xe3, 0xb7, 0x9c, 0x61, 0x98, 0x30, 0xeb, 0xd3, 0xd8, 0xdd, 0x73, - 0x07, 0x76, 0xec, 0x52, 0xbf, 0x5b, 0xc3, 0x06, 0x0a, 0x8f, 0xb5, 0x71, 0xfd, 0x38, 0xa4, 0x4e, - 0x32, 0xc0, 0x36, 0x53, 0xbc, 0x8d, 0xcc, 0x63, 0xfd, 0xef, 0xd9, 0x03, 0x72, 0xc7, 0xba, 0xd5, - 0xad, 0xf3, 0xfe, 0x05, 0x69, 0x2c, 0x43, 0x8b, 0xde, 0xf3, 0x49, 0x78, 0x27, 0x22, 0xe1, 0xcd, - 0xcd, 0x6e, 0x03, 0xbf, 0xca, 0x2c, 0xe3, 0x22, 0xc0, 0x20, 0x24, 0x76, 0x4c, 0x6e, 0xbb, 0x23, - 0xd2, 0x9d, 0x5e, 0xd6, 0x2e, 0xb5, 0x2d, 0x89, 0xc3, 0x34, 0x8c, 0xc8, 0x68, 0x97, 0x84, 0x1b, - 0x34, 0xf1, 0xe3, 0xee, 0x0c, 0x36, 0x90, 0x59, 0xc6, 0x1c, 0xe8, 0xe4, 0x7e, 0xb7, 0x89, 0xaa, - 0x75, 0x72, 0xdf, 0x58, 0x84, 0x46, 0x14, 0xdb, 0x71, 0x12, 0x75, 0x61, 0x59, 0xbb, 0x54, 0xb7, - 0x04, 0x65, 0xac, 0x40, 0x1b, 0xf5, 0xd2, 0xd4, 0x9a, 0x16, 0x8a, 0xa8, 0xcc, 0xcc, 0x63, 0xb7, - 0x1f, 0x04, 0xa4, 0x3b, 0x8b, 0x0a, 0x72, 0x86, 0x71, 0x1d, 0x3a, 0x3e, 0x21, 0xce, 0x3b, 0x24, - 0xcc, 0xbd, 0xd6, 0x5e, 0xd6, 0x2e, 0xb5, 0xae, 0x7c, 0x6e, 0x75, 0x48, 0xe9, 0xd0, 0x23, 0x1c, - 0xa0, 0xdd, 0x64, 0x6f, 0xf5, 0xa6, 0x1f, 0xbf, 0x74, 0xe5, 0x1d, 0xdb, 0x4b, 0x88, 0x55, 0x12, - 0x32, 0xff, 0xae, 0xc3, 0x39, 0x04, 0xb0, 0x87, 0x23, 0xb9, 0x96, 0x78, 0xde, 0x09, 0x50, 0x2e, - 0x42, 0x23, 0xe1, 0x76, 0x73, 0x1c, 0x05, 0xc5, 0x0c, 0x0e, 0xa9, 0x47, 0x6e, 0x91, 0x23, 0xe2, - 0x21, 0x82, 0x75, 0x2b, 0x67, 0x18, 0x4b, 0x30, 0xf3, 0x3e, 0x75, 0x7d, 0x74, 0xee, 0x14, 0x7e, - 0xcc, 0x68, 0xf6, 0xcd, 0x77, 0x07, 0x07, 0x3e, 0x8b, 0x0d, 0x8e, 0x5b, 0x46, 0xcb, 0x90, 0x36, - 0x54, 0x48, 0x9f, 0x83, 0x39, 0x3b, 0x08, 0x7a, 0xb6, 0x3f, 0x24, 0x21, 0xef, 0x74, 0x1a, 0xf5, - 0x16, 0xb8, 0x0c, 0x58, 0xd6, 0x53, 0x9f, 0x26, 0xe1, 0x80, 0x20, 0x6e, 0x75, 0x4b, 0xe2, 0x30, - 0x3d, 0x34, 0x20, 0xa1, 0x84, 0x07, 0x87, 0xb0, 0xc0, 0x15, 0xf0, 0x42, 0x06, 0x2f, 0x0b, 0x88, - 0x24, 0x26, 0x6f, 0xf8, 0x0e, 0x0e, 0xaa, 0x25, 0x02, 0x22, 0x67, 0x99, 0x3f, 0xd0, 0x60, 0x6e, - 0x27, 0xd9, 0xf5, 0xdc, 0x01, 0xaa, 0x60, 0x6e, 0xcd, 0x9d, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, - 0x8f, 0x77, 0x41, 0x4d, 0x75, 0xc1, 0x22, 0x34, 0x86, 0xc4, 0x77, 0x48, 0x28, 0x5c, 0x2a, 0x28, - 0x61, 0x6a, 0x3d, 0x35, 0xd5, 0xfc, 0xa3, 0x0e, 0x33, 0x9f, 0xb0, 0x09, 0xcb, 0xd0, 0x0a, 0xf6, - 0xa9, 0x4f, 0xb6, 0x12, 0x16, 0x56, 0xc2, 0x16, 0x99, 0x65, 0x9c, 0x87, 0xfa, 0xae, 0x1b, 0xc6, - 0xfb, 0x88, 0x6b, 0xdb, 0xe2, 0x04, 0xe3, 0x92, 0x91, 0xed, 0x72, 0x30, 0x9b, 0x16, 0x27, 0xc4, - 0x80, 0x66, 0x32, 0xdf, 0xab, 0x93, 0xb5, 0x59, 0x9a, 0xac, 0xe5, 0xd8, 0x80, 0xca, 0xd8, 0x78, - 0x01, 0x3a, 0x43, 0x8f, 0xee, 0xda, 0x9e, 0x45, 0x06, 0x47, 0xbd, 0x68, 0xb8, 0x1d, 0xc4, 0x08, - 0x64, 0xdd, 0x2a, 0xf1, 0xcd, 0x7f, 0x6b, 0x00, 0xd7, 0x42, 0x97, 0xf8, 0x0e, 0xba, 0xb1, 0xb0, - 0xa2, 0x68, 0xe5, 0x15, 0x65, 0x11, 0x1a, 0x21, 0x19, 0xd9, 0xe1, 0x41, 0x3a, 0x51, 0x38, 0x55, - 0x30, 0xbe, 0x56, 0x32, 0xfe, 0x55, 0x80, 0x3d, 0xec, 0x87, 0xe9, 0x41, 0xb7, 0xb2, 0x59, 0x5d, - 0x5a, 0xa4, 0x57, 0x53, 0x44, 0x2d, 0xa9, 0x39, 0x9b, 0x85, 0xb6, 0xe3, 0x88, 0x60, 0xaf, 0xf3, - 0x59, 0x98, 0x31, 0x2a, 0x62, 0xbd, 0x71, 0x4c, 0xac, 0x4f, 0x67, 0x01, 0xf4, 0x2f, 0x0d, 0x9a, - 0xeb, 0x9e, 0x3d, 0x38, 0x98, 0x70, 0xe8, 0xea, 0x10, 0xf5, 0xd2, 0x10, 0xaf, 0x43, 0x7b, 0x97, - 0xa9, 0x4b, 0x87, 0x80, 0x5e, 0x68, 0x5d, 0xf9, 0x42, 0xc5, 0x28, 0xd5, 0x09, 0x64, 0xa9, 0x72, - 0xea, 0x70, 0xa7, 0x4e, 0x1e, 0x6e, 0xfd, 0x98, 0xe1, 0x36, 0xb2, 0xe1, 0xfe, 0x55, 0x87, 0x59, - 0x5c, 0x14, 0x2d, 0x72, 0x98, 0x90, 0x28, 0x36, 0x5e, 0x87, 0x99, 0x24, 0x35, 0x55, 0x9b, 0xd4, - 0xd4, 0x4c, 0xc4, 0x78, 0x45, 0xac, 0xe5, 0x28, 0xaf, 0xa3, 0xfc, 0x85, 0x0a, 0xf9, 0x2c, 0x91, - 0x5a, 0x79, 0x73, 0x96, 0xf7, 0xf6, 0x6d, 0xdf, 0xf1, 0x88, 0x45, 0xa2, 0xc4, 0x8b, 0xc5, 0xca, - 0xaa, 0xf0, 0x78, 0xa4, 0x1d, 0xf6, 0xa2, 0xa1, 0xc8, 0x8a, 0x82, 0x62, 0xde, 0xe1, 0xed, 0xd8, - 0x27, 0x3e, 0xf4, 0x9c, 0xc1, 0x26, 0x75, 0x48, 0x0e, 0x11, 0x21, 0x3e, 0x05, 0x53, 0x32, 0xef, - 0x53, 0x78, 0x8d, 0x07, 0x82, 0xc2, 0x63, 0x10, 0x73, 0x1a, 0x15, 0xf0, 0x74, 0x28, 0x71, 0x8a, - 0xd9, 0xd0, 0xfc, 0x47, 0x0d, 0xda, 0x7c, 0xfa, 0xa4, 0x4e, 0xbd, 0xc8, 0xe2, 0x9c, 0x8e, 0x94, - 0x28, 0x92, 0x38, 0xcc, 0x0a, 0x46, 0x6d, 0xa9, 0x8b, 0x92, 0xc2, 0x63, 0xa1, 0xc8, 0xe8, 0x6b, - 0xca, 0xe2, 0x24, 0xb3, 0xd2, 0x5e, 0xae, 0xcb, 0x8b, 0x94, 0xc4, 0x61, 0xcb, 0x5e, 0x4c, 0x95, - 0xe8, 0xc8, 0x68, 0x26, 0x1b, 0xd3, 0xac, 0x7f, 0x1e, 0x1f, 0x12, 0x87, 0xf9, 0x37, 0xa6, 0x69, - 0xdf, 0xdc, 0x49, 0x39, 0x83, 0x6b, 0x16, 0xfd, 0xf2, 0xb4, 0x93, 0xd1, 0x25, 0x54, 0x9b, 0xc7, - 0xa2, 0x0a, 0x0a, 0xaa, 0xea, 0xe4, 0x6a, 0x95, 0x26, 0xd7, 0x0a, 0xb4, 0xb9, 0x9e, 0x34, 0xe8, - 0x67, 0x79, 0x7d, 0xa1, 0x30, 0xd5, 0xd8, 0x68, 0x17, 0x63, 0x43, 0x45, 0x77, 0x6e, 0x0c, 0xba, - 0xf3, 0x19, 0xba, 0xbf, 0xd6, 0x01, 0x36, 0x49, 0x60, 0x87, 0xf1, 0x88, 0xf8, 0x31, 0x1b, 0x9e, - 0x93, 0x51, 0x19, 0xb8, 0x0a, 0x4f, 0xce, 0x29, 0xba, 0x9a, 0x53, 0x0c, 0x98, 0x42, 0x87, 0x73, - 0x34, 0xf1, 0x37, 0x73, 0x66, 0x60, 0x87, 0x5c, 0x1b, 0x0f, 0xf2, 0x8c, 0x66, 0x39, 0x83, 0x86, - 0x8e, 0xc8, 0x32, 0x75, 0x8b, 0x13, 0x6c, 0xf2, 0xe7, 0xfd, 0x61, 0x15, 0xd5, 0xe0, 0x39, 0x40, - 0xe5, 0x9e, 0x58, 0xf8, 0xbd, 0x00, 0x9d, 0x28, 0xd9, 0xcd, 0x07, 0xb7, 0x95, 0x8c, 0x44, 0xb8, - 0x97, 0xf8, 0xcc, 0xa9, 0xbc, 0x22, 0x64, 0x8d, 0x78, 0x5a, 0xca, 0x19, 0xc5, 0x0a, 0xc2, 0xfc, - 0x50, 0x87, 0xce, 0x76, 0x38, 0xb4, 0x7d, 0xf7, 0xbb, 0x58, 0x8c, 0xe1, 0x02, 0x7e, 0x9a, 0xf4, - 0xbc, 0x0c, 0x2d, 0xe2, 0x0f, 0x3d, 0x37, 0xda, 0xdf, 0xca, 0xfd, 0x26, 0xb3, 0x64, 0x67, 0x4f, - 0x8d, 0x4b, 0xe0, 0x75, 0x25, 0x81, 0x2f, 0x42, 0x63, 0x44, 0x77, 0x5d, 0x2f, 0x8d, 0x7b, 0x41, - 0x61, 0xcc, 0x13, 0x8f, 0x60, 0x26, 0xcf, 0x62, 0x3e, 0x65, 0xe4, 0x49, 0x7d, 0xa6, 0x32, 0xa9, - 0x37, 0xe5, 0xa4, 0xae, 0x3a, 0x1e, 0x4a, 0x8e, 0xe7, 0xee, 0x6a, 0x65, 0xee, 0xfa, 0x83, 0x06, - 0x9d, 0xdc, 0xdd, 0xbc, 0x5e, 0x1d, 0xeb, 0xae, 0x62, 0x04, 0xea, 0x15, 0x11, 0x98, 0xc5, 0x4d, - 0x4d, 0x8e, 0x1b, 0x16, 0x69, 0x34, 0x72, 0xa5, 0x4d, 0x46, 0x46, 0xb3, 0xde, 0x3c, 0x62, 0x4b, - 0xce, 0xe2, 0x94, 0x54, 0xea, 0x37, 0x94, 0x52, 0xbf, 0x98, 0x47, 0x7f, 0xa7, 0xc1, 0x79, 0x86, - 0x72, 0x69, 0x18, 0xdb, 0xd0, 0xa1, 0x85, 0x48, 0x10, 0x89, 0xe6, 0xd9, 0x8a, 0x44, 0x51, 0x0c, - 0x1a, 0xab, 0x24, 0xcc, 0x14, 0x3a, 0x85, 0x4e, 0x44, 0xe6, 0xa9, 0x52, 0x58, 0xb4, 0xc7, 0x2a, - 0x09, 0x9b, 0xbf, 0xd7, 0xa0, 0xc3, 0x53, 0x9b, 0x34, 0xcf, 0xcf, 0xdc, 0xec, 0x77, 0xe1, 0x7c, - 0xb1, 0xe7, 0x5b, 0x6e, 0x14, 0x77, 0xf5, 0xe5, 0xda, 0xa4, 0xa6, 0x57, 0x2a, 0x60, 0x73, 0xed, - 0xe9, 0x9d, 0xc4, 0xf3, 0x7a, 0x24, 0x8a, 0xec, 0x21, 0x59, 0x7f, 0xd0, 0x27, 0x87, 0xec, 0x83, - 0x45, 0x0e, 0xc7, 0xc6, 0x10, 0xab, 0x73, 0xb0, 0x50, 0x70, 0xa9, 0x9f, 0x85, 0x90, 0xcc, 0x62, - 0xd3, 0x2a, 0xe2, 0x7a, 0xba, 0xb5, 0xe5, 0x1a, 0x4b, 0xa1, 0x82, 0x34, 0xbe, 0x03, 0xb3, 0x98, - 0xc3, 0x45, 0x37, 0xdd, 0x29, 0x1c, 0xc0, 0x6b, 0x95, 0x55, 0x43, 0xa5, 0x55, 0xbc, 0x1a, 0x10, - 0xf4, 0x1b, 0x7e, 0x1c, 0x3e, 0xb0, 0x14, 0x8d, 0x4b, 0xef, 0xc1, 0x42, 0xa9, 0x89, 0xd1, 0x81, - 0xda, 0x01, 0x79, 0x20, 0xc6, 0xc1, 0x7e, 0x1a, 0x2f, 0x42, 0xfd, 0x88, 0xed, 0xfd, 0x04, 0xfa, - 0x4b, 0x15, 0x16, 0x08, 0x9b, 0x2d, 0xde, 0xf0, 0x15, 0xfd, 0x6b, 0x9a, 0xf9, 0x6c, 0x36, 0x30, - 0x79, 0x8c, 0x9a, 0x32, 0x46, 0xf3, 0x2d, 0x68, 0xf5, 0xa2, 0xe1, 0xa6, 0x1d, 0xdb, 0xd8, 0xf0, - 0x35, 0x68, 0x8d, 0x72, 0x12, 0x1b, 0x57, 0xf7, 0x27, 0x84, 0x2c, 0xb9, 0xb9, 0xf9, 0x17, 0x1d, - 0xba, 0xd5, 0xae, 0x88, 0x02, 0x66, 0x03, 0x09, 0xc3, 0x0d, 0xea, 0x10, 0x1c, 0x5a, 0xdd, 0x4a, - 0x49, 0x86, 0x1d, 0x09, 0x43, 0x96, 0xc3, 0x44, 0x91, 0xcd, 0x29, 0x63, 0x15, 0xa6, 0xbc, 0x14, - 0x96, 0xe3, 0xad, 0xc0, 0x76, 0xc6, 0x08, 0x3a, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xb5, 0x89, - 0x31, 0x8b, 0x02, 0x0e, 0x9a, 0xa4, 0x83, 0x03, 0x57, 0x52, 0xbd, 0x34, 0x80, 0xa7, 0x2a, 0x9b, - 0x56, 0x00, 0xf8, 0x55, 0x15, 0xc0, 0x8b, 0xe3, 0x87, 0x52, 0x04, 0x31, 0x00, 0xe3, 0x3a, 0x89, - 0x7b, 0xf6, 0xfd, 0x35, 0xdf, 0xe9, 0xb9, 0x7e, 0x9f, 0x1c, 0xb2, 0x68, 0x5f, 0x86, 0x96, 0xd8, - 0xca, 0x67, 0x30, 0x35, 0x2d, 0x99, 0x35, 0x76, 0x87, 0x5f, 0x98, 0x0f, 0xb5, 0xd2, 0x7c, 0x30, - 0xaf, 0xc2, 0xac, 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x7e, 0x9f, 0x1c, 0xe2, 0x80, 0xda, 0x96, 0xa0, - 0x90, 0x8f, 0x2d, 0xc4, 0xde, 0x40, 0x50, 0xe6, 0x9f, 0x75, 0x38, 0x57, 0x32, 0x39, 0x0a, 0x1e, - 0x56, 0x8f, 0x1c, 0x2f, 0xb5, 0x71, 0xf1, 0x32, 0xa5, 0xc4, 0xcb, 0x01, 0x2c, 0x70, 0x90, 0xa4, - 0xae, 0xbb, 0x75, 0x0c, 0x80, 0xd7, 0xab, 0x4a, 0xf5, 0xb2, 0x91, 0x02, 0x7b, 0x89, 0xcb, 0xc1, - 0x2f, 0xeb, 0x5d, 0x22, 0xb0, 0x58, 0xdd, 0xb8, 0x02, 0xfe, 0x97, 0x55, 0xf8, 0x3f, 0x5f, 0x05, - 0xbf, 0x6c, 0x89, 0x84, 0xff, 0x21, 0xcc, 0xb3, 0x45, 0xb5, 0x4f, 0x7c, 0xa7, 0x17, 0x0d, 0xd1, - 0x91, 0xcb, 0xd0, 0xe2, 0xf2, 0xbd, 0x68, 0x98, 0x6f, 0xdd, 0x24, 0x16, 0x6b, 0x31, 0xf0, 0x5c, - 0xb6, 0x78, 0x62, 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x96, 0x20, 0x23, 0x22, 0x4e, 0x3d, 0x98, 0x77, - 0x6b, 0x56, 0x46, 0x9b, 0x1f, 0x34, 0x60, 0x5a, 0x44, 0x23, 0x26, 0x45, 0xb6, 0x5b, 0xce, 0x96, - 0x55, 0x4e, 0xf1, 0xba, 0x76, 0x70, 0x94, 0x87, 0x17, 0xa7, 0xe4, 0x23, 0xa7, 0x9a, 0x7a, 0xe4, - 0x54, 0xb0, 0x69, 0xaa, 0x6c, 0x53, 0x61, 0x5c, 0xf5, 0xf2, 0xb8, 0x58, 0x19, 0x87, 0x95, 0xcd, - 0x8e, 0x67, 0xc7, 0x7b, 0x34, 0x1c, 0x89, 0xcd, 0x6f, 0xdd, 0x2a, 0xf1, 0x59, 0xe9, 0xc8, 0x79, - 0x59, 0xed, 0xcf, 0x53, 0x78, 0x81, 0xcb, 0x2a, 0x6d, 0xce, 0x49, 0xf7, 0x00, 0xfc, 0x84, 0x42, - 0x65, 0x72, 0xdb, 0xa2, 0xc8, 0xa5, 0x3e, 0x56, 0xa1, 0xbc, 0xd4, 0x97, 0x59, 0x6c, 0xe4, 0xa3, - 0x68, 0x78, 0x2d, 0xa4, 0x23, 0x71, 0x4e, 0x91, 0x92, 0x38, 0x72, 0xea, 0xc7, 0x69, 0x05, 0xcb, - 0xcf, 0x26, 0x64, 0x16, 0x93, 0x15, 0x24, 0xd6, 0xf9, 0xb3, 0x56, 0x4a, 0xb2, 0x58, 0x8a, 0xc8, - 0xa1, 0x28, 0xde, 0xd9, 0x4f, 0x05, 0xb9, 0x79, 0x15, 0xb9, 0x42, 0x35, 0xd6, 0xc1, 0xaf, 0x72, - 0x35, 0x96, 0x97, 0x38, 0x0b, 0x4a, 0x89, 0xb3, 0x06, 0xd3, 0x34, 0x60, 0xd3, 0x3f, 0xea, 0x1a, - 0x38, 0x5d, 0x9e, 0x1f, 0xbf, 0x40, 0xad, 0x6e, 0xf3, 0x96, 0x7c, 0x62, 0xa4, 0x72, 0xc6, 0x2d, - 0x98, 0xa7, 0x7b, 0x7b, 0x9e, 0xeb, 0x93, 0x9d, 0x24, 0xda, 0xc7, 0x4d, 0xf2, 0x39, 0x0c, 0x76, - 0xb3, 0xaa, 0x88, 0x50, 0x5b, 0x5a, 0x45, 0x51, 0x56, 0xf9, 0xd9, 0x31, 0xdf, 0xe4, 0xe0, 0x02, - 0x77, 0x1e, 0x17, 0x38, 0x85, 0x87, 0x67, 0x77, 0xd2, 0x42, 0xff, 0x14, 0x3a, 0x4e, 0x66, 0x2d, - 0xbd, 0x02, 0xb3, 0xb2, 0xb1, 0x15, 0x13, 0xf3, 0xbc, 0x3c, 0x31, 0x67, 0xe4, 0x79, 0xf7, 0x63, - 0x0d, 0xe6, 0x0b, 0x66, 0xb2, 0xd6, 0xb1, 0x1b, 0x7b, 0x44, 0x68, 0xe0, 0x04, 0xdb, 0xe9, 0x38, - 0x24, 0x1a, 0x88, 0x89, 0x80, 0xbf, 0x45, 0xcd, 0x58, 0xcb, 0xce, 0xba, 0x4c, 0x98, 0x75, 0xb7, - 0xfb, 0x4c, 0x51, 0x9f, 0x26, 0xbe, 0x93, 0x1d, 0x7c, 0x4b, 0x3c, 0x16, 0x88, 0xee, 0x76, 0x7f, - 0xdd, 0x76, 0x86, 0x84, 0x1f, 0x4f, 0xd7, 0xd1, 0x26, 0x95, 0x69, 0x3a, 0x30, 0x73, 0xdb, 0x0d, - 0xa2, 0x0d, 0x3a, 0x1a, 0x31, 0x38, 0x1d, 0x12, 0xb3, 0x9a, 0x5c, 0xc3, 0xc1, 0x0b, 0x8a, 0x79, - 0xc6, 0x21, 0x7b, 0x76, 0xe2, 0xc5, 0xac, 0x69, 0x3a, 0xfd, 0x25, 0x16, 0x9e, 0xa7, 0x46, 0xd4, - 0xdf, 0xe4, 0xd2, 0xdc, 0x4e, 0x89, 0x63, 0xfe, 0x49, 0x87, 0x0e, 0xae, 0x6e, 0x1b, 0x18, 0x3c, - 0x0e, 0x0a, 0x5d, 0x81, 0x3a, 0x4e, 0x66, 0x51, 0x1d, 0x1e, 0x7f, 0xfa, 0xc1, 0x9b, 0x1a, 0x57, - 0xa1, 0x41, 0x03, 0x2c, 0x29, 0xf9, 0xd2, 0xf7, 0xdc, 0x38, 0x21, 0xf5, 0xe8, 0xda, 0x12, 0x52, - 0xc6, 0x35, 0x80, 0x51, 0x5e, 0x41, 0xf2, 0x42, 0x60, 0x52, 0x1d, 0x92, 0x24, 0x73, 0x6e, 0x96, - 0xe3, 0xb2, 0xf3, 0xeb, 0x9a, 0xa5, 0x32, 0x8d, 0x2d, 0x98, 0x43, 0xb3, 0xb7, 0xd3, 0x63, 0x30, - 0xc4, 0x60, 0xf2, 0x1e, 0x0b, 0xd2, 0xe6, 0xcf, 0x34, 0xe1, 0x46, 0xf6, 0xb5, 0x4f, 0xb8, 0xef, - 0x73, 0x97, 0x68, 0xa7, 0x72, 0xc9, 0x12, 0xcc, 0x8c, 0x12, 0xe9, 0x54, 0xae, 0x66, 0x65, 0x74, - 0x0e, 0x51, 0x6d, 0x62, 0x88, 0xcc, 0x9f, 0x6b, 0xd0, 0x7d, 0x93, 0xba, 0x3e, 0x7e, 0x58, 0x0b, - 0x02, 0x4f, 0x5c, 0x2b, 0x9c, 0x1a, 0xf3, 0x6f, 0x40, 0xd3, 0xe6, 0x6a, 0xfc, 0x58, 0xc0, 0x3e, - 0xc1, 0x49, 0x5b, 0x2e, 0x23, 0x1d, 0x9a, 0xd4, 0xe4, 0x43, 0x13, 0xf3, 0x23, 0x0d, 0xe6, 0xb8, - 0x53, 0xde, 0x4e, 0xdc, 0xf8, 0xd4, 0xf6, 0xad, 0xc3, 0xcc, 0x61, 0xe2, 0xc6, 0xa7, 0x88, 0xca, - 0x4c, 0xae, 0x1c, 0x4f, 0xb5, 0x8a, 0x78, 0x32, 0x7f, 0xa5, 0xc1, 0x85, 0xa2, 0x5b, 0xd7, 0x06, - 0x03, 0x12, 0x3c, 0xca, 0x29, 0xa5, 0x1c, 0x1a, 0x4d, 0x15, 0x0e, 0x8d, 0x2a, 0x4d, 0xb6, 0xc8, - 0xfb, 0x64, 0xf0, 0xf8, 0x9a, 0xfc, 0x7d, 0x1d, 0x3e, 0x7b, 0x3d, 0x9b, 0x78, 0xb7, 0x43, 0xdb, - 0x8f, 0xf6, 0x48, 0x18, 0x3e, 0x42, 0x7b, 0x6f, 0x41, 0xdb, 0x27, 0xf7, 0x72, 0x9b, 0xc4, 0x74, - 0x9c, 0x54, 0x8d, 0x2a, 0x3c, 0xd9, 0xda, 0x65, 0xfe, 0x47, 0x83, 0x0e, 0xd7, 0xf3, 0x96, 0x3b, - 0x38, 0x78, 0x84, 0x83, 0xdf, 0x82, 0xb9, 0x03, 0xb4, 0x80, 0x51, 0xa7, 0x58, 0xb6, 0x0b, 0xd2, - 0x13, 0x0e, 0xff, 0xbf, 0x1a, 0x2c, 0x70, 0x45, 0x37, 0xfd, 0x23, 0xf7, 0x51, 0x06, 0xeb, 0x0e, - 0xcc, 0xbb, 0xdc, 0x84, 0x53, 0x3a, 0xa0, 0x28, 0x3e, 0xa1, 0x07, 0x7e, 0xab, 0xc1, 0x3c, 0xd7, - 0xf4, 0x86, 0x1f, 0x93, 0xf0, 0xd4, 0xe3, 0xbf, 0x01, 0x2d, 0xe2, 0xc7, 0xa1, 0xed, 0x9f, 0x66, - 0x85, 0x94, 0x45, 0x27, 0x5c, 0x24, 0x3f, 0xd2, 0xc0, 0x40, 0x55, 0x9b, 0x6e, 0x34, 0x72, 0xa3, - 0xe8, 0x11, 0x42, 0x37, 0x99, 0xc1, 0x3f, 0xd1, 0xe1, 0xbc, 0xa4, 0xa5, 0x97, 0xc4, 0x8f, 0xbb, - 0xc9, 0xc6, 0x26, 0x34, 0x59, 0x8d, 0x20, 0xdf, 0x46, 0x4e, 0xda, 0x51, 0x2e, 0xc8, 0xaa, 0x58, - 0x24, 0xfa, 0x64, 0x40, 0x7d, 0x27, 0xc2, 0xe2, 0xa8, 0x6d, 0x29, 0x3c, 0xb6, 0x0c, 0x2d, 0x49, - 0x6a, 0x36, 0x6c, 0x7f, 0x40, 0xbc, 0x27, 0xc6, 0x45, 0xe6, 0x2f, 0x35, 0x98, 0xe3, 0x4d, 0x1e, - 0xff, 0x21, 0xb3, 0x5c, 0xcf, 0x03, 0xf9, 0x53, 0x83, 0x12, 0x0b, 0xaf, 0x45, 0x49, 0x8b, 0x5c, - 0x57, 0x3f, 0xbe, 0xa1, 0x75, 0x03, 0x5a, 0x83, 0x7d, 0xdb, 0x1f, 0x9e, 0x2a, 0xb8, 0x64, 0x51, - 0x33, 0x86, 0xa7, 0xe5, 0x03, 0xf8, 0x0d, 0xfe, 0x09, 0x87, 0xff, 0x52, 0x61, 0x28, 0xc7, 0xbe, - 0x36, 0x78, 0x38, 0xa7, 0x1f, 0xc0, 0x02, 0xbf, 0xf5, 0x95, 0x6a, 0x42, 0xa3, 0x0b, 0xd3, 0xb6, - 0xc3, 0x8f, 0x21, 0x34, 0x14, 0x4a, 0x49, 0xf5, 0x3e, 0x5f, 0xbc, 0x13, 0xcb, 0xef, 0xf3, 0x2f, - 0x02, 0xd8, 0x8e, 0xf3, 0x2e, 0x0d, 0x1d, 0xd7, 0x4f, 0x0b, 0x7c, 0x89, 0x63, 0xbe, 0x09, 0xb3, - 0xd7, 0x42, 0x3a, 0xba, 0x2d, 0xdd, 0xdf, 0x1e, 0x7b, 0xc3, 0x2c, 0xdf, 0xfd, 0xea, 0xea, 0xdd, - 0xaf, 0xf9, 0x6d, 0x78, 0xaa, 0x64, 0x38, 0x3a, 0x6b, 0x83, 0x5f, 0x4b, 0xa7, 0x9d, 0x88, 0x90, - 0xa9, 0x3a, 0x97, 0x93, 0x6d, 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0x29, 0xa9, 0x5f, 0x0b, - 0x82, 0x90, 0x1e, 0x09, 0x4c, 0xce, 0xa2, 0x1b, 0xb5, 0xf8, 0xd5, 0x8b, 0xc5, 0x6f, 0xa5, 0x11, - 0x4a, 0xc1, 0xfe, 0x09, 0x18, 0xf1, 0x0b, 0x0d, 0xe6, 0x85, 0x11, 0x8e, 0x23, 0xba, 0x7d, 0x19, - 0x1a, 0xfc, 0x49, 0x8b, 0xe8, 0xf0, 0x99, 0xca, 0x0e, 0xd3, 0xa7, 0x38, 0x96, 0x68, 0x5c, 0x8e, - 0x48, 0xbd, 0x6a, 0x46, 0x7d, 0x3d, 0x0b, 0xf6, 0x89, 0x1f, 0x9d, 0x08, 0x01, 0xf3, 0x9b, 0x69, - 0x30, 0x6f, 0x12, 0x8f, 0x9c, 0xa5, 0x8f, 0xcc, 0x3b, 0x30, 0x87, 0xef, 0x6b, 0x72, 0x1f, 0x9c, - 0x89, 0xda, 0x77, 0xa1, 0x83, 0x6a, 0xcf, 0xdc, 0xde, 0x6c, 0x76, 0x30, 0xff, 0xc8, 0x4b, 0xc9, - 0x99, 0x68, 0xff, 0x0a, 0x9c, 0x4b, 0x7d, 0x7f, 0x27, 0x70, 0xb2, 0x43, 0xa4, 0x31, 0xf7, 0x74, - 0xe6, 0x8b, 0xb0, 0xb8, 0x41, 0xfd, 0x23, 0x12, 0x46, 0xfc, 0x22, 0x11, 0x45, 0x52, 0x09, 0x65, - 0xf2, 0x0b, 0xca, 0x7c, 0x1f, 0x96, 0x64, 0x89, 0x3e, 0x89, 0x77, 0x42, 0xf7, 0x48, 0x92, 0x12, - 0x07, 0xd4, 0x9a, 0x72, 0x40, 0x9d, 0x1f, 0x68, 0xeb, 0xca, 0x81, 0xf6, 0x05, 0x68, 0xba, 0x91, - 0x50, 0x80, 0x41, 0x35, 0x63, 0xe5, 0x0c, 0xd3, 0x86, 0x05, 0xee, 0x7e, 0x71, 0x61, 0x84, 0x5d, - 0x2c, 0xc1, 0x0c, 0x8f, 0xa9, 0xac, 0x93, 0x8c, 0x1e, 0x7b, 0xfd, 0x32, 0xf6, 0xb2, 0xd1, 0xec, - 0xc3, 0x82, 0x78, 0x54, 0xb3, 0x63, 0x0f, 0x5d, 0x9f, 0x2f, 0xb2, 0x17, 0x01, 0x02, 0x7b, 0x98, - 0x3e, 0xc0, 0xe3, 0xd7, 0x66, 0x12, 0x87, 0x7d, 0x8f, 0xf6, 0xe9, 0x3d, 0xf1, 0x5d, 0xe7, 0xdf, - 0x73, 0x8e, 0xf9, 0x0e, 0x18, 0x16, 0x89, 0x02, 0xea, 0x47, 0x44, 0xd2, 0xba, 0x0c, 0xad, 0x8d, - 0x24, 0x0c, 0x89, 0xcf, 0xba, 0x4a, 0x5f, 0x98, 0xc9, 0x2c, 0xa6, 0xb7, 0x9f, 0xeb, 0xe5, 0x47, - 0xec, 0x12, 0xc7, 0xfc, 0x69, 0x0d, 0x9a, 0x7d, 0x77, 0xe8, 0xdb, 0x9e, 0x45, 0x0e, 0x8d, 0xd7, - 0xa0, 0xc1, 0xb7, 0x2c, 0x22, 0x52, 0xaa, 0x8e, 0x7c, 0x79, 0x6b, 0xbe, 0x37, 0xb3, 0xc8, 0xe1, - 0x8d, 0xcf, 0x58, 0x42, 0xc6, 0x78, 0x1b, 0xda, 0xfc, 0xd7, 0x4d, 0x7e, 0x04, 0x25, 0xf2, 0xd7, - 0x17, 0x4f, 0x50, 0x22, 0x5a, 0x73, 0x5d, 0xaa, 0x06, 0x66, 0xd0, 0x00, 0x4b, 0x1a, 0xb1, 0x3c, - 0x8c, 0x37, 0x88, 0x57, 0x3e, 0xc2, 0x20, 0x2e, 0xc3, 0xa4, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, - 0xbc, 0x34, 0x3f, 0xcb, 0x11, 0xd2, 0x5c, 0x86, 0x49, 0xef, 0x27, 0xfe, 0xf0, 0x4e, 0x20, 0xce, - 0x0e, 0xc7, 0x4b, 0xdf, 0xc0, 0x66, 0x42, 0x9a, 0xcb, 0x30, 0xe9, 0x10, 0x17, 0x6f, 0x74, 0xfa, - 0x71, 0xd2, 0x7c, 0x8d, 0x17, 0xd2, 0x5c, 0x66, 0xbd, 0x09, 0xd3, 0x81, 0xfd, 0xc0, 0xa3, 0xb6, - 0x63, 0x7e, 0x58, 0x03, 0x48, 0x1b, 0x46, 0x58, 0xe8, 0x28, 0x10, 0xad, 0x9c, 0x08, 0x51, 0xe0, - 0x3d, 0x90, 0x40, 0xea, 0x57, 0x83, 0xf4, 0xa5, 0x49, 0x41, 0xe2, 0xda, 0x0a, 0x30, 0x5d, 0x2d, - 0xc0, 0xb4, 0x72, 0x22, 0x4c, 0xc2, 0x28, 0x01, 0xd4, 0xd5, 0x02, 0x50, 0x2b, 0x27, 0x02, 0x25, - 0xe4, 0x05, 0x54, 0x57, 0x0b, 0x50, 0xad, 0x9c, 0x08, 0x95, 0x90, 0x17, 0x60, 0x5d, 0x2d, 0x80, - 0xb5, 0x72, 0x22, 0x58, 0x42, 0xbe, 0x0c, 0xd7, 0xdf, 0x74, 0x98, 0x43, 0x97, 0xf1, 0x5b, 0x58, - 0x7f, 0x8f, 0xe2, 0x7d, 0x00, 0xba, 0x4b, 0x7d, 0xa3, 0xa9, 0x32, 0x8d, 0x2f, 0xc3, 0x02, 0x67, - 0x10, 0xe9, 0xba, 0x44, 0xc7, 0xeb, 0x92, 0xf2, 0x07, 0xbc, 0x20, 0x4a, 0xa2, 0x98, 0x8e, 0x36, - 0xed, 0xd8, 0x4e, 0x8b, 0xaf, 0x9c, 0x23, 0x5f, 0xdf, 0x4d, 0x95, 0x5e, 0x8c, 0x87, 0x94, 0x8e, - 0xb2, 0x7b, 0x39, 0x41, 0x31, 0x89, 0xd8, 0x1d, 0x11, 0x9a, 0xc4, 0x62, 0x99, 0x48, 0x49, 0xfe, - 0x8e, 0xca, 0x71, 0x6d, 0xbc, 0xf4, 0x12, 0x8f, 0x8c, 0x32, 0x06, 0xae, 0x6c, 0xf9, 0x25, 0x9e, - 0x78, 0xd1, 0x9d, 0x73, 0x26, 0xb8, 0x70, 0xc3, 0x3f, 0x13, 0xb8, 0xb1, 0x2b, 0x3f, 0x3e, 0xaa, - 0x5b, 0x0a, 0xcf, 0xfc, 0xa7, 0x06, 0xe7, 0x76, 0xec, 0x30, 0x76, 0x07, 0x6e, 0x60, 0xfb, 0x71, - 0x8f, 0xc4, 0x36, 0x8e, 0x53, 0x79, 0xcc, 0xa9, 0x3d, 0xdc, 0x63, 0xce, 0x1d, 0x98, 0x1f, 0xaa, - 0x3b, 0x90, 0x87, 0xdc, 0x3c, 0x14, 0xc5, 0x95, 0x97, 0xa9, 0xb5, 0x87, 0x7e, 0x99, 0x6a, 0xfe, - 0x50, 0x87, 0xf9, 0xc2, 0xf2, 0x7a, 0x6c, 0x6e, 0x5a, 0x03, 0x70, 0xb3, 0x50, 0x3b, 0xe6, 0x80, - 0x5e, 0x8d, 0x47, 0x4b, 0x12, 0xaa, 0xba, 0xed, 0xab, 0x9d, 0xfe, 0xb6, 0xef, 0x06, 0xb4, 0x82, - 0x1c, 0xa4, 0x63, 0xf6, 0x47, 0x15, 0x50, 0x5a, 0xb2, 0xa8, 0xf9, 0x1e, 0x2c, 0x94, 0x56, 0x31, - 0xbc, 0xb6, 0xa3, 0x07, 0xc4, 0xcf, 0xae, 0xed, 0x18, 0x21, 0x05, 0xb4, 0x5e, 0x0c, 0x68, 0xcf, - 0x3d, 0x92, 0x9f, 0xc9, 0x0b, 0xd2, 0xfc, 0x91, 0x0e, 0x8b, 0xd5, 0x19, 0xe8, 0x49, 0x75, 0xf7, - 0x2e, 0x74, 0xc7, 0xad, 0xf6, 0x67, 0xe6, 0xf5, 0x3c, 0xba, 0xb3, 0x5c, 0xfd, 0xa4, 0xba, 0xfb, - 0x5c, 0x1a, 0xdd, 0x52, 0x3a, 0x34, 0x7f, 0x93, 0xf9, 0x27, 0xab, 0x46, 0x9e, 0x50, 0xff, 0x18, - 0x2f, 0x40, 0x87, 0x0f, 0x53, 0x7a, 0x1e, 0xc2, 0x8b, 0xdb, 0x12, 0x3f, 0x5f, 0x29, 0xa4, 0xd2, - 0xe0, 0xcc, 0x62, 0xf6, 0x63, 0x2d, 0xc5, 0x24, 0xab, 0xf1, 0x3e, 0x55, 0x98, 0xe4, 0x91, 0x26, - 0x15, 0x3e, 0x52, 0xa4, 0x65, 0xb5, 0xe7, 0xff, 0x23, 0xed, 0xe4, 0x48, 0xcb, 0x7c, 0x29, 0x15, - 0x81, 0xe6, 0xf7, 0xa0, 0xbd, 0x49, 0xbc, 0x5e, 0x34, 0x4c, 0xdf, 0xaf, 0x9e, 0xe9, 0x66, 0xb2, - 0xf8, 0xca, 0x6f, 0xaa, 0xfc, 0xca, 0x6f, 0x1d, 0xe6, 0x64, 0x03, 0x4e, 0xf3, 0x3e, 0x73, 0xfd, - 0xc2, 0xb7, 0x96, 0x56, 0xc5, 0x7f, 0x4a, 0x5f, 0x2d, 0x39, 0x71, 0xb7, 0x81, 0x7f, 0x5e, 0x7c, - 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x71, 0xaf, 0x27, 0xac, 0x3a, 0x00, 0x00, +var fileDescriptor_ws_a65b1a9a9ba03d6e = []byte{ + // 3387 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcf, 0x6f, 0x24, 0x47, + 0xf5, 0xff, 0x76, 0x8f, 0x67, 0xec, 0x79, 0xe3, 0xb1, 0xc7, 0xbd, 0x1b, 0x67, 0xbe, 0x66, 0xb3, + 0x98, 0xce, 0x2a, 0x09, 0x0b, 0x78, 0xa3, 0x0d, 0x91, 0x20, 0x3f, 0x16, 0xf9, 0x47, 0xbc, 0xbb, + 0xc9, 0x8e, 0xed, 0xf4, 0xec, 0x26, 0x88, 0x20, 0x2d, 0xed, 0xe9, 0xf2, 0xb8, 0xe3, 0x9e, 0xae, + 0x76, 0xff, 0xf0, 0xee, 0x72, 0x41, 0x0a, 0x08, 0x71, 0xe3, 0xc4, 0x85, 0x0b, 0x82, 0x0b, 0x02, + 0x45, 0x11, 0x42, 0x20, 0x71, 0x40, 0x08, 0x21, 0x6e, 0x5c, 0x40, 0xe2, 0x82, 0xb8, 0x71, 0xe6, + 0x1f, 0x40, 0x42, 0x02, 0xd5, 0xab, 0xea, 0xee, 0xaa, 0xee, 0x1e, 0x7b, 0xd6, 0xb2, 0xb2, 0x1b, + 0x2d, 0xb7, 0x79, 0xaf, 0xeb, 0xbd, 0x7a, 0xf5, 0xde, 0xa7, 0xea, 0xbd, 0xfa, 0x31, 0x30, 0x1f, + 0x39, 0x07, 0x77, 0xef, 0x45, 0x57, 0xee, 0x45, 0x2b, 0x41, 0x48, 0x63, 0x6a, 0x2c, 0x44, 0x24, + 0x3c, 0x22, 0xe1, 0x5d, 0x3b, 0x70, 0xef, 0x06, 0x76, 0x68, 0x8f, 0xa2, 0xa5, 0xe7, 0xb7, 0x03, + 0xe2, 0xdf, 0xbd, 0xd9, 0xbb, 0x12, 0x1c, 0x0c, 0xaf, 0x60, 0xab, 0x2b, 0xa9, 0x54, 0x68, 0x07, + 0x01, 0x09, 0x85, 0xac, 0xf9, 0xe3, 0x1a, 0x34, 0xaf, 0x87, 0x34, 0x09, 0x6e, 0xfa, 0x7b, 0xd4, + 0xe8, 0xc2, 0xf4, 0x10, 0x89, 0x8d, 0xae, 0xb6, 0xac, 0xbd, 0xd0, 0xb4, 0x52, 0xd2, 0xb8, 0x00, + 0x4d, 0xfc, 0xb9, 0x65, 0x8f, 0x48, 0x57, 0xc7, 0x6f, 0x39, 0xc3, 0x30, 0x61, 0xd6, 0xa7, 0xb1, + 0xbb, 0xe7, 0x0e, 0xec, 0xd8, 0xa5, 0x7e, 0xb7, 0x86, 0x0d, 0x14, 0x1e, 0x6b, 0xe3, 0xfa, 0x71, + 0x48, 0x9d, 0x64, 0x80, 0x6d, 0xa6, 0x78, 0x1b, 0x99, 0xc7, 0xfa, 0xdf, 0xb3, 0x07, 0xe4, 0x8e, + 0x75, 0xab, 0x5b, 0xe7, 0xfd, 0x0b, 0xd2, 0x58, 0x86, 0x16, 0xbd, 0xe7, 0x93, 0xf0, 0x4e, 0x44, + 0xc2, 0x9b, 0x1b, 0xdd, 0x06, 0x7e, 0x95, 0x59, 0xc6, 0x45, 0x80, 0x41, 0x48, 0xec, 0x98, 0xdc, + 0x76, 0x47, 0xa4, 0x3b, 0xbd, 0xac, 0xbd, 0xd0, 0xb6, 0x24, 0x0e, 0xd3, 0x30, 0x22, 0xa3, 0x5d, + 0x12, 0xae, 0xd3, 0xc4, 0x8f, 0xbb, 0x33, 0xd8, 0x40, 0x66, 0x19, 0x73, 0xa0, 0x93, 0xfb, 0xdd, + 0x26, 0xaa, 0xd6, 0xc9, 0x7d, 0x63, 0x11, 0x1a, 0x51, 0x6c, 0xc7, 0x49, 0xd4, 0x85, 0x65, 0xed, + 0x85, 0xba, 0x25, 0x28, 0xe3, 0x12, 0xb4, 0x51, 0x2f, 0x4d, 0xad, 0x69, 0xa1, 0x88, 0xca, 0xcc, + 0x3c, 0x76, 0xfb, 0x41, 0x40, 0xba, 0xb3, 0xa8, 0x20, 0x67, 0x18, 0x97, 0xa1, 0xe3, 0x13, 0xe2, + 0xbc, 0x43, 0xc2, 0xdc, 0x6b, 0x6d, 0x6c, 0x54, 0xe2, 0x9b, 0xdf, 0xd1, 0x61, 0x3e, 0x8b, 0xd1, + 0x26, 0x0d, 0xfb, 0x24, 0x7e, 0x8c, 0x23, 0xc5, 0xbd, 0xd8, 0xc8, 0xbc, 0x78, 0xbd, 0x62, 0xa4, + 0x2c, 0x3a, 0xad, 0xab, 0x9f, 0x5a, 0x19, 0x52, 0x3a, 0xf4, 0x08, 0x87, 0xe2, 0x6e, 0xb2, 0xb7, + 0x72, 0xd3, 0x8f, 0x5f, 0xba, 0xfa, 0x8e, 0xed, 0x25, 0xa4, 0xc2, 0x0d, 0x7f, 0xd3, 0xe1, 0x1c, + 0xba, 0xa1, 0x87, 0x31, 0xdb, 0x4c, 0x3c, 0xef, 0x04, 0xd0, 0x2e, 0x42, 0x23, 0xe1, 0x11, 0xe2, + 0x7e, 0x10, 0x14, 0x73, 0x51, 0x48, 0x3d, 0x72, 0x8b, 0x1c, 0x11, 0x0f, 0x3d, 0x50, 0xb7, 0x72, + 0x86, 0xb1, 0x04, 0x33, 0xef, 0x53, 0xd7, 0x47, 0x18, 0x4d, 0xe1, 0xc7, 0x8c, 0x66, 0xdf, 0x7c, + 0x77, 0x70, 0xe0, 0x33, 0xdf, 0xf2, 0x71, 0x67, 0xb4, 0xec, 0x92, 0x86, 0xea, 0x92, 0xe7, 0x60, + 0xce, 0x0e, 0x82, 0x9e, 0xed, 0x0f, 0x49, 0xc8, 0x3b, 0x9d, 0x46, 0xbd, 0x05, 0x2e, 0x83, 0x30, + 0xeb, 0xa9, 0x4f, 0x93, 0x70, 0x40, 0x10, 0xa1, 0x75, 0x4b, 0xe2, 0x30, 0x3d, 0x34, 0x20, 0xa1, + 0x84, 0x3c, 0x0e, 0xd6, 0x02, 0x57, 0x84, 0x00, 0xb2, 0x10, 0x30, 0xe8, 0x27, 0x31, 0x79, 0xc3, + 0x77, 0x70, 0x50, 0x2d, 0x01, 0xfd, 0x9c, 0x65, 0x7e, 0x57, 0x83, 0xb9, 0x9d, 0x64, 0xd7, 0x73, + 0x07, 0xa8, 0x82, 0xb9, 0x35, 0x77, 0x9e, 0xa6, 0x38, 0x4f, 0x76, 0x81, 0x3e, 0xde, 0x05, 0x35, + 0xd5, 0x05, 0x8b, 0xd0, 0x18, 0x12, 0xdf, 0x21, 0xa1, 0x70, 0xa9, 0xa0, 0x84, 0xa9, 0xf5, 0xd4, + 0x54, 0xf3, 0x0f, 0x3a, 0xcc, 0x7c, 0xcc, 0x26, 0x2c, 0x43, 0x2b, 0xd8, 0xa7, 0x3e, 0xd9, 0x4a, + 0x18, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xf5, 0x5d, 0x37, 0x8c, 0xf7, 0x31, 0xae, 0x6d, + 0x8b, 0x13, 0x8c, 0x4b, 0x46, 0xb6, 0xcb, 0x83, 0xd9, 0xb4, 0x38, 0x21, 0x06, 0x34, 0x93, 0xf9, + 0x5e, 0x5d, 0x96, 0x9a, 0xa5, 0x65, 0xa9, 0x8c, 0x0d, 0xa8, 0xc4, 0xc6, 0x65, 0xe8, 0x0c, 0x3d, + 0xba, 0x6b, 0x7b, 0x16, 0x19, 0x1c, 0xf5, 0xa2, 0xe1, 0x76, 0x10, 0x63, 0x20, 0xeb, 0x56, 0x89, + 0x6f, 0xfe, 0x4b, 0x03, 0xd8, 0x0c, 0x5d, 0xe2, 0x3b, 0xe8, 0xc6, 0xc2, 0xda, 0xa9, 0x95, 0xd7, + 0xce, 0x45, 0x68, 0x84, 0x64, 0x64, 0x87, 0x07, 0xe9, 0x44, 0xe1, 0x54, 0xc1, 0xf8, 0x5a, 0xc9, + 0xf8, 0x57, 0x01, 0xf6, 0xb0, 0x1f, 0xa6, 0x07, 0xdd, 0xca, 0x66, 0x75, 0x29, 0x1d, 0xad, 0xa4, + 0x11, 0xb5, 0xa4, 0xe6, 0x6c, 0x16, 0xda, 0x8e, 0x23, 0xc0, 0x5e, 0xe7, 0xb3, 0x30, 0x63, 0x54, + 0x60, 0xbd, 0x71, 0x0c, 0xd6, 0xa7, 0x33, 0x00, 0xfd, 0x53, 0x83, 0xe6, 0x9a, 0x67, 0x0f, 0x0e, + 0x26, 0x1c, 0xba, 0x3a, 0x44, 0xbd, 0x34, 0xc4, 0xeb, 0xd0, 0xde, 0x65, 0xea, 0xd2, 0x21, 0xa0, + 0x17, 0x5a, 0x57, 0x3f, 0x53, 0x31, 0x4a, 0x75, 0x02, 0x59, 0xaa, 0x9c, 0x3a, 0xdc, 0xa9, 0x93, + 0x87, 0x5b, 0x3f, 0x66, 0xb8, 0xd9, 0xea, 0x6a, 0xfe, 0x45, 0x87, 0x59, 0x5c, 0x14, 0x2d, 0x72, + 0x98, 0x90, 0x28, 0x36, 0x5e, 0x87, 0x99, 0x24, 0x35, 0x55, 0x9b, 0xd4, 0xd4, 0x4c, 0xc4, 0x78, + 0x45, 0x64, 0x0f, 0x94, 0xd7, 0x51, 0xfe, 0x42, 0x85, 0x7c, 0x96, 0x8e, 0xac, 0xbc, 0x39, 0xcb, + 0x1b, 0xfb, 0xb6, 0xef, 0x78, 0xc4, 0x22, 0x51, 0xe2, 0xc5, 0x62, 0x65, 0x55, 0x78, 0x1c, 0x69, + 0x87, 0xbd, 0x68, 0x28, 0xb2, 0x8a, 0xa0, 0x98, 0x77, 0x78, 0x3b, 0xf6, 0x89, 0x0f, 0x3d, 0x67, + 0xb0, 0x49, 0x1d, 0x92, 0x43, 0x8c, 0x10, 0x9f, 0x82, 0x29, 0x99, 0xf7, 0x29, 0xbc, 0xc6, 0x81, + 0xa0, 0xf0, 0x58, 0x88, 0x39, 0x8d, 0x0a, 0x78, 0xe2, 0x97, 0x38, 0xc5, 0xbc, 0x6f, 0xfe, 0xbd, + 0x06, 0x6d, 0x3e, 0x7d, 0x52, 0xa7, 0x5e, 0x64, 0x38, 0xa7, 0x23, 0x05, 0x45, 0x12, 0x87, 0x59, + 0xc1, 0xa8, 0x2d, 0x75, 0x51, 0x52, 0x78, 0x0c, 0x8a, 0x8c, 0xde, 0x54, 0x16, 0x27, 0x99, 0x95, + 0xf6, 0x72, 0x5d, 0x5e, 0xa4, 0x24, 0x0e, 0x5b, 0xf6, 0x62, 0xaa, 0xa0, 0x23, 0xa3, 0x99, 0x6c, + 0x4c, 0xb3, 0xfe, 0x39, 0x3e, 0x24, 0x0e, 0xf3, 0x6f, 0x4c, 0xd3, 0xbe, 0xb9, 0x93, 0x72, 0x06, + 0xd7, 0x2c, 0xfa, 0xe5, 0x69, 0x27, 0xa3, 0x4b, 0x51, 0x6d, 0x1e, 0x1b, 0x55, 0x50, 0xa2, 0xaa, + 0x4e, 0xae, 0x56, 0x69, 0x72, 0x5d, 0x82, 0x36, 0xd7, 0x93, 0x82, 0x7e, 0x96, 0x57, 0x52, 0x0a, + 0x53, 0xc5, 0x46, 0xbb, 0x88, 0x0d, 0x35, 0xba, 0x73, 0x63, 0xa2, 0x3b, 0x9f, 0x45, 0xf7, 0x97, + 0x3a, 0xc0, 0x06, 0x09, 0xec, 0x30, 0x1e, 0x11, 0x3f, 0x66, 0xc3, 0x73, 0x32, 0x2a, 0x0b, 0xae, + 0xc2, 0x93, 0x73, 0x8a, 0xae, 0xe6, 0x14, 0x03, 0xa6, 0xd0, 0xe1, 0x3c, 0x9a, 0xf8, 0x9b, 0x39, + 0x33, 0xb0, 0x43, 0xae, 0x8d, 0x83, 0x3c, 0xa3, 0x59, 0xce, 0xa0, 0xa1, 0x23, 0xb2, 0x4c, 0xdd, + 0xe2, 0x04, 0x9b, 0xfc, 0x79, 0x7f, 0x58, 0x2f, 0x36, 0x78, 0x0e, 0x50, 0xb9, 0x27, 0x96, 0xb8, + 0x97, 0xa1, 0x13, 0x25, 0xbb, 0xf9, 0xe0, 0xb6, 0x92, 0x91, 0x80, 0x7b, 0x89, 0xcf, 0x9c, 0xca, + 0x6b, 0x5f, 0xd6, 0x88, 0xa7, 0xa5, 0x9c, 0x51, 0xac, 0x20, 0xcc, 0x0f, 0x75, 0xe8, 0x6c, 0x87, + 0x43, 0xdb, 0x77, 0xbf, 0x89, 0xc5, 0x18, 0x2e, 0xe0, 0xa7, 0x49, 0xcf, 0xcb, 0xd0, 0x22, 0xfe, + 0xd0, 0x73, 0xa3, 0xfd, 0xad, 0xdc, 0x6f, 0x32, 0x4b, 0x76, 0xf6, 0xd4, 0xb8, 0x04, 0x5e, 0x57, + 0x12, 0xf8, 0x22, 0x34, 0x46, 0x74, 0xd7, 0xf5, 0x52, 0xdc, 0x0b, 0x0a, 0x31, 0x4f, 0x3c, 0x82, + 0x99, 0x3c, 0xc3, 0x7c, 0xca, 0xc8, 0x93, 0xfa, 0x4c, 0x65, 0x52, 0x6f, 0xca, 0x49, 0x5d, 0x75, + 0x3c, 0x94, 0x1c, 0xcf, 0xdd, 0xd5, 0xca, 0xdc, 0xf5, 0x7b, 0x0d, 0x3a, 0xb9, 0xbb, 0x79, 0xbd, + 0x3a, 0xd6, 0x5d, 0x45, 0x04, 0xea, 0x15, 0x08, 0xcc, 0x70, 0x53, 0x93, 0x71, 0xc3, 0x90, 0x46, + 0x23, 0x57, 0x2a, 0xd2, 0x33, 0x9a, 0xf5, 0xe6, 0x11, 0x5b, 0x72, 0x16, 0xa7, 0xa4, 0x4d, 0x4d, + 0x43, 0xd9, 0xd4, 0x14, 0xf3, 0xe8, 0x6f, 0x34, 0x38, 0xcf, 0xa2, 0x5c, 0x1a, 0xc6, 0x36, 0x74, + 0x68, 0x01, 0x09, 0x22, 0xd1, 0x3c, 0x5b, 0x91, 0x28, 0x8a, 0xa0, 0xb1, 0x4a, 0xc2, 0x4c, 0xa1, + 0x53, 0xe8, 0x44, 0x64, 0x9e, 0x2a, 0x85, 0x45, 0x7b, 0xac, 0x92, 0xb0, 0xf9, 0x5b, 0x0d, 0x3a, + 0x3c, 0xb5, 0x49, 0xf3, 0xfc, 0xcc, 0xcd, 0x7e, 0x17, 0xce, 0x17, 0x7b, 0xbe, 0xe5, 0x46, 0x71, + 0x57, 0x5f, 0xae, 0x4d, 0x6a, 0x7a, 0xa5, 0x02, 0x36, 0xd7, 0x9e, 0xde, 0x49, 0x3c, 0xaf, 0x47, + 0xa2, 0xc8, 0x1e, 0x92, 0xb5, 0x07, 0x7d, 0x72, 0xc8, 0x3e, 0x58, 0xe4, 0x70, 0x2c, 0x86, 0x58, + 0x9d, 0x83, 0x85, 0x82, 0x4b, 0xfd, 0x0c, 0x42, 0x32, 0x8b, 0x4d, 0xab, 0x88, 0xeb, 0xe9, 0xd6, + 0x96, 0x6b, 0x2c, 0x85, 0x0a, 0xd2, 0xf8, 0x06, 0xcc, 0x62, 0x0e, 0x17, 0xdd, 0x74, 0xa7, 0x70, + 0x00, 0xaf, 0x55, 0x56, 0x0d, 0x95, 0x56, 0xf1, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x71, 0xf8, 0xc0, + 0x52, 0x34, 0x2e, 0xbd, 0x07, 0x0b, 0xa5, 0x26, 0x46, 0x07, 0x6a, 0x07, 0xe4, 0x81, 0x18, 0x07, + 0xfb, 0x69, 0xbc, 0x08, 0xf5, 0x23, 0xb6, 0xf7, 0x13, 0xd1, 0x5f, 0xaa, 0xb0, 0x40, 0xd8, 0x6c, + 0xf1, 0x86, 0xaf, 0xe8, 0x5f, 0xd2, 0xcc, 0x67, 0xb3, 0x81, 0xc9, 0x63, 0xd4, 0x94, 0x31, 0x9a, + 0x6f, 0x41, 0xab, 0x17, 0x0d, 0x37, 0xec, 0xd8, 0xc6, 0x86, 0xaf, 0x41, 0x6b, 0x94, 0x93, 0xd8, + 0xb8, 0xba, 0x3f, 0x21, 0x64, 0xc9, 0xcd, 0xcd, 0x3f, 0xeb, 0xd0, 0xad, 0x76, 0x45, 0x14, 0x30, + 0x1b, 0x48, 0x18, 0xae, 0x53, 0x87, 0xe0, 0xd0, 0xea, 0x56, 0x4a, 0xb2, 0xd8, 0x91, 0x30, 0x64, + 0x39, 0x4c, 0x14, 0xd9, 0x9c, 0x32, 0x56, 0x60, 0xca, 0x4b, 0xc3, 0x72, 0xbc, 0x15, 0xd8, 0xce, + 0x18, 0x41, 0x07, 0xbd, 0x2b, 0x0d, 0x48, 0xc4, 0x6c, 0x75, 0xe2, 0x98, 0x45, 0x01, 0x0f, 0x9a, + 0xa4, 0x83, 0x07, 0xae, 0xa4, 0x7a, 0x69, 0x00, 0x4f, 0x55, 0x36, 0xad, 0x08, 0xe0, 0x17, 0xd5, + 0x00, 0x5e, 0x1c, 0x3f, 0x94, 0x62, 0x10, 0x03, 0x30, 0xae, 0x93, 0xb8, 0x67, 0xdf, 0x5f, 0xf5, + 0x9d, 0x9e, 0xeb, 0xf7, 0xc9, 0x21, 0x43, 0xfb, 0x32, 0xb4, 0xc4, 0x56, 0x3e, 0x0b, 0x53, 0xd3, + 0x92, 0x59, 0x63, 0x77, 0xf8, 0x85, 0xf9, 0x50, 0x2b, 0xcd, 0x07, 0xf3, 0x1a, 0xcc, 0xca, 0xdd, + 0x61, 0x12, 0xb1, 0xef, 0xf7, 0xc9, 0x21, 0x0e, 0xa8, 0x6d, 0x09, 0x0a, 0xf9, 0xd8, 0x42, 0xec, + 0x0d, 0x04, 0x65, 0xfe, 0x49, 0x87, 0x73, 0x25, 0x93, 0xa3, 0xe0, 0x61, 0xf5, 0xc8, 0x78, 0xa9, + 0x8d, 0xc3, 0xcb, 0x94, 0x82, 0x97, 0x03, 0x58, 0xe0, 0x41, 0x92, 0xba, 0xee, 0xd6, 0x11, 0x00, + 0xaf, 0x57, 0x95, 0xea, 0x65, 0x23, 0x45, 0xec, 0x25, 0x2e, 0x0f, 0x7e, 0x59, 0xef, 0x12, 0x81, + 0xc5, 0xea, 0xc6, 0x15, 0xe1, 0x7f, 0x59, 0x0d, 0xff, 0xa7, 0xab, 0xc2, 0x2f, 0x5b, 0x22, 0xc5, + 0xff, 0x10, 0xe6, 0xd9, 0xa2, 0xda, 0x27, 0xbe, 0xd3, 0x8b, 0x86, 0xe8, 0xc8, 0x65, 0x68, 0x71, + 0xf9, 0x5e, 0x34, 0xcc, 0xb7, 0x6e, 0x12, 0x8b, 0xb5, 0x18, 0x78, 0x2e, 0x5b, 0x3c, 0xb1, 0x85, + 0x58, 0xf4, 0x24, 0x16, 0x4b, 0x90, 0x11, 0x11, 0xa7, 0x1e, 0xcc, 0xbb, 0x35, 0x2b, 0xa3, 0xcd, + 0x0f, 0x1a, 0x30, 0x2d, 0xd0, 0x88, 0x49, 0x91, 0xed, 0x96, 0xb3, 0x65, 0x95, 0x53, 0xbc, 0xae, + 0x1d, 0x1c, 0xe5, 0xf0, 0xe2, 0x94, 0x7c, 0xe4, 0x54, 0x53, 0x8f, 0x9c, 0x0a, 0x36, 0x4d, 0x95, + 0x6d, 0x2a, 0x8c, 0xab, 0x5e, 0x1e, 0x17, 0x2b, 0xe3, 0xb0, 0xb2, 0xd9, 0xf1, 0xec, 0x78, 0x8f, + 0x86, 0x23, 0xb1, 0xf9, 0xad, 0x5b, 0x25, 0x3e, 0x2b, 0x1d, 0x39, 0x2f, 0xab, 0xfd, 0x79, 0x0a, + 0x2f, 0x70, 0x59, 0xa5, 0xcd, 0x39, 0xe9, 0x1e, 0x80, 0x9f, 0x50, 0xa8, 0x4c, 0x6e, 0x5b, 0x14, + 0xb9, 0xd4, 0xc7, 0x2a, 0x94, 0x97, 0xfa, 0x32, 0x8b, 0x8d, 0x7c, 0x14, 0x0d, 0x37, 0x43, 0x3a, + 0x12, 0xe7, 0x14, 0x29, 0x89, 0x23, 0xa7, 0x7e, 0x9c, 0x56, 0xb0, 0xfc, 0x6c, 0x42, 0x66, 0x31, + 0x59, 0x41, 0x62, 0x9d, 0x3f, 0x6b, 0xa5, 0x24, 0xc3, 0x52, 0x44, 0x0e, 0x45, 0xf1, 0xce, 0x7e, + 0x2a, 0x91, 0x9b, 0x57, 0x23, 0x57, 0xa8, 0xc6, 0x3a, 0xf8, 0x55, 0xae, 0xc6, 0xf2, 0x12, 0x67, + 0x41, 0x29, 0x71, 0x56, 0x61, 0x9a, 0x06, 0x6c, 0xfa, 0x47, 0x5d, 0x03, 0xa7, 0xcb, 0xf3, 0xe3, + 0x17, 0xa8, 0x95, 0x6d, 0xde, 0x92, 0x4f, 0x8c, 0x54, 0xce, 0xb8, 0x05, 0xf3, 0x74, 0x6f, 0xcf, + 0x73, 0x7d, 0xb2, 0x93, 0x44, 0xfb, 0xb8, 0x49, 0x3e, 0x87, 0x60, 0x37, 0xab, 0x8a, 0x08, 0xb5, + 0xa5, 0x55, 0x14, 0x65, 0x95, 0x9f, 0x1d, 0xf3, 0x4d, 0x0e, 0x2e, 0x70, 0xe7, 0x71, 0x81, 0x53, + 0x78, 0x78, 0x76, 0x27, 0x2d, 0xf4, 0x4f, 0xa1, 0xe3, 0x64, 0xd6, 0xd2, 0x2b, 0x30, 0x2b, 0x1b, + 0x5b, 0x31, 0x31, 0xcf, 0xcb, 0x13, 0x73, 0x46, 0x9e, 0x77, 0x3f, 0xd0, 0x60, 0xbe, 0x60, 0x26, + 0x6b, 0x1d, 0xbb, 0xb1, 0x47, 0x84, 0x06, 0x4e, 0xb0, 0x9d, 0x8e, 0x43, 0xa2, 0x81, 0x98, 0x08, + 0xf8, 0x5b, 0xd4, 0x8c, 0xb5, 0xec, 0xac, 0xcb, 0x84, 0x59, 0x77, 0xbb, 0xcf, 0x14, 0xf5, 0x69, + 0xe2, 0x3b, 0xd9, 0xc1, 0xb1, 0xc4, 0x63, 0x40, 0x74, 0xb7, 0xfb, 0x6b, 0xb6, 0x33, 0x24, 0xfc, + 0x20, 0xbe, 0x8e, 0x36, 0xa9, 0x4c, 0xd3, 0x81, 0x99, 0xdb, 0x6e, 0x10, 0xad, 0xd3, 0xd1, 0x88, + 0x85, 0xd3, 0x21, 0x31, 0xab, 0xc9, 0x35, 0x1c, 0xbc, 0xa0, 0x98, 0x67, 0x1c, 0xb2, 0x67, 0x27, + 0x5e, 0xcc, 0x9a, 0xa6, 0xd3, 0x5f, 0x62, 0xe1, 0x79, 0x6a, 0x44, 0xfd, 0x0d, 0x2e, 0xcd, 0xed, + 0x94, 0x38, 0xe6, 0x1f, 0x75, 0xe8, 0xe0, 0xea, 0xb6, 0x8e, 0xe0, 0x71, 0x50, 0xe8, 0x2a, 0xd4, + 0x71, 0x32, 0x8b, 0xea, 0xf0, 0xf8, 0xd3, 0x0f, 0xde, 0xd4, 0xb8, 0x06, 0x0d, 0x1a, 0x60, 0x49, + 0xc9, 0x97, 0xbe, 0xe7, 0xc6, 0x09, 0xa9, 0x47, 0xd7, 0x96, 0x90, 0x32, 0x36, 0x01, 0x46, 0x79, + 0x05, 0xc9, 0x0b, 0x81, 0x49, 0x75, 0x48, 0x92, 0xcc, 0xb9, 0x59, 0x8e, 0xcb, 0xce, 0xaf, 0x6b, + 0x96, 0xca, 0x34, 0xb6, 0x60, 0x0e, 0xcd, 0xde, 0x4e, 0x8f, 0xc1, 0x30, 0x06, 0x93, 0xf7, 0x58, + 0x90, 0x36, 0x7f, 0xa2, 0x09, 0x37, 0xb2, 0xaf, 0x7d, 0xc2, 0x7d, 0x9f, 0xbb, 0x44, 0x3b, 0x95, + 0x4b, 0x96, 0x60, 0x66, 0x94, 0x48, 0xa7, 0x72, 0x35, 0x2b, 0xa3, 0xf3, 0x10, 0xd5, 0x26, 0x0e, + 0x91, 0xf9, 0x53, 0x0d, 0xba, 0x6f, 0x52, 0xd7, 0xc7, 0x0f, 0xab, 0x41, 0xe0, 0x89, 0x6b, 0x85, + 0x53, 0xc7, 0xfc, 0x2b, 0xd0, 0xb4, 0xb9, 0x1a, 0x3f, 0x16, 0x61, 0x9f, 0xe0, 0xa4, 0x2d, 0x97, + 0x91, 0x0e, 0x4d, 0x6a, 0xf2, 0xa1, 0x89, 0xf9, 0x91, 0x06, 0x73, 0xdc, 0x29, 0x6f, 0x27, 0x6e, + 0x7c, 0x6a, 0xfb, 0xd6, 0x60, 0xe6, 0x30, 0x71, 0xe3, 0x53, 0xa0, 0x32, 0x93, 0x2b, 0xe3, 0xa9, + 0x56, 0x81, 0x27, 0xf3, 0x17, 0x1a, 0x5c, 0x28, 0xba, 0x75, 0x75, 0x30, 0x20, 0xc1, 0xa3, 0x9c, + 0x52, 0xca, 0xa1, 0xd1, 0x54, 0xe1, 0xd0, 0xa8, 0xd2, 0x64, 0x8b, 0xbc, 0x4f, 0x06, 0x8f, 0xaf, + 0xc9, 0xdf, 0xd6, 0xe1, 0xff, 0xaf, 0x67, 0x13, 0xef, 0x76, 0x68, 0xfb, 0xd1, 0x1e, 0x09, 0xc3, + 0x47, 0x68, 0xef, 0x2d, 0x68, 0xfb, 0xe4, 0x5e, 0x6e, 0x93, 0x98, 0x8e, 0x93, 0xaa, 0x51, 0x85, + 0x27, 0x5b, 0xbb, 0xcc, 0x7f, 0x6b, 0xd0, 0xe1, 0x7a, 0xde, 0x72, 0x07, 0x07, 0x8f, 0x70, 0xf0, + 0x5b, 0x30, 0x77, 0x80, 0x16, 0x30, 0xea, 0x14, 0xcb, 0x76, 0x41, 0x7a, 0xc2, 0xe1, 0xff, 0x47, + 0x83, 0x05, 0xae, 0xe8, 0xa6, 0x7f, 0xe4, 0x3e, 0x4a, 0xb0, 0xee, 0xc0, 0xbc, 0xcb, 0x4d, 0x38, + 0xa5, 0x03, 0x8a, 0xe2, 0x13, 0x7a, 0xe0, 0xd7, 0x1a, 0xcc, 0x73, 0x4d, 0x6f, 0xf8, 0x31, 0x09, + 0x4f, 0x3d, 0xfe, 0x1b, 0xd0, 0x22, 0x7e, 0x1c, 0xda, 0xfe, 0x69, 0x56, 0x48, 0x59, 0x74, 0xc2, + 0x45, 0xf2, 0x23, 0x0d, 0x0c, 0x54, 0xb5, 0xe1, 0x46, 0x23, 0x37, 0x8a, 0x1e, 0x61, 0xe8, 0x26, + 0x33, 0xf8, 0x87, 0x3a, 0x9c, 0x97, 0xb4, 0xf4, 0x92, 0xf8, 0x71, 0x37, 0xd9, 0xd8, 0x80, 0x26, + 0xab, 0x11, 0xe4, 0xdb, 0xc8, 0x49, 0x3b, 0xca, 0x05, 0x59, 0x15, 0x8b, 0x44, 0x9f, 0x0c, 0xa8, + 0xef, 0x44, 0x58, 0x1c, 0xb5, 0x2d, 0x85, 0xc7, 0x96, 0xa1, 0x25, 0x49, 0xcd, 0xba, 0xed, 0x0f, + 0x88, 0xf7, 0xc4, 0xb8, 0xc8, 0xfc, 0xb9, 0x06, 0x73, 0xbc, 0xc9, 0xe3, 0x3f, 0x64, 0x96, 0xeb, + 0x39, 0x90, 0x3f, 0x31, 0x51, 0x62, 0xf0, 0x5a, 0x94, 0xb4, 0xc8, 0x75, 0xf5, 0xe3, 0x0b, 0xad, + 0x1b, 0xd0, 0x1a, 0xec, 0xdb, 0xfe, 0xf0, 0x54, 0xe0, 0x92, 0x45, 0xcd, 0x18, 0x9e, 0x96, 0x0f, + 0xe0, 0xd7, 0xf9, 0x27, 0x1c, 0xfe, 0x4b, 0x85, 0xa1, 0x1c, 0xfb, 0xda, 0xe0, 0xe1, 0x9c, 0x7e, + 0x00, 0x0b, 0xfc, 0xd6, 0x57, 0xaa, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x3f, 0x86, 0xd0, 0x50, + 0x28, 0x25, 0xd5, 0xfb, 0x7c, 0xf1, 0xce, 0x2a, 0xbf, 0xcf, 0xbf, 0x08, 0x60, 0x3b, 0xce, 0xbb, + 0x34, 0x74, 0x5c, 0x3f, 0x2d, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x6e, 0x86, 0x74, 0x74, 0x5b, + 0xba, 0xbf, 0x3d, 0xf6, 0x86, 0x59, 0xbe, 0xfb, 0xd5, 0xd5, 0xbb, 0x5f, 0xf3, 0xeb, 0xf0, 0x54, + 0xc9, 0x70, 0x74, 0xd6, 0x3a, 0xbf, 0x96, 0x4e, 0x3b, 0x11, 0x90, 0xa9, 0x3a, 0x97, 0x93, 0x6d, + 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0x29, 0xa9, 0x5f, 0x0d, 0x82, 0x90, 0x1e, 0x89, 0x98, + 0x9c, 0x45, 0x37, 0x6a, 0xf1, 0xab, 0x17, 0x8b, 0xdf, 0x4a, 0x23, 0x94, 0x82, 0xfd, 0x63, 0x30, + 0xe2, 0x67, 0x1a, 0xcc, 0x0b, 0x23, 0x1c, 0x47, 0x74, 0xfb, 0x32, 0x34, 0xf8, 0x93, 0x16, 0xd1, + 0xe1, 0x33, 0x95, 0x1d, 0xa6, 0x4f, 0x71, 0x2c, 0xd1, 0xb8, 0x8c, 0x48, 0xbd, 0x6a, 0x46, 0x7d, + 0x39, 0x03, 0xfb, 0xc4, 0x8f, 0x4e, 0x84, 0x80, 0xf9, 0xd5, 0x14, 0xcc, 0x1b, 0xc4, 0x23, 0x67, + 0xe9, 0x23, 0xf3, 0x0e, 0xcc, 0xe1, 0xfb, 0x9a, 0xdc, 0x07, 0x67, 0xa2, 0xf6, 0x5d, 0xe8, 0xa0, + 0xda, 0x33, 0xb7, 0x37, 0x9b, 0x1d, 0xcc, 0x3f, 0xf2, 0x52, 0x72, 0x26, 0xda, 0xbf, 0x00, 0xe7, + 0x52, 0xdf, 0xdf, 0x09, 0x9c, 0xec, 0x10, 0x69, 0xcc, 0x3d, 0x9d, 0xf9, 0x22, 0x2c, 0xae, 0x53, + 0xff, 0x88, 0x84, 0x11, 0xbf, 0x48, 0x44, 0x91, 0x54, 0x42, 0x99, 0xfc, 0x82, 0x32, 0xdf, 0x87, + 0x25, 0x59, 0xa2, 0x4f, 0xe2, 0x9d, 0xd0, 0x3d, 0x92, 0xa4, 0xc4, 0x01, 0xb5, 0xa6, 0x1c, 0x50, + 0xe7, 0x07, 0xda, 0xba, 0x72, 0xa0, 0x7d, 0x01, 0x9a, 0x6e, 0x24, 0x14, 0x20, 0xa8, 0x66, 0xac, + 0x9c, 0x61, 0xda, 0xb0, 0xc0, 0xdd, 0x2f, 0x2e, 0x8c, 0xb0, 0x8b, 0x25, 0x98, 0xe1, 0x98, 0xca, + 0x3a, 0xc9, 0xe8, 0xb1, 0xd7, 0x2f, 0x63, 0x2f, 0x1b, 0xcd, 0x3e, 0x2c, 0x88, 0x47, 0x35, 0x3b, + 0xf6, 0xd0, 0xf5, 0xf9, 0x22, 0x7b, 0x11, 0x20, 0xb0, 0x87, 0xe9, 0x03, 0x3c, 0x7e, 0x6d, 0x26, + 0x71, 0xd8, 0xf7, 0x68, 0x9f, 0xde, 0x13, 0xdf, 0x75, 0xfe, 0x3d, 0xe7, 0x98, 0xef, 0x80, 0x61, + 0x91, 0x28, 0xa0, 0x7e, 0x44, 0x24, 0xad, 0xcb, 0xd0, 0x5a, 0x4f, 0xc2, 0x90, 0xf8, 0xac, 0xab, + 0xf4, 0x85, 0x99, 0xcc, 0x62, 0x7a, 0xfb, 0xb9, 0x5e, 0x7e, 0xc4, 0x2e, 0x71, 0xcc, 0x1f, 0xd5, + 0xa0, 0xd9, 0x77, 0x87, 0xbe, 0xed, 0x59, 0xe4, 0xd0, 0x78, 0x0d, 0x1a, 0x7c, 0xcb, 0x22, 0x90, + 0x52, 0x75, 0xe4, 0xcb, 0x5b, 0xf3, 0xbd, 0x99, 0x45, 0x0e, 0x6f, 0xfc, 0x9f, 0x25, 0x64, 0x8c, + 0xb7, 0xa1, 0xcd, 0x7f, 0xdd, 0xe4, 0x47, 0x50, 0x22, 0x7f, 0x7d, 0xf6, 0x04, 0x25, 0xa2, 0x35, + 0xd7, 0xa5, 0x6a, 0x60, 0x06, 0x0d, 0xb0, 0xa4, 0x11, 0xcb, 0xc3, 0x78, 0x83, 0x78, 0xe5, 0x23, + 0x0c, 0xe2, 0x32, 0x4c, 0xda, 0xc6, 0x43, 0x1a, 0x91, 0xa9, 0xc7, 0x4b, 0xf3, 0xb3, 0x1c, 0x21, + 0xcd, 0x65, 0x98, 0xf4, 0x7e, 0xe2, 0x0f, 0xef, 0x04, 0xe2, 0xec, 0x70, 0xbc, 0xf4, 0x0d, 0x6c, + 0x26, 0xa4, 0xb9, 0x0c, 0x93, 0x0e, 0x71, 0xf1, 0x46, 0xa7, 0x1f, 0x27, 0xcd, 0xd7, 0x78, 0x21, + 0xcd, 0x65, 0xd6, 0x9a, 0x30, 0x1d, 0xd8, 0x0f, 0x3c, 0x6a, 0x3b, 0xe6, 0x87, 0x35, 0x80, 0xb4, + 0x61, 0x84, 0x85, 0x8e, 0x12, 0xa2, 0x4b, 0x27, 0x86, 0x28, 0xf0, 0x1e, 0x48, 0x41, 0xea, 0x57, + 0x07, 0xe9, 0x73, 0x93, 0x06, 0x89, 0x6b, 0x2b, 0x84, 0xe9, 0x5a, 0x21, 0x4c, 0x97, 0x4e, 0x0c, + 0x93, 0x30, 0x4a, 0x04, 0xea, 0x5a, 0x21, 0x50, 0x97, 0x4e, 0x0c, 0x94, 0x90, 0x17, 0xa1, 0xba, + 0x56, 0x08, 0xd5, 0xa5, 0x13, 0x43, 0x25, 0xe4, 0x45, 0xb0, 0xae, 0x15, 0x82, 0x75, 0xe9, 0xc4, + 0x60, 0x09, 0xf9, 0x72, 0xb8, 0xfe, 0xaa, 0xc3, 0x1c, 0xba, 0x8c, 0xdf, 0xc2, 0xfa, 0x7b, 0x14, + 0xef, 0x03, 0xd0, 0x5d, 0xea, 0x1b, 0x4d, 0x95, 0x69, 0x7c, 0x1e, 0x16, 0x38, 0x83, 0x48, 0xd7, + 0x25, 0x3a, 0x5e, 0x97, 0x94, 0x3f, 0xe0, 0x05, 0x51, 0x12, 0xc5, 0x74, 0xb4, 0x61, 0xc7, 0x76, + 0x5a, 0x7c, 0xe5, 0x1c, 0xf9, 0xfa, 0x6e, 0xaa, 0xf4, 0x62, 0x3c, 0xa4, 0x74, 0x94, 0xdd, 0xcb, + 0x09, 0x8a, 0x49, 0xc4, 0xee, 0x88, 0xd0, 0x24, 0x16, 0xcb, 0x44, 0x4a, 0xf2, 0x77, 0x54, 0x8e, + 0x6b, 0xe3, 0xa5, 0x97, 0x78, 0x64, 0x94, 0x31, 0x70, 0x65, 0xcb, 0x2f, 0xf1, 0xc4, 0x8b, 0xee, + 0x9c, 0x33, 0xc1, 0x85, 0x1b, 0x3e, 0xc6, 0x77, 0x63, 0x57, 0x7e, 0x7c, 0x54, 0xb7, 0x14, 0x9e, + 0xf9, 0x0f, 0x0d, 0xce, 0xed, 0xd8, 0x61, 0xec, 0x0e, 0xdc, 0xc0, 0xf6, 0xe3, 0x1e, 0x89, 0x6d, + 0x1c, 0xa7, 0xf2, 0x98, 0x53, 0x7b, 0xb8, 0xc7, 0x9c, 0x3b, 0x30, 0x3f, 0x54, 0x77, 0x20, 0x0f, + 0xb9, 0x79, 0x28, 0x8a, 0x2b, 0x2f, 0x53, 0x6b, 0x0f, 0xfd, 0x32, 0xd5, 0xfc, 0x9e, 0x0e, 0xf3, + 0x85, 0xe5, 0xf5, 0xd8, 0xdc, 0xb4, 0x0a, 0xe0, 0x66, 0x50, 0x3b, 0xe6, 0x80, 0x5e, 0xc5, 0xa3, + 0x25, 0x09, 0x55, 0xdd, 0xf6, 0xd5, 0x4e, 0x7f, 0xdb, 0x77, 0x03, 0x5a, 0x41, 0x1e, 0xa4, 0x63, + 0xf6, 0x47, 0x15, 0xa1, 0xb4, 0x64, 0x51, 0xf3, 0x3d, 0x58, 0x28, 0xad, 0x62, 0x78, 0x6d, 0x47, + 0x0f, 0x88, 0x9f, 0x5d, 0xdb, 0x31, 0x42, 0x02, 0xb4, 0x5e, 0x04, 0xb4, 0xe7, 0x1e, 0xc9, 0xcf, + 0xe4, 0x05, 0x69, 0x7e, 0x5f, 0x87, 0xc5, 0xea, 0x0c, 0xf4, 0xa4, 0xba, 0x7b, 0x17, 0xba, 0xe3, + 0x56, 0xfb, 0x33, 0xf3, 0x7a, 0x8e, 0xee, 0x2c, 0x57, 0x3f, 0xa9, 0xee, 0x3e, 0x97, 0xa2, 0x5b, + 0x4a, 0x87, 0xe6, 0xaf, 0x32, 0xff, 0x64, 0xd5, 0xc8, 0x13, 0xea, 0x1f, 0xe3, 0x32, 0x74, 0xf8, + 0x30, 0xa5, 0xe7, 0x21, 0xbc, 0xb8, 0x2d, 0xf1, 0xf3, 0x95, 0x42, 0x2a, 0x0d, 0xce, 0x0c, 0xb3, + 0xbf, 0xd3, 0xd2, 0x98, 0x64, 0x35, 0xde, 0x27, 0x2a, 0x26, 0x39, 0xd2, 0xa4, 0xc2, 0x47, 0x42, + 0x5a, 0x56, 0x7b, 0xfe, 0x0f, 0x69, 0x27, 0x23, 0x2d, 0xf3, 0xa5, 0x54, 0x04, 0x9a, 0xdf, 0x82, + 0xf6, 0x06, 0xf1, 0x7a, 0xd1, 0x30, 0x7d, 0xbf, 0x7a, 0xa6, 0x9b, 0xc9, 0xe2, 0x2b, 0xbf, 0xa9, + 0xf2, 0x2b, 0xbf, 0x35, 0x98, 0x93, 0x0d, 0x38, 0xcd, 0xfb, 0xcc, 0xb5, 0x0b, 0x5f, 0x5b, 0x5a, + 0x11, 0xff, 0x9e, 0x7d, 0xb5, 0xe4, 0xc4, 0xdd, 0x06, 0xfe, 0x79, 0xf1, 0xa5, 0xff, 0x06, 0x00, + 0x00, 0xff, 0xff, 0x58, 0x4b, 0xb8, 0x00, 0x96, 0x3b, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 22e5ea01b..5bb67e7f0 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -20,7 +20,17 @@ message GroupInfo{ int32 status = 10; string creatorUserID = 11; int32 groupType = 12; - google.protobuf.Int32Value needVerification = 13; + int32 needVerification = 13; +} + +message GroupInfoForSet{ + string groupID = 1; + string groupName = 2; + string notification = 3; + string introduction = 4; + string faceURL = 5; + string ex = 6; + google.protobuf.Int32Value needVerification = 7; } From 26bd3bf76da0a39c8d94252bdea25bbd011b40da Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 20:43:52 +0800 Subject: [PATCH 689/752] fix bug --- internal/rpc/msg/group_notification.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 002c17db9..b24789e23 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -242,7 +242,9 @@ func GroupInfoSetNotification(operationID, opUserID, groupID string, groupName, GroupInfoChangedTips.Group.Notification = notification GroupInfoChangedTips.Group.Introduction = introduction GroupInfoChangedTips.Group.FaceURL = faceURL - GroupInfoChangedTips.Group.NeedVerification = needVerification + if needVerification != nil { + GroupInfoChangedTips.Group.NeedVerification = needVerification.Value + } if err := setOpUserInfo(opUserID, groupID, GroupInfoChangedTips.OpUser); err != nil { log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID) From 3da65976438662ccbb6964138c163d39844aef32 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 28 Jun 2022 20:47:16 +0800 Subject: [PATCH 690/752] fix bug --- internal/api/group/super_group.go | 2 +- internal/cms_api/group/group.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index 9291fc8e5..30fdcbf0c 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -82,7 +82,7 @@ func GetSuperGroupsInfo(c *gin.Context) { return } - resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: transferGroupInfo(rpcResp.GroupInfoList)}} + resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupInfoList}} resp.Data = jsonData.JsonDataList(resp.GroupInfoList) log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) c.JSON(http.StatusOK, resp) diff --git a/internal/cms_api/group/group.go b/internal/cms_api/group/group.go index 8eb53a8bf..54b6f64fe 100644 --- a/internal/cms_api/group/group.go +++ b/internal/cms_api/group/group.go @@ -553,13 +553,13 @@ func AlterGroupInfo(c *gin.Context) { return } reqPb.OpUserID = c.MustGet("userID").(string) - reqPb.GroupInfo = &commonPb.GroupInfo{ + reqPb.GroupInfoForSet = &commonPb.GroupInfoForSet{ GroupID: req.GroupID, GroupName: req.GroupName, Introduction: req.Introduction, Notification: req.Notification, FaceURL: req.ProfilePhoto, - GroupType: int32(req.GroupType), + // GroupType: int32(req.GroupType), } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) if etcdConn == nil { From 6853c644795b5924035df030306b245b2f500299 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 11:05:22 +0800 Subject: [PATCH 691/752] mongo version update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index f9d48b922..16acfc578 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,7 +16,7 @@ services: restart: always mongodb: - image: mongo:4.0 + image: mongo:latest ports: - 37017:27017 container_name: mongo From 0c7f57d55d50d28c2971b4f3443d0fb52055d953 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 29 Jun 2022 11:18:19 +0800 Subject: [PATCH 692/752] swagger docs --- cmd/open_im_api/docs/docs.go | 3710 ++++++++++++++++- cmd/open_im_api/docs/swagger.json | 3710 ++++++++++++++++- cmd/open_im_api/docs/swagger.yaml | 2473 ++++++++++- internal/api/auth/auth.go | 48 + internal/api/chat/del_msg.go | 35 + internal/api/friend/friend.go | 158 +- internal/api/group/group.go | 277 +- .../api/third/minio_storage_credential.go | 34 +- .../third/tencent_cloud_storage_credential.go | 2 +- internal/api/user/user.go | 2 +- pkg/base_info/group_api_struct.go | 2 +- pkg/base_info/msg.go | 7 +- pkg/base_info/user_api_struct.go | 4 +- 13 files changed, 10383 insertions(+), 79 deletions(-) diff --git a/cmd/open_im_api/docs/docs.go b/cmd/open_im_api/docs/docs.go index 5919ca314..04efc9ea5 100644 --- a/cmd/open_im_api/docs/docs.go +++ b/cmd/open_im_api/docs/docs.go @@ -16,6 +16,2115 @@ const docTemplate = `{ "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { + "/auth/force_logout": { + "post": { + "description": "对应的平台强制登出", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "强制登出", + "operationId": "ForceLogout", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "platform为平台ID, fromUserID为要执行强制登出的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutResp" + } + } + } + } + }, + "/auth/parse_token": { + "post": { + "description": "解析用户token", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "解析token", + "operationId": "ParseToken", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ParseTokenReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.ParseTokenResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ParseTokenResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ParseTokenResp" + } + } + } + } + }, + "/auth/user_register": { + "post": { + "description": "用户登录", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "用户登录", + "operationId": "UserRegister", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID \u003cbr\u003e ex为拓展字段", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UserRegisterReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UserRegisterResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UserRegisterResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UserRegisterResp" + } + } + } + } + }, + "/auth/user_token": { + "post": { + "description": "获取用户的token", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "用户登录", + "operationId": "UserToken", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UserTokenReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UserTokenResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UserTokenResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UserTokenResp" + } + } + } + } + }, + "/friend/add_black": { + "post": { + "description": "添加黑名单", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "添加黑名单", + "operationId": "AddBlack", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为设置的用户, toUserID为被设置的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistResp" + } + } + } + } + }, + "/friend/add_friend": { + "post": { + "description": "添加好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "添加好友", + "operationId": "AddFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AddFriendReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResp" + } + } + } + } + }, + "/friend/add_friend_response": { + "post": { + "description": "同意/拒绝好友请求", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "同意/拒绝好友请求", + "operationId": "AddFriendResponse", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, 1为同意, 2为拒绝", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseResp" + } + } + } + } + }, + "/friend/delete_friend": { + "post": { + "description": "删除好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "删除好友", + "operationId": "DeleteFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为操作用户, toUserID为被删除用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendResp" + } + } + } + } + }, + "/friend/get_black_list": { + "post": { + "description": "获取黑名单列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取黑名单列表", + "operationId": "GetBlacklist", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID要获取黑名单的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetBlackListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetBlackListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetBlackListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetBlackListResp" + } + } + } + } + }, + "/friend/get_friend_apply_list": { + "post": { + "description": "删除好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取好友申请列表", + "operationId": "GetFriendApplyList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取申请列表的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + } + } + } + } + }, + "/friend/get_friend_list": { + "post": { + "description": "获取用户的好友列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取用户的好友列表", + "operationId": "GetFriendList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取好友列表的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetFriendListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetFriendListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetFriendListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetFriendListResp" + } + } + } + } + }, + "/friend/get_self_friend_apply_list": { + "post": { + "description": "获取自己的好友申请列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取自己的好友申请列表", + "operationId": "GetSelfFriendApplyList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为自己的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + } + } + } + } + }, + "/friend/import_friend": { + "post": { + "description": "批量加好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "批量加好友", + "operationId": "ImportFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID批量加好友的用户ID, friendUserIDList为", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ImportFriendReq" + } + } + ], + "responses": { + "0": { + "description": "data列表中对象的result-1为添加该用户失败, 0为成功", + "schema": { + "$ref": "#/definitions/base_info.ImportFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ImportFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ImportFriendResp" + } + } + } + } + }, + "/friend/is_friend": { + "post": { + "description": "检查用户之间是否为好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "检查用户之间是否为好友", + "operationId": "IsFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为请求用户, toUserID为要检查的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.IsFriendReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.IsFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.IsFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.IsFriendResp" + } + } + } + } + }, + "/friend/remove_black": { + "post": { + "description": "把用户移除黑名单", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "把用户移除黑名单", + "operationId": "RemoveBlack", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID要获取黑名单的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListResp" + } + } + } + } + }, + "/friend/set_friend_remark": { + "post": { + "description": "设置好友备注", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "设置好友备注", + "operationId": "SetFriendRemark", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkResp" + } + } + } + } + }, + "/group/cancel_mute_group": { + "post": { + "description": "取消禁言群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "取消禁言群组", + "operationId": "CancelMuteGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupResp" + } + } + } + } + }, + "/group/cancel_mute_group_member": { + "post": { + "description": "取消禁言群成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "取消禁言群成员", + "operationId": "CancelMuteGroupMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID \u003cbr\u003e userID为要取消禁言的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + } + } + } + } + }, + "/group/create_group": { + "post": { + "description": "创建群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "创建群组", + "operationId": "CreateGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为群主ID \u003cbr\u003e ex为群扩展字段 \u003cbr\u003e roleLevel为群员角色,1为普通用户 2为群主 3为管理员", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.CreateGroupResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.GroupInfo" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateGroupResp" + } + } + } + } + }, + "/group/dismiss_group": { + "post": { + "description": "解散群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "解散群组", + "operationId": "DismissGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要解散的群组ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DismissGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + } + } + } + }, + "/group/get_group_all_member_list": { + "post": { + "description": "获取全部群成员列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取全部群成员列表", + "operationId": "GetGroupAllMemberList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "GroupID为要获取群成员的群ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupAllMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupMemberFullInfo" + } + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + } + } + } + } + }, + "/group/get_group_members_info": { + "post": { + "description": "获取群成员信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取群成员信息", + "operationId": "GetGroupMembersInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "memberList为要获取群成员的群ID列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupMembersInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupMemberFullInfo" + } + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + } + } + } + } + }, + "/group/get_groups_info": { + "post": { + "description": "通过群ID列表获取群信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "通过群ID列表获取群信息", + "operationId": "GetGroupsInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupIDList为群ID列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoResp" + } + } + } + } + }, + "/group/get_joined_group_list": { + "post": { + "description": "获取用户加入群列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取用户加入群列表", + "operationId": "GetJoinedGroupList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetJoinedGroupListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupInfo" + } + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + } + } + } + } + }, + "/group/get_recv_group_applicationList": { + "post": { + "description": "获取用户收到的加群信息列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取用户收到的加群信息列表", + "operationId": "GetRecvGroupApplicationList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + } + } + } + }, + "/group/get_user_req_group_applicationList": { + "post": { + "description": "获取用户加群申请列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取用户加群申请列表", + "operationId": "GetUserReqGroupApplicationList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "userID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserReqGroupApplicationListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + } + } + } + }, + "/group/group_application_response": { + "post": { + "description": "处理加群消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "处理加群消息", + "operationId": "ApplicationGroupResponse", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要处理的群ID \u003cbr\u003e fromUserID为要处理的用户ID \u003cbr\u003e handleMsg为处理结果信息 \u003cbr\u003e handleResult为处理结果 1为同意加群 2为拒绝加群", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + } + } + } + } + }, + "/group/invite_user_to_group": { + "post": { + "description": "将用户拉入群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "将用户拉入群组", + "operationId": "InviteUserToGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要拉进的群组ID \u003cbr\u003e invitedUserIDList为要获取群成员的群ID列表 \u003cbr\u003e reason为原因", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupReq" + } + } + ], + "responses": { + "0": { + "description": "result为结果码, -1为失败, 0为成功", + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupResp" + } + } + } + } + }, + "/group/join_group": { + "post": { + "description": "加入群聊", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "加入群聊", + "operationId": "JoinGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "reqMessage为申请进群信息", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.JoinGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.JoinGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.JoinGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.JoinGroupResp" + } + } + } + } + }, + "/group/kick_group": { + "post": { + "description": "把用户踢出群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "把用户踢出群组", + "operationId": "KickGroupMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "GroupID为要操作的群ID \u003cbr\u003e kickedUserIDList为要踢出的群用户ID \u003cbr\u003e reason为原因", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberReq" + } + } + ], + "responses": { + "0": { + "description": "result为结果码, -1为失败, 0为成功", + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberResp" + } + } + } + } + }, + "/group/mute_group": { + "post": { + "description": "禁言群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "禁言群组", + "operationId": "MuteGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.MuteGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.MuteGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.MuteGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.MuteGroupResp" + } + } + } + } + }, + "/group/mute_group_member": { + "post": { + "description": "禁言群成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "禁言群成员", + "operationId": "MuteGroupMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID \u003cbr\u003e userID为要禁言的用户ID \u003cbr\u003e mutedSeconds为禁言秒数", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.MuteGroupMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + } + } + } + }, + "/group/quit_group": { + "post": { + "description": "退出群聊", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "退出群聊", + "operationId": "QuitGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要退出的群ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.QuitGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.QuitGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.QuitGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.QuitGroupResp" + } + } + } + } + }, + "/group/set_group_info": { + "post": { + "description": "设置群信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "设置群信息", + "operationId": "SetGroupInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "notification为群介绍 \u003cbr\u003e introduction为群公告 \u003cbr\u003e needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoResp" + } + } + } + } + }, + "/group/set_group_member_info": { + "post": { + "description": "修改群成员信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "修改群成员信息", + "operationId": "SetGroupMemberInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "除了operationID, userID, groupID其他参数可选", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + } + } + } + } + }, + "/group/transfer_group": { + "post": { + "description": "转让群主", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "转让群主", + "operationId": "TransferGroupOwner", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "GroupID为要操作的群ID \u003cbr\u003e oldOwnerUserID为老群主ID \u003cbr\u003e newOwnerUserID为新群主ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + } + } + } + } + }, + "/msg/clear_msg": { + "post": { + "description": "清空用户消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "清空用户消息", + "operationId": "ClearMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "userID为要清空的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgResp" + } + } + } + } + }, + "/msg/del_msg": { + "post": { + "description": "根据seq列表删除消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "根据seq列表删除消息", + "operationId": "DelMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "userID为要删除的用户ID \u003cbr\u003e seqList为seq列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DelMsgReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DelMsgResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DelMsgResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DelMsgResp" + } + } + } + } + }, "/office/comment_one_work_moment": { "post": { "description": "评论一条工作圈", @@ -826,6 +2935,72 @@ const docTemplate = `{ } } }, + "/third/minio_upload": { + "post": { + "description": "minio上传文件(web api), 请注意本api请求为form并非json", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "第三方服务相关" + ], + "summary": "minio上传文件(web api)", + "operationId": "MinioUploadFile", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "type": "file", + "description": "要上传的文件文件", + "name": "file", + "in": "formData", + "required": true + }, + { + "type": "integer", + "description": "文件类型", + "name": "fileType", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "操作唯一ID", + "name": "operationID", + "in": "formData", + "required": true + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.MinioUploadFileResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.MinioUploadFileResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.MinioUploadFileResp" + } + } + } + } + }, "/user/account_check": { "post": { "description": "传入UserIDList检查列表账户注册状态,并且返回结果", @@ -970,7 +3145,19 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserInfo" + } + } + } + ] } }, "400": { @@ -1242,6 +3429,235 @@ const docTemplate = `{ } } }, + "base_info.AddBlacklistReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.AddBlacklistResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.AddFriendReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "reqMsg": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.AddFriendResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.AddFriendResponseReq": { + "type": "object", + "required": [ + "flag", + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "flag": { + "type": "integer", + "enum": [ + -1, + 0, + 1 + ] + }, + "fromUserID": { + "type": "string" + }, + "handleMsg": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.AddFriendResponseResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.ApplicationGroupResponseReq": { + "type": "object", + "required": [ + "fromUserID", + "groupID", + "handleResult", + "operationID" + ], + "properties": { + "fromUserID": { + "description": "application from FromUserID", + "type": "string" + }, + "groupID": { + "type": "string" + }, + "handleResult": { + "type": "integer", + "enum": [ + -1, + 1 + ] + }, + "handledMsg": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.ApplicationGroupResponseResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupMemberReq": { + "type": "object", + "required": [ + "groupID", + "operationID", + "userID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupMemberResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CleanUpMsgReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CleanUpMsgResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.Comment": { "type": "object", "properties": { @@ -1273,7 +3689,6 @@ const docTemplate = `{ "required": [ "content", "operationID", - "replyUserID", "workMomentID" ], "properties": { @@ -1305,6 +3720,58 @@ const docTemplate = `{ } } }, + "base_info.CreateGroupReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "groupType": { + "type": "integer" + }, + "introduction": { + "type": "string" + }, + "memberList": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.GroupAddMemberInfo" + } + }, + "notification": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.CreateGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.CreateOneWorkMomentReq": { "type": "object", "properties": { @@ -1365,6 +3832,39 @@ const docTemplate = `{ } } }, + "base_info.DelMsgReq": { + "type": "object", + "required": [ + "operationID", + "seqList", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "seqList": { + "type": "array", + "items": { + "type": "integer" + } + }, + "userID": { + "type": "string" + } + } + }, + "base_info.DelMsgResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteCommentReq": { "type": "object", "required": [ @@ -1398,6 +3898,36 @@ const docTemplate = `{ } } }, + "base_info.DeleteFriendReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.DeleteFriendResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteOneWorkMomentReq": { "type": "object", "required": [ @@ -1453,6 +3983,66 @@ const docTemplate = `{ } } }, + "base_info.DismissGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.DismissGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.ForceLogoutReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "platform" + ], + "properties": { + "fromUserID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "operationID": { + "type": "string" + }, + "platform": { + "type": "integer", + "maximum": 8, + "minimum": 1 + } + } + }, + "base_info.ForceLogoutResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetAllUsersUidReq": { "type": "object", "required": [ @@ -1481,6 +4071,314 @@ const docTemplate = `{ } } }, + "base_info.GetBlackListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetBlackListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetFriendApplyListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetFriendApplyListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetFriendListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetFriendListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupAllMemberReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupAllMemberResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupApplicationListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "description": "作为管理员或群主收到的 进群申请", + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupApplicationListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupInfoReq": { + "type": "object", + "required": [ + "groupIDList", + "operationID" + ], + "properties": { + "groupIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupMembersInfoReq": { + "type": "object", + "required": [ + "groupID", + "memberList", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "memberList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupMembersInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetJoinedGroupListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetJoinedGroupListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetSelfApplyListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetSelfApplyListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetSelfUserInfoReq": { "type": "object", "required": [ @@ -1499,10 +4397,6 @@ const docTemplate = `{ "base_info.GetSelfUserInfoResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, @@ -1605,6 +4499,21 @@ const docTemplate = `{ } } }, + "base_info.GetUserReqGroupApplicationListReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, "base_info.GetUserTagByIDReq": { "type": "object", "required": [ @@ -1743,13 +4652,6 @@ const docTemplate = `{ "base_info.GetUsersInfoResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -1828,6 +4730,206 @@ const docTemplate = `{ } } }, + "base_info.GroupAddMemberInfo": { + "type": "object", + "required": [ + "roleLevel", + "userID" + ], + "properties": { + "roleLevel": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.ImportFriendReq": { + "type": "object", + "required": [ + "friendUserIDList", + "fromUserID", + "operationID" + ], + "properties": { + "friendUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.ImportFriendResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.UserIDResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.InviteUserToGroupReq": { + "type": "object", + "required": [ + "groupID", + "invitedUserIDList", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "invitedUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "reason": { + "type": "string" + } + } + }, + "base_info.InviteUserToGroupResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.UserIDResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.IsFriendReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.IsFriendResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.Response" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.JoinGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "reqMessage": { + "type": "string" + } + } + }, + "base_info.JoinGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.KickGroupMemberReq": { + "type": "object", + "required": [ + "groupID", + "kickedUserIDList", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "kickedUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "reason": { + "type": "string" + } + } + }, + "base_info.KickGroupMemberResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.UserIDResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.LikeOneWorkMomentReq": { "type": "object", "required": [ @@ -1857,6 +4959,162 @@ const docTemplate = `{ } } }, + "base_info.MinioUploadFileResp": { + "type": "object", + "properties": { + "URL": { + "type": "string" + }, + "newName": { + "type": "string" + }, + "snapshotName": { + "type": "string" + }, + "snapshotURL": { + "type": "string" + } + } + }, + "base_info.MuteGroupMemberReq": { + "type": "object", + "required": [ + "groupID", + "mutedSeconds", + "operationID", + "userID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "mutedSeconds": { + "type": "integer" + }, + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.MuteGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.MuteGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.ParseTokenReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "operationID": { + "type": "string" + } + } + }, + "base_info.ParseTokenResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.QuitGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.QuitGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.RemoveBlackListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.RemoveBlackListResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.Response": { + "type": "object", + "properties": { + "isFriend": { + "type": "boolean" + } + } + }, "base_info.SendMsg2TagReq": { "type": "object", "required": [ @@ -1905,6 +5163,40 @@ const docTemplate = `{ } } }, + "base_info.SetFriendRemarkReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "remark", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "remark": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.SetFriendRemarkResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.SetGlobalRecvMessageOptReq": { "type": "object", "required": [ @@ -1935,6 +5227,94 @@ const docTemplate = `{ } } }, + "base_info.SetGroupInfoReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "introduction": { + "type": "string" + }, + "needVerification": { + "type": "integer" + }, + "notification": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.SetGroupInfoResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SetGroupMemberInfoReq": { + "type": "object", + "required": [ + "groupID", + "operationID", + "userID" + ], + "properties": { + "ex": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "roleLevel": { + "type": "integer", + "maximum": 3, + "minimum": 1 + }, + "userGroupFaceUrl": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.SetGroupMemberInfoResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.SetTagReq": { "type": "object", "required": [ @@ -1976,6 +5356,40 @@ const docTemplate = `{ } } }, + "base_info.TransferGroupOwnerReq": { + "type": "object", + "required": [ + "groupID", + "newOwnerUserID", + "oldOwnerUserID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "newOwnerUserID": { + "type": "string" + }, + "oldOwnerUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.TransferGroupOwnerResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateSelfUserInfoReq": { "type": "object", "required": [ @@ -2036,6 +5450,147 @@ const docTemplate = `{ } } }, + "base_info.UserIDResult": { + "type": "object", + "properties": { + "result": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UserRegisterReq": { + "type": "object", + "required": [ + "operationID", + "platform", + "secret", + "userID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "email": { + "type": "string", + "maxLength": 64 + }, + "ex": { + "type": "string", + "maxLength": 1024 + }, + "faceURL": { + "type": "string", + "maxLength": 1024 + }, + "gender": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "nickname": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "operationID": { + "type": "string" + }, + "phoneNumber": { + "type": "string", + "maxLength": 32 + }, + "platform": { + "type": "integer", + "maximum": 7, + "minimum": 1 + }, + "secret": { + "type": "string", + "maxLength": 32 + }, + "userID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + } + } + }, + "base_info.UserRegisterResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.UserTokenInfo" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.UserTokenInfo": { + "type": "object", + "properties": { + "expiredTime": { + "type": "integer" + }, + "token": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UserTokenReq": { + "type": "object", + "required": [ + "operationID", + "platform", + "secret", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "platform": { + "type": "integer", + "maximum": 8, + "minimum": 1 + }, + "secret": { + "type": "string", + "maxLength": 32 + }, + "userID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + } + } + }, + "base_info.UserTokenResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.UserTokenInfo" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.WorkMoment": { "type": "object", "properties": { @@ -2277,6 +5832,126 @@ const docTemplate = `{ } } }, + "server_api_params.GroupInfo": { + "type": "object", + "properties": { + "createTime": { + "type": "integer" + }, + "creatorUserID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "groupType": { + "type": "integer" + }, + "introduction": { + "type": "string" + }, + "memberCount": { + "type": "integer" + }, + "needVerification": { + "$ref": "#/definitions/wrapperspb.Int32Value" + }, + "notification": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + }, + "status": { + "type": "integer" + } + } + }, + "server_api_params.GroupMemberFullInfo": { + "type": "object", + "properties": { + "appMangerLevel": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "joinSource": { + "type": "integer" + }, + "joinTime": { + "type": "integer" + }, + "muteEndTime": { + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "operatorUserID": { + "type": "string" + }, + "roleLevel": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.UserInfo": { + "type": "object", + "properties": { + "appMangerLevel": { + "type": "integer" + }, + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "globalRecvMsgOpt": { + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "phoneNumber": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, "user.AccountCheckResp_SingleUserStatus": { "type": "object", "properties": { @@ -2287,6 +5962,15 @@ const docTemplate = `{ "type": "string" } } + }, + "wrapperspb.Int32Value": { + "type": "object", + "properties": { + "value": { + "description": "The int32 value.", + "type": "integer" + } + } } } }` diff --git a/cmd/open_im_api/docs/swagger.json b/cmd/open_im_api/docs/swagger.json index 4a6c587da..ff3c03dc5 100644 --- a/cmd/open_im_api/docs/swagger.json +++ b/cmd/open_im_api/docs/swagger.json @@ -4,6 +4,2115 @@ "contact": {} }, "paths": { + "/auth/force_logout": { + "post": { + "description": "对应的平台强制登出", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "强制登出", + "operationId": "ForceLogout", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "platform为平台ID, fromUserID为要执行强制登出的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ForceLogoutResp" + } + } + } + } + }, + "/auth/parse_token": { + "post": { + "description": "解析用户token", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "解析token", + "operationId": "ParseToken", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ParseTokenReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.ParseTokenResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ParseTokenResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ParseTokenResp" + } + } + } + } + }, + "/auth/user_register": { + "post": { + "description": "用户登录", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "用户登录", + "operationId": "UserRegister", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID \u003cbr\u003e ex为拓展字段", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UserRegisterReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UserRegisterResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UserRegisterResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UserRegisterResp" + } + } + } + } + }, + "/auth/user_token": { + "post": { + "description": "获取用户的token", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "鉴权认证" + ], + "summary": "用户登录", + "operationId": "UserToken", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UserTokenReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UserTokenResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UserTokenResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UserTokenResp" + } + } + } + } + }, + "/friend/add_black": { + "post": { + "description": "添加黑名单", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "添加黑名单", + "operationId": "AddBlack", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为设置的用户, toUserID为被设置的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AddBlacklistResp" + } + } + } + } + }, + "/friend/add_friend": { + "post": { + "description": "添加好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "添加好友", + "operationId": "AddFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AddFriendReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResp" + } + } + } + } + }, + "/friend/add_friend_response": { + "post": { + "description": "同意/拒绝好友请求", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "同意/拒绝好友请求", + "operationId": "AddFriendResponse", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, 1为同意, 2为拒绝", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.AddFriendResponseResp" + } + } + } + } + }, + "/friend/delete_friend": { + "post": { + "description": "删除好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "删除好友", + "operationId": "DeleteFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为操作用户, toUserID为被删除用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteFriendResp" + } + } + } + } + }, + "/friend/get_black_list": { + "post": { + "description": "获取黑名单列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取黑名单列表", + "operationId": "GetBlacklist", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID要获取黑名单的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetBlackListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetBlackListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetBlackListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetBlackListResp" + } + } + } + } + }, + "/friend/get_friend_apply_list": { + "post": { + "description": "删除好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取好友申请列表", + "operationId": "GetFriendApplyList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取申请列表的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + } + } + } + } + }, + "/friend/get_friend_list": { + "post": { + "description": "获取用户的好友列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取用户的好友列表", + "operationId": "GetFriendList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取好友列表的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetFriendListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetFriendListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetFriendListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetFriendListResp" + } + } + } + } + }, + "/friend/get_self_friend_apply_list": { + "post": { + "description": "获取自己的好友申请列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "获取自己的好友申请列表", + "operationId": "GetSelfFriendApplyList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为自己的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + } + } + } + } + }, + "/friend/import_friend": { + "post": { + "description": "批量加好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "批量加好友", + "operationId": "ImportFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID批量加好友的用户ID, friendUserIDList为", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ImportFriendReq" + } + } + ], + "responses": { + "0": { + "description": "data列表中对象的result-1为添加该用户失败, 0为成功", + "schema": { + "$ref": "#/definitions/base_info.ImportFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ImportFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ImportFriendResp" + } + } + } + } + }, + "/friend/is_friend": { + "post": { + "description": "检查用户之间是否为好友", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "检查用户之间是否为好友", + "operationId": "IsFriend", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为请求用户, toUserID为要检查的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.IsFriendReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.IsFriendResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.IsFriendResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.IsFriendResp" + } + } + } + } + }, + "/friend/remove_black": { + "post": { + "description": "把用户移除黑名单", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "把用户移除黑名单", + "operationId": "RemoveBlack", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID要获取黑名单的用户", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.RemoveBlackListResp" + } + } + } + } + }, + "/friend/set_friend_remark": { + "post": { + "description": "设置好友备注", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "好友相关" + ], + "summary": "设置好友备注", + "operationId": "SetFriendRemark", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetFriendRemarkResp" + } + } + } + } + }, + "/group/cancel_mute_group": { + "post": { + "description": "取消禁言群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "取消禁言群组", + "operationId": "CancelMuteGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupResp" + } + } + } + } + }, + "/group/cancel_mute_group_member": { + "post": { + "description": "取消禁言群成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "取消禁言群成员", + "operationId": "CancelMuteGroupMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID \u003cbr\u003e userID为要取消禁言的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + } + } + } + } + }, + "/group/create_group": { + "post": { + "description": "创建群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "创建群组", + "operationId": "CreateGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为群主ID \u003cbr\u003e ex为群扩展字段 \u003cbr\u003e roleLevel为群员角色,1为普通用户 2为群主 3为管理员", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.CreateGroupResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.GroupInfo" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateGroupResp" + } + } + } + } + }, + "/group/dismiss_group": { + "post": { + "description": "解散群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "解散群组", + "operationId": "DismissGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要解散的群组ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DismissGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + } + } + } + }, + "/group/get_group_all_member_list": { + "post": { + "description": "获取全部群成员列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取全部群成员列表", + "operationId": "GetGroupAllMemberList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "GroupID为要获取群成员的群ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupAllMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupMemberFullInfo" + } + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + } + } + } + } + }, + "/group/get_group_members_info": { + "post": { + "description": "获取群成员信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取群成员信息", + "operationId": "GetGroupMembersInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "memberList为要获取群成员的群ID列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupMembersInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupMemberFullInfo" + } + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + } + } + } + } + }, + "/group/get_groups_info": { + "post": { + "description": "通过群ID列表获取群信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "通过群ID列表获取群信息", + "operationId": "GetGroupsInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupIDList为群ID列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupInfoResp" + } + } + } + } + }, + "/group/get_joined_group_list": { + "post": { + "description": "获取用户加入群列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取用户加入群列表", + "operationId": "GetJoinedGroupList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetJoinedGroupListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupInfo" + } + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + } + } + } + } + }, + "/group/get_recv_group_applicationList": { + "post": { + "description": "获取用户收到的加群信息列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取用户收到的加群信息列表", + "operationId": "GetRecvGroupApplicationList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "fromUserID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + } + } + } + }, + "/group/get_user_req_group_applicationList": { + "post": { + "description": "获取用户加群申请列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "获取用户加群申请列表", + "operationId": "GetUserReqGroupApplicationList", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "userID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserReqGroupApplicationListReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + } + } + } + } + }, + "/group/group_application_response": { + "post": { + "description": "处理加群消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "处理加群消息", + "operationId": "ApplicationGroupResponse", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要处理的群ID \u003cbr\u003e fromUserID为要处理的用户ID \u003cbr\u003e handleMsg为处理结果信息 \u003cbr\u003e handleResult为处理结果 1为同意加群 2为拒绝加群", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + } + } + } + } + }, + "/group/invite_user_to_group": { + "post": { + "description": "将用户拉入群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "将用户拉入群组", + "operationId": "InviteUserToGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要拉进的群组ID \u003cbr\u003e invitedUserIDList为要获取群成员的群ID列表 \u003cbr\u003e reason为原因", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupReq" + } + } + ], + "responses": { + "0": { + "description": "result为结果码, -1为失败, 0为成功", + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.InviteUserToGroupResp" + } + } + } + } + }, + "/group/join_group": { + "post": { + "description": "加入群聊", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "加入群聊", + "operationId": "JoinGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "reqMessage为申请进群信息", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.JoinGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.JoinGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.JoinGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.JoinGroupResp" + } + } + } + } + }, + "/group/kick_group": { + "post": { + "description": "把用户踢出群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "把用户踢出群组", + "operationId": "KickGroupMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "GroupID为要操作的群ID \u003cbr\u003e kickedUserIDList为要踢出的群用户ID \u003cbr\u003e reason为原因", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberReq" + } + } + ], + "responses": { + "0": { + "description": "result为结果码, -1为失败, 0为成功", + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.KickGroupMemberResp" + } + } + } + } + }, + "/group/mute_group": { + "post": { + "description": "禁言群组", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "禁言群组", + "operationId": "MuteGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.MuteGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.MuteGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.MuteGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.MuteGroupResp" + } + } + } + } + }, + "/group/mute_group_member": { + "post": { + "description": "禁言群成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "禁言群成员", + "operationId": "MuteGroupMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为群组ID \u003cbr\u003e userID为要禁言的用户ID \u003cbr\u003e mutedSeconds为禁言秒数", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.MuteGroupMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DismissGroupResp" + } + } + } + } + }, + "/group/quit_group": { + "post": { + "description": "退出群聊", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "退出群聊", + "operationId": "QuitGroup", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "groupID为要退出的群ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.QuitGroupReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.QuitGroupResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.QuitGroupResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.QuitGroupResp" + } + } + } + } + }, + "/group/set_group_info": { + "post": { + "description": "设置群信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "设置群信息", + "operationId": "SetGroupInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "notification为群介绍 \u003cbr\u003e introduction为群公告 \u003cbr\u003e needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetGroupInfoResp" + } + } + } + } + }, + "/group/set_group_member_info": { + "post": { + "description": "修改群成员信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "修改群成员信息", + "operationId": "SetGroupMemberInfo", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "除了operationID, userID, groupID其他参数可选", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + } + } + } + } + }, + "/group/transfer_group": { + "post": { + "description": "转让群主", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "群组相关" + ], + "summary": "转让群主", + "operationId": "TransferGroupOwner", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "GroupID为要操作的群ID \u003cbr\u003e oldOwnerUserID为老群主ID \u003cbr\u003e newOwnerUserID为新群主ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + } + } + } + } + }, + "/msg/clear_msg": { + "post": { + "description": "清空用户消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "清空用户消息", + "operationId": "ClearMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "userID为要清空的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CleanUpMsgResp" + } + } + } + } + }, + "/msg/del_msg": { + "post": { + "description": "根据seq列表删除消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "根据seq列表删除消息", + "operationId": "DelMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "userID为要删除的用户ID \u003cbr\u003e seqList为seq列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DelMsgReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DelMsgResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DelMsgResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DelMsgResp" + } + } + } + } + }, "/office/comment_one_work_moment": { "post": { "description": "评论一条工作圈", @@ -814,6 +2923,72 @@ } } }, + "/third/minio_upload": { + "post": { + "description": "minio上传文件(web api), 请注意本api请求为form并非json", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "第三方服务相关" + ], + "summary": "minio上传文件(web api)", + "operationId": "MinioUploadFile", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "type": "file", + "description": "要上传的文件文件", + "name": "file", + "in": "formData", + "required": true + }, + { + "type": "integer", + "description": "文件类型", + "name": "fileType", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "操作唯一ID", + "name": "operationID", + "in": "formData", + "required": true + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.MinioUploadFileResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.MinioUploadFileResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.MinioUploadFileResp" + } + } + } + } + }, "/user/account_check": { "post": { "description": "传入UserIDList检查列表账户注册状态,并且返回结果", @@ -958,7 +3133,19 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserInfo" + } + } + } + ] } }, "400": { @@ -1230,6 +3417,235 @@ } } }, + "base_info.AddBlacklistReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.AddBlacklistResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.AddFriendReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "reqMsg": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.AddFriendResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.AddFriendResponseReq": { + "type": "object", + "required": [ + "flag", + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "flag": { + "type": "integer", + "enum": [ + -1, + 0, + 1 + ] + }, + "fromUserID": { + "type": "string" + }, + "handleMsg": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.AddFriendResponseResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.ApplicationGroupResponseReq": { + "type": "object", + "required": [ + "fromUserID", + "groupID", + "handleResult", + "operationID" + ], + "properties": { + "fromUserID": { + "description": "application from FromUserID", + "type": "string" + }, + "groupID": { + "type": "string" + }, + "handleResult": { + "type": "integer", + "enum": [ + -1, + 1 + ] + }, + "handledMsg": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.ApplicationGroupResponseResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupMemberReq": { + "type": "object", + "required": [ + "groupID", + "operationID", + "userID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupMemberResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.CancelMuteGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CleanUpMsgReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CleanUpMsgResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.Comment": { "type": "object", "properties": { @@ -1261,7 +3677,6 @@ "required": [ "content", "operationID", - "replyUserID", "workMomentID" ], "properties": { @@ -1293,6 +3708,58 @@ } } }, + "base_info.CreateGroupReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "groupType": { + "type": "integer" + }, + "introduction": { + "type": "string" + }, + "memberList": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.GroupAddMemberInfo" + } + }, + "notification": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.CreateGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.CreateOneWorkMomentReq": { "type": "object", "properties": { @@ -1353,6 +3820,39 @@ } } }, + "base_info.DelMsgReq": { + "type": "object", + "required": [ + "operationID", + "seqList", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "seqList": { + "type": "array", + "items": { + "type": "integer" + } + }, + "userID": { + "type": "string" + } + } + }, + "base_info.DelMsgResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteCommentReq": { "type": "object", "required": [ @@ -1386,6 +3886,36 @@ } } }, + "base_info.DeleteFriendReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.DeleteFriendResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteOneWorkMomentReq": { "type": "object", "required": [ @@ -1441,6 +3971,66 @@ } } }, + "base_info.DismissGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.DismissGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.ForceLogoutReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "platform" + ], + "properties": { + "fromUserID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "operationID": { + "type": "string" + }, + "platform": { + "type": "integer", + "maximum": 8, + "minimum": 1 + } + } + }, + "base_info.ForceLogoutResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetAllUsersUidReq": { "type": "object", "required": [ @@ -1469,6 +4059,314 @@ } } }, + "base_info.GetBlackListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetBlackListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetFriendApplyListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetFriendApplyListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetFriendListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetFriendListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupAllMemberReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupAllMemberResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupApplicationListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "description": "作为管理员或群主收到的 进群申请", + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupApplicationListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupInfoReq": { + "type": "object", + "required": [ + "groupIDList", + "operationID" + ], + "properties": { + "groupIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetGroupMembersInfoReq": { + "type": "object", + "required": [ + "groupID", + "memberList", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "memberList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetGroupMembersInfoResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetJoinedGroupListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetJoinedGroupListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetSelfApplyListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetSelfApplyListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetSelfUserInfoReq": { "type": "object", "required": [ @@ -1487,10 +4385,6 @@ "base_info.GetSelfUserInfoResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, @@ -1593,6 +4487,21 @@ } } }, + "base_info.GetUserReqGroupApplicationListReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, "base_info.GetUserTagByIDReq": { "type": "object", "required": [ @@ -1731,13 +4640,6 @@ "base_info.GetUsersInfoResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -1816,6 +4718,206 @@ } } }, + "base_info.GroupAddMemberInfo": { + "type": "object", + "required": [ + "roleLevel", + "userID" + ], + "properties": { + "roleLevel": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.ImportFriendReq": { + "type": "object", + "required": [ + "friendUserIDList", + "fromUserID", + "operationID" + ], + "properties": { + "friendUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.ImportFriendResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.UserIDResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.InviteUserToGroupReq": { + "type": "object", + "required": [ + "groupID", + "invitedUserIDList", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "invitedUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "reason": { + "type": "string" + } + } + }, + "base_info.InviteUserToGroupResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.UserIDResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.IsFriendReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.IsFriendResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.Response" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.JoinGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "reqMessage": { + "type": "string" + } + } + }, + "base_info.JoinGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.KickGroupMemberReq": { + "type": "object", + "required": [ + "groupID", + "kickedUserIDList", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "kickedUserIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "reason": { + "type": "string" + } + } + }, + "base_info.KickGroupMemberResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.UserIDResult" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.LikeOneWorkMomentReq": { "type": "object", "required": [ @@ -1845,6 +4947,162 @@ } } }, + "base_info.MinioUploadFileResp": { + "type": "object", + "properties": { + "URL": { + "type": "string" + }, + "newName": { + "type": "string" + }, + "snapshotName": { + "type": "string" + }, + "snapshotURL": { + "type": "string" + } + } + }, + "base_info.MuteGroupMemberReq": { + "type": "object", + "required": [ + "groupID", + "mutedSeconds", + "operationID", + "userID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "mutedSeconds": { + "type": "integer" + }, + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.MuteGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.MuteGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.ParseTokenReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "operationID": { + "type": "string" + } + } + }, + "base_info.ParseTokenResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.QuitGroupReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.QuitGroupResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.RemoveBlackListReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.RemoveBlackListResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.Response": { + "type": "object", + "properties": { + "isFriend": { + "type": "boolean" + } + } + }, "base_info.SendMsg2TagReq": { "type": "object", "required": [ @@ -1893,6 +5151,40 @@ } } }, + "base_info.SetFriendRemarkReq": { + "type": "object", + "required": [ + "fromUserID", + "operationID", + "remark", + "toUserID" + ], + "properties": { + "fromUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "remark": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, + "base_info.SetFriendRemarkResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.SetGlobalRecvMessageOptReq": { "type": "object", "required": [ @@ -1923,6 +5215,94 @@ } } }, + "base_info.SetGroupInfoReq": { + "type": "object", + "required": [ + "groupID", + "operationID" + ], + "properties": { + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "introduction": { + "type": "string" + }, + "needVerification": { + "type": "integer" + }, + "notification": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.SetGroupInfoResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.SetGroupMemberInfoReq": { + "type": "object", + "required": [ + "groupID", + "operationID", + "userID" + ], + "properties": { + "ex": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "roleLevel": { + "type": "integer", + "maximum": 3, + "minimum": 1 + }, + "userGroupFaceUrl": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.SetGroupMemberInfoResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.SetTagReq": { "type": "object", "required": [ @@ -1964,6 +5344,40 @@ } } }, + "base_info.TransferGroupOwnerReq": { + "type": "object", + "required": [ + "groupID", + "newOwnerUserID", + "oldOwnerUserID", + "operationID" + ], + "properties": { + "groupID": { + "type": "string" + }, + "newOwnerUserID": { + "type": "string" + }, + "oldOwnerUserID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.TransferGroupOwnerResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateSelfUserInfoReq": { "type": "object", "required": [ @@ -2024,6 +5438,147 @@ } } }, + "base_info.UserIDResult": { + "type": "object", + "properties": { + "result": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UserRegisterReq": { + "type": "object", + "required": [ + "operationID", + "platform", + "secret", + "userID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "email": { + "type": "string", + "maxLength": 64 + }, + "ex": { + "type": "string", + "maxLength": 1024 + }, + "faceURL": { + "type": "string", + "maxLength": 1024 + }, + "gender": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "nickname": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "operationID": { + "type": "string" + }, + "phoneNumber": { + "type": "string", + "maxLength": 32 + }, + "platform": { + "type": "integer", + "maximum": 7, + "minimum": 1 + }, + "secret": { + "type": "string", + "maxLength": 32 + }, + "userID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + } + } + }, + "base_info.UserRegisterResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.UserTokenInfo" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.UserTokenInfo": { + "type": "object", + "properties": { + "expiredTime": { + "type": "integer" + }, + "token": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UserTokenReq": { + "type": "object", + "required": [ + "operationID", + "platform", + "secret", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "platform": { + "type": "integer", + "maximum": 8, + "minimum": 1 + }, + "secret": { + "type": "string", + "maxLength": 32 + }, + "userID": { + "type": "string", + "maxLength": 64, + "minLength": 1 + } + } + }, + "base_info.UserTokenResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.UserTokenInfo" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.WorkMoment": { "type": "object", "properties": { @@ -2265,6 +5820,126 @@ } } }, + "server_api_params.GroupInfo": { + "type": "object", + "properties": { + "createTime": { + "type": "integer" + }, + "creatorUserID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "groupType": { + "type": "integer" + }, + "introduction": { + "type": "string" + }, + "memberCount": { + "type": "integer" + }, + "needVerification": { + "$ref": "#/definitions/wrapperspb.Int32Value" + }, + "notification": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + }, + "status": { + "type": "integer" + } + } + }, + "server_api_params.GroupMemberFullInfo": { + "type": "object", + "properties": { + "appMangerLevel": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "groupID": { + "type": "string" + }, + "joinSource": { + "type": "integer" + }, + "joinTime": { + "type": "integer" + }, + "muteEndTime": { + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "operatorUserID": { + "type": "string" + }, + "roleLevel": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.UserInfo": { + "type": "object", + "properties": { + "appMangerLevel": { + "type": "integer" + }, + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "globalRecvMsgOpt": { + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "phoneNumber": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, "user.AccountCheckResp_SingleUserStatus": { "type": "object", "properties": { @@ -2275,6 +5950,15 @@ "type": "string" } } + }, + "wrapperspb.Int32Value": { + "type": "object", + "properties": { + "value": { + "description": "The int32 value.", + "type": "integer" + } + } } } } \ No newline at end of file diff --git a/cmd/open_im_api/docs/swagger.yaml b/cmd/open_im_api/docs/swagger.yaml index c8b35f1c6..07440bc83 100644 --- a/cmd/open_im_api/docs/swagger.yaml +++ b/cmd/open_im_api/docs/swagger.yaml @@ -23,6 +23,160 @@ definitions: errMsg: type: string type: object + base_info.AddBlacklistReq: + properties: + fromUserID: + type: string + operationID: + type: string + toUserID: + type: string + required: + - fromUserID + - operationID + - toUserID + type: object + base_info.AddBlacklistResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.AddFriendReq: + properties: + fromUserID: + type: string + operationID: + type: string + reqMsg: + type: string + toUserID: + type: string + required: + - fromUserID + - operationID + - toUserID + type: object + base_info.AddFriendResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.AddFriendResponseReq: + properties: + flag: + enum: + - -1 + - 0 + - 1 + type: integer + fromUserID: + type: string + handleMsg: + type: string + operationID: + type: string + toUserID: + type: string + required: + - flag + - fromUserID + - operationID + - toUserID + type: object + base_info.AddFriendResponseResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.ApplicationGroupResponseReq: + properties: + fromUserID: + description: application from FromUserID + type: string + groupID: + type: string + handleResult: + enum: + - -1 + - 1 + type: integer + handledMsg: + type: string + operationID: + type: string + required: + - fromUserID + - groupID + - handleResult + - operationID + type: object + base_info.ApplicationGroupResponseResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.CancelMuteGroupMemberReq: + properties: + groupID: + type: string + operationID: + type: string + userID: + type: string + required: + - groupID + - operationID + - userID + type: object + base_info.CancelMuteGroupMemberResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.CancelMuteGroupReq: + properties: + groupID: + type: string + operationID: + type: string + required: + - groupID + - operationID + type: object + base_info.CancelMuteGroupResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.CleanUpMsgReq: + properties: + operationID: + type: string + userID: + type: string + required: + - operationID + - userID + type: object + base_info.CleanUpMsgResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.Comment: properties: content: @@ -53,7 +207,6 @@ definitions: required: - content - operationID - - replyUserID - workMomentID type: object base_info.CommentOneWorkMomentResp: @@ -65,6 +218,40 @@ definitions: errMsg: type: string type: object + base_info.CreateGroupReq: + properties: + ex: + type: string + faceURL: + type: string + groupID: + type: string + groupName: + type: string + groupType: + type: integer + introduction: + type: string + memberList: + items: + $ref: '#/definitions/base_info.GroupAddMemberInfo' + type: array + notification: + type: string + operationID: + type: string + ownerUserID: + type: string + required: + - operationID + type: object + base_info.CreateGroupResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.CreateOneWorkMomentReq: properties: operationID: @@ -105,6 +292,28 @@ definitions: errMsg: type: string type: object + base_info.DelMsgReq: + properties: + operationID: + type: string + seqList: + items: + type: integer + type: array + userID: + type: string + required: + - operationID + - seqList + - userID + type: object + base_info.DelMsgResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.DeleteCommentReq: properties: contentID: @@ -127,6 +336,26 @@ definitions: errMsg: type: string type: object + base_info.DeleteFriendReq: + properties: + fromUserID: + type: string + operationID: + type: string + toUserID: + type: string + required: + - fromUserID + - operationID + - toUserID + type: object + base_info.DeleteFriendResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.DeleteOneWorkMomentReq: properties: operationID: @@ -163,6 +392,47 @@ definitions: errMsg: type: string type: object + base_info.DismissGroupReq: + properties: + groupID: + type: string + operationID: + type: string + required: + - groupID + - operationID + type: object + base_info.DismissGroupResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.ForceLogoutReq: + properties: + fromUserID: + maxLength: 64 + minLength: 1 + type: string + operationID: + type: string + platform: + maximum: 8 + minimum: 1 + type: integer + required: + - fromUserID + - operationID + - platform + type: object + base_info.ForceLogoutResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.GetAllUsersUidReq: properties: operationID: @@ -181,6 +451,212 @@ definitions: errMsg: type: string type: object + base_info.GetBlackListReq: + properties: + fromUserID: + type: string + operationID: + type: string + required: + - fromUserID + - operationID + type: object + base_info.GetBlackListResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetFriendApplyListReq: + properties: + fromUserID: + type: string + operationID: + type: string + required: + - fromUserID + - operationID + type: object + base_info.GetFriendApplyListResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetFriendListReq: + properties: + fromUserID: + type: string + operationID: + type: string + required: + - fromUserID + - operationID + type: object + base_info.GetFriendListResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetGroupAllMemberReq: + properties: + groupID: + type: string + operationID: + type: string + required: + - groupID + - operationID + type: object + base_info.GetGroupAllMemberResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetGroupApplicationListReq: + properties: + fromUserID: + description: 作为管理员或群主收到的 进群申请 + type: string + operationID: + type: string + required: + - fromUserID + - operationID + type: object + base_info.GetGroupApplicationListResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetGroupInfoReq: + properties: + groupIDList: + items: + type: string + type: array + operationID: + type: string + required: + - groupIDList + - operationID + type: object + base_info.GetGroupInfoResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetGroupMembersInfoReq: + properties: + groupID: + type: string + memberList: + items: + type: string + type: array + operationID: + type: string + required: + - groupID + - memberList + - operationID + type: object + base_info.GetGroupMembersInfoResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetJoinedGroupListReq: + properties: + fromUserID: + type: string + operationID: + type: string + required: + - fromUserID + - operationID + type: object + base_info.GetJoinedGroupListResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetSelfApplyListReq: + properties: + fromUserID: + type: string + operationID: + type: string + required: + - fromUserID + - operationID + type: object + base_info.GetSelfApplyListResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object base_info.GetSelfUserInfoReq: properties: operationID: @@ -193,9 +669,6 @@ definitions: type: object base_info.GetSelfUserInfoResp: properties: - data: - additionalProperties: true - type: object errCode: type: integer errMsg: @@ -263,6 +736,16 @@ definitions: errMsg: type: string type: object + base_info.GetUserReqGroupApplicationListReq: + properties: + operationID: + type: string + userID: + type: string + required: + - operationID + - userID + type: object base_info.GetUserTagByIDReq: properties: operationID: @@ -353,11 +836,6 @@ definitions: type: object base_info.GetUsersInfoResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -409,6 +887,139 @@ definitions: errMsg: type: string type: object + base_info.GroupAddMemberInfo: + properties: + roleLevel: + type: integer + userID: + type: string + required: + - roleLevel + - userID + type: object + base_info.ImportFriendReq: + properties: + friendUserIDList: + items: + type: string + type: array + fromUserID: + type: string + operationID: + type: string + required: + - friendUserIDList + - fromUserID + - operationID + type: object + base_info.ImportFriendResp: + properties: + data: + items: + $ref: '#/definitions/base_info.UserIDResult' + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.InviteUserToGroupReq: + properties: + groupID: + type: string + invitedUserIDList: + items: + type: string + type: array + operationID: + type: string + reason: + type: string + required: + - groupID + - invitedUserIDList + - operationID + type: object + base_info.InviteUserToGroupResp: + properties: + data: + items: + $ref: '#/definitions/base_info.UserIDResult' + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.IsFriendReq: + properties: + fromUserID: + type: string + operationID: + type: string + toUserID: + type: string + required: + - fromUserID + - operationID + - toUserID + type: object + base_info.IsFriendResp: + properties: + data: + $ref: '#/definitions/base_info.Response' + errCode: + type: integer + errMsg: + type: string + type: object + base_info.JoinGroupReq: + properties: + groupID: + type: string + operationID: + type: string + reqMessage: + type: string + required: + - groupID + - operationID + type: object + base_info.JoinGroupResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.KickGroupMemberReq: + properties: + groupID: + type: string + kickedUserIDList: + items: + type: string + type: array + operationID: + type: string + reason: + type: string + required: + - groupID + - kickedUserIDList + - operationID + type: object + base_info.KickGroupMemberResp: + properties: + data: + items: + $ref: '#/definitions/base_info.UserIDResult' + type: array + errCode: + type: integer + errMsg: + type: string + type: object base_info.LikeOneWorkMomentReq: properties: operationID: @@ -428,6 +1039,109 @@ definitions: errMsg: type: string type: object + base_info.MinioUploadFileResp: + properties: + URL: + type: string + newName: + type: string + snapshotName: + type: string + snapshotURL: + type: string + type: object + base_info.MuteGroupMemberReq: + properties: + groupID: + type: string + mutedSeconds: + type: integer + operationID: + type: string + userID: + type: string + required: + - groupID + - mutedSeconds + - operationID + - userID + type: object + base_info.MuteGroupReq: + properties: + groupID: + type: string + operationID: + type: string + required: + - groupID + - operationID + type: object + base_info.MuteGroupResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.ParseTokenReq: + properties: + operationID: + type: string + required: + - operationID + type: object + base_info.ParseTokenResp: + properties: + data: + additionalProperties: true + type: object + errCode: + type: integer + errMsg: + type: string + type: object + base_info.QuitGroupReq: + properties: + groupID: + type: string + operationID: + type: string + required: + - groupID + - operationID + type: object + base_info.QuitGroupResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.RemoveBlackListReq: + properties: + fromUserID: + type: string + operationID: + type: string + toUserID: + type: string + required: + - fromUserID + - operationID + - toUserID + type: object + base_info.RemoveBlackListResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.Response: + properties: + isFriend: + type: boolean + type: object base_info.SendMsg2TagReq: properties: content: @@ -460,6 +1174,29 @@ definitions: errMsg: type: string type: object + base_info.SetFriendRemarkReq: + properties: + fromUserID: + type: string + operationID: + type: string + remark: + type: string + toUserID: + type: string + required: + - fromUserID + - operationID + - remark + - toUserID + type: object + base_info.SetFriendRemarkResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.SetGlobalRecvMessageOptReq: properties: globalRecvMsgOpt: @@ -480,6 +1217,65 @@ definitions: errMsg: type: string type: object + base_info.SetGroupInfoReq: + properties: + ex: + type: string + faceURL: + type: string + groupID: + type: string + groupName: + type: string + introduction: + type: string + needVerification: + type: integer + notification: + type: string + operationID: + type: string + required: + - groupID + - operationID + type: object + base_info.SetGroupInfoResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.SetGroupMemberInfoReq: + properties: + ex: + type: string + groupID: + type: string + nickname: + type: string + operationID: + type: string + roleLevel: + maximum: 3 + minimum: 1 + type: integer + userGroupFaceUrl: + type: string + userID: + type: string + required: + - groupID + - operationID + - userID + type: object + base_info.SetGroupMemberInfoResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.SetTagReq: properties: increaseUserIDList: @@ -507,6 +1303,29 @@ definitions: errMsg: type: string type: object + base_info.TransferGroupOwnerReq: + properties: + groupID: + type: string + newOwnerUserID: + type: string + oldOwnerUserID: + type: string + operationID: + type: string + required: + - groupID + - newOwnerUserID + - oldOwnerUserID + - operationID + type: object + base_info.TransferGroupOwnerResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.UpdateSelfUserInfoReq: properties: birth: @@ -550,6 +1369,106 @@ definitions: errMsg: type: string type: object + base_info.UserIDResult: + properties: + result: + type: integer + userID: + type: string + type: object + base_info.UserRegisterReq: + properties: + birth: + type: integer + email: + maxLength: 64 + type: string + ex: + maxLength: 1024 + type: string + faceURL: + maxLength: 1024 + type: string + gender: + enum: + - 0 + - 1 + - 2 + type: integer + nickname: + maxLength: 64 + minLength: 1 + type: string + operationID: + type: string + phoneNumber: + maxLength: 32 + type: string + platform: + maximum: 7 + minimum: 1 + type: integer + secret: + maxLength: 32 + type: string + userID: + maxLength: 64 + minLength: 1 + type: string + required: + - operationID + - platform + - secret + - userID + type: object + base_info.UserRegisterResp: + properties: + data: + $ref: '#/definitions/base_info.UserTokenInfo' + errCode: + type: integer + errMsg: + type: string + type: object + base_info.UserTokenInfo: + properties: + expiredTime: + type: integer + token: + type: string + userID: + type: string + type: object + base_info.UserTokenReq: + properties: + operationID: + type: string + platform: + maximum: 8 + minimum: 1 + type: integer + secret: + maxLength: 32 + type: string + userID: + maxLength: 64 + minLength: 1 + type: string + required: + - operationID + - platform + - secret + - userID + type: object + base_info.UserTokenResp: + properties: + data: + $ref: '#/definitions/base_info.UserTokenInfo' + errCode: + type: integer + errMsg: + type: string + type: object base_info.WorkMoment: properties: atUsers: @@ -707,6 +1626,85 @@ definitions: userID: type: string type: object + server_api_params.GroupInfo: + properties: + createTime: + type: integer + creatorUserID: + type: string + ex: + type: string + faceURL: + type: string + groupID: + type: string + groupName: + type: string + groupType: + type: integer + introduction: + type: string + memberCount: + type: integer + needVerification: + $ref: '#/definitions/wrapperspb.Int32Value' + notification: + type: string + ownerUserID: + type: string + status: + type: integer + type: object + server_api_params.GroupMemberFullInfo: + properties: + appMangerLevel: + type: integer + ex: + type: string + faceURL: + type: string + groupID: + type: string + joinSource: + type: integer + joinTime: + type: integer + muteEndTime: + type: integer + nickname: + type: string + operatorUserID: + type: string + roleLevel: + type: integer + userID: + type: string + type: object + server_api_params.UserInfo: + properties: + appMangerLevel: + type: integer + birth: + type: integer + createTime: + type: integer + email: + type: string + ex: + type: string + faceURL: + type: string + gender: + type: integer + globalRecvMsgOpt: + type: integer + nickname: + type: string + phoneNumber: + type: string + userID: + type: string + type: object user.AccountCheckResp_SingleUserStatus: properties: accountStatus: @@ -714,9 +1712,1414 @@ definitions: userID: type: string type: object + wrapperspb.Int32Value: + properties: + value: + description: The int32 value. + type: integer + type: object info: contact: {} paths: + /auth/force_logout: + post: + consumes: + - application/json + description: 对应的平台强制登出 + operationId: ForceLogout + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: platform为平台ID, fromUserID为要执行强制登出的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.ForceLogoutReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.ForceLogoutResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.ForceLogoutResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.ForceLogoutResp' + summary: 强制登出 + tags: + - 鉴权认证 + /auth/parse_token: + post: + consumes: + - application/json + description: 解析用户token + operationId: ParseToken + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.ParseTokenReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.ParseTokenResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.ParseTokenResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.ParseTokenResp' + summary: 解析token + tags: + - 鉴权认证 + /auth/user_register: + post: + consumes: + - application/json + description: 用户登录 + operationId: UserRegister + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID +
ex为拓展字段 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.UserRegisterReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.UserRegisterResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.UserRegisterResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.UserRegisterResp' + summary: 用户登录 + tags: + - 鉴权认证 + /auth/user_token: + post: + consumes: + - application/json + description: 获取用户的token + operationId: UserToken + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.UserTokenReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.UserTokenResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.UserTokenResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.UserTokenResp' + summary: 用户登录 + tags: + - 鉴权认证 + /friend/add_black: + post: + consumes: + - application/json + description: 添加黑名单 + operationId: AddBlack + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为设置的用户, toUserID为被设置的用户 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.AddBlacklistReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.AddBlacklistResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.AddBlacklistResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.AddBlacklistResp' + summary: 添加黑名单 + tags: + - 好友相关 + /friend/add_friend: + post: + consumes: + - application/json + description: 添加好友 + operationId: AddFriend + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.AddFriendReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.AddFriendResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.AddFriendResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.AddFriendResp' + summary: 添加好友 + tags: + - 好友相关 + /friend/add_friend_response: + post: + consumes: + - application/json + description: 同意/拒绝好友请求 + operationId: AddFriendResponse + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, + 1为同意, 2为拒绝 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.AddFriendResponseReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.AddFriendResponseResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.AddFriendResponseResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.AddFriendResponseResp' + summary: 同意/拒绝好友请求 + tags: + - 好友相关 + /friend/delete_friend: + post: + consumes: + - application/json + description: 删除好友 + operationId: DeleteFriend + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为操作用户, toUserID为被删除用户 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DeleteFriendReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DeleteFriendResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DeleteFriendResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DeleteFriendResp' + summary: 删除好友 + tags: + - 好友相关 + /friend/get_black_list: + post: + consumes: + - application/json + description: 获取黑名单列表 + operationId: GetBlacklist + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID要获取黑名单的用户 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetBlackListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetBlackListResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetBlackListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetBlackListResp' + summary: 获取黑名单列表 + tags: + - 好友相关 + /friend/get_friend_apply_list: + post: + consumes: + - application/json + description: 删除好友 + operationId: GetFriendApplyList + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为要获取申请列表的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetFriendApplyListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetFriendApplyListResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetFriendApplyListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetFriendApplyListResp' + summary: 获取好友申请列表 + tags: + - 好友相关 + /friend/get_friend_list: + post: + consumes: + - application/json + description: 获取用户的好友列表 + operationId: GetFriendList + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为要获取好友列表的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetFriendListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetFriendListResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetFriendListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetFriendListResp' + summary: 获取用户的好友列表 + tags: + - 好友相关 + /friend/get_self_friend_apply_list: + post: + consumes: + - application/json + description: 获取自己的好友申请列表 + operationId: GetSelfFriendApplyList + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为自己的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetSelfApplyListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetSelfApplyListResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetSelfApplyListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetSelfApplyListResp' + summary: 获取自己的好友申请列表 + tags: + - 好友相关 + /friend/import_friend: + post: + consumes: + - application/json + description: 批量加好友 + operationId: ImportFriend + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID批量加好友的用户ID, friendUserIDList为 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.ImportFriendReq' + produces: + - application/json + responses: + "0": + description: data列表中对象的result-1为添加该用户失败, 0为成功 + schema: + $ref: '#/definitions/base_info.ImportFriendResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.ImportFriendResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.ImportFriendResp' + summary: 批量加好友 + tags: + - 好友相关 + /friend/is_friend: + post: + consumes: + - application/json + description: 检查用户之间是否为好友 + operationId: IsFriend + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为请求用户, toUserID为要检查的用户 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.IsFriendReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.IsFriendResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.IsFriendResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.IsFriendResp' + summary: 检查用户之间是否为好友 + tags: + - 好友相关 + /friend/remove_black: + post: + consumes: + - application/json + description: 把用户移除黑名单 + operationId: RemoveBlack + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID要获取黑名单的用户 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.RemoveBlackListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.RemoveBlackListResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.RemoveBlackListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.RemoveBlackListResp' + summary: 把用户移除黑名单 + tags: + - 好友相关 + /friend/set_friend_remark: + post: + consumes: + - application/json + description: 设置好友备注 + operationId: SetFriendRemark + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.SetFriendRemarkReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.SetFriendRemarkResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.SetFriendRemarkResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.SetFriendRemarkResp' + summary: 设置好友备注 + tags: + - 好友相关 + /group/cancel_mute_group: + post: + consumes: + - application/json + description: 取消禁言群组 + operationId: CancelMuteGroup + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为群组ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CancelMuteGroupReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CancelMuteGroupResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CancelMuteGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CancelMuteGroupResp' + summary: 取消禁言群组 + tags: + - 群组相关 + /group/cancel_mute_group_member: + post: + consumes: + - application/json + description: 取消禁言群成员 + operationId: CancelMuteGroupMember + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为群组ID
userID为要取消禁言的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CancelMuteGroupMemberReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CancelMuteGroupMemberResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CancelMuteGroupMemberResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CancelMuteGroupMemberResp' + summary: 取消禁言群成员 + tags: + - 群组相关 + /group/create_group: + post: + consumes: + - application/json + description: 创建群组 + operationId: CreateGroup + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: ownerUserID为群主ID
ex为群扩展字段
roleLevel为群员角色,1为普通用户 2为群主 + 3为管理员 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CreateGroupReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + allOf: + - $ref: '#/definitions/base_info.CreateGroupResp' + - properties: + data: + $ref: '#/definitions/server_api_params.GroupInfo' + type: object + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CreateGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CreateGroupResp' + summary: 创建群组 + tags: + - 群组相关 + /group/dismiss_group: + post: + consumes: + - application/json + description: 解散群组 + operationId: DismissGroup + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为要解散的群组ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DismissGroupReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DismissGroupResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DismissGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DismissGroupResp' + summary: 解散群组 + tags: + - 群组相关 + /group/get_group_all_member_list: + post: + consumes: + - application/json + description: 获取全部群成员列表 + operationId: GetGroupAllMemberList + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: GroupID为要获取群成员的群ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetGroupAllMemberReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + allOf: + - $ref: '#/definitions/base_info.GetGroupAllMemberResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.GroupMemberFullInfo' + type: array + type: object + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetGroupAllMemberResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetGroupAllMemberResp' + summary: 获取全部群成员列表 + tags: + - 群组相关 + /group/get_group_members_info: + post: + consumes: + - application/json + description: 获取群成员信息 + operationId: GetGroupMembersInfo + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: memberList为要获取群成员的群ID列表 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetGroupMembersInfoReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + allOf: + - $ref: '#/definitions/base_info.GetGroupMembersInfoResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.GroupMemberFullInfo' + type: array + type: object + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetGroupMembersInfoResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetGroupMembersInfoResp' + summary: 获取群成员信息 + tags: + - 群组相关 + /group/get_groups_info: + post: + consumes: + - application/json + description: 通过群ID列表获取群信息 + operationId: GetGroupsInfo + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupIDList为群ID列表 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetGroupInfoReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetGroupInfoResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetGroupInfoResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetGroupInfoResp' + summary: 通过群ID列表获取群信息 + tags: + - 群组相关 + /group/get_joined_group_list: + post: + consumes: + - application/json + description: 获取用户加入群列表 + operationId: GetJoinedGroupList + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为要获取的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetJoinedGroupListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + allOf: + - $ref: '#/definitions/base_info.GetJoinedGroupListResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.GroupInfo' + type: array + type: object + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetJoinedGroupListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetJoinedGroupListResp' + summary: 获取用户加入群列表 + tags: + - 群组相关 + /group/get_recv_group_applicationList: + post: + consumes: + - application/json + description: 获取用户收到的加群信息列表 + operationId: GetRecvGroupApplicationList + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: fromUserID为要获取的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetGroupApplicationListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetGroupApplicationListResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetGroupApplicationListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetGroupApplicationListResp' + summary: 获取用户收到的加群信息列表 + tags: + - 群组相关 + /group/get_user_req_group_applicationList: + post: + consumes: + - application/json + description: 获取用户加群申请列表 + operationId: GetUserReqGroupApplicationList + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: userID为要获取的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUserReqGroupApplicationListReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetGroupApplicationListResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetGroupApplicationListResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetGroupApplicationListResp' + summary: 获取用户加群申请列表 + tags: + - 群组相关 + /group/group_application_response: + post: + consumes: + - application/json + description: 处理加群消息 + operationId: ApplicationGroupResponse + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为要处理的群ID
fromUserID为要处理的用户ID
handleMsg为处理结果信息 +
handleResult为处理结果 1为同意加群 2为拒绝加群 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.ApplicationGroupResponseReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.ApplicationGroupResponseResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.ApplicationGroupResponseResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.ApplicationGroupResponseResp' + summary: 处理加群消息 + tags: + - 群组相关 + /group/invite_user_to_group: + post: + consumes: + - application/json + description: 将用户拉入群组 + operationId: InviteUserToGroup + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为要拉进的群组ID
invitedUserIDList为要获取群成员的群ID列表
reason为原因 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.InviteUserToGroupReq' + produces: + - application/json + responses: + "0": + description: result为结果码, -1为失败, 0为成功 + schema: + $ref: '#/definitions/base_info.InviteUserToGroupResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.InviteUserToGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.InviteUserToGroupResp' + summary: 将用户拉入群组 + tags: + - 群组相关 + /group/join_group: + post: + consumes: + - application/json + description: 加入群聊 + operationId: JoinGroup + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: reqMessage为申请进群信息 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.JoinGroupReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.JoinGroupResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.JoinGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.JoinGroupResp' + summary: 加入群聊 + tags: + - 群组相关 + /group/kick_group: + post: + consumes: + - application/json + description: 把用户踢出群组 + operationId: KickGroupMember + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: GroupID为要操作的群ID
kickedUserIDList为要踢出的群用户ID
reason为原因 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.KickGroupMemberReq' + produces: + - application/json + responses: + "0": + description: result为结果码, -1为失败, 0为成功 + schema: + $ref: '#/definitions/base_info.KickGroupMemberResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.KickGroupMemberResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.KickGroupMemberResp' + summary: 把用户踢出群组 + tags: + - 群组相关 + /group/mute_group: + post: + consumes: + - application/json + description: 禁言群组 + operationId: MuteGroup + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为群组ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.MuteGroupReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.MuteGroupResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.MuteGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.MuteGroupResp' + summary: 禁言群组 + tags: + - 群组相关 + /group/mute_group_member: + post: + consumes: + - application/json + description: 禁言群成员 + operationId: MuteGroupMember + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为群组ID
userID为要禁言的用户ID
mutedSeconds为禁言秒数 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.MuteGroupMemberReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DismissGroupResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DismissGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DismissGroupResp' + summary: 禁言群成员 + tags: + - 群组相关 + /group/quit_group: + post: + consumes: + - application/json + description: 退出群聊 + operationId: QuitGroup + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: groupID为要退出的群ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.QuitGroupReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.QuitGroupResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.QuitGroupResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.QuitGroupResp' + summary: 退出群聊 + tags: + - 群组相关 + /group/set_group_info: + post: + consumes: + - application/json + description: 设置群信息 + operationId: SetGroupInfo + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: notification为群介绍
introduction为群公告
needVerification为加群验证 + 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.SetGroupInfoReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.SetGroupInfoResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.SetGroupInfoResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.SetGroupInfoResp' + summary: 设置群信息 + tags: + - 群组相关 + /group/set_group_member_info: + post: + consumes: + - application/json + description: 修改群成员信息 + operationId: SetGroupMemberInfo + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 除了operationID, userID, groupID其他参数可选 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.SetGroupMemberInfoReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.SetGroupMemberInfoResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.SetGroupMemberInfoResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.SetGroupMemberInfoResp' + summary: 修改群成员信息 + tags: + - 群组相关 + /group/transfer_group: + post: + consumes: + - application/json + description: 转让群主 + operationId: TransferGroupOwner + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: GroupID为要操作的群ID
oldOwnerUserID为老群主ID
newOwnerUserID为新群主ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.TransferGroupOwnerReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.TransferGroupOwnerResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.TransferGroupOwnerResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.TransferGroupOwnerResp' + summary: 转让群主 + tags: + - 群组相关 + /msg/clear_msg: + post: + consumes: + - application/json + description: 清空用户消息 + operationId: ClearMsg + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: userID为要清空的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CleanUpMsgReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CleanUpMsgResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CleanUpMsgResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CleanUpMsgResp' + summary: 清空用户消息 + tags: + - 消息相关 + /msg/del_msg: + post: + consumes: + - application/json + description: 根据seq列表删除消息 + operationId: DelMsg + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: userID为要删除的用户ID
seqList为seq列表 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DelMsgReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DelMsgResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DelMsgResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DelMsgResp' + summary: 根据seq列表删除消息 + tags: + - 消息相关 /office/comment_one_work_moment: post: consumes: @@ -1258,6 +3661,51 @@ paths: summary: 修改标签 tags: - 标签 + /third/minio_upload: + post: + consumes: + - application/json + description: minio上传文件(web api), 请注意本api请求为form并非json + operationId: MinioUploadFile + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 要上传的文件文件 + in: formData + name: file + required: true + type: file + - description: 文件类型 + in: formData + name: fileType + required: true + type: integer + - description: 操作唯一ID + in: formData + name: operationID + required: true + type: string + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.MinioUploadFileResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.MinioUploadFileResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.MinioUploadFileResp' + summary: minio上传文件(web api) + tags: + - 第三方服务相关 /user/account_check: post: consumes: @@ -1354,7 +3802,12 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetSelfUserInfoResp' + allOf: + - $ref: '#/definitions/base_info.GetSelfUserInfoResp' + - properties: + data: + $ref: '#/definitions/server_api_params.UserInfo' + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 605cc890b..1f06ec847 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -16,6 +16,18 @@ import ( "strings" ) +// @Summary 用户登录 +// @Description 用户登录 +// @Tags 鉴权认证 +// @ID UserRegister +// @Accept json +// @Param token header string true "im token" +// @Param req body api.UserRegisterReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID
ex为拓展字段" +// @Produce json +// @Success 0 {object} api.UserRegisterResp +// @Failure 500 {object} api.UserRegisterResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.UserRegisterResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /auth/user_register [post] func UserRegister(c *gin.Context) { params := api.UserRegisterReq{} if err := c.BindJSON(¶ms); err != nil { @@ -73,6 +85,18 @@ func UserRegister(c *gin.Context) { } +// @Summary 用户登录 +// @Description 获取用户的token +// @Tags 鉴权认证 +// @ID UserToken +// @Accept json +// @Param token header string true "im token" +// @Param req body api.UserTokenReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID" +// @Produce json +// @Success 0 {object} api.UserTokenResp +// @Failure 500 {object} api.UserTokenResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.UserTokenResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /auth/user_token [post] func UserToken(c *gin.Context) { params := api.UserTokenReq{} if err := c.BindJSON(¶ms); err != nil { @@ -111,6 +135,18 @@ func UserToken(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 解析token +// @Description 解析用户token +// @Tags 鉴权认证 +// @ID ParseToken +// @Accept json +// @Param token header string true "im token" +// @Param req body api.ParseTokenReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID" +// @Produce json +// @Success 0 {object} api.ParseTokenResp +// @Failure 500 {object} api.ParseTokenResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.ParseTokenResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /auth/parse_token [post] func ParseToken(c *gin.Context) { params := api.ParseTokenReq{} if err := c.BindJSON(¶ms); err != nil { @@ -137,6 +173,18 @@ func ParseToken(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 强制登出 +// @Description 对应的平台强制登出 +// @Tags 鉴权认证 +// @ID ForceLogout +// @Accept json +// @Param token header string true "im token" +// @Param req body api.ForceLogoutReq true "platform为平台ID, fromUserID为要执行强制登出的用户ID" +// @Produce json +// @Success 0 {object} api.ForceLogoutResp +// @Failure 500 {object} api.ForceLogoutResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.ForceLogoutResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /auth/force_logout [post] func ForceLogout(c *gin.Context) { params := api.ForceLogoutReq{} if err := c.BindJSON(¶ms); err != nil { diff --git a/internal/api/chat/del_msg.go b/internal/api/chat/del_msg.go index cb13f3dca..d993ef23f 100644 --- a/internal/api/chat/del_msg.go +++ b/internal/api/chat/del_msg.go @@ -16,6 +16,18 @@ import ( "strings" ) +// @Summary 根据seq列表删除消息 +// @Description 根据seq列表删除消息 +// @Tags 消息相关 +// @ID DelMsg +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DelMsgReq true "userID为要删除的用户ID
seqList为seq列表" +// @Produce json +// @Success 0 {object} api.DelMsgResp +// @Failure 500 {object} api.DelMsgResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DelMsgResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /msg/del_msg [post] func DelMsg(c *gin.Context) { var ( req api.DelMsgReq @@ -30,6 +42,17 @@ func DelMsg(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, &req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) } + + var ok bool + var errInfo string + ok, reqPb.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID) if grpcConn == nil { errMsg := req.OperationID + " getcdv3.GetConn == nil" @@ -50,6 +73,18 @@ func DelMsg(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 清空用户消息 +// @Description 清空用户消息 +// @Tags 消息相关 +// @ID ClearMsg +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CleanUpMsgReq true "userID为要清空的用户ID" +// @Produce json +// @Success 0 {object} api.CleanUpMsgResp +// @Failure 500 {object} api.CleanUpMsgResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CleanUpMsgResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /msg/clear_msg [post] func ClearMsg(c *gin.Context) { params := api.CleanUpMsgReq{} if err := c.BindJSON(¶ms); err != nil { diff --git a/internal/api/friend/friend.go b/internal/api/friend/friend.go index e756983a9..1170a3363 100644 --- a/internal/api/friend/friend.go +++ b/internal/api/friend/friend.go @@ -16,6 +16,18 @@ import ( "strings" ) +// @Summary 添加黑名单 +// @Description 添加黑名单 +// @Tags 好友相关 +// @ID AddBlack +// @Accept json +// @Param token header string true "im token" +// @Param req body api.AddBlacklistReq true "fromUserID为设置的用户, toUserID为被设置的用户" +// @Produce json +// @Success 0 {object} api.AddBlacklistResp +// @Failure 500 {object} api.AddBlacklistResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.AddBlacklistResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/add_black [post] func AddBlack(c *gin.Context) { params := api.AddBlacklistReq{} if err := c.BindJSON(¶ms); err != nil { @@ -49,6 +61,18 @@ func AddBlack(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 批量加好友 +// @Description 批量加好友 +// @Tags 好友相关 +// @ID ImportFriend +// @Accept json +// @Param token header string true "im token" +// @Param req body api.ImportFriendReq true "fromUserID批量加好友的用户ID, friendUserIDList为" +// @Produce json +// @Success 0 {object} api.ImportFriendResp "data列表中对象的result-1为添加该用户失败, 0为成功" +// @Failure 500 {object} api.ImportFriendResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.ImportFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/import_friend [post] func ImportFriend(c *gin.Context) { params := api.ImportFriendReq{} if err := c.BindJSON(¶ms); err != nil { @@ -97,6 +121,18 @@ func ImportFriend(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 添加好友 +// @Description 添加好友 +// @Tags 好友相关 +// @ID AddFriend +// @Accept json +// @Param token header string true "im token" +// @Param req body api.AddFriendReq true "reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户" +// @Produce json +// @Success 0 {object} api.AddFriendResp +// @Failure 500 {object} api.AddFriendResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.AddFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/add_friend [post] func AddFriend(c *gin.Context) { params := api.AddFriendReq{} if err := c.BindJSON(¶ms); err != nil { @@ -114,7 +150,7 @@ func AddFriend(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) return } @@ -140,6 +176,18 @@ func AddFriend(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 同意/拒绝好友请求 +// @Description 同意/拒绝好友请求 +// @Tags 好友相关 +// @ID AddFriendResponse +// @Accept json +// @Param token header string true "im token" +// @Param req body api.AddFriendResponseReq true "fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, 1为同意, 2为拒绝" +// @Produce json +// @Success 0 {object} api.AddFriendResponseResp +// @Failure 500 {object} api.AddFriendResponseResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.AddFriendResponseResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/add_friend_response [post] func AddFriendResponse(c *gin.Context) { params := api.AddFriendResponseReq{} if err := c.BindJSON(¶ms); err != nil { @@ -158,7 +206,7 @@ func AddFriendResponse(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) return } @@ -186,6 +234,18 @@ func AddFriendResponse(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 删除好友 +// @Description 删除好友 +// @Tags 好友相关 +// @ID DeleteFriend +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DeleteFriendReq true "fromUserID为操作用户, toUserID为被删除用户" +// @Produce json +// @Success 0 {object} api.DeleteFriendResp +// @Failure 500 {object} api.DeleteFriendResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DeleteFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/delete_friend [post] func DeleteFriend(c *gin.Context) { params := api.DeleteFriendReq{} if err := c.BindJSON(¶ms); err != nil { @@ -228,6 +288,18 @@ func DeleteFriend(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取黑名单列表 +// @Description 获取黑名单列表 +// @Tags 好友相关 +// @ID GetBlacklist +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetBlackListReq true "fromUserID要获取黑名单的用户" +// @Produce json +// @Success 0 {object} api.GetBlackListResp +// @Failure 500 {object} api.GetBlackListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetBlackListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/get_black_list [post] func GetBlacklist(c *gin.Context) { params := api.GetBlackListReq{} if err := c.BindJSON(¶ms); err != nil { @@ -244,7 +316,7 @@ func GetBlacklist(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -276,6 +348,18 @@ func GetBlacklist(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 设置好友备注 +// @Description 设置好友备注 +// @Tags 好友相关 +// @ID SetFriendRemark +// @Accept json +// @Param token header string true "im token" +// @Param req body api.SetFriendRemarkReq true "fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注" +// @Produce json +// @Success 0 {object} api.SetFriendRemarkResp +// @Failure 500 {object} api.SetFriendRemarkResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.SetFriendRemarkResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/set_friend_remark [post] func SetFriendRemark(c *gin.Context) { params := api.SetFriendRemarkReq{} if err := c.BindJSON(¶ms); err != nil { @@ -319,6 +403,18 @@ func SetFriendRemark(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 把用户移除黑名单 +// @Description 把用户移除黑名单 +// @Tags 好友相关 +// @ID RemoveBlack +// @Accept json +// @Param token header string true "im token" +// @Param req body api.RemoveBlackListReq true "fromUserID要获取黑名单的用户" +// @Produce json +// @Success 0 {object} api.RemoveBlackListResp +// @Failure 500 {object} api.RemoveBlackListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.RemoveBlackListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/remove_black [post] func RemoveBlack(c *gin.Context) { params := api.RemoveBlackListReq{} if err := c.BindJSON(¶ms); err != nil { @@ -335,7 +431,7 @@ func RemoveBlack(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -360,6 +456,18 @@ func RemoveBlack(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 检查用户之间是否为好友 +// @Description 检查用户之间是否为好友 +// @Tags 好友相关 +// @ID IsFriend +// @Accept json +// @Param token header string true "im token" +// @Param req body api.IsFriendReq true "fromUserID为请求用户, toUserID为要检查的用户" +// @Produce json +// @Success 0 {object} api.IsFriendResp +// @Failure 500 {object} api.IsFriendResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.IsFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/is_friend [post] func IsFriend(c *gin.Context) { params := api.IsFriendReq{} if err := c.BindJSON(¶ms); err != nil { @@ -376,7 +484,7 @@ func IsFriend(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) return } @@ -403,6 +511,18 @@ func IsFriend(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取用户的好友列表 +// @Description 获取用户的好友列表 +// @Tags 好友相关 +// @ID GetFriendList +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetFriendListReq true "fromUserID为要获取好友列表的用户ID" +// @Produce json +// @Success 0 {object} api.GetFriendListResp +// @Failure 500 {object} api.GetFriendListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetFriendListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/get_friend_list [post] func GetFriendList(c *gin.Context) { params := api.GetFriendListReq{} if err := c.BindJSON(¶ms); err != nil { @@ -447,6 +567,18 @@ func GetFriendList(c *gin.Context) { //c.JSON(http.StatusOK, resp) } +// @Summary 获取好友申请列表 +// @Description 删除好友 +// @Tags 好友相关 +// @ID GetFriendApplyList +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetFriendApplyListReq true "fromUserID为要获取申请列表的用户ID" +// @Produce json +// @Success 0 {object} api.GetFriendApplyListResp +// @Failure 500 {object} api.GetFriendApplyListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetFriendApplyListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/get_friend_apply_list [post] func GetFriendApplyList(c *gin.Context) { params := api.GetFriendApplyListReq{} if err := c.BindJSON(¶ms); err != nil { @@ -463,7 +595,7 @@ func GetFriendApplyList(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -491,6 +623,18 @@ func GetFriendApplyList(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取自己的好友申请列表 +// @Description 获取自己的好友申请列表 +// @Tags 好友相关 +// @ID GetSelfFriendApplyList +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetSelfApplyListReq true "fromUserID为自己的用户ID" +// @Produce json +// @Success 0 {object} api.GetSelfApplyListResp +// @Failure 500 {object} api.GetSelfApplyListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetSelfApplyListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /friend/get_self_friend_apply_list [post] func GetSelfFriendApplyList(c *gin.Context) { params := api.GetSelfApplyListReq{} if err := c.BindJSON(¶ms); err != nil { @@ -507,7 +651,7 @@ func GetSelfFriendApplyList(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } diff --git a/internal/api/group/group.go b/internal/api/group/group.go index d8bf2f5aa..5493bab13 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -20,6 +20,18 @@ import ( jsonData "Open_IM/internal/utils" ) +// @Summary 把用户踢出群组 +// @Description 把用户踢出群组 +// @Tags 群组相关 +// @ID KickGroupMember +// @Accept json +// @Param token header string true "im token" +// @Param req body api.KickGroupMemberReq true "GroupID为要操作的群ID
kickedUserIDList为要踢出的群用户ID
reason为原因" +// @Produce json +// @Success 0 {object} api.KickGroupMemberResp "result为结果码, -1为失败, 0为成功" +// @Failure 500 {object} api.KickGroupMemberResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.KickGroupMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/kick_group [post] func KickGroupMember(c *gin.Context) { params := api.KickGroupMemberReq{} if err := c.BindJSON(¶ms); err != nil { @@ -72,6 +84,18 @@ func KickGroupMember(c *gin.Context) { c.JSON(http.StatusOK, memberListResp) } +// @Summary 获取群成员信息 +// @Description 获取群成员信息 +// @Tags 群组相关 +// @ID GetGroupMembersInfo +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetGroupMembersInfoReq true "memberList为要获取群成员的群ID列表" +// @Produce json +// @Success 0 {object} api.GetGroupMembersInfoResp{data=[]open_im_sdk.GroupMemberFullInfo} +// @Failure 500 {object} api.GetGroupMembersInfoResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetGroupMembersInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/get_group_members_info [post] func GetGroupMembersInfo(c *gin.Context) { params := api.GetGroupMembersInfoReq{} if err := c.BindJSON(¶ms); err != nil { @@ -161,6 +185,18 @@ func GetGroupMemberList(c *gin.Context) { c.JSON(http.StatusOK, memberListResp) } +// @Summary 获取全部群成员列表 +// @Description 获取全部群成员列表 +// @Tags 群组相关 +// @ID GetGroupAllMemberList +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetGroupAllMemberReq true "GroupID为要获取群成员的群ID" +// @Produce json +// @Success 0 {object} api.GetGroupAllMemberResp{data=[]open_im_sdk.GroupMemberFullInfo} +// @Failure 500 {object} api.GetGroupAllMemberResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetGroupAllMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/get_group_all_member_list [post] func GetGroupAllMemberList(c *gin.Context) { params := api.GetGroupAllMemberReq{} if err := c.BindJSON(¶ms); err != nil { @@ -204,6 +240,18 @@ func GetGroupAllMemberList(c *gin.Context) { c.JSON(http.StatusOK, memberListResp) } +// @Summary 获取用户加入群列表 +// @Description 获取用户加入群列表 +// @Tags 群组相关 +// @ID GetJoinedGroupList +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetJoinedGroupListReq true "fromUserID为要获取的用户ID" +// @Produce json +// @Success 0 {object} api.GetJoinedGroupListResp{data=[]open_im_sdk.GroupInfo} +// @Failure 500 {object} api.GetJoinedGroupListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetJoinedGroupListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/get_joined_group_list [post] func GetJoinedGroupList(c *gin.Context) { params := api.GetJoinedGroupListReq{} if err := c.BindJSON(¶ms); err != nil { @@ -247,6 +295,18 @@ func GetJoinedGroupList(c *gin.Context) { c.JSON(http.StatusOK, GroupListResp) } +// @Summary 将用户拉入群组 +// @Description 将用户拉入群组 +// @Tags 群组相关 +// @ID InviteUserToGroup +// @Accept json +// @Param token header string true "im token" +// @Param req body api.InviteUserToGroupReq true "groupID为要拉进的群组ID
invitedUserIDList为要获取群成员的群ID列表
reason为原因" +// @Produce json +// @Success 0 {object} api.InviteUserToGroupResp "result为结果码, -1为失败, 0为成功"" +// @Failure 500 {object} api.InviteUserToGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.InviteUserToGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/invite_user_to_group [post] func InviteUserToGroup(c *gin.Context) { params := api.InviteUserToGroupReq{} if err := c.BindJSON(¶ms); err != nil { @@ -297,6 +357,18 @@ func InviteUserToGroup(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 创建群组 +// @Description 创建群组 +// @Tags 群组相关 +// @ID CreateGroup +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CreateGroupReq true "ownerUserID为群主ID
ex为群扩展字段
roleLevel为群员角色,1为普通用户 2为群主 3为管理员" +// @Produce json +// @Success 0 {object} api.CreateGroupResp{data=open_im_sdk.GroupInfo} +// @Failure 500 {object} api.CreateGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CreateGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/create_group [post] func CreateGroup(c *gin.Context) { params := api.CreateGroupReq{} if err := c.BindJSON(¶ms); err != nil { @@ -318,7 +390,7 @@ func CreateGroup(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) return } @@ -351,7 +423,18 @@ func CreateGroup(c *gin.Context) { c.JSON(http.StatusOK, resp) } -// 群主或管理员收到的 +// @Summary 获取用户收到的加群信息列表 +// @Description 获取用户收到的加群信息列表 +// @Tags 群组相关 +// @ID GetRecvGroupApplicationList +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetGroupApplicationListReq true "fromUserID为要获取的用户ID" +// @Produce json +// @Success 0 {object} api.GetGroupApplicationListResp +// @Failure 500 {object} api.GetGroupApplicationListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetGroupApplicationListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/get_recv_group_applicationList [post] func GetRecvGroupApplicationList(c *gin.Context) { params := api.GetGroupApplicationListReq{} if err := c.BindJSON(¶ms); err != nil { @@ -361,13 +444,15 @@ func GetRecvGroupApplicationList(c *gin.Context) { } req := &rpc.GetGroupApplicationListReq{} utils.CopyStructFields(req, params) - //var ok bool - //ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) - //if !ok { - // log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) - // c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) - // return - //} + var ok bool + var errInfo string + ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) + return + } log.NewInfo(req.OperationID, "GetGroupApplicationList args ", req.String()) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) @@ -391,6 +476,18 @@ func GetRecvGroupApplicationList(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取用户加群申请列表 +// @Description 获取用户加群申请列表 +// @Tags 群组相关 +// @ID GetUserReqGroupApplicationList +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUserReqGroupApplicationListReq true "userID为要获取的用户ID" +// @Produce json +// @Success 0 {object} api.GetGroupApplicationListResp +// @Failure 500 {object} api.GetGroupApplicationListResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetGroupApplicationListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/get_user_req_group_applicationList [post] func GetUserReqGroupApplicationList(c *gin.Context) { var params api.GetUserReqGroupApplicationListReq if err := c.BindJSON(¶ms); err != nil { @@ -400,12 +497,15 @@ func GetUserReqGroupApplicationList(c *gin.Context) { } req := &rpc.GetUserReqApplicationListReq{} utils.CopyStructFields(req, params) - //ok, req.OpUserID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) - //if !ok { - // log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) - // c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) - // return - //} + var ok bool + var errInfo string + ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) + return + } log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String()) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) if etcdConn == nil { @@ -428,6 +528,18 @@ func GetUserReqGroupApplicationList(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 通过群ID列表获取群信息 +// @Description 通过群ID列表获取群信息 +// @Tags 群组相关 +// @ID GetGroupsInfo +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetGroupInfoReq true "groupIDList为群ID列表" +// @Produce json +// @Success 0 {object} api.GetGroupInfoResp +// @Failure 500 {object} api.GetGroupInfoResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetGroupInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/get_groups_info [post] func GetGroupsInfo(c *gin.Context) { params := api.GetGroupInfoReq{} if err := c.BindJSON(¶ms); err != nil { @@ -470,7 +582,18 @@ func GetGroupsInfo(c *gin.Context) { c.JSON(http.StatusOK, resp) } -//process application +// @Summary 处理加群消息 +// @Description 处理加群消息 +// @Tags 群组相关 +// @ID ApplicationGroupResponse +// @Accept json +// @Param token header string true "im token" +// @Param req body api.ApplicationGroupResponseReq true "groupID为要处理的群ID
fromUserID为要处理的用户ID
handleMsg为处理结果信息
handleResult为处理结果 1为同意加群 2为拒绝加群" +// @Produce json +// @Success 0 {object} api.ApplicationGroupResponseResp +// @Failure 500 {object} api.ApplicationGroupResponseResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.ApplicationGroupResponseResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/group_application_response [post] func ApplicationGroupResponse(c *gin.Context) { params := api.ApplicationGroupResponseReq{} if err := c.BindJSON(¶ms); err != nil { @@ -513,6 +636,18 @@ func ApplicationGroupResponse(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 加入群聊 +// @Description 加入群聊 +// @Tags 群组相关 +// @ID JoinGroup +// @Accept json +// @Param token header string true "im token" +// @Param req body api.JoinGroupReq true "reqMessage为申请进群信息" +// @Produce json +// @Success 0 {object} api.JoinGroupResp +// @Failure 500 {object} api.JoinGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.JoinGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/join_group [post] func JoinGroup(c *gin.Context) { params := api.JoinGroupReq{} if err := c.BindJSON(¶ms); err != nil { @@ -529,7 +664,7 @@ func JoinGroup(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -554,6 +689,18 @@ func JoinGroup(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 退出群聊 +// @Description 退出群聊 +// @Tags 群组相关 +// @ID QuitGroup +// @Accept json +// @Param token header string true "im token" +// @Param req body api.QuitGroupReq true "groupID为要退出的群ID" +// @Produce json +// @Success 0 {object} api.QuitGroupResp +// @Failure 500 {object} api.QuitGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.QuitGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/quit_group [post] func QuitGroup(c *gin.Context) { params := api.QuitGroupReq{} if err := c.BindJSON(¶ms); err != nil { @@ -595,6 +742,18 @@ func QuitGroup(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 设置群信息 +// @Description 设置群信息 +// @Tags 群组相关 +// @ID SetGroupInfo +// @Accept json +// @Param token header string true "im token" +// @Param req body api.SetGroupInfoReq true "notification为群介绍
introduction为群公告
needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群" +// @Produce json +// @Success 0 {object} api.SetGroupInfoResp +// @Failure 500 {object} api.SetGroupInfoResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.SetGroupInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/set_group_info [post] func SetGroupInfo(c *gin.Context) { params := api.SetGroupInfoReq{} if err := c.BindJSON(¶ms); err != nil { @@ -641,6 +800,18 @@ func SetGroupInfo(c *gin.Context) { log.NewInfo(req.OperationID, "SetGroupInfo api return ", resp) } +// @Summary 转让群主 +// @Description 转让群主 +// @Tags 群组相关 +// @ID TransferGroupOwner +// @Accept json +// @Param token header string true "im token" +// @Param req body api.TransferGroupOwnerReq true "GroupID为要操作的群ID
oldOwnerUserID为老群主ID
newOwnerUserID为新群主ID" +// @Produce json +// @Success 0 {object} api.TransferGroupOwnerResp +// @Failure 500 {object} api.TransferGroupOwnerResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.TransferGroupOwnerResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/transfer_group [post] func TransferGroupOwner(c *gin.Context) { params := api.TransferGroupOwnerReq{} if err := c.BindJSON(¶ms); err != nil { @@ -683,6 +854,18 @@ func TransferGroupOwner(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 解散群组 +// @Description 解散群组 +// @Tags 群组相关 +// @ID DismissGroup +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DismissGroupReq true "groupID为要解散的群组ID" +// @Produce json +// @Success 0 {object} api.DismissGroupResp +// @Failure 500 {object} api.DismissGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DismissGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/dismiss_group [post] func DismissGroup(c *gin.Context) { params := api.DismissGroupReq{} if err := c.BindJSON(¶ms); err != nil { @@ -725,6 +908,18 @@ func DismissGroup(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 禁言群成员 +// @Description 禁言群成员 +// @Tags 群组相关 +// @ID MuteGroupMember +// @Accept json +// @Param token header string true "im token" +// @Param req body api.MuteGroupMemberReq true "groupID为群组ID
userID为要禁言的用户ID
mutedSeconds为禁言秒数" +// @Produce json +// @Success 0 {object} api.DismissGroupResp +// @Failure 500 {object} api.DismissGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DismissGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/mute_group_member [post] func MuteGroupMember(c *gin.Context) { params := api.MuteGroupMemberReq{} if err := c.BindJSON(¶ms); err != nil { @@ -767,6 +962,18 @@ func MuteGroupMember(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 取消禁言群成员 +// @Description 取消禁言群成员 +// @Tags 群组相关 +// @ID CancelMuteGroupMember +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CancelMuteGroupMemberReq true "groupID为群组ID
userID为要取消禁言的用户ID" +// @Produce json +// @Success 0 {object} api.CancelMuteGroupMemberResp +// @Failure 500 {object} api.CancelMuteGroupMemberResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CancelMuteGroupMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/cancel_mute_group_member [post] func CancelMuteGroupMember(c *gin.Context) { params := api.CancelMuteGroupMemberReq{} if err := c.BindJSON(¶ms); err != nil { @@ -809,6 +1016,18 @@ func CancelMuteGroupMember(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 禁言群组 +// @Description 禁言群组 +// @Tags 群组相关 +// @ID MuteGroup +// @Accept json +// @Param token header string true "im token" +// @Param req body api.MuteGroupReq true "groupID为群组ID" +// @Produce json +// @Success 0 {object} api.MuteGroupResp +// @Failure 500 {object} api.MuteGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.MuteGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/mute_group [post] func MuteGroup(c *gin.Context) { params := api.MuteGroupReq{} if err := c.BindJSON(¶ms); err != nil { @@ -851,6 +1070,18 @@ func MuteGroup(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 取消禁言群组 +// @Description 取消禁言群组 +// @Tags 群组相关 +// @ID CancelMuteGroup +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CancelMuteGroupReq true "groupID为群组ID" +// @Produce json +// @Success 0 {object} api.CancelMuteGroupResp +// @Failure 500 {object} api.CancelMuteGroupResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CancelMuteGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/cancel_mute_group [post] func CancelMuteGroup(c *gin.Context) { params := api.CancelMuteGroupReq{} if err := c.BindJSON(¶ms); err != nil { @@ -937,6 +1168,18 @@ func SetGroupMemberNickname(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 修改群成员信息 +// @Description 修改群成员信息 +// @Tags 群组相关 +// @ID SetGroupMemberInfo +// @Accept json +// @Param token header string true "im token" +// @Param req body api.SetGroupMemberInfoReq true "除了operationID, userID, groupID其他参数可选" +// @Produce json +// @Success 0 {object} api.SetGroupMemberInfoResp +// @Failure 500 {object} api.SetGroupMemberInfoResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.SetGroupMemberInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /group/set_group_member_info [post] func SetGroupMemberInfo(c *gin.Context) { var ( req api.SetGroupMemberInfoReq diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index 542c99ba7..7d0124688 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -1,7 +1,7 @@ package apiThird import ( - apiStruct "Open_IM/pkg/base_info" + api "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" @@ -17,10 +17,24 @@ import ( "net/http" ) +// @Summary minio上传文件(web api) +// @Description minio上传文件(web api), 请注意本api请求为form并非json +// @Tags 第三方服务相关 +// @ID MinioUploadFile +// @Accept json +// @Param token header string true "im token" +// @Param file formData file true "要上传的文件文件" +// @Param fileType formData int true "文件类型" +// @Param operationID formData string true "操作唯一ID" +// @Produce json +// @Success 0 {object} api.MinioUploadFileResp "" +// @Failure 500 {object} api.MinioUploadFileResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.MinioUploadFileResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /third/minio_upload [post] func MinioUploadFile(c *gin.Context) { var ( - req apiStruct.MinioUploadFileReq - resp apiStruct.MinioUploadFileResp + req api.MinioUploadFileReq + resp api.MinioUploadFileResp ) defer func() { if r := recover(); r != nil { @@ -41,7 +55,7 @@ func MinioUploadFile(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -100,8 +114,8 @@ func MinioUploadFile(c *gin.Context) { func MinioStorageCredential(c *gin.Context) { var ( - req apiStruct.MinioStorageCredentialReq - resp apiStruct.MiniostorageCredentialResp + req api.MinioStorageCredentialReq + resp api.MiniostorageCredentialResp ) if err := c.BindJSON(&req); err != nil { log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) @@ -151,8 +165,8 @@ func MinioStorageCredential(c *gin.Context) { func UploadUpdateApp(c *gin.Context) { var ( - req apiStruct.UploadUpdateAppReq - resp apiStruct.UploadUpdateAppResp + req api.UploadUpdateAppReq + resp api.UploadUpdateAppResp ) if err := c.Bind(&req); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) @@ -204,8 +218,8 @@ func UploadUpdateApp(c *gin.Context) { func GetDownloadURL(c *gin.Context) { var ( - req apiStruct.GetDownloadURLReq - resp apiStruct.GetDownloadURLResp + req api.GetDownloadURLReq + resp api.GetDownloadURLResp ) defer func() { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) diff --git a/internal/api/third/tencent_cloud_storage_credential.go b/internal/api/third/tencent_cloud_storage_credential.go index 871d92ae0..4f641f1aa 100644 --- a/internal/api/third/tencent_cloud_storage_credential.go +++ b/internal/api/third/tencent_cloud_storage_credential.go @@ -30,7 +30,7 @@ func TencentCloudStorageCredential(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) return } diff --git a/internal/api/user/user.go b/internal/api/user/user.go index d195c4b96..81832f5b2 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -317,7 +317,7 @@ func SetGlobalRecvMessageOpt(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetSelfUserInfoReq true "请求体" // @Produce json -// @Success 0 {object} api.GetSelfUserInfoResp +// @Success 0 {object} api.GetSelfUserInfoResp{data=open_im_sdk.UserInfo} // @Failure 500 {object} api.GetSelfUserInfoResp "errCode为500 一般为服务器内部错误" // @Failure 400 {object} api.GetSelfUserInfoResp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/get_self_user_info [post] diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index 20017ef57..a712c2998 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -95,7 +95,7 @@ type CreateGroupReq struct { type CreateGroupResp struct { CommResp GroupInfo open_im_sdk.GroupInfo `json:"-"` - Data map[string]interface{} `json:"data"` + Data map[string]interface{} `json:"data" swaggerignore:"true"` } type GetGroupApplicationListReq struct { diff --git a/pkg/base_info/msg.go b/pkg/base_info/msg.go index 15941f340..153313f65 100644 --- a/pkg/base_info/msg.go +++ b/pkg/base_info/msg.go @@ -1,10 +1,9 @@ package base_info type DelMsgReq struct { - OpUserID string `json:"opUserID,omitempty"` - UserID string `json:"userID,omitempty"` - SeqList []uint32 `json:"seqList,omitempty"` - OperationID string `json:"operationID,omitempty"` + UserID string `json:"userID,omitempty" binding:"required"` + SeqList []uint32 `json:"seqList,omitempty" binding:"required"` + OperationID string `json:"operationID,omitempty" binding:"required"` } type DelMsgResp struct { diff --git a/pkg/base_info/user_api_struct.go b/pkg/base_info/user_api_struct.go index 45c8cb22d..09e19bd6b 100644 --- a/pkg/base_info/user_api_struct.go +++ b/pkg/base_info/user_api_struct.go @@ -11,7 +11,7 @@ type GetUsersInfoReq struct { type GetUsersInfoResp struct { CommResp UserInfoList []*open_im_sdk.PublicUserInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type UpdateSelfUserInfoReq struct { @@ -36,7 +36,7 @@ type GetSelfUserInfoReq struct { type GetSelfUserInfoResp struct { CommResp UserInfo *open_im_sdk.UserInfo `json:"-"` - Data map[string]interface{} `json:"data"` + Data map[string]interface{} `json:"data" swaggerignore:"true"` } type GetFriendIDListFromCacheReq struct { From 204d80d86f931490af5178320bed2cf2f4cbf991 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:01:42 +0800 Subject: [PATCH 693/752] Tencent cloud --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 4f5b60536..e6993c281 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -697,7 +697,7 @@ demo: enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 1400529182 - region: "ap-chengdu" + region: "" secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH signName: "" From e20f953c7fbc333ffc10eed13b5a8ee3eab9f8c4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:30:33 +0800 Subject: [PATCH 694/752] config update --- config/config.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index e6993c281..ab306d43d 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -696,12 +696,12 @@ demo: verificationCodeTemplateCode: SMS_226810164 enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 - appID: 1400529182 - region: "" - secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV - secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH + appID: 2400000648 + region: "ap-singapore" + secretID: IKIDra4JPGsFMDwQedMq42lESQBgwwgBQQAe + secretKey: HI6fz4uUotjJdiX6QUIrAE2buxlKdgU2 signName: "" - verificationCodeTemplateCode: 1449250 + verificationCodeTemplateCode: 2902877 enable: true superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 # second From 46e24556efcdbf11b33df9f46f1e68bafc69be5f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:34:07 +0800 Subject: [PATCH 695/752] config update --- config/config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index ab306d43d..3303311da 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -696,12 +696,12 @@ demo: verificationCodeTemplateCode: SMS_226810164 enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 - appID: 2400000648 + appID: 1400529182 region: "ap-singapore" - secretID: IKIDra4JPGsFMDwQedMq42lESQBgwwgBQQAe - secretKey: HI6fz4uUotjJdiX6QUIrAE2buxlKdgU2 + secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV + secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH signName: "" - verificationCodeTemplateCode: 2902877 + verificationCodeTemplateCode: 1449250 enable: true superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 # second From f700c15bc773dbd3f342748e31b239c8cbdc507f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:35:26 +0800 Subject: [PATCH 696/752] config update --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index 3303311da..deb185fa5 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -697,7 +697,7 @@ demo: enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 1400529182 - region: "ap-singapore" + region: "ap-hongkong" secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH signName: "" From 3ae0a05422ac5cd2e5a5528857e70b35f6963be4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:36:35 +0800 Subject: [PATCH 697/752] config update --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index deb185fa5..fcb9496f8 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -697,7 +697,7 @@ demo: enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 1400529182 - region: "ap-hongkong" + region: "ap-mumbai" secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH signName: "" From 84d76f07495b087c1edbec8e5dd0ceaf37826d52 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:37:39 +0800 Subject: [PATCH 698/752] config update --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index fcb9496f8..8b5a5ed04 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -697,7 +697,7 @@ demo: enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 1400529182 - region: "ap-mumbai" + region: "na-toronto" secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH signName: "" From c1b855ebf71baa5052c7f3f89fa3f3d575ac88da Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:45:16 +0800 Subject: [PATCH 699/752] config update --- config/config.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 8b5a5ed04..ba92ffd8c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -696,12 +696,12 @@ demo: verificationCodeTemplateCode: SMS_226810164 enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 - appID: 1400529182 - region: "na-toronto" - secretID: AKIDZx6yYruhDm6AxTihQt4ybx1oLbaHisKV - secretKey: vay4tSjjSv71e2A1buwhBNJyLRGp66pH + appID: 2400000648 + region: "ap-chengdu" + secretID: IKIDra4JPGsFMDwQedMq42lESQBgwwgBQQAe + secretKey: HI6fz4uUotjJdiX6QUIrAE2buxlKdgU2 signName: "" - verificationCodeTemplateCode: 1449250 + verificationCodeTemplateCode: 2902877 enable: true superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 # second From 536c62c137eb879a41fe5a472c1bd8603923c69c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 18:46:27 +0800 Subject: [PATCH 700/752] config update --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index ba92ffd8c..764d891c8 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -697,7 +697,7 @@ demo: enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 2400000648 - region: "ap-chengdu" + region: "ap-singapore" secretID: IKIDra4JPGsFMDwQedMq42lESQBgwwgBQQAe secretKey: HI6fz4uUotjJdiX6QUIrAE2buxlKdgU2 signName: "" From 2907cac50fe978c42c5c186498cf8d8455b59b64 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 29 Jun 2022 18:48:17 +0800 Subject: [PATCH 701/752] swagger --- cmd/open_im_api/docs/docs.go | 2940 +++++++++++++++-- cmd/open_im_api/docs/swagger.json | 2938 ++++++++++++++-- cmd/open_im_api/docs/swagger.yaml | 1993 ++++++++++- cmd/open_im_api/main.go | 7 + internal/api/auth/auth.go | 34 +- internal/api/chat/del_msg.go | 8 +- internal/api/conversation/conversation.go | 36 + internal/api/friend/friend.go | 82 +- internal/api/group/group.go | 130 +- internal/api/manage/management_chat.go | 35 +- internal/api/organization/organization.go | 145 +- .../api/third/minio_storage_credential.go | 6 +- internal/api/user/user.go | 24 +- pkg/base_info/auth_api_struct.go | 2 +- pkg/base_info/friend_api_struct.go | 10 +- pkg/base_info/group_api_struct.go | 12 +- pkg/base_info/manage_api_struct.go | 32 +- pkg/base_info/swagger_example.go | 11 + pkg/base_info/third_api_struct.go | 9 +- 19 files changed, 7708 insertions(+), 746 deletions(-) create mode 100644 pkg/base_info/swagger_example.go diff --git a/cmd/open_im_api/docs/docs.go b/cmd/open_im_api/docs/docs.go index 04efc9ea5..50981d32a 100644 --- a/cmd/open_im_api/docs/docs.go +++ b/cmd/open_im_api/docs/docs.go @@ -11,6 +11,10 @@ const docTemplate = `{ "description": "{{escape .Description}}", "title": "{{.Title}}", "contact": {}, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, "version": "{{.Version}}" }, "host": "{{.Host}}", @@ -39,7 +43,7 @@ const docTemplate = `{ "required": true }, { - "description": "platform为平台ID, fromUserID为要执行强制登出的用户ID", + "description": "platform为平台ID \u003cbr\u003e fromUserID为要执行强制登出的用户ID", "name": "req", "in": "body", "required": true, @@ -58,13 +62,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ForceLogoutResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ForceLogoutResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -72,7 +76,7 @@ const docTemplate = `{ }, "/auth/parse_token": { "post": { - "description": "解析用户token", + "description": "解析当前用户token(token在请求头中传入)", "consumes": [ "application/json" ], @@ -82,7 +86,7 @@ const docTemplate = `{ "tags": [ "鉴权认证" ], - "summary": "解析token", + "summary": "解析当前用户token", "operationId": "ParseToken", "parameters": [ { @@ -93,7 +97,7 @@ const docTemplate = `{ "required": true }, { - "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段\u003cbr\u003eplatform为平台ID", "name": "req", "in": "body", "required": true, @@ -106,19 +110,31 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.ParseTokenResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.ParseTokenResp" + }, + { + "type": "object", + "properties": { + "Data": { + "$ref": "#/definitions/base_info.ExpireTime" + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ParseTokenResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ParseTokenResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -126,7 +142,7 @@ const docTemplate = `{ }, "/auth/user_register": { "post": { - "description": "用户登录", + "description": "用户注册", "consumes": [ "application/json" ], @@ -136,7 +152,7 @@ const docTemplate = `{ "tags": [ "鉴权认证" ], - "summary": "用户登录", + "summary": "用户注册", "operationId": "UserRegister", "parameters": [ { @@ -147,7 +163,7 @@ const docTemplate = `{ "required": true }, { - "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID \u003cbr\u003e ex为拓展字段", + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID \u003cbr\u003e ex为拓展字段 \u003cbr\u003e gender为性别, 0为女, 1为男", "name": "req", "in": "body", "required": true, @@ -166,13 +182,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UserRegisterResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UserRegisterResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -201,7 +217,7 @@ const docTemplate = `{ "required": true }, { - "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID", "name": "req", "in": "body", "required": true, @@ -220,13 +236,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UserTokenResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UserTokenResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -255,7 +271,7 @@ const docTemplate = `{ "required": true }, { - "description": "fromUserID为设置的用户, toUserID为被设置的用户", + "description": "fromUserID为设置的用户 \u003cbr\u003e toUserID为被设置的用户", "name": "req", "in": "body", "required": true, @@ -274,13 +290,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AddBlacklistResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AddBlacklistResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -309,7 +325,7 @@ const docTemplate = `{ "required": true }, { - "description": "reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户", + "description": "reqMsg为申请信息 \u003cbr\u003e fromUserID为申请用户 \u003cbr\u003e toUserID为被添加用户", "name": "req", "in": "body", "required": true, @@ -328,13 +344,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AddFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AddFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -363,7 +379,7 @@ const docTemplate = `{ "required": true }, { - "description": "fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, 1为同意, 2为拒绝", + "description": "fromUserID同意/拒绝的用户ID\u003cbr\u003etoUserID为申请用户D\u003cbr\u003ehandleMsg为处理信息\u003cbr\u003eflag为具体操作, 1为同意, 2为拒绝", "name": "req", "in": "body", "required": true, @@ -382,13 +398,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AddFriendResponseResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AddFriendResponseResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -417,7 +433,7 @@ const docTemplate = `{ "required": true }, { - "description": "fromUserID为操作用户, toUserID为被删除用户", + "description": "fromUserID为操作用户\u003cbr\u003etoUserID为被删除用户", "name": "req", "in": "body", "required": true, @@ -436,13 +452,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -484,19 +500,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetBlackListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetBlackListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.PublicUserInfo" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetBlackListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetBlackListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } } } @@ -538,19 +569,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetFriendApplyListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.FriendRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetFriendApplyListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetFriendApplyListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } } } @@ -592,19 +638,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetFriendListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetFriendListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.FriendInfo" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetFriendListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetFriendListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -646,19 +707,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetSelfApplyListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.FriendRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetSelfApplyListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetSelfApplyListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -687,7 +763,7 @@ const docTemplate = `{ "required": true }, { - "description": "fromUserID批量加好友的用户ID, friendUserIDList为", + "description": "fromUserID批量加好友的用户ID\u003cbr\u003e friendUserIDList为", "name": "req", "in": "body", "required": true, @@ -698,7 +774,7 @@ const docTemplate = `{ ], "responses": { "0": { - "description": "data列表中对象的result-1为添加该用户失败, 0为成功", + "description": "data列表中对象的result-1为添加该用户失败\u003cbr\u003e0为成功", "schema": { "$ref": "#/definitions/base_info.ImportFriendResp" } @@ -706,13 +782,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ImportFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ImportFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -741,7 +817,7 @@ const docTemplate = `{ "required": true }, { - "description": "fromUserID为请求用户, toUserID为要检查的用户", + "description": "fromUserID为请求用户\u003cbr\u003e toUserID为要检查的用户", "name": "req", "in": "body", "required": true, @@ -760,13 +836,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.IsFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.IsFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -814,13 +890,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.RemoveBlackListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.RemoveBlackListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -849,7 +925,7 @@ const docTemplate = `{ "required": true }, { - "description": "fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注", + "description": "fromUserID为设置的用户\u003cbr\u003e toUserID为被设置的用户\u003cbr\u003e remark为好友备注", "name": "req", "in": "body", "required": true, @@ -868,13 +944,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetFriendRemarkResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetFriendRemarkResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -922,13 +998,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -976,13 +1052,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1011,7 +1087,7 @@ const docTemplate = `{ "required": true }, { - "description": "ownerUserID为群主ID \u003cbr\u003e ex为群扩展字段 \u003cbr\u003e roleLevel为群员角色,1为普通用户 2为群主 3为管理员", + "description": "groupType这里填0代表普通群 \u003cbr\u003egroupName为群名称\u003cbr\u003e introduction为群介绍\u003cbr\u003e notification为群公共\u003cbr\u003eownerUserID为群主ID \u003cbr\u003e ex为群扩展字段 \u003cbr\u003e memberList中对象roleLevel为群员角色,1为普通用户 2为群主 3为管理员", "name": "req", "in": "body", "required": true, @@ -1042,13 +1118,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1096,13 +1172,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1165,13 +1241,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1200,7 +1276,7 @@ const docTemplate = `{ "required": true }, { - "description": "memberList为要获取群成员的群ID列表", + "description": "groupID为要获取的群ID \u003cbr\u003e memberList为要获取群成员的群ID列表", "name": "req", "in": "body", "required": true, @@ -1234,13 +1310,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1288,13 +1364,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1357,13 +1433,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1405,19 +1481,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1459,19 +1550,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1519,13 +1625,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1573,13 +1679,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.InviteUserToGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.InviteUserToGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1608,7 +1714,7 @@ const docTemplate = `{ "required": true }, { - "description": "reqMessage为申请进群信息", + "description": "reqMessage为申请进群信息\u003cbr\u003egroupID为申请的群ID", "name": "req", "in": "body", "required": true, @@ -1627,13 +1733,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.JoinGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.JoinGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1681,13 +1787,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.KickGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.KickGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1789,13 +1895,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1803,7 +1909,7 @@ const docTemplate = `{ }, "/group/quit_group": { "post": { - "description": "退出群聊", + "description": "当前用户退出群聊", "consumes": [ "application/json" ], @@ -1813,7 +1919,7 @@ const docTemplate = `{ "tags": [ "群组相关" ], - "summary": "退出群聊", + "summary": "当前用户退出群聊", "operationId": "QuitGroup", "parameters": [ { @@ -1843,13 +1949,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.QuitGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.QuitGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1878,7 +1984,7 @@ const docTemplate = `{ "required": true }, { - "description": "notification为群介绍 \u003cbr\u003e introduction为群公告 \u003cbr\u003e needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群", + "description": "groupID为要修改的群ID\u003cbr\u003egroupName为新的群名称\u003cbr\u003enotification为群介绍 \u003cbr\u003e introduction为群公告 \u003cbr\u003e needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群", "name": "req", "in": "body", "required": true, @@ -1897,13 +2003,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1932,7 +2038,7 @@ const docTemplate = `{ "required": true }, { - "description": "除了operationID, userID, groupID其他参数可选", + "description": "除了operationID, userID, groupID其他参数可选\u003cbr\u003eex为拓展字段\u003cbr\u003efaceURL为群头像\u003cbr\u003enickName为群昵称\u003cbr\u003eroleLevel为群员角色,1为普通用户 2为群主 3为管理员", "name": "req", "in": "body", "required": true, @@ -1951,13 +2057,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2005,13 +2111,100 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + "$ref": "#/definitions/base_info.Swagger500Resp" + } + } + } + } + }, + "/msg/batch_send_msg": { + "post": { + "description": "管理员批量发送群聊单聊消息 消息格式详细见\u003ca href=\"https://doc.rentsoft.cn/#/server_doc/admin?id=%e6%b6%88%e6%81%af%e7%b1%bb%e5%9e%8b%e6%a0%bc%e5%bc%8f%e6%8f%8f%e8%bf%b0\"\u003e消息格式\u003c/href\u003e", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "管理员批量发送群聊单聊消息", + "operationId": "ManagementBatchSendMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "该请求和消息结构体一样 \u003cbr\u003e recvIDList为接受消息的用户ID列表", + "name": "管理员批量发送单聊消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.TextElem" + } + } + } + ] + } + }, + { + "description": "该请求和消息结构体一样 \u003cbr\u003e recvIDList为接受消息的用户ID列表", + "name": "管理员批量发送OA通知", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.OANotificationElem" + } + } + } + ] + } + } + ], + "responses": { + "0": { + "description": "serverMsgID为服务器消息ID \u003cbr\u003e clientMsgID为客户端消息ID \u003cbr\u003e sendTime为发送消息时间", + "schema": { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" } } } @@ -2059,13 +2252,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CleanUpMsgResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CleanUpMsgResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2113,13 +2306,283 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DelMsgResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DelMsgResp" + "$ref": "#/definitions/base_info.Swagger500Resp" + } + } + } + } + }, + "/msg/get_all_conversations": { + "post": { + "description": "获取用户所有会话", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会话相关" + ], + "summary": "获取用户所有会话", + "operationId": "GetAllConversations", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsResp" + } + } + } + } + }, + "/msg/get_conversation": { + "post": { + "description": "根据会话ID获取会话", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会话相关" + ], + "summary": "根据会话ID获取会话", + "operationId": "GetConversation", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为要获取的用户ID\u003cbr\u003econversationID为要获取的会话ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetConversationReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetConversationResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetConversationResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetConversationResp" + } + } + } + } + }, + "/msg/get_conversations": { + "post": { + "description": "根据会话ID列表获取会话", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会话相关" + ], + "summary": "根据会话ID列表获取会话", + "operationId": "GetConversations", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为要获取的用户ID\u003cbr\u003econversationIDs为要获取的会话ID列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetConversationsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetConversationsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetConversationsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetConversationsResp" + } + } + } + } + }, + "/msg/manage_send_msg": { + "post": { + "description": "管理员发送/撤回消息 消息格式详细见\u003ca href=\"https://doc.rentsoft.cn/#/server_doc/admin?id=%e6%b6%88%e6%81%af%e7%b1%bb%e5%9e%8b%e6%a0%bc%e5%bc%8f%e6%8f%8f%e8%bf%b0\"\u003e消息格式\u003c/href\u003e", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "管理员发送/撤回消息", + "operationId": "ManagementSendMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "该请求和消息结构体一样", + "name": "管理员发送文字消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.TextElem" + } + } + } + ] + } + }, + { + "description": "该请求和消息结构体一样", + "name": "管理员发送OA通知消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.OANotificationElem" + } + } + } + ] + } + }, + { + "description": "该请求和消息结构体一样", + "name": "管理员撤回单聊消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.RevokeElem" + } + } + } + ] + } + } + ], + "responses": { + "0": { + "description": "serverMsgID为服务器消息ID \u003cbr\u003e clientMsgID为客户端消息ID \u003cbr\u003e sendTime为发送消息时间", + "schema": { + "$ref": "#/definitions/base_info.ManagementSendMsgResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ManagementSendMsgResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ManagementSendMsgResp" } } } @@ -2935,6 +3398,690 @@ const docTemplate = `{ } } }, + "/organization/create_department": { + "post": { + "description": "创建部门", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "创建部门", + "operationId": "CreateDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.CreateDepartmentResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.Department" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentResp" + } + } + } + } + }, + "/organization/create_department_member": { + "post": { + "description": "创建部门用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "创建部门用户", + "operationId": "CreateDepartmentMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + } + } + } + } + }, + "/organization/create_organization_user": { + "post": { + "description": "组织架构导入用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "组织架构导入用户", + "operationId": "CreateOrganizationUser", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + } + } + } + } + }, + "/organization/delete_department": { + "post": { + "description": "删除部门", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "删除部门", + "operationId": "DeleteDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentResp" + } + } + } + } + }, + "/organization/delete_organization_user": { + "post": { + "description": "删除组织架构中某个用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "删除组织架构中某个用户", + "operationId": "DeleteOrganizationUser", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + } + } + } + } + }, + "/organization/delete_user_in_department": { + "post": { + "description": "删除部门中某个用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "删除部门中某个用户", + "operationId": "DeleteUserInDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + } + } + } + } + }, + "/organization/get_department_member": { + "post": { + "description": "获取部门中所有成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "获取部门中所有成员", + "operationId": "GetDepartmentMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetDepartmentMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserDepartmentMember" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + } + } + } + } + }, + "/organization/get_sub_department": { + "post": { + "description": "获取子部门列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "获取子部门列表", + "operationId": "GetSubDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + } + } + } + } + }, + "/organization/get_user_in_department": { + "post": { + "description": "获取部门中的所有用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "获取部门中的所有用户", + "operationId": "GetUserInDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserInDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserInDepartment" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + } + } + } + } + }, + "/organization/update_department": { + "post": { + "description": "更新部门信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "更新部门信息", + "operationId": "UpdateDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentResp" + } + } + } + } + }, + "/organization/update_organization_user": { + "post": { + "description": "更新组织架构中的用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "更新组织架构中的用户", + "operationId": "UpdateOrganizationUser", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + } + } + } + } + }, + "/organization/update_user_in_department": { + "post": { + "description": "更新部门中某个用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "更新部门中某个用户", + "operationId": "UpdateUserInDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + } + } + } + } + }, "/third/minio_upload": { "post": { "description": "minio上传文件(web api), 请注意本api请求为form并非json", @@ -2989,13 +4136,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.MinioUploadFileResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.MinioUploadFileResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3163,13 +4310,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3211,19 +4358,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetUsersInfoResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + }, + { + "type": "object", + "properties": { + "Data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.PublicUserInfo" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUsersInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUsersInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3271,13 +4433,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3306,7 +4468,7 @@ const docTemplate = `{ "required": true }, { - "description": "请求体", + "description": "globalRecvMsgOpt为全局免打扰设置0为关闭 1为开启", "name": "req", "in": "body", "required": true, @@ -3325,13 +4487,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3379,13 +4541,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3393,6 +4555,193 @@ const docTemplate = `{ } }, "definitions": { + "Open_IM_internal_api_manage.FileElem": { + "type": "object", + "properties": { + "fileName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileSize": { + "type": "integer" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.OANotificationElem": { + "type": "object", + "required": [ + "notificationFaceURL", + "notificationName", + "notificationType", + "text" + ], + "properties": { + "ex": { + "type": "string" + }, + "fileElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.FileElem" + }, + "mixType": { + "type": "integer" + }, + "notificationFaceURL": { + "type": "string" + }, + "notificationName": { + "type": "string" + }, + "notificationType": { + "type": "integer" + }, + "pictureElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureElem" + }, + "soundElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.SoundElem" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" + }, + "videoElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.VideoElem" + } + } + }, + "Open_IM_internal_api_manage.PictureBaseInfo": { + "type": "object", + "properties": { + "height": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + }, + "uuid": { + "type": "string" + }, + "width": { + "type": "integer" + } + } + }, + "Open_IM_internal_api_manage.PictureElem": { + "type": "object", + "properties": { + "bigPicture": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureBaseInfo" + }, + "snapshotPicture": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureBaseInfo" + }, + "sourcePath": { + "type": "string" + }, + "sourcePicture": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureBaseInfo" + } + } + }, + "Open_IM_internal_api_manage.RevokeElem": { + "type": "object", + "required": [ + "revokeMsgClientID" + ], + "properties": { + "revokeMsgClientID": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.SoundElem": { + "type": "object", + "properties": { + "dataSize": { + "type": "integer" + }, + "duration": { + "type": "integer" + }, + "soundPath": { + "type": "string" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.TextElem": { + "type": "object", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.VideoElem": { + "type": "object", + "properties": { + "duration": { + "type": "integer" + }, + "snapshotHeight": { + "type": "integer" + }, + "snapshotPath": { + "type": "string" + }, + "snapshotSize": { + "type": "integer" + }, + "snapshotURL": { + "type": "string" + }, + "snapshotUUID": { + "type": "string" + }, + "snapshotWidth": { + "type": "integer" + }, + "videoPath": { + "type": "string" + }, + "videoSize": { + "type": "integer" + }, + "videoType": { + "type": "string" + }, + "videoURL": { + "type": "string" + }, + "videoUUID": { + "type": "string" + } + } + }, "base_info.AccountCheckReq": { "type": "object", "required": [ @@ -3720,6 +5069,162 @@ const docTemplate = `{ } } }, + "base_info.Conversation": { + "type": "object", + "required": [ + "conversationID", + "conversationType", + "ownerUserID" + ], + "properties": { + "attachedInfo": { + "type": "string" + }, + "conversationID": { + "type": "string" + }, + "conversationType": { + "type": "integer" + }, + "draftTextTime": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "groupAtType": { + "type": "integer" + }, + "groupID": { + "type": "string" + }, + "isNotInGroup": { + "type": "boolean" + }, + "isPinned": { + "type": "boolean" + }, + "isPrivateChat": { + "type": "boolean" + }, + "ownerUserID": { + "type": "string" + }, + "recvMsgOpt": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "unreadCount": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CreateDepartmentMemberReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "leader": { + "type": "integer" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CreateDepartmentMemberResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CreateDepartmentReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "createTime": { + "type": "integer" + }, + "departmentID": { + "type": "string" + }, + "departmentType": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "memberNum": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "parentID": { + "type": "string" + }, + "subDepartmentNum": { + "type": "integer" + } + } + }, + "base_info.CreateDepartmentResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.CreateGroupReq": { "type": "object", "required": [ @@ -3797,6 +5302,61 @@ const docTemplate = `{ } } }, + "base_info.CreateOrganizationUserReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "englishName": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "mobile": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CreateOrganizationUserResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.CreateTagReq": { "type": "object", "required": [ @@ -3898,6 +5458,32 @@ const docTemplate = `{ } } }, + "base_info.DeleteDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.DeleteDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteFriendReq": { "type": "object", "required": [ @@ -3957,6 +5543,32 @@ const docTemplate = `{ } } }, + "base_info.DeleteOrganizationUserReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.DeleteOrganizationUserResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteTagReq": { "type": "object", "required": [ @@ -3983,6 +5595,36 @@ const docTemplate = `{ } } }, + "base_info.DeleteUserInDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID", + "userID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.DeleteUserInDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DismissGroupReq": { "type": "object", "required": [ @@ -4009,6 +5651,14 @@ const docTemplate = `{ } } }, + "base_info.ExpireTime": { + "type": "object", + "properties": { + "expireTimeSeconds": { + "type": "integer" + } + } + }, "base_info.ForceLogoutReq": { "type": "object", "required": [ @@ -4043,6 +5693,38 @@ const docTemplate = `{ } } }, + "base_info.GetAllConversationsReq": { + "type": "object", + "required": [ + "operationID", + "ownerUserID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.GetAllConversationsResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.Conversation" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetAllUsersUidReq": { "type": "object", "required": [ @@ -4087,6 +5769,104 @@ const docTemplate = `{ } }, "base_info.GetBlackListResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetConversationReq": { + "type": "object", + "required": [ + "conversationID", + "operationID", + "ownerUserID" + ], + "properties": { + "conversationID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.GetConversationResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.Conversation" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetConversationsReq": { + "type": "object", + "required": [ + "conversationIDs", + "operationID", + "ownerUserID" + ], + "properties": { + "conversationIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.GetConversationsResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.Conversation" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetDepartmentMemberReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetDepartmentMemberResp": { "type": "object", "properties": { "data": { @@ -4122,13 +5902,6 @@ const docTemplate = `{ "base_info.GetFriendApplyListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4155,13 +5928,6 @@ const docTemplate = `{ "base_info.GetFriendListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4188,13 +5954,6 @@ const docTemplate = `{ "base_info.GetGroupAllMemberResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4222,13 +5981,6 @@ const docTemplate = `{ "base_info.GetGroupApplicationListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4258,13 +6010,6 @@ const docTemplate = `{ "base_info.GetGroupInfoResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4298,13 +6043,6 @@ const docTemplate = `{ "base_info.GetGroupMembersInfoResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4331,13 +6069,6 @@ const docTemplate = `{ "base_info.GetJoinedGroupListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4364,13 +6095,6 @@ const docTemplate = `{ "base_info.GetSelfApplyListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4405,6 +6129,39 @@ const docTemplate = `{ } } }, + "base_info.GetSubDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetSubDepartmentResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetTagSendLogsReq": { "type": "object", "required": [ @@ -4499,6 +6256,36 @@ const docTemplate = `{ } } }, + "base_info.GetUserInDepartmentReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.GetUserInDepartmentResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetUserReqGroupApplicationListReq": { "type": "object", "required": [ @@ -4959,19 +6746,135 @@ const docTemplate = `{ } } }, + "base_info.ManagementBatchSendMsgReq": { + "type": "object", + "required": [ + "contentType", + "operationID", + "sendID", + "sessionType" + ], + "properties": { + "contentType": { + "type": "integer" + }, + "groupID": { + "type": "string" + }, + "isOnlineOnly": { + "type": "boolean" + }, + "offlinePushInfo": { + "$ref": "#/definitions/server_api_params.OfflinePushInfo" + }, + "operationID": { + "type": "string" + }, + "recvIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "sendID": { + "type": "string" + }, + "senderFaceURL": { + "type": "string" + }, + "senderNickname": { + "type": "string" + }, + "senderPlatformID": { + "type": "integer" + }, + "sessionType": { + "type": "integer" + } + } + }, + "base_info.ManagementSendMsgReq": { + "type": "object", + "required": [ + "contentType", + "operationID", + "sendID", + "sessionType" + ], + "properties": { + "contentType": { + "type": "integer" + }, + "groupID": { + "type": "string" + }, + "isOnlineOnly": { + "type": "boolean" + }, + "offlinePushInfo": { + "$ref": "#/definitions/server_api_params.OfflinePushInfo" + }, + "operationID": { + "type": "string" + }, + "recvID": { + "type": "string" + }, + "sendID": { + "type": "string" + }, + "senderFaceURL": { + "type": "string" + }, + "senderNickname": { + "type": "string" + }, + "senderPlatformID": { + "type": "integer" + }, + "sessionType": { + "type": "integer" + } + } + }, + "base_info.ManagementSendMsgResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserSendMsgResp" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.MinioUploadFileResp": { "type": "object", "properties": { - "URL": { - "type": "string" + "data": { + "type": "object", + "properties": { + "URL": { + "type": "string" + }, + "newName": { + "type": "string" + }, + "snapshotName": { + "type": "string" + }, + "snapshotURL": { + "type": "string" + } + } }, - "newName": { - "type": "string" + "errCode": { + "type": "integer" }, - "snapshotName": { - "type": "string" - }, - "snapshotURL": { + "errMsg": { "type": "string" } } @@ -5039,10 +6942,6 @@ const docTemplate = `{ "base_info.ParseTokenResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, @@ -5356,6 +7255,32 @@ const docTemplate = `{ } } }, + "base_info.Swagger400Resp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer", + "example": 400 + }, + "errMsg": { + "type": "string", + "example": "err msg" + } + } + }, + "base_info.Swagger500Resp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer", + "example": 500 + }, + "errMsg": { + "type": "string", + "example": "err msg" + } + } + }, "base_info.TransferGroupOwnerReq": { "type": "object", "required": [ @@ -5390,6 +7315,114 @@ const docTemplate = `{ } } }, + "base_info.UpdateDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "createTime": { + "type": "integer" + }, + "departmentID": { + "type": "string" + }, + "departmentType": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "memberNum": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "parentID": { + "type": "string" + }, + "subDepartmentNum": { + "type": "integer" + } + } + }, + "base_info.UpdateDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.UpdateOrganizationUserReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "englishName": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "mobile": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UpdateOrganizationUserResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateSelfUserInfoReq": { "type": "object", "required": [ @@ -5439,6 +7472,49 @@ const docTemplate = `{ } } }, + "base_info.UpdateUserInDepartmentReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "leader": { + "type": "integer" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UpdateUserInDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateUserInfoResp": { "type": "object", "properties": { @@ -5652,6 +7728,193 @@ const docTemplate = `{ } } }, + "internal_api_manage.FileElem": { + "type": "object", + "properties": { + "fileName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileSize": { + "type": "integer" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "internal_api_manage.OANotificationElem": { + "type": "object", + "required": [ + "notificationFaceURL", + "notificationName", + "notificationType", + "text" + ], + "properties": { + "ex": { + "type": "string" + }, + "fileElem": { + "$ref": "#/definitions/internal_api_manage.FileElem" + }, + "mixType": { + "type": "integer" + }, + "notificationFaceURL": { + "type": "string" + }, + "notificationName": { + "type": "string" + }, + "notificationType": { + "type": "integer" + }, + "pictureElem": { + "$ref": "#/definitions/internal_api_manage.PictureElem" + }, + "soundElem": { + "$ref": "#/definitions/internal_api_manage.SoundElem" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" + }, + "videoElem": { + "$ref": "#/definitions/internal_api_manage.VideoElem" + } + } + }, + "internal_api_manage.PictureBaseInfo": { + "type": "object", + "properties": { + "height": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + }, + "uuid": { + "type": "string" + }, + "width": { + "type": "integer" + } + } + }, + "internal_api_manage.PictureElem": { + "type": "object", + "properties": { + "bigPicture": { + "$ref": "#/definitions/internal_api_manage.PictureBaseInfo" + }, + "snapshotPicture": { + "$ref": "#/definitions/internal_api_manage.PictureBaseInfo" + }, + "sourcePath": { + "type": "string" + }, + "sourcePicture": { + "$ref": "#/definitions/internal_api_manage.PictureBaseInfo" + } + } + }, + "internal_api_manage.RevokeElem": { + "type": "object", + "required": [ + "revokeMsgClientID" + ], + "properties": { + "revokeMsgClientID": { + "type": "string" + } + } + }, + "internal_api_manage.SoundElem": { + "type": "object", + "properties": { + "dataSize": { + "type": "integer" + }, + "duration": { + "type": "integer" + }, + "soundPath": { + "type": "string" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "internal_api_manage.TextElem": { + "type": "object", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string" + } + } + }, + "internal_api_manage.VideoElem": { + "type": "object", + "properties": { + "duration": { + "type": "integer" + }, + "snapshotHeight": { + "type": "integer" + }, + "snapshotPath": { + "type": "string" + }, + "snapshotSize": { + "type": "integer" + }, + "snapshotURL": { + "type": "string" + }, + "snapshotUUID": { + "type": "string" + }, + "snapshotWidth": { + "type": "integer" + }, + "videoPath": { + "type": "string" + }, + "videoSize": { + "type": "integer" + }, + "videoType": { + "type": "string" + }, + "videoURL": { + "type": "string" + }, + "videoUUID": { + "type": "string" + } + } + }, "office.Comment": { "type": "object", "properties": { @@ -5832,6 +8095,143 @@ const docTemplate = `{ } } }, + "server_api_params.Department": { + "type": "object", + "properties": { + "createTime": { + "type": "integer" + }, + "departmentID": { + "type": "string" + }, + "departmentType": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "memberNum": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "parentID": { + "type": "string" + }, + "subDepartmentNum": { + "type": "integer" + } + } + }, + "server_api_params.DepartmentMember": { + "type": "object", + "properties": { + "departmentID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "leader": { + "type": "integer" + }, + "order": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.FriendInfo": { + "type": "object", + "properties": { + "addSource": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "friendUser": { + "$ref": "#/definitions/server_api_params.UserInfo" + }, + "operatorUserID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + }, + "remark": { + "type": "string" + } + } + }, + "server_api_params.FriendRequest": { + "type": "object", + "properties": { + "createTime": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "fromFaceURL": { + "type": "string" + }, + "fromGender": { + "type": "integer" + }, + "fromNickname": { + "type": "string" + }, + "fromUserID": { + "type": "string" + }, + "handleMsg": { + "type": "string" + }, + "handleResult": { + "type": "integer" + }, + "handleTime": { + "type": "integer" + }, + "handlerUserID": { + "type": "string" + }, + "reqMsg": { + "type": "string" + }, + "toFaceURL": { + "type": "string" + }, + "toGender": { + "type": "integer" + }, + "toNickname": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, "server_api_params.GroupInfo": { "type": "object", "properties": { @@ -5863,7 +8263,7 @@ const docTemplate = `{ "type": "integer" }, "needVerification": { - "$ref": "#/definitions/wrapperspb.Int32Value" + "type": "integer" }, "notification": { "type": "string" @@ -5914,6 +8314,141 @@ const docTemplate = `{ } } }, + "server_api_params.GroupRequest": { + "type": "object", + "properties": { + "ex": { + "type": "string" + }, + "groupInfo": { + "$ref": "#/definitions/server_api_params.GroupInfo" + }, + "handleMsg": { + "type": "string" + }, + "handleResult": { + "type": "integer" + }, + "handleTime": { + "type": "integer" + }, + "handleUserID": { + "type": "string" + }, + "reqMsg": { + "type": "string" + }, + "reqTime": { + "type": "integer" + }, + "userInfo": { + "$ref": "#/definitions/server_api_params.PublicUserInfo" + } + } + }, + "server_api_params.OfflinePushInfo": { + "type": "object", + "properties": { + "desc": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "iOSBadgeCount": { + "type": "boolean" + }, + "iOSPushSound": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "server_api_params.OrganizationUser": { + "type": "object", + "properties": { + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "englishName": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "mobile": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.PublicUserInfo": { + "type": "object", + "properties": { + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.UserDepartmentMember": { + "type": "object", + "properties": { + "departmentMember": { + "$ref": "#/definitions/server_api_params.DepartmentMember" + }, + "organizationUser": { + "$ref": "#/definitions/server_api_params.OrganizationUser" + } + } + }, + "server_api_params.UserInDepartment": { + "type": "object", + "properties": { + "departmentMemberList": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.DepartmentMember" + } + }, + "organizationUser": { + "$ref": "#/definitions/server_api_params.OrganizationUser" + } + } + }, "server_api_params.UserInfo": { "type": "object", "properties": { @@ -5952,6 +8487,20 @@ const docTemplate = `{ } } }, + "server_api_params.UserSendMsgResp": { + "type": "object", + "properties": { + "clientMsgID": { + "type": "string" + }, + "sendTime": { + "type": "integer" + }, + "serverMsgID": { + "type": "string" + } + } + }, "user.AccountCheckResp_SingleUserStatus": { "type": "object", "properties": { @@ -5962,27 +8511,18 @@ const docTemplate = `{ "type": "string" } } - }, - "wrapperspb.Int32Value": { - "type": "object", - "properties": { - "value": { - "description": "The int32 value.", - "type": "integer" - } - } } } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ - Version: "", + Version: "1.0", Host: "", - BasePath: "", + BasePath: "/", Schemes: []string{}, - Title: "", - Description: "", + Title: "open-IM-Server API", + Description: "open-IM-Server 的API服务器文档, 文档中所有请求都有一个operationID字段用于链路追踪", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, } diff --git a/cmd/open_im_api/docs/swagger.json b/cmd/open_im_api/docs/swagger.json index ff3c03dc5..6e03a6912 100644 --- a/cmd/open_im_api/docs/swagger.json +++ b/cmd/open_im_api/docs/swagger.json @@ -1,8 +1,16 @@ { "swagger": "2.0", "info": { - "contact": {} + "description": "open-IM-Server 的API服务器文档, 文档中所有请求都有一个operationID字段用于链路追踪", + "title": "open-IM-Server API", + "contact": {}, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "1.0" }, + "basePath": "/", "paths": { "/auth/force_logout": { "post": { @@ -27,7 +35,7 @@ "required": true }, { - "description": "platform为平台ID, fromUserID为要执行强制登出的用户ID", + "description": "platform为平台ID \u003cbr\u003e fromUserID为要执行强制登出的用户ID", "name": "req", "in": "body", "required": true, @@ -46,13 +54,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ForceLogoutResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ForceLogoutResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -60,7 +68,7 @@ }, "/auth/parse_token": { "post": { - "description": "解析用户token", + "description": "解析当前用户token(token在请求头中传入)", "consumes": [ "application/json" ], @@ -70,7 +78,7 @@ "tags": [ "鉴权认证" ], - "summary": "解析token", + "summary": "解析当前用户token", "operationId": "ParseToken", "parameters": [ { @@ -81,7 +89,7 @@ "required": true }, { - "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段\u003cbr\u003eplatform为平台ID", "name": "req", "in": "body", "required": true, @@ -94,19 +102,31 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.ParseTokenResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.ParseTokenResp" + }, + { + "type": "object", + "properties": { + "Data": { + "$ref": "#/definitions/base_info.ExpireTime" + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ParseTokenResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ParseTokenResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -114,7 +134,7 @@ }, "/auth/user_register": { "post": { - "description": "用户登录", + "description": "用户注册", "consumes": [ "application/json" ], @@ -124,7 +144,7 @@ "tags": [ "鉴权认证" ], - "summary": "用户登录", + "summary": "用户注册", "operationId": "UserRegister", "parameters": [ { @@ -135,7 +155,7 @@ "required": true }, { - "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID \u003cbr\u003e ex为拓展字段", + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID \u003cbr\u003e ex为拓展字段 \u003cbr\u003e gender为性别, 0为女, 1为男", "name": "req", "in": "body", "required": true, @@ -154,13 +174,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UserRegisterResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UserRegisterResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -189,7 +209,7 @@ "required": true }, { - "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID", + "description": "secret为openIM密钥, 详细见服务端config.yaml secret字段 \u003cbr\u003e platform为平台ID", "name": "req", "in": "body", "required": true, @@ -208,13 +228,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UserTokenResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UserTokenResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -243,7 +263,7 @@ "required": true }, { - "description": "fromUserID为设置的用户, toUserID为被设置的用户", + "description": "fromUserID为设置的用户 \u003cbr\u003e toUserID为被设置的用户", "name": "req", "in": "body", "required": true, @@ -262,13 +282,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AddBlacklistResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AddBlacklistResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -297,7 +317,7 @@ "required": true }, { - "description": "reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户", + "description": "reqMsg为申请信息 \u003cbr\u003e fromUserID为申请用户 \u003cbr\u003e toUserID为被添加用户", "name": "req", "in": "body", "required": true, @@ -316,13 +336,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AddFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AddFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -351,7 +371,7 @@ "required": true }, { - "description": "fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, 1为同意, 2为拒绝", + "description": "fromUserID同意/拒绝的用户ID\u003cbr\u003etoUserID为申请用户D\u003cbr\u003ehandleMsg为处理信息\u003cbr\u003eflag为具体操作, 1为同意, 2为拒绝", "name": "req", "in": "body", "required": true, @@ -370,13 +390,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AddFriendResponseResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AddFriendResponseResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -405,7 +425,7 @@ "required": true }, { - "description": "fromUserID为操作用户, toUserID为被删除用户", + "description": "fromUserID为操作用户\u003cbr\u003etoUserID为被删除用户", "name": "req", "in": "body", "required": true, @@ -424,13 +444,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -472,19 +492,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetBlackListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetBlackListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.PublicUserInfo" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetBlackListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetBlackListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } } } @@ -526,19 +561,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetFriendApplyListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetFriendApplyListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.FriendRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetFriendApplyListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetFriendApplyListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } } } @@ -580,19 +630,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetFriendListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetFriendListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.FriendInfo" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetFriendListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetFriendListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -634,19 +699,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetSelfApplyListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetSelfApplyListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.FriendRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetSelfApplyListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetSelfApplyListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -675,7 +755,7 @@ "required": true }, { - "description": "fromUserID批量加好友的用户ID, friendUserIDList为", + "description": "fromUserID批量加好友的用户ID\u003cbr\u003e friendUserIDList为", "name": "req", "in": "body", "required": true, @@ -686,7 +766,7 @@ ], "responses": { "0": { - "description": "data列表中对象的result-1为添加该用户失败, 0为成功", + "description": "data列表中对象的result-1为添加该用户失败\u003cbr\u003e0为成功", "schema": { "$ref": "#/definitions/base_info.ImportFriendResp" } @@ -694,13 +774,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ImportFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ImportFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -729,7 +809,7 @@ "required": true }, { - "description": "fromUserID为请求用户, toUserID为要检查的用户", + "description": "fromUserID为请求用户\u003cbr\u003e toUserID为要检查的用户", "name": "req", "in": "body", "required": true, @@ -748,13 +828,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.IsFriendResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.IsFriendResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -802,13 +882,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.RemoveBlackListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.RemoveBlackListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -837,7 +917,7 @@ "required": true }, { - "description": "fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注", + "description": "fromUserID为设置的用户\u003cbr\u003e toUserID为被设置的用户\u003cbr\u003e remark为好友备注", "name": "req", "in": "body", "required": true, @@ -856,13 +936,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetFriendRemarkResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetFriendRemarkResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -910,13 +990,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -964,13 +1044,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CancelMuteGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -999,7 +1079,7 @@ "required": true }, { - "description": "ownerUserID为群主ID \u003cbr\u003e ex为群扩展字段 \u003cbr\u003e roleLevel为群员角色,1为普通用户 2为群主 3为管理员", + "description": "groupType这里填0代表普通群 \u003cbr\u003egroupName为群名称\u003cbr\u003e introduction为群介绍\u003cbr\u003e notification为群公共\u003cbr\u003eownerUserID为群主ID \u003cbr\u003e ex为群扩展字段 \u003cbr\u003e memberList中对象roleLevel为群员角色,1为普通用户 2为群主 3为管理员", "name": "req", "in": "body", "required": true, @@ -1030,13 +1110,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1084,13 +1164,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1153,13 +1233,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupAllMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1188,7 +1268,7 @@ "required": true }, { - "description": "memberList为要获取群成员的群ID列表", + "description": "groupID为要获取的群ID \u003cbr\u003e memberList为要获取群成员的群ID列表", "name": "req", "in": "body", "required": true, @@ -1222,13 +1302,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupMembersInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1276,13 +1356,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1345,13 +1425,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetJoinedGroupListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1393,19 +1473,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1447,19 +1542,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.GroupRequest" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetGroupApplicationListResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1507,13 +1617,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.ApplicationGroupResponseResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1561,13 +1671,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.InviteUserToGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.InviteUserToGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1596,7 +1706,7 @@ "required": true }, { - "description": "reqMessage为申请进群信息", + "description": "reqMessage为申请进群信息\u003cbr\u003egroupID为申请的群ID", "name": "req", "in": "body", "required": true, @@ -1615,13 +1725,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.JoinGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.JoinGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1669,13 +1779,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.KickGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.KickGroupMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1777,13 +1887,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DismissGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1791,7 +1901,7 @@ }, "/group/quit_group": { "post": { - "description": "退出群聊", + "description": "当前用户退出群聊", "consumes": [ "application/json" ], @@ -1801,7 +1911,7 @@ "tags": [ "群组相关" ], - "summary": "退出群聊", + "summary": "当前用户退出群聊", "operationId": "QuitGroup", "parameters": [ { @@ -1831,13 +1941,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.QuitGroupResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.QuitGroupResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1866,7 +1976,7 @@ "required": true }, { - "description": "notification为群介绍 \u003cbr\u003e introduction为群公告 \u003cbr\u003e needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群", + "description": "groupID为要修改的群ID\u003cbr\u003egroupName为新的群名称\u003cbr\u003enotification为群介绍 \u003cbr\u003e introduction为群公告 \u003cbr\u003e needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群", "name": "req", "in": "body", "required": true, @@ -1885,13 +1995,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetGroupInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1920,7 +2030,7 @@ "required": true }, { - "description": "除了operationID, userID, groupID其他参数可选", + "description": "除了operationID, userID, groupID其他参数可选\u003cbr\u003eex为拓展字段\u003cbr\u003efaceURL为群头像\u003cbr\u003enickName为群昵称\u003cbr\u003eroleLevel为群员角色,1为普通用户 2为群主 3为管理员", "name": "req", "in": "body", "required": true, @@ -1939,13 +2049,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetGroupMemberInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -1993,13 +2103,100 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.TransferGroupOwnerResp" + "$ref": "#/definitions/base_info.Swagger500Resp" + } + } + } + } + }, + "/msg/batch_send_msg": { + "post": { + "description": "管理员批量发送群聊单聊消息 消息格式详细见\u003ca href=\"https://doc.rentsoft.cn/#/server_doc/admin?id=%e6%b6%88%e6%81%af%e7%b1%bb%e5%9e%8b%e6%a0%bc%e5%bc%8f%e6%8f%8f%e8%bf%b0\"\u003e消息格式\u003c/href\u003e", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "管理员批量发送群聊单聊消息", + "operationId": "ManagementBatchSendMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "该请求和消息结构体一样 \u003cbr\u003e recvIDList为接受消息的用户ID列表", + "name": "管理员批量发送单聊消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.TextElem" + } + } + } + ] + } + }, + { + "description": "该请求和消息结构体一样 \u003cbr\u003e recvIDList为接受消息的用户ID列表", + "name": "管理员批量发送OA通知", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.OANotificationElem" + } + } + } + ] + } + } + ], + "responses": { + "0": { + "description": "serverMsgID为服务器消息ID \u003cbr\u003e clientMsgID为客户端消息ID \u003cbr\u003e sendTime为发送消息时间", + "schema": { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ManagementBatchSendMsgReq" } } } @@ -2047,13 +2244,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CleanUpMsgResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CleanUpMsgResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2101,13 +2298,283 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DelMsgResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DelMsgResp" + "$ref": "#/definitions/base_info.Swagger500Resp" + } + } + } + } + }, + "/msg/get_all_conversations": { + "post": { + "description": "获取用户所有会话", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会话相关" + ], + "summary": "获取用户所有会话", + "operationId": "GetAllConversations", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为要获取的用户ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetAllConversationsResp" + } + } + } + } + }, + "/msg/get_conversation": { + "post": { + "description": "根据会话ID获取会话", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会话相关" + ], + "summary": "根据会话ID获取会话", + "operationId": "GetConversation", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为要获取的用户ID\u003cbr\u003econversationID为要获取的会话ID", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetConversationReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetConversationResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetConversationResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetConversationResp" + } + } + } + } + }, + "/msg/get_conversations": { + "post": { + "description": "根据会话ID列表获取会话", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会话相关" + ], + "summary": "根据会话ID列表获取会话", + "operationId": "GetConversations", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "ownerUserID为要获取的用户ID\u003cbr\u003econversationIDs为要获取的会话ID列表", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetConversationsReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetConversationsResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetConversationsResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetConversationsResp" + } + } + } + } + }, + "/msg/manage_send_msg": { + "post": { + "description": "管理员发送/撤回消息 消息格式详细见\u003ca href=\"https://doc.rentsoft.cn/#/server_doc/admin?id=%e6%b6%88%e6%81%af%e7%b1%bb%e5%9e%8b%e6%a0%bc%e5%bc%8f%e6%8f%8f%e8%bf%b0\"\u003e消息格式\u003c/href\u003e", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息相关" + ], + "summary": "管理员发送/撤回消息", + "operationId": "ManagementSendMsg", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "该请求和消息结构体一样", + "name": "管理员发送文字消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.TextElem" + } + } + } + ] + } + }, + { + "description": "该请求和消息结构体一样", + "name": "管理员发送OA通知消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.OANotificationElem" + } + } + } + ] + } + }, + { + "description": "该请求和消息结构体一样", + "name": "管理员撤回单聊消息", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.ManagementSendMsgReq" + }, + { + "type": "object", + "properties": { + "content": { + "$ref": "#/definitions/Open_IM_internal_api_manage.RevokeElem" + } + } + } + ] + } + } + ], + "responses": { + "0": { + "description": "serverMsgID为服务器消息ID \u003cbr\u003e clientMsgID为客户端消息ID \u003cbr\u003e sendTime为发送消息时间", + "schema": { + "$ref": "#/definitions/base_info.ManagementSendMsgResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.ManagementSendMsgResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.ManagementSendMsgResp" } } } @@ -2923,6 +3390,690 @@ } } }, + "/organization/create_department": { + "post": { + "description": "创建部门", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "创建部门", + "operationId": "CreateDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.CreateDepartmentResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.Department" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentResp" + } + } + } + } + }, + "/organization/create_department_member": { + "post": { + "description": "创建部门用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "创建部门用户", + "operationId": "CreateDepartmentMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + } + } + } + } + }, + "/organization/create_organization_user": { + "post": { + "description": "组织架构导入用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "组织架构导入用户", + "operationId": "CreateOrganizationUser", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + } + } + } + } + }, + "/organization/delete_department": { + "post": { + "description": "删除部门", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "删除部门", + "operationId": "DeleteDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteDepartmentResp" + } + } + } + } + }, + "/organization/delete_organization_user": { + "post": { + "description": "删除组织架构中某个用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "删除组织架构中某个用户", + "operationId": "DeleteOrganizationUser", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + } + } + } + } + }, + "/organization/delete_user_in_department": { + "post": { + "description": "删除部门中某个用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "删除部门中某个用户", + "operationId": "DeleteUserInDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + } + } + } + } + }, + "/organization/get_department_member": { + "post": { + "description": "获取部门中所有成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "获取部门中所有成员", + "operationId": "GetDepartmentMember", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetDepartmentMemberReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserDepartmentMember" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + } + } + } + } + }, + "/organization/get_sub_department": { + "post": { + "description": "获取子部门列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "获取子部门列表", + "operationId": "GetSubDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + } + } + } + } + }, + "/organization/get_user_in_department": { + "post": { + "description": "获取部门中的所有用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "获取部门中的所有用户", + "operationId": "GetUserInDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.GetUserInDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserInDepartment" + } + } + } + ] + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + } + } + } + } + }, + "/organization/update_department": { + "post": { + "description": "更新部门信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "更新部门信息", + "operationId": "UpdateDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateDepartmentResp" + } + } + } + } + }, + "/organization/update_organization_user": { + "post": { + "description": "更新组织架构中的用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "更新组织架构中的用户", + "operationId": "UpdateOrganizationUser", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + } + } + } + } + }, + "/organization/update_user_in_department": { + "post": { + "description": "更新部门中某个用户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "组织架构相关" + ], + "summary": "更新部门中某个用户", + "operationId": "UpdateUserInDepartment", + "parameters": [ + { + "type": "string", + "description": "im token", + "name": "token", + "in": "header", + "required": true + }, + { + "description": "请求", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentReq" + } + } + ], + "responses": { + "0": { + "description": "", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + } + }, + "400": { + "description": "errCode为400 一般为参数输入错误, token未带上等", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + } + }, + "500": { + "description": "errCode为500 一般为服务器内部错误", + "schema": { + "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + } + } + } + } + }, "/third/minio_upload": { "post": { "description": "minio上传文件(web api), 请注意本api请求为form并非json", @@ -2977,13 +4128,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.MinioUploadFileResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.MinioUploadFileResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3151,13 +4302,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetSelfUserInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3199,19 +4350,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetUsersInfoResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetUsersInfoResp" + }, + { + "type": "object", + "properties": { + "Data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.PublicUserInfo" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUsersInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUsersInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3259,13 +4425,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUsersOnlineStatusResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3294,7 +4460,7 @@ "required": true }, { - "description": "请求体", + "description": "globalRecvMsgOpt为全局免打扰设置0为关闭 1为开启", "name": "req", "in": "body", "required": true, @@ -3313,13 +4479,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetGlobalRecvMessageOptResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3367,13 +4533,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInfoResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInfoResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3381,6 +4547,193 @@ } }, "definitions": { + "Open_IM_internal_api_manage.FileElem": { + "type": "object", + "properties": { + "fileName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileSize": { + "type": "integer" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.OANotificationElem": { + "type": "object", + "required": [ + "notificationFaceURL", + "notificationName", + "notificationType", + "text" + ], + "properties": { + "ex": { + "type": "string" + }, + "fileElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.FileElem" + }, + "mixType": { + "type": "integer" + }, + "notificationFaceURL": { + "type": "string" + }, + "notificationName": { + "type": "string" + }, + "notificationType": { + "type": "integer" + }, + "pictureElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureElem" + }, + "soundElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.SoundElem" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" + }, + "videoElem": { + "$ref": "#/definitions/Open_IM_internal_api_manage.VideoElem" + } + } + }, + "Open_IM_internal_api_manage.PictureBaseInfo": { + "type": "object", + "properties": { + "height": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + }, + "uuid": { + "type": "string" + }, + "width": { + "type": "integer" + } + } + }, + "Open_IM_internal_api_manage.PictureElem": { + "type": "object", + "properties": { + "bigPicture": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureBaseInfo" + }, + "snapshotPicture": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureBaseInfo" + }, + "sourcePath": { + "type": "string" + }, + "sourcePicture": { + "$ref": "#/definitions/Open_IM_internal_api_manage.PictureBaseInfo" + } + } + }, + "Open_IM_internal_api_manage.RevokeElem": { + "type": "object", + "required": [ + "revokeMsgClientID" + ], + "properties": { + "revokeMsgClientID": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.SoundElem": { + "type": "object", + "properties": { + "dataSize": { + "type": "integer" + }, + "duration": { + "type": "integer" + }, + "soundPath": { + "type": "string" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.TextElem": { + "type": "object", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string" + } + } + }, + "Open_IM_internal_api_manage.VideoElem": { + "type": "object", + "properties": { + "duration": { + "type": "integer" + }, + "snapshotHeight": { + "type": "integer" + }, + "snapshotPath": { + "type": "string" + }, + "snapshotSize": { + "type": "integer" + }, + "snapshotURL": { + "type": "string" + }, + "snapshotUUID": { + "type": "string" + }, + "snapshotWidth": { + "type": "integer" + }, + "videoPath": { + "type": "string" + }, + "videoSize": { + "type": "integer" + }, + "videoType": { + "type": "string" + }, + "videoURL": { + "type": "string" + }, + "videoUUID": { + "type": "string" + } + } + }, "base_info.AccountCheckReq": { "type": "object", "required": [ @@ -3708,6 +5061,162 @@ } } }, + "base_info.Conversation": { + "type": "object", + "required": [ + "conversationID", + "conversationType", + "ownerUserID" + ], + "properties": { + "attachedInfo": { + "type": "string" + }, + "conversationID": { + "type": "string" + }, + "conversationType": { + "type": "integer" + }, + "draftTextTime": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "groupAtType": { + "type": "integer" + }, + "groupID": { + "type": "string" + }, + "isNotInGroup": { + "type": "boolean" + }, + "isPinned": { + "type": "boolean" + }, + "isPrivateChat": { + "type": "boolean" + }, + "ownerUserID": { + "type": "string" + }, + "recvMsgOpt": { + "type": "integer", + "enum": [ + 0, + 1, + 2 + ] + }, + "unreadCount": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CreateDepartmentMemberReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "leader": { + "type": "integer" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CreateDepartmentMemberResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.CreateDepartmentReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "createTime": { + "type": "integer" + }, + "departmentID": { + "type": "string" + }, + "departmentType": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "memberNum": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "parentID": { + "type": "string" + }, + "subDepartmentNum": { + "type": "integer" + } + } + }, + "base_info.CreateDepartmentResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.CreateGroupReq": { "type": "object", "required": [ @@ -3785,6 +5294,61 @@ } } }, + "base_info.CreateOrganizationUserReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "englishName": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "mobile": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.CreateOrganizationUserResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.CreateTagReq": { "type": "object", "required": [ @@ -3886,6 +5450,32 @@ } } }, + "base_info.DeleteDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.DeleteDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteFriendReq": { "type": "object", "required": [ @@ -3945,6 +5535,32 @@ } } }, + "base_info.DeleteOrganizationUserReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.DeleteOrganizationUserResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DeleteTagReq": { "type": "object", "required": [ @@ -3971,6 +5587,36 @@ } } }, + "base_info.DeleteUserInDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID", + "userID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.DeleteUserInDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.DismissGroupReq": { "type": "object", "required": [ @@ -3997,6 +5643,14 @@ } } }, + "base_info.ExpireTime": { + "type": "object", + "properties": { + "expireTimeSeconds": { + "type": "integer" + } + } + }, "base_info.ForceLogoutReq": { "type": "object", "required": [ @@ -4031,6 +5685,38 @@ } } }, + "base_info.GetAllConversationsReq": { + "type": "object", + "required": [ + "operationID", + "ownerUserID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.GetAllConversationsResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.Conversation" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetAllUsersUidReq": { "type": "object", "required": [ @@ -4075,6 +5761,104 @@ } }, "base_info.GetBlackListResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetConversationReq": { + "type": "object", + "required": [ + "conversationID", + "operationID", + "ownerUserID" + ], + "properties": { + "conversationID": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.GetConversationResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/base_info.Conversation" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetConversationsReq": { + "type": "object", + "required": [ + "conversationIDs", + "operationID", + "ownerUserID" + ], + "properties": { + "conversationIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "operationID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + } + } + }, + "base_info.GetConversationsResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/base_info.Conversation" + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.GetDepartmentMemberReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetDepartmentMemberResp": { "type": "object", "properties": { "data": { @@ -4110,13 +5894,6 @@ "base_info.GetFriendApplyListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4143,13 +5920,6 @@ "base_info.GetFriendListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4176,13 +5946,6 @@ "base_info.GetGroupAllMemberResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4210,13 +5973,6 @@ "base_info.GetGroupApplicationListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4246,13 +6002,6 @@ "base_info.GetGroupInfoResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4286,13 +6035,6 @@ "base_info.GetGroupMembersInfoResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4319,13 +6061,6 @@ "base_info.GetJoinedGroupListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4352,13 +6087,6 @@ "base_info.GetSelfApplyListResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -4393,6 +6121,39 @@ } } }, + "base_info.GetSubDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "operationID": { + "type": "string" + } + } + }, + "base_info.GetSubDepartmentResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetTagSendLogsReq": { "type": "object", "required": [ @@ -4487,6 +6248,36 @@ } } }, + "base_info.GetUserInDepartmentReq": { + "type": "object", + "required": [ + "operationID", + "userID" + ], + "properties": { + "operationID": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.GetUserInDepartmentResp": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": true + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.GetUserReqGroupApplicationListReq": { "type": "object", "required": [ @@ -4947,19 +6738,135 @@ } } }, + "base_info.ManagementBatchSendMsgReq": { + "type": "object", + "required": [ + "contentType", + "operationID", + "sendID", + "sessionType" + ], + "properties": { + "contentType": { + "type": "integer" + }, + "groupID": { + "type": "string" + }, + "isOnlineOnly": { + "type": "boolean" + }, + "offlinePushInfo": { + "$ref": "#/definitions/server_api_params.OfflinePushInfo" + }, + "operationID": { + "type": "string" + }, + "recvIDList": { + "type": "array", + "items": { + "type": "string" + } + }, + "sendID": { + "type": "string" + }, + "senderFaceURL": { + "type": "string" + }, + "senderNickname": { + "type": "string" + }, + "senderPlatformID": { + "type": "integer" + }, + "sessionType": { + "type": "integer" + } + } + }, + "base_info.ManagementSendMsgReq": { + "type": "object", + "required": [ + "contentType", + "operationID", + "sendID", + "sessionType" + ], + "properties": { + "contentType": { + "type": "integer" + }, + "groupID": { + "type": "string" + }, + "isOnlineOnly": { + "type": "boolean" + }, + "offlinePushInfo": { + "$ref": "#/definitions/server_api_params.OfflinePushInfo" + }, + "operationID": { + "type": "string" + }, + "recvID": { + "type": "string" + }, + "sendID": { + "type": "string" + }, + "senderFaceURL": { + "type": "string" + }, + "senderNickname": { + "type": "string" + }, + "senderPlatformID": { + "type": "integer" + }, + "sessionType": { + "type": "integer" + } + } + }, + "base_info.ManagementSendMsgResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server_api_params.UserSendMsgResp" + }, + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.MinioUploadFileResp": { "type": "object", "properties": { - "URL": { - "type": "string" + "data": { + "type": "object", + "properties": { + "URL": { + "type": "string" + }, + "newName": { + "type": "string" + }, + "snapshotName": { + "type": "string" + }, + "snapshotURL": { + "type": "string" + } + } }, - "newName": { - "type": "string" + "errCode": { + "type": "integer" }, - "snapshotName": { - "type": "string" - }, - "snapshotURL": { + "errMsg": { "type": "string" } } @@ -5027,10 +6934,6 @@ "base_info.ParseTokenResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, @@ -5344,6 +7247,32 @@ } } }, + "base_info.Swagger400Resp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer", + "example": 400 + }, + "errMsg": { + "type": "string", + "example": "err msg" + } + } + }, + "base_info.Swagger500Resp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer", + "example": 500 + }, + "errMsg": { + "type": "string", + "example": "err msg" + } + } + }, "base_info.TransferGroupOwnerReq": { "type": "object", "required": [ @@ -5378,6 +7307,114 @@ } } }, + "base_info.UpdateDepartmentReq": { + "type": "object", + "required": [ + "departmentID", + "operationID" + ], + "properties": { + "createTime": { + "type": "integer" + }, + "departmentID": { + "type": "string" + }, + "departmentType": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "memberNum": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "parentID": { + "type": "string" + }, + "subDepartmentNum": { + "type": "integer" + } + } + }, + "base_info.UpdateDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, + "base_info.UpdateOrganizationUserReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "englishName": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "mobile": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "operationID": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UpdateOrganizationUserResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateSelfUserInfoReq": { "type": "object", "required": [ @@ -5427,6 +7464,49 @@ } } }, + "base_info.UpdateUserInDepartmentReq": { + "type": "object", + "required": [ + "operationID" + ], + "properties": { + "departmentID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "leader": { + "type": "integer" + }, + "operationID": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "base_info.UpdateUserInDepartmentResp": { + "type": "object", + "properties": { + "errCode": { + "type": "integer" + }, + "errMsg": { + "type": "string" + } + } + }, "base_info.UpdateUserInfoResp": { "type": "object", "properties": { @@ -5640,6 +7720,193 @@ } } }, + "internal_api_manage.FileElem": { + "type": "object", + "properties": { + "fileName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileSize": { + "type": "integer" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "internal_api_manage.OANotificationElem": { + "type": "object", + "required": [ + "notificationFaceURL", + "notificationName", + "notificationType", + "text" + ], + "properties": { + "ex": { + "type": "string" + }, + "fileElem": { + "$ref": "#/definitions/internal_api_manage.FileElem" + }, + "mixType": { + "type": "integer" + }, + "notificationFaceURL": { + "type": "string" + }, + "notificationName": { + "type": "string" + }, + "notificationType": { + "type": "integer" + }, + "pictureElem": { + "$ref": "#/definitions/internal_api_manage.PictureElem" + }, + "soundElem": { + "$ref": "#/definitions/internal_api_manage.SoundElem" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" + }, + "videoElem": { + "$ref": "#/definitions/internal_api_manage.VideoElem" + } + } + }, + "internal_api_manage.PictureBaseInfo": { + "type": "object", + "properties": { + "height": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + }, + "uuid": { + "type": "string" + }, + "width": { + "type": "integer" + } + } + }, + "internal_api_manage.PictureElem": { + "type": "object", + "properties": { + "bigPicture": { + "$ref": "#/definitions/internal_api_manage.PictureBaseInfo" + }, + "snapshotPicture": { + "$ref": "#/definitions/internal_api_manage.PictureBaseInfo" + }, + "sourcePath": { + "type": "string" + }, + "sourcePicture": { + "$ref": "#/definitions/internal_api_manage.PictureBaseInfo" + } + } + }, + "internal_api_manage.RevokeElem": { + "type": "object", + "required": [ + "revokeMsgClientID" + ], + "properties": { + "revokeMsgClientID": { + "type": "string" + } + } + }, + "internal_api_manage.SoundElem": { + "type": "object", + "properties": { + "dataSize": { + "type": "integer" + }, + "duration": { + "type": "integer" + }, + "soundPath": { + "type": "string" + }, + "sourceURL": { + "type": "string" + }, + "uuid": { + "type": "string" + } + } + }, + "internal_api_manage.TextElem": { + "type": "object", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string" + } + } + }, + "internal_api_manage.VideoElem": { + "type": "object", + "properties": { + "duration": { + "type": "integer" + }, + "snapshotHeight": { + "type": "integer" + }, + "snapshotPath": { + "type": "string" + }, + "snapshotSize": { + "type": "integer" + }, + "snapshotURL": { + "type": "string" + }, + "snapshotUUID": { + "type": "string" + }, + "snapshotWidth": { + "type": "integer" + }, + "videoPath": { + "type": "string" + }, + "videoSize": { + "type": "integer" + }, + "videoType": { + "type": "string" + }, + "videoURL": { + "type": "string" + }, + "videoUUID": { + "type": "string" + } + } + }, "office.Comment": { "type": "object", "properties": { @@ -5820,6 +8087,143 @@ } } }, + "server_api_params.Department": { + "type": "object", + "properties": { + "createTime": { + "type": "integer" + }, + "departmentID": { + "type": "string" + }, + "departmentType": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "memberNum": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "parentID": { + "type": "string" + }, + "subDepartmentNum": { + "type": "integer" + } + } + }, + "server_api_params.DepartmentMember": { + "type": "object", + "properties": { + "departmentID": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "leader": { + "type": "integer" + }, + "order": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.FriendInfo": { + "type": "object", + "properties": { + "addSource": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "friendUser": { + "$ref": "#/definitions/server_api_params.UserInfo" + }, + "operatorUserID": { + "type": "string" + }, + "ownerUserID": { + "type": "string" + }, + "remark": { + "type": "string" + } + } + }, + "server_api_params.FriendRequest": { + "type": "object", + "properties": { + "createTime": { + "type": "integer" + }, + "ex": { + "type": "string" + }, + "fromFaceURL": { + "type": "string" + }, + "fromGender": { + "type": "integer" + }, + "fromNickname": { + "type": "string" + }, + "fromUserID": { + "type": "string" + }, + "handleMsg": { + "type": "string" + }, + "handleResult": { + "type": "integer" + }, + "handleTime": { + "type": "integer" + }, + "handlerUserID": { + "type": "string" + }, + "reqMsg": { + "type": "string" + }, + "toFaceURL": { + "type": "string" + }, + "toGender": { + "type": "integer" + }, + "toNickname": { + "type": "string" + }, + "toUserID": { + "type": "string" + } + } + }, "server_api_params.GroupInfo": { "type": "object", "properties": { @@ -5851,7 +8255,7 @@ "type": "integer" }, "needVerification": { - "$ref": "#/definitions/wrapperspb.Int32Value" + "type": "integer" }, "notification": { "type": "string" @@ -5902,6 +8306,141 @@ } } }, + "server_api_params.GroupRequest": { + "type": "object", + "properties": { + "ex": { + "type": "string" + }, + "groupInfo": { + "$ref": "#/definitions/server_api_params.GroupInfo" + }, + "handleMsg": { + "type": "string" + }, + "handleResult": { + "type": "integer" + }, + "handleTime": { + "type": "integer" + }, + "handleUserID": { + "type": "string" + }, + "reqMsg": { + "type": "string" + }, + "reqTime": { + "type": "integer" + }, + "userInfo": { + "$ref": "#/definitions/server_api_params.PublicUserInfo" + } + } + }, + "server_api_params.OfflinePushInfo": { + "type": "object", + "properties": { + "desc": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "iOSBadgeCount": { + "type": "boolean" + }, + "iOSPushSound": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "server_api_params.OrganizationUser": { + "type": "object", + "properties": { + "birth": { + "type": "integer" + }, + "createTime": { + "type": "integer" + }, + "email": { + "type": "string" + }, + "englishName": { + "type": "string" + }, + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "mobile": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.PublicUserInfo": { + "type": "object", + "properties": { + "ex": { + "type": "string" + }, + "faceURL": { + "type": "string" + }, + "gender": { + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "userID": { + "type": "string" + } + } + }, + "server_api_params.UserDepartmentMember": { + "type": "object", + "properties": { + "departmentMember": { + "$ref": "#/definitions/server_api_params.DepartmentMember" + }, + "organizationUser": { + "$ref": "#/definitions/server_api_params.OrganizationUser" + } + } + }, + "server_api_params.UserInDepartment": { + "type": "object", + "properties": { + "departmentMemberList": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.DepartmentMember" + } + }, + "organizationUser": { + "$ref": "#/definitions/server_api_params.OrganizationUser" + } + } + }, "server_api_params.UserInfo": { "type": "object", "properties": { @@ -5940,6 +8479,20 @@ } } }, + "server_api_params.UserSendMsgResp": { + "type": "object", + "properties": { + "clientMsgID": { + "type": "string" + }, + "sendTime": { + "type": "integer" + }, + "serverMsgID": { + "type": "string" + } + } + }, "user.AccountCheckResp_SingleUserStatus": { "type": "object", "properties": { @@ -5950,15 +8503,6 @@ "type": "string" } } - }, - "wrapperspb.Int32Value": { - "type": "object", - "properties": { - "value": { - "description": "The int32 value.", - "type": "integer" - } - } } } } \ No newline at end of file diff --git a/cmd/open_im_api/docs/swagger.yaml b/cmd/open_im_api/docs/swagger.yaml index 07440bc83..f030e5353 100644 --- a/cmd/open_im_api/docs/swagger.yaml +++ b/cmd/open_im_api/docs/swagger.yaml @@ -1,4 +1,128 @@ +basePath: / definitions: + Open_IM_internal_api_manage.FileElem: + properties: + fileName: + type: string + filePath: + type: string + fileSize: + type: integer + sourceURL: + type: string + uuid: + type: string + type: object + Open_IM_internal_api_manage.OANotificationElem: + properties: + ex: + type: string + fileElem: + $ref: '#/definitions/Open_IM_internal_api_manage.FileElem' + mixType: + type: integer + notificationFaceURL: + type: string + notificationName: + type: string + notificationType: + type: integer + pictureElem: + $ref: '#/definitions/Open_IM_internal_api_manage.PictureElem' + soundElem: + $ref: '#/definitions/Open_IM_internal_api_manage.SoundElem' + text: + type: string + url: + type: string + videoElem: + $ref: '#/definitions/Open_IM_internal_api_manage.VideoElem' + required: + - notificationFaceURL + - notificationName + - notificationType + - text + type: object + Open_IM_internal_api_manage.PictureBaseInfo: + properties: + height: + type: integer + size: + type: integer + type: + type: string + url: + type: string + uuid: + type: string + width: + type: integer + type: object + Open_IM_internal_api_manage.PictureElem: + properties: + bigPicture: + $ref: '#/definitions/Open_IM_internal_api_manage.PictureBaseInfo' + snapshotPicture: + $ref: '#/definitions/Open_IM_internal_api_manage.PictureBaseInfo' + sourcePath: + type: string + sourcePicture: + $ref: '#/definitions/Open_IM_internal_api_manage.PictureBaseInfo' + type: object + Open_IM_internal_api_manage.RevokeElem: + properties: + revokeMsgClientID: + type: string + required: + - revokeMsgClientID + type: object + Open_IM_internal_api_manage.SoundElem: + properties: + dataSize: + type: integer + duration: + type: integer + soundPath: + type: string + sourceURL: + type: string + uuid: + type: string + type: object + Open_IM_internal_api_manage.TextElem: + properties: + text: + type: string + required: + - text + type: object + Open_IM_internal_api_manage.VideoElem: + properties: + duration: + type: integer + snapshotHeight: + type: integer + snapshotPath: + type: string + snapshotSize: + type: integer + snapshotURL: + type: string + snapshotUUID: + type: string + snapshotWidth: + type: integer + videoPath: + type: string + videoSize: + type: integer + videoType: + type: string + videoURL: + type: string + videoUUID: + type: string + type: object base_info.AccountCheckReq: properties: checkUserIDList: @@ -218,6 +342,110 @@ definitions: errMsg: type: string type: object + base_info.Conversation: + properties: + attachedInfo: + type: string + conversationID: + type: string + conversationType: + type: integer + draftTextTime: + type: integer + ex: + type: string + groupAtType: + type: integer + groupID: + type: string + isNotInGroup: + type: boolean + isPinned: + type: boolean + isPrivateChat: + type: boolean + ownerUserID: + type: string + recvMsgOpt: + enum: + - 0 + - 1 + - 2 + type: integer + unreadCount: + type: integer + userID: + type: string + required: + - conversationID + - conversationType + - ownerUserID + type: object + base_info.CreateDepartmentMemberReq: + properties: + departmentID: + type: string + ex: + type: string + leader: + type: integer + operationID: + type: string + order: + type: integer + position: + type: string + status: + type: integer + userID: + type: string + required: + - operationID + type: object + base_info.CreateDepartmentMemberResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.CreateDepartmentReq: + properties: + createTime: + type: integer + departmentID: + type: string + departmentType: + type: integer + ex: + type: string + faceURL: + type: string + memberNum: + type: integer + name: + type: string + operationID: + type: string + order: + type: integer + parentID: + type: string + subDepartmentNum: + type: integer + required: + - operationID + type: object + base_info.CreateDepartmentResp: + properties: + data: + additionalProperties: true + type: object + errCode: + type: integer + errMsg: + type: string + type: object base_info.CreateGroupReq: properties: ex: @@ -268,6 +496,42 @@ definitions: errMsg: type: string type: object + base_info.CreateOrganizationUserReq: + properties: + birth: + type: integer + createTime: + type: integer + email: + type: string + englishName: + type: string + ex: + type: string + faceURL: + type: string + gender: + type: integer + mobile: + type: string + nickname: + type: string + operationID: + type: string + telephone: + type: string + userID: + type: string + required: + - operationID + type: object + base_info.CreateOrganizationUserResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.CreateTagReq: properties: operationID: @@ -336,6 +600,23 @@ definitions: errMsg: type: string type: object + base_info.DeleteDepartmentReq: + properties: + departmentID: + type: string + operationID: + type: string + required: + - departmentID + - operationID + type: object + base_info.DeleteDepartmentResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.DeleteFriendReq: properties: fromUserID: @@ -375,6 +656,23 @@ definitions: errMsg: type: string type: object + base_info.DeleteOrganizationUserReq: + properties: + operationID: + type: string + userID: + type: string + required: + - operationID + - userID + type: object + base_info.DeleteOrganizationUserResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.DeleteTagReq: properties: operationID: @@ -392,6 +690,26 @@ definitions: errMsg: type: string type: object + base_info.DeleteUserInDepartmentReq: + properties: + departmentID: + type: string + operationID: + type: string + userID: + type: string + required: + - departmentID + - operationID + - userID + type: object + base_info.DeleteUserInDepartmentResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.DismissGroupReq: properties: groupID: @@ -409,6 +727,11 @@ definitions: errMsg: type: string type: object + base_info.ExpireTime: + properties: + expireTimeSeconds: + type: integer + type: object base_info.ForceLogoutReq: properties: fromUserID: @@ -433,6 +756,27 @@ definitions: errMsg: type: string type: object + base_info.GetAllConversationsReq: + properties: + operationID: + type: string + ownerUserID: + type: string + required: + - operationID + - ownerUserID + type: object + base_info.GetAllConversationsResp: + properties: + data: + items: + $ref: '#/definitions/base_info.Conversation' + type: array + errCode: + type: integer + errMsg: + type: string + type: object base_info.GetAllUsersUidReq: properties: operationID: @@ -462,6 +806,71 @@ definitions: - operationID type: object base_info.GetBlackListResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetConversationReq: + properties: + conversationID: + type: string + operationID: + type: string + ownerUserID: + type: string + required: + - conversationID + - operationID + - ownerUserID + type: object + base_info.GetConversationResp: + properties: + data: + $ref: '#/definitions/base_info.Conversation' + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetConversationsReq: + properties: + conversationIDs: + items: + type: string + type: array + operationID: + type: string + ownerUserID: + type: string + required: + - conversationIDs + - operationID + - ownerUserID + type: object + base_info.GetConversationsResp: + properties: + data: + items: + $ref: '#/definitions/base_info.Conversation' + type: array + errCode: + type: integer + errMsg: + type: string + type: object + base_info.GetDepartmentMemberReq: + properties: + departmentID: + type: string + operationID: + type: string + required: + - departmentID + - operationID + type: object + base_info.GetDepartmentMemberResp: properties: data: items: @@ -485,11 +894,6 @@ definitions: type: object base_info.GetFriendApplyListResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -507,11 +911,6 @@ definitions: type: object base_info.GetFriendListResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -529,11 +928,6 @@ definitions: type: object base_info.GetGroupAllMemberResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -552,11 +946,6 @@ definitions: type: object base_info.GetGroupApplicationListResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -576,11 +965,6 @@ definitions: type: object base_info.GetGroupInfoResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -603,11 +987,6 @@ definitions: type: object base_info.GetGroupMembersInfoResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -625,11 +1004,6 @@ definitions: type: object base_info.GetJoinedGroupListResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -647,11 +1021,6 @@ definitions: type: object base_info.GetSelfApplyListResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -674,6 +1043,28 @@ definitions: errMsg: type: string type: object + base_info.GetSubDepartmentReq: + properties: + departmentID: + type: string + operationID: + type: string + required: + - departmentID + - operationID + type: object + base_info.GetSubDepartmentResp: + properties: + data: + items: + additionalProperties: true + type: object + type: array + errCode: + type: integer + errMsg: + type: string + type: object base_info.GetTagSendLogsReq: properties: operationID: @@ -736,6 +1127,26 @@ definitions: errMsg: type: string type: object + base_info.GetUserInDepartmentReq: + properties: + operationID: + type: string + userID: + type: string + required: + - operationID + - userID + type: object + base_info.GetUserInDepartmentResp: + properties: + data: + additionalProperties: true + type: object + errCode: + type: integer + errMsg: + type: string + type: object base_info.GetUserReqGroupApplicationListReq: properties: operationID: @@ -1039,15 +1450,93 @@ definitions: errMsg: type: string type: object + base_info.ManagementBatchSendMsgReq: + properties: + contentType: + type: integer + groupID: + type: string + isOnlineOnly: + type: boolean + offlinePushInfo: + $ref: '#/definitions/server_api_params.OfflinePushInfo' + operationID: + type: string + recvIDList: + items: + type: string + type: array + sendID: + type: string + senderFaceURL: + type: string + senderNickname: + type: string + senderPlatformID: + type: integer + sessionType: + type: integer + required: + - contentType + - operationID + - sendID + - sessionType + type: object + base_info.ManagementSendMsgReq: + properties: + contentType: + type: integer + groupID: + type: string + isOnlineOnly: + type: boolean + offlinePushInfo: + $ref: '#/definitions/server_api_params.OfflinePushInfo' + operationID: + type: string + recvID: + type: string + sendID: + type: string + senderFaceURL: + type: string + senderNickname: + type: string + senderPlatformID: + type: integer + sessionType: + type: integer + required: + - contentType + - operationID + - sendID + - sessionType + type: object + base_info.ManagementSendMsgResp: + properties: + data: + $ref: '#/definitions/server_api_params.UserSendMsgResp' + errCode: + type: integer + errMsg: + type: string + type: object base_info.MinioUploadFileResp: properties: - URL: - type: string - newName: - type: string - snapshotName: - type: string - snapshotURL: + data: + properties: + URL: + type: string + newName: + type: string + snapshotName: + type: string + snapshotURL: + type: string + type: object + errCode: + type: integer + errMsg: type: string type: object base_info.MuteGroupMemberReq: @@ -1092,9 +1581,6 @@ definitions: type: object base_info.ParseTokenResp: properties: - data: - additionalProperties: true - type: object errCode: type: integer errMsg: @@ -1303,6 +1789,24 @@ definitions: errMsg: type: string type: object + base_info.Swagger400Resp: + properties: + errCode: + example: 400 + type: integer + errMsg: + example: err msg + type: string + type: object + base_info.Swagger500Resp: + properties: + errCode: + example: 500 + type: integer + errMsg: + example: err msg + type: string + type: object base_info.TransferGroupOwnerReq: properties: groupID: @@ -1326,6 +1830,77 @@ definitions: errMsg: type: string type: object + base_info.UpdateDepartmentReq: + properties: + createTime: + type: integer + departmentID: + type: string + departmentType: + type: integer + ex: + type: string + faceURL: + type: string + memberNum: + type: integer + name: + type: string + operationID: + type: string + order: + type: integer + parentID: + type: string + subDepartmentNum: + type: integer + required: + - departmentID + - operationID + type: object + base_info.UpdateDepartmentResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object + base_info.UpdateOrganizationUserReq: + properties: + birth: + type: integer + createTime: + type: integer + email: + type: string + englishName: + type: string + ex: + type: string + faceURL: + type: string + gender: + type: integer + mobile: + type: string + nickname: + type: string + operationID: + type: string + telephone: + type: string + userID: + type: string + required: + - operationID + type: object + base_info.UpdateOrganizationUserResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.UpdateSelfUserInfoReq: properties: birth: @@ -1362,6 +1937,34 @@ definitions: - operationID - userID type: object + base_info.UpdateUserInDepartmentReq: + properties: + departmentID: + type: string + ex: + type: string + leader: + type: integer + operationID: + type: string + order: + type: integer + position: + type: string + status: + type: integer + userID: + type: string + required: + - operationID + type: object + base_info.UpdateUserInDepartmentResp: + properties: + errCode: + type: integer + errMsg: + type: string + type: object base_info.UpdateUserInfoResp: properties: errCode: @@ -1509,6 +2112,129 @@ definitions: userName: type: string type: object + internal_api_manage.FileElem: + properties: + fileName: + type: string + filePath: + type: string + fileSize: + type: integer + sourceURL: + type: string + uuid: + type: string + type: object + internal_api_manage.OANotificationElem: + properties: + ex: + type: string + fileElem: + $ref: '#/definitions/internal_api_manage.FileElem' + mixType: + type: integer + notificationFaceURL: + type: string + notificationName: + type: string + notificationType: + type: integer + pictureElem: + $ref: '#/definitions/internal_api_manage.PictureElem' + soundElem: + $ref: '#/definitions/internal_api_manage.SoundElem' + text: + type: string + url: + type: string + videoElem: + $ref: '#/definitions/internal_api_manage.VideoElem' + required: + - notificationFaceURL + - notificationName + - notificationType + - text + type: object + internal_api_manage.PictureBaseInfo: + properties: + height: + type: integer + size: + type: integer + type: + type: string + url: + type: string + uuid: + type: string + width: + type: integer + type: object + internal_api_manage.PictureElem: + properties: + bigPicture: + $ref: '#/definitions/internal_api_manage.PictureBaseInfo' + snapshotPicture: + $ref: '#/definitions/internal_api_manage.PictureBaseInfo' + sourcePath: + type: string + sourcePicture: + $ref: '#/definitions/internal_api_manage.PictureBaseInfo' + type: object + internal_api_manage.RevokeElem: + properties: + revokeMsgClientID: + type: string + required: + - revokeMsgClientID + type: object + internal_api_manage.SoundElem: + properties: + dataSize: + type: integer + duration: + type: integer + soundPath: + type: string + sourceURL: + type: string + uuid: + type: string + type: object + internal_api_manage.TextElem: + properties: + text: + type: string + required: + - text + type: object + internal_api_manage.VideoElem: + properties: + duration: + type: integer + snapshotHeight: + type: integer + snapshotPath: + type: string + snapshotSize: + type: integer + snapshotURL: + type: string + snapshotUUID: + type: string + snapshotWidth: + type: integer + videoPath: + type: string + videoSize: + type: integer + videoType: + type: string + videoURL: + type: string + videoUUID: + type: string + type: object office.Comment: properties: content: @@ -1626,6 +2352,96 @@ definitions: userID: type: string type: object + server_api_params.Department: + properties: + createTime: + type: integer + departmentID: + type: string + departmentType: + type: integer + ex: + type: string + faceURL: + type: string + memberNum: + type: integer + name: + type: string + order: + type: integer + parentID: + type: string + subDepartmentNum: + type: integer + type: object + server_api_params.DepartmentMember: + properties: + departmentID: + type: string + ex: + type: string + leader: + type: integer + order: + type: integer + position: + type: string + status: + type: integer + userID: + type: string + type: object + server_api_params.FriendInfo: + properties: + addSource: + type: integer + createTime: + type: integer + ex: + type: string + friendUser: + $ref: '#/definitions/server_api_params.UserInfo' + operatorUserID: + type: string + ownerUserID: + type: string + remark: + type: string + type: object + server_api_params.FriendRequest: + properties: + createTime: + type: integer + ex: + type: string + fromFaceURL: + type: string + fromGender: + type: integer + fromNickname: + type: string + fromUserID: + type: string + handleMsg: + type: string + handleResult: + type: integer + handleTime: + type: integer + handlerUserID: + type: string + reqMsg: + type: string + toFaceURL: + type: string + toGender: + type: integer + toNickname: + type: string + toUserID: + type: string + type: object server_api_params.GroupInfo: properties: createTime: @@ -1647,7 +2463,7 @@ definitions: memberCount: type: integer needVerification: - $ref: '#/definitions/wrapperspb.Int32Value' + type: integer notification: type: string ownerUserID: @@ -1680,6 +2496,94 @@ definitions: userID: type: string type: object + server_api_params.GroupRequest: + properties: + ex: + type: string + groupInfo: + $ref: '#/definitions/server_api_params.GroupInfo' + handleMsg: + type: string + handleResult: + type: integer + handleTime: + type: integer + handleUserID: + type: string + reqMsg: + type: string + reqTime: + type: integer + userInfo: + $ref: '#/definitions/server_api_params.PublicUserInfo' + type: object + server_api_params.OfflinePushInfo: + properties: + desc: + type: string + ex: + type: string + iOSBadgeCount: + type: boolean + iOSPushSound: + type: string + title: + type: string + type: object + server_api_params.OrganizationUser: + properties: + birth: + type: integer + createTime: + type: integer + email: + type: string + englishName: + type: string + ex: + type: string + faceURL: + type: string + gender: + type: integer + mobile: + type: string + nickname: + type: string + telephone: + type: string + userID: + type: string + type: object + server_api_params.PublicUserInfo: + properties: + ex: + type: string + faceURL: + type: string + gender: + type: integer + nickname: + type: string + userID: + type: string + type: object + server_api_params.UserDepartmentMember: + properties: + departmentMember: + $ref: '#/definitions/server_api_params.DepartmentMember' + organizationUser: + $ref: '#/definitions/server_api_params.OrganizationUser' + type: object + server_api_params.UserInDepartment: + properties: + departmentMemberList: + items: + $ref: '#/definitions/server_api_params.DepartmentMember' + type: array + organizationUser: + $ref: '#/definitions/server_api_params.OrganizationUser' + type: object server_api_params.UserInfo: properties: appMangerLevel: @@ -1705,6 +2609,15 @@ definitions: userID: type: string type: object + server_api_params.UserSendMsgResp: + properties: + clientMsgID: + type: string + sendTime: + type: integer + serverMsgID: + type: string + type: object user.AccountCheckResp_SingleUserStatus: properties: accountStatus: @@ -1712,14 +2625,14 @@ definitions: userID: type: string type: object - wrapperspb.Int32Value: - properties: - value: - description: The int32 value. - type: integer - type: object info: contact: {} + description: open-IM-Server 的API服务器文档, 文档中所有请求都有一个operationID字段用于链路追踪 + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + title: open-IM-Server API + version: "1.0" paths: /auth/force_logout: post: @@ -1733,7 +2646,7 @@ paths: name: token required: true type: string - - description: platform为平台ID, fromUserID为要执行强制登出的用户ID + - description: platform为平台ID
fromUserID为要执行强制登出的用户ID in: body name: req required: true @@ -1749,11 +2662,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.ForceLogoutResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.ForceLogoutResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 强制登出 tags: - 鉴权认证 @@ -1761,7 +2674,7 @@ paths: post: consumes: - application/json - description: 解析用户token + description: 解析当前用户token(token在请求头中传入) operationId: ParseToken parameters: - description: im token @@ -1769,7 +2682,7 @@ paths: name: token required: true type: string - - description: secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID + - description: secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID in: body name: req required: true @@ -1781,23 +2694,28 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.ParseTokenResp' + allOf: + - $ref: '#/definitions/base_info.ParseTokenResp' + - properties: + Data: + $ref: '#/definitions/base_info.ExpireTime' + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.ParseTokenResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.ParseTokenResp' - summary: 解析token + $ref: '#/definitions/base_info.Swagger500Resp' + summary: 解析当前用户token tags: - 鉴权认证 /auth/user_register: post: consumes: - application/json - description: 用户登录 + description: 用户注册 operationId: UserRegister parameters: - description: im token @@ -1806,7 +2724,7 @@ paths: required: true type: string - description: secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID -
ex为拓展字段 +
ex为拓展字段
gender为性别, 0为女, 1为男 in: body name: req required: true @@ -1822,12 +2740,12 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.UserRegisterResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.UserRegisterResp' - summary: 用户登录 + $ref: '#/definitions/base_info.Swagger500Resp' + summary: 用户注册 tags: - 鉴权认证 /auth/user_token: @@ -1842,7 +2760,7 @@ paths: name: token required: true type: string - - description: secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID + - description: secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID in: body name: req required: true @@ -1858,11 +2776,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.UserTokenResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.UserTokenResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 用户登录 tags: - 鉴权认证 @@ -1878,7 +2796,7 @@ paths: name: token required: true type: string - - description: fromUserID为设置的用户, toUserID为被设置的用户 + - description: fromUserID为设置的用户
toUserID为被设置的用户 in: body name: req required: true @@ -1894,11 +2812,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.AddBlacklistResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.AddBlacklistResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 添加黑名单 tags: - 好友相关 @@ -1914,7 +2832,7 @@ paths: name: token required: true type: string - - description: reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户 + - description: reqMsg为申请信息
fromUserID为申请用户
toUserID为被添加用户 in: body name: req required: true @@ -1930,11 +2848,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.AddFriendResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.AddFriendResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 添加好友 tags: - 好友相关 @@ -1950,7 +2868,7 @@ paths: name: token required: true type: string - - description: fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, + - description: fromUserID同意/拒绝的用户ID
toUserID为申请用户D
handleMsg为处理信息
flag为具体操作, 1为同意, 2为拒绝 in: body name: req @@ -1967,11 +2885,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.AddFriendResponseResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.AddFriendResponseResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 同意/拒绝好友请求 tags: - 好友相关 @@ -1987,7 +2905,7 @@ paths: name: token required: true type: string - - description: fromUserID为操作用户, toUserID为被删除用户 + - description: fromUserID为操作用户
toUserID为被删除用户 in: body name: req required: true @@ -2003,11 +2921,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DeleteFriendResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DeleteFriendResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 删除好友 tags: - 好友相关 @@ -2035,15 +2953,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetBlackListResp' + allOf: + - $ref: '#/definitions/base_info.GetBlackListResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.PublicUserInfo' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetBlackListResp' + $ref: '#/definitions/base_info.Swagger500Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetBlackListResp' + $ref: '#/definitions/base_info.Swagger400Resp' summary: 获取黑名单列表 tags: - 好友相关 @@ -2071,15 +2996,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetFriendApplyListResp' + allOf: + - $ref: '#/definitions/base_info.GetFriendApplyListResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.FriendRequest' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetFriendApplyListResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetFriendApplyListResp' + $ref: '#/definitions/base_info.Swagger400Resp' summary: 获取好友申请列表 tags: - 好友相关 @@ -2107,15 +3039,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetFriendListResp' + allOf: + - $ref: '#/definitions/base_info.GetFriendListResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.FriendInfo' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetFriendListResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetFriendListResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户的好友列表 tags: - 好友相关 @@ -2143,15 +3082,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetSelfApplyListResp' + allOf: + - $ref: '#/definitions/base_info.GetSelfApplyListResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.FriendRequest' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetSelfApplyListResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetSelfApplyListResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取自己的好友申请列表 tags: - 好友相关 @@ -2167,7 +3113,7 @@ paths: name: token required: true type: string - - description: fromUserID批量加好友的用户ID, friendUserIDList为 + - description: fromUserID批量加好友的用户ID
friendUserIDList为 in: body name: req required: true @@ -2177,17 +3123,17 @@ paths: - application/json responses: "0": - description: data列表中对象的result-1为添加该用户失败, 0为成功 + description: data列表中对象的result-1为添加该用户失败
0为成功 schema: $ref: '#/definitions/base_info.ImportFriendResp' "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.ImportFriendResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.ImportFriendResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 批量加好友 tags: - 好友相关 @@ -2203,7 +3149,7 @@ paths: name: token required: true type: string - - description: fromUserID为请求用户, toUserID为要检查的用户 + - description: fromUserID为请求用户
toUserID为要检查的用户 in: body name: req required: true @@ -2219,11 +3165,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.IsFriendResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.IsFriendResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 检查用户之间是否为好友 tags: - 好友相关 @@ -2255,11 +3201,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.RemoveBlackListResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.RemoveBlackListResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 把用户移除黑名单 tags: - 好友相关 @@ -2275,7 +3221,7 @@ paths: name: token required: true type: string - - description: fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注 + - description: fromUserID为设置的用户
toUserID为被设置的用户
remark为好友备注 in: body name: req required: true @@ -2291,11 +3237,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.SetFriendRemarkResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.SetFriendRemarkResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 设置好友备注 tags: - 好友相关 @@ -2327,11 +3273,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CancelMuteGroupResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CancelMuteGroupResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 取消禁言群组 tags: - 群组相关 @@ -2363,11 +3309,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CancelMuteGroupMemberResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CancelMuteGroupMemberResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 取消禁言群成员 tags: - 群组相关 @@ -2383,8 +3329,9 @@ paths: name: token required: true type: string - - description: ownerUserID为群主ID
ex为群扩展字段
roleLevel为群员角色,1为普通用户 2为群主 - 3为管理员 + - description: groupType这里填0代表普通群
groupName为群名称
introduction为群介绍
+ notification为群公共
ownerUserID为群主ID
ex为群扩展字段
memberList中对象roleLevel为群员角色,1为普通用户 + 2为群主 3为管理员 in: body name: req required: true @@ -2405,11 +3352,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CreateGroupResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CreateGroupResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 创建群组 tags: - 群组相关 @@ -2441,11 +3388,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DismissGroupResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DismissGroupResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 解散群组 tags: - 群组相关 @@ -2484,11 +3431,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetGroupAllMemberResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetGroupAllMemberResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取全部群成员列表 tags: - 群组相关 @@ -2504,7 +3451,7 @@ paths: name: token required: true type: string - - description: memberList为要获取群成员的群ID列表 + - description: groupID为要获取的群ID
memberList为要获取群成员的群ID列表 in: body name: req required: true @@ -2527,11 +3474,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetGroupMembersInfoResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetGroupMembersInfoResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取群成员信息 tags: - 群组相关 @@ -2563,11 +3510,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetGroupInfoResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetGroupInfoResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 通过群ID列表获取群信息 tags: - 群组相关 @@ -2606,11 +3553,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetJoinedGroupListResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetJoinedGroupListResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户加入群列表 tags: - 群组相关 @@ -2638,15 +3585,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + allOf: + - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.GroupRequest' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户收到的加群信息列表 tags: - 群组相关 @@ -2674,15 +3628,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + allOf: + - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.GroupRequest' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetGroupApplicationListResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户加群申请列表 tags: - 群组相关 @@ -2715,11 +3676,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.ApplicationGroupResponseResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.ApplicationGroupResponseResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 处理加群消息 tags: - 群组相关 @@ -2751,11 +3712,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.InviteUserToGroupResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.InviteUserToGroupResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 将用户拉入群组 tags: - 群组相关 @@ -2771,7 +3732,7 @@ paths: name: token required: true type: string - - description: reqMessage为申请进群信息 + - description: reqMessage为申请进群信息
groupID为申请的群ID in: body name: req required: true @@ -2787,11 +3748,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.JoinGroupResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.JoinGroupResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 加入群聊 tags: - 群组相关 @@ -2823,11 +3784,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.KickGroupMemberResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.KickGroupMemberResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 把用户踢出群组 tags: - 群组相关 @@ -2895,11 +3856,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DismissGroupResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DismissGroupResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 禁言群成员 tags: - 群组相关 @@ -2907,7 +3868,7 @@ paths: post: consumes: - application/json - description: 退出群聊 + description: 当前用户退出群聊 operationId: QuitGroup parameters: - description: im token @@ -2931,12 +3892,12 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.QuitGroupResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.QuitGroupResp' - summary: 退出群聊 + $ref: '#/definitions/base_info.Swagger500Resp' + summary: 当前用户退出群聊 tags: - 群组相关 /group/set_group_info: @@ -2951,8 +3912,8 @@ paths: name: token required: true type: string - - description: notification为群介绍
introduction为群公告
needVerification为加群验证 - 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群 + - description: groupID为要修改的群ID
groupName为新的群名称
notification为群介绍
introduction为群公告 +
needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群 in: body name: req required: true @@ -2968,11 +3929,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.SetGroupInfoResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.SetGroupInfoResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 设置群信息 tags: - 群组相关 @@ -2988,7 +3949,8 @@ paths: name: token required: true type: string - - description: 除了operationID, userID, groupID其他参数可选 + - description: 除了operationID, userID, groupID其他参数可选
ex为拓展字段
faceURL为群头像
nickName为群昵称
roleLevel为群员角色,1为普通用户 + 2为群主 3为管理员 in: body name: req required: true @@ -3004,11 +3966,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.SetGroupMemberInfoResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.SetGroupMemberInfoResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 修改群成员信息 tags: - 群组相关 @@ -3040,14 +4002,66 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.TransferGroupOwnerResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.TransferGroupOwnerResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 转让群主 tags: - 群组相关 + /msg/batch_send_msg: + post: + consumes: + - application/json + description: 管理员批量发送群聊单聊消息 消息格式详细见消息格式 + operationId: ManagementBatchSendMsg + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 该请求和消息结构体一样
recvIDList为接受消息的用户ID列表 + in: body + name: 管理员批量发送单聊消息 + required: true + schema: + allOf: + - $ref: '#/definitions/base_info.ManagementBatchSendMsgReq' + - properties: + content: + $ref: '#/definitions/Open_IM_internal_api_manage.TextElem' + type: object + - description: 该请求和消息结构体一样
recvIDList为接受消息的用户ID列表 + in: body + name: 管理员批量发送OA通知 + required: true + schema: + allOf: + - $ref: '#/definitions/base_info.ManagementSendMsgReq' + - properties: + content: + $ref: '#/definitions/Open_IM_internal_api_manage.OANotificationElem' + type: object + produces: + - application/json + responses: + "0": + description: serverMsgID为服务器消息ID
clientMsgID为客户端消息ID
sendTime为发送消息时间 + schema: + $ref: '#/definitions/base_info.ManagementBatchSendMsgReq' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.ManagementBatchSendMsgReq' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.ManagementBatchSendMsgReq' + summary: 管理员批量发送群聊单聊消息 + tags: + - 消息相关 /msg/clear_msg: post: consumes: @@ -3076,11 +4090,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CleanUpMsgResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CleanUpMsgResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 清空用户消息 tags: - 消息相关 @@ -3112,14 +4126,185 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DelMsgResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DelMsgResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 根据seq列表删除消息 tags: - 消息相关 + /msg/get_all_conversations: + post: + consumes: + - application/json + description: 获取用户所有会话 + operationId: GetAllConversations + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: ownerUserID为要获取的用户ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetAllConversationsReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetAllConversationsResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetAllConversationsResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetAllConversationsResp' + summary: 获取用户所有会话 + tags: + - 会话相关 + /msg/get_conversation: + post: + consumes: + - application/json + description: 根据会话ID获取会话 + operationId: GetConversation + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: ownerUserID为要获取的用户ID
conversationID为要获取的会话ID + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetConversationReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetConversationResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetConversationResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetConversationResp' + summary: 根据会话ID获取会话 + tags: + - 会话相关 + /msg/get_conversations: + post: + consumes: + - application/json + description: 根据会话ID列表获取会话 + operationId: GetConversations + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: ownerUserID为要获取的用户ID
conversationIDs为要获取的会话ID列表 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetConversationsReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetConversationsResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetConversationsResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetConversationsResp' + summary: 根据会话ID列表获取会话 + tags: + - 会话相关 + /msg/manage_send_msg: + post: + consumes: + - application/json + description: 管理员发送/撤回消息 消息格式详细见
消息格式 + operationId: ManagementSendMsg + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 该请求和消息结构体一样 + in: body + name: 管理员发送文字消息 + required: true + schema: + allOf: + - $ref: '#/definitions/base_info.ManagementSendMsgReq' + - properties: + content: + $ref: '#/definitions/Open_IM_internal_api_manage.TextElem' + type: object + - description: 该请求和消息结构体一样 + in: body + name: 管理员发送OA通知消息 + required: true + schema: + allOf: + - $ref: '#/definitions/base_info.ManagementSendMsgReq' + - properties: + content: + $ref: '#/definitions/Open_IM_internal_api_manage.OANotificationElem' + type: object + - description: 该请求和消息结构体一样 + in: body + name: 管理员撤回单聊消息 + required: true + schema: + allOf: + - $ref: '#/definitions/base_info.ManagementSendMsgReq' + - properties: + content: + $ref: '#/definitions/Open_IM_internal_api_manage.RevokeElem' + type: object + produces: + - application/json + responses: + "0": + description: serverMsgID为服务器消息ID
clientMsgID为客户端消息ID
sendTime为发送消息时间 + schema: + $ref: '#/definitions/base_info.ManagementSendMsgResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.ManagementSendMsgResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.ManagementSendMsgResp' + summary: 管理员发送/撤回消息 + tags: + - 消息相关 /office/comment_one_work_moment: post: consumes: @@ -3661,6 +4846,453 @@ paths: summary: 修改标签 tags: - 标签 + /organization/create_department: + post: + consumes: + - application/json + description: 创建部门 + operationId: CreateDepartment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CreateDepartmentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + allOf: + - $ref: '#/definitions/base_info.CreateDepartmentResp' + - properties: + data: + $ref: '#/definitions/server_api_params.Department' + type: object + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CreateDepartmentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CreateDepartmentResp' + summary: 创建部门 + tags: + - 组织架构相关 + /organization/create_department_member: + post: + consumes: + - application/json + description: 创建部门用户 + operationId: CreateDepartmentMember + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CreateDepartmentMemberReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CreateDepartmentMemberResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CreateDepartmentMemberResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CreateDepartmentMemberResp' + summary: 创建部门用户 + tags: + - 组织架构相关 + /organization/create_organization_user: + post: + consumes: + - application/json + description: 组织架构导入用户 + operationId: CreateOrganizationUser + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.CreateOrganizationUserReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.CreateOrganizationUserResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.CreateOrganizationUserResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.CreateOrganizationUserResp' + summary: 组织架构导入用户 + tags: + - 组织架构相关 + /organization/delete_department: + post: + consumes: + - application/json + description: 删除部门 + operationId: DeleteDepartment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DeleteDepartmentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DeleteDepartmentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DeleteDepartmentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DeleteDepartmentResp' + summary: 删除部门 + tags: + - 组织架构相关 + /organization/delete_organization_user: + post: + consumes: + - application/json + description: 删除组织架构中某个用户 + operationId: DeleteOrganizationUser + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DeleteOrganizationUserReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DeleteOrganizationUserResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DeleteOrganizationUserResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DeleteOrganizationUserResp' + summary: 删除组织架构中某个用户 + tags: + - 组织架构相关 + /organization/delete_user_in_department: + post: + consumes: + - application/json + description: 删除部门中某个用户 + operationId: DeleteUserInDepartment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.DeleteUserInDepartmentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.DeleteUserInDepartmentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.DeleteUserInDepartmentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.DeleteUserInDepartmentResp' + summary: 删除部门中某个用户 + tags: + - 组织架构相关 + /organization/get_department_member: + post: + consumes: + - application/json + description: 获取部门中所有成员 + operationId: GetDepartmentMember + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetDepartmentMemberReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + allOf: + - $ref: '#/definitions/base_info.GetDepartmentMemberResp' + - properties: + data: + $ref: '#/definitions/server_api_params.UserDepartmentMember' + type: object + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetDepartmentMemberResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetDepartmentMemberResp' + summary: 获取部门中所有成员 + tags: + - 组织架构相关 + /organization/get_sub_department: + post: + consumes: + - application/json + description: 获取子部门列表 + operationId: GetSubDepartment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetSubDepartmentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.GetSubDepartmentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetSubDepartmentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetSubDepartmentResp' + summary: 获取子部门列表 + tags: + - 组织架构相关 + /organization/get_user_in_department: + post: + consumes: + - application/json + description: 获取部门中的所有用户 + operationId: GetUserInDepartment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.GetUserInDepartmentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + allOf: + - $ref: '#/definitions/base_info.GetUserInDepartmentResp' + - properties: + data: + $ref: '#/definitions/server_api_params.UserInDepartment' + type: object + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.GetUserInDepartmentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.GetUserInDepartmentResp' + summary: 获取部门中的所有用户 + tags: + - 组织架构相关 + /organization/update_department: + post: + consumes: + - application/json + description: 更新部门信息 + operationId: UpdateDepartment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.UpdateDepartmentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.UpdateDepartmentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.UpdateDepartmentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.UpdateDepartmentResp' + summary: 更新部门信息 + tags: + - 组织架构相关 + /organization/update_organization_user: + post: + consumes: + - application/json + description: 更新组织架构中的用户 + operationId: UpdateOrganizationUser + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.UpdateOrganizationUserReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.UpdateOrganizationUserResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.UpdateOrganizationUserResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.UpdateOrganizationUserResp' + summary: 更新组织架构中的用户 + tags: + - 组织架构相关 + /organization/update_user_in_department: + post: + consumes: + - application/json + description: 更新部门中某个用户 + operationId: UpdateUserInDepartment + parameters: + - description: im token + in: header + name: token + required: true + type: string + - description: 请求 + in: body + name: req + required: true + schema: + $ref: '#/definitions/base_info.UpdateUserInDepartmentReq' + produces: + - application/json + responses: + "0": + description: "" + schema: + $ref: '#/definitions/base_info.UpdateUserInDepartmentResp' + "400": + description: errCode为400 一般为参数输入错误, token未带上等 + schema: + $ref: '#/definitions/base_info.UpdateUserInDepartmentResp' + "500": + description: errCode为500 一般为服务器内部错误 + schema: + $ref: '#/definitions/base_info.UpdateUserInDepartmentResp' + summary: 更新部门中某个用户 + tags: + - 组织架构相关 /third/minio_upload: post: consumes: @@ -3698,11 +5330,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.MinioUploadFileResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.MinioUploadFileResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: minio上传文件(web api) tags: - 第三方服务相关 @@ -3811,11 +5443,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetSelfUserInfoResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetSelfUserInfoResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取自己的信息 tags: - 用户相关 @@ -3843,15 +5475,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetUsersInfoResp' + allOf: + - $ref: '#/definitions/base_info.GetUsersInfoResp' + - properties: + Data: + items: + $ref: '#/definitions/server_api_params.PublicUserInfo' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetUsersInfoResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetUsersInfoResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户信息 tags: - 用户相关 @@ -3883,11 +5522,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetUsersOnlineStatusResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetUsersOnlineStatusResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户在线状态 tags: - 用户相关 @@ -3903,7 +5542,7 @@ paths: name: token required: true type: string - - description: 请求体 + - description: globalRecvMsgOpt为全局免打扰设置0为关闭 1为开启 in: body name: req required: true @@ -3919,11 +5558,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.SetGlobalRecvMessageOptResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.SetGlobalRecvMessageOptResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 设置全局免打扰 tags: - 用户相关 @@ -3955,11 +5594,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.UpdateUserInfoResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.UpdateUserInfoResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 修改用户信息 tags: - 用户相关 diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 42b715180..37ceefff2 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -29,6 +29,13 @@ import ( "Open_IM/pkg/common/constant" ) +// @title open-IM-Server API +// @version 1.0 +// @description open-IM-Server 的API服务器文档, 文档中所有请求都有一个operationID字段用于链路追踪 + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html +// @BasePath / func main() { log.NewPrivateLog(constant.LogFileName) gin.SetMode(gin.ReleaseMode) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 1f06ec847..540e6cc92 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -16,17 +16,17 @@ import ( "strings" ) -// @Summary 用户登录 -// @Description 用户登录 +// @Summary 用户注册 +// @Description 用户注册 // @Tags 鉴权认证 // @ID UserRegister // @Accept json // @Param token header string true "im token" -// @Param req body api.UserRegisterReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID
ex为拓展字段" +// @Param req body api.UserRegisterReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID
ex为拓展字段
gender为性别, 0为女, 1为男" // @Produce json // @Success 0 {object} api.UserRegisterResp -// @Failure 500 {object} api.UserRegisterResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.UserRegisterResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /auth/user_register [post] func UserRegister(c *gin.Context) { params := api.UserRegisterReq{} @@ -91,11 +91,11 @@ func UserRegister(c *gin.Context) { // @ID UserToken // @Accept json // @Param token header string true "im token" -// @Param req body api.UserTokenReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID" +// @Param req body api.UserTokenReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID" // @Produce json // @Success 0 {object} api.UserTokenResp -// @Failure 500 {object} api.UserTokenResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.UserTokenResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /auth/user_token [post] func UserToken(c *gin.Context) { params := api.UserTokenReq{} @@ -135,17 +135,17 @@ func UserToken(c *gin.Context) { c.JSON(http.StatusOK, resp) } -// @Summary 解析token -// @Description 解析用户token +// @Summary 解析当前用户token +// @Description 解析当前用户token(token在请求头中传入) // @Tags 鉴权认证 // @ID ParseToken // @Accept json // @Param token header string true "im token" -// @Param req body api.ParseTokenReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段, platform为平台ID" +// @Param req body api.ParseTokenReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID" // @Produce json -// @Success 0 {object} api.ParseTokenResp -// @Failure 500 {object} api.ParseTokenResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.ParseTokenResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.ParseTokenResp{Data=api.ExpireTime} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /auth/parse_token [post] func ParseToken(c *gin.Context) { params := api.ParseTokenReq{} @@ -179,11 +179,11 @@ func ParseToken(c *gin.Context) { // @ID ForceLogout // @Accept json // @Param token header string true "im token" -// @Param req body api.ForceLogoutReq true "platform为平台ID, fromUserID为要执行强制登出的用户ID" +// @Param req body api.ForceLogoutReq true "platform为平台ID
fromUserID为要执行强制登出的用户ID" // @Produce json // @Success 0 {object} api.ForceLogoutResp -// @Failure 500 {object} api.ForceLogoutResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.ForceLogoutResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /auth/force_logout [post] func ForceLogout(c *gin.Context) { params := api.ForceLogoutReq{} diff --git a/internal/api/chat/del_msg.go b/internal/api/chat/del_msg.go index d993ef23f..c6a6da385 100644 --- a/internal/api/chat/del_msg.go +++ b/internal/api/chat/del_msg.go @@ -25,8 +25,8 @@ import ( // @Param req body api.DelMsgReq true "userID为要删除的用户ID
seqList为seq列表" // @Produce json // @Success 0 {object} api.DelMsgResp -// @Failure 500 {object} api.DelMsgResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DelMsgResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /msg/del_msg [post] func DelMsg(c *gin.Context) { var ( @@ -82,8 +82,8 @@ func DelMsg(c *gin.Context) { // @Param req body api.CleanUpMsgReq true "userID为要清空的用户ID" // @Produce json // @Success 0 {object} api.CleanUpMsgResp -// @Failure 500 {object} api.CleanUpMsgResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CleanUpMsgResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /msg/clear_msg [post] func ClearMsg(c *gin.Context) { params := api.CleanUpMsgReq{} diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go index b60b89ed4..36d7388bf 100644 --- a/internal/api/conversation/conversation.go +++ b/internal/api/conversation/conversation.go @@ -127,6 +127,18 @@ func BatchSetConversations(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 获取用户所有会话 +// @Description 获取用户所有会话 +// @Tags 会话相关 +// @ID GetAllConversations +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetAllConversationsReq true "ownerUserID为要获取的用户ID" +// @Produce json +// @Success 0 {object} api.GetAllConversationsResp +// @Failure 500 {object} api.GetAllConversationsResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetAllConversationsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /msg/get_all_conversations [post] func GetAllConversations(c *gin.Context) { var ( req api.GetAllConversationsReq @@ -165,6 +177,18 @@ func GetAllConversations(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 根据会话ID获取会话 +// @Description 根据会话ID获取会话 +// @Tags 会话相关 +// @ID GetConversation +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetConversationReq true "ownerUserID为要获取的用户ID
conversationID为要获取的会话ID" +// @Produce json +// @Success 0 {object} api.GetConversationResp +// @Failure 500 {object} api.GetConversationResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetConversationResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /msg/get_conversation [post] func GetConversation(c *gin.Context) { var ( req api.GetConversationReq @@ -203,6 +227,18 @@ func GetConversation(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 根据会话ID列表获取会话 +// @Description 根据会话ID列表获取会话 +// @Tags 会话相关 +// @ID GetConversations +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetConversationsReq true "ownerUserID为要获取的用户ID
conversationIDs为要获取的会话ID列表" +// @Produce json +// @Success 0 {object} api.GetConversationsResp +// @Failure 500 {object} api.GetConversationsResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetConversationsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /msg/get_conversations [post] func GetConversations(c *gin.Context) { var ( req api.GetConversationsReq diff --git a/internal/api/friend/friend.go b/internal/api/friend/friend.go index 1170a3363..ac637275f 100644 --- a/internal/api/friend/friend.go +++ b/internal/api/friend/friend.go @@ -22,11 +22,11 @@ import ( // @ID AddBlack // @Accept json // @Param token header string true "im token" -// @Param req body api.AddBlacklistReq true "fromUserID为设置的用户, toUserID为被设置的用户" +// @Param req body api.AddBlacklistReq true "fromUserID为设置的用户
toUserID为被设置的用户" // @Produce json // @Success 0 {object} api.AddBlacklistResp -// @Failure 500 {object} api.AddBlacklistResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.AddBlacklistResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/add_black [post] func AddBlack(c *gin.Context) { params := api.AddBlacklistReq{} @@ -43,7 +43,7 @@ func AddBlack(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } log.NewInfo(params.OperationID, "AddBlacklist args ", req.String()) @@ -67,11 +67,11 @@ func AddBlack(c *gin.Context) { // @ID ImportFriend // @Accept json // @Param token header string true "im token" -// @Param req body api.ImportFriendReq true "fromUserID批量加好友的用户ID, friendUserIDList为" +// @Param req body api.ImportFriendReq true "fromUserID批量加好友的用户ID
friendUserIDList为" // @Produce json -// @Success 0 {object} api.ImportFriendResp "data列表中对象的result-1为添加该用户失败, 0为成功" -// @Failure 500 {object} api.ImportFriendResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.ImportFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.ImportFriendResp "data列表中对象的result-1为添加该用户失败
0为成功" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/import_friend [post] func ImportFriend(c *gin.Context) { params := api.ImportFriendReq{} @@ -88,7 +88,7 @@ func ImportFriend(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -127,11 +127,11 @@ func ImportFriend(c *gin.Context) { // @ID AddFriend // @Accept json // @Param token header string true "im token" -// @Param req body api.AddFriendReq true "reqMsg为申请信息, fromUserID为申请用户, toUserID为被添加用户" +// @Param req body api.AddFriendReq true "reqMsg为申请信息
fromUserID为申请用户
toUserID为被添加用户" // @Produce json // @Success 0 {object} api.AddFriendResp -// @Failure 500 {object} api.AddFriendResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.AddFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/add_friend [post] func AddFriend(c *gin.Context) { params := api.AddFriendReq{} @@ -182,11 +182,11 @@ func AddFriend(c *gin.Context) { // @ID AddFriendResponse // @Accept json // @Param token header string true "im token" -// @Param req body api.AddFriendResponseReq true "fromUserID同意/拒绝的用户ID, toUserID为申请用户, handleMsg为处理信息, flag为具体操作, 1为同意, 2为拒绝" +// @Param req body api.AddFriendResponseReq true "fromUserID同意/拒绝的用户ID
toUserID为申请用户D
handleMsg为处理信息
flag为具体操作, 1为同意, 2为拒绝" // @Produce json // @Success 0 {object} api.AddFriendResponseResp -// @Failure 500 {object} api.AddFriendResponseResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.AddFriendResponseResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/add_friend_response [post] func AddFriendResponse(c *gin.Context) { params := api.AddFriendResponseReq{} @@ -240,11 +240,11 @@ func AddFriendResponse(c *gin.Context) { // @ID DeleteFriend // @Accept json // @Param token header string true "im token" -// @Param req body api.DeleteFriendReq true "fromUserID为操作用户, toUserID为被删除用户" +// @Param req body api.DeleteFriendReq true "fromUserID为操作用户
toUserID为被删除用户" // @Produce json // @Success 0 {object} api.DeleteFriendResp -// @Failure 500 {object} api.DeleteFriendResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DeleteFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/delete_friend [post] func DeleteFriend(c *gin.Context) { params := api.DeleteFriendReq{} @@ -262,7 +262,7 @@ func DeleteFriend(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -296,9 +296,9 @@ func DeleteFriend(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetBlackListReq true "fromUserID要获取黑名单的用户" // @Produce json -// @Success 0 {object} api.GetBlackListResp -// @Failure 500 {object} api.GetBlackListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetBlackListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetBlackListResp{data=[]open_im_sdk.PublicUserInfo} +// @Failure 500 {object} api.Swagger400Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger500Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/get_black_list [post] func GetBlacklist(c *gin.Context) { params := api.GetBlackListReq{} @@ -354,11 +354,11 @@ func GetBlacklist(c *gin.Context) { // @ID SetFriendRemark // @Accept json // @Param token header string true "im token" -// @Param req body api.SetFriendRemarkReq true "fromUserID为设置的用户, toUserID为被设置的用户, remark为好友备注" +// @Param req body api.SetFriendRemarkReq true "fromUserID为设置的用户
toUserID为被设置的用户
remark为好友备注" // @Produce json // @Success 0 {object} api.SetFriendRemarkResp -// @Failure 500 {object} api.SetFriendRemarkResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.SetFriendRemarkResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/set_friend_remark [post] func SetFriendRemark(c *gin.Context) { params := api.SetFriendRemarkReq{} @@ -377,7 +377,7 @@ func SetFriendRemark(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -412,8 +412,8 @@ func SetFriendRemark(c *gin.Context) { // @Param req body api.RemoveBlackListReq true "fromUserID要获取黑名单的用户" // @Produce json // @Success 0 {object} api.RemoveBlackListResp -// @Failure 500 {object} api.RemoveBlackListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.RemoveBlackListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/remove_black [post] func RemoveBlack(c *gin.Context) { params := api.RemoveBlackListReq{} @@ -462,11 +462,11 @@ func RemoveBlack(c *gin.Context) { // @ID IsFriend // @Accept json // @Param token header string true "im token" -// @Param req body api.IsFriendReq true "fromUserID为请求用户, toUserID为要检查的用户" +// @Param req body api.IsFriendReq true "fromUserID为请求用户
toUserID为要检查的用户" // @Produce json // @Success 0 {object} api.IsFriendResp -// @Failure 500 {object} api.IsFriendResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.IsFriendResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/is_friend [post] func IsFriend(c *gin.Context) { params := api.IsFriendReq{} @@ -519,9 +519,9 @@ func IsFriend(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetFriendListReq true "fromUserID为要获取好友列表的用户ID" // @Produce json -// @Success 0 {object} api.GetFriendListResp -// @Failure 500 {object} api.GetFriendListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetFriendListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetFriendListResp{data=[]open_im_sdk.FriendInfo} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/get_friend_list [post] func GetFriendList(c *gin.Context) { params := api.GetFriendListReq{} @@ -539,7 +539,7 @@ func GetFriendList(c *gin.Context) { if !ok { errMsg := req.CommID.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.CommID.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -575,9 +575,9 @@ func GetFriendList(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetFriendApplyListReq true "fromUserID为要获取申请列表的用户ID" // @Produce json -// @Success 0 {object} api.GetFriendApplyListResp -// @Failure 500 {object} api.GetFriendApplyListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetFriendApplyListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetFriendApplyListResp{data=[]open_im_sdk.FriendRequest} +// @Failure 500 {object} api.Swagger400Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/get_friend_apply_list [post] func GetFriendApplyList(c *gin.Context) { params := api.GetFriendApplyListReq{} @@ -631,9 +631,9 @@ func GetFriendApplyList(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetSelfApplyListReq true "fromUserID为自己的用户ID" // @Produce json -// @Success 0 {object} api.GetSelfApplyListResp -// @Failure 500 {object} api.GetSelfApplyListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetSelfApplyListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetSelfApplyListResp{data=[]open_im_sdk.FriendRequest} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /friend/get_self_friend_apply_list [post] func GetSelfFriendApplyList(c *gin.Context) { params := api.GetSelfApplyListReq{} diff --git a/internal/api/group/group.go b/internal/api/group/group.go index fafb33081..e7696fb92 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -29,8 +29,8 @@ import ( // @Param req body api.KickGroupMemberReq true "GroupID为要操作的群ID
kickedUserIDList为要踢出的群用户ID
reason为原因" // @Produce json // @Success 0 {object} api.KickGroupMemberResp "result为结果码, -1为失败, 0为成功" -// @Failure 500 {object} api.KickGroupMemberResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.KickGroupMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/kick_group [post] func KickGroupMember(c *gin.Context) { params := api.KickGroupMemberReq{} @@ -49,7 +49,7 @@ func KickGroupMember(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -90,11 +90,11 @@ func KickGroupMember(c *gin.Context) { // @ID GetGroupMembersInfo // @Accept json // @Param token header string true "im token" -// @Param req body api.GetGroupMembersInfoReq true "memberList为要获取群成员的群ID列表" +// @Param req body api.GetGroupMembersInfoReq true "groupID为要获取的群ID
memberList为要获取群成员的群ID列表" // @Produce json // @Success 0 {object} api.GetGroupMembersInfoResp{data=[]open_im_sdk.GroupMemberFullInfo} -// @Failure 500 {object} api.GetGroupMembersInfoResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetGroupMembersInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/get_group_members_info [post] func GetGroupMembersInfo(c *gin.Context) { params := api.GetGroupMembersInfoReq{} @@ -112,7 +112,7 @@ func GetGroupMembersInfo(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -156,7 +156,7 @@ func GetGroupMemberList(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -194,8 +194,8 @@ func GetGroupMemberList(c *gin.Context) { // @Param req body api.GetGroupAllMemberReq true "GroupID为要获取群成员的群ID" // @Produce json // @Success 0 {object} api.GetGroupAllMemberResp{data=[]open_im_sdk.GroupMemberFullInfo} -// @Failure 500 {object} api.GetGroupAllMemberResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetGroupAllMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/get_group_all_member_list [post] func GetGroupAllMemberList(c *gin.Context) { params := api.GetGroupAllMemberReq{} @@ -213,7 +213,7 @@ func GetGroupAllMemberList(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -249,8 +249,8 @@ func GetGroupAllMemberList(c *gin.Context) { // @Param req body api.GetJoinedGroupListReq true "fromUserID为要获取的用户ID" // @Produce json // @Success 0 {object} api.GetJoinedGroupListResp{data=[]open_im_sdk.GroupInfo} -// @Failure 500 {object} api.GetJoinedGroupListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetJoinedGroupListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/get_joined_group_list [post] func GetJoinedGroupList(c *gin.Context) { params := api.GetJoinedGroupListReq{} @@ -268,7 +268,7 @@ func GetJoinedGroupList(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -304,8 +304,8 @@ func GetJoinedGroupList(c *gin.Context) { // @Param req body api.InviteUserToGroupReq true "groupID为要拉进的群组ID
invitedUserIDList为要获取群成员的群ID列表
reason为原因" // @Produce json // @Success 0 {object} api.InviteUserToGroupResp "result为结果码, -1为失败, 0为成功"" -// @Failure 500 {object} api.InviteUserToGroupResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.InviteUserToGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/invite_user_to_group [post] func InviteUserToGroup(c *gin.Context) { params := api.InviteUserToGroupReq{} @@ -323,7 +323,7 @@ func InviteUserToGroup(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -363,11 +363,11 @@ func InviteUserToGroup(c *gin.Context) { // @ID CreateGroup // @Accept json // @Param token header string true "im token" -// @Param req body api.CreateGroupReq true "ownerUserID为群主ID
ex为群扩展字段
roleLevel为群员角色,1为普通用户 2为群主 3为管理员" +// @Param req body api.CreateGroupReq true "groupType这里填0代表普通群
groupName为群名称
introduction为群介绍
notification为群公共
ownerUserID为群主ID
ex为群扩展字段
memberList中对象roleLevel为群员角色,1为普通用户 2为群主 3为管理员" // @Produce json // @Success 0 {object} api.CreateGroupResp{data=open_im_sdk.GroupInfo} -// @Failure 500 {object} api.CreateGroupResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CreateGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/create_group [post] func CreateGroup(c *gin.Context) { params := api.CreateGroupReq{} @@ -431,9 +431,9 @@ func CreateGroup(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetGroupApplicationListReq true "fromUserID为要获取的用户ID" // @Produce json -// @Success 0 {object} api.GetGroupApplicationListResp -// @Failure 500 {object} api.GetGroupApplicationListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetGroupApplicationListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetGroupApplicationListResp{data=[]open_im_sdk.GroupRequest} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/get_recv_group_applicationList [post] func GetRecvGroupApplicationList(c *gin.Context) { params := api.GetGroupApplicationListReq{} @@ -484,9 +484,9 @@ func GetRecvGroupApplicationList(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetUserReqGroupApplicationListReq true "userID为要获取的用户ID" // @Produce json -// @Success 0 {object} api.GetGroupApplicationListResp -// @Failure 500 {object} api.GetGroupApplicationListResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetGroupApplicationListResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetGroupApplicationListResp{data=[]open_im_sdk.GroupRequest} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/get_user_req_group_applicationList [post] func GetUserReqGroupApplicationList(c *gin.Context) { var params api.GetUserReqGroupApplicationListReq @@ -537,8 +537,8 @@ func GetUserReqGroupApplicationList(c *gin.Context) { // @Param req body api.GetGroupInfoReq true "groupIDList为群ID列表" // @Produce json // @Success 0 {object} api.GetGroupInfoResp -// @Failure 500 {object} api.GetGroupInfoResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetGroupInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/get_groups_info [post] func GetGroupsInfo(c *gin.Context) { params := api.GetGroupInfoReq{} @@ -556,7 +556,7 @@ func GetGroupsInfo(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -606,8 +606,8 @@ func GetGroupsInfo(c *gin.Context) { // @Param req body api.ApplicationGroupResponseReq true "groupID为要处理的群ID
fromUserID为要处理的用户ID
handleMsg为处理结果信息
handleResult为处理结果 1为同意加群 2为拒绝加群" // @Produce json // @Success 0 {object} api.ApplicationGroupResponseResp -// @Failure 500 {object} api.ApplicationGroupResponseResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.ApplicationGroupResponseResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/group_application_response [post] func ApplicationGroupResponse(c *gin.Context) { params := api.ApplicationGroupResponseReq{} @@ -625,7 +625,7 @@ func ApplicationGroupResponse(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -657,11 +657,11 @@ func ApplicationGroupResponse(c *gin.Context) { // @ID JoinGroup // @Accept json // @Param token header string true "im token" -// @Param req body api.JoinGroupReq true "reqMessage为申请进群信息" +// @Param req body api.JoinGroupReq true "reqMessage为申请进群信息
groupID为申请的群ID" // @Produce json // @Success 0 {object} api.JoinGroupResp -// @Failure 500 {object} api.JoinGroupResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.JoinGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/join_group [post] func JoinGroup(c *gin.Context) { params := api.JoinGroupReq{} @@ -704,8 +704,8 @@ func JoinGroup(c *gin.Context) { c.JSON(http.StatusOK, resp) } -// @Summary 退出群聊 -// @Description 退出群聊 +// @Summary 当前用户退出群聊 +// @Description 当前用户退出群聊 // @Tags 群组相关 // @ID QuitGroup // @Accept json @@ -713,8 +713,8 @@ func JoinGroup(c *gin.Context) { // @Param req body api.QuitGroupReq true "groupID为要退出的群ID" // @Produce json // @Success 0 {object} api.QuitGroupResp -// @Failure 500 {object} api.QuitGroupResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.QuitGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/quit_group [post] func QuitGroup(c *gin.Context) { params := api.QuitGroupReq{} @@ -732,7 +732,7 @@ func QuitGroup(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -763,11 +763,11 @@ func QuitGroup(c *gin.Context) { // @ID SetGroupInfo // @Accept json // @Param token header string true "im token" -// @Param req body api.SetGroupInfoReq true "notification为群介绍
introduction为群公告
needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群" +// @Param req body api.SetGroupInfoReq true "groupID为要修改的群ID
groupName为新的群名称
notification为群介绍
introduction为群公告
needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群" // @Produce json // @Success 0 {object} api.SetGroupInfoResp -// @Failure 500 {object} api.SetGroupInfoResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.SetGroupInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/set_group_info [post] func SetGroupInfo(c *gin.Context) { params := api.SetGroupInfoReq{} @@ -791,7 +791,7 @@ func SetGroupInfo(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -825,8 +825,8 @@ func SetGroupInfo(c *gin.Context) { // @Param req body api.TransferGroupOwnerReq true "GroupID为要操作的群ID
oldOwnerUserID为老群主ID
newOwnerUserID为新群主ID" // @Produce json // @Success 0 {object} api.TransferGroupOwnerResp -// @Failure 500 {object} api.TransferGroupOwnerResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.TransferGroupOwnerResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/transfer_group [post] func TransferGroupOwner(c *gin.Context) { params := api.TransferGroupOwnerReq{} @@ -844,7 +844,7 @@ func TransferGroupOwner(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -879,8 +879,8 @@ func TransferGroupOwner(c *gin.Context) { // @Param req body api.DismissGroupReq true "groupID为要解散的群组ID" // @Produce json // @Success 0 {object} api.DismissGroupResp -// @Failure 500 {object} api.DismissGroupResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DismissGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/dismiss_group [post] func DismissGroup(c *gin.Context) { params := api.DismissGroupReq{} @@ -898,7 +898,7 @@ func DismissGroup(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -933,8 +933,8 @@ func DismissGroup(c *gin.Context) { // @Param req body api.MuteGroupMemberReq true "groupID为群组ID
userID为要禁言的用户ID
mutedSeconds为禁言秒数" // @Produce json // @Success 0 {object} api.DismissGroupResp -// @Failure 500 {object} api.DismissGroupResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DismissGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/mute_group_member [post] func MuteGroupMember(c *gin.Context) { params := api.MuteGroupMemberReq{} @@ -952,7 +952,7 @@ func MuteGroupMember(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -987,8 +987,8 @@ func MuteGroupMember(c *gin.Context) { // @Param req body api.CancelMuteGroupMemberReq true "groupID为群组ID
userID为要取消禁言的用户ID" // @Produce json // @Success 0 {object} api.CancelMuteGroupMemberResp -// @Failure 500 {object} api.CancelMuteGroupMemberResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CancelMuteGroupMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/cancel_mute_group_member [post] func CancelMuteGroupMember(c *gin.Context) { params := api.CancelMuteGroupMemberReq{} @@ -1006,7 +1006,7 @@ func CancelMuteGroupMember(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -1060,7 +1060,7 @@ func MuteGroup(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) return } @@ -1095,8 +1095,8 @@ func MuteGroup(c *gin.Context) { // @Param req body api.CancelMuteGroupReq true "groupID为群组ID" // @Produce json // @Success 0 {object} api.CancelMuteGroupResp -// @Failure 500 {object} api.CancelMuteGroupResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CancelMuteGroupResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/cancel_mute_group [post] func CancelMuteGroup(c *gin.Context) { params := api.CancelMuteGroupReq{} @@ -1114,7 +1114,7 @@ func CancelMuteGroup(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -1158,7 +1158,7 @@ func SetGroupMemberNickname(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } @@ -1190,11 +1190,11 @@ func SetGroupMemberNickname(c *gin.Context) { // @ID SetGroupMemberInfo // @Accept json // @Param token header string true "im token" -// @Param req body api.SetGroupMemberInfoReq true "除了operationID, userID, groupID其他参数可选" +// @Param req body api.SetGroupMemberInfoReq true "除了operationID, userID, groupID其他参数可选
ex为拓展字段
faceURL为群头像
nickName为群昵称
roleLevel为群员角色,1为普通用户 2为群主 3为管理员" // @Produce json // @Success 0 {object} api.SetGroupMemberInfoResp -// @Failure 500 {object} api.SetGroupMemberInfoResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.SetGroupMemberInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /group/set_group_member_info [post] func SetGroupMemberInfo(c *gin.Context) { var ( @@ -1212,7 +1212,7 @@ func SetGroupMemberInfo(c *gin.Context) { if !ok { errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) return } diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 6c9cd5ece..a70cbacf2 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -59,7 +59,6 @@ func newUserSendMsgReq(params *api.ManagementSendMsgReq) *pbChat.SendMsgReq { OperationID: params.OperationID, MsgData: &open_im_sdk.MsgData{ SendID: params.SendID, - RecvID: params.RecvID, GroupID: params.GroupID, ClientMsgID: utils.GetMsgID(params.SendID), SenderPlatformID: params.SenderPlatformID, @@ -69,6 +68,7 @@ func newUserSendMsgReq(params *api.ManagementSendMsgReq) *pbChat.SendMsgReq { MsgFrom: constant.SysMsgType, ContentType: params.ContentType, Content: []byte(newContent), + RecvID: params.RecvID, // ForceList: params.ForceList, CreateTime: utils.GetCurrentTimestampByMill(), Options: options, @@ -89,6 +89,20 @@ func init() { validate = validator.New() } +// @Summary 管理员发送/撤回消息 +// @Description 管理员发送/撤回消息 消息格式详细见
消息格式 +// @Tags 消息相关 +// @ID ManagementSendMsg +// @Accept json +// @Param token header string true "im token" +// @Param 管理员发送文字消息 body api.ManagementSendMsgReq{content=TextElem{}} true "该请求和消息结构体一样" +// @Param 管理员发送OA通知消息 body api.ManagementSendMsgReq{content=OANotificationElem{}} true "该请求和消息结构体一样" +// @Param 管理员撤回单聊消息 body api.ManagementSendMsgReq{content=RevokeElem{}} true "该请求和消息结构体一样" +// @Produce json +// @Success 0 {object} api.ManagementSendMsgResp "serverMsgID为服务器消息ID
clientMsgID为客户端消息ID
sendTime为发送消息时间" +// @Failure 500 {object} api.ManagementSendMsgResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.ManagementSendMsgResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /msg/manage_send_msg [post] func ManagementSendMsg(c *gin.Context) { var data interface{} params := api.ManagementSendMsgReq{} @@ -194,6 +208,19 @@ func ManagementSendMsg(c *gin.Context) { c.JSON(http.StatusOK, resp) } +// @Summary 管理员批量发送群聊单聊消息 +// @Description 管理员批量发送群聊单聊消息 消息格式详细见
消息格式 +// @Tags 消息相关 +// @ID ManagementBatchSendMsg +// @Accept json +// @Param token header string true "im token" +// @Param 管理员批量发送单聊消息 body api.ManagementBatchSendMsgReq{content=TextElem{}} true "该请求和消息结构体一样
recvIDList为接受消息的用户ID列表" +// @Param 管理员批量发送OA通知 body api.ManagementSendMsgReq{content=OANotificationElem{}} true "该请求和消息结构体一样
recvIDList为接受消息的用户ID列表" +// @Produce json +// @Success 0 {object} api.ManagementBatchSendMsgReq "serverMsgID为服务器消息ID
clientMsgID为客户端消息ID
sendTime为发送消息时间" +// @Failure 500 {object} api.ManagementBatchSendMsgReq "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.ManagementBatchSendMsgReq "errCode为400 一般为参数输入错误, token未带上等" +// @Router /msg/batch_send_msg [post] func ManagementBatchSendMsg(c *gin.Context) { var data interface{} params := api.ManagementBatchSendMsgReq{} @@ -260,7 +287,11 @@ func ManagementBatchSendMsg(c *gin.Context) { } log.NewInfo(params.OperationID, "Ws call success to ManagementSendMsgReq", params) for _, recvID := range params.RecvIDList { - pbData := newUserSendMsgReq(¶ms.ManagementSendMsgReq) + req := &api.ManagementSendMsgReq{ + ManagementSendMsg: params.ManagementSendMsg, + RecvID: recvID, + } + pbData := newUserSendMsgReq(req) pbData.MsgData.RecvID = recvID log.Info(params.OperationID, "", "api ManagementSendMsg call start..., ", pbData.String()) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, params.OperationID) diff --git a/internal/api/organization/organization.go b/internal/api/organization/organization.go index 5998fb0dd..32273756f 100644 --- a/internal/api/organization/organization.go +++ b/internal/api/organization/organization.go @@ -16,6 +16,18 @@ import ( "strings" ) +// @Summary 创建部门 +// @Description 创建部门 +// @Tags 组织架构相关 +// @ID CreateDepartment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CreateDepartmentReq true "请求" +// @Produce json +// @Success 0 {object} api.CreateDepartmentResp{data=open_im_sdk.Department} +// @Failure 500 {object} api.CreateDepartmentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CreateDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/create_department [post] func CreateDepartment(c *gin.Context) { params := api.CreateDepartmentReq{} if err := c.BindJSON(¶ms); err != nil { @@ -59,6 +71,18 @@ func CreateDepartment(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 更新部门信息 +// @Description 更新部门信息 +// @Tags 组织架构相关 +// @ID UpdateDepartment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.UpdateDepartmentReq true "请求" +// @Produce json +// @Success 0 {object} api.UpdateDepartmentResp +// @Failure 500 {object} api.UpdateDepartmentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.UpdateDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/update_department [post] func UpdateDepartment(c *gin.Context) { params := api.UpdateDepartmentReq{} if err := c.BindJSON(¶ms); err != nil { @@ -101,6 +125,18 @@ func UpdateDepartment(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 获取子部门列表 +// @Description 获取子部门列表 +// @Tags 组织架构相关 +// @ID GetSubDepartment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetSubDepartmentReq true "请求" +// @Produce json +// @Success 0 {object} api.GetSubDepartmentResp +// @Failure 500 {object} api.GetSubDepartmentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetSubDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/get_sub_department [post] func GetSubDepartment(c *gin.Context) { params := api.GetSubDepartmentReq{} if err := c.BindJSON(¶ms); err != nil { @@ -146,6 +182,18 @@ func GetAllDepartment(c *gin.Context) { } +// @Summary 删除部门 +// @Description 删除部门 +// @Tags 组织架构相关 +// @ID DeleteDepartment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DeleteDepartmentReq true "请求" +// @Produce json +// @Success 0 {object} api.DeleteDepartmentResp +// @Failure 500 {object} api.DeleteDepartmentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DeleteDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/delete_department [post] func DeleteDepartment(c *gin.Context) { params := api.DeleteDepartmentReq{} if err := c.BindJSON(¶ms); err != nil { @@ -185,6 +233,18 @@ func DeleteDepartment(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 组织架构导入用户 +// @Description 组织架构导入用户 +// @Tags 组织架构相关 +// @ID CreateOrganizationUser +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CreateOrganizationUserReq true "请求" +// @Produce json +// @Success 0 {object} api.CreateOrganizationUserResp +// @Failure 500 {object} api.CreateOrganizationUserResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CreateOrganizationUserResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/create_organization_user [post] func CreateOrganizationUser(c *gin.Context) { params := api.CreateOrganizationUserReq{} if err := c.BindJSON(¶ms); err != nil { @@ -227,6 +287,18 @@ func CreateOrganizationUser(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 更新组织架构中的用户 +// @Description 更新组织架构中的用户 +// @Tags 组织架构相关 +// @ID UpdateOrganizationUser +// @Accept json +// @Param token header string true "im token" +// @Param req body api.UpdateOrganizationUserReq true "请求" +// @Produce json +// @Success 0 {object} api.UpdateOrganizationUserResp +// @Failure 500 {object} api.UpdateOrganizationUserResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.UpdateOrganizationUserResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/update_organization_user [post] func UpdateOrganizationUser(c *gin.Context) { params := api.UpdateOrganizationUserReq{} if err := c.BindJSON(¶ms); err != nil { @@ -262,12 +334,23 @@ func UpdateOrganizationUser(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - apiResp := api.UpdateOrganizationUserResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}} log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp) c.JSON(http.StatusOK, apiResp) } +// @Summary 创建部门用户 +// @Description 创建部门用户 +// @Tags 组织架构相关 +// @ID CreateDepartmentMember +// @Accept json +// @Param token header string true "im token" +// @Param req body api.CreateDepartmentMemberReq true "请求" +// @Produce json +// @Success 0 {object} api.CreateDepartmentMemberResp +// @Failure 500 {object} api.CreateDepartmentMemberResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.CreateDepartmentMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/create_department_member [post] func CreateDepartmentMember(c *gin.Context) { params := api.CreateDepartmentMemberReq{} if err := c.BindJSON(¶ms); err != nil { @@ -310,6 +393,18 @@ func CreateDepartmentMember(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 获取部门中的所有用户 +// @Description 获取部门中的所有用户 +// @Tags 组织架构相关 +// @ID GetUserInDepartment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetUserInDepartmentReq true "请求" +// @Produce json +// @Success 0 {object} api.GetUserInDepartmentResp{data=open_im_sdk.UserInDepartment} +// @Failure 500 {object} api.GetUserInDepartmentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetUserInDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/get_user_in_department [post] func GetUserInDepartment(c *gin.Context) { params := api.GetUserInDepartmentReq{} if err := c.BindJSON(¶ms); err != nil { @@ -352,6 +447,18 @@ func GetUserInDepartment(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 更新部门中某个用户 +// @Description 更新部门中某个用户 +// @Tags 组织架构相关 +// @ID UpdateUserInDepartment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.UpdateUserInDepartmentReq true "请求" +// @Produce json +// @Success 0 {object} api.UpdateUserInDepartmentResp +// @Failure 500 {object} api.UpdateUserInDepartmentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.UpdateUserInDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/update_user_in_department [post] func UpdateUserInDepartment(c *gin.Context) { params := api.UpdateUserInDepartmentReq{} if err := c.BindJSON(¶ms); err != nil { @@ -393,6 +500,18 @@ func UpdateUserInDepartment(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 删除组织架构中某个用户 +// @Description 删除组织架构中某个用户 +// @Tags 组织架构相关 +// @ID DeleteOrganizationUser +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DeleteOrganizationUserReq true "请求" +// @Produce json +// @Success 0 {object} api.DeleteOrganizationUserResp +// @Failure 500 {object} api.DeleteOrganizationUserResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DeleteOrganizationUserResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/delete_organization_user [post] func DeleteOrganizationUser(c *gin.Context) { params := api.DeleteOrganizationUserReq{} if err := c.BindJSON(¶ms); err != nil { @@ -434,6 +553,18 @@ func DeleteOrganizationUser(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 获取部门中所有成员 +// @Description 获取部门中所有成员 +// @Tags 组织架构相关 +// @ID GetDepartmentMember +// @Accept json +// @Param token header string true "im token" +// @Param req body api.GetDepartmentMemberReq true "请求" +// @Produce json +// @Success 0 {object} api.GetDepartmentMemberResp{data=open_im_sdk.UserDepartmentMember} +// @Failure 500 {object} api.GetDepartmentMemberResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.GetDepartmentMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/get_department_member [post] func GetDepartmentMember(c *gin.Context) { params := api.GetDepartmentMemberReq{} if err := c.BindJSON(¶ms); err != nil { @@ -476,6 +607,18 @@ func GetDepartmentMember(c *gin.Context) { c.JSON(http.StatusOK, apiResp) } +// @Summary 删除部门中某个用户 +// @Description 删除部门中某个用户 +// @Tags 组织架构相关 +// @ID DeleteUserInDepartment +// @Accept json +// @Param token header string true "im token" +// @Param req body api.DeleteUserInDepartmentReq true "请求" +// @Produce json +// @Success 0 {object} api.DeleteUserInDepartmentResp +// @Failure 500 {object} api.DeleteUserInDepartmentResp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.DeleteUserInDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Router /organization/delete_user_in_department [post] func DeleteUserInDepartment(c *gin.Context) { params := api.DeleteUserInDepartmentReq{} if err := c.BindJSON(¶ms); err != nil { diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index 7d0124688..e21550044 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -28,13 +28,13 @@ import ( // @Param operationID formData string true "操作唯一ID" // @Produce json // @Success 0 {object} api.MinioUploadFileResp "" -// @Failure 500 {object} api.MinioUploadFileResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.MinioUploadFileResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /third/minio_upload [post] func MinioUploadFile(c *gin.Context) { var ( req api.MinioUploadFileReq - resp api.MinioUploadFileResp + resp api.MinioUploadFile ) defer func() { if r := recover(); r != nil { diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 81832f5b2..3047dce46 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -155,9 +155,9 @@ func GetBlackIDListFromCache(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetUsersInfoReq true "请求体" // @Produce json -// @Success 0 {object} api.GetUsersInfoResp -// @Failure 500 {object} api.GetUsersInfoResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetUsersInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetUsersInfoResp{Data=[]open_im_sdk.PublicUserInfo} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/get_users_info [post] func GetUsersInfo(c *gin.Context) { params := api.GetUsersInfoReq{} @@ -216,8 +216,8 @@ func GetUsersInfo(c *gin.Context) { // @Param req body api.UpdateSelfUserInfoReq true "请求体" // @Produce json // @Success 0 {object} api.UpdateUserInfoResp -// @Failure 500 {object} api.UpdateUserInfoResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.UpdateUserInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/update_user_info [post] func UpdateUserInfo(c *gin.Context) { params := api.UpdateSelfUserInfoReq{} @@ -264,11 +264,11 @@ func UpdateUserInfo(c *gin.Context) { // @ID SetGlobalRecvMessageOpt // @Accept json // @Param token header string true "im token" -// @Param req body api.SetGlobalRecvMessageOptReq true "请求体" +// @Param req body api.SetGlobalRecvMessageOptReq true "globalRecvMsgOpt为全局免打扰设置0为关闭 1为开启" // @Produce json // @Success 0 {object} api.SetGlobalRecvMessageOptResp -// @Failure 500 {object} api.SetGlobalRecvMessageOptResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.SetGlobalRecvMessageOptResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/set_global_msg_recv_opt [post] func SetGlobalRecvMessageOpt(c *gin.Context) { params := api.SetGlobalRecvMessageOptReq{} @@ -318,8 +318,8 @@ func SetGlobalRecvMessageOpt(c *gin.Context) { // @Param req body api.GetSelfUserInfoReq true "请求体" // @Produce json // @Success 0 {object} api.GetSelfUserInfoResp{data=open_im_sdk.UserInfo} -// @Failure 500 {object} api.GetSelfUserInfoResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetSelfUserInfoResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/get_self_user_info [post] func GetSelfUserInfo(c *gin.Context) { params := api.GetSelfUserInfoReq{} @@ -381,8 +381,8 @@ func GetSelfUserInfo(c *gin.Context) { // @Param req body api.GetUsersOnlineStatusReq true "请求体" // @Produce json // @Success 0 {object} api.GetUsersOnlineStatusResp -// @Failure 500 {object} api.GetUsersOnlineStatusResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetUsersOnlineStatusResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/get_users_online_status [post] func GetUsersOnlineStatus(c *gin.Context) { params := api.GetUsersOnlineStatusReq{} diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 70f0f86c9..3b2fb2b13 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -63,6 +63,6 @@ type ExpireTime struct { type ParseTokenResp struct { CommResp - Data map[string]interface{} `json:"data"` + Data map[string]interface{} `json:"data" swaggerignore:"true"` ExpireTime ExpireTime `json:"-"` } diff --git a/pkg/base_info/friend_api_struct.go b/pkg/base_info/friend_api_struct.go index 3c45c393e..e15bed380 100644 --- a/pkg/base_info/friend_api_struct.go +++ b/pkg/base_info/friend_api_struct.go @@ -60,7 +60,7 @@ type GetBlackListReq struct { type GetBlackListResp struct { CommResp BlackUserInfoList []*open_im_sdk.PublicUserInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } //type PublicUserInfo struct { @@ -102,7 +102,7 @@ type GetFriendsInfoReq struct { type GetFriendsInfoResp struct { CommResp FriendInfoList []*open_im_sdk.FriendInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type GetFriendListReq struct { @@ -112,7 +112,7 @@ type GetFriendListReq struct { type GetFriendListResp struct { CommResp FriendInfoList []*open_im_sdk.FriendInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type GetFriendApplyListReq struct { @@ -122,7 +122,7 @@ type GetFriendApplyListReq struct { type GetFriendApplyListResp struct { CommResp FriendRequestList []*open_im_sdk.FriendRequest `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type GetSelfApplyListReq struct { @@ -132,5 +132,5 @@ type GetSelfApplyListReq struct { type GetSelfApplyListResp struct { CommResp FriendRequestList []*open_im_sdk.FriendRequest `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index d38615026..dac6328ee 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -33,7 +33,7 @@ type GetGroupMembersInfoReq struct { type GetGroupMembersInfoResp struct { CommResp MemberList []*open_im_sdk.GroupMemberFullInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type InviteUserToGroupReq struct { @@ -54,7 +54,7 @@ type GetJoinedGroupListReq struct { type GetJoinedGroupListResp struct { CommResp GroupInfoList []*open_im_sdk.GroupInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type GetGroupMemberListReq struct { @@ -67,7 +67,7 @@ type GetGroupMemberListResp struct { CommResp NextSeq int32 `json:"nextSeq"` MemberList []*open_im_sdk.GroupMemberFullInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type GetGroupAllMemberReq struct { @@ -77,7 +77,7 @@ type GetGroupAllMemberReq struct { type GetGroupAllMemberResp struct { CommResp MemberList []*open_im_sdk.GroupMemberFullInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type CreateGroupReq struct { @@ -105,7 +105,7 @@ type GetGroupApplicationListReq struct { type GetGroupApplicationListResp struct { CommResp GroupRequestList []*open_im_sdk.GroupRequest `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type GetUserReqGroupApplicationListReq struct { @@ -125,7 +125,7 @@ type GetGroupInfoReq struct { type GetGroupInfoResp struct { CommResp GroupInfoList []*open_im_sdk.GroupInfo `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } //type GroupInfoAlias struct { diff --git a/pkg/base_info/manage_api_struct.go b/pkg/base_info/manage_api_struct.go index f8515dd5b..5c249b3f7 100644 --- a/pkg/base_info/manage_api_struct.go +++ b/pkg/base_info/manage_api_struct.go @@ -39,20 +39,24 @@ type AccountCheckResp struct { ResultList []*pbUser.AccountCheckResp_SingleUserStatus `json:"data"` } +type ManagementSendMsg struct { + OperationID string `json:"operationID" binding:"required"` + SendID string `json:"sendID" binding:"required"` + GroupID string `json:"groupID" ` + SenderNickname string `json:"senderNickname" ` + SenderFaceURL string `json:"senderFaceURL" ` + SenderPlatformID int32 `json:"senderPlatformID"` + //ForceList []string `json:"forceList" ` + Content map[string]interface{} `json:"content" binding:"required" swaggerignore:"true"` + ContentType int32 `json:"contentType" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + IsOnlineOnly bool `json:"isOnlineOnly"` + OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"` +} + type ManagementSendMsgReq struct { - OperationID string `json:"operationID" binding:"required"` - SendID string `json:"sendID" binding:"required"` - RecvID string `json:"recvID" ` - GroupID string `json:"groupID" ` - SenderNickname string `json:"senderNickname" ` - SenderFaceURL string `json:"senderFaceURL" ` - SenderPlatformID int32 `json:"senderPlatformID"` - ForceList []string `json:"forceList" ` - Content map[string]interface{} `json:"content" binding:"required"` - ContentType int32 `json:"contentType" binding:"required"` - SessionType int32 `json:"sessionType" binding:"required"` - IsOnlineOnly bool `json:"isOnlineOnly"` - OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"` + ManagementSendMsg + RecvID string `json:"recvID" ` } type ManagementSendMsgResp struct { @@ -61,7 +65,7 @@ type ManagementSendMsgResp struct { } type ManagementBatchSendMsgReq struct { - ManagementSendMsgReq + ManagementSendMsg RecvIDList []string `json:"recvIDList"` } diff --git a/pkg/base_info/swagger_example.go b/pkg/base_info/swagger_example.go new file mode 100644 index 000000000..b56f26276 --- /dev/null +++ b/pkg/base_info/swagger_example.go @@ -0,0 +1,11 @@ +package base_info + +type Swagger400Resp struct { + ErrCode int32 `json:"errCode" example:"400"` + ErrMsg string `json:"errMsg" example:"err msg"` +} + +type Swagger500Resp struct { + ErrCode int32 `json:"errCode" example:"500"` + ErrMsg string `json:"errMsg" example:"err msg"` +} diff --git a/pkg/base_info/third_api_struct.go b/pkg/base_info/third_api_struct.go index e59e03940..72924e873 100644 --- a/pkg/base_info/third_api_struct.go +++ b/pkg/base_info/third_api_struct.go @@ -19,13 +19,20 @@ type MinioUploadFileReq struct { FileType int `form:"fileType" binding:"required"` } -type MinioUploadFileResp struct { +type MinioUploadFile struct { URL string `json:"URL"` NewName string `json:"newName"` SnapshotURL string `json:"snapshotURL,omitempty"` SnapshotNewName string `json:"snapshotName,omitempty"` } +type MinioUploadFileResp struct { + CommResp + Data struct { + MinioUploadFile + } `json:"data"` +} + type UploadUpdateAppReq struct { OperationID string `form:"operationID" binding:"required"` Type int `form:"type" binding:"required"` From f3e21ac81405b6d6253a6a88a24d2b0029cac6fe Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 19:00:48 +0800 Subject: [PATCH 702/752] code update --- internal/demo/register/send_code.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index ac52aaded..c73e9b352 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -142,14 +142,14 @@ func CreateTencentSMSClient() (string, error) { cpf := profile.NewClientProfile() client, err := sms.NewClient(credential, config.Config.Demo.TencentSMS.Region, cpf) if err != nil { - + return "", err } request := sms.NewSendSmsRequest() request.SmsSdkAppId = common.StringPtr(config.Config.Demo.TencentSMS.AppID) request.SignName = common.StringPtr(config.Config.Demo.TencentSMS.SignName) request.TemplateId = common.StringPtr(config.Config.Demo.TencentSMS.VerificationCodeTemplateCode) request.TemplateParamSet = common.StringPtrs([]string{"1234"}) - request.PhoneNumberSet = common.StringPtrs([]string{"+8613711112222"}) + request.PhoneNumberSet = common.StringPtrs([]string{"+971588232183"}) // 通过client对象调用想要访问的接口,需要传入请求对象 response, err := client.SendSms(request) // 非SDK异常,直接失败。实际代码中可以加入其他的处理。 From 5bf494ca7d01bf09f3bd0d9e581863eb7f6cb999 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Jun 2022 19:06:08 +0800 Subject: [PATCH 703/752] code update --- internal/demo/register/send_code.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index c73e9b352..7937e5318 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -148,7 +148,7 @@ func CreateTencentSMSClient() (string, error) { request.SmsSdkAppId = common.StringPtr(config.Config.Demo.TencentSMS.AppID) request.SignName = common.StringPtr(config.Config.Demo.TencentSMS.SignName) request.TemplateId = common.StringPtr(config.Config.Demo.TencentSMS.VerificationCodeTemplateCode) - request.TemplateParamSet = common.StringPtrs([]string{"1234"}) + request.TemplateParamSet = common.StringPtrs([]string{"666666"}) request.PhoneNumberSet = common.StringPtrs([]string{"+971588232183"}) // 通过client对象调用想要访问的接口,需要传入请求对象 response, err := client.SendSms(request) From 0054c4cc58ac2dda0a51dd47b09697e7c960e1d7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 30 Jun 2022 10:14:12 +0800 Subject: [PATCH 704/752] minio --- internal/api/third/minio_init.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index a93ad9bb7..29b91b952 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -7,6 +7,7 @@ import ( "context" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" + "github.com/minio/minio-go/v7/pkg/policy" url2 "net/url" ) @@ -78,11 +79,11 @@ func MinioInit() { } } // 自动化桶public的代码 - //err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) - //err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policy.BucketPolicyReadWrite) - //if err != nil { - // log.NewDebug("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) - // return - //} + err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) + err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policy.BucketPolicyReadWrite) + if err != nil { + log.NewDebug("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) + return + } log.NewInfo(operationID, utils.GetSelfFuncName(), "minio create and set policy success") } From 61951863ad06b4fd1fad382d3ad34ce0e8f2c7b1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 30 Jun 2022 10:24:47 +0800 Subject: [PATCH 705/752] minio --- internal/api/third/minio_init.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index 29b91b952..051267d64 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -80,10 +80,23 @@ func MinioInit() { } // 自动化桶public的代码 err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) + if err != nil { + log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) + } err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policy.BucketPolicyReadWrite) if err != nil { - log.NewDebug("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) - return + log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) } + policyType, err := MinioClient.GetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket) + if err != nil { + log.NewInfo("", utils.GetSelfFuncName(), err.Error()) + } + log.NewInfo("", utils.GetSelfFuncName(), "policy: ", policyType) + policyType, err = MinioClient.GetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket) + if err != nil { + log.NewInfo("", utils.GetSelfFuncName(), err.Error()) + } + log.NewInfo("", utils.GetSelfFuncName(), "policy: ", policyType) + log.NewInfo(operationID, utils.GetSelfFuncName(), "minio create and set policy success") } From e5ccc1dd36800bfe2e8413a1e5c739511d618542 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 30 Jun 2022 10:28:11 +0800 Subject: [PATCH 706/752] minio --- internal/api/third/minio_init.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index 051267d64..2f5be9bcc 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -79,11 +79,11 @@ func MinioInit() { } } // 自动化桶public的代码 - err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) + err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, "public") if err != nil { log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) } - err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policy.BucketPolicyReadWrite) + err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, "public") if err != nil { log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) } From 832871d49d33a0133f8c783044d5cb4db050c002 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 16:27:39 +0800 Subject: [PATCH 707/752] sms test --- internal/demo/register/ali_sms.go | 60 ++++++++++ internal/demo/register/send_code.go | 150 ++++++++++++------------ internal/demo/register/sms_interface.go | 5 + internal/demo/register/tencent_sms.go | 51 ++++++++ 4 files changed, 193 insertions(+), 73 deletions(-) create mode 100644 internal/demo/register/ali_sms.go create mode 100644 internal/demo/register/sms_interface.go create mode 100644 internal/demo/register/tencent_sms.go diff --git a/internal/demo/register/ali_sms.go b/internal/demo/register/ali_sms.go new file mode 100644 index 000000000..ccd12d052 --- /dev/null +++ b/internal/demo/register/ali_sms.go @@ -0,0 +1,60 @@ +package register + +import ( + "Open_IM/pkg/common/config" + "errors" + "fmt" + openapi "github.com/alibabacloud-go/darabonba-openapi/client" + dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v2/client" + "github.com/alibabacloud-go/tea/tea" +) + +type AliSMS struct { + client *dysmsapi20170525.Client +} + +func (a AliSMS) SendSms(code int, phoneNumber string) (resp interface{}, err error) { + sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ + PhoneNumbers: tea.String(phoneNumber), + SignName: tea.String(config.Config.Demo.AliSMSVerify.SignName), + TemplateCode: tea.String(config.Config.Demo.AliSMSVerify.VerificationCodeTemplateCode), + TemplateParam: tea.String(fmt.Sprintf("{\"code\":\"%d\"}", code)), + } + response, err := a.client.SendSms(sendSmsRequest) + if err != nil { + //log.NewError(params.OperationID, "sendSms error", account, "err", err.Error()) + //c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) + return resp, err + } + if *response.Body.Code != "OK" { + //log.NewError(params.OperationID, "alibabacloud sendSms error", account, "err", response.Body.Code, response.Body.Message) + //c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) + //return + return resp, errors.New("alibabacloud sendSms error") + } + return resp, nil +} + +func NewAliSMS() (*AliSMS, error) { + var a AliSMS + client, err := createClient(tea.String(config.Config.Demo.AliSMSVerify.AccessKeyID), tea.String(config.Config.Demo.AliSMSVerify.AccessKeySecret)) + if err != nil { + return &a, err + } + a.client = client + return &a, nil +} +func createClient(accessKeyId *string, accessKeySecret *string) (result *dysmsapi20170525.Client, err error) { + c := &openapi.Config{ + // 您的AccessKey ID + AccessKeyId: accessKeyId, + // 您的AccessKey Secret + AccessKeySecret: accessKeySecret, + } + + // 访问的域名 + c.Endpoint = tea.String("dysmsapi.aliyuncs.com") + result = &dysmsapi20170525.Client{} + result, err = dysmsapi20170525.NewClient(c) + return result, err +} diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index 7937e5318..72d3f375f 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -6,22 +6,31 @@ import ( "Open_IM/pkg/common/db" "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" - "encoding/json" "fmt" - openapi "github.com/alibabacloud-go/darabonba-openapi/client" - dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v2/client" - "github.com/alibabacloud-go/tea/tea" "github.com/gin-gonic/gin" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" - sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111" "gopkg.in/gomail.v2" "math/rand" "net/http" "time" ) +var sms SMS + +func init() { + var err error + if config.Config.Demo.TencentSMS.Enable { + sms, err = NewAliSMS() + if err != nil { + panic(err) + } + } else { + sms, err = NewTencentSMS() + if err != nil { + panic(err) + } + } +} + type paramsVerificationCode struct { Email string `json:"email"` PhoneNumber string `json:"phoneNumber"` @@ -88,28 +97,23 @@ func SendVerificationCode(c *gin.Context) { return } } else { - client, err := CreateClient(tea.String(config.Config.Demo.AliSMSVerify.AccessKeyID), tea.String(config.Config.Demo.AliSMSVerify.AccessKeySecret)) - if err != nil { - log.NewError(params.OperationID, "create sendSms client err", "err", err.Error()) - c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) - return - } + //client, err := CreateClient(tea.String(config.Config.Demo.AliSMSVerify.AccessKeyID), tea.String(config.Config.Demo.AliSMSVerify.AccessKeySecret)) + //if err != nil { + // log.NewError(params.OperationID, "create sendSms client err", "err", err.Error()) + // c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) + // return + //} - sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ - PhoneNumbers: tea.String(accountKey), - SignName: tea.String(config.Config.Demo.AliSMSVerify.SignName), - TemplateCode: tea.String(config.Config.Demo.AliSMSVerify.VerificationCodeTemplateCode), - TemplateParam: tea.String(fmt.Sprintf("{\"code\":\"%d\"}", code)), - } - - response, err := client.SendSms(sendSmsRequest) + //sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ + // PhoneNumbers: tea.String(accountKey), + // SignName: tea.String(config.Config.Demo.AliSMSVerify.SignName), + // TemplateCode: tea.String(config.Config.Demo.AliSMSVerify.VerificationCodeTemplateCode), + // TemplateParam: tea.String(fmt.Sprintf("{\"code\":\"%d\"}", code)), + //} + response, err := sms.SendSms(code, accountKey) + //response, err := client.SendSms(sendSmsRequest) if err != nil { - log.NewError(params.OperationID, "sendSms error", account, "err", err.Error()) - c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) - return - } - if *response.Body.Code != "OK" { - log.NewError(params.OperationID, "alibabacloud sendSms error", account, "err", response.Body.Code, response.Body.Message) + log.NewError(params.OperationID, "sendSms error", account, "err", err.Error(), response) c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) return } @@ -120,48 +124,48 @@ func SendVerificationCode(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "Verification code has been set!", "data": data}) } -func CreateClient(accessKeyId *string, accessKeySecret *string) (result *dysmsapi20170525.Client, err error) { - c := &openapi.Config{ - // 您的AccessKey ID - AccessKeyId: accessKeyId, - // 您的AccessKey Secret - AccessKeySecret: accessKeySecret, - } - - // 访问的域名 - c.Endpoint = tea.String("dysmsapi.aliyuncs.com") - result = &dysmsapi20170525.Client{} - result, err = dysmsapi20170525.NewClient(c) - return result, err -} -func CreateTencentSMSClient() (string, error) { - credential := common.NewCredential( - config.Config.Demo.TencentSMS.SecretID, - config.Config.Demo.TencentSMS.SecretKey, - ) - cpf := profile.NewClientProfile() - client, err := sms.NewClient(credential, config.Config.Demo.TencentSMS.Region, cpf) - if err != nil { - return "", err - } - request := sms.NewSendSmsRequest() - request.SmsSdkAppId = common.StringPtr(config.Config.Demo.TencentSMS.AppID) - request.SignName = common.StringPtr(config.Config.Demo.TencentSMS.SignName) - request.TemplateId = common.StringPtr(config.Config.Demo.TencentSMS.VerificationCodeTemplateCode) - request.TemplateParamSet = common.StringPtrs([]string{"666666"}) - request.PhoneNumberSet = common.StringPtrs([]string{"+971588232183"}) - // 通过client对象调用想要访问的接口,需要传入请求对象 - response, err := client.SendSms(request) - // 非SDK异常,直接失败。实际代码中可以加入其他的处理。 - if err != nil { - log.Error("test", "send code to tencent err", err.Error()) - } - // 处理异常 - if _, ok := err.(*errors.TencentCloudSDKError); ok { - log.Error("test", "An API error has returned:", err.Error()) - return "", err - } - - b, _ := json.Marshal(response.Response) - return string(b), nil -} +//func CreateClient(accessKeyId *string, accessKeySecret *string) (result *dysmsapi20170525.Client, err error) { +// c := &openapi.Config{ +// // 您的AccessKey ID +// AccessKeyId: accessKeyId, +// // 您的AccessKey Secret +// AccessKeySecret: accessKeySecret, +// } +// +// // 访问的域名 +// c.Endpoint = tea.String("dysmsapi.aliyuncs.com") +// result = &dysmsapi20170525.Client{} +// result, err = dysmsapi20170525.NewClient(c) +// return result, err +//} +//func CreateTencentSMSClient() (string, error) { +// credential := common.NewCredential( +// config.Config.Demo.TencentSMS.SecretID, +// config.Config.Demo.TencentSMS.SecretKey, +// ) +// cpf := profile.NewClientProfile() +// client, err := sms.NewClient(credential, config.Config.Demo.TencentSMS.Region, cpf) +// if err != nil { +// return "", err +// } +// request := sms.NewSendSmsRequest() +// request.SmsSdkAppId = common.StringPtr(config.Config.Demo.TencentSMS.AppID) +// request.SignName = common.StringPtr(config.Config.Demo.TencentSMS.SignName) +// request.TemplateId = common.StringPtr(config.Config.Demo.TencentSMS.VerificationCodeTemplateCode) +// request.TemplateParamSet = common.StringPtrs([]string{"666666"}) +// request.PhoneNumberSet = common.StringPtrs([]string{"+971588232183"}) +// // 通过client对象调用想要访问的接口,需要传入请求对象 +// response, err := client.SendSms(request) +// // 非SDK异常,直接失败。实际代码中可以加入其他的处理。 +// if err != nil { +// log.Error("test", "send code to tencent err", err.Error()) +// } +// // 处理异常 +// if _, ok := err.(*errors.TencentCloudSDKError); ok { +// log.Error("test", "An API error has returned:", err.Error()) +// return "", err +// } +// +// b, _ := json.Marshal(response.Response) +// return string(b), nil +//} diff --git a/internal/demo/register/sms_interface.go b/internal/demo/register/sms_interface.go new file mode 100644 index 000000000..6830cc7ae --- /dev/null +++ b/internal/demo/register/sms_interface.go @@ -0,0 +1,5 @@ +package register + +type SMS interface { + SendSms(code int, phoneNumber string) (resp interface{}, err error) +} diff --git a/internal/demo/register/tencent_sms.go b/internal/demo/register/tencent_sms.go new file mode 100644 index 000000000..02a09c7b5 --- /dev/null +++ b/internal/demo/register/tencent_sms.go @@ -0,0 +1,51 @@ +package register + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/utils" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + v20210111 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111" +) + +type TencentSMS struct { + client *v20210111.Client +} + +func (t TencentSMS) SendSms(code int, phoneNumber string) (resp interface{}, err error) { + request := v20210111.NewSendSmsRequest() + request.SmsSdkAppId = common.StringPtr(config.Config.Demo.TencentSMS.AppID) + request.SignName = common.StringPtr(config.Config.Demo.TencentSMS.SignName) + request.TemplateId = common.StringPtr(config.Config.Demo.TencentSMS.VerificationCodeTemplateCode) + request.TemplateParamSet = common.StringPtrs([]string{utils.IntToString(code)}) + request.PhoneNumberSet = common.StringPtrs([]string{phoneNumber}) + //+971588232183 + // 通过client对象调用想要访问的接口,需要传入请求对象 + response, err := t.client.SendSms(request) + // 非SDK异常,直接失败。实际代码中可以加入其他的处理。 + if err != nil { + return response, err + } + // 处理异常 + if _, ok := err.(*errors.TencentCloudSDKError); ok { + return response, err + } + return response, nil +} + +func NewTencentSMS() (*TencentSMS, error) { + var a TencentSMS + credential := common.NewCredential( + config.Config.Demo.TencentSMS.SecretID, + config.Config.Demo.TencentSMS.SecretKey, + ) + cpf := profile.NewClientProfile() + client, err := v20210111.NewClient(credential, config.Config.Demo.TencentSMS.Region, cpf) + if err != nil { + return &a, err + } + a.client = client + return &a, nil + +} From 10132879f2639335c70684ebb74d29683b2cc5c4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 16:29:52 +0800 Subject: [PATCH 708/752] sms test --- internal/api/third/minio_init.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index 2f5be9bcc..7726be85e 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -7,7 +7,6 @@ import ( "context" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/minio/minio-go/v7/pkg/policy" url2 "net/url" ) From 013828eb03f79e43a351ed28488e8751ed96ed16 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 16:42:27 +0800 Subject: [PATCH 709/752] sms test --- config/config.yaml | 2 +- internal/demo/register/send_code.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 764d891c8..bd7a2039b 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -694,7 +694,7 @@ demo: accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV signName: 托云信息技术 verificationCodeTemplateCode: SMS_226810164 - enable: true + enable: false tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 2400000648 region: "ap-singapore" diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index 72d3f375f..d6fd6b312 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -18,7 +18,7 @@ var sms SMS func init() { var err error - if config.Config.Demo.TencentSMS.Enable { + if config.Config.Demo.AliSMSVerify.Enable { sms, err = NewAliSMS() if err != nil { panic(err) From e96b9b8bf86d71286263a8b1fbb71860713d2453 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 16:51:58 +0800 Subject: [PATCH 710/752] compose file update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 16acfc578..f9d48b922 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,7 +16,7 @@ services: restart: always mongodb: - image: mongo:latest + image: mongo:4.0 ports: - 37017:27017 container_name: mongo From ddc07ee1601a77685ba2d6834c5fe7c490089322 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 17:07:18 +0800 Subject: [PATCH 711/752] compose file update --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index bd7a2039b..764d891c8 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -694,7 +694,7 @@ demo: accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV signName: 托云信息技术 verificationCodeTemplateCode: SMS_226810164 - enable: false + enable: true tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 2400000648 region: "ap-singapore" From 4e229707846d6f0237dc587567d6917f79adceb5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 30 Jun 2022 17:12:25 +0800 Subject: [PATCH 712/752] minio --- deploy_k8s/k8s_openim_deploy.md | 92 +++++++++++++++++++++++--------- docker-compose.yaml | 4 +- internal/api/third/minio_init.go | 37 ++++++------- 3 files changed, 84 insertions(+), 49 deletions(-) diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 010a8d09e..45e3e9778 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -1,38 +1,80 @@ #### openIM k8s部署文档 ### 1. 修改配置文件 -在Open-IM-SERVER目录下修改config/config.yaml配置文件, 将MySQL, Kafka, MongoDB等配置修改。 -使用demo需要修改demo/imAPIURL地址 让demo能请求到im的api +在Open-IM-SERVER根目录下修改config/config.yaml配置文件, 请确保以下修改的所有地址必须保证k8s pod能够访问 +1. 修改ETCD配置为自己的ETCD ip地址, 最好和k8s本身使用的ETCD分开 +2. 修改MySQL配置 +3. 修改Mongo配置 +4. 修改Redis配置 +5. 修改Kafka配置 +6. 将rpcRegisterIP修改为空, 此地址为每个rpc注册到ETCD的地址, 置空每个rpc将会将pod地址注册到ETCD, 才能正确rpc请求(重要) +7. 如果使用minio作为对象存储, 还需要修改minio的地址 +8. 其他如果使用离线推送,需要修改push离线推送配置 +9. 修改demo中的imAPIURL字段为openIM api的ingress或者service地址, 需要让demo的pod能正确请求到(重要) +10. 其他非必须配置修改, 如短信,推送等 ### 2. 项目根目录创建im configMap到k8s openim namespace -kubectl create namespace openim -kubectl -n openim create configmap config --from-file=config/config.yaml -openim 为im项目的namespace, 可选 -查看configmap -kubectl -n openim get configmap +1. 为open-IM项目创建单独命名空间 + ``` + kubectl create namespace openim + ``` +2. 在项目根目录通过config/config.yaml + ``` + kubectl -n openim create configmap config --from-file=config/config.yaml + ``` + 查看configmap + ``` + kubectl -n openim get configmap + ``` ### 3(可选). 修改每个deployment.yml -kubectl get nodes -kubectl label node k8s-node1 role=kube-Node -应需要调度的node打上标签 -nodeSelector: - node: kube-Node -创建资源清单时添加上nodeSelector属性对应即可 -修改每种服务数量,建议至少每种2个rpc。 -如果修改了config/config.yaml某些配置比如端口,同时需要修改对应deployment端口和ingress端口 + 每个rpc的deployment在Open-IM-SERVER根目录deploy_k8s下 + 给需要调度的node打上标签 + ``` + kubectl get nodes + kubectl label node k8s-node1 role=openIMworker + ``` + 在deployment的spec.template.spec加上 + ``` + nodeSelector: + role: openIMworker + ``` + 创建资源清单时添加上nodeSelector属性对应即可, + 修改每种服务数量,建议至少每种2个rpc。 + 如果修改了config/config.yaml某些配置比如端口,同时需要修改对应deployment端口和ingress端口 ### 4. 修改ingress.yaml配置文件 -需要安装ingress controller 这里使用的是ingress-nginx 其他ingress需要修改配置文件 -进行域名修改等操作 +1. 需要安装ingress controller, 这里使用的是ingress-nginx, 使用其他类型的ingress controller需要更改ingress.class, 将host改为自己部署服务的host ### 5. 执行./kubectl_start.sh脚本 -chmod +x ./kubectl_start.sh ./kubectl_stop.sh -./kubectl_start.sh -kubectl -n openim apply -f ingress.yaml -kubectl 启动所有deployment,services,ingress +1. 脚本给予可执行权限 + ``` + chmod +x ./kubectl_start.sh ./kubectl_stop.sh + ``` +2. 启动k8s service和deployment + ``` + ./kubectl_start.sh + ``` +3. 启动k8s ingress + ``` + kubectl -n openim apply -f ingress.yaml + ``` +kubectl 启动所有deployment, services, ingress ### 6. 查看k8s deployment service ingress状态 -kubectl -n openim get services -kubectl -n openim get deployment -kubectl -n openim get ingress -kubectl -n openim get pods + + ``` + kubectl -n openim get services + kubectl -n openim get deployment + kubectl -n openim get ingress + kubectl -n openim get pods + ``` + 检测服务可达 + ``` + telnet msg-gateway.openim.xxx.com {{your_ingress_port}} + telnet sdk-server.openim.xxx.com {{your_ingress_port}} + telnet api.openim.xxx.com {{your_ingress_port}} + telnet cms-api.openim.xxx.com {{your_ingress_port}} + telnet demo.openim.xxx.com {{your_ingress_port}} + ``` + diff --git a/docker-compose.yaml b/docker-compose.yaml index 16acfc578..e73208bc4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -29,8 +29,8 @@ services: - TZ=Asia/Shanghai # cache - wiredTigerCacheSizeGB=1 - - MONGO_INITDB_ROOT_USERNAME=openIM - - MONGO_INITDB_ROOT_PASSWORD=openIM + #- MONGO_INITDB_ROOT_USERNAME=openIM + #- MONGO_INITDB_ROOT_PASSWORD=openIM #TZ: Asia/Shanghai restart: always diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index 2f5be9bcc..393122858 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -5,9 +5,9 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/utils" "context" + "fmt" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/minio/minio-go/v7/pkg/policy" url2 "net/url" ) @@ -51,52 +51,45 @@ func MinioInit() { } err = MinioClient.MakeBucket(context.Background(), config.Config.Credential.Minio.Bucket, opt) if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "MakeBucket failed ", err.Error()) + log.NewInfo(operationID, utils.GetSelfFuncName(), "MakeBucket failed ", err.Error()) exists, err := MinioClient.BucketExists(context.Background(), config.Config.Credential.Minio.Bucket) if err == nil && exists { - log.NewWarn(operationID, utils.GetSelfFuncName(), "We already own ", config.Config.Credential.Minio.Bucket) + log.NewInfo(operationID, utils.GetSelfFuncName(), "We already own ", config.Config.Credential.Minio.Bucket) } else { if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) + log.NewInfo(operationID, utils.GetSelfFuncName(), err.Error()) } - log.NewError(operationID, utils.GetSelfFuncName(), "create bucket failed and bucket not exists") + log.NewInfo(operationID, utils.GetSelfFuncName(), "create bucket failed and bucket not exists") return } } // make app bucket err = MinioClient.MakeBucket(context.Background(), config.Config.Credential.Minio.AppBucket, opt) if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "MakeBucket failed ", err.Error()) + log.NewInfo(operationID, utils.GetSelfFuncName(), "MakeBucket failed ", err.Error()) exists, err := MinioClient.BucketExists(context.Background(), config.Config.Credential.Minio.Bucket) if err == nil && exists { - log.NewWarn(operationID, utils.GetSelfFuncName(), "We already own ", config.Config.Credential.Minio.Bucket) + log.NewInfo(operationID, utils.GetSelfFuncName(), "We already own ", config.Config.Credential.Minio.Bucket) } else { if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) + log.NewInfo(operationID, utils.GetSelfFuncName(), err.Error()) } - log.NewError(operationID, utils.GetSelfFuncName(), "create bucket failed and bucket not exists") + log.NewInfo(operationID, utils.GetSelfFuncName(), "create bucket failed and bucket not exists") return } } // 自动化桶public的代码 - err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, "public") + policyJsonString := fmt.Sprintf(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject","s3:PutObject"], + "Effect": "Allow","Principal": {"AWS": ["*"]},"Resource": ["arn:aws:s3:::%s/*"],"Sid": ""}]}`, config.Config.Credential.Minio.Bucket) + err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policyJsonString) if err != nil { log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) } - err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, "public") + policyJsonString = fmt.Sprintf(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject","s3:PutObject"], + "Effect": "Allow","Principal": {"AWS": ["*"]},"Resource": ["arn:aws:s3:::%s/*"],"Sid": ""}]}`, config.Config.Credential.Minio.AppBucket) + err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policyJsonString) if err != nil { log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) } - policyType, err := MinioClient.GetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket) - if err != nil { - log.NewInfo("", utils.GetSelfFuncName(), err.Error()) - } - log.NewInfo("", utils.GetSelfFuncName(), "policy: ", policyType) - policyType, err = MinioClient.GetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket) - if err != nil { - log.NewInfo("", utils.GetSelfFuncName(), err.Error()) - } - log.NewInfo("", utils.GetSelfFuncName(), "policy: ", policyType) - log.NewInfo(operationID, utils.GetSelfFuncName(), "minio create and set policy success") } From 323e8e72cc8de0c7bf2cf58360c41c17be9cbd87 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 18:42:30 +0800 Subject: [PATCH 713/752] compose file update --- config/config.yaml | 2 +- internal/demo/register/send_code.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 764d891c8..bd7a2039b 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -694,7 +694,7 @@ demo: accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV signName: 托云信息技术 verificationCodeTemplateCode: SMS_226810164 - enable: true + enable: false tencentsms: #腾讯云短信配置,在腾讯云申请成功后,修改以下选项,enable为true则必须修改 appID: 2400000648 region: "ap-singapore" diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index d6fd6b312..b895141ba 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -118,7 +118,7 @@ func SendVerificationCode(c *gin.Context) { return } } - + log.Debug(params.OperationID, "send sms success", code, accountKey) data := make(map[string]interface{}) data["account"] = account c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "Verification code has been set!", "data": data}) From 1f968a606b4c52b352b87eb71b7dc2ddf7f34687 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 18:46:34 +0800 Subject: [PATCH 714/752] compose file update --- internal/demo/register/tencent_sms.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/demo/register/tencent_sms.go b/internal/demo/register/tencent_sms.go index 02a09c7b5..e085df137 100644 --- a/internal/demo/register/tencent_sms.go +++ b/internal/demo/register/tencent_sms.go @@ -2,7 +2,9 @@ package register import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/log" "Open_IM/pkg/utils" + "encoding/json" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" @@ -31,6 +33,8 @@ func (t TencentSMS) SendSms(code int, phoneNumber string) (resp interface{}, err if _, ok := err.(*errors.TencentCloudSDKError); ok { return response, err } + b, _ := json.Marshal(response.Response) + log.Debug("tencent send message is ", code, phoneNumber, string(b)) return response, nil } From f51fbecfeef34d9eadc8a250bff2fcdb48236761 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 30 Jun 2022 18:50:10 +0800 Subject: [PATCH 715/752] callback --- internal/rpc/msg/callback.go | 2 ++ internal/rpc/msg/send_msg.go | 2 +- pkg/call_back_struct/common.go | 28 +++++++++++++++------------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index d84af8099..440680e1b 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -25,6 +25,8 @@ func copyCallbackCommonReqStruct(msg *pbChat.SendMsgReq) cbApi.CommonCallbackReq Status: msg.MsgData.Status, CreateTime: msg.MsgData.CreateTime, Content: string(msg.MsgData.Content), + AtUserIDList: msg.MsgData.AtUserIDList, + SenderFaceURL: msg.MsgData.SenderFaceURL, } } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 118b7bd01..2e091e2e3 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -426,7 +426,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) case constant.SuperGroupChatType: // callback - callbackResp := callbackBeforeSendSingleMsg(pb) + callbackResp := callbackBeforeSendGroupMsg(pb) if callbackResp.ErrCode != 0 { log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSuperGroupMsg resp: ", callbackResp) } diff --git a/pkg/call_back_struct/common.go b/pkg/call_back_struct/common.go index 14aed5b97..d40315d7f 100644 --- a/pkg/call_back_struct/common.go +++ b/pkg/call_back_struct/common.go @@ -1,19 +1,21 @@ package call_back_struct type CommonCallbackReq struct { - SendID string `json:"sendID"` - CallbackCommand string `json:"callbackCommand"` - ServerMsgID string `json:"serverMsgID"` - ClientMsgID string `json:"clientMsgID"` - OperationID string `json:"operationID"` - SenderPlatformID int32 `json:"senderPlatformID"` - SenderNickname string `json:"senderNickname"` - SessionType int32 `json:"sessionType"` - MsgFrom int32 `json:"msgFrom"` - ContentType int32 `json:"contentType"` - Status int32 `json:"status"` - CreateTime int64 `json:"createTime"` - Content string `json:"content"` + SendID string `json:"sendID"` + CallbackCommand string `json:"callbackCommand"` + ServerMsgID string `json:"serverMsgID"` + ClientMsgID string `json:"clientMsgID"` + OperationID string `json:"operationID"` + SenderPlatformID int32 `json:"senderPlatformID"` + SenderNickname string `json:"senderNickname"` + SessionType int32 `json:"sessionType"` + MsgFrom int32 `json:"msgFrom"` + ContentType int32 `json:"contentType"` + Status int32 `json:"status"` + CreateTime int64 `json:"createTime"` + Content string `json:"content"` + AtUserIDList []string `json:"atUserList"` + SenderFaceURL string `json:"faceURL"` } type CommonCallbackResp struct { From 7823306045c585601fe9d7319c3ddfb1cd67e114 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 30 Jun 2022 19:11:44 +0800 Subject: [PATCH 716/752] demo --- internal/demo/register/send_code.go | 2 +- internal/demo/register/set_password.go | 2 +- internal/demo/register/verify.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index b895141ba..d229a6bae 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -110,7 +110,7 @@ func SendVerificationCode(c *gin.Context) { // TemplateCode: tea.String(config.Config.Demo.AliSMSVerify.VerificationCodeTemplateCode), // TemplateParam: tea.String(fmt.Sprintf("{\"code\":\"%d\"}", code)), //} - response, err := sms.SendSms(code, accountKey) + response, err := sms.SendSms(code, params.AreaCode+params.PhoneNumber) //response, err := client.SendSms(sendSmsRequest) if err != nil { log.NewError(params.OperationID, "sendSms error", account, "err", err.Error(), response) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 45538bcaf..c2498e653 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -47,7 +47,7 @@ func SetPassword(c *gin.Context) { params.Nickname = account } if params.VerificationCode != config.Config.Demo.SuperCode { - accountKey := account + "_" + constant.VerificationCodeForRegisterSuffix + accountKey := params.AreaCode + account + "_" + constant.VerificationCodeForRegisterSuffix v, err := db.DB.GetAccountCode(accountKey) if err != nil || v != params.VerificationCode { log.NewError(params.OperationID, "password Verification code error", account, params.VerificationCode) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index 6fae4a84f..5e8ecdffc 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -51,9 +51,9 @@ func Verify(c *gin.Context) { var accountKey string switch params.UsedFor { case constant.VerificationCodeForRegister: - accountKey = account + "_" + constant.VerificationCodeForRegisterSuffix + accountKey = params.AreaCode + account + "_" + constant.VerificationCodeForRegisterSuffix case constant.VerificationCodeForReset: - accountKey = account + "_" + constant.VerificationCodeForResetSuffix + accountKey = params.AreaCode + account + "_" + constant.VerificationCodeForResetSuffix } code, err := db.DB.GetAccountCode(accountKey) From 1d105dd345f0487e49e0dd8a446d17d4b768908a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 19:19:00 +0800 Subject: [PATCH 717/752] compose file update --- internal/demo/register/send_code.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index d229a6bae..ef00be045 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -64,16 +64,16 @@ func SendVerificationCode(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.HasRegistered, "errMsg": "The phone number has been registered"}) return } + accountKey = accountKey + "_" + constant.VerificationCodeForRegisterSuffix ok, err := db.DB.JudgeAccountEXISTS(accountKey) if ok || err != nil { - log.NewError(params.OperationID, "The phone number has been registered", params) - c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": "The phone number has been registered"}) + log.NewError(params.OperationID, "Repeat send code", params) + c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": "Repeat send code"}) return } - accountKey += "_" + constant.VerificationCodeForRegisterSuffix case constant.VerificationCodeForReset: - accountKey += "_" + constant.VerificationCodeForResetSuffix + accountKey = accountKey + "_" + constant.VerificationCodeForResetSuffix } rand.Seed(time.Now().UnixNano()) code := 100000 + rand.Intn(900000) @@ -84,7 +84,7 @@ func SendVerificationCode(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) return } - log.NewDebug("", config.Config.Demo) + log.NewDebug(params.OperationID, config.Config.Demo) if params.Email != "" { m := gomail.NewMessage() m.SetHeader(`From`, config.Config.Demo.Mail.SenderMail) From 1fa38a24b6da9bf794e48c2637a42c5877685e7b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 30 Jun 2022 19:27:23 +0800 Subject: [PATCH 718/752] compose file update --- internal/demo/register/ali_sms.go | 1 - internal/demo/register/tencent_sms.go | 1 - 2 files changed, 2 deletions(-) diff --git a/internal/demo/register/ali_sms.go b/internal/demo/register/ali_sms.go index ccd12d052..b43e2813a 100644 --- a/internal/demo/register/ali_sms.go +++ b/internal/demo/register/ali_sms.go @@ -51,7 +51,6 @@ func createClient(accessKeyId *string, accessKeySecret *string) (result *dysmsap // 您的AccessKey Secret AccessKeySecret: accessKeySecret, } - // 访问的域名 c.Endpoint = tea.String("dysmsapi.aliyuncs.com") result = &dysmsapi20170525.Client{} diff --git a/internal/demo/register/tencent_sms.go b/internal/demo/register/tencent_sms.go index e085df137..d83e4b724 100644 --- a/internal/demo/register/tencent_sms.go +++ b/internal/demo/register/tencent_sms.go @@ -22,7 +22,6 @@ func (t TencentSMS) SendSms(code int, phoneNumber string) (resp interface{}, err request.TemplateId = common.StringPtr(config.Config.Demo.TencentSMS.VerificationCodeTemplateCode) request.TemplateParamSet = common.StringPtrs([]string{utils.IntToString(code)}) request.PhoneNumberSet = common.StringPtrs([]string{phoneNumber}) - //+971588232183 // 通过client对象调用想要访问的接口,需要传入请求对象 response, err := t.client.SendSms(request) // 非SDK异常,直接失败。实际代码中可以加入其他的处理。 From 8bedfca646da3350768e29a848adcf82e7ba1a5d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 1 Jul 2022 00:14:59 +0800 Subject: [PATCH 719/752] deploy_k8s --- deploy_k8s/admin_cms/deployment.yaml | 6 +++--- deploy_k8s/api/deployment.yaml | 8 ++++---- deploy_k8s/auth/auth.Dockerfile | 5 +++-- deploy_k8s/auth/deployment.yaml | 6 +++--- deploy_k8s/build_push_all_images.sh | 2 +- deploy_k8s/cache/cache.Dockerfile | 5 +++-- deploy_k8s/cache/deployment.yaml | 6 +++--- deploy_k8s/cms_api/cms_api.Dockerfile | 5 +++-- deploy_k8s/cms_api/deployment.yaml | 8 ++++---- deploy_k8s/conversation/conversation.Dockerfile | 5 +++-- deploy_k8s/conversation/deployment.yaml | 4 ++-- deploy_k8s/demo/demo.Dockerfile | 5 +++-- deploy_k8s/demo/deployment.yaml | 6 +++--- deploy_k8s/friend/deployment.yaml | 6 +++--- deploy_k8s/friend/friend.Dockerfile | 5 +++-- deploy_k8s/group/deployment.yaml | 6 +++--- deploy_k8s/group/group.Dockerfile | 5 +++-- deploy_k8s/k8s_openim_deploy.md | 2 +- deploy_k8s/message_cms/deployment.yaml | 6 +++--- deploy_k8s/message_cms/message_cms.Dockerfile | 5 +++-- deploy_k8s/msg/deployment.yaml | 6 +++--- deploy_k8s/msg/msg.Dockerfile | 5 +++-- deploy_k8s/msg_gateway/deployment.yaml | 6 +++--- deploy_k8s/msg_gateway/msg_gateway.Dockerfile | 5 +++-- deploy_k8s/msg_transfer/deployment.yaml | 6 +++--- deploy_k8s/msg_transfer/msg_transfer.Dockerfile | 5 +++-- deploy_k8s/office/deployment.yaml | 6 +++--- deploy_k8s/office/office.Dockerfile | 6 ++++-- deploy_k8s/organization/deployment.yaml | 6 +++--- deploy_k8s/organization/organization.Dockerfile | 5 +++-- deploy_k8s/push/deployment.yaml | 6 +++--- deploy_k8s/push/push.Dockerfile | 5 +++-- deploy_k8s/sdk_server/deployment.yaml | 6 +++--- deploy_k8s/sdk_server/sdk_server.Dockerfile | 3 ++- deploy_k8s/statistics/deployment.yaml | 6 +++--- deploy_k8s/statistics/statistics.Dockerfile | 5 +++-- deploy_k8s/user/deployment.yaml | 6 +++--- deploy_k8s/user/user.Dockerfile | 5 +++-- 38 files changed, 111 insertions(+), 93 deletions(-) diff --git a/deploy_k8s/admin_cms/deployment.yaml b/deploy_k8s/admin_cms/deployment.yaml index 39ad73a06..727a08520 100644 --- a/deploy_k8s/admin_cms/deployment.yaml +++ b/deploy_k8s/admin_cms/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: admin-cms # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: admin-cms - image: openim/admin_cms:v2.0.10k + image: openim/admin_cms:v2.1.0 # imagePullPolicy: Always #每次启动都重新拉取镜像 ports: - containerPort: 10200 @@ -26,7 +26,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/api/deployment.yaml b/deploy_k8s/api/deployment.yaml index ee9d0c8a7..1a74ae7a1 100644 --- a/deploy_k8s/api/deployment.yaml +++ b/deploy_k8s/api/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: api # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,8 +15,8 @@ spec: spec: containers: - name: api - image: openim/api:v2.0.10k - imagePullPolicy: Always + image: openim/api:v2.1.0 + # imagePullPolicy: Always ports: - containerPort: 10002 volumeMounts: @@ -26,7 +26,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 --- diff --git a/deploy_k8s/auth/auth.Dockerfile b/deploy_k8s/auth/auth.Dockerfile index 04fbdf32a..15eafd782 100644 --- a/deploy_k8s/auth/auth.Dockerfile +++ b/deploy_k8s/auth/auth.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/auth/deployment.yaml b/deploy_k8s/auth/deployment.yaml index d6b2e91d8..5b60d77f7 100644 --- a/deploy_k8s/auth/deployment.yaml +++ b/deploy_k8s/auth/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: auth # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: auth - image: openim/auth:v2.0.10k + image: openim/auth:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10160 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/build_push_all_images.sh b/deploy_k8s/build_push_all_images.sh index b6333a8bd..6f46bf33c 100644 --- a/deploy_k8s/build_push_all_images.sh +++ b/deploy_k8s/build_push_all_images.sh @@ -2,7 +2,7 @@ source ./path_info.cfg # images version -version=v2.0.10k +version=v2.1.0 git pull cd ../script/; ./build_all_service.sh cd ../deploy_k8s/ diff --git a/deploy_k8s/cache/cache.Dockerfile b/deploy_k8s/cache/cache.Dockerfile index e69d131ab..13c5278bd 100644 --- a/deploy_k8s/cache/cache.Dockerfile +++ b/deploy_k8s/cache/cache.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/cache/deployment.yaml b/deploy_k8s/cache/deployment.yaml index 5de56fcf0..ef41d2bde 100644 --- a/deploy_k8s/cache/deployment.yaml +++ b/deploy_k8s/cache/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: cache # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: cache - image: openim/cache:v2.0.10k + image: openim/cache:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10240 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/cms_api/cms_api.Dockerfile b/deploy_k8s/cms_api/cms_api.Dockerfile index 64c4ae25a..78eda6ecf 100644 --- a/deploy_k8s/cms_api/cms_api.Dockerfile +++ b/deploy_k8s/cms_api/cms_api.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -13,5 +14,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/cms_api/deployment.yaml b/deploy_k8s/cms_api/deployment.yaml index 9f66431d2..6f3fd5b2d 100644 --- a/deploy_k8s/cms_api/deployment.yaml +++ b/deploy_k8s/cms_api/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: cms-api # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,8 +15,8 @@ spec: spec: containers: - name: cms-api - image: openim/cms_api:v2.0.10k - # imagePullPolicy: Always + image: openim/cms_api:v2.1.0 + imagePullPolicy: Always ports: - containerPort: 10006 volumeMounts: @@ -26,7 +26,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 --- diff --git a/deploy_k8s/conversation/conversation.Dockerfile b/deploy_k8s/conversation/conversation.Dockerfile index 4518627d3..bea8d4b00 100644 --- a/deploy_k8s/conversation/conversation.Dockerfile +++ b/deploy_k8s/conversation/conversation.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -13,5 +14,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/conversation/deployment.yaml b/deploy_k8s/conversation/deployment.yaml index 7da7aad7a..90b6bdab1 100644 --- a/deploy_k8s/conversation/deployment.yaml +++ b/deploy_k8s/conversation/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: conversation - image: openim/conversation:v2.0.10k + image: openim/conversation:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10230 @@ -26,7 +26,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/demo/demo.Dockerfile b/deploy_k8s/demo/demo.Dockerfile index 05b532fd4..8b829dde0 100644 --- a/deploy_k8s/demo/demo.Dockerfile +++ b/deploy_k8s/demo/demo.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/demo/deployment.yaml b/deploy_k8s/demo/deployment.yaml index 228cc8278..8c612d153 100644 --- a/deploy_k8s/demo/deployment.yaml +++ b/deploy_k8s/demo/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: demo # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: demo - image: openim/demo:v2.0.10k + image: openim/demo:v2.1.0 imagePullPolicy: Always ports: - containerPort: 10004 @@ -26,7 +26,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 --- diff --git a/deploy_k8s/friend/deployment.yaml b/deploy_k8s/friend/deployment.yaml index a03ca12c7..c521c7a3e 100644 --- a/deploy_k8s/friend/deployment.yaml +++ b/deploy_k8s/friend/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: friend # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: friend - image: openim/friend:v2.0.10k + image: openim/friend:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10120 @@ -26,7 +26,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/friend/friend.Dockerfile b/deploy_k8s/friend/friend.Dockerfile index 3741a7c89..54f430e01 100644 --- a/deploy_k8s/friend/friend.Dockerfile +++ b/deploy_k8s/friend/friend.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/group/deployment.yaml b/deploy_k8s/group/deployment.yaml index 74aaa0d5a..a27dc2547 100644 --- a/deploy_k8s/group/deployment.yaml +++ b/deploy_k8s/group/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: group # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: group - image: openim/group:v2.0.10k + image: openim/group:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10150 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/group/group.Dockerfile b/deploy_k8s/group/group.Dockerfile index 7b902ee67..9baa7b5e9 100644 --- a/deploy_k8s/group/group.Dockerfile +++ b/deploy_k8s/group/group.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 010a8d09e..0fb623d46 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -5,7 +5,7 @@ ### 2. 项目根目录创建im configMap到k8s openim namespace kubectl create namespace openim -kubectl -n openim create configmap config --from-file=config/config.yaml +kubectl -n openim create configmap openim-config --from-file=config/config.yaml openim 为im项目的namespace, 可选 查看configmap kubectl -n openim get configmap diff --git a/deploy_k8s/message_cms/deployment.yaml b/deploy_k8s/message_cms/deployment.yaml index 148316e5b..8c5e3e83d 100644 --- a/deploy_k8s/message_cms/deployment.yaml +++ b/deploy_k8s/message_cms/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: message-cms # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: message-cms - image: openim/message_cms:v2.0.10k + image: openim/message_cms:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10190 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/message_cms/message_cms.Dockerfile b/deploy_k8s/message_cms/message_cms.Dockerfile index f77ebc3c2..24d08ece9 100644 --- a/deploy_k8s/message_cms/message_cms.Dockerfile +++ b/deploy_k8s/message_cms/message_cms.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/msg/deployment.yaml b/deploy_k8s/msg/deployment.yaml index a4697c631..4e6873699 100644 --- a/deploy_k8s/msg/deployment.yaml +++ b/deploy_k8s/msg/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: msg # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: msg - image: openim/msg:v2.0.10k + image: openim/msg:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10130 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/msg/msg.Dockerfile b/deploy_k8s/msg/msg.Dockerfile index 50299b41d..54a54f9bf 100644 --- a/deploy_k8s/msg/msg.Dockerfile +++ b/deploy_k8s/msg/msg.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml @@ -15,5 +16,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/msg_gateway/deployment.yaml b/deploy_k8s/msg_gateway/deployment.yaml index 72352386e..604af28dd 100644 --- a/deploy_k8s/msg_gateway/deployment.yaml +++ b/deploy_k8s/msg_gateway/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: msg-gateway # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: msg-gateway - image: openim/msg_gateway:v2.0.10k + image: openim/msg_gateway:v2.1.0 # imagePullPolicy: Always ports: - name: rpc-port @@ -29,7 +29,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 --- diff --git a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile index 48441eb56..8954af854 100644 --- a/deploy_k8s/msg_gateway/msg_gateway.Dockerfile +++ b/deploy_k8s/msg_gateway/msg_gateway.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/msg_transfer/deployment.yaml b/deploy_k8s/msg_transfer/deployment.yaml index cbb44717e..459a93410 100644 --- a/deploy_k8s/msg_transfer/deployment.yaml +++ b/deploy_k8s/msg_transfer/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: msg-transfer # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: msg-transfer - image: openim/msg_transfer:v2.0.10k + image: openim/msg_transfer:v2.1.0 # imagePullPolicy: Always volumeMounts: - name: config @@ -24,6 +24,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile index 68c3f3819..9d103ce07 100644 --- a/deploy_k8s/msg_transfer/msg_transfer.Dockerfile +++ b/deploy_k8s/msg_transfer/msg_transfer.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/office/deployment.yaml b/deploy_k8s/office/deployment.yaml index 333a11aba..c7a6c1da5 100644 --- a/deploy_k8s/office/deployment.yaml +++ b/deploy_k8s/office/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: office # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: office - image: openim/office:v2.0.10k + image: openim/office:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10210 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/office/office.Dockerfile b/deploy_k8s/office/office.Dockerfile index c6db928fa..8144deaa1 100644 --- a/deploy_k8s/office/office.Dockerfile +++ b/deploy_k8s/office/office.Dockerfile @@ -2,8 +2,10 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml + # 将可执行文件复制到目标目录 ADD ./open_im_office $WORKDIR/cmd/main @@ -14,5 +16,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/organization/deployment.yaml b/deploy_k8s/organization/deployment.yaml index a32488d44..fce6fde5a 100644 --- a/deploy_k8s/organization/deployment.yaml +++ b/deploy_k8s/organization/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: organization # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: organization - image: openim/organization:v2.0.10k + image: openim/organization:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10220 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/organization/organization.Dockerfile b/deploy_k8s/organization/organization.Dockerfile index 345ee9692..9a824f1fe 100644 --- a/deploy_k8s/organization/organization.Dockerfile +++ b/deploy_k8s/organization/organization.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -15,5 +16,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/push/deployment.yaml b/deploy_k8s/push/deployment.yaml index c1a8d0299..14ba13fdd 100644 --- a/deploy_k8s/push/deployment.yaml +++ b/deploy_k8s/push/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: push # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: push - image: openim/push:v2.0.10k + image: openim/push:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10170 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 \ No newline at end of file diff --git a/deploy_k8s/push/push.Dockerfile b/deploy_k8s/push/push.Dockerfile index 2904ce56f..92409d225 100644 --- a/deploy_k8s/push/push.Dockerfile +++ b/deploy_k8s/push/push.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml @@ -15,5 +16,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/sdk_server/deployment.yaml b/deploy_k8s/sdk_server/deployment.yaml index 063b3d9d9..f99e67006 100644 --- a/deploy_k8s/sdk_server/deployment.yaml +++ b/deploy_k8s/sdk_server/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: sdk-server # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: sdk-server - image: openim/sdk_server:v2.0.10k + image: openim/sdk_server:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10003 @@ -30,7 +30,7 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config - name: local-db hostPath: path: /db/sdk diff --git a/deploy_k8s/sdk_server/sdk_server.Dockerfile b/deploy_k8s/sdk_server/sdk_server.Dockerfile index e38369bcb..9a6eaf8fe 100644 --- a/deploy_k8s/sdk_server/sdk_server.Dockerfile +++ b/deploy_k8s/sdk_server/sdk_server.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -13,5 +14,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"] -WORKDIR $WORKDIR +WORKDIR $CMDDIR CMD ./main \ No newline at end of file diff --git a/deploy_k8s/statistics/deployment.yaml b/deploy_k8s/statistics/deployment.yaml index 3743d7e6b..d7cc5e15b 100644 --- a/deploy_k8s/statistics/deployment.yaml +++ b/deploy_k8s/statistics/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: statistics # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: statistics - image: openim/statistics:v2.0.10k + image: openim/statistics:v2.1.0 # imagePullPolicy: Always ports: - containerPort: 10180 @@ -26,6 +26,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/statistics/statistics.Dockerfile b/deploy_k8s/statistics/statistics.Dockerfile index 44e8f2fe1..e271aca29 100644 --- a/deploy_k8s/statistics/statistics.Dockerfile +++ b/deploy_k8s/statistics/statistics.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file diff --git a/deploy_k8s/user/deployment.yaml b/deploy_k8s/user/deployment.yaml index 1ad605d14..6473094f0 100644 --- a/deploy_k8s/user/deployment.yaml +++ b/deploy_k8s/user/deployment.yaml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: user # 选择这个指定标签执行 - replicas: 2 # 运行pod数量 + replicas: 1 # 运行pod数量 template: metadata: labels: @@ -15,7 +15,7 @@ spec: spec: containers: - name: user - image: openim/user:v2.0.10k + image: openim/user:v2.1.0 # imagePullPolicy: Always volumeMounts: - name: config @@ -24,6 +24,6 @@ spec: volumes: - name: config configMap: - name: config + name: openim-config strategy: #更新策略 type: RollingUpdate # 滚动更新 diff --git a/deploy_k8s/user/user.Dockerfile b/deploy_k8s/user/user.Dockerfile index 3218949d4..813757d85 100644 --- a/deploy_k8s/user/user.Dockerfile +++ b/deploy_k8s/user/user.Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu # 设置固定的项目路径 ENV WORKDIR /Open-IM-Server +ENV CMDDIR $WORKDIR/cmd ENV CONFIG_NAME $WORKDIR/config/config.yaml # 将可执行文件复制到目标目录 @@ -14,5 +15,5 @@ RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/script && \ VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script"] -WORKDIR $WORKDIR -CMD ./cmd/main \ No newline at end of file +WORKDIR $CMDDIR +CMD ./main \ No newline at end of file From 8849cd46c94bbc1898634bc2d8e43a42db7a29a0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 1 Jul 2022 12:14:15 +0800 Subject: [PATCH 720/752] callback --- deploy_k8s/k8s_openim_deploy.md | 43 +++++++++++++++++++-------- internal/msg_gateway/gate/callback.go | 4 +-- pkg/call_back_struct/push.go | 2 +- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/deploy_k8s/k8s_openim_deploy.md b/deploy_k8s/k8s_openim_deploy.md index 45e3e9778..aef9aecda 100644 --- a/deploy_k8s/k8s_openim_deploy.md +++ b/deploy_k8s/k8s_openim_deploy.md @@ -14,30 +14,30 @@ ### 2. 项目根目录创建im configMap到k8s openim namespace 1. 为open-IM项目创建单独命名空间 - ``` + ``` kubectl create namespace openim - ``` + ``` 2. 在项目根目录通过config/config.yaml - ``` + ``` kubectl -n openim create configmap config --from-file=config/config.yaml - ``` + ``` 查看configmap - ``` + ``` kubectl -n openim get configmap - ``` + ``` ### 3(可选). 修改每个deployment.yml 每个rpc的deployment在Open-IM-SERVER根目录deploy_k8s下 给需要调度的node打上标签 - ``` - kubectl get nodes + ``` + kubectl get nodes kubectl label node k8s-node1 role=openIMworker - ``` + ``` 在deployment的spec.template.spec加上 - ``` + ``` nodeSelector: - role: openIMworker - ``` + role: openIMworker + ``` 创建资源清单时添加上nodeSelector属性对应即可, 修改每种服务数量,建议至少每种2个rpc。 如果修改了config/config.yaml某些配置比如端口,同时需要修改对应deployment端口和ingress端口 @@ -78,3 +78,22 @@ kubectl 启动所有deployment, services, ingress telnet demo.openim.xxx.com {{your_ingress_port}} ``` +#### openIM k8s更新 +1. 暂存配置文件,拉取代码 + ``` + git stash push config/config.yaml + git pull + ``` +2. 合并配置文件, 解决冲突 + ``` + git stash pop + ``` +3. 重新生成configmap + ``` + kubectl -n openim create configmap config --from-file=config/config.yaml + ``` +4.修改所有deployment文件的spec.template.spec.image 改为新版本后在/deploy_k8s下重新执行 + ``` + ./kubectl_stop.sh + ./kubectl_start.sh + ``` \ No newline at end of file diff --git a/internal/msg_gateway/gate/callback.go b/internal/msg_gateway/gate/callback.go index 9840e3513..02b771a97 100644 --- a/internal/msg_gateway/gate/callback.go +++ b/internal/msg_gateway/gate/callback.go @@ -23,7 +23,7 @@ func callbackUserOnline(operationID, userID string, platformID int, token string PlatformID: int32(platformID), Platform: constant.PlatformIDToName(platformID), }, - Seq: time.Now().Nanosecond() / 1e6, + Seq: int(time.Now().UnixNano() / 1e6), } callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackUserOnlineReq, callbackUserOnlineResp, config.Config.Callback.CallbackUserOnline.CallbackTimeOut); err != nil { @@ -46,7 +46,7 @@ func callbackUserOffline(operationID, userID string, platformID int) cbApi.Commo PlatformID: int32(platformID), Platform: constant.PlatformIDToName(platformID), }, - Seq: time.Now().Nanosecond() / 1e6, + Seq: int(time.Now().UnixNano() / 1e6), } callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil { diff --git a/pkg/call_back_struct/push.go b/pkg/call_back_struct/push.go index 271803679..1f6d1c2a4 100644 --- a/pkg/call_back_struct/push.go +++ b/pkg/call_back_struct/push.go @@ -5,7 +5,7 @@ import commonPb "Open_IM/pkg/proto/sdk_ws" type CallbackOfflinePushReq struct { UserStatusCallbackReq *commonPb.OfflinePushInfo - CommonCallbackReq + //CommonCallbackReq SendID string `json:"sendID"` GroupID string `json:"groupID"` ContentType int32 `json:"contentType"` From 1650165f4bcac266ed9365693fc9ddd01d15d2a5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 14:47:29 +0800 Subject: [PATCH 721/752] group add verify --- internal/rpc/msg/send_msg.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 2e091e2e3..58a10358a 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -5,6 +5,7 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" cacheRpc "Open_IM/pkg/proto/cache" pbCache "Open_IM/pkg/proto/cache" @@ -297,14 +298,16 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S default: } + if len(addUidList) > 0 { + memberUserIDList = append(memberUserIDList, addUidList...) + } + if !token_verify.IsManagerUserID(pb.MsgData.SendID) { + if !utils.IsContain(pb.MsgData.SendID, memberUserIDList) { + return returnMsg(&replay, pb, 202, "you are not in group", "", 0) + } + } m := make(map[string][]string, 2) - //if len(memberUserIDList) > GroupMemberNum { - // getOnlineAndOfflineUserIDList(memberUserIDList, m, pb.OperationID) - // log.Debug(pb.OperationID, m[constant.OnlineStatus], m[constant.OfflineStatus]) - //} else { m[constant.OnlineStatus] = memberUserIDList - //} - log.Debug(pb.OperationID, "send msg cost time1 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() @@ -329,9 +332,6 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } log.Debug(pb.OperationID, "send msg cost time22 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID, "uidList : ", len(addUidList)) wg.Add(1) - go rpc.sendMsgToGroup(addUidList, *pb, constant.OnlineStatus, &sendTag, &wg) - wg.Wait() - log.Debug(pb.OperationID, "send msg cost time2 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() // callback callbackResp = callbackAfterSendGroupMsg(pb) From 9d84bf8f4c9b503370e5a53745af4baa7ed93abf Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 1 Jul 2022 14:59:53 +0800 Subject: [PATCH 722/752] log --- config/config.yaml | 4 ++-- internal/demo/register/verify.go | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index bd7a2039b..bf9f3309c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -70,11 +70,11 @@ kafka: #如果是单机模式,用0.0.0.0或者不填,默认即可 serverip: 0.0.0.0 +#作为rpc时,注册到etcd的地址,单机默认即可,如果是集群部署,需要修改(具体使用内网地址还是外网地址,要依情况而定,目的是api/gateway能访问到) rpcRegisterIP: 127.0.0.1 +#默认即可 listenIP: 0.0.0.0 - - # endpoints 内部组件间访问的端点host名称,访问时,可以内部直接访问 host:port 来访问 endpoints: api: openim_api diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index 5e8ecdffc..798e8e9e0 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -5,6 +5,7 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "github.com/gin-gonic/gin" "net/http" @@ -21,12 +22,16 @@ type paramsCertification struct { func Verify(c *gin.Context) { params := paramsCertification{} + operationID := params.OperationID + if operationID == "" { + operationID = utils.OperationIDGenerator() + } if err := c.BindJSON(¶ms); err != nil { - log.NewError("", "request params json parsing failed", "", "err", err.Error()) + log.NewError(operationID, "request params json parsing failed", "", "err", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()}) return } - log.NewInfo("recv req: ", params) + log.NewInfo(operationID, "recv req: ", params) var account string if params.Email != "" { @@ -57,7 +62,7 @@ func Verify(c *gin.Context) { } code, err := db.DB.GetAccountCode(accountKey) - log.NewInfo(params.OperationID, "redis phone number and verificating Code", accountKey, code, params) + log.NewInfo(params.OperationID, "redis phone number and verificating Code", "key: ", accountKey, "code: ", code, "params: ", params) if err != nil { log.NewError(params.OperationID, "Verification code expired", accountKey, "err", err.Error()) data := make(map[string]interface{}) From 658d97ff4e4bf24e5c433465d3b294e0830fd90f Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 1 Jul 2022 15:07:22 +0800 Subject: [PATCH 723/752] log --- internal/demo/register/send_code.go | 8 ++++++++ internal/demo/register/verify.go | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index ef00be045..b39d04df4 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -6,11 +6,13 @@ import ( "Open_IM/pkg/common/db" "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/utils" "fmt" "github.com/gin-gonic/gin" "gopkg.in/gomail.v2" "math/rand" "net/http" + "time" ) @@ -41,11 +43,17 @@ type paramsVerificationCode struct { func SendVerificationCode(c *gin.Context) { params := paramsVerificationCode{} + if err := c.BindJSON(¶ms); err != nil { log.NewError("", "BindJSON failed", "err:", err.Error(), "phoneNumber", params.PhoneNumber, "email", params.Email) c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()}) return } + operationID := params.OperationID + if operationID == "" { + operationID = utils.OperationIDGenerator() + } + log.Info(operationID, "SendVerificationCode args: ", params) var account string if params.Email != "" { account = params.Email diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index 798e8e9e0..5c27d910c 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -5,8 +5,7 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" - "Open_IM/pkg/utils" - + "Open_IM/pkg/common/utils" "github.com/gin-gonic/gin" "net/http" ) @@ -23,14 +22,15 @@ type paramsCertification struct { func Verify(c *gin.Context) { params := paramsCertification{} operationID := params.OperationID - if operationID == "" { - operationID = utils.OperationIDGenerator() - } + if err := c.BindJSON(¶ms); err != nil { log.NewError(operationID, "request params json parsing failed", "", "err", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()}) return } + if operationID == "" { + operationID = utils.OperationIDGenerator() + } log.NewInfo(operationID, "recv req: ", params) var account string From 4783e3d0618d8944d70e0dfee039fda775640947 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 1 Jul 2022 15:11:33 +0800 Subject: [PATCH 724/752] log --- internal/demo/register/send_code.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index b39d04df4..1305ee801 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -53,7 +53,7 @@ func SendVerificationCode(c *gin.Context) { if operationID == "" { operationID = utils.OperationIDGenerator() } - log.Info(operationID, "SendVerificationCode args: ", params) + log.Info(operationID, "SendVerificationCode args: ", "area code: ", params.AreaCode, "Phone Number: ", params.PhoneNumber) var account string if params.Email != "" { account = params.Email From 54566997b29f88a0d60199a69014d364c07c26d1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 1 Jul 2022 15:25:06 +0800 Subject: [PATCH 725/752] fix bug --- internal/demo/register/verify.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index 5c27d910c..ebce69908 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -37,7 +37,7 @@ func Verify(c *gin.Context) { if params.Email != "" { account = params.Email } else { - account = params.AreaCode + params.PhoneNumber + account = params.PhoneNumber } if params.VerificationCode == config.Config.Demo.SuperCode { From f993ddf8763955e4a449c7f7ea0e8721cc809f3f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 15:29:22 +0800 Subject: [PATCH 726/752] test --- docker-compose.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index df9c69b9d..0d234cc60 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -74,11 +74,10 @@ services: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" - KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 + KAFKA_ADVERTISED_LISTENERS: INSIDE://172.19.0.14:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE - network_mode: "host" depends_on: - zookeeper From ed52ecb259cd3e8e553d95863b1003d163f227f3 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 1 Jul 2022 15:29:45 +0800 Subject: [PATCH 727/752] fix bug --- internal/demo/register/verify.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index ebce69908..7777e6ec7 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -37,7 +37,7 @@ func Verify(c *gin.Context) { if params.Email != "" { account = params.Email } else { - account = params.PhoneNumber + account = params.AreaCode + params.PhoneNumber } if params.VerificationCode == config.Config.Demo.SuperCode { @@ -56,9 +56,9 @@ func Verify(c *gin.Context) { var accountKey string switch params.UsedFor { case constant.VerificationCodeForRegister: - accountKey = params.AreaCode + account + "_" + constant.VerificationCodeForRegisterSuffix + accountKey = account + "_" + constant.VerificationCodeForRegisterSuffix case constant.VerificationCodeForReset: - accountKey = params.AreaCode + account + "_" + constant.VerificationCodeForResetSuffix + accountKey = account + "_" + constant.VerificationCodeForResetSuffix } code, err := db.DB.GetAccountCode(accountKey) From 813b6a6a68618bd257f917594af605adc72be003 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 15:33:35 +0800 Subject: [PATCH 728/752] test --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 0d234cc60..33128d3d8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -74,7 +74,7 @@ services: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" - KAFKA_ADVERTISED_LISTENERS: INSIDE://172.19.0.14:9092,OUTSIDE://103.116.45.174:9093 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE From 088f9dae9b1ff846d78b951899db8bb74294d081 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 1 Jul 2022 15:36:44 +0800 Subject: [PATCH 729/752] demo --- cmd/open_im_api/docs/docs.go | 172 +++++++++++----------- cmd/open_im_api/docs/swagger.json | 172 +++++++++++----------- cmd/open_im_api/docs/swagger.yaml | 157 ++++++++++---------- internal/api/conversation/conversation.go | 12 +- internal/api/manage/management_user.go | 8 +- internal/api/office/tag.go | 28 ++-- internal/api/office/work_moments.go | 32 ++-- internal/api/organization/organization.go | 53 ++++--- pkg/base_info/organization_api_struct.go | 8 +- 9 files changed, 313 insertions(+), 329 deletions(-) diff --git a/cmd/open_im_api/docs/docs.go b/cmd/open_im_api/docs/docs.go index 50981d32a..183ab0bf4 100644 --- a/cmd/open_im_api/docs/docs.go +++ b/cmd/open_im_api/docs/docs.go @@ -2360,13 +2360,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetAllConversationsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetAllConversationsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2414,13 +2414,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetConversationResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetConversationResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2468,13 +2468,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetConversationsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetConversationsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2630,13 +2630,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2684,13 +2684,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2738,13 +2738,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateTagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateTagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2792,13 +2792,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteCommentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteCommentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2846,13 +2846,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2900,13 +2900,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteTagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteTagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2954,13 +2954,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetTagSendLogsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetTagSendLogsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3008,13 +3008,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3062,13 +3062,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserTagByIDResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserTagByIDResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3116,13 +3116,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserTagsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserTagsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3170,13 +3170,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3224,13 +3224,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3278,13 +3278,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3332,13 +3332,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SendMsg2TagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SendMsg2TagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3386,13 +3386,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetTagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetTagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3452,13 +3452,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3506,13 +3506,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3560,13 +3560,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3614,13 +3614,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3668,13 +3668,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3722,13 +3722,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3778,7 +3778,10 @@ const docTemplate = `{ "type": "object", "properties": { "data": { - "$ref": "#/definitions/server_api_params.UserDepartmentMember" + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.UserDepartmentMember" + } } } } @@ -3788,13 +3791,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3836,19 +3839,34 @@ const docTemplate = `{ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetSubDepartmentResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.Department" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetSubDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetSubDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3908,13 +3926,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3962,13 +3980,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4016,13 +4034,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4070,13 +4088,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4190,13 +4208,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AccountCheckResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AccountCheckResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4244,13 +4262,13 @@ const docTemplate = `{ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetAllUsersUidResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetAllUsersUidResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -5213,10 +5231,6 @@ const docTemplate = `{ "base_info.CreateDepartmentResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, @@ -5869,13 +5883,6 @@ const docTemplate = `{ "base_info.GetDepartmentMemberResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -6147,13 +6154,6 @@ const docTemplate = `{ "base_info.GetSubDepartmentResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -6274,10 +6274,6 @@ const docTemplate = `{ "base_info.GetUserInDepartmentResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, diff --git a/cmd/open_im_api/docs/swagger.json b/cmd/open_im_api/docs/swagger.json index 6e03a6912..d93a390f8 100644 --- a/cmd/open_im_api/docs/swagger.json +++ b/cmd/open_im_api/docs/swagger.json @@ -2352,13 +2352,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetAllConversationsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetAllConversationsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2406,13 +2406,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetConversationResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetConversationResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2460,13 +2460,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetConversationsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetConversationsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2622,13 +2622,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CommentOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2676,13 +2676,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2730,13 +2730,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateTagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateTagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2784,13 +2784,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteCommentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteCommentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2838,13 +2838,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2892,13 +2892,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteTagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteTagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -2946,13 +2946,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetTagSendLogsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetTagSendLogsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3000,13 +3000,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserFriendWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3054,13 +3054,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserTagByIDResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserTagByIDResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3108,13 +3108,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserTagsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserTagsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3162,13 +3162,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserWorkMomentsResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3216,13 +3216,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetWorkMomentByIDResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3270,13 +3270,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.LikeOneWorkMomentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3324,13 +3324,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SendMsg2TagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SendMsg2TagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3378,13 +3378,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.SetTagResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.SetTagResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3444,13 +3444,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3498,13 +3498,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3552,13 +3552,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.CreateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3606,13 +3606,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3660,13 +3660,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3714,13 +3714,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.DeleteUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3770,7 +3770,10 @@ "type": "object", "properties": { "data": { - "$ref": "#/definitions/server_api_params.UserDepartmentMember" + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.UserDepartmentMember" + } } } } @@ -3780,13 +3783,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetDepartmentMemberResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3828,19 +3831,34 @@ "0": { "description": "", "schema": { - "$ref": "#/definitions/base_info.GetSubDepartmentResp" + "allOf": [ + { + "$ref": "#/definitions/base_info.GetSubDepartmentResp" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/server_api_params.Department" + } + } + } + } + ] } }, "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetSubDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetSubDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3900,13 +3918,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -3954,13 +3972,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4008,13 +4026,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateOrganizationUserResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4062,13 +4080,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.UpdateUserInDepartmentResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4182,13 +4200,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.AccountCheckResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.AccountCheckResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -4236,13 +4254,13 @@ "400": { "description": "errCode为400 一般为参数输入错误, token未带上等", "schema": { - "$ref": "#/definitions/base_info.GetAllUsersUidResp" + "$ref": "#/definitions/base_info.Swagger400Resp" } }, "500": { "description": "errCode为500 一般为服务器内部错误", "schema": { - "$ref": "#/definitions/base_info.GetAllUsersUidResp" + "$ref": "#/definitions/base_info.Swagger500Resp" } } } @@ -5205,10 +5223,6 @@ "base_info.CreateDepartmentResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, @@ -5861,13 +5875,6 @@ "base_info.GetDepartmentMemberResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -6139,13 +6146,6 @@ "base_info.GetSubDepartmentResp": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true - } - }, "errCode": { "type": "integer" }, @@ -6266,10 +6266,6 @@ "base_info.GetUserInDepartmentResp": { "type": "object", "properties": { - "data": { - "type": "object", - "additionalProperties": true - }, "errCode": { "type": "integer" }, diff --git a/cmd/open_im_api/docs/swagger.yaml b/cmd/open_im_api/docs/swagger.yaml index f030e5353..08b433cd2 100644 --- a/cmd/open_im_api/docs/swagger.yaml +++ b/cmd/open_im_api/docs/swagger.yaml @@ -438,9 +438,6 @@ definitions: type: object base_info.CreateDepartmentResp: properties: - data: - additionalProperties: true - type: object errCode: type: integer errMsg: @@ -872,11 +869,6 @@ definitions: type: object base_info.GetDepartmentMemberResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -1055,11 +1047,6 @@ definitions: type: object base_info.GetSubDepartmentResp: properties: - data: - items: - additionalProperties: true - type: object - type: array errCode: type: integer errMsg: @@ -1139,9 +1126,6 @@ definitions: type: object base_info.GetUserInDepartmentResp: properties: - data: - additionalProperties: true - type: object errCode: type: integer errMsg: @@ -4162,11 +4146,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetAllConversationsResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetAllConversationsResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户所有会话 tags: - 会话相关 @@ -4198,11 +4182,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetConversationResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetConversationResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 根据会话ID获取会话 tags: - 会话相关 @@ -4234,11 +4218,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetConversationsResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetConversationsResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 根据会话ID列表获取会话 tags: - 会话相关 @@ -4333,11 +4317,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CommentOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CommentOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 评论一条工作圈 tags: - 工作圈 @@ -4370,11 +4354,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CreateOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CreateOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 创建一条工作圈 tags: - 工作圈 @@ -4406,11 +4390,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CreateTagResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CreateTagResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 创建标签 tags: - 标签 @@ -4442,11 +4426,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DeleteCommentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DeleteCommentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 删除一条评论 tags: - 工作圈 @@ -4478,11 +4462,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DeleteOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DeleteOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 删除一条工作圈 tags: - 工作圈 @@ -4514,11 +4498,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DeleteTagResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DeleteTagResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 删除标签 tags: - 标签 @@ -4550,11 +4534,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetTagSendLogsResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetTagSendLogsResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取发送历史记录 tags: - 标签 @@ -4586,11 +4570,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetUserFriendWorkMomentsResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetUserFriendWorkMomentsResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 查询自己大工作圈页面 tags: - 工作圈 @@ -4622,11 +4606,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetUserTagByIDResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetUserTagByIDResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取该用户的标签信息 tags: - 标签 @@ -4658,11 +4642,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetUserTagsResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetUserTagsResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取用户标签信息 tags: - 标签 @@ -4694,11 +4678,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetUserWorkMomentsResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetUserWorkMomentsResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 查询用户工作圈 tags: - 工作圈 @@ -4730,11 +4714,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetWorkMomentByIDResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetWorkMomentByIDResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 通过ID获取工作圈 tags: - 工作圈 @@ -4766,11 +4750,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.LikeOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.LikeOneWorkMomentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 点赞一条工作圈 tags: - 工作圈 @@ -4802,11 +4786,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.SendMsg2TagResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.SendMsg2TagResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 发送标签消息 tags: - 标签 @@ -4838,11 +4822,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.SetTagResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.SetTagResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 修改标签 tags: - 标签 @@ -4879,11 +4863,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CreateDepartmentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CreateDepartmentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 创建部门 tags: - 组织架构相关 @@ -4915,11 +4899,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CreateDepartmentMemberResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CreateDepartmentMemberResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 创建部门用户 tags: - 组织架构相关 @@ -4951,11 +4935,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.CreateOrganizationUserResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.CreateOrganizationUserResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 组织架构导入用户 tags: - 组织架构相关 @@ -4987,11 +4971,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DeleteDepartmentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DeleteDepartmentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 删除部门 tags: - 组织架构相关 @@ -5023,11 +5007,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DeleteOrganizationUserResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DeleteOrganizationUserResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 删除组织架构中某个用户 tags: - 组织架构相关 @@ -5059,11 +5043,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.DeleteUserInDepartmentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.DeleteUserInDepartmentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 删除部门中某个用户 tags: - 组织架构相关 @@ -5095,16 +5079,18 @@ paths: - $ref: '#/definitions/base_info.GetDepartmentMemberResp' - properties: data: - $ref: '#/definitions/server_api_params.UserDepartmentMember' + items: + $ref: '#/definitions/server_api_params.UserDepartmentMember' + type: array type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetDepartmentMemberResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetDepartmentMemberResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取部门中所有成员 tags: - 组织架构相关 @@ -5132,15 +5118,22 @@ paths: "0": description: "" schema: - $ref: '#/definitions/base_info.GetSubDepartmentResp' + allOf: + - $ref: '#/definitions/base_info.GetSubDepartmentResp' + - properties: + data: + items: + $ref: '#/definitions/server_api_params.Department' + type: array + type: object "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetSubDepartmentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetSubDepartmentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取子部门列表 tags: - 组织架构相关 @@ -5177,11 +5170,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetUserInDepartmentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetUserInDepartmentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取部门中的所有用户 tags: - 组织架构相关 @@ -5213,11 +5206,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.UpdateDepartmentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.UpdateDepartmentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 更新部门信息 tags: - 组织架构相关 @@ -5249,11 +5242,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.UpdateOrganizationUserResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.UpdateOrganizationUserResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 更新组织架构中的用户 tags: - 组织架构相关 @@ -5285,11 +5278,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.UpdateUserInDepartmentResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.UpdateUserInDepartmentResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 更新部门中某个用户 tags: - 组织架构相关 @@ -5366,11 +5359,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.AccountCheckResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.AccountCheckResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 检查列表账户注册状态,并且返回结果 tags: - 用户相关 @@ -5402,11 +5395,11 @@ paths: "400": description: errCode为400 一般为参数输入错误, token未带上等 schema: - $ref: '#/definitions/base_info.GetAllUsersUidResp' + $ref: '#/definitions/base_info.Swagger400Resp' "500": description: errCode为500 一般为服务器内部错误 schema: - $ref: '#/definitions/base_info.GetAllUsersUidResp' + $ref: '#/definitions/base_info.Swagger500Resp' summary: 获取所有用户uid列表 tags: - 用户相关 diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go index 36d7388bf..2c26d4f0e 100644 --- a/internal/api/conversation/conversation.go +++ b/internal/api/conversation/conversation.go @@ -136,8 +136,8 @@ func BatchSetConversations(c *gin.Context) { // @Param req body api.GetAllConversationsReq true "ownerUserID为要获取的用户ID" // @Produce json // @Success 0 {object} api.GetAllConversationsResp -// @Failure 500 {object} api.GetAllConversationsResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetAllConversationsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /msg/get_all_conversations [post] func GetAllConversations(c *gin.Context) { var ( @@ -186,8 +186,8 @@ func GetAllConversations(c *gin.Context) { // @Param req body api.GetConversationReq true "ownerUserID为要获取的用户ID
conversationID为要获取的会话ID" // @Produce json // @Success 0 {object} api.GetConversationResp -// @Failure 500 {object} api.GetConversationResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetConversationResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /msg/get_conversation [post] func GetConversation(c *gin.Context) { var ( @@ -236,8 +236,8 @@ func GetConversation(c *gin.Context) { // @Param req body api.GetConversationsReq true "ownerUserID为要获取的用户ID
conversationIDs为要获取的会话ID列表" // @Produce json // @Success 0 {object} api.GetConversationsResp -// @Failure 500 {object} api.GetConversationsResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetConversationsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /msg/get_conversations [post] func GetConversations(c *gin.Context) { var ( diff --git a/internal/api/manage/management_user.go b/internal/api/manage/management_user.go index 775c31366..3d2c89a65 100644 --- a/internal/api/manage/management_user.go +++ b/internal/api/manage/management_user.go @@ -74,8 +74,8 @@ func DeleteUser(c *gin.Context) { // @Param req body api.GetAllUsersUidReq true "请求体" // @Produce json // @Success 0 {object} api.GetAllUsersUidResp -// @Failure 500 {object} api.GetAllUsersUidResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetAllUsersUidResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/get_all_users_uid [post] func GetAllUsersUid(c *gin.Context) { params := api.GetAllUsersUidReq{} @@ -129,8 +129,8 @@ func GetAllUsersUid(c *gin.Context) { // @Param req body api.AccountCheckReq true "请求体" // @Produce json // @Success 0 {object} api.AccountCheckResp -// @Failure 500 {object} api.AccountCheckResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.AccountCheckResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/account_check [post] func AccountCheck(c *gin.Context) { params := api.AccountCheckReq{} diff --git a/internal/api/office/tag.go b/internal/api/office/tag.go index b23c75826..c64e736cd 100644 --- a/internal/api/office/tag.go +++ b/internal/api/office/tag.go @@ -25,8 +25,8 @@ import ( // @Param req body api.GetUserTagsReq true "请求" // @Produce json // @Success 0 {object} api.GetUserTagsResp -// @Failure 500 {object} api.GetUserTagsResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetUserTagsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/get_user_tags [post] func GetUserTags(c *gin.Context) { var ( @@ -88,8 +88,8 @@ func GetUserTags(c *gin.Context) { // @Param req body api.CreateTagReq true "请求" // @Produce json // @Success 0 {object} api.CreateTagResp -// @Failure 500 {object} api.CreateTagResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CreateTagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/create_tag [post] func CreateTag(c *gin.Context) { var ( @@ -148,8 +148,8 @@ func CreateTag(c *gin.Context) { // @Param req body api.DeleteTagReq true "请求" // @Produce json // @Success 0 {object} api.DeleteTagResp -// @Failure 500 {object} api.DeleteTagResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DeleteTagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/delete_tag [post] func DeleteTag(c *gin.Context) { var ( @@ -208,8 +208,8 @@ func DeleteTag(c *gin.Context) { // @Param req body api.SetTagReq true "请求" // @Produce json // @Success 0 {object} api.SetTagResp -// @Failure 500 {object} api.SetTagResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.SetTagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/set_tag [post] func SetTag(c *gin.Context) { var ( @@ -268,8 +268,8 @@ func SetTag(c *gin.Context) { // @Param req body api.SendMsg2TagReq true "请求" // @Produce json // @Success 0 {object} api.SendMsg2TagResp -// @Failure 500 {object} api.SendMsg2TagResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.SendMsg2TagResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/send_msg_to_tag [post] func SendMsg2Tag(c *gin.Context) { var ( @@ -328,8 +328,8 @@ func SendMsg2Tag(c *gin.Context) { // @Param req body api.GetTagSendLogsReq true "请求" // @Produce json // @Success 0 {object} api.GetTagSendLogsResp -// @Failure 500 {object} api.GetTagSendLogsResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetTagSendLogsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/get_send_tag_log [post] func GetTagSendLogs(c *gin.Context) { var ( @@ -398,8 +398,8 @@ func GetTagSendLogs(c *gin.Context) { // @Param req body api.GetUserTagByIDReq true "请求" // @Produce json // @Success 0 {object} api.GetUserTagByIDResp -// @Failure 500 {object} api.GetUserTagByIDResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetUserTagByIDResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/get_user_tag_by_id [post] func GetUserTagByID(c *gin.Context) { var ( diff --git a/internal/api/office/work_moments.go b/internal/api/office/work_moments.go index 86b3dc7bf..0c37f5b1d 100644 --- a/internal/api/office/work_moments.go +++ b/internal/api/office/work_moments.go @@ -24,8 +24,8 @@ import ( // @Param req body api.CreateOneWorkMomentReq true "请求 atUserList likeUserList permissionGroupList permissionUserList 字段中userName可以不填" // @Produce json // @Success 0 {object} api.CreateOneWorkMomentResp -// @Failure 500 {object} api.CreateOneWorkMomentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CreateOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/create_one_work_moment [post] func CreateOneWorkMoment(c *gin.Context) { var ( @@ -88,8 +88,8 @@ func CreateOneWorkMoment(c *gin.Context) { // @Param req body api.DeleteOneWorkMomentReq true "请求" // @Produce json // @Success 0 {object} api.DeleteOneWorkMomentResp -// @Failure 500 {object} api.DeleteOneWorkMomentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DeleteOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/delete_one_work_moment [post] func DeleteOneWorkMoment(c *gin.Context) { var ( @@ -151,8 +151,8 @@ func DeleteOneWorkMoment(c *gin.Context) { // @Param req body api.LikeOneWorkMomentReq true "请求" // @Produce json // @Success 0 {object} api.LikeOneWorkMomentResp -// @Failure 500 {object} api.LikeOneWorkMomentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.LikeOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/like_one_work_moment [post] func LikeOneWorkMoment(c *gin.Context) { var ( @@ -213,8 +213,8 @@ func LikeOneWorkMoment(c *gin.Context) { // @Param req body api.CommentOneWorkMomentReq true "请求" // @Produce json // @Success 0 {object} api.CommentOneWorkMomentResp -// @Failure 500 {object} api.CommentOneWorkMomentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CommentOneWorkMomentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/comment_one_work_moment [post] func CommentOneWorkMoment(c *gin.Context) { var ( @@ -275,8 +275,8 @@ func CommentOneWorkMoment(c *gin.Context) { // @Param req body api.DeleteCommentReq true "请求" // @Produce json // @Success 0 {object} api.DeleteCommentResp -// @Failure 500 {object} api.DeleteCommentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DeleteCommentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/delete_comment [post] func DeleteComment(c *gin.Context) { var ( @@ -335,8 +335,8 @@ func DeleteComment(c *gin.Context) { // @Param req body api.GetWorkMomentByIDReq true "请求" // @Produce json // @Success 0 {object} api.GetWorkMomentByIDResp -// @Failure 500 {object} api.GetWorkMomentByIDResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetWorkMomentByIDResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/get_work_moment_by_id [post] func GetWorkMomentByID(c *gin.Context) { var ( @@ -401,8 +401,8 @@ func GetWorkMomentByID(c *gin.Context) { // @Param req body api.GetUserWorkMomentsReq true "请求" // @Produce json // @Success 0 {object} api.GetUserWorkMomentsResp -// @Failure 500 {object} api.GetUserWorkMomentsResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetUserWorkMomentsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/get_user_work_moments [post] func GetUserWorkMoments(c *gin.Context) { var ( @@ -514,8 +514,8 @@ func GetUserWorkMoments(c *gin.Context) { // @Param req body api.GetUserFriendWorkMomentsReq true "请求" // @Produce json // @Success 0 {object} api.GetUserFriendWorkMomentsResp -// @Failure 500 {object} api.GetUserFriendWorkMomentsResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetUserFriendWorkMomentsResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /office/get_user_friend_work_moments [post] func GetUserFriendWorkMoments(c *gin.Context) { var ( diff --git a/internal/api/organization/organization.go b/internal/api/organization/organization.go index 32273756f..1d6542306 100644 --- a/internal/api/organization/organization.go +++ b/internal/api/organization/organization.go @@ -25,8 +25,8 @@ import ( // @Param req body api.CreateDepartmentReq true "请求" // @Produce json // @Success 0 {object} api.CreateDepartmentResp{data=open_im_sdk.Department} -// @Failure 500 {object} api.CreateDepartmentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CreateDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/create_department [post] func CreateDepartment(c *gin.Context) { params := api.CreateDepartmentReq{} @@ -80,8 +80,8 @@ func CreateDepartment(c *gin.Context) { // @Param req body api.UpdateDepartmentReq true "请求" // @Produce json // @Success 0 {object} api.UpdateDepartmentResp -// @Failure 500 {object} api.UpdateDepartmentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.UpdateDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/update_department [post] func UpdateDepartment(c *gin.Context) { params := api.UpdateDepartmentReq{} @@ -133,9 +133,9 @@ func UpdateDepartment(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetSubDepartmentReq true "请求" // @Produce json -// @Success 0 {object} api.GetSubDepartmentResp -// @Failure 500 {object} api.GetSubDepartmentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetSubDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetSubDepartmentResp{data=[]open_im_sdk.Department} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/get_sub_department [post] func GetSubDepartment(c *gin.Context) { params := api.GetSubDepartmentReq{} @@ -191,8 +191,8 @@ func GetAllDepartment(c *gin.Context) { // @Param req body api.DeleteDepartmentReq true "请求" // @Produce json // @Success 0 {object} api.DeleteDepartmentResp -// @Failure 500 {object} api.DeleteDepartmentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DeleteDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/delete_department [post] func DeleteDepartment(c *gin.Context) { params := api.DeleteDepartmentReq{} @@ -242,8 +242,8 @@ func DeleteDepartment(c *gin.Context) { // @Param req body api.CreateOrganizationUserReq true "请求" // @Produce json // @Success 0 {object} api.CreateOrganizationUserResp -// @Failure 500 {object} api.CreateOrganizationUserResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CreateOrganizationUserResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/create_organization_user [post] func CreateOrganizationUser(c *gin.Context) { params := api.CreateOrganizationUserReq{} @@ -296,8 +296,8 @@ func CreateOrganizationUser(c *gin.Context) { // @Param req body api.UpdateOrganizationUserReq true "请求" // @Produce json // @Success 0 {object} api.UpdateOrganizationUserResp -// @Failure 500 {object} api.UpdateOrganizationUserResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.UpdateOrganizationUserResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/update_organization_user [post] func UpdateOrganizationUser(c *gin.Context) { params := api.UpdateOrganizationUserReq{} @@ -348,8 +348,8 @@ func UpdateOrganizationUser(c *gin.Context) { // @Param req body api.CreateDepartmentMemberReq true "请求" // @Produce json // @Success 0 {object} api.CreateDepartmentMemberResp -// @Failure 500 {object} api.CreateDepartmentMemberResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.CreateDepartmentMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/create_department_member [post] func CreateDepartmentMember(c *gin.Context) { params := api.CreateDepartmentMemberReq{} @@ -402,8 +402,8 @@ func CreateDepartmentMember(c *gin.Context) { // @Param req body api.GetUserInDepartmentReq true "请求" // @Produce json // @Success 0 {object} api.GetUserInDepartmentResp{data=open_im_sdk.UserInDepartment} -// @Failure 500 {object} api.GetUserInDepartmentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetUserInDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/get_user_in_department [post] func GetUserInDepartment(c *gin.Context) { params := api.GetUserInDepartmentReq{} @@ -456,8 +456,8 @@ func GetUserInDepartment(c *gin.Context) { // @Param req body api.UpdateUserInDepartmentReq true "请求" // @Produce json // @Success 0 {object} api.UpdateUserInDepartmentResp -// @Failure 500 {object} api.UpdateUserInDepartmentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.UpdateUserInDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/update_user_in_department [post] func UpdateUserInDepartment(c *gin.Context) { params := api.UpdateUserInDepartmentReq{} @@ -509,8 +509,8 @@ func UpdateUserInDepartment(c *gin.Context) { // @Param req body api.DeleteOrganizationUserReq true "请求" // @Produce json // @Success 0 {object} api.DeleteOrganizationUserResp -// @Failure 500 {object} api.DeleteOrganizationUserResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DeleteOrganizationUserResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/delete_organization_user [post] func DeleteOrganizationUser(c *gin.Context) { params := api.DeleteOrganizationUserReq{} @@ -561,9 +561,9 @@ func DeleteOrganizationUser(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetDepartmentMemberReq true "请求" // @Produce json -// @Success 0 {object} api.GetDepartmentMemberResp{data=open_im_sdk.UserDepartmentMember} -// @Failure 500 {object} api.GetDepartmentMemberResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.GetDepartmentMemberResp "errCode为400 一般为参数输入错误, token未带上等" +// @Success 0 {object} api.GetDepartmentMemberResp{data=[]open_im_sdk.UserDepartmentMember} +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/get_department_member [post] func GetDepartmentMember(c *gin.Context) { params := api.GetDepartmentMemberReq{} @@ -572,7 +572,6 @@ func GetDepartmentMember(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) return } - req := &rpc.GetDepartmentMemberReq{} utils.CopyStructFields(req, ¶ms) @@ -616,8 +615,8 @@ func GetDepartmentMember(c *gin.Context) { // @Param req body api.DeleteUserInDepartmentReq true "请求" // @Produce json // @Success 0 {object} api.DeleteUserInDepartmentResp -// @Failure 500 {object} api.DeleteUserInDepartmentResp "errCode为500 一般为服务器内部错误" -// @Failure 400 {object} api.DeleteUserInDepartmentResp "errCode为400 一般为参数输入错误, token未带上等" +// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" +// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /organization/delete_user_in_department [post] func DeleteUserInDepartment(c *gin.Context) { params := api.DeleteUserInDepartmentReq{} diff --git a/pkg/base_info/organization_api_struct.go b/pkg/base_info/organization_api_struct.go index 31a9c038b..b3c77ad8f 100644 --- a/pkg/base_info/organization_api_struct.go +++ b/pkg/base_info/organization_api_struct.go @@ -9,7 +9,7 @@ type CreateDepartmentReq struct { type CreateDepartmentResp struct { CommResp Department *open_im_sdk.Department `json:"-"` - Data map[string]interface{} `json:"data"` + Data map[string]interface{} `json:"data" swaggerignore:"true"` } type UpdateDepartmentReq struct { @@ -28,7 +28,7 @@ type GetSubDepartmentReq struct { type GetSubDepartmentResp struct { CommResp DepartmentList []*open_im_sdk.Department `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type DeleteDepartmentReq struct { @@ -71,7 +71,7 @@ type GetUserInDepartmentReq struct { type GetUserInDepartmentResp struct { CommResp UserInDepartment *open_im_sdk.UserInDepartment `json:"-"` - Data map[string]interface{} `json:"data"` + Data map[string]interface{} `json:"data" swaggerignore:"true"` } type UpdateUserInDepartmentReq struct { @@ -97,7 +97,7 @@ type GetDepartmentMemberReq struct { type GetDepartmentMemberResp struct { CommResp UserInDepartmentList []*open_im_sdk.UserDepartmentMember `json:"-"` - Data []map[string]interface{} `json:"data"` + Data []map[string]interface{} `json:"data" swaggerignore:"true"` } type DeleteUserInDepartmentReq struct { From 566d5e832c46ef93bdf043aa2312b204d887719d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 16:23:28 +0800 Subject: [PATCH 730/752] test --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 33128d3d8..5f72bde6f 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -72,7 +72,7 @@ services: environment: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 - KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 From e02150cdb01b4bc99dff31e7ff9f366ed58a5b34 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 16:38:11 +0800 Subject: [PATCH 731/752] test --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 5f72bde6f..96aef7136 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -68,13 +68,13 @@ services: container_name: kafka restart: always ports: - - 9093:9093 + - 9092:9092 environment: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" - KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE From 834b88f68f60fc474196705c0af4458e3b4b51ca Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 1 Jul 2022 16:41:47 +0800 Subject: [PATCH 732/752] mongo docker-compose --- config/config.yaml | 4 ++-- docker-compose.yaml | 10 +++++++--- script/mongo-init.sh | 12 ++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 script/mongo-init.sh diff --git a/config/config.yaml b/config/config.yaml index bf9f3309c..10fa18cf5 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -28,8 +28,8 @@ mongo: dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 dbSource: admin - dbUserName: #mongo用户名,建议先不设置 - dbPassword: #mongo密码,建议先不设置 + dbUserName: openIM #mongo用户名,建议先不设置 + dbPassword: openIM #mongo密码,建议先不设置 dbMaxPoolSize: 100 dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 diff --git a/docker-compose.yaml b/docker-compose.yaml index 5f72bde6f..39b2888c8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -20,17 +20,21 @@ services: ports: - 37017:27017 container_name: mongo - command: --wiredTigerCacheSizeGB 1 + command: --wiredTigerCacheSizeGB 1 --auth volumes: - ./components/mongodb/data/db:/data/db - ./components/mongodb/data/logs:/data/logs - ./components/mongodb/data/conf:/etc/mongo + - ./script/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh environment: - TZ=Asia/Shanghai # cache - wiredTigerCacheSizeGB=1 - #- MONGO_INITDB_ROOT_USERNAME=openIM - #- MONGO_INITDB_ROOT_PASSWORD=openIM + MONGO_USERNAME: openIM + MONGO_PASSWORD: openIM + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: root + MONGO_INITDB_DATABASE: openIM #TZ: Asia/Shanghai restart: always diff --git a/script/mongo-init.sh b/script/mongo-init.sh new file mode 100644 index 000000000..ad9c84428 --- /dev/null +++ b/script/mongo-init.sh @@ -0,0 +1,12 @@ +mongo -- "$MONGO_INITDB_DATABASE" < Date: Fri, 1 Jul 2022 16:45:12 +0800 Subject: [PATCH 733/752] mongo docker-compose --- docker-compose.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index aad4436f1..d0969d0f3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -30,11 +30,11 @@ services: - TZ=Asia/Shanghai # cache - wiredTigerCacheSizeGB=1 - MONGO_USERNAME: openIM - MONGO_PASSWORD: openIM - MONGO_INITDB_ROOT_USERNAME: root - MONGO_INITDB_ROOT_PASSWORD: root - MONGO_INITDB_DATABASE: openIM + - MONGO_USERNAME=openIM + - MONGO_PASSWORD=openIM + - MONGO_INITDB_ROOT_USERNAME=root + - MONGO_INITDB_ROOT_PASSWORD=root + - MONGO_INITDB_DATABASE=openIM #TZ: Asia/Shanghai restart: always From 5f0873221a8cf02e21dd38aadbfa34dc356228e0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 16:51:44 +0800 Subject: [PATCH 734/752] test --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 96aef7136..9e2a8d6b9 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -74,8 +74,8 @@ services: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" - KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092 - KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9093,OUTSIDE://103.116.45.174:9092 + KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE depends_on: From f3144f92c55bffb88b8524fe4b84fae977ce6e14 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 1 Jul 2022 16:53:45 +0800 Subject: [PATCH 735/752] mongo docker-compose --- docker-compose.yaml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index d0969d0f3..69a84277c 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -20,22 +20,21 @@ services: ports: - 37017:27017 container_name: mongo - command: --wiredTigerCacheSizeGB 1 --auth + command: --wiredTigerCacheSizeGB 1 volumes: - ./components/mongodb/data/db:/data/db - ./components/mongodb/data/logs:/data/logs - ./components/mongodb/data/conf:/etc/mongo - - ./script/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh +# - ./script/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh environment: - TZ=Asia/Shanghai # cache - wiredTigerCacheSizeGB=1 - - MONGO_USERNAME=openIM - - MONGO_PASSWORD=openIM - - MONGO_INITDB_ROOT_USERNAME=root - - MONGO_INITDB_ROOT_PASSWORD=root - - MONGO_INITDB_DATABASE=openIM - #TZ: Asia/Shanghai +# - MONGO_USERNAME=openIM +# - MONGO_PASSWORD=openIM +# - MONGO_INITDB_ROOT_USERNAME=root +# - MONGO_INITDB_ROOT_PASSWORD=root +# - MONGO_INITDB_DATABASE=openIM restart: always redis: From 7c18012ef2e89927e3b3af175e2ebc747fdb4484 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 1 Jul 2022 16:59:16 +0800 Subject: [PATCH 736/752] mongo docker-compose --- config/config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 10fa18cf5..bf9f3309c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -28,8 +28,8 @@ mongo: dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 dbSource: admin - dbUserName: openIM #mongo用户名,建议先不设置 - dbPassword: openIM #mongo密码,建议先不设置 + dbUserName: #mongo用户名,建议先不设置 + dbPassword: #mongo密码,建议先不设置 dbMaxPoolSize: 100 dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 From 21e9958da9c02b5865b7e14b6d6326273bf41407 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 16:59:49 +0800 Subject: [PATCH 737/752] test --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 8317f213e..3c0a4a54e 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -77,8 +77,8 @@ services: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" - KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9093,OUTSIDE://103.116.45.174:9092 - KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9092 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092 + KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE depends_on: From 50d1646ce01768ae636df185fa43af0c304ed594 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 17:05:16 +0800 Subject: [PATCH 738/752] test --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 3c0a4a54e..8317f213e 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -77,8 +77,8 @@ services: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" - KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092 - KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9092 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9093,OUTSIDE://103.116.45.174:9092 + KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE depends_on: From 5a825df6a1991f5c023586a56e63d21ce2398b43 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 17:06:55 +0800 Subject: [PATCH 739/752] test --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 8317f213e..cdd3f1e40 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -77,7 +77,7 @@ services: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" - KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9093,OUTSIDE://103.116.45.174:9092 + KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092 KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE From 804b5423e520a03efd227222b8c9f4da12290370 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 17:11:41 +0800 Subject: [PATCH 740/752] test --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 5fefcb9d6..f5075d928 100644 --- a/go.mod +++ b/go.mod @@ -62,4 +62,4 @@ require ( gopkg.in/yaml.v3 v3.0.1 ) -replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0 +replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.1 From 7d172d718f4494c29364b7ea251233698bc23aaf Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 17:23:21 +0800 Subject: [PATCH 741/752] test --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index cdd3f1e40..69a84277c 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -78,7 +78,7 @@ services: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092 - KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9092 + KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE depends_on: From 5c4982a3f1d49a4515cc2de6dd9a0a3b15f6ad0a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 1 Jul 2022 17:23:43 +0800 Subject: [PATCH 742/752] fix bug --- config/config.yaml | 2 +- internal/demo/register/send_code.go | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index bf9f3309c..3190bb34f 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -705,7 +705,7 @@ demo: enable: true superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 # second - codeTTL: 300 + codeTTL: 60 mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改 title: "openIM" senderMail: "765567899@qq.com" diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index 1305ee801..6bb41f153 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -75,13 +75,19 @@ func SendVerificationCode(c *gin.Context) { accountKey = accountKey + "_" + constant.VerificationCodeForRegisterSuffix ok, err := db.DB.JudgeAccountEXISTS(accountKey) if ok || err != nil { - log.NewError(params.OperationID, "Repeat send code", params) + log.NewError(params.OperationID, "Repeat send code", params, accountKey) c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": "Repeat send code"}) return } case constant.VerificationCodeForReset: accountKey = accountKey + "_" + constant.VerificationCodeForResetSuffix + ok, err := db.DB.JudgeAccountEXISTS(accountKey) + if ok || err != nil { + log.NewError(params.OperationID, "Repeat send code", params, accountKey) + c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": "Repeat send code"}) + return + } } rand.Seed(time.Now().UnixNano()) code := 100000 + rand.Intn(900000) From a1bb9630d09033fdf5717610d5abc4de56d127da Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 17:27:51 +0800 Subject: [PATCH 743/752] test --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index f5075d928..5fefcb9d6 100644 --- a/go.mod +++ b/go.mod @@ -62,4 +62,4 @@ require ( gopkg.in/yaml.v3 v3.0.1 ) -replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.1 +replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0 From 2c823e094ffc3372d38546cdb494caaf2731c25b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 1 Jul 2022 18:11:30 +0800 Subject: [PATCH 744/752] v2.2.0 --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 69a84277c..cd3fb1294 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -114,7 +114,7 @@ services: command: minio server /data --console-address ':9090' open_im_server: - image: openim/open_im_server:v2.1.0 + image: openim/open_im_server:v2.2.0 container_name: open_im_server volumes: - ./logs:/Open-IM-Server/logs From b8cd9484dcb5c2deeae76f5af6725686e7e4848e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 19:29:17 +0800 Subject: [PATCH 745/752] test --- internal/rpc/msg/send_msg.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 58a10358a..336d79c92 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -339,6 +339,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendGroupMsg resp: ", callbackResp) } if !sendTag { + log.NewWarn(pb.OperationID, "send tag is ", sendTag) return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) } else { if pb.MsgData.ContentType == constant.AtText { From 047ee6454be896281f50cadb3edd3f309e0f9812 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 19:32:56 +0800 Subject: [PATCH 746/752] test --- go.sum | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go.sum b/go.sum index 26318f86c..fea29fb1c 100644 --- a/go.sum +++ b/go.sum @@ -684,3 +684,5 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= + + From a1025d8eee302dbca247060fa2f64d28d45205e4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 19:41:15 +0800 Subject: [PATCH 747/752] test --- internal/rpc/msg/send_msg.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 336d79c92..1c59c97df 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -331,7 +331,6 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } } log.Debug(pb.OperationID, "send msg cost time22 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID, "uidList : ", len(addUidList)) - wg.Add(1) newTime = db.GetCurrentTimestampByMill() // callback callbackResp = callbackAfterSendGroupMsg(pb) From f2b0f54c0b0486740debca5e3019834dd81857e0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 1 Jul 2022 19:48:03 +0800 Subject: [PATCH 748/752] test --- internal/rpc/msg/send_msg.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 1c59c97df..9d1fc841e 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -331,6 +331,9 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } } log.Debug(pb.OperationID, "send msg cost time22 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID, "uidList : ", len(addUidList)) + wg.Add(1) + go rpc.sendMsgToGroup(addUidList, *pb, constant.OnlineStatus, &sendTag, &wg) + wg.Wait() newTime = db.GetCurrentTimestampByMill() // callback callbackResp = callbackAfterSendGroupMsg(pb) From 34420c1265eaeb4d484ced5b118ef469550da99d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 9 Jul 2022 11:22:38 +0800 Subject: [PATCH 749/752] check all shell update --- script/check_all.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/check_all.sh b/script/check_all.sh index ccd62684b..14bca6c81 100644 --- a/script/check_all.sh +++ b/script/check_all.sh @@ -27,7 +27,7 @@ service_port_name=( switch=$(cat $config_path | grep demoswitch |awk -F '[:]' '{print $NF}') for i in ${service_port_name[*]}; do if [ ${switch} != "true" ]; then - if [ ${i} == "openImDemoPort"]; then + if [ ${i} == "openImDemoPort" ]; then continue fi fi From 40f7048eee5b519344fdcfae36b5dc31d6eb5731 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 11 Jul 2022 10:17:03 +0800 Subject: [PATCH 750/752] remove submodule --- cmd/Open-IM-SDK-Core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 588c9bb77..9765f046e 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 588c9bb77b9bd89a9261964006568b8655233cb6 +Subproject commit 9765f046e603d95df554dcc42ecc0bf751d24f64 From 126e1f44cab1ef0e49396057c4395490ffb07964 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 11 Jul 2022 10:35:51 +0800 Subject: [PATCH 751/752] remove submodule --- cmd/Open-IM-SDK-Core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 9765f046e..836ff1911 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 9765f046e603d95df554dcc42ecc0bf751d24f64 +Subproject commit 836ff19117d9f54748278e1aeb50de0723413b5d From 2e552e871136eaca30c557042c1355babe93a3e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AC=A7=E9=98=B3=E6=B0=8F?= Date: Wed, 13 Jul 2022 10:19:46 +0800 Subject: [PATCH 752/752] =?UTF-8?q?+=20windows=E7=BC=96=E8=AF=91=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=20(#245)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增windows编译脚本 win_build_all_service.cmd windows下编译脚本 win_start_all_service.cmd windows下执行脚本 --- script/win_build_all_service.cmd | 22 ++++++++++++++++++++++ script/win_start_all_service.cmd | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 script/win_build_all_service.cmd create mode 100644 script/win_start_all_service.cmd diff --git a/script/win_build_all_service.cmd b/script/win_build_all_service.cmd new file mode 100644 index 000000000..9ec7313ae --- /dev/null +++ b/script/win_build_all_service.cmd @@ -0,0 +1,22 @@ +SET ROOT=%cd% +mkdir %ROOT%\..\bin\ +cd ..\cmd\open_im_api\ && go build -ldflags="-w -s" && move open_im_api.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_cms_api\ && go build -ldflags="-w -s" && move open_im_cms_api.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_demo\ && go build -ldflags="-w -s" && move open_im_demo.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_msg_gateway\ && go build -ldflags="-w -s" && move open_im_msg_gateway.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_msg_transfer\ && go build -ldflags="-w -s" && move open_im_msg_transfer.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_push\ && go build -ldflags="-w -s" && move open_im_push.exe %ROOT%\..\bin\ +cd ..\..\cmd\rpc\open_im_admin_cms\&& go build -ldflags="-w -s" && move open_im_admin_cms.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_auth\&& go build -ldflags="-w -s" && move open_im_auth.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_cache\&& go build -ldflags="-w -s" && move open_im_cache.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_conversation\&& go build -ldflags="-w -s" && move open_im_conversation.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_friend\&& go build -ldflags="-w -s" && move open_im_friend.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_group\&& go build -ldflags="-w -s" && move open_im_group.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_message_cms\&& go build -ldflags="-w -s" && move open_im_message_cms.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_msg\&& go build -ldflags="-w -s" && move open_im_msg.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_office\&& go build -ldflags="-w -s" && move open_im_office.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_organization\&& go build -ldflags="-w -s" && move open_im_organization.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_statistics\&& go build -ldflags="-w -s" && move open_im_statistics.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_user\&& go build -ldflags="-w -s" && move open_im_user.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\Open-IM-SDK-Core\ws_wrapper\cmd\&& go build -ldflags="-w -s" open_im_sdk_server.go && move open_im_sdk_server.exe %ROOT%\..\bin\ +cd %ROOT% \ No newline at end of file diff --git a/script/win_start_all_service.cmd b/script/win_start_all_service.cmd new file mode 100644 index 000000000..e7b1c819e --- /dev/null +++ b/script/win_start_all_service.cmd @@ -0,0 +1,22 @@ +SET ROOT=%cd% +cd %ROOT%\..\bin\ +start cmd /C .\open_im_api.exe -port 10002 +start cmd /C .\open_im_cms_api.exe -port 10006 +start cmd /C .\open_im_user.exe -port 10110 +start cmd /C .\open_im_friend.exe -port 10120 +start cmd /C .\open_im_group.exe -port 10150 +start cmd /C .\open_im_auth.exe -port 10160 +start cmd /C .\open_im_admin_cms.exe -port 10200 +start cmd /C .\open_im_message_cms.exe -port 10190 +start cmd /C .\open_im_statistics.exe -port 10180 +start cmd /C .\open_im_msg.exe -port 10130 +start cmd /C .\open_im_office.exe -port 10210 +start cmd /C .\open_im_organization.exe -port 10220 +start cmd /C .\open_im_conversation.exe -port 10230 +start cmd /C .\open_im_cache.exe -port 10240 +start cmd /C .\open_im_push.exe -port 10170 +start cmd /C .\open_im_msg_transfer.exe +start cmd /C .\open_im_sdk_server.exe -openIM_api_port 10002 -openIM_ws_port 10001 -sdk_ws_port 10003 -openIM_log_level 6 +start cmd /C .\open_im_msg_gateway.exe -rpc_port 10140 -ws_port 10001 +start cmd /C .\open_im_demo.exe -port 10004 +cd %ROOT% \ No newline at end of file