diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 666684b5a..b0897aa3a 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 666684b5ac6af2bc259cbfd8021d9ddc31d1bff8 +Subproject commit b0897aa3abe719729c2ce099404f08806917bfe3 diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index a33e21eab..b9bcd6681 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -130,6 +130,7 @@ func main() { conversationGroup.POST("/set_conversation", conversation.SetConversation) conversationGroup.POST("/batch_set_conversation", conversation.BatchSetConversations) conversationGroup.POST("/set_recv_msg_opt", conversation.SetRecvMsgOpt) + conversationGroup.POST("/modify_conversation_field", conversation.ModifyConversationField) } // office officeGroup := r.Group("/office") @@ -174,7 +175,7 @@ func main() { } go apiThird.MinioInit() - ginPort := flag.Int("port", 10000, "get ginServerPort from cmd,default 10000 as port") + ginPort := flag.Int("port", 10002, "get ginServerPort from cmd,default 10000 as port") flag.Parse() fmt.Println("start api server, port: ", *ginPort) err := r.Run(":" + strconv.Itoa(*ginPort)) diff --git a/cmd/open_im_cms_api/main.go b/cmd/open_im_cms_api/main.go index 262020fea..e4061561c 100644 --- a/cmd/open_im_cms_api/main.go +++ b/cmd/open_im_cms_api/main.go @@ -3,7 +3,9 @@ package main import ( "Open_IM/internal/cms_api" "Open_IM/pkg/utils" + "flag" "fmt" + "strconv" "github.com/gin-gonic/gin" ) @@ -12,6 +14,8 @@ func main() { gin.SetMode(gin.ReleaseMode) router := cms_api.NewGinRouter() router.Use(utils.CorsHandler()) - fmt.Println("start cms api server, port: ", 8000) - router.Run(":" + "8000") + ginPort := flag.Int("port", 10006, "get ginServerPort from cmd,default 8000 as port") + flag.Parse() + fmt.Println("start cms api server, port: ", ginPort) + router.Run(":" + strconv.Itoa(*ginPort)) } diff --git a/cmd/open_im_demo/main.go b/cmd/open_im_demo/main.go index af7809547..4cfd4b552 100644 --- a/cmd/open_im_demo/main.go +++ b/cmd/open_im_demo/main.go @@ -23,7 +23,7 @@ func main() { r := gin.Default() r.Use(utils.CorsHandler()) - authRouterGroup := r.Group("/auth") + authRouterGroup := r.Group("/demo") { authRouterGroup.POST("/code", register.SendVerificationCode) authRouterGroup.POST("/verify", register.Verify) diff --git a/cmd/rpc/open_im_conversation/Makefile b/cmd/rpc/open_im_conversation/Makefile new file mode 100644 index 000000000..c1a5578bc --- /dev/null +++ b/cmd/rpc/open_im_conversation/Makefile @@ -0,0 +1,24 @@ +.PHONY: all build run gotool install clean help + +BINARY_NAME=open_im_conversation +BIN_DIR=../../../bin/ + +all: gotool build + +build: + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" + +run: + @go run ./ + +gotool: + go fmt ./ + go vet ./ + +install: + make build + mv ${BINARY_NAME} ${BIN_DIR} + +clean: + @if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi + diff --git a/cmd/rpc/open_im_conversation/main.go b/cmd/rpc/open_im_conversation/main.go new file mode 100644 index 000000000..dc43063e6 --- /dev/null +++ b/cmd/rpc/open_im_conversation/main.go @@ -0,0 +1,16 @@ +package main + +import ( + rpcConversation "Open_IM/internal/rpc/conversation" + "flag" + "fmt" +) + +func main() { + rpcPort := flag.Int("port", 11400, "RpcConversation default listen port 11300") + flag.Parse() + fmt.Println("start conversation rpc server, port: ", *rpcPort) + rpcServer := rpcConversation.NewRpcConversationServer(*rpcPort) + rpcServer.Run() + +} diff --git a/cmd/rpc/open_im_rpc/Makefile b/cmd/rpc/open_im_rpc/Makefile new file mode 100644 index 000000000..b86230c64 --- /dev/null +++ b/cmd/rpc/open_im_rpc/Makefile @@ -0,0 +1,23 @@ +.PHONY: all build run gotool install clean help + +BINARY_NAME=open_im_office +BIN_DIR=../../../bin/ + +all: gotool build + +build: + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" + +run: + @go run ./ + +gotool: + go fmt ./ + go vet ./ + +install: + make build + mv ${BINARY_NAME} ${BIN_DIR} + +clean: + @if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi diff --git a/cmd/rpc/open_im_rpc/main.go b/cmd/rpc/open_im_rpc/main.go new file mode 100644 index 000000000..efe887c1e --- /dev/null +++ b/cmd/rpc/open_im_rpc/main.go @@ -0,0 +1,15 @@ +package main + +import ( + rpc "Open_IM/internal/rpc/cache" + "flag" + "fmt" +) + +func main() { + rpcPort := flag.Int("port", 11500, "rpc listening port") + flag.Parse() + fmt.Println("start office rpc server, port: ", *rpcPort) + rpcServer := rpc.NewOfficeServer(*rpcPort) + rpcServer.Run() +} diff --git a/config/config.yaml b/config/config.yaml index 598f8bfc2..4bb653511 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -76,11 +76,11 @@ endpoints: rpc_office: openim_rpc_office api: - openImApiPort: [ 10000 ] #api服务端口,默认即可,需要开放此端口或做nginx转发 + openImApiPort: [ 10002 ] #api服务端口,默认即可,需要开放此端口或做nginx转发 cmsapi: - openImCmsApiPort: [ 8000 ] #管理后台api服务端口,默认即可,需要开放此端口或做nginx转发 + openImCmsApiPort: [ 10006 ] #管理后台api服务端口,默认即可,需要开放此端口或做nginx转发 sdk: - openImSdkWsPort: [ 30000 ] #jssdk服务端口,默认即可,项目中使用jssdk才需开放此端口或做nginx转发 + openImSdkWsPort: [ 10003 ] #jssdk服务端口,默认即可,项目中使用jssdk才需开放此端口或做nginx转发 #对象存储服务,以下配置二选一,目前支持两种,腾讯云和minio,二者配置好其中一种即可(如果使用minio参考https://doc.rentsoft.cn/#/qa/minio搭建minio服务器) credential: #腾讯cos,发送图片、视频、文件时需要,请自行申请后替换,必须修改 tencent: @@ -92,8 +92,8 @@ credential: #腾讯cos,发送图片、视频、文件时需要,请自行申 minio: #MinIO 发送图片、视频、文件时需要,请自行申请后替换,必须修改。 客户端初始化InitSDK,中 object_storage参数为minio bucket: openim location: us-east-1 - endpoint: http://127.0.0.1:9000 - endpointInner: http://127.0.0.1:9000 #minio内网地址 + endpoint: http://127.0.0.1:10005 #minio外网ip 这个ip是给客户端访问的 + endpointInner: http://127.0.0.1:10005 #minio内网地址 如果im server 可以通过内网访问到 minio就可以填写 endpointInnerEnable: true #是否启用minio内网地址 启用可以让桶初始化,IM server连接minio走内网地址访问 accessKeyID: user12345 secretAccessKey: key12345 @@ -111,18 +111,19 @@ credential: #腾讯cos,发送图片、视频、文件时需要,请自行申 rpcport: #rpc服务端口 默认即可 - openImUserPort: [ 10100 ] - openImFriendPort: [ 10200 ] - openImOfflineMessagePort: [ 10300 ] - openImOnlineRelayPort: [ 10400 ] - openImGroupPort: [ 10500 ] - openImAuthPort: [ 10600 ] - openImPushPort: [ 10700 ] - openImStatisticsPort: [ 10800 ] - openImMessageCmsPort: [ 10900 ] - openImAdminCmsPort: [ 11000 ] - openImOfficePort: [ 11100 ] - openImOrganizationPort: [ 11200 ] + openImUserPort: [ 10110 ] + openImFriendPort: [ 10120 ] + openImMessagePort: [ 10130 ] + openImMessageGatewayPort: [ 10140 ] + openImGroupPort: [ 10150 ] + openImAuthPort: [ 10160 ] + openImPushPort: [ 10170 ] + openImStatisticsPort: [ 10180 ] + openImMessageCmsPort: [ 10190 ] + openImAdminCmsPort: [ 10200 ] + openImOfficePort: [ 10210 ] + openImOrganizationPort: [ 10220 ] + openImConversationPort: [ 10230 ] c2c: callbackBeforeSendMsg: switch: false @@ -146,6 +147,8 @@ rpcregistername: #rpc注册服务名,默认即可 openImAdminCMSName: AdminCMS openImOfficeName: Office openImOrganizationName: Organization + openImConversationName: Conversation + openImCacheName: Cache log: storageLocation: ../logs/ @@ -164,7 +167,7 @@ modulename: #日志文件按模块命名,默认即可 pushName: push longconnsvr: - openImWsPort: [ 17778 ] # ws服务端口,默认即可,要开放此端口或做nginx转发 + openImWsPort: [ 10001 ] # ws服务端口,默认即可,要开放此端口或做nginx转发 websocketMaxConnNum: 10000 websocketMaxMsgLen: 4096 websocketTimeOut: 10 @@ -600,7 +603,7 @@ notification: conversationSetPrivate: conversation: - reliabilityLevel: 2 + reliabilityLevel: 3 unreadCount: true offlinePush: switch: true @@ -611,6 +614,19 @@ notification: openTips: "burn after reading was opened" closeTips: "burn after reading was closed" + ###################workMoments################ + workMomentsNotification: + conversation: + reliabilityLevel: 2 + unreadCount: true + offlinePush: + switch: true + title: "burn after reading" + desc: "burn after reading" + ext: "burn after reading" + defaultTips: + openTips: "burn after reading was opened" + closeTips: "burn after reading was closed" #---------------demo configuration---------------------# @@ -619,7 +635,7 @@ notification: demoswitch: true demo: #demo对外服务端口,默认即可,需要开放此端口或做nginx转发 - openImDemoPort: [ 42233 ] + openImDemoPort: [ 10004 ] alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改 accessKeyId: LTAI5tJPkn4HuuePdiLdGqe7 accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV diff --git a/docker-compose.yaml b/docker-compose.yaml index c67203773..be661eaef 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -94,7 +94,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.5 + image: openim/open_im_server:v2.0.8 container_name: open_im_server volumes: - ./logs:/Open-IM-Server/logs diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index abc909748..682ba4c30 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -93,6 +93,6 @@ func UserToken(c *gin.Context) { } resp := api.UserTokenResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}, UserToken: api.UserTokenInfo{UserID: req.FromUserID, Token: reply.Token, ExpiredTime: reply.ExpiredTime}} - log.NewInfo(req.OperationID, "UserRegister return ", resp) + log.NewInfo(req.OperationID, "UserToken return ", resp) c.JSON(http.StatusOK, resp) } diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go index 3d580864f..dcaa2b62e 100644 --- a/internal/api/conversation/conversation.go +++ b/internal/api/conversation/conversation.go @@ -5,6 +5,7 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbConversation "Open_IM/pkg/proto/conversation" pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" @@ -44,6 +45,37 @@ func SetConversation(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) c.JSON(http.StatusOK, resp) } +func ModifyConversationField(c *gin.Context) { + var ( + req api.ModifyConversationFieldReq + resp api.ModifyConversationFieldResp + reqPb pbConversation.ModifyConversationFieldReq + ) + if err := c.BindJSON(&req); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) + return + } + reqPb.Conversation = &pbConversation.Conversation{} + err := utils.CopyStructFields(&reqPb, req) + err = utils.CopyStructFields(reqPb.Conversation, req.Conversation) + if err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", reqPb.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + client := pbConversation.NewConversationClient(etcdConn) + respPb, err := client.ModifyConversationField(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()}) + return + } + resp.ErrMsg = respPb.CommonResp.ErrMsg + resp.ErrCode = respPb.CommonResp.ErrCode + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + c.JSON(http.StatusOK, resp) +} func BatchSetConversations(c *gin.Context) { var ( diff --git a/internal/api/office/work_moments.go b/internal/api/office/work_moments.go index e948992df..4b1f211d5 100644 --- a/internal/api/office/work_moments.go +++ b/internal/api/office/work_moments.go @@ -201,7 +201,7 @@ 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 = respPb.WorkMoment + resp.Data.WorkMoment = &apiStruct.WorkMoment{LikeUserList: []*apiStruct.WorkMomentUser{}, Comments: []*apiStruct.Comment{}, AtUserList: []*apiStruct.WorkMomentUser{}} if err := utils.CopyStructFields(&resp.Data.WorkMoment, respPb.WorkMoment); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } @@ -222,7 +222,7 @@ func GetUserWorkMoments(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + ok, opUserID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) if !ok { log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) @@ -233,7 +233,8 @@ func GetUserWorkMoments(c *gin.Context) { PageNumber: req.PageNumber, ShowNumber: req.ShowNumber, } - reqPb.UserID = userID + reqPb.OpUserID = opUserID + reqPb.UserID = req.UserID etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserWorkMoments(context.Background(), &reqPb) @@ -242,11 +243,49 @@ 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{} 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()) + //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{ + 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)), + } + for i, comment := range v.Comments { + workMoment.Comments[i] = &apiStruct.Comment{ + UserID: comment.UserID, + UserName: comment.UserName, + ReplyUserID: comment.ReplyUserID, + ReplyUserName: comment.ReplyUserID, + ContentID: comment.ContentID, + Content: comment.Content, + CreateTime: comment.CreateTime, + } + } + for i, likeUser := range v.LikeUserList { + workMoment.LikeUserList[i] = &apiStruct.WorkMomentUser{ + UserID: likeUser.UserID, + UserName: likeUser.UserName, + } + } + for i, atUser := range v.AtUserList { + workMoment.AtUserList[i] = &apiStruct.WorkMomentUser{ + UserID: atUser.UserID, + UserName: atUser.UserName, + } + } + resp.Data.WorkMoments = append(resp.Data.WorkMoments, &workMoment) } resp.Data.ShowNumber = respPb.Pagination.ShowNumber resp.Data.CurrentPage = respPb.Pagination.CurrentPage @@ -290,8 +329,46 @@ func GetUserFriendWorkMoments(c *gin.Context) { 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()) + //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{} + for _, v := range respPb.WorkMoments { + workMoment := apiStruct.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)), + } + for i, comment := range v.Comments { + workMoment.Comments[i] = &apiStruct.Comment{ + UserID: comment.UserID, + UserName: comment.UserName, + ReplyUserID: comment.ReplyUserID, + ReplyUserName: comment.ReplyUserID, + ContentID: comment.ContentID, + Content: comment.Content, + CreateTime: comment.CreateTime, + } + } + for i, likeUser := range v.LikeUserList { + workMoment.LikeUserList[i] = &apiStruct.WorkMomentUser{ + UserID: likeUser.UserID, + UserName: likeUser.UserName, + } + } + for i, atUser := range v.AtUserList { + workMoment.AtUserList[i] = &apiStruct.WorkMomentUser{ + UserID: atUser.UserID, + UserName: atUser.UserName, + } + } + resp.Data.WorkMoments = append(resp.Data.WorkMoments, &workMoment) } resp.Data.ShowNumber = respPb.Pagination.ShowNumber resp.Data.CurrentPage = respPb.Pagination.CurrentPage diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index b3d66b934..2c00965bf 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" ) @@ -58,10 +59,10 @@ func MinioInit() { } } // 自动化桶public的代码 - //err = minioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) - //if err != nil { - // log.NewError("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) - // return - //} + err = minioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, 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") } diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 93c800259..b7cb4c3df 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -8,6 +8,7 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" + "Open_IM/pkg/proto/cache" pbRelay "Open_IM/pkg/proto/relay" open_im_sdk "Open_IM/pkg/proto/sdk_ws" rpc "Open_IM/pkg/proto/user" @@ -64,34 +65,100 @@ func GetUsersInfo(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": http.StatusBadRequest, "errMsg": err.Error()}) return } - req := &rpc.GetUserInfoReq{} - utils.CopyStructFields(req, ¶ms) + getUserInfoReq := &rpc.GetUserInfoReq{} + getUserInfoReq.OperationID = params.OperationID var ok bool - ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + ok, getUserInfoReq.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), getUserInfoReq.OperationID) if !ok { - log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) + log.NewError(getUserInfoReq.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) return } - 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) - client := rpc.NewUserClient(etcdConn) - RpcResp, err := client.GetUserInfo(context.Background(), req) + log.NewInfo(params.OperationID, "GetUserInfo args ", getUserInfoReq.String()) + reqCacheGetUserInfo := &cache.GetUserInfoReq{} + utils.CopyStructFields(reqCacheGetUserInfo, ¶ms) + var userInfoList []*open_im_sdk.UserInfo + var publicUserInfoList []*open_im_sdk.PublicUserInfo + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + cacheClient := cache.NewCacheClient(etcdConn) + cacheResp, err := cacheClient.GetUserInfo(context.Background(), reqCacheGetUserInfo) if err != nil { - log.NewError(req.OperationID, "GetUserInfo failed ", err.Error(), req.String()) + log.NewError(getUserInfoReq.OperationID, utils.GetSelfFuncName(), "GetUserInfo failed", err.Error()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed: " + err.Error()}) + return + } + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(getUserInfoReq.OperationID, utils.GetSelfFuncName(), "GetUserInfo failed", cacheResp.CommonResp) + resp := api.GetUsersInfoResp{CommResp: api.CommResp{ErrCode: cacheResp.CommonResp.ErrCode, ErrMsg: cacheResp.CommonResp.ErrMsg}} + resp.Data = []map[string]interface{}{} + log.NewInfo(getUserInfoReq.OperationID, "GetUserInfo api return ", resp) + c.JSON(http.StatusOK, resp) + return + } + log.NewInfo(getUserInfoReq.OperationID, utils.GetSelfFuncName(), "cacheResp:", cacheResp.String()) + userInfoList = cacheResp.UserInfoList + var needCacheUserIDList []string + for _, userID := range reqCacheGetUserInfo.UserIDList { + isGetUserInfoFromCache := false + for _, cacheUser := range userInfoList { + if cacheUser.UserID == userID { + isGetUserInfoFromCache = true + } + } + if !isGetUserInfoFromCache { + needCacheUserIDList = append(needCacheUserIDList, userID) + } + } + if len(needCacheUserIDList) == 0 { + log.NewInfo(getUserInfoReq.OperationID, utils.GetSelfFuncName(), "get all userInfo from cache success") + for _, v := range userInfoList { + publicUserInfoList = append(publicUserInfoList, + &open_im_sdk.PublicUserInfo{UserID: v.UserID, Nickname: v.Nickname, FaceURL: v.FaceURL, Gender: v.Gender, Ex: v.Ex}) + } + resp := api.GetUsersInfoResp{CommResp: api.CommResp{ErrCode: cacheResp.CommonResp.ErrCode, ErrMsg: cacheResp.CommonResp.ErrMsg}, UserInfoList: publicUserInfoList} + resp.Data = jsonData.JsonDataList(resp.UserInfoList) + log.NewInfo(getUserInfoReq.OperationID, "GetUserInfo api return ", resp) + c.JSON(http.StatusOK, resp) + return + } + + log.NewDebug(getUserInfoReq.OperationID, utils.GetSelfFuncName(), "need cache user list", needCacheUserIDList) + getUserInfoReq.UserIDList = needCacheUserIDList + etcdConn = getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := rpc.NewUserClient(etcdConn) + rpcResp, err := client.GetUserInfo(context.Background(), getUserInfoReq) + if err != nil { + log.NewError(getUserInfoReq.OperationID, "GetUserInfo failed ", err.Error(), getUserInfoReq.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed" + err.Error()}) + return + } + if rpcResp.CommonResp.ErrCode != 0 { + log.NewError(getUserInfoReq.OperationID, utils.GetSelfFuncName(), "GetUserInfo failed", cacheResp.CommonResp) + resp := api.GetUsersInfoResp{CommResp: api.CommResp{ErrCode: cacheResp.CommonResp.ErrCode, ErrMsg: cacheResp.CommonResp.ErrMsg}} + resp.Data = []map[string]interface{}{} + log.NewInfo(getUserInfoReq.OperationID, "GetUserInfo api return ", resp) + c.JSON(http.StatusOK, resp) + return + } + userInfoList = append(userInfoList, rpcResp.UserInfoList...) + cacheUpdateUserInfoReq := &cache.UpdateUserInfoReq{ + UserInfoList: rpcResp.UserInfoList, + OperationID: getUserInfoReq.OperationID, + } + _, err = cacheClient.UpdateUserInfo(context.Background(), cacheUpdateUserInfoReq) + if err != nil { + log.NewError(getUserInfoReq.OperationID, "GetUserInfo failed ", err.Error()) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"}) return } - var publicUserInfoList []*open_im_sdk.PublicUserInfo - for _, v := range RpcResp.UserInfoList { + userInfoList = rpcResp.UserInfoList + for _, v := range userInfoList { publicUserInfoList = append(publicUserInfoList, &open_im_sdk.PublicUserInfo{UserID: v.UserID, Nickname: v.Nickname, FaceURL: v.FaceURL, Gender: v.Gender, Ex: v.Ex}) } - - resp := api.GetUsersInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, UserInfoList: publicUserInfoList} + resp := api.GetUsersInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, UserInfoList: publicUserInfoList} resp.Data = jsonData.JsonDataList(resp.UserInfoList) - log.NewInfo(req.OperationID, "GetUserInfo api return ", resp) + log.NewInfo(getUserInfoReq.OperationID, "GetUserInfo api return ", resp) c.JSON(http.StatusOK, resp) } @@ -114,18 +181,34 @@ func UpdateUserInfo(c *gin.Context) { return } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) - - 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) + etcdConnUser := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := rpc.NewUserClient(etcdConnUser) + rpcResp, err := client.UpdateUserInfo(context.Background(), req) if err != nil { log.NewError(req.OperationID, "UpdateUserInfo 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, "UpdateUserInfo api return ", resp) - c.JSON(http.StatusOK, resp) + if rpcResp.CommonResp.ErrCode != 0 { + log.NewError(req.OperationID, utils.GetSelfFuncName(), rpcResp.CommonResp.String()) + resp := api.UpdateUserInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}} + c.JSON(http.StatusOK, resp) + return + } else { + updateUserInfoReq := &cache.UpdateUserInfoReq{UserInfoList: []*open_im_sdk.UserInfo{req.UserInfo}} + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), updateUserInfoReq.String()) + etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + cacheClient := cache.NewCacheClient(etcdConnCache) + cacheResp, err := cacheClient.UpdateUserInfo(context.Background(), updateUserInfoReq) + if err != nil { + log.NewError(req.OperationID, "UpdateUserInfo cache failed ", err.Error(), req.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed: " + err.Error()}) + return + } + resp := api.UpdateUserInfoResp{CommResp: api.CommResp{ErrCode: cacheResp.CommonResp.ErrCode, ErrMsg: cacheResp.CommonResp.ErrMsg}} + log.NewInfo(req.OperationID, "UpdateUserInfo api return ", resp) + c.JSON(http.StatusOK, resp) + } } func GetSelfUserInfo(c *gin.Context) { @@ -157,16 +240,31 @@ func GetSelfUserInfo(c *gin.Context) { return } if len(RpcResp.UserInfoList) == 1 { - resp := api.GetSelfUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, UserInfo: RpcResp.UserInfoList[0]} - resp.Data = jsonData.JsonDataOne(resp.UserInfo) - log.NewInfo(req.OperationID, "GetUserInfo api return ", resp) - c.JSON(http.StatusOK, resp) + updateUserInfoReq := &cache.UpdateUserInfoReq{UserInfoList: []*open_im_sdk.UserInfo{RpcResp.UserInfoList[0]}} + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), updateUserInfoReq.String()) + etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + cacheClient := cache.NewCacheClient(etcdConnCache) + cacheClient.UpdateUserInfo(context.Background(), updateUserInfoReq) + //if err != nil { + // log.NewError(req.OperationID, "UpdateUserInfo cache failed ", err.Error(), req.String()) + // c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed: " + err.Error()}) + // return + //} + //if cacheResp.CommonResp.ErrCode != 0 { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), cacheResp.CommonResp.String()) + // resp := api.UpdateUserInfoResp{CommResp: api.CommResp{ErrCode: cacheResp.CommonResp.ErrCode, ErrMsg: cacheResp.CommonResp.ErrMsg}} + // c.JSON(http.StatusOK, resp) + // return + //} + //resp := api.GetSelfUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, UserInfo: RpcResp.UserInfoList[0]} + //resp.Data = jsonData.JsonDataOne(resp.UserInfo) + //log.NewInfo(req.OperationID, "GetUserInfo api return ", resp) + //c.JSON(http.StatusOK, resp) } else { resp := api.GetSelfUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}} log.NewInfo(req.OperationID, "GetUserInfo api return ", resp) c.JSON(http.StatusOK, resp) } - } func GetUsersOnlineStatus(c *gin.Context) { diff --git a/internal/cms_api/router.go b/internal/cms_api/router.go index 941cc5bf5..a0221d536 100644 --- a/internal/cms_api/router.go +++ b/internal/cms_api/router.go @@ -15,7 +15,7 @@ import ( func NewGinRouter() *gin.Engine { gin.SetMode(gin.ReleaseMode) baseRouter := gin.Default() - router := baseRouter.Group("/api") + router := baseRouter.Group("/cms") router.Use(middleware.CorsHandler()) adminRouterGroup := router.Group("/admin") { diff --git a/internal/demo/register/login.go b/internal/demo/register/login.go index e6de926dc..b5d587844 100644 --- a/internal/demo/register/login.go +++ b/internal/demo/register/login.go @@ -42,11 +42,11 @@ func Login(c *gin.Context) { return } if r.Password != params.Password { - log.NewError(params.OperationID, "password err", params.Password, account, r.Password, r.Account) + log.NewError(params.OperationID, "password err", params.Password, account, r.Password, r.Account) c.JSON(http.StatusOK, gin.H{"errCode": constant.PasswordErr, "errMsg": "password err"}) return } - url := fmt.Sprintf("http://%s:10000/auth/user_token", utils.ServerIP) + 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 diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 20326bbfc..a67b9cff4 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -2,8 +2,8 @@ package logic import ( "Open_IM/pkg/common/config" - "Open_IM/pkg/common/kafka" + "fmt" ) var ( @@ -20,6 +20,10 @@ func Init() { } func Run() { //register mysqlConsumerHandler to - go persistentCH.persistentConsumerGroup.RegisterHandleAndConsumer(&persistentCH) + if config.Config.ChatPersistenceMysql { + go persistentCH.persistentConsumerGroup.RegisterHandleAndConsumer(&persistentCH) + } else { + fmt.Println("not start mysql consumer") + } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) } diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index 0a815ca1a..5400d54d6 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -56,14 +56,10 @@ func (pc *PersistentConsumerHandler) handleChatWs2Mysql(msg []byte, msgKey strin } } if tag { - if config.Config.ChatPersistenceMysql == true { - log.NewInfo(msgFromMQ.OperationID, "msg_transfer msg persisting", string(msg)) - if err = im_mysql_msg_model.InsertMessageToChatLog(msgFromMQ); err != nil { - log.NewError(msgFromMQ.OperationID, "Message insert failed", "err", err.Error(), "msg", msgFromMQ.String()) - return - } - } else { - log.Debug(msgFromMQ.OperationID, "don't insert to db", string(msg)) + log.NewInfo(msgFromMQ.OperationID, "msg_transfer msg persisting", string(msg)) + if err = im_mysql_msg_model.InsertMessageToChatLog(msgFromMQ); err != nil { + log.NewError(msgFromMQ.OperationID, "Message insert failed", "err", err.Error(), "msg", msgFromMQ.String()) + return } } diff --git a/internal/rpc/cache/cache.go b/internal/rpc/cache/cache.go new file mode 100644 index 000000000..e172ed723 --- /dev/null +++ b/internal/rpc/cache/cache.go @@ -0,0 +1,103 @@ +package cache + +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" + pbCache "Open_IM/pkg/proto/cache" + commonPb "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "context" + "google.golang.org/grpc" + "net" + "strconv" + "strings" +) + +type cacheServer struct { + rpcPort int + rpcRegisterName string + etcdSchema string + etcdAddr []string +} + +func NewOfficeServer(port int) *cacheServer { + log.NewPrivateLog(constant.LogFileName) + return &cacheServer{ + rpcPort: port, + rpcRegisterName: config.Config.RpcRegisterName.OpenImOfficeName, + etcdSchema: config.Config.Etcd.EtcdSchema, + etcdAddr: config.Config.Etcd.EtcdAddr, + } +} + +func (s *cacheServer) Run() { + log.NewInfo("0", "cacheServer rpc start ") + ip := utils.ServerIP + registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + //listener network + listener, err := net.Listen("tcp", registerAddress) + if err != nil { + log.NewError("0", "Listen failed ", err.Error(), registerAddress) + return + } + log.NewInfo("0", "listen network success, ", registerAddress, listener) + defer listener.Close() + //grpc server + srv := grpc.NewServer() + defer srv.GracefulStop() + pbCache.RegisterCacheServer(srv, s) + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + if err != nil { + log.NewError("0", "RegisterEtcd failed ", err.Error()) + return + } + err = srv.Serve(listener) + if err != nil { + log.NewError("0", "Serve failed ", err.Error()) + return + } + log.NewInfo("0", "message cms rpc success") +} + +func (s *cacheServer) GetUserInfo(_ context.Context, req *pbCache.GetUserInfoReq) (resp *pbCache.GetUserInfoResp, err error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp = &pbCache.GetUserInfoResp{ + UserInfoList: []*commonPb.UserInfo{}, + CommonResp: &pbCache.CommonResp{}, + } + for _, userID := range req.UserIDList { + userInfo, err := db.DB.GetUserInfo(userID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "get userInfo from cache failed", err.Error()) + continue + } + resp.UserInfoList = append(resp.UserInfoList, userInfo) + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return resp, nil +} + +func (s *cacheServer) UpdateUserInfo(_ context.Context, req *pbCache.UpdateUserInfoReq) (resp *pbCache.UpdateUserInfoResp, err error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp = &pbCache.UpdateUserInfoResp{ + CommonResp: &pbCache.CommonResp{}, + } + for _, userInfo := range req.UserInfoList { + if err := db.DB.SetUserInfo(userInfo); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "set userInfo to cache failed", err.Error()) + return resp, nil + } + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return resp, nil +} + +func (s *cacheServer) UpdateAllUserToCache(_ context.Context, req *pbCache.UpdateAllUserToCacheReq) (resp *pbCache.UpdateAllUserToCacheResp, err error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp = &pbCache.UpdateAllUserToCacheResp{CommonResp: &pbCache.CommonResp{}} + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return resp, nil +} diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go new file mode 100644 index 000000000..7012e0924 --- /dev/null +++ b/internal/rpc/conversation/conversaion.go @@ -0,0 +1,167 @@ +package conversation + +import ( + chat "Open_IM/internal/rpc/msg" + "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" + pbConversation "Open_IM/pkg/proto/conversation" + "Open_IM/pkg/utils" + "context" + "net" + "strconv" + "strings" + + "Open_IM/pkg/common/config" + + "google.golang.org/grpc" +) + +type rpcConversation struct { + rpcPort int + rpcRegisterName string + etcdSchema string + etcdAddr []string +} + +func (rpc *rpcConversation) ModifyConversationField(c context.Context, req *pbConversation.ModifyConversationFieldReq) (*pbConversation.ModifyConversationFieldResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbConversation.ModifyConversationFieldResp{} + var err error + if req.Conversation.ConversationType == constant.GroupChatType { + groupInfo, err := imdb.GetGroupInfoByGroupID(req.Conversation.GroupID) + if err != nil { + log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", req.Conversation.GroupID, err.Error()) + resp.CommonResp = &pbConversation.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + if groupInfo.Status == constant.GroupStatusDismissed && !req.Conversation.IsNotInGroup { + errMsg := "group status is dismissed" + resp.CommonResp = &pbConversation.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg} + return resp, nil + } + } + var conversation db.Conversation + if err := utils.CopyStructFields(&conversation, req.Conversation); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", *req.Conversation, err.Error()) + } + haveUserID, _ := imdb.GetExistConversationUserIDList(req.UserIDList, req.Conversation.ConversationID) + switch req.FieldType { + case constant.FieldRecvMsgOpt: + for _, v := range req.UserIDList { + if err = db.DB.SetSingleConversationRecvMsgOpt(v, req.Conversation.ConversationID, req.Conversation.RecvMsgOpt); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "cache failed, rpc return", err.Error()) + resp.CommonResp = &pbConversation.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + } + err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt}) + case constant.FieldGroupAtType: + err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"group_at_type": conversation.GroupAtType}) + case constant.FieldIsNotInGroup: + err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"is_not_in_group": conversation.IsNotInGroup}) + case constant.FieldIsPinned: + err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"is_pinned": conversation.IsPinned}) + case constant.FieldIsPrivateChat: + err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"is_private_chat": conversation.IsPrivateChat}) + case constant.FieldEx: + err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"ex": conversation.Ex}) + case constant.FieldAttachedInfo: + err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"attached_info": conversation.AttachedInfo}) + } + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateColumnsConversations error", err.Error()) + resp.CommonResp = &pbConversation.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + for _, v := range utils.DifferenceString(haveUserID, req.UserIDList) { + conversation.OwnerUserID = v + err := imdb.SetOneConversation(conversation) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation error", err.Error()) + resp.CommonResp = &pbConversation.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + } + // notification + if req.Conversation.ConversationType == constant.SingleChatType && req.FieldType == constant.FieldIsPrivateChat { + //sync peer user conversation if conversation is singleChatType + if err := syncPeerUserConversation(req.Conversation, req.OperationID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "syncPeerUserConversation", err.Error()) + resp.CommonResp = &pbConversation.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + } else { + for _, v := range req.UserIDList { + chat.ConversationChangeNotification(req.OperationID, v) + } + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String()) + resp.CommonResp = &pbConversation.CommonResp{} + return resp, nil +} +func syncPeerUserConversation(conversation *pbConversation.Conversation, operationID string) error { + peerUserConversation := db.Conversation{ + OwnerUserID: conversation.UserID, + ConversationID: utils.GetConversationIDBySessionType(conversation.OwnerUserID, constant.SingleChatType), + ConversationType: constant.SingleChatType, + UserID: conversation.OwnerUserID, + GroupID: "", + RecvMsgOpt: 0, + UnreadCount: 0, + DraftTextTime: 0, + IsPinned: false, + IsPrivateChat: conversation.IsPrivateChat, + AttachedInfo: "", + Ex: "", + } + err := imdb.PeerUserSetConversation(peerUserConversation) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "SetConversation error", err.Error()) + return err + } + chat.ConversationSetPrivateNotification(operationID, conversation.OwnerUserID, conversation.UserID, conversation.IsPrivateChat) + return nil +} +func NewRpcConversationServer(port int) *rpcConversation { + log.NewPrivateLog(constant.LogFileName) + return &rpcConversation{ + rpcPort: port, + rpcRegisterName: config.Config.RpcRegisterName.OpenImConversationName, + etcdSchema: config.Config.Etcd.EtcdSchema, + etcdAddr: config.Config.Etcd.EtcdAddr, + } +} + +func (rpc *rpcConversation) Run() { + log.NewInfo("0", "rpc conversation start...") + + address := utils.ServerIP + ":" + strconv.Itoa(rpc.rpcPort) + listener, err := net.Listen("tcp", address) + if err != nil { + log.NewError("0", "listen network failed ", err.Error(), address) + return + } + log.NewInfo("0", "listen network success, ", address, listener) + //grpc server + srv := grpc.NewServer() + defer srv.GracefulStop() + + //service registers with etcd + pbConversation.RegisterConversationServer(srv, rpc) + err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName, 10) + if err != nil { + log.NewError("0", "RegisterEtcd failed ", err.Error(), + rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) + return + } + log.NewInfo("0", "RegisterConversationServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) + err = srv.Serve(listener) + if err != nil { + log.NewError("0", "Serve failed ", err.Error()) + return + } + log.NewInfo("0", "rpc conversation ok") +} diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index e71647d55..4704fa191 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -13,6 +13,7 @@ import ( "Open_IM/pkg/grpc-etcdv3/getcdv3" pbGroup "Open_IM/pkg/proto/group" open_im_sdk "Open_IM/pkg/proto/sdk_ws" + pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" "net" @@ -258,7 +259,53 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite } 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) + } + } chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) resp.ErrCode = 0 log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp.String()) @@ -378,9 +425,28 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou okUserIDList = append(okUserIDList, v) } - err = db.DB.DelGroupMember(req.GroupID, 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, "DelGroupMember failed ", err.Error(), req.GroupID, v) + 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) } } chat.MemberKickedNotification(req, okUserIDList) @@ -501,6 +567,38 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), member) return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } + var reqPb pbUser.SetConversationReq + reqPb.OperationID = req.OperationID + var c pbUser.Conversation + conversation, err := imdb.GetConversation(req.FromUserID, utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType)) + if err != nil { + c.OwnerUserID = req.FromUserID + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = false + } else { + c.OwnerUserID = conversation.OwnerUserID + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.RecvMsgOpt = conversation.RecvMsgOpt + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsPinned = conversation.IsPinned + c.AttachedInfo = conversation.AttachedInfo + c.IsPrivateChat = conversation.IsPrivateChat + c.GroupAtType = conversation.GroupAtType + c.IsNotInGroup = false + c.Ex = conversation.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()) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String()) + } chat.GroupApplicationAcceptedNotification(req) chat.MemberEnterNotification(req) } else if req.HandleResult == constant.GroupResponseRefuse { @@ -556,7 +654,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) } func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) (*pbGroup.QuitGroupResp, error) { - log.NewError(req.OperationID, "QuitGroup args ", req.String()) + log.NewInfo(req.OperationID, "QuitGroup args ", req.String()) _, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.OpUserID) if err != nil { log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), req.GroupID, req.OpUserID) @@ -574,7 +672,24 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) 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) + 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()) + } chat.MemberQuitNotification(req) 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 @@ -896,6 +1011,25 @@ func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.Remo OperationID: req.OperationID, OpUserID: req.OpUserId, } + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + for _, v := range resp.Success { + 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) + } + } chat.MemberKickedNotification(reqKick, resp.Success) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "success: ", resp.Success) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "failed: ", resp.Failed) @@ -987,14 +1121,38 @@ 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) + if err != nil { + 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) + } + } 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/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 74d0e6ac7..f87278dc5 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -7,6 +7,7 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" + pbConversation "Open_IM/pkg/proto/conversation" rpc "Open_IM/pkg/proto/friend" pbGroup "Open_IM/pkg/proto/group" sdk_ws "Open_IM/pkg/proto/sdk_ws" @@ -227,6 +228,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.Error(pb.Token, pb.OperationID, "rpc send_msg getGroupInfo failed, err = %s", reply.ErrMsg) return returnMsg(&replay, pb, reply.ErrCode, reply.ErrMsg, "", 0) } + memberUserIDList := func(all []*sdk_ws.GroupMemberFullInfo) (result []string) { + for _, v := range all { + result = append(result, v.UserID) + } + return result + }(reply.MemberList) var addUidList []string switch pb.MsgData.ContentType { case constant.MemberKickedNotification: @@ -246,17 +253,67 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S } case constant.MemberQuitNotification: addUidList = append(addUidList, pb.MsgData.SendID) + case constant.AtText: + go func() { + var conversationReq pbConversation.ModifyConversationFieldReq + var tag bool + var atUserID []string + conversation := pbConversation.Conversation{ + OwnerUserID: pb.MsgData.SendID, + ConversationID: utils.GetConversationIDBySessionType(pb.MsgData.GroupID, constant.GroupChatType), + ConversationType: constant.GroupChatType, + GroupID: pb.MsgData.GroupID, + } + conversationReq.Conversation = &conversation + conversationReq.OperationID = pb.OperationID + conversationReq.FieldType = constant.FieldGroupAtType + tagAll := utils.IsContain(constant.AtAllString, pb.MsgData.AtUserIDList) + if tagAll { + atUserID = utils.DifferenceString([]string{constant.AtAllString}, pb.MsgData.AtUserIDList) + if len(atUserID) == 0 { //just @everyone + conversationReq.UserIDList = memberUserIDList + conversation.GroupAtType = constant.AtAll + } else { //@Everyone and @other people + conversationReq.UserIDList = atUserID + conversation.GroupAtType = constant.AtAllAtMe + tag = true + } + } else { + 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) + client := pbConversation.NewConversationClient(etcdConn) + conversationReply, err := client.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()) + } + 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) + client := pbConversation.NewConversationClient(etcdConn) + conversationReply, err := client.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()) + } + } + }() default: } groupID := pb.MsgData.GroupID - for _, v := range reply.MemberList { - pb.MsgData.RecvID = v.UserID - isSend := modifyMessageByUserMessageReceiveOpt(v.UserID, groupID, constant.GroupChatType, pb) + for _, v := range memberUserIDList { + pb.MsgData.RecvID = v + isSend := modifyMessageByUserMessageReceiveOpt(v, groupID, constant.GroupChatType, pb) if isSend { msgToMQ.MsgData = pb.MsgData - err := rpc.sendMsgToKafka(&msgToMQ, v.UserID) + err := rpc.sendMsgToKafka(&msgToMQ, v) if err != nil { - log.NewError(msgToMQ.OperationID, "kafka send msg err:UserId", v.UserID, msgToMQ.String()) + log.NewError(msgToMQ.OperationID, "kafka send msg err:UserId", v, msgToMQ.String()) return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) } } @@ -579,6 +636,21 @@ func Notification(n *NotificationMsg) { reliabilityLevel = config.Config.Notification.OrganizationChanged.Conversation.ReliabilityLevel unReadCount = config.Config.Notification.OrganizationChanged.Conversation.UnreadCount + case constant.WorkMomentNotification: + pushSwitch = config.Config.Notification.WorkMomentsNotification.OfflinePush.PushSwitch + title = config.Config.Notification.WorkMomentsNotification.OfflinePush.Title + desc = config.Config.Notification.WorkMomentsNotification.OfflinePush.Desc + ex = config.Config.Notification.WorkMomentsNotification.OfflinePush.Ext + reliabilityLevel = config.Config.Notification.WorkMomentsNotification.Conversation.ReliabilityLevel + unReadCount = config.Config.Notification.WorkMomentsNotification.Conversation.UnreadCount + + case constant.ConversationPrivateChatNotification: + pushSwitch = config.Config.Notification.ConversationSetPrivate.OfflinePush.PushSwitch + title = config.Config.Notification.ConversationSetPrivate.OfflinePush.Title + desc = config.Config.Notification.ConversationSetPrivate.OfflinePush.Desc + ex = config.Config.Notification.ConversationSetPrivate.OfflinePush.Ext + reliabilityLevel = config.Config.Notification.ConversationSetPrivate.Conversation.ReliabilityLevel + unReadCount = config.Config.Notification.ConversationSetPrivate.Conversation.UnreadCount } switch reliabilityLevel { case constant.UnreliableNotification: diff --git a/internal/rpc/msg/work_moments_notification.go b/internal/rpc/msg/work_moments_notification.go index 7c33f7bb3..af333a354 100644 --- a/internal/rpc/msg/work_moments_notification.go +++ b/internal/rpc/msg/work_moments_notification.go @@ -4,28 +4,42 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" pbOffice "Open_IM/pkg/proto/office" + sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" + "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" ) func WorkMomentSendNotification(operationID, sendID, recvID string, notificationMsg *pbOffice.WorkMomentNotificationMsg) { - log.NewInfo(operationID, utils.GetSelfFuncName(), recvID) - bytes, err := proto.Marshal(notificationMsg) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "proto marshal failed", err.Error()) - } - WorkMomentNotification(operationID, sendID, recvID, bytes) + log.NewInfo(operationID, utils.GetSelfFuncName(), sendID, recvID, notificationMsg) + //if sendID == recvID { + // return + //} + WorkMomentNotification(operationID, sendID, recvID, notificationMsg) } -func WorkMomentNotification(operationID, sendID, recvID string, content []byte) { +func WorkMomentNotification(operationID, sendID, recvID string, m proto.Message) { + 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, - Content: content, MsgFrom: constant.UserMsgType, ContentType: constant.WorkMomentNotification, - SessionType: constant.UserMsgType, + 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/internal/rpc/office/office.go b/internal/rpc/office/office.go index 734c6a92e..4862e4d07 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -280,23 +280,12 @@ func (s *officeServer) CreateOneWorkMoment(_ context.Context, req *pbOffice.Crea resp.CommonResp = &pbOffice.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} return resp, nil } - workMoment.UserName = createUser.Nickname - workMoment.FaceURL = createUser.FaceURL if err := utils.CopyStructFields(&workMoment, req.WorkMoment); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - workMoment.PermissionUserIDList = s.getPermissionUserIDList(req.OperationID, req.WorkMoment.PermissionGroupIDList, req.WorkMoment.PermissionUserIDList) - for _, userID := range req.WorkMoment.AtUserIDList { - userName, err := imdb.GetUserNameByUserID(userID) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserNameByUserID failed", userID, err.Error()) - continue - } - workMoment.AtUserList = append(workMoment.AtUserList, &db.AtUser{ - UserID: userID, - UserName: userName, - }) - } + workMoment.UserName = createUser.Nickname + workMoment.FaceURL = createUser.FaceURL + workMoment.PermissionUserIDList = s.getPermissionUserIDList(req.OperationID, req.WorkMoment.PermissionGroupList, req.WorkMoment.PermissionUserList) log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "workMoment to create", workMoment) err = db.DB.CreateOneWorkMoment(&workMoment) if err != nil { @@ -306,7 +295,7 @@ func (s *officeServer) CreateOneWorkMoment(_ context.Context, req *pbOffice.Crea } // send notification to at users - for _, atUser := range req.WorkMoment.AtUserIDList { + for _, atUser := range req.WorkMoment.AtUserList { workMomentNotificationMsg := &pbOffice.WorkMomentNotificationMsg{ NotificationMsgType: constant.WorkMomentAtUserNotification, WorkMomentID: workMoment.WorkMomentID, @@ -314,24 +303,29 @@ func (s *officeServer) CreateOneWorkMoment(_ context.Context, req *pbOffice.Crea UserID: workMoment.UserID, FaceURL: createUser.FaceURL, UserName: createUser.Nickname, + CreateTime: workMoment.CreateTime, } - msg.WorkMomentSendNotification(req.OperationID, workMoment.UserID, atUser, workMomentNotificationMsg) + msg.WorkMomentSendNotification(req.OperationID, workMoment.UserID, atUser.UserID, workMomentNotificationMsg) } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } // count and distinct permission users -func (s *officeServer) getPermissionUserIDList(operationID string, groupIDList, userIDList []string) []string { +func (s *officeServer) getPermissionUserIDList(operationID string, groupList []*pbOffice.PermissionGroup, userList []*pbOffice.WorkMomentUser) []string { var permissionUserIDList []string - for _, groupID := range groupIDList { - GroupMemberIDList, err := imdb.GetGroupMemberIDListByGroupID(groupID) + for _, group := range groupList { + GroupMemberIDList, err := imdb.GetGroupMemberIDListByGroupID(group.GroupID) if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "GetGroupMemberIDListByGroupID failed", groupID, err.Error()) + log.NewError(operationID, utils.GetSelfFuncName(), "GetGroupMemberIDListByGroupID failed", group, err.Error()) continue } permissionUserIDList = append(permissionUserIDList, GroupMemberIDList...) } + var userIDList []string + for _, user := range userList { + userIDList = append(userIDList, user.UserID) + } permissionUserIDList = append(permissionUserIDList, userIDList...) permissionUserIDList = utils.RemoveRepeatedStringInList(permissionUserIDList) return permissionUserIDList @@ -382,13 +376,13 @@ func isUserCanSeeWorkMoment(userID string, workMoment db.WorkMoment) bool { func (s *officeServer) LikeOneWorkMoment(_ context.Context, req *pbOffice.LikeOneWorkMomentReq) (resp *pbOffice.LikeOneWorkMomentResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) resp = &pbOffice.LikeOneWorkMomentResp{CommonResp: &pbOffice.CommonResp{}} - userName, err := imdb.GetUserNameByUserID(req.UserID) + user, err := imdb.GetUserByUserID(req.UserID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserNameByUserID failed", err.Error()) resp.CommonResp = &pbOffice.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} return resp, nil } - workMoment, err := db.DB.LikeOneWorkMoment(req.UserID, userName, req.WorkMomentID) + workMoment, like, err := db.DB.LikeOneWorkMoment(req.UserID, user.Nickname, req.WorkMomentID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "LikeOneWorkMoment failed ", err.Error()) resp.CommonResp = &pbOffice.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} @@ -398,10 +392,15 @@ func (s *officeServer) LikeOneWorkMoment(_ context.Context, req *pbOffice.LikeOn NotificationMsgType: constant.WorkMomentLikeNotification, WorkMomentID: workMoment.WorkMomentID, WorkMomentContent: workMoment.Content, - UserID: workMoment.UserID, + UserID: user.UserID, + FaceURL: user.FaceURL, + UserName: user.Nickname, + CreateTime: int32(time.Now().Unix()), } // send notification - msg.WorkMomentSendNotification(req.OperationID, req.UserID, workMoment.UserID, workMomentNotificationMsg) + if like { + msg.WorkMomentSendNotification(req.OperationID, req.UserID, workMoment.UserID, workMomentNotificationMsg) + } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } @@ -443,16 +442,13 @@ func (s *officeServer) CommentOneWorkMoment(_ context.Context, req *pbOffice.Com WorkMomentID: workMoment.WorkMomentID, WorkMomentContent: workMoment.Content, UserID: workMoment.UserID, - Comment: &pbOffice.Comment{ - UserID: comment.UserID, - UserName: comment.UserName, - FaceURL: commentUser.FaceURL, - ReplyUserID: comment.ReplyUserID, - ReplyUserName: comment.ReplyUserName, - ContentID: comment.ContentID, - Content: comment.Content, - CreateTime: comment.CreateTime, - }, + FaceURL: workMoment.FaceURL, + UserName: workMoment.UserName, + ReplyUserID: comment.ReplyUserID, + ReplyUserName: comment.ReplyUserName, + ContentID: comment.ContentID, + Content: comment.Content, + CreateTime: comment.CreateTime, } msg.WorkMomentSendNotification(req.OperationID, req.UserID, workMoment.UserID, workMomentNotificationMsg) if req.ReplyUserID != "" { @@ -489,17 +485,21 @@ func (s *officeServer) GetWorkMomentByID(_ context.Context, req *pbOffice.GetWor func (s *officeServer) GetUserWorkMoments(_ context.Context, req *pbOffice.GetUserWorkMomentsReq) (resp *pbOffice.GetUserWorkMomentsResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) resp = &pbOffice.GetUserWorkMomentsResp{CommonResp: &pbOffice.CommonResp{}, WorkMoments: []*pbOffice.WorkMoment{}} - //resp.WorkMoments = make([]*pbOffice.WorkMoment, 0) - workMoments, err := db.DB.GetUserWorkMoments(req.UserID, req.Pagination.ShowNumber, req.Pagination.PageNumber) + resp.Pagination = &pbCommon.ResponsePagination{CurrentPage: req.Pagination.PageNumber, ShowNumber: req.Pagination.ShowNumber} + var workMoments []db.WorkMoment + if req.UserID == req.OpUserID { + workMoments, err = db.DB.GetUserSelfWorkMoments(req.UserID, req.Pagination.ShowNumber, req.Pagination.PageNumber) + } else { + workMoments, err = db.DB.GetUserWorkMoments(req.OpUserID, req.UserID, req.Pagination.ShowNumber, req.Pagination.PageNumber) + } if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserWorkMoments failed", err.Error()) resp.CommonResp = &pbOffice.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} return resp, nil } if err := utils.CopyStructFields(&resp.WorkMoments, workMoments); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - resp.Pagination = &pbCommon.ResponsePagination{CurrentPage: req.Pagination.PageNumber, ShowNumber: req.Pagination.ShowNumber} log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } @@ -507,14 +507,16 @@ func (s *officeServer) GetUserWorkMoments(_ context.Context, req *pbOffice.GetUs func (s *officeServer) GetUserFriendWorkMoments(_ context.Context, req *pbOffice.GetUserFriendWorkMomentsReq) (resp *pbOffice.GetUserFriendWorkMomentsResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) resp = &pbOffice.GetUserFriendWorkMomentsResp{CommonResp: &pbOffice.CommonResp{}, WorkMoments: []*pbOffice.WorkMoment{}} - //resp.WorkMoments = make([]*pbOffice.WorkMoment, 0) + resp.Pagination = &pbCommon.ResponsePagination{CurrentPage: req.Pagination.PageNumber, ShowNumber: req.Pagination.ShowNumber} friendIDList, err := imdb.GetFriendIDListByUserID(req.UserID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetFriendIDListByUserID", err.Error()) resp.CommonResp = &pbOffice.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} return resp, nil } - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "friendIDList: ", friendIDList) + for _, friendID := range friendIDList { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), friendID) + } workMoments, err := db.DB.GetUserFriendWorkMoments(friendIDList, req.Pagination.ShowNumber, req.Pagination.PageNumber, req.UserID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserFriendWorkMoments", err.Error()) @@ -524,7 +526,6 @@ 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()) } - resp.Pagination = &pbCommon.ResponsePagination{CurrentPage: req.Pagination.PageNumber, ShowNumber: req.Pagination.ShowNumber} log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 6aaea1d78..23423bcd4 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -75,7 +75,7 @@ func (s *userServer) Run() { func syncPeerUserConversation(conversation *pbUser.Conversation, operationID string) error { peerUserConversation := db.Conversation{ OwnerUserID: conversation.UserID, - ConversationID: "single_" + conversation.OwnerUserID, + ConversationID: utils.GetConversationIDBySessionType(conversation.OwnerUserID, constant.SingleChatType), ConversationType: constant.SingleChatType, UserID: conversation.OwnerUserID, GroupID: "", @@ -129,6 +129,7 @@ func (s *userServer) BatchSetConversations(ctx context.Context, req *pbUser.Batc if err := utils.CopyStructFields(&conversation, v); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), v.String(), "CopyStructFields failed", err.Error()) } + //redis op if err := db.DB.SetSingleConversationRecvMsgOpt(req.OwnerUserID, v.ConversationID, v.RecvMsgOpt); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "cache failed, rpc return", err.Error()) resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} @@ -217,7 +218,7 @@ func (s *userServer) SetConversation(ctx context.Context, req *pbUser.SetConvers resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} return resp, nil } - if groupInfo.Status == constant.GroupStatusDismissed { + if groupInfo.Status == constant.GroupStatusDismissed && !req.Conversation.IsNotInGroup { errMsg := "group status is dismissed" resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg} return resp, nil diff --git a/pkg/base_info/conversation_api_struct.go b/pkg/base_info/conversation_api_struct.go index 10b46f547..30890f7eb 100644 --- a/pkg/base_info/conversation_api_struct.go +++ b/pkg/base_info/conversation_api_struct.go @@ -43,6 +43,8 @@ type Conversation struct { DraftTextTime int64 `json:"draftTextTime"` IsPinned bool `json:"isPinned" binding:"omitempty"` IsPrivateChat bool `json:"isPrivateChat"` + GroupAtType int32 `json:"groupAtType"` + IsNotInGroup bool `json:"isNotInGroup"` AttachedInfo string `json:"attachedInfo"` Ex string `json:"ex"` } @@ -56,6 +58,15 @@ type SetConversationReq struct { type SetConversationResp struct { CommResp } +type ModifyConversationFieldReq struct { + Conversation + FieldType int32 `json:"fieldType" binding:"required"` + UserIDList []string `json:"userIDList" binding:"required"` + OperationID string `json:"operationID" binding:"required"` +} +type ModifyConversationFieldResp struct { + CommResp +} type BatchSetConversationsReq struct { Conversations []Conversation `json:"conversations" binding:"required"` diff --git a/pkg/base_info/work_moments_struct.go b/pkg/base_info/work_moments_struct.go index d39f3f981..d27493261 100644 --- a/pkg/base_info/work_moments_struct.go +++ b/pkg/base_info/work_moments_struct.go @@ -45,19 +45,18 @@ type GetWorkMomentByIDReq struct { } type WorkMoment struct { - WorkMomentID string `json:"workMomentID"` - UserID string `json:"userID"` - Content string `json:"content"` - LikeUsers []*LikeUser `json:"likeUsers"` - Comments []*Comment `json:"comments"` - Permission int32 `json:"permission"` - PermissionUserIDList []string `json:"permissionUserIDList"` - PermissionGroupIDList []string `json:"permissionGroupIDList"` - AtUserIDList []string `json:"atUserIDList"` - CreateTime int32 `json:"createTime,omitempty"` + WorkMomentID string `json:"workMomentID"` + UserID string `json:"userID"` + Content string `json:"content"` + LikeUserList []*WorkMomentUser `json:"likeUsers"` + Comments []*Comment `json:"comments"` + FaceURL string `json:"faceURL"` + UserName string `json:"userName"` + AtUserList []*WorkMomentUser `json:"atUsers"` + CreateTime int32 `json:"createTime"` } -type LikeUser struct { +type WorkMomentUser struct { UserID string `json:"userID"` UserName string `json:"userName"` } @@ -81,6 +80,7 @@ type GetWorkMomentByIDResp struct { type GetUserWorkMomentsReq struct { WorkMomentsUserCommonReq + UserID string `json:"userID"` } type GetUserWorkMomentsResp struct { diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 926ada32e..bd4998335 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -118,6 +118,8 @@ type config struct { OpenImAdminCMSName string `yaml:"openImAdminCMSName"` OpenImOfficeName string `yaml:"openImOfficeName"` OpenImOrganizationName string `yaml:"openImOrganizationName"` + OpenImConversationName string `yaml:"openImConversationName"` + OpenImCacheName string `yaml:"openImCacheName"` } Etcd struct { EtcdSchema string `yaml:"etcdSchema"` @@ -382,6 +384,11 @@ type config struct { CloseTips string `yaml:"closeTips"` } `yaml:"defaultTips"` } `yaml:"conversationSetPrivate"` + WorkMomentsNotification struct { + Conversation PConversation `yaml:"conversation"` + OfflinePush POfflinePush `yaml:"offlinePush"` + DefaultTips PDefaultTips `yaml:"defaultTips"` + } `yaml:"workMomentsNotification"` } Demo struct { Port []int `yaml:"openImDemoPort"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 9e2046b15..2e624dd5e 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -195,6 +195,13 @@ const ( WorkMomentLikeNotification = 1 WorkMomentAtUserNotification = 2 ) +const ( + AtAllString = "AtAllTag" + AtNormal = 0 + AtMe = 1 + AtAll = 2 + AtAllAtMe = 3 +) var ContentType2PushContent = map[int64]string{ Picture: "[图片]", @@ -207,6 +214,16 @@ var ContentType2PushContent = map[int64]string{ Common: "你收到一条新消息", } +const ( + FieldRecvMsgOpt = 1 + FieldIsPinned = 2 + FieldAttachedInfo = 3 + FieldIsPrivateChat = 4 + FieldGroupAtType = 5 + FieldIsNotInGroup = 6 + FieldEx = 7 +) + const ( AppOrdinaryUsers = 1 AppAdmin = 2 diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 3ffce9ddf..2fe0ed367 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -73,7 +73,7 @@ func init() { cCommentMsgModels := []mongo.IndexModel{ { - Keys: bson.M{"create_time": -1, "user_id": -1}, + Keys: bson.A{bson.D{{"create_time", -1}, {"user_id", -1}}}, }, } result, err := dataBase.Collection(cCommentMsg).Indexes().CreateMany(context.Background(), cCommentMsgModels, opts) diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 9591050e0..9e50a8fc6 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -215,6 +215,8 @@ type Conversation struct { DraftTextTime int64 `gorm:"column:draft_text_time" json:"draftTextTime"` IsPinned bool `gorm:"column:is_pinned" json:"isPinned"` IsPrivateChat bool `gorm:"column:is_private_chat" json:"isPrivateChat"` + GroupAtType int32 `gorm:"column:group_at_type" json:"groupAtType"` + IsNotInGroup bool `gorm:"column:is_not_in_group" json:"isNotInGroup"` AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"` Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"` } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 20bf470f2..408e50802 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -16,7 +16,7 @@ import ( //"github.com/garyburd/redigo/redis" "github.com/golang/protobuf/proto" - "gopkg.in/mgo.v2/bson" + "go.mongodb.org/mongo-driver/bson" "strconv" "time" @@ -575,7 +575,7 @@ type WorkMoment struct { AtUserList []*AtUser `bson:"at_user_list"` Comments []*Comment `bson:"comments"` PermissionUserIDList []string `bson:"permission_user_id_list"` - Permission int32 `bson:"is_private"` + Permission int32 `bson:"permission"` CreateTime int32 `bson:"create_time"` } @@ -624,10 +624,10 @@ func (d *DataBases) GetWorkMomentByID(workMomentID string) (*WorkMoment, error) return workMoment, err } -func (d *DataBases) LikeOneWorkMoment(likeUserID, userName, workMomentID string) (*WorkMoment, error) { +func (d *DataBases) LikeOneWorkMoment(likeUserID, userName, workMomentID string) (*WorkMoment, bool, error) { workMoment, err := d.GetWorkMomentByID(workMomentID) if err != nil { - return nil, err + return nil, false, err } var isAlreadyLike bool for i, user := range workMoment.LikeUserList { @@ -642,8 +642,8 @@ func (d *DataBases) LikeOneWorkMoment(likeUserID, userName, workMomentID string) log.NewDebug("", utils.GetSelfFuncName(), workMoment) ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cWorkMoment) - _, err = c.UpdateOne(ctx, bson.M{"work_moment_id": workMomentID}, bson.M{"$set": bson.M{"like_users": workMoment.LikeUserList}}) - return workMoment, err + _, err = c.UpdateOne(ctx, bson.M{"work_moment_id": workMomentID}, bson.M{"$set": bson.M{"like_user_list": workMoment.LikeUserList}}) + return workMoment, !isAlreadyLike, err } func (d *DataBases) SetUserWorkMomentsLevel(userID string, level int32) error { @@ -659,7 +659,7 @@ func (d *DataBases) CommentOneWorkMoment(comment *Comment, workMomentID string) return workMoment, err } -func (d *DataBases) GetUserWorkMoments(userID string, showNumber, pageNumber int32) ([]WorkMoment, error) { +func (d *DataBases) GetUserSelfWorkMoments(userID string, showNumber, pageNumber int32) ([]WorkMoment, error) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cWorkMoment) var workMomentList []WorkMoment @@ -672,66 +672,45 @@ func (d *DataBases) GetUserWorkMoments(userID string, showNumber, pageNumber int return workMomentList, err } -// recursion -func (d *DataBases) GetUserFriendWorkMomentsRecursion(friendIDList []string, showNumber, pageNumber int32, userID string) ([]WorkMoment, error) { +func (d *DataBases) GetUserWorkMoments(opUserID, userID string, showNumber, pageNumber int32) ([]WorkMoment, error) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cWorkMoment) var workMomentList []WorkMoment findOpts := options.Find().SetLimit(int64(showNumber)).SetSkip(int64(showNumber) * (int64(pageNumber) - 1)).SetSort(bson.M{"create_time": -1}) - result, err := c.Find(ctx, bson.M{"user_id": friendIDList, "is_private": false, "who_can_see_user_id_list": bson.M{"$elemMatch": bson.M{"$eq": userID}}, "who_cant_see_user_id_list": ""}, findOpts) + result, err := c.Find(ctx, bson.D{ // 等价条件: select * from + {"user_id", userID}, + {"$or", bson.A{ + bson.D{{"permission", constant.WorkMomentPermissionCantSee}, {"permission_user_id_list", bson.D{{"$nin", bson.A{userID}}}}}, + bson.D{{"permission", constant.WorkMomentPermissionCanSee}, {"permission_user_id_list", bson.D{{"$in", bson.A{userID}}}}}, + bson.D{{"permission", constant.WorkMomentPublic}}, + }}, + }, findOpts) if err != nil { return workMomentList, nil } err = result.All(ctx, &workMomentList) - //if len(workMomentList) == 0 { - // return workMomentList, nil - //} - //for i, workMoment := range workMomentList { - // if workMoment.IsPrivate { - // workMomentList = append(workMomentList[0:i], workMomentList[i+1:]...) - // continue - // } - // - // var isContain bool - // for _, WhoCanSeeUserID := range workMoment.WhoCanSeeUserIDList { - // if WhoCanSeeUserID == userID { - // isContain = true - // break - // } - // } - // if !isContain { - // workMomentList = append(workMomentList[0:i], workMomentList[i+1:]...) - // continue - // } - // - // for _, whoCantSeeUserID := range workMoment.WhoCantSeeUserIDList { - // if whoCantSeeUserID == userID { - // workMomentList = append(workMomentList[0:i], workMomentList[i+1:]...) - // break - // } - // } - //} - // - //if len(workMomentList) < int(pageNumber) { - // workMomentListWorkMomentList, err := d.GetUserFriendWorkMomentsRecursion(friendIDList, showNumber, pageNumber, userID) - // workMomentList = append(workMomentList, workMomentListWorkMomentList...) - // if err != nil { - // return workMomentList, err - // } - //} return workMomentList, err } -func (d *DataBases) GetUserFriendWorkMoments(friendIDList []*string, showNumber, pageNumber int32, userID string) ([]WorkMoment, error) { +func (d *DataBases) GetUserFriendWorkMoments(friendIDList []string, showNumber, pageNumber int32, userID string) ([]WorkMoment, error) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cWorkMoment) var workMomentList []WorkMoment findOpts := options.Find().SetLimit(int64(showNumber)).SetSkip(int64(showNumber) * (int64(pageNumber) - 1)).SetSort(bson.M{"create_time": -1}) - result, err := c.Find(ctx, bson.M{"user_id": friendIDList, "is_private": false, "$or": bson.M{"who_can_see_user_id_list": bson.M{"$elemMatch": bson.M{"$eq": userID}}, - "who_cant_see_user_id_list": bson.M{"$nin": userID}}, + result, err := c.Find(ctx, bson.D{ + {"$or", bson.A{ + bson.D{{"user_id", userID}}, //self + bson.D{{"user_id", bson.D{{"$in", friendIDList}}}, + {"$or", bson.A{ + bson.D{{"permission", constant.WorkMomentPermissionCantSee}, {"permission_user_id_list", bson.D{{"$nin", bson.A{userID}}}}}, + bson.D{{"permission", constant.WorkMomentPermissionCanSee}, {"permission_user_id_list", bson.D{{"$in", bson.A{userID}}}}}, + bson.D{{"permission", constant.WorkMomentPublic}}, + }}}, + }, + }, }, findOpts) if err != nil { - return workMomentList, nil + return workMomentList, err } err = result.All(ctx, &workMomentList) return workMomentList, err diff --git a/pkg/common/db/mysql_model/im_mysql_model/conversation_model.go b/pkg/common/db/mysql_model/im_mysql_model/conversation_model.go new file mode 100644 index 000000000..0af86c57d --- /dev/null +++ b/pkg/common/db/mysql_model/im_mysql_model/conversation_model.go @@ -0,0 +1,145 @@ +package im_mysql_model + +import ( + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" +) + +func SetConversation(conversation db.Conversation) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err + } + dbConn.LogMode(false) + newConversation := conversation + if dbConn.Model(&db.Conversation{}).Find(&newConversation).RowsAffected == 0 { + log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "not exist in db, create") + return dbConn.Model(&db.Conversation{}).Create(conversation).Error + // if exist, then update record + } else { + log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "exist in db, update") + //force update + return dbConn.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). + Update(map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt, "is_pinned": conversation.IsPinned, "is_private_chat": conversation.IsPrivateChat, + "group_at_type": conversation.GroupAtType, "is_not_in_group": conversation.IsNotInGroup}).Error + } +} +func SetOneConversation(conversation db.Conversation) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err + } + dbConn.LogMode(false) + return dbConn.Model(&db.Conversation{}).Create(conversation).Error + +} + +func PeerUserSetConversation(conversation db.Conversation) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err + } + dbConn.LogMode(false) + newConversation := conversation + if dbConn.Model(&db.Conversation{}).Find(&newConversation).RowsAffected == 0 { + log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "not exist in db, create") + return dbConn.Model(&db.Conversation{}).Create(conversation).Error + // if exist, then update record + } + log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "exist in db, update") + //force update + return dbConn.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). + Update(map[string]interface{}{"is_private_chat": conversation.IsPrivateChat}).Error + +} + +func SetRecvMsgOpt(conversation db.Conversation) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err + } + dbConn.LogMode(false) + newConversation := conversation + if dbConn.Model(&db.Conversation{}).Find(&newConversation).RowsAffected == 0 { + log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "not exist in db, create") + return dbConn.Model(&db.Conversation{}).Create(conversation).Error + // if exist, then update record + } else { + log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "exist in db, update") + //force update + return dbConn.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). + Update(map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt}).Error + } +} + +func GetUserAllConversations(ownerUserID string) ([]db.Conversation, error) { + var conversations []db.Conversation + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return conversations, err + } + dbConn.LogMode(false) + err = dbConn.Model(&db.Conversation{}).Where("owner_user_id=?", ownerUserID).Find(&conversations).Error + return conversations, err +} +func GetMultipleUserConversationByConversationID(ownerUserIDList []string, conversationID string) ([]db.Conversation, error) { + var conversations []db.Conversation + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return conversations, err + } + dbConn.LogMode(false) + err = dbConn.Model(&db.Conversation{}).Where("owner_user_id IN ? and conversation_id=?", ownerUserIDList, conversationID).Find(&conversations).Error + return conversations, err +} +func GetExistConversationUserIDList(ownerUserIDList []string, conversationID string) ([]string, error) { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return nil, err + } + var resultArr []string + err = dbConn.Table("conversations").Where(" owner_user_id IN (?) and conversation_id=?", ownerUserIDList, conversationID).Pluck("owner_user_id", &resultArr).Error + if err != nil { + return nil, err + } + return resultArr, nil +} + +func GetConversation(OwnerUserID, conversationID string) (db.Conversation, error) { + var conversation db.Conversation + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return conversation, err + } + err = dbConn.Table("conversations").Where("owner_user_id=? and conversation_id=?", OwnerUserID, conversationID).Take(&conversation).Error + return conversation, err +} + +func GetConversations(OwnerUserID string, conversationIDs []string) ([]db.Conversation, error) { + var conversations []db.Conversation + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return conversations, err + } + err = dbConn.Model(&db.Conversation{}).Where("conversation_id IN (?) and owner_user_id=?", conversationIDs, OwnerUserID).Find(&conversations).Error + return conversations, err +} +func GetConversationsByConversationIDMultipleOwner(OwnerUserIDList []string, conversationID string) ([]db.Conversation, error) { + var conversations []db.Conversation + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return conversations, err + } + err = dbConn.Model(&db.Conversation{}).Where("owner_user_id IN (?) and conversation_id=?", OwnerUserIDList, conversationID).Find(&conversations).Error + return conversations, err +} +func UpdateColumnsConversations(ownerUserIDList []string, conversationID string, args map[string]interface{}) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err + } + dbConn.LogMode(false) + return dbConn.Debug().Model(&db.Conversation{}).Where("owner_user_id IN (?) and conversation_id=?", ownerUserIDList, conversationID).Updates(args).Error + +} diff --git a/pkg/common/db/mysql_model/im_mysql_model/friend_model.go b/pkg/common/db/mysql_model/im_mysql_model/friend_model.go index 08d4597dc..600da2f79 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/friend_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/friend_model.go @@ -49,13 +49,13 @@ func GetFriendListByUserID(OwnerUserID string) ([]db.Friend, error) { return friends, nil } -func GetFriendIDListByUserID(OwnerUserID string) ([]*string, error) { +func GetFriendIDListByUserID(OwnerUserID string) ([]string, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return nil, err } - var friendIDList []*string - err = dbConn.Table("friends").Select("friend_user_id").Where("owner_user_id=?", OwnerUserID).Find(&friendIDList).Error + var friendIDList []string + err = dbConn.Table("friends").Where("owner_user_id=?", OwnerUserID).Pluck("friend_user_id", &friendIDList).Error if err != nil { return nil, err } 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 003b7afa7..c519ec2d0 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 @@ -4,7 +4,6 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" - "Open_IM/pkg/common/log" "Open_IM/pkg/utils" "fmt" "time" @@ -305,94 +304,3 @@ func GetBlockUsersNumCount() (int32, error) { } return count, nil } - -func SetConversation(conversation db.Conversation) error { - dbConn, err := db.DB.MysqlDB.DefaultGormDB() - if err != nil { - return err - } - dbConn.LogMode(false) - newConversation := conversation - if dbConn.Model(&db.Conversation{}).Find(&newConversation).RowsAffected == 0 { - log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "not exist in db, create") - return dbConn.Model(&db.Conversation{}).Create(conversation).Error - // if exist, then update record - } else { - log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "exist in db, update") - //force update - return dbConn.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). - Update(map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt, "is_pinned": conversation.IsPinned, "is_private_chat": conversation.IsPrivateChat}).Error - } -} - -func PeerUserSetConversation(conversation db.Conversation) error { - dbConn, err := db.DB.MysqlDB.DefaultGormDB() - if err != nil { - return err - } - dbConn.LogMode(false) - newConversation := conversation - if dbConn.Model(&db.Conversation{}).Find(&newConversation).RowsAffected == 0 { - log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "not exist in db, create") - return dbConn.Model(&db.Conversation{}).Create(conversation).Error - // if exist, then update record - } - log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "exist in db, update") - //force update - return dbConn.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). - Update(map[string]interface{}{"is_private_chat": conversation.IsPrivateChat}).Error - -} - -func SetRecvMsgOpt(conversation db.Conversation) error { - dbConn, err := db.DB.MysqlDB.DefaultGormDB() - if err != nil { - return err - } - dbConn.LogMode(false) - newConversation := conversation - if dbConn.Model(&db.Conversation{}).Find(&newConversation).RowsAffected == 0 { - log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "not exist in db, create") - return dbConn.Model(&db.Conversation{}).Create(conversation).Error - // if exist, then update record - } else { - log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation, "exist in db, update") - //force update - return dbConn.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). - Update(map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt}).Error - } -} - -func GetUserAllConversations(ownerUserID string) ([]db.Conversation, error) { - var conversations []db.Conversation - dbConn, err := db.DB.MysqlDB.DefaultGormDB() - if err != nil { - return conversations, err - } - dbConn.LogMode(false) - err = dbConn.Model(&db.Conversation{}).Where("owner_user_id=?", ownerUserID).Find(&conversations).Error - return conversations, err -} - -func GetConversation(OwnerUserID, conversationID string) (db.Conversation, error) { - var conversation db.Conversation - dbConn, err := db.DB.MysqlDB.DefaultGormDB() - if err != nil { - return conversation, err - } - err = dbConn.Model(&db.Conversation{ - OwnerUserID: OwnerUserID, - ConversationID: conversationID, - }).Find(&conversation).Error - return conversation, err -} - -func GetConversations(OwnerUserID string, conversationIDs []string) ([]db.Conversation, error) { - var conversations []db.Conversation - dbConn, err := db.DB.MysqlDB.DefaultGormDB() - if err != nil { - return conversations, err - } - err = dbConn.Model(&db.Conversation{}).Where("conversation_id IN (?) and owner_user_id=?", conversationIDs, OwnerUserID).Find(&conversations).Error - return conversations, err -} diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 2faa9a6d8..9b32b18d7 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -3,6 +3,8 @@ package db import ( "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" + pbCommon "Open_IM/pkg/proto/sdk_ws" + "encoding/json" "github.com/garyburd/redigo/redis" ) @@ -15,6 +17,7 @@ const ( uidPidToken = "UID_PID_TOKEN_STATUS:" conversationReceiveMessageOpt = "CON_RECV_MSG_OPT:" GetuiToken = "GETUI" + UserInfoCache = "USER_INFO_CACHE:" ) func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { @@ -155,3 +158,23 @@ func (d *DataBases) GetGetuiToken() (string, error) { result, err := redis.String(d.Exec("GET", GetuiToken)) return result, err } + +func (d *DataBases) SetUserInfo(userInfo *pbCommon.UserInfo) error { + b, _ := json.Marshal(&userInfo) + m := map[string]interface{}{} + if err := json.Unmarshal(b, &m); err != nil { + return err + } + _, err := d.Exec("hmset", UserInfoCache+userInfo.UserID, redis.Args{}.Add().AddFlat(m)...) + return err +} + +func (d *DataBases) GetUserInfo(userID string) (*pbCommon.UserInfo, error) { + result, err := redis.String(d.Exec("HGETALL", UserInfoCache+userID)) + if err != nil { + return nil, err + } + userInfo := &pbCommon.UserInfo{} + err = json.Unmarshal([]byte(result), userInfo) + return userInfo, err +} diff --git a/pkg/proto/cache/cache.pb.go b/pkg/proto/cache/cache.pb.go new file mode 100644 index 000000000..649784738 --- /dev/null +++ b/pkg/proto/cache/cache.pb.go @@ -0,0 +1,501 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: cache/cache.proto + +package cache // import "./cache" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import sdk_ws "Open_IM/pkg/proto/sdk_ws" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// 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 { + 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 *CommonResp) Reset() { *m = CommonResp{} } +func (m *CommonResp) String() string { return proto.CompactTextString(m) } +func (*CommonResp) ProtoMessage() {} +func (*CommonResp) Descriptor() ([]byte, []int) { + return fileDescriptor_cache_613af94c3da056d4, []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) +} + +var xxx_messageInfo_CommonResp proto.InternalMessageInfo + +func (m *CommonResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *CommonResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +type GetUserInfoReq struct { + UserIDList []string `protobuf:"bytes,1,rep,name=userIDList" json:"userIDList,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 *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } +func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } +func (*GetUserInfoReq) ProtoMessage() {} +func (*GetUserInfoReq) Descriptor() ([]byte, []int) { + return fileDescriptor_cache_613af94c3da056d4, []int{1} +} +func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) +} +func (m *GetUserInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetUserInfoReq.Marshal(b, m, deterministic) +} +func (dst *GetUserInfoReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetUserInfoReq.Merge(dst, src) +} +func (m *GetUserInfoReq) XXX_Size() int { + return xxx_messageInfo_GetUserInfoReq.Size(m) +} +func (m *GetUserInfoReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetUserInfoReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetUserInfoReq proto.InternalMessageInfo + +func (m *GetUserInfoReq) GetUserIDList() []string { + if m != nil { + return m.UserIDList + } + return nil +} + +func (m *GetUserInfoReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type GetUserInfoResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + UserInfoList []*sdk_ws.UserInfo `protobuf:"bytes,2,rep,name=UserInfoList" json:"UserInfoList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +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_cache_613af94c3da056d4, []int{2} +} +func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) +} +func (m *GetUserInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetUserInfoResp.Marshal(b, m, deterministic) +} +func (dst *GetUserInfoResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetUserInfoResp.Merge(dst, src) +} +func (m *GetUserInfoResp) XXX_Size() int { + return xxx_messageInfo_GetUserInfoResp.Size(m) +} +func (m *GetUserInfoResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetUserInfoResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetUserInfoResp proto.InternalMessageInfo + +func (m *GetUserInfoResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func (m *GetUserInfoResp) GetUserInfoList() []*sdk_ws.UserInfo { + if m != nil { + return m.UserInfoList + } + return nil +} + +type UpdateUserInfoReq struct { + UserInfoList []*sdk_ws.UserInfo `protobuf:"bytes,1,rep,name=UserInfoList" json:"UserInfoList,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 *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } +func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } +func (*UpdateUserInfoReq) ProtoMessage() {} +func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { + return fileDescriptor_cache_613af94c3da056d4, []int{3} +} +func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) +} +func (m *UpdateUserInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdateUserInfoReq.Marshal(b, m, deterministic) +} +func (dst *UpdateUserInfoReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateUserInfoReq.Merge(dst, src) +} +func (m *UpdateUserInfoReq) XXX_Size() int { + return xxx_messageInfo_UpdateUserInfoReq.Size(m) +} +func (m *UpdateUserInfoReq) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateUserInfoReq.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateUserInfoReq proto.InternalMessageInfo + +func (m *UpdateUserInfoReq) GetUserInfoList() []*sdk_ws.UserInfo { + if m != nil { + return m.UserInfoList + } + return nil +} + +func (m *UpdateUserInfoReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type UpdateUserInfoResp 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 *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } +func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } +func (*UpdateUserInfoResp) ProtoMessage() {} +func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { + return fileDescriptor_cache_613af94c3da056d4, []int{4} +} +func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) +} +func (m *UpdateUserInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdateUserInfoResp.Marshal(b, m, deterministic) +} +func (dst *UpdateUserInfoResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateUserInfoResp.Merge(dst, src) +} +func (m *UpdateUserInfoResp) XXX_Size() int { + return xxx_messageInfo_UpdateUserInfoResp.Size(m) +} +func (m *UpdateUserInfoResp) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateUserInfoResp.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateUserInfoResp proto.InternalMessageInfo + +func (m *UpdateUserInfoResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +type UpdateAllUserToCacheReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdateAllUserToCacheReq) Reset() { *m = UpdateAllUserToCacheReq{} } +func (m *UpdateAllUserToCacheReq) String() string { return proto.CompactTextString(m) } +func (*UpdateAllUserToCacheReq) ProtoMessage() {} +func (*UpdateAllUserToCacheReq) Descriptor() ([]byte, []int) { + return fileDescriptor_cache_613af94c3da056d4, []int{5} +} +func (m *UpdateAllUserToCacheReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdateAllUserToCacheReq.Unmarshal(m, b) +} +func (m *UpdateAllUserToCacheReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdateAllUserToCacheReq.Marshal(b, m, deterministic) +} +func (dst *UpdateAllUserToCacheReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateAllUserToCacheReq.Merge(dst, src) +} +func (m *UpdateAllUserToCacheReq) XXX_Size() int { + return xxx_messageInfo_UpdateAllUserToCacheReq.Size(m) +} +func (m *UpdateAllUserToCacheReq) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateAllUserToCacheReq.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateAllUserToCacheReq proto.InternalMessageInfo + +func (m *UpdateAllUserToCacheReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type UpdateAllUserToCacheResp 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 *UpdateAllUserToCacheResp) Reset() { *m = UpdateAllUserToCacheResp{} } +func (m *UpdateAllUserToCacheResp) String() string { return proto.CompactTextString(m) } +func (*UpdateAllUserToCacheResp) ProtoMessage() {} +func (*UpdateAllUserToCacheResp) Descriptor() ([]byte, []int) { + return fileDescriptor_cache_613af94c3da056d4, []int{6} +} +func (m *UpdateAllUserToCacheResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdateAllUserToCacheResp.Unmarshal(m, b) +} +func (m *UpdateAllUserToCacheResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdateAllUserToCacheResp.Marshal(b, m, deterministic) +} +func (dst *UpdateAllUserToCacheResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateAllUserToCacheResp.Merge(dst, src) +} +func (m *UpdateAllUserToCacheResp) XXX_Size() int { + return xxx_messageInfo_UpdateAllUserToCacheResp.Size(m) +} +func (m *UpdateAllUserToCacheResp) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateAllUserToCacheResp.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateAllUserToCacheResp proto.InternalMessageInfo + +func (m *UpdateAllUserToCacheResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func init() { + proto.RegisterType((*CommonResp)(nil), "cache.CommonResp") + proto.RegisterType((*GetUserInfoReq)(nil), "cache.GetUserInfoReq") + proto.RegisterType((*GetUserInfoResp)(nil), "cache.GetUserInfoResp") + proto.RegisterType((*UpdateUserInfoReq)(nil), "cache.UpdateUserInfoReq") + proto.RegisterType((*UpdateUserInfoResp)(nil), "cache.UpdateUserInfoResp") + proto.RegisterType((*UpdateAllUserToCacheReq)(nil), "cache.UpdateAllUserToCacheReq") + proto.RegisterType((*UpdateAllUserToCacheResp)(nil), "cache.UpdateAllUserToCacheResp") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +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.SupportPackageIsVersion4 + +// Client API for Cache service + +type CacheClient interface { + GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) + UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*UpdateUserInfoResp, error) + UpdateAllUserToCache(ctx context.Context, in *UpdateAllUserToCacheReq, opts ...grpc.CallOption) (*UpdateAllUserToCacheResp, error) +} + +type cacheClient struct { + cc *grpc.ClientConn +} + +func NewCacheClient(cc *grpc.ClientConn) CacheClient { + return &cacheClient{cc} +} + +func (c *cacheClient) GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) { + out := new(GetUserInfoResp) + err := grpc.Invoke(ctx, "/cache.cache/GetUserInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cacheClient) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*UpdateUserInfoResp, error) { + out := new(UpdateUserInfoResp) + err := grpc.Invoke(ctx, "/cache.cache/UpdateUserInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cacheClient) UpdateAllUserToCache(ctx context.Context, in *UpdateAllUserToCacheReq, opts ...grpc.CallOption) (*UpdateAllUserToCacheResp, error) { + out := new(UpdateAllUserToCacheResp) + err := grpc.Invoke(ctx, "/cache.cache/UpdateAllUserToCache", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Cache service + +type CacheServer interface { + GetUserInfo(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) + UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*UpdateUserInfoResp, error) + UpdateAllUserToCache(context.Context, *UpdateAllUserToCacheReq) (*UpdateAllUserToCacheResp, error) +} + +func RegisterCacheServer(s *grpc.Server, srv CacheServer) { + s.RegisterService(&_Cache_serviceDesc, srv) +} + +func _Cache_GetUserInfo_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.(CacheServer).GetUserInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cache.cache/GetUserInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CacheServer).GetUserInfo(ctx, req.(*GetUserInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Cache_UpdateUserInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateUserInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CacheServer).UpdateUserInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cache.cache/UpdateUserInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CacheServer).UpdateUserInfo(ctx, req.(*UpdateUserInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Cache_UpdateAllUserToCache_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateAllUserToCacheReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CacheServer).UpdateAllUserToCache(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cache.cache/UpdateAllUserToCache", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CacheServer).UpdateAllUserToCache(ctx, req.(*UpdateAllUserToCacheReq)) + } + return interceptor(ctx, in, info, handler) +} + +var _Cache_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cache.cache", + HandlerType: (*CacheServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetUserInfo", + Handler: _Cache_GetUserInfo_Handler, + }, + { + MethodName: "UpdateUserInfo", + Handler: _Cache_UpdateUserInfo_Handler, + }, + { + MethodName: "UpdateAllUserToCache", + Handler: _Cache_UpdateAllUserToCache_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cache/cache.proto", +} + +func init() { proto.RegisterFile("cache/cache.proto", fileDescriptor_cache_613af94c3da056d4) } + +var fileDescriptor_cache_613af94c3da056d4 = []byte{ + // 383 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x5d, 0x4f, 0xe2, 0x40, + 0x14, 0xcd, 0x40, 0x60, 0xc3, 0xed, 0x2e, 0x84, 0xc9, 0x2e, 0x5b, 0x6b, 0x82, 0xb5, 0x4f, 0x7d, + 0x6a, 0x23, 0x3e, 0x62, 0x34, 0x0a, 0x86, 0x90, 0x48, 0x4c, 0x26, 0x12, 0x13, 0x5f, 0x9a, 0x0a, + 0x23, 0x12, 0xa0, 0x33, 0xce, 0x54, 0xf8, 0x05, 0xfe, 0x54, 0xff, 0x87, 0xe9, 0x14, 0xb0, 0x1f, + 0x68, 0x22, 0x2f, 0x93, 0xdc, 0x8f, 0x73, 0xe6, 0x9c, 0x3b, 0x73, 0xa1, 0x3e, 0xf2, 0x47, 0xcf, + 0xd4, 0x55, 0xa7, 0xc3, 0x05, 0x0b, 0x19, 0x2e, 0xa9, 0xc0, 0x38, 0xbe, 0xe5, 0x34, 0xf0, 0xfa, + 0x03, 0x97, 0xcf, 0x26, 0xae, 0xaa, 0xb8, 0x72, 0x3c, 0xf3, 0x56, 0xd2, 0x5d, 0xc9, 0xb8, 0xd3, + 0x3a, 0x07, 0xe8, 0xb0, 0xc5, 0x82, 0x05, 0x84, 0x4a, 0x8e, 0x75, 0xf8, 0x45, 0x85, 0xe8, 0xb0, + 0x31, 0xd5, 0x91, 0x89, 0xec, 0x12, 0xd9, 0x84, 0xb8, 0x01, 0x65, 0x2a, 0xc4, 0x40, 0x4e, 0xf4, + 0x82, 0x89, 0xec, 0x0a, 0x59, 0x47, 0x16, 0x81, 0x6a, 0x8f, 0x86, 0x43, 0x49, 0x45, 0x3f, 0x78, + 0x62, 0x84, 0xbe, 0xe0, 0x26, 0xc0, 0x6b, 0x14, 0x76, 0x6f, 0xa6, 0x32, 0xd4, 0x91, 0x59, 0xb4, + 0x2b, 0x24, 0x91, 0xc1, 0x26, 0x68, 0x8c, 0x53, 0xe1, 0x87, 0x53, 0x16, 0xf4, 0xbb, 0x7a, 0x51, + 0xd1, 0x25, 0x53, 0xd6, 0x1b, 0x82, 0x5a, 0x8a, 0x54, 0x72, 0x7c, 0x02, 0x30, 0xda, 0xea, 0x54, + 0xe2, 0xb4, 0x56, 0xdd, 0x89, 0x3d, 0x7f, 0x1a, 0x20, 0x89, 0x26, 0x7c, 0x01, 0xbf, 0x37, 0x14, + 0x4a, 0x4a, 0xc1, 0x2c, 0xda, 0x5a, 0xeb, 0xd0, 0x91, 0x54, 0x2c, 0xa9, 0xf0, 0x7c, 0x3e, 0xf5, + 0xb8, 0x2f, 0xfc, 0x85, 0x74, 0xb6, 0x37, 0xa5, 0x00, 0xd6, 0x12, 0xea, 0x43, 0x3e, 0xf6, 0x43, + 0x9a, 0xb4, 0x97, 0x65, 0x45, 0x3f, 0x64, 0xcd, 0xfa, 0x2f, 0xe4, 0xfd, 0xf7, 0x00, 0x67, 0xef, + 0xdd, 0x6b, 0x02, 0x56, 0x1b, 0xfe, 0xc7, 0x44, 0x97, 0xf3, 0x79, 0xc4, 0x75, 0xc7, 0x3a, 0x51, + 0x7b, 0x64, 0x23, 0xa3, 0x02, 0xe5, 0x55, 0x0c, 0x40, 0xdf, 0x0d, 0xde, 0x4b, 0x4b, 0xeb, 0x1d, + 0x41, 0xfc, 0x2b, 0xf1, 0x19, 0x68, 0x89, 0xd7, 0xc5, 0xff, 0xd6, 0xb8, 0xf4, 0x37, 0x32, 0x1a, + 0xbb, 0xd2, 0x92, 0xe3, 0x6b, 0xa8, 0xa6, 0x87, 0x83, 0xf5, 0x75, 0x67, 0xee, 0xad, 0x8c, 0x83, + 0x2f, 0x2a, 0x92, 0xe3, 0x7b, 0xf8, 0xbb, 0xcb, 0x1d, 0x6e, 0xa6, 0x20, 0xb9, 0xb9, 0x19, 0x47, + 0xdf, 0xd6, 0x25, 0xbf, 0xaa, 0x3d, 0xfc, 0x71, 0xe2, 0x5d, 0x6c, 0xab, 0xf3, 0xb1, 0xac, 0x16, + 0xed, 0xf4, 0x23, 0x00, 0x00, 0xff, 0xff, 0x14, 0x24, 0x83, 0x9c, 0xa7, 0x03, 0x00, 0x00, +} diff --git a/pkg/proto/cache/cache.proto b/pkg/proto/cache/cache.proto new file mode 100644 index 000000000..cecfabd3c --- /dev/null +++ b/pkg/proto/cache/cache.proto @@ -0,0 +1,44 @@ +syntax = "proto3"; +import "Open_IM/pkg/proto/sdk_ws/ws.proto"; +option go_package = "./cache;cache"; +package cache; + +message CommonResp{ + int32 errCode = 1; + string errMsg = 2; +} + +message GetUserInfoReq{ + repeated string userIDList = 1; + string operationID = 3; +} + +message GetUserInfoResp{ + CommonResp commonResp = 1; + repeated server_api_params.UserInfo UserInfoList = 2; +} + + +message UpdateUserInfoReq{ + repeated server_api_params.UserInfo UserInfoList = 1; + string operationID = 2; +} + +message UpdateUserInfoResp{ + CommonResp commonResp = 1; +} + +message UpdateAllUserToCacheReq{ + string operationID = 1; +} + +message UpdateAllUserToCacheResp{ + CommonResp commonResp = 1; +} + + +service cache{ + rpc GetUserInfo(GetUserInfoReq) returns(GetUserInfoResp); + rpc UpdateUserInfo(UpdateUserInfoReq) returns(UpdateUserInfoResp); + rpc UpdateAllUserToCache(UpdateAllUserToCacheReq) returns(UpdateAllUserToCacheResp); +} diff --git a/pkg/proto/conversation/conversation.pb.go b/pkg/proto/conversation/conversation.pb.go new file mode 100644 index 000000000..bf76bfe67 --- /dev/null +++ b/pkg/proto/conversation/conversation.pb.go @@ -0,0 +1,429 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: conversation/conversation.proto + +package conversation // import "./conversation" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// 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 { + 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 *CommonResp) Reset() { *m = CommonResp{} } +func (m *CommonResp) String() string { return proto.CompactTextString(m) } +func (*CommonResp) ProtoMessage() {} +func (*CommonResp) Descriptor() ([]byte, []int) { + return fileDescriptor_conversation_e6bf38f800b9bed2, []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) +} + +var xxx_messageInfo_CommonResp proto.InternalMessageInfo + +func (m *CommonResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *CommonResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +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"` + RecvMsgOpt int32 `protobuf:"varint,3,opt,name=recvMsgOpt" json:"recvMsgOpt,omitempty"` + ConversationType int32 `protobuf:"varint,4,opt,name=conversationType" json:"conversationType,omitempty"` + UserID string `protobuf:"bytes,5,opt,name=userID" json:"userID,omitempty"` + GroupID string `protobuf:"bytes,6,opt,name=groupID" json:"groupID,omitempty"` + UnreadCount int32 `protobuf:"varint,7,opt,name=unreadCount" json:"unreadCount,omitempty"` + DraftTextTime int64 `protobuf:"varint,8,opt,name=draftTextTime" json:"draftTextTime,omitempty"` + IsPinned bool `protobuf:"varint,9,opt,name=isPinned" json:"isPinned,omitempty"` + AttachedInfo string `protobuf:"bytes,10,opt,name=attachedInfo" json:"attachedInfo,omitempty"` + IsPrivateChat bool `protobuf:"varint,11,opt,name=isPrivateChat" json:"isPrivateChat,omitempty"` + GroupAtType int32 `protobuf:"varint,12,opt,name=groupAtType" json:"groupAtType,omitempty"` + IsNotInGroup bool `protobuf:"varint,13,opt,name=isNotInGroup" json:"isNotInGroup,omitempty"` + Ex string `protobuf:"bytes,14,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +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_conversation_e6bf38f800b9bed2, []int{1} +} +func (m *Conversation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Conversation.Unmarshal(m, b) +} +func (m *Conversation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Conversation.Marshal(b, m, deterministic) +} +func (dst *Conversation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Conversation.Merge(dst, src) +} +func (m *Conversation) XXX_Size() int { + return xxx_messageInfo_Conversation.Size(m) +} +func (m *Conversation) XXX_DiscardUnknown() { + xxx_messageInfo_Conversation.DiscardUnknown(m) +} + +var xxx_messageInfo_Conversation proto.InternalMessageInfo + +func (m *Conversation) GetOwnerUserID() string { + if m != nil { + return m.OwnerUserID + } + return "" +} + +func (m *Conversation) GetConversationID() string { + if m != nil { + return m.ConversationID + } + return "" +} + +func (m *Conversation) GetRecvMsgOpt() int32 { + if m != nil { + return m.RecvMsgOpt + } + return 0 +} + +func (m *Conversation) GetConversationType() int32 { + if m != nil { + return m.ConversationType + } + return 0 +} + +func (m *Conversation) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *Conversation) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *Conversation) GetUnreadCount() int32 { + if m != nil { + return m.UnreadCount + } + return 0 +} + +func (m *Conversation) GetDraftTextTime() int64 { + if m != nil { + return m.DraftTextTime + } + return 0 +} + +func (m *Conversation) GetIsPinned() bool { + if m != nil { + return m.IsPinned + } + return false +} + +func (m *Conversation) GetAttachedInfo() string { + if m != nil { + return m.AttachedInfo + } + return "" +} + +func (m *Conversation) GetIsPrivateChat() bool { + if m != nil { + return m.IsPrivateChat + } + return false +} + +func (m *Conversation) GetGroupAtType() int32 { + if m != nil { + return m.GroupAtType + } + return 0 +} + +func (m *Conversation) GetIsNotInGroup() bool { + if m != nil { + return m.IsNotInGroup + } + return false +} + +func (m *Conversation) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type ModifyConversationFieldReq struct { + Conversation *Conversation `protobuf:"bytes,1,opt,name=conversation" json:"conversation,omitempty"` + FieldType int32 `protobuf:"varint,2,opt,name=fieldType" json:"fieldType,omitempty"` + UserIDList []string `protobuf:"bytes,3,rep,name=userIDList" json:"userIDList,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 *ModifyConversationFieldReq) Reset() { *m = ModifyConversationFieldReq{} } +func (m *ModifyConversationFieldReq) String() string { return proto.CompactTextString(m) } +func (*ModifyConversationFieldReq) ProtoMessage() {} +func (*ModifyConversationFieldReq) Descriptor() ([]byte, []int) { + return fileDescriptor_conversation_e6bf38f800b9bed2, []int{2} +} +func (m *ModifyConversationFieldReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ModifyConversationFieldReq.Unmarshal(m, b) +} +func (m *ModifyConversationFieldReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ModifyConversationFieldReq.Marshal(b, m, deterministic) +} +func (dst *ModifyConversationFieldReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_ModifyConversationFieldReq.Merge(dst, src) +} +func (m *ModifyConversationFieldReq) XXX_Size() int { + return xxx_messageInfo_ModifyConversationFieldReq.Size(m) +} +func (m *ModifyConversationFieldReq) XXX_DiscardUnknown() { + xxx_messageInfo_ModifyConversationFieldReq.DiscardUnknown(m) +} + +var xxx_messageInfo_ModifyConversationFieldReq proto.InternalMessageInfo + +func (m *ModifyConversationFieldReq) GetConversation() *Conversation { + if m != nil { + return m.Conversation + } + return nil +} + +func (m *ModifyConversationFieldReq) GetFieldType() int32 { + if m != nil { + return m.FieldType + } + return 0 +} + +func (m *ModifyConversationFieldReq) GetUserIDList() []string { + if m != nil { + return m.UserIDList + } + return nil +} + +func (m *ModifyConversationFieldReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type ModifyConversationFieldResp 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 *ModifyConversationFieldResp) Reset() { *m = ModifyConversationFieldResp{} } +func (m *ModifyConversationFieldResp) String() string { return proto.CompactTextString(m) } +func (*ModifyConversationFieldResp) ProtoMessage() {} +func (*ModifyConversationFieldResp) Descriptor() ([]byte, []int) { + return fileDescriptor_conversation_e6bf38f800b9bed2, []int{3} +} +func (m *ModifyConversationFieldResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ModifyConversationFieldResp.Unmarshal(m, b) +} +func (m *ModifyConversationFieldResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ModifyConversationFieldResp.Marshal(b, m, deterministic) +} +func (dst *ModifyConversationFieldResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ModifyConversationFieldResp.Merge(dst, src) +} +func (m *ModifyConversationFieldResp) XXX_Size() int { + return xxx_messageInfo_ModifyConversationFieldResp.Size(m) +} +func (m *ModifyConversationFieldResp) XXX_DiscardUnknown() { + xxx_messageInfo_ModifyConversationFieldResp.DiscardUnknown(m) +} + +var xxx_messageInfo_ModifyConversationFieldResp proto.InternalMessageInfo + +func (m *ModifyConversationFieldResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func init() { + proto.RegisterType((*CommonResp)(nil), "conversation.CommonResp") + proto.RegisterType((*Conversation)(nil), "conversation.Conversation") + proto.RegisterType((*ModifyConversationFieldReq)(nil), "conversation.ModifyConversationFieldReq") + proto.RegisterType((*ModifyConversationFieldResp)(nil), "conversation.ModifyConversationFieldResp") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +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.SupportPackageIsVersion4 + +// Client API for Conversation service + +type ConversationClient interface { + ModifyConversationField(ctx context.Context, in *ModifyConversationFieldReq, opts ...grpc.CallOption) (*ModifyConversationFieldResp, error) +} + +type conversationClient struct { + cc *grpc.ClientConn +} + +func NewConversationClient(cc *grpc.ClientConn) ConversationClient { + return &conversationClient{cc} +} + +func (c *conversationClient) ModifyConversationField(ctx context.Context, in *ModifyConversationFieldReq, opts ...grpc.CallOption) (*ModifyConversationFieldResp, error) { + out := new(ModifyConversationFieldResp) + err := grpc.Invoke(ctx, "/conversation.conversation/ModifyConversationField", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Conversation service + +type ConversationServer interface { + ModifyConversationField(context.Context, *ModifyConversationFieldReq) (*ModifyConversationFieldResp, error) +} + +func RegisterConversationServer(s *grpc.Server, srv ConversationServer) { + s.RegisterService(&_Conversation_serviceDesc, srv) +} + +func _Conversation_ModifyConversationField_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyConversationFieldReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConversationServer).ModifyConversationField(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/conversation.conversation/ModifyConversationField", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConversationServer).ModifyConversationField(ctx, req.(*ModifyConversationFieldReq)) + } + return interceptor(ctx, in, info, handler) +} + +var _Conversation_serviceDesc = grpc.ServiceDesc{ + ServiceName: "conversation.conversation", + HandlerType: (*ConversationServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ModifyConversationField", + Handler: _Conversation_ModifyConversationField_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "conversation/conversation.proto", +} + +func init() { + proto.RegisterFile("conversation/conversation.proto", fileDescriptor_conversation_e6bf38f800b9bed2) +} + +var fileDescriptor_conversation_e6bf38f800b9bed2 = []byte{ + // 475 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x8a, 0xd3, 0x40, + 0x14, 0x87, 0x49, 0xbb, 0xdb, 0x6d, 0x4e, 0xbb, 0x45, 0xe6, 0x42, 0x87, 0xae, 0x7f, 0x42, 0x10, + 0x89, 0x5e, 0x54, 0x58, 0x6f, 0x04, 0x61, 0x41, 0x53, 0x94, 0x80, 0xd5, 0x65, 0xa8, 0x08, 0xde, + 0xc5, 0xe6, 0xb4, 0x3b, 0x60, 0x67, 0xe2, 0xcc, 0xb4, 0x76, 0x6f, 0x7c, 0x32, 0x9f, 0xc4, 0xa7, + 0x91, 0x99, 0xb4, 0xbb, 0x33, 0x95, 0xc2, 0x5e, 0x9e, 0x2f, 0x27, 0xbf, 0xf9, 0x26, 0xe7, 0x04, + 0x9e, 0xcc, 0xa4, 0x58, 0xa3, 0xd2, 0xa5, 0xe1, 0x52, 0xbc, 0xf4, 0x8b, 0x51, 0xad, 0xa4, 0x91, + 0xa4, 0xef, 0xb3, 0xf4, 0x02, 0x20, 0x97, 0xcb, 0xa5, 0x14, 0x0c, 0x75, 0x4d, 0x28, 0x9c, 0xa0, + 0x52, 0xb9, 0xac, 0x90, 0x46, 0x49, 0x94, 0x1d, 0xb3, 0x5d, 0x49, 0xee, 0x43, 0x07, 0x95, 0x9a, + 0xe8, 0x05, 0x6d, 0x25, 0x51, 0x16, 0xb3, 0x6d, 0x95, 0xfe, 0x6d, 0x43, 0x3f, 0xf7, 0x02, 0x49, + 0x02, 0x3d, 0xf9, 0x4b, 0xa0, 0xfa, 0xa2, 0x51, 0x15, 0x63, 0x17, 0x13, 0x33, 0x1f, 0x91, 0x67, + 0x30, 0xf0, 0x15, 0x8a, 0xf1, 0x36, 0x72, 0x8f, 0x92, 0xc7, 0x00, 0x0a, 0x67, 0xeb, 0x89, 0x5e, + 0x7c, 0xae, 0x0d, 0x6d, 0x3b, 0x1f, 0x8f, 0x90, 0x17, 0x70, 0xcf, 0x7f, 0x63, 0x7a, 0x5d, 0x23, + 0x3d, 0x72, 0x5d, 0xff, 0x71, 0xab, 0xbf, 0x6a, 0x84, 0x8e, 0x1b, 0xfd, 0xa6, 0xb2, 0x17, 0x5e, + 0x28, 0xb9, 0xaa, 0x8b, 0x31, 0xed, 0xb8, 0x07, 0xbb, 0xd2, 0xde, 0x63, 0x25, 0x14, 0x96, 0x55, + 0x2e, 0x57, 0xc2, 0xd0, 0x13, 0x17, 0xec, 0x23, 0xf2, 0x14, 0x4e, 0x2b, 0x55, 0xce, 0xcd, 0x14, + 0x37, 0x66, 0xca, 0x97, 0x48, 0xbb, 0x49, 0x94, 0xb5, 0x59, 0x08, 0xc9, 0x10, 0xba, 0x5c, 0x5f, + 0x72, 0x21, 0xb0, 0xa2, 0x71, 0x12, 0x65, 0x5d, 0x76, 0x53, 0x93, 0x14, 0xfa, 0xa5, 0x31, 0xe5, + 0xec, 0x0a, 0xab, 0x42, 0xcc, 0x25, 0x05, 0xa7, 0x10, 0x30, 0x7b, 0x0a, 0xd7, 0x97, 0x8a, 0xaf, + 0x4b, 0x83, 0xf9, 0x55, 0x69, 0x68, 0xcf, 0x85, 0x84, 0xd0, 0xda, 0x3a, 0xf1, 0xb7, 0xc6, 0x7d, + 0x86, 0x7e, 0x63, 0xeb, 0x21, 0x7b, 0x16, 0xd7, 0x9f, 0xa4, 0x29, 0xc4, 0x07, 0x4b, 0xe9, 0xa9, + 0x8b, 0x09, 0x18, 0x19, 0x40, 0x0b, 0x37, 0x74, 0xe0, 0x2c, 0x5a, 0xb8, 0x49, 0xff, 0x44, 0x30, + 0x9c, 0xc8, 0x8a, 0xcf, 0xaf, 0xfd, 0x11, 0xbf, 0xe7, 0xf8, 0xa3, 0x62, 0xf8, 0x93, 0x5c, 0x40, + 0xb0, 0x4b, 0x6e, 0xd6, 0xbd, 0xf3, 0xe1, 0x28, 0x58, 0x3a, 0xff, 0x4d, 0x16, 0xf4, 0x93, 0x87, + 0x10, 0xcf, 0x6d, 0x96, 0x53, 0x6e, 0x39, 0xe5, 0x5b, 0x60, 0xc7, 0xdf, 0x0c, 0xe9, 0x23, 0xd7, + 0x76, 0xfc, 0xed, 0x2c, 0x66, 0x1e, 0x71, 0x8b, 0x56, 0xa3, 0xda, 0xed, 0xd0, 0xd1, 0x76, 0xd1, + 0x6e, 0x51, 0xfa, 0x15, 0xce, 0x0e, 0xda, 0xeb, 0x9a, 0xbc, 0x06, 0x98, 0xdd, 0xac, 0xfe, 0x56, + 0x9e, 0xee, 0xcb, 0xef, 0x9e, 0x33, 0xaf, 0xf7, 0xfc, 0x77, 0x78, 0x71, 0x22, 0xe0, 0xc1, 0x81, + 0x83, 0x48, 0x16, 0x06, 0x1e, 0xfe, 0x9a, 0xc3, 0xe7, 0x77, 0xec, 0xd4, 0xf5, 0xbb, 0x47, 0xdf, + 0xce, 0x46, 0xc1, 0xaf, 0xfd, 0xc6, 0x2f, 0xbe, 0x77, 0xdc, 0x8f, 0xfe, 0xea, 0x5f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x8d, 0x8a, 0xf6, 0x60, 0x0b, 0x04, 0x00, 0x00, +} diff --git a/pkg/proto/conversation/conversation.proto b/pkg/proto/conversation/conversation.proto new file mode 100644 index 000000000..5ae5f1142 --- /dev/null +++ b/pkg/proto/conversation/conversation.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; +option go_package = "./conversation;conversation"; +package conversation; + +message CommonResp{ + int32 errCode = 1; + string errMsg = 2; +} +message Conversation{ + string ownerUserID = 1; + string conversationID = 2; + int32 recvMsgOpt = 3; + int32 conversationType = 4; + string userID = 5; + string groupID = 6; + int32 unreadCount = 7; + int64 draftTextTime = 8; + bool isPinned = 9; + string attachedInfo = 10; + bool isPrivateChat = 11; + int32 groupAtType = 12; + bool isNotInGroup = 13; + string ex = 14; +} +message ModifyConversationFieldReq{ + Conversation conversation = 1; + int32 fieldType = 2; + repeated string userIDList = 3; + string operationID = 4; +} + +message ModifyConversationFieldResp{ + CommonResp commonResp = 1; +} +service conversation { + rpc ModifyConversationField(ModifyConversationFieldReq)returns(ModifyConversationFieldResp); + +} diff --git a/pkg/proto/office/office.pb.go b/pkg/proto/office/office.pb.go index 8e4f76511..3c5ff4bf5 100644 --- a/pkg/proto/office/office.pb.go +++ b/pkg/proto/office/office.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_office_1d2fa21c23f88044, []int{0} + return fileDescriptor_office_45d86d1784e03bf7, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +82,7 @@ func (m *TagUser) Reset() { *m = TagUser{} } func (m *TagUser) String() string { return proto.CompactTextString(m) } func (*TagUser) ProtoMessage() {} func (*TagUser) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{1} + return fileDescriptor_office_45d86d1784e03bf7, []int{1} } func (m *TagUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TagUser.Unmarshal(m, b) @@ -129,7 +129,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{2} + return fileDescriptor_office_45d86d1784e03bf7, []int{2} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -182,7 +182,7 @@ func (m *GetUserTagsReq) Reset() { *m = GetUserTagsReq{} } func (m *GetUserTagsReq) String() string { return proto.CompactTextString(m) } func (*GetUserTagsReq) ProtoMessage() {} func (*GetUserTagsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{3} + return fileDescriptor_office_45d86d1784e03bf7, []int{3} } func (m *GetUserTagsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserTagsReq.Unmarshal(m, b) @@ -228,7 +228,7 @@ func (m *GetUserTagsResp) Reset() { *m = GetUserTagsResp{} } func (m *GetUserTagsResp) String() string { return proto.CompactTextString(m) } func (*GetUserTagsResp) ProtoMessage() {} func (*GetUserTagsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{4} + return fileDescriptor_office_45d86d1784e03bf7, []int{4} } func (m *GetUserTagsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserTagsResp.Unmarshal(m, b) @@ -276,7 +276,7 @@ func (m *CreateTagReq) Reset() { *m = CreateTagReq{} } func (m *CreateTagReq) String() string { return proto.CompactTextString(m) } func (*CreateTagReq) ProtoMessage() {} func (*CreateTagReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{5} + return fileDescriptor_office_45d86d1784e03bf7, []int{5} } func (m *CreateTagReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateTagReq.Unmarshal(m, b) @@ -335,7 +335,7 @@ func (m *CreateTagResp) Reset() { *m = CreateTagResp{} } func (m *CreateTagResp) String() string { return proto.CompactTextString(m) } func (*CreateTagResp) ProtoMessage() {} func (*CreateTagResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{6} + return fileDescriptor_office_45d86d1784e03bf7, []int{6} } func (m *CreateTagResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateTagResp.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *DeleteTagReq) Reset() { *m = DeleteTagReq{} } func (m *DeleteTagReq) String() string { return proto.CompactTextString(m) } func (*DeleteTagReq) ProtoMessage() {} func (*DeleteTagReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{7} + return fileDescriptor_office_45d86d1784e03bf7, []int{7} } func (m *DeleteTagReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteTagReq.Unmarshal(m, b) @@ -427,7 +427,7 @@ func (m *DeleteTagResp) Reset() { *m = DeleteTagResp{} } func (m *DeleteTagResp) String() string { return proto.CompactTextString(m) } func (*DeleteTagResp) ProtoMessage() {} func (*DeleteTagResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{8} + return fileDescriptor_office_45d86d1784e03bf7, []int{8} } func (m *DeleteTagResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteTagResp.Unmarshal(m, b) @@ -470,7 +470,7 @@ func (m *SetTagReq) Reset() { *m = SetTagReq{} } func (m *SetTagReq) String() string { return proto.CompactTextString(m) } func (*SetTagReq) ProtoMessage() {} func (*SetTagReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{9} + return fileDescriptor_office_45d86d1784e03bf7, []int{9} } func (m *SetTagReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetTagReq.Unmarshal(m, b) @@ -543,7 +543,7 @@ func (m *SetTagResp) Reset() { *m = SetTagResp{} } func (m *SetTagResp) String() string { return proto.CompactTextString(m) } func (*SetTagResp) ProtoMessage() {} func (*SetTagResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{10} + return fileDescriptor_office_45d86d1784e03bf7, []int{10} } func (m *SetTagResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetTagResp.Unmarshal(m, b) @@ -587,7 +587,7 @@ func (m *SendMsg2TagReq) Reset() { *m = SendMsg2TagReq{} } func (m *SendMsg2TagReq) String() string { return proto.CompactTextString(m) } func (*SendMsg2TagReq) ProtoMessage() {} func (*SendMsg2TagReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{11} + return fileDescriptor_office_45d86d1784e03bf7, []int{11} } func (m *SendMsg2TagReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsg2TagReq.Unmarshal(m, b) @@ -667,7 +667,7 @@ func (m *SendMsg2TagResp) Reset() { *m = SendMsg2TagResp{} } func (m *SendMsg2TagResp) String() string { return proto.CompactTextString(m) } func (*SendMsg2TagResp) ProtoMessage() {} func (*SendMsg2TagResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{12} + return fileDescriptor_office_45d86d1784e03bf7, []int{12} } func (m *SendMsg2TagResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsg2TagResp.Unmarshal(m, b) @@ -707,7 +707,7 @@ func (m *GetTagSendLogsReq) Reset() { *m = GetTagSendLogsReq{} } func (m *GetTagSendLogsReq) String() string { return proto.CompactTextString(m) } func (*GetTagSendLogsReq) ProtoMessage() {} func (*GetTagSendLogsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{13} + return fileDescriptor_office_45d86d1784e03bf7, []int{13} } func (m *GetTagSendLogsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetTagSendLogsReq.Unmarshal(m, b) @@ -761,7 +761,7 @@ func (m *TagSendLog) Reset() { *m = TagSendLog{} } func (m *TagSendLog) String() string { return proto.CompactTextString(m) } func (*TagSendLog) ProtoMessage() {} func (*TagSendLog) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{14} + return fileDescriptor_office_45d86d1784e03bf7, []int{14} } func (m *TagSendLog) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TagSendLog.Unmarshal(m, b) @@ -815,7 +815,7 @@ func (m *GetTagSendLogsResp) Reset() { *m = GetTagSendLogsResp{} } func (m *GetTagSendLogsResp) String() string { return proto.CompactTextString(m) } func (*GetTagSendLogsResp) ProtoMessage() {} func (*GetTagSendLogsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{15} + return fileDescriptor_office_45d86d1784e03bf7, []int{15} } func (m *GetTagSendLogsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetTagSendLogsResp.Unmarshal(m, b) @@ -869,7 +869,7 @@ func (m *GetUserTagByIDReq) Reset() { *m = GetUserTagByIDReq{} } func (m *GetUserTagByIDReq) String() string { return proto.CompactTextString(m) } func (*GetUserTagByIDReq) ProtoMessage() {} func (*GetUserTagByIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{16} + return fileDescriptor_office_45d86d1784e03bf7, []int{16} } func (m *GetUserTagByIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserTagByIDReq.Unmarshal(m, b) @@ -922,7 +922,7 @@ func (m *GetUserTagByIDResp) Reset() { *m = GetUserTagByIDResp{} } func (m *GetUserTagByIDResp) String() string { return proto.CompactTextString(m) } func (*GetUserTagByIDResp) ProtoMessage() {} func (*GetUserTagByIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{17} + return fileDescriptor_office_45d86d1784e03bf7, []int{17} } func (m *GetUserTagByIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserTagByIDResp.Unmarshal(m, b) @@ -968,7 +968,7 @@ func (m *LikeUser) Reset() { *m = LikeUser{} } func (m *LikeUser) String() string { return proto.CompactTextString(m) } func (*LikeUser) ProtoMessage() {} func (*LikeUser) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{18} + return fileDescriptor_office_45d86d1784e03bf7, []int{18} } func (m *LikeUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LikeUser.Unmarshal(m, b) @@ -1014,7 +1014,7 @@ func (m *NotificationUser) Reset() { *m = NotificationUser{} } func (m *NotificationUser) String() string { return proto.CompactTextString(m) } func (*NotificationUser) ProtoMessage() {} func (*NotificationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{19} + return fileDescriptor_office_45d86d1784e03bf7, []int{19} } func (m *NotificationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NotificationUser.Unmarshal(m, b) @@ -1066,7 +1066,7 @@ func (m *Comment) Reset() { *m = Comment{} } func (m *Comment) String() string { return proto.CompactTextString(m) } func (*Comment) ProtoMessage() {} func (*Comment) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{20} + return fileDescriptor_office_45d86d1784e03bf7, []int{20} } func (m *Comment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Comment.Unmarshal(m, b) @@ -1142,29 +1142,121 @@ func (m *Comment) GetCreateTime() int32 { return 0 } +type PermissionGroup struct { + GroupName string `protobuf:"bytes,1,opt,name=groupName" json:"groupName,omitempty"` + GroupID string `protobuf:"bytes,2,opt,name=groupID" json:"groupID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PermissionGroup) Reset() { *m = PermissionGroup{} } +func (m *PermissionGroup) String() string { return proto.CompactTextString(m) } +func (*PermissionGroup) ProtoMessage() {} +func (*PermissionGroup) Descriptor() ([]byte, []int) { + return fileDescriptor_office_45d86d1784e03bf7, []int{21} +} +func (m *PermissionGroup) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PermissionGroup.Unmarshal(m, b) +} +func (m *PermissionGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PermissionGroup.Marshal(b, m, deterministic) +} +func (dst *PermissionGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_PermissionGroup.Merge(dst, src) +} +func (m *PermissionGroup) XXX_Size() int { + return xxx_messageInfo_PermissionGroup.Size(m) +} +func (m *PermissionGroup) XXX_DiscardUnknown() { + xxx_messageInfo_PermissionGroup.DiscardUnknown(m) +} + +var xxx_messageInfo_PermissionGroup proto.InternalMessageInfo + +func (m *PermissionGroup) GetGroupName() string { + if m != nil { + return m.GroupName + } + return "" +} + +func (m *PermissionGroup) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +type WorkMomentUser struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + UserName string `protobuf:"bytes,2,opt,name=userName" json:"userName,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WorkMomentUser) Reset() { *m = WorkMomentUser{} } +func (m *WorkMomentUser) String() string { return proto.CompactTextString(m) } +func (*WorkMomentUser) ProtoMessage() {} +func (*WorkMomentUser) Descriptor() ([]byte, []int) { + return fileDescriptor_office_45d86d1784e03bf7, []int{22} +} +func (m *WorkMomentUser) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WorkMomentUser.Unmarshal(m, b) +} +func (m *WorkMomentUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WorkMomentUser.Marshal(b, m, deterministic) +} +func (dst *WorkMomentUser) XXX_Merge(src proto.Message) { + xxx_messageInfo_WorkMomentUser.Merge(dst, src) +} +func (m *WorkMomentUser) XXX_Size() int { + return xxx_messageInfo_WorkMomentUser.Size(m) +} +func (m *WorkMomentUser) XXX_DiscardUnknown() { + xxx_messageInfo_WorkMomentUser.DiscardUnknown(m) +} + +var xxx_messageInfo_WorkMomentUser proto.InternalMessageInfo + +func (m *WorkMomentUser) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *WorkMomentUser) GetUserName() string { + if m != nil { + return m.UserName + } + return "" +} + type WorkMoment struct { - WorkMomentID string `protobuf:"bytes,1,opt,name=workMomentID" json:"workMomentID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - UserName string `protobuf:"bytes,3,opt,name=userName" json:"userName,omitempty"` - FaceURL string `protobuf:"bytes,4,opt,name=faceURL" json:"faceURL,omitempty"` - Content string `protobuf:"bytes,5,opt,name=content" json:"content,omitempty"` - LikeUsers []*LikeUser `protobuf:"bytes,6,rep,name=likeUsers" json:"likeUsers,omitempty"` - Comments []*Comment `protobuf:"bytes,7,rep,name=comments" json:"comments,omitempty"` - Permission int32 `protobuf:"varint,8,opt,name=permission" json:"permission,omitempty"` - PermissionUserIDList []string `protobuf:"bytes,9,rep,name=permissionUserIDList" json:"permissionUserIDList,omitempty"` - PermissionGroupIDList []string `protobuf:"bytes,10,rep,name=permissionGroupIDList" json:"permissionGroupIDList,omitempty"` - AtUserIDList []string `protobuf:"bytes,11,rep,name=atUserIDList" json:"atUserIDList,omitempty"` - CreateTime int32 `protobuf:"varint,12,opt,name=createTime" json:"createTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + WorkMomentID string `protobuf:"bytes,1,opt,name=workMomentID" json:"workMomentID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + UserName string `protobuf:"bytes,3,opt,name=userName" json:"userName,omitempty"` + FaceURL string `protobuf:"bytes,4,opt,name=faceURL" json:"faceURL,omitempty"` + Content string `protobuf:"bytes,5,opt,name=content" json:"content,omitempty"` + LikeUserList []*WorkMomentUser `protobuf:"bytes,6,rep,name=likeUserList" json:"likeUserList,omitempty"` + Comments []*Comment `protobuf:"bytes,7,rep,name=comments" json:"comments,omitempty"` + Permission int32 `protobuf:"varint,8,opt,name=permission" json:"permission,omitempty"` + PermissionUserList []*WorkMomentUser `protobuf:"bytes,9,rep,name=permissionUserList" json:"permissionUserList,omitempty"` + PermissionGroupList []*PermissionGroup `protobuf:"bytes,10,rep,name=permissionGroupList" json:"permissionGroupList,omitempty"` + AtUserList []*WorkMomentUser `protobuf:"bytes,11,rep,name=atUserList" json:"atUserList,omitempty"` + CreateTime int32 `protobuf:"varint,12,opt,name=createTime" json:"createTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *WorkMoment) Reset() { *m = WorkMoment{} } func (m *WorkMoment) String() string { return proto.CompactTextString(m) } func (*WorkMoment) ProtoMessage() {} func (*WorkMoment) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{21} + return fileDescriptor_office_45d86d1784e03bf7, []int{23} } func (m *WorkMoment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_WorkMoment.Unmarshal(m, b) @@ -1219,9 +1311,9 @@ func (m *WorkMoment) GetContent() string { return "" } -func (m *WorkMoment) GetLikeUsers() []*LikeUser { +func (m *WorkMoment) GetLikeUserList() []*WorkMomentUser { if m != nil { - return m.LikeUsers + return m.LikeUserList } return nil } @@ -1240,23 +1332,23 @@ func (m *WorkMoment) GetPermission() int32 { return 0 } -func (m *WorkMoment) GetPermissionUserIDList() []string { +func (m *WorkMoment) GetPermissionUserList() []*WorkMomentUser { if m != nil { - return m.PermissionUserIDList + return m.PermissionUserList } return nil } -func (m *WorkMoment) GetPermissionGroupIDList() []string { +func (m *WorkMoment) GetPermissionGroupList() []*PermissionGroup { if m != nil { - return m.PermissionGroupIDList + return m.PermissionGroupList } return nil } -func (m *WorkMoment) GetAtUserIDList() []string { +func (m *WorkMoment) GetAtUserList() []*WorkMomentUser { if m != nil { - return m.AtUserIDList + return m.AtUserList } return nil } @@ -1280,7 +1372,7 @@ func (m *CreateOneWorkMomentReq) Reset() { *m = CreateOneWorkMomentReq{} func (m *CreateOneWorkMomentReq) String() string { return proto.CompactTextString(m) } func (*CreateOneWorkMomentReq) ProtoMessage() {} func (*CreateOneWorkMomentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{22} + return fileDescriptor_office_45d86d1784e03bf7, []int{24} } func (m *CreateOneWorkMomentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateOneWorkMomentReq.Unmarshal(m, b) @@ -1325,7 +1417,7 @@ func (m *CreateOneWorkMomentResp) Reset() { *m = CreateOneWorkMomentResp func (m *CreateOneWorkMomentResp) String() string { return proto.CompactTextString(m) } func (*CreateOneWorkMomentResp) ProtoMessage() {} func (*CreateOneWorkMomentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{23} + return fileDescriptor_office_45d86d1784e03bf7, []int{25} } func (m *CreateOneWorkMomentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateOneWorkMomentResp.Unmarshal(m, b) @@ -1365,7 +1457,7 @@ func (m *DeleteOneWorkMomentReq) Reset() { *m = DeleteOneWorkMomentReq{} func (m *DeleteOneWorkMomentReq) String() string { return proto.CompactTextString(m) } func (*DeleteOneWorkMomentReq) ProtoMessage() {} func (*DeleteOneWorkMomentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{24} + return fileDescriptor_office_45d86d1784e03bf7, []int{26} } func (m *DeleteOneWorkMomentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteOneWorkMomentReq.Unmarshal(m, b) @@ -1417,7 +1509,7 @@ func (m *DeleteOneWorkMomentResp) Reset() { *m = DeleteOneWorkMomentResp func (m *DeleteOneWorkMomentResp) String() string { return proto.CompactTextString(m) } func (*DeleteOneWorkMomentResp) ProtoMessage() {} func (*DeleteOneWorkMomentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{25} + return fileDescriptor_office_45d86d1784e03bf7, []int{27} } func (m *DeleteOneWorkMomentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteOneWorkMomentResp.Unmarshal(m, b) @@ -1457,7 +1549,7 @@ func (m *LikeOneWorkMomentReq) Reset() { *m = LikeOneWorkMomentReq{} } func (m *LikeOneWorkMomentReq) String() string { return proto.CompactTextString(m) } func (*LikeOneWorkMomentReq) ProtoMessage() {} func (*LikeOneWorkMomentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{26} + return fileDescriptor_office_45d86d1784e03bf7, []int{28} } func (m *LikeOneWorkMomentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LikeOneWorkMomentReq.Unmarshal(m, b) @@ -1509,7 +1601,7 @@ func (m *LikeOneWorkMomentResp) Reset() { *m = LikeOneWorkMomentResp{} } func (m *LikeOneWorkMomentResp) String() string { return proto.CompactTextString(m) } func (*LikeOneWorkMomentResp) ProtoMessage() {} func (*LikeOneWorkMomentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{27} + return fileDescriptor_office_45d86d1784e03bf7, []int{29} } func (m *LikeOneWorkMomentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LikeOneWorkMomentResp.Unmarshal(m, b) @@ -1551,7 +1643,7 @@ func (m *CommentOneWorkMomentReq) Reset() { *m = CommentOneWorkMomentReq func (m *CommentOneWorkMomentReq) String() string { return proto.CompactTextString(m) } func (*CommentOneWorkMomentReq) ProtoMessage() {} func (*CommentOneWorkMomentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{28} + return fileDescriptor_office_45d86d1784e03bf7, []int{30} } func (m *CommentOneWorkMomentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommentOneWorkMomentReq.Unmarshal(m, b) @@ -1617,7 +1709,7 @@ func (m *CommentOneWorkMomentResp) Reset() { *m = CommentOneWorkMomentRe func (m *CommentOneWorkMomentResp) String() string { return proto.CompactTextString(m) } func (*CommentOneWorkMomentResp) ProtoMessage() {} func (*CommentOneWorkMomentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{29} + return fileDescriptor_office_45d86d1784e03bf7, []int{31} } func (m *CommentOneWorkMomentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommentOneWorkMomentResp.Unmarshal(m, b) @@ -1657,7 +1749,7 @@ func (m *GetWorkMomentByIDReq) Reset() { *m = GetWorkMomentByIDReq{} } func (m *GetWorkMomentByIDReq) String() string { return proto.CompactTextString(m) } func (*GetWorkMomentByIDReq) ProtoMessage() {} func (*GetWorkMomentByIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{30} + return fileDescriptor_office_45d86d1784e03bf7, []int{32} } func (m *GetWorkMomentByIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetWorkMomentByIDReq.Unmarshal(m, b) @@ -1710,7 +1802,7 @@ func (m *GetWorkMomentByIDResp) Reset() { *m = GetWorkMomentByIDResp{} } func (m *GetWorkMomentByIDResp) String() string { return proto.CompactTextString(m) } func (*GetWorkMomentByIDResp) ProtoMessage() {} func (*GetWorkMomentByIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{31} + return fileDescriptor_office_45d86d1784e03bf7, []int{33} } func (m *GetWorkMomentByIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetWorkMomentByIDResp.Unmarshal(m, b) @@ -1759,7 +1851,7 @@ func (m *ChangeWorkMomentPermissionReq) Reset() { *m = ChangeWorkMomentP func (m *ChangeWorkMomentPermissionReq) String() string { return proto.CompactTextString(m) } func (*ChangeWorkMomentPermissionReq) ProtoMessage() {} func (*ChangeWorkMomentPermissionReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{32} + return fileDescriptor_office_45d86d1784e03bf7, []int{34} } func (m *ChangeWorkMomentPermissionReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ChangeWorkMomentPermissionReq.Unmarshal(m, b) @@ -1825,7 +1917,7 @@ func (m *ChangeWorkMomentPermissionResp) Reset() { *m = ChangeWorkMoment func (m *ChangeWorkMomentPermissionResp) String() string { return proto.CompactTextString(m) } func (*ChangeWorkMomentPermissionResp) ProtoMessage() {} func (*ChangeWorkMomentPermissionResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{33} + return fileDescriptor_office_45d86d1784e03bf7, []int{35} } func (m *ChangeWorkMomentPermissionResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ChangeWorkMomentPermissionResp.Unmarshal(m, b) @@ -1854,8 +1946,9 @@ func (m *ChangeWorkMomentPermissionResp) GetCommonResp() *CommonResp { type GetUserWorkMomentsReq struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Pagination *sdk_ws.RequestPagination `protobuf:"bytes,2,opt,name=Pagination" json:"Pagination,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=opUserID" json:"opUserID,omitempty"` + Pagination *sdk_ws.RequestPagination `protobuf:"bytes,3,opt,name=Pagination" json:"Pagination,omitempty"` + OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1865,7 +1958,7 @@ func (m *GetUserWorkMomentsReq) Reset() { *m = GetUserWorkMomentsReq{} } func (m *GetUserWorkMomentsReq) String() string { return proto.CompactTextString(m) } func (*GetUserWorkMomentsReq) ProtoMessage() {} func (*GetUserWorkMomentsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{34} + return fileDescriptor_office_45d86d1784e03bf7, []int{36} } func (m *GetUserWorkMomentsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserWorkMomentsReq.Unmarshal(m, b) @@ -1892,6 +1985,13 @@ func (m *GetUserWorkMomentsReq) GetUserID() string { return "" } +func (m *GetUserWorkMomentsReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + func (m *GetUserWorkMomentsReq) GetPagination() *sdk_ws.RequestPagination { if m != nil { return m.Pagination @@ -1919,7 +2019,7 @@ func (m *GetUserWorkMomentsResp) Reset() { *m = GetUserWorkMomentsResp{} func (m *GetUserWorkMomentsResp) String() string { return proto.CompactTextString(m) } func (*GetUserWorkMomentsResp) ProtoMessage() {} func (*GetUserWorkMomentsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{35} + return fileDescriptor_office_45d86d1784e03bf7, []int{37} } func (m *GetUserWorkMomentsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserWorkMomentsResp.Unmarshal(m, b) @@ -1973,7 +2073,7 @@ func (m *GetUserFriendWorkMomentsReq) Reset() { *m = GetUserFriendWorkMo func (m *GetUserFriendWorkMomentsReq) String() string { return proto.CompactTextString(m) } func (*GetUserFriendWorkMomentsReq) ProtoMessage() {} func (*GetUserFriendWorkMomentsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{36} + return fileDescriptor_office_45d86d1784e03bf7, []int{38} } func (m *GetUserFriendWorkMomentsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserFriendWorkMomentsReq.Unmarshal(m, b) @@ -2027,7 +2127,7 @@ func (m *GetUserFriendWorkMomentsResp) Reset() { *m = GetUserFriendWorkM func (m *GetUserFriendWorkMomentsResp) String() string { return proto.CompactTextString(m) } func (*GetUserFriendWorkMomentsResp) ProtoMessage() {} func (*GetUserFriendWorkMomentsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{37} + return fileDescriptor_office_45d86d1784e03bf7, []int{39} } func (m *GetUserFriendWorkMomentsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserFriendWorkMomentsResp.Unmarshal(m, b) @@ -2070,12 +2170,16 @@ func (m *GetUserFriendWorkMomentsResp) GetPagination() *sdk_ws.ResponsePaginatio type WorkMomentNotificationMsg struct { NotificationMsgType int32 `protobuf:"varint,1,opt,name=notificationMsgType" json:"notificationMsgType,omitempty"` - Comment *Comment `protobuf:"bytes,2,opt,name=comment" json:"comment,omitempty"` - WorkMomentID string `protobuf:"bytes,3,opt,name=workMomentID" json:"workMomentID,omitempty"` - UserID string `protobuf:"bytes,4,opt,name=userID" json:"userID,omitempty"` - UserName string `protobuf:"bytes,5,opt,name=userName" json:"userName,omitempty"` - FaceURL string `protobuf:"bytes,6,opt,name=faceURL" json:"faceURL,omitempty"` - WorkMomentContent string `protobuf:"bytes,7,opt,name=workMomentContent" json:"workMomentContent,omitempty"` + ReplyUserName string `protobuf:"bytes,2,opt,name=replyUserName" json:"replyUserName,omitempty"` + ReplyUserID string `protobuf:"bytes,3,opt,name=replyUserID" json:"replyUserID,omitempty"` + Content string `protobuf:"bytes,4,opt,name=content" json:"content,omitempty"` + ContentID string `protobuf:"bytes,5,opt,name=contentID" json:"contentID,omitempty"` + WorkMomentID string `protobuf:"bytes,6,opt,name=workMomentID" json:"workMomentID,omitempty"` + UserID string `protobuf:"bytes,7,opt,name=userID" json:"userID,omitempty"` + UserName string `protobuf:"bytes,8,opt,name=userName" json:"userName,omitempty"` + FaceURL string `protobuf:"bytes,9,opt,name=faceURL" json:"faceURL,omitempty"` + WorkMomentContent string `protobuf:"bytes,10,opt,name=workMomentContent" json:"workMomentContent,omitempty"` + CreateTime int32 `protobuf:"varint,11,opt,name=createTime" json:"createTime,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -2085,7 +2189,7 @@ func (m *WorkMomentNotificationMsg) Reset() { *m = WorkMomentNotificatio func (m *WorkMomentNotificationMsg) String() string { return proto.CompactTextString(m) } func (*WorkMomentNotificationMsg) ProtoMessage() {} func (*WorkMomentNotificationMsg) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{38} + return fileDescriptor_office_45d86d1784e03bf7, []int{40} } func (m *WorkMomentNotificationMsg) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_WorkMomentNotificationMsg.Unmarshal(m, b) @@ -2112,11 +2216,32 @@ func (m *WorkMomentNotificationMsg) GetNotificationMsgType() int32 { return 0 } -func (m *WorkMomentNotificationMsg) GetComment() *Comment { +func (m *WorkMomentNotificationMsg) GetReplyUserName() string { if m != nil { - return m.Comment + return m.ReplyUserName } - return nil + return "" +} + +func (m *WorkMomentNotificationMsg) GetReplyUserID() string { + if m != nil { + return m.ReplyUserID + } + return "" +} + +func (m *WorkMomentNotificationMsg) GetContent() string { + if m != nil { + return m.Content + } + return "" +} + +func (m *WorkMomentNotificationMsg) GetContentID() string { + if m != nil { + return m.ContentID + } + return "" } func (m *WorkMomentNotificationMsg) GetWorkMomentID() string { @@ -2154,6 +2279,13 @@ func (m *WorkMomentNotificationMsg) GetWorkMomentContent() string { return "" } +func (m *WorkMomentNotificationMsg) GetCreateTime() int32 { + if m != nil { + return m.CreateTime + } + return 0 +} + type SetUserWorkMomentsLevelReq struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` Level int32 `protobuf:"varint,2,opt,name=level" json:"level,omitempty"` @@ -2167,7 +2299,7 @@ func (m *SetUserWorkMomentsLevelReq) Reset() { *m = SetUserWorkMomentsLe func (m *SetUserWorkMomentsLevelReq) String() string { return proto.CompactTextString(m) } func (*SetUserWorkMomentsLevelReq) ProtoMessage() {} func (*SetUserWorkMomentsLevelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{39} + return fileDescriptor_office_45d86d1784e03bf7, []int{41} } func (m *SetUserWorkMomentsLevelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetUserWorkMomentsLevelReq.Unmarshal(m, b) @@ -2219,7 +2351,7 @@ func (m *SetUserWorkMomentsLevelResp) Reset() { *m = SetUserWorkMomentsL func (m *SetUserWorkMomentsLevelResp) String() string { return proto.CompactTextString(m) } func (*SetUserWorkMomentsLevelResp) ProtoMessage() {} func (*SetUserWorkMomentsLevelResp) Descriptor() ([]byte, []int) { - return fileDescriptor_office_1d2fa21c23f88044, []int{40} + return fileDescriptor_office_45d86d1784e03bf7, []int{42} } func (m *SetUserWorkMomentsLevelResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetUserWorkMomentsLevelResp.Unmarshal(m, b) @@ -2268,6 +2400,8 @@ func init() { proto.RegisterType((*LikeUser)(nil), "office.LikeUser") proto.RegisterType((*NotificationUser)(nil), "office.NotificationUser") proto.RegisterType((*Comment)(nil), "office.Comment") + proto.RegisterType((*PermissionGroup)(nil), "office.PermissionGroup") + proto.RegisterType((*WorkMomentUser)(nil), "office.WorkMomentUser") proto.RegisterType((*WorkMoment)(nil), "office.WorkMoment") proto.RegisterType((*CreateOneWorkMomentReq)(nil), "office.CreateOneWorkMomentReq") proto.RegisterType((*CreateOneWorkMomentResp)(nil), "office.CreateOneWorkMomentResp") @@ -2861,106 +2995,110 @@ var _OfficeService_serviceDesc = grpc.ServiceDesc{ Metadata: "office/office.proto", } -func init() { proto.RegisterFile("office/office.proto", fileDescriptor_office_1d2fa21c23f88044) } +func init() { proto.RegisterFile("office/office.proto", fileDescriptor_office_45d86d1784e03bf7) } -var fileDescriptor_office_1d2fa21c23f88044 = []byte{ - // 1559 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x6e, 0x1c, 0xc5, - 0x13, 0xd7, 0xec, 0xa7, 0xb7, 0xd6, 0x89, 0xe3, 0x8e, 0x3f, 0x36, 0x93, 0xd8, 0xf1, 0x7f, 0x92, - 0xfc, 0x15, 0x3e, 0xb4, 0x46, 0x4b, 0x0e, 0x48, 0x88, 0x08, 0xc5, 0x9b, 0x58, 0x06, 0x6f, 0x62, - 0xc6, 0x36, 0x11, 0x1c, 0xb0, 0x26, 0xeb, 0xf6, 0x30, 0xf2, 0xee, 0xcc, 0x64, 0x7a, 0x6c, 0xe3, - 0x13, 0x52, 0x5e, 0x81, 0x03, 0x5c, 0x78, 0x0a, 0x1e, 0x01, 0x71, 0xe0, 0x84, 0x38, 0xf0, 0x06, - 0xbc, 0x03, 0x57, 0xd4, 0x3d, 0x1f, 0xdd, 0x3d, 0xd3, 0xb3, 0xbb, 0x19, 0x40, 0x82, 0x93, 0xb7, - 0xaa, 0xab, 0xab, 0xab, 0x7e, 0x5d, 0x55, 0x5d, 0x53, 0x86, 0xeb, 0xde, 0xc9, 0x89, 0x33, 0xc4, - 0x9b, 0xd1, 0x9f, 0xae, 0x1f, 0x78, 0xa1, 0x87, 0x1a, 0x11, 0xa5, 0xff, 0xef, 0x99, 0x8f, 0xdd, - 0xa3, 0x9d, 0xc1, 0xa6, 0x7f, 0x6a, 0x6f, 0xb2, 0xa5, 0x4d, 0x72, 0x7c, 0x7a, 0x74, 0x41, 0x36, - 0x2f, 0x48, 0x24, 0x6a, 0x3c, 0x04, 0xd8, 0xf2, 0xc6, 0x63, 0xcf, 0x35, 0x31, 0xf1, 0x51, 0x07, - 0x9a, 0x38, 0x08, 0xb6, 0xbc, 0x63, 0xdc, 0xd1, 0x36, 0xb4, 0xfb, 0x75, 0x33, 0x21, 0xd1, 0x0a, - 0x34, 0x70, 0x10, 0x0c, 0x88, 0xdd, 0xa9, 0x6c, 0x68, 0xf7, 0x5b, 0x66, 0x4c, 0x19, 0x1f, 0x40, - 0xf3, 0xc0, 0xb2, 0x0f, 0x09, 0x0e, 0xa8, 0xc8, 0x19, 0xc1, 0xc1, 0x4e, 0x9f, 0xed, 0x6d, 0x99, - 0x31, 0x85, 0x74, 0x98, 0xa3, 0xbf, 0x9e, 0x5a, 0x63, 0x1c, 0x6f, 0x4e, 0x69, 0xe3, 0x05, 0x54, - 0x0f, 0x2c, 0x1b, 0x2d, 0x41, 0x3d, 0xb4, 0xec, 0x74, 0x67, 0x44, 0x50, 0x6b, 0x42, 0xcb, 0x16, - 0xf6, 0x25, 0x24, 0x7a, 0x2b, 0x52, 0xb9, 0xeb, 0x90, 0xb0, 0x53, 0xdd, 0xa8, 0xde, 0x6f, 0xf7, - 0x16, 0xba, 0x31, 0x02, 0xb1, 0x35, 0x66, 0x2a, 0x60, 0x7c, 0x04, 0x57, 0xb7, 0x71, 0x48, 0x99, - 0x07, 0x96, 0x4d, 0x4c, 0xfc, 0xb2, 0xd0, 0xd2, 0x0d, 0x68, 0x7b, 0x3e, 0x0e, 0xac, 0xd0, 0xf1, - 0xdc, 0x9d, 0x7e, 0x7c, 0xa8, 0xc8, 0x32, 0x4e, 0x60, 0x41, 0xd2, 0x45, 0x7c, 0xd4, 0x03, 0x18, - 0xa6, 0x08, 0x32, 0x85, 0xed, 0x1e, 0x4a, 0xac, 0xe1, 0xd8, 0x9a, 0x82, 0x14, 0xba, 0x0d, 0xb5, - 0xd0, 0xb2, 0x49, 0xa7, 0xc2, 0x6c, 0x6f, 0x0b, 0xb6, 0x9b, 0x6c, 0xc1, 0x78, 0xa5, 0xc1, 0xfc, - 0x56, 0x80, 0xad, 0x10, 0x53, 0x1e, 0x7e, 0x29, 0x62, 0xa1, 0xc9, 0x58, 0x70, 0x67, 0x2a, 0x92, - 0x33, 0xeb, 0x00, 0xd1, 0xaf, 0x14, 0xa5, 0x96, 0x29, 0x70, 0xb2, 0xce, 0xd6, 0xf2, 0xce, 0x6e, - 0xc1, 0x15, 0xc1, 0x86, 0x72, 0xae, 0x1a, 0x5f, 0xc0, 0x7c, 0x1f, 0x8f, 0x70, 0xea, 0x48, 0x11, - 0xf6, 0x69, 0x08, 0x54, 0xc4, 0x10, 0xc8, 0x18, 0x59, 0x55, 0x1a, 0x29, 0xe8, 0x2f, 0x69, 0xe4, - 0xaf, 0x1a, 0xb4, 0xf6, 0x71, 0x58, 0xca, 0xc4, 0x0e, 0x34, 0x5d, 0x7c, 0xc1, 0x6e, 0x26, 0x32, - 0x2f, 0x21, 0x51, 0x17, 0x90, 0xe3, 0x0e, 0x03, 0x6c, 0x11, 0x7c, 0xc8, 0x6f, 0xa2, 0xc6, 0x6e, - 0x42, 0xb1, 0x82, 0xde, 0x84, 0x6b, 0x01, 0x3e, 0x3e, 0x1b, 0x8a, 0xd2, 0x75, 0x26, 0x9d, 0xe3, - 0x67, 0x81, 0x69, 0xe4, 0x81, 0xf9, 0x10, 0x20, 0x71, 0xa9, 0x24, 0x2a, 0xbf, 0x6b, 0x70, 0x75, - 0x1f, 0xbb, 0xc7, 0x03, 0x62, 0xf7, 0xa4, 0x30, 0x64, 0x96, 0x69, 0xcc, 0xb2, 0x84, 0xa4, 0x59, - 0x7e, 0x98, 0xa4, 0x64, 0x85, 0x2d, 0xa5, 0x34, 0xba, 0x05, 0xad, 0xed, 0xc0, 0x3b, 0xf3, 0x85, - 0x48, 0xe4, 0x0c, 0x0a, 0x37, 0xc1, 0xee, 0x71, 0x1a, 0x83, 0x31, 0x45, 0xe1, 0xa0, 0xbf, 0x70, - 0xb0, 0x37, 0xb2, 0xc2, 0x13, 0x2f, 0x18, 0xef, 0xf4, 0x3b, 0x75, 0x56, 0x95, 0x72, 0x7c, 0x6a, - 0xd7, 0xd0, 0x73, 0x43, 0xec, 0x86, 0x31, 0x14, 0x09, 0x99, 0x05, 0xaa, 0x99, 0x07, 0xea, 0x31, - 0x2c, 0x48, 0x5e, 0x96, 0x44, 0xeb, 0x1b, 0x0d, 0x16, 0xb7, 0x19, 0xe0, 0x54, 0xdb, 0xae, 0x17, - 0x95, 0x9a, 0x3e, 0xc0, 0x9e, 0x65, 0x3b, 0x2e, 0x3b, 0x2c, 0xd6, 0x74, 0xb7, 0x4b, 0x70, 0x70, - 0x8e, 0x83, 0x23, 0xcb, 0x77, 0x8e, 0x7c, 0x2b, 0xb0, 0xc6, 0xa4, 0x6b, 0xe2, 0x97, 0x67, 0x98, - 0x84, 0x5c, 0xd6, 0x14, 0xf6, 0x15, 0xe6, 0xf8, 0xf4, 0xf4, 0xf0, 0x00, 0xb8, 0x45, 0x52, 0xdd, - 0xd4, 0xa6, 0xd4, 0x4d, 0x11, 0xd3, 0x8a, 0x8c, 0xa9, 0x0e, 0x73, 0xf4, 0x06, 0x0e, 0x9c, 0x38, - 0xe6, 0xab, 0x66, 0x4a, 0x1b, 0x3f, 0x69, 0x80, 0xb2, 0x30, 0x94, 0xac, 0x92, 0x8f, 0x25, 0xec, - 0x2a, 0x6c, 0xcf, 0x3d, 0x25, 0x76, 0xc4, 0xf7, 0x5c, 0x82, 0x0b, 0xc0, 0x7b, 0x00, 0xed, 0x90, - 0x5b, 0x13, 0xbf, 0x17, 0x48, 0xf0, 0x3b, 0x5e, 0x32, 0x45, 0x31, 0x63, 0xc8, 0x6e, 0x33, 0xae, - 0xf4, 0x8f, 0x2e, 0x77, 0xfa, 0xff, 0x44, 0xf1, 0xb2, 0x19, 0x56, 0xd2, 0x21, 0x25, 0xb1, 0x5a, - 0x83, 0x6a, 0x68, 0xd9, 0x31, 0x48, 0xd2, 0x83, 0x42, 0xf9, 0xc6, 0x43, 0x98, 0xdb, 0x75, 0x4e, - 0x71, 0xe9, 0x77, 0xfa, 0x09, 0x5c, 0x7b, 0xea, 0x85, 0xce, 0x89, 0x33, 0x64, 0xa6, 0x97, 0xd6, - 0xf3, 0x87, 0x06, 0x4d, 0xea, 0x01, 0x8d, 0xa2, 0x12, 0xfb, 0x69, 0x4c, 0x9e, 0x58, 0x43, 0x7c, - 0x68, 0xee, 0x26, 0xc5, 0x36, 0x26, 0x29, 0xd8, 0x01, 0xf6, 0x47, 0x97, 0x51, 0x8d, 0x4c, 0x9e, - 0x33, 0x81, 0x85, 0xee, 0xc2, 0x95, 0x94, 0x64, 0xca, 0xeb, 0x4c, 0x46, 0x66, 0xd2, 0x5a, 0x15, - 0x87, 0x79, 0x5a, 0x56, 0x39, 0x43, 0xcc, 0x89, 0xa6, 0x9c, 0x13, 0xeb, 0x00, 0xc3, 0xe8, 0xb1, - 0xa4, 0x59, 0x31, 0xc7, 0xea, 0x94, 0xc0, 0x31, 0x7e, 0xac, 0x02, 0x3c, 0xf7, 0x82, 0xd3, 0x81, - 0xc7, 0x9c, 0x37, 0x60, 0xfe, 0x22, 0xa5, 0x52, 0x08, 0x24, 0x5e, 0x61, 0xd6, 0x8b, 0x00, 0x55, - 0x8b, 0x01, 0xaa, 0xc9, 0x00, 0x09, 0xa6, 0xd7, 0x65, 0xd3, 0xbb, 0xd0, 0x1a, 0xc5, 0xc1, 0x41, - 0x3a, 0x0d, 0x96, 0x1e, 0xd7, 0x92, 0x08, 0x4a, 0xa2, 0xc6, 0xe4, 0x22, 0xb4, 0x8a, 0x0c, 0xa3, - 0x3b, 0x24, 0x9d, 0xa6, 0x5c, 0x45, 0xe2, 0xbb, 0x35, 0x53, 0x01, 0x8a, 0x8b, 0x8f, 0x83, 0xb1, - 0x43, 0x08, 0x4d, 0xe2, 0x18, 0x17, 0xce, 0x41, 0x3d, 0x58, 0xe2, 0x94, 0xf0, 0xf0, 0xb5, 0xd8, - 0x33, 0xa1, 0x5c, 0x43, 0x0f, 0x60, 0x99, 0xf3, 0xd9, 0x43, 0x12, 0x6f, 0x02, 0xb6, 0x49, 0xbd, - 0x48, 0x21, 0xb7, 0x42, 0xe1, 0x84, 0x36, 0x13, 0x96, 0x78, 0x99, 0x5b, 0x9c, 0xcf, 0xdd, 0xa2, - 0x0b, 0x2b, 0x51, 0x4b, 0xf4, 0xcc, 0xc5, 0xfc, 0x36, 0x69, 0x69, 0xe8, 0x01, 0xf0, 0xcb, 0xcb, - 0x26, 0xad, 0x20, 0x2a, 0x48, 0xcd, 0xd0, 0x6f, 0x0e, 0x60, 0x55, 0x79, 0x5e, 0xc9, 0x37, 0xea, - 0x1c, 0x56, 0xa2, 0x66, 0x29, 0x67, 0xfe, 0x5f, 0x89, 0xc7, 0xe9, 0x75, 0x6e, 0x00, 0xab, 0xca, - 0x73, 0x4b, 0xba, 0x11, 0xc2, 0x12, 0x8d, 0xcb, 0x9c, 0x13, 0x45, 0x15, 0xc5, 0x80, 0xf9, 0xe7, - 0xa2, 0x73, 0x91, 0xf9, 0x12, 0x6f, 0x06, 0x27, 0x3e, 0x86, 0x65, 0xc5, 0xa9, 0x25, 0x5d, 0xf8, - 0x41, 0x83, 0xd5, 0x38, 0x59, 0x5e, 0xc7, 0x8d, 0x0b, 0x85, 0x1b, 0x17, 0x19, 0x37, 0xc4, 0x32, - 0x58, 0xcd, 0x97, 0x41, 0xa1, 0x0e, 0xd4, 0x26, 0xb6, 0x4a, 0xf5, 0x3c, 0x04, 0x4f, 0xa1, 0xa3, - 0x36, 0xba, 0x24, 0x0a, 0x5f, 0xc1, 0xd2, 0x36, 0x0e, 0xb9, 0xa2, 0xe4, 0x9d, 0x9d, 0x25, 0x1a, - 0x75, 0x98, 0xf3, 0xfc, 0x43, 0x31, 0x1e, 0x53, 0x7a, 0x86, 0xcb, 0xfc, 0x1a, 0x96, 0x15, 0x27, - 0x97, 0x7c, 0x7c, 0xe5, 0xdc, 0xaf, 0xcc, 0x92, 0xfb, 0xc6, 0x6f, 0x1a, 0xac, 0x6d, 0x7d, 0x69, - 0xb9, 0xb6, 0x80, 0xe3, 0x5e, 0x5a, 0xb7, 0xfe, 0x0e, 0x10, 0xe4, 0xca, 0x5b, 0x9d, 0xb9, 0xf2, - 0xd6, 0x26, 0x54, 0xde, 0xe9, 0x21, 0x72, 0x00, 0xeb, 0x93, 0xdc, 0x2a, 0x19, 0x28, 0xdf, 0x6a, - 0xec, 0xbe, 0xa8, 0x25, 0x5c, 0xef, 0xc4, 0x6f, 0xf9, 0xbe, 0xa2, 0x79, 0x7c, 0xfd, 0xc6, 0x7b, - 0x7a, 0x20, 0xfd, 0xac, 0xc1, 0x8a, 0xca, 0xb2, 0x92, 0xa1, 0xf4, 0x00, 0xda, 0xfc, 0x82, 0x93, - 0x01, 0x81, 0x2a, 0x96, 0x44, 0xb1, 0x4c, 0xa7, 0x5c, 0x2d, 0xd9, 0x29, 0x1b, 0xdf, 0x6b, 0x70, - 0x33, 0xf6, 0xe5, 0x49, 0xe0, 0x60, 0xf7, 0xf8, 0x5f, 0x86, 0xf5, 0x2f, 0x1a, 0xdc, 0x2a, 0xb6, - 0xef, 0xbf, 0x88, 0xf8, 0x77, 0x15, 0xb8, 0xc1, 0x8f, 0x10, 0x5b, 0xec, 0x01, 0xb1, 0xd1, 0x3b, - 0x70, 0xdd, 0x95, 0x59, 0x07, 0x97, 0x7e, 0x32, 0x9a, 0x53, 0x2d, 0xa1, 0x37, 0x68, 0x71, 0x1f, - 0x0b, 0x65, 0x28, 0xd7, 0x99, 0x25, 0xeb, 0xb9, 0xf2, 0x52, 0x9d, 0xf8, 0xe2, 0xd7, 0x0a, 0x3b, - 0xd0, 0x7a, 0x71, 0x07, 0xda, 0x90, 0x3b, 0xd0, 0xb7, 0x61, 0x91, 0x6b, 0xdf, 0x92, 0xda, 0xe8, - 0xfc, 0x82, 0x31, 0x02, 0x7d, 0x3f, 0x97, 0x57, 0xbb, 0xf8, 0x1c, 0x8f, 0xa6, 0x7c, 0x89, 0x8d, - 0xa8, 0x0c, 0x73, 0xbf, 0x6e, 0x46, 0xc4, 0x0c, 0xa1, 0xf5, 0x09, 0xdc, 0x2c, 0x3c, 0xad, 0x5c, - 0x60, 0xf5, 0x5e, 0x01, 0x5c, 0x79, 0xc6, 0x24, 0xf6, 0x71, 0x70, 0xee, 0x0c, 0x31, 0x7a, 0x08, - 0x6d, 0x61, 0x7a, 0x88, 0x56, 0x12, 0x05, 0xf2, 0x78, 0x52, 0x5f, 0x55, 0xf2, 0x89, 0x8f, 0xde, - 0x83, 0x56, 0x3a, 0x90, 0x43, 0x4b, 0xe9, 0xf1, 0xc2, 0x9c, 0x50, 0x5f, 0x56, 0x70, 0xa3, 0x9d, - 0xe9, 0x94, 0x8c, 0xef, 0x14, 0x07, 0x73, 0x7c, 0xa7, 0x3c, 0x4e, 0xdb, 0x84, 0x46, 0x34, 0x46, - 0x42, 0x8b, 0x89, 0x40, 0x3a, 0x29, 0xd3, 0x51, 0x96, 0x45, 0x7c, 0xea, 0xa4, 0x30, 0x4e, 0xe1, - 0x4e, 0xca, 0x93, 0x24, 0xee, 0x64, 0x76, 0xf6, 0xb2, 0xcd, 0xc6, 0xb5, 0xc2, 0xfc, 0x00, 0xdd, - 0x10, 0xf0, 0x90, 0xc7, 0x2b, 0xba, 0x5e, 0xb4, 0x94, 0x2a, 0x12, 0x3e, 0xae, 0x25, 0x45, 0xf2, - 0x97, 0xbd, 0xa4, 0x28, 0xfb, 0x3d, 0xfe, 0x29, 0x5c, 0x57, 0x34, 0xe1, 0x68, 0x5d, 0x86, 0x3a, - 0xdb, 0xc6, 0xe9, 0xb7, 0x27, 0xae, 0x47, 0x7a, 0x15, 0x5d, 0x31, 0xd7, 0xab, 0x6e, 0xd5, 0xb9, - 0xde, 0xa2, 0x96, 0x7a, 0x0f, 0x16, 0x73, 0x8d, 0x2a, 0xba, 0x25, 0x7e, 0xd1, 0xe5, 0x74, 0xae, - 0x4d, 0x58, 0x25, 0x3e, 0xfa, 0x0c, 0x96, 0x54, 0x7d, 0x1f, 0xba, 0x9d, 0xa9, 0x2e, 0x39, 0xbd, - 0x1b, 0x93, 0x05, 0x22, 0x63, 0x73, 0x8d, 0x18, 0x37, 0x56, 0xd5, 0x1d, 0x72, 0x63, 0xd5, 0x1d, - 0xdc, 0x29, 0xe8, 0xc5, 0x1d, 0x08, 0xba, 0x97, 0x5a, 0x34, 0xa9, 0xf9, 0xd2, 0xff, 0x3f, 0x8b, - 0x18, 0xf1, 0xd1, 0x7e, 0x3a, 0xc1, 0x11, 0xea, 0x06, 0x5a, 0xcb, 0x44, 0x93, 0xfc, 0x8e, 0xea, - 0xeb, 0x93, 0x96, 0x89, 0x8f, 0x30, 0x74, 0x8a, 0x9e, 0x39, 0x74, 0x27, 0xb3, 0x57, 0xf5, 0x50, - 0xeb, 0x77, 0xa7, 0x0b, 0x11, 0x1f, 0xbd, 0x80, 0xd5, 0x82, 0x9a, 0x87, 0x0c, 0x21, 0xb1, 0x0b, - 0x4a, 0xb0, 0x7e, 0x67, 0xaa, 0x0c, 0xf1, 0x1f, 0x2d, 0x7e, 0xbe, 0xd0, 0x8d, 0xff, 0x39, 0xf5, - 0x7e, 0xf4, 0xe7, 0x45, 0x83, 0xfd, 0xe7, 0xe9, 0xdd, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xaa, - 0xd5, 0x09, 0xd5, 0xbb, 0x1a, 0x00, 0x00, +var fileDescriptor_office_45d86d1784e03bf7 = []byte{ + // 1621 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0x4f, 0x6f, 0xdc, 0x44, + 0x14, 0x97, 0x77, 0xb3, 0xd9, 0xec, 0xdb, 0xb4, 0x69, 0x26, 0xff, 0xb6, 0x6e, 0x93, 0x06, 0xb7, + 0x45, 0x15, 0xa0, 0x04, 0x85, 0x0a, 0x21, 0x10, 0x15, 0x6a, 0xb6, 0x8d, 0x16, 0xb2, 0x6d, 0x70, + 0x12, 0x2a, 0x38, 0x10, 0xb9, 0x9b, 0x89, 0xb1, 0xb2, 0xb1, 0x5d, 0x8f, 0x93, 0xd0, 0x13, 0x52, + 0xcf, 0x70, 0xe2, 0xcc, 0xa7, 0xe0, 0x33, 0x70, 0xe0, 0x84, 0x38, 0xf0, 0x0d, 0xf8, 0x0e, 0x5c, + 0xd1, 0x8c, 0xed, 0xf9, 0x63, 0x8f, 0x77, 0x17, 0x17, 0x0e, 0x9c, 0xd6, 0xef, 0xcd, 0x9b, 0x37, + 0xef, 0xfd, 0xe6, 0xcd, 0x9b, 0x37, 0x6f, 0x61, 0x21, 0x38, 0x39, 0xf1, 0x06, 0x78, 0x33, 0xf9, + 0xd9, 0x08, 0xa3, 0x20, 0x0e, 0xd0, 0x74, 0x42, 0x99, 0x6f, 0x3c, 0x0d, 0xb1, 0x7f, 0xd4, 0xeb, + 0x6f, 0x86, 0xa7, 0xee, 0x26, 0x1b, 0xda, 0x24, 0xc7, 0xa7, 0x47, 0x97, 0x64, 0xf3, 0x92, 0x24, + 0xa2, 0xd6, 0x03, 0x80, 0xed, 0xe0, 0xec, 0x2c, 0xf0, 0x6d, 0x4c, 0x42, 0xd4, 0x81, 0x26, 0x8e, + 0xa2, 0xed, 0xe0, 0x18, 0x77, 0x8c, 0x75, 0xe3, 0x5e, 0xc3, 0xce, 0x48, 0xb4, 0x0c, 0xd3, 0x38, + 0x8a, 0xfa, 0xc4, 0xed, 0xd4, 0xd6, 0x8d, 0x7b, 0x2d, 0x3b, 0xa5, 0xac, 0x8f, 0xa1, 0x79, 0xe0, + 0xb8, 0x87, 0x04, 0x47, 0x54, 0xe4, 0x9c, 0xe0, 0xa8, 0xd7, 0x65, 0x73, 0x5b, 0x76, 0x4a, 0x21, + 0x13, 0x66, 0xe8, 0xd7, 0x13, 0xe7, 0x0c, 0xa7, 0x93, 0x39, 0x6d, 0x3d, 0x87, 0xfa, 0x81, 0xe3, + 0xa2, 0x45, 0x68, 0xc4, 0x8e, 0xcb, 0x67, 0x26, 0x04, 0xb5, 0x26, 0x76, 0x5c, 0x69, 0x5e, 0x46, + 0xa2, 0xb7, 0x13, 0x95, 0xbb, 0x1e, 0x89, 0x3b, 0xf5, 0xf5, 0xfa, 0xbd, 0xf6, 0xd6, 0xdc, 0x46, + 0x8a, 0x40, 0x6a, 0x8d, 0xcd, 0x05, 0xac, 0x4f, 0xe1, 0xea, 0x0e, 0x8e, 0x29, 0xf3, 0xc0, 0x71, + 0x89, 0x8d, 0x5f, 0x94, 0x5a, 0xba, 0x0e, 0xed, 0x20, 0xc4, 0x91, 0x13, 0x7b, 0x81, 0xdf, 0xeb, + 0xa6, 0x8b, 0xca, 0x2c, 0xeb, 0x04, 0xe6, 0x14, 0x5d, 0x24, 0x44, 0x5b, 0x00, 0x03, 0x8e, 0x20, + 0x53, 0xd8, 0xde, 0x42, 0x99, 0x35, 0x02, 0x5b, 0x5b, 0x92, 0x42, 0xb7, 0x60, 0x2a, 0x76, 0x5c, + 0xd2, 0xa9, 0x31, 0xdb, 0xdb, 0x92, 0xed, 0x36, 0x1b, 0xb0, 0x5e, 0x19, 0x30, 0xbb, 0x1d, 0x61, + 0x27, 0xc6, 0x94, 0x87, 0x5f, 0xc8, 0x58, 0x18, 0x2a, 0x16, 0xc2, 0x99, 0x9a, 0xe2, 0xcc, 0x1a, + 0x40, 0xf2, 0xc5, 0x51, 0x6a, 0xd9, 0x12, 0x27, 0xef, 0xec, 0x54, 0xd1, 0xd9, 0x6d, 0xb8, 0x22, + 0xd9, 0x50, 0xcd, 0x55, 0xeb, 0x6b, 0x98, 0xed, 0xe2, 0x21, 0xe6, 0x8e, 0x94, 0x61, 0xcf, 0x43, + 0xa0, 0x26, 0x87, 0x40, 0xce, 0xc8, 0xba, 0xd6, 0x48, 0x49, 0x7f, 0x45, 0x23, 0x7f, 0x37, 0xa0, + 0xb5, 0x8f, 0xe3, 0x4a, 0x26, 0x76, 0xa0, 0xe9, 0xe3, 0x4b, 0xb6, 0x33, 0x89, 0x79, 0x19, 0x89, + 0x36, 0x00, 0x79, 0xfe, 0x20, 0xc2, 0x0e, 0xc1, 0x87, 0x62, 0x27, 0xa6, 0xd8, 0x4e, 0x68, 0x46, + 0xd0, 0x5b, 0x70, 0x2d, 0xc2, 0xc7, 0xe7, 0x03, 0x59, 0xba, 0xc1, 0xa4, 0x0b, 0xfc, 0x3c, 0x30, + 0xd3, 0x45, 0x60, 0x3e, 0x01, 0xc8, 0x5c, 0xaa, 0x88, 0xca, 0x9f, 0x06, 0x5c, 0xdd, 0xc7, 0xfe, + 0x71, 0x9f, 0xb8, 0x5b, 0x4a, 0x18, 0x32, 0xcb, 0x0c, 0x66, 0x59, 0x46, 0xd2, 0x53, 0x7e, 0x98, + 0x1d, 0xc9, 0x1a, 0x1b, 0xe2, 0x34, 0xba, 0x09, 0xad, 0x9d, 0x28, 0x38, 0x0f, 0xa5, 0x48, 0x14, + 0x0c, 0x0a, 0x37, 0xc1, 0xfe, 0x31, 0x8f, 0xc1, 0x94, 0xa2, 0x70, 0xd0, 0x2f, 0x1c, 0xed, 0x0d, + 0x9d, 0xf8, 0x24, 0x88, 0xce, 0x7a, 0xdd, 0x4e, 0x83, 0x65, 0xa5, 0x02, 0x9f, 0xda, 0x35, 0x08, + 0xfc, 0x18, 0xfb, 0x71, 0x0a, 0x45, 0x46, 0xe6, 0x81, 0x6a, 0x16, 0x81, 0x7a, 0x04, 0x73, 0x8a, + 0x97, 0x15, 0xd1, 0xfa, 0xd1, 0x80, 0xf9, 0x1d, 0x06, 0x38, 0xd5, 0xb6, 0x1b, 0x24, 0xa9, 0xa6, + 0x0b, 0xb0, 0xe7, 0xb8, 0x9e, 0xcf, 0x16, 0x4b, 0x35, 0xdd, 0xd9, 0x20, 0x38, 0xba, 0xc0, 0xd1, + 0x91, 0x13, 0x7a, 0x47, 0xa1, 0x13, 0x39, 0x67, 0x64, 0xc3, 0xc6, 0x2f, 0xce, 0x31, 0x89, 0x85, + 0xac, 0x2d, 0xcd, 0x2b, 0x3d, 0xe3, 0xe3, 0x8f, 0x47, 0x00, 0x20, 0x2c, 0x52, 0xf2, 0xa6, 0x31, + 0x26, 0x6f, 0xca, 0x98, 0xd6, 0x54, 0x4c, 0x4d, 0x98, 0xa1, 0x3b, 0x70, 0xe0, 0xa5, 0x31, 0x5f, + 0xb7, 0x39, 0x6d, 0xfd, 0x62, 0x00, 0xca, 0xc3, 0x50, 0x31, 0x4b, 0x3e, 0x52, 0xb0, 0xab, 0xb1, + 0x39, 0x77, 0xb5, 0xd8, 0x91, 0x30, 0xf0, 0x09, 0x2e, 0x01, 0xef, 0x3e, 0xb4, 0x63, 0x61, 0x4d, + 0x7a, 0x5f, 0x20, 0xc9, 0xef, 0x74, 0xc8, 0x96, 0xc5, 0xac, 0x01, 0xdb, 0xcd, 0x34, 0xd3, 0x3f, + 0x7c, 0xd9, 0xeb, 0xfe, 0x17, 0xc9, 0xcb, 0x65, 0x58, 0x29, 0x8b, 0x54, 0xc4, 0x6a, 0x15, 0xea, + 0xb1, 0xe3, 0xa6, 0x20, 0x29, 0x17, 0x0a, 0xe5, 0x5b, 0x0f, 0x60, 0x66, 0xd7, 0x3b, 0xc5, 0x95, + 0xef, 0xe9, 0xc7, 0x70, 0xed, 0x49, 0x10, 0x7b, 0x27, 0xde, 0x80, 0x99, 0x5e, 0x59, 0xcf, 0x5f, + 0x06, 0x34, 0xa9, 0x07, 0x34, 0x8a, 0x2a, 0xcc, 0xa7, 0x31, 0x79, 0xe2, 0x0c, 0xf0, 0xa1, 0xbd, + 0x9b, 0x25, 0xdb, 0x94, 0xa4, 0x60, 0x47, 0x38, 0x1c, 0xbe, 0x4c, 0x72, 0x64, 0x76, 0x9d, 0x49, + 0x2c, 0x74, 0x07, 0xae, 0x70, 0x92, 0x29, 0x6f, 0x30, 0x19, 0x95, 0x49, 0x73, 0x55, 0x1a, 0xe6, + 0x3c, 0xad, 0x0a, 0x86, 0x7c, 0x26, 0x9a, 0xea, 0x99, 0x58, 0x03, 0x18, 0x24, 0x97, 0x25, 0x3d, + 0x15, 0x33, 0x2c, 0x4f, 0x49, 0x1c, 0xab, 0x07, 0x73, 0x7b, 0x38, 0x3a, 0xf3, 0x08, 0xf1, 0x02, + 0x9f, 0x25, 0x3f, 0xba, 0x94, 0x4b, 0x3f, 0xa4, 0x5b, 0x5d, 0x30, 0xe8, 0x52, 0x8c, 0xe0, 0x51, + 0x95, 0x91, 0x56, 0x17, 0xae, 0x3e, 0x0b, 0xa2, 0xd3, 0x7e, 0x40, 0x61, 0xac, 0xbc, 0x15, 0xdf, + 0x4f, 0x01, 0x08, 0x35, 0xc8, 0x82, 0xd9, 0x4b, 0x4e, 0x71, 0x45, 0x0a, 0xaf, 0x34, 0x0d, 0xc9, + 0xcb, 0xd4, 0xcb, 0x77, 0x6c, 0x4a, 0xdd, 0x31, 0x09, 0xcb, 0x86, 0x8a, 0xe5, 0x87, 0x30, 0x3b, + 0x4c, 0xa3, 0x95, 0xa5, 0xaa, 0x69, 0x76, 0x64, 0x97, 0xb3, 0xa8, 0x56, 0x9d, 0xb7, 0x15, 0x59, + 0x9a, 0xe2, 0x06, 0x49, 0x80, 0x91, 0x4e, 0x53, 0x4d, 0x71, 0x69, 0xe0, 0xd9, 0x5c, 0x80, 0x6e, + 0x5a, 0xc8, 0x37, 0x25, 0xdb, 0x34, 0xc1, 0x41, 0x8f, 0x01, 0x09, 0x8a, 0x9b, 0xd3, 0x1a, 0x69, + 0x8e, 0x66, 0x06, 0xea, 0xc1, 0x42, 0xa8, 0x6e, 0x3e, 0x53, 0x04, 0x4c, 0xd1, 0x4a, 0xa6, 0x28, + 0x17, 0x1f, 0xb6, 0x6e, 0x0e, 0x7a, 0x1f, 0xc0, 0x89, 0xb9, 0x29, 0xed, 0x91, 0xa6, 0x48, 0x92, + 0xb9, 0xf8, 0x9c, 0x2d, 0xc4, 0xa7, 0x0f, 0xcb, 0x49, 0xb1, 0xf7, 0xd4, 0xc7, 0x42, 0x0d, 0x4d, + 0x7a, 0x5b, 0x00, 0x22, 0x0a, 0xf2, 0xe9, 0x48, 0x12, 0x95, 0xa4, 0x26, 0xa8, 0xa4, 0xfb, 0xb0, + 0xa2, 0x5d, 0xaf, 0xe2, 0xed, 0x7b, 0x01, 0xcb, 0x49, 0x19, 0x58, 0x30, 0xff, 0x75, 0x02, 0x7b, + 0x7c, 0x06, 0xef, 0xc3, 0x8a, 0x76, 0xdd, 0x8a, 0x6e, 0xc4, 0xb0, 0x48, 0xf3, 0x74, 0xc1, 0x89, + 0xb2, 0x03, 0x6e, 0xc1, 0xec, 0x33, 0xd9, 0xb9, 0xc4, 0x7c, 0x85, 0x37, 0x81, 0x13, 0x9f, 0xc1, + 0x92, 0x66, 0xd5, 0x8a, 0x2e, 0xfc, 0x6c, 0xc0, 0x4a, 0x7a, 0xd2, 0xfe, 0x89, 0x1b, 0x97, 0x1a, + 0x37, 0x2e, 0x73, 0x6e, 0xc8, 0x09, 0xbe, 0x5e, 0x4c, 0xf0, 0x52, 0x42, 0x99, 0x1a, 0x59, 0x04, + 0x36, 0x8a, 0x10, 0x3c, 0x81, 0x8e, 0xde, 0xe8, 0x8a, 0x28, 0x7c, 0x0b, 0x8b, 0x3b, 0x38, 0x16, + 0x8a, 0xb2, 0x0a, 0x62, 0x92, 0x68, 0x34, 0x61, 0x26, 0x08, 0x0f, 0xe5, 0x78, 0xe4, 0xf4, 0x04, + 0x9b, 0xf9, 0x1d, 0x2c, 0x69, 0x56, 0xae, 0x58, 0x56, 0xa8, 0x67, 0xbf, 0x36, 0xc9, 0xd9, 0xb7, + 0xfe, 0x30, 0x60, 0x75, 0xfb, 0x1b, 0xc7, 0x77, 0x25, 0x1c, 0x45, 0x6a, 0xfb, 0x37, 0x40, 0x50, + 0xd3, 0x76, 0xbd, 0x90, 0xb6, 0xb7, 0x60, 0x51, 0x4d, 0xc2, 0xca, 0xd3, 0x4b, 0x3b, 0x36, 0x41, + 0x88, 0x1c, 0xc0, 0xda, 0x28, 0xb7, 0xaa, 0x1f, 0x97, 0xa5, 0xb4, 0x06, 0x14, 0x7a, 0x47, 0x76, + 0x29, 0x46, 0x21, 0xa3, 0x3e, 0x37, 0xea, 0x15, 0x9f, 0x1b, 0xe3, 0x5b, 0x03, 0xbf, 0x1a, 0xb0, + 0xac, 0xb3, 0xba, 0x62, 0x98, 0xdd, 0x87, 0xb6, 0xd8, 0xfc, 0xac, 0x2d, 0xa2, 0x8b, 0x33, 0x59, + 0x2c, 0xf7, 0x3e, 0xa8, 0x57, 0x7c, 0x1f, 0x58, 0x3f, 0x19, 0x70, 0x23, 0xf5, 0xe5, 0x71, 0xe4, + 0x61, 0xff, 0x78, 0xc2, 0x7d, 0xe8, 0x6a, 0x9e, 0x27, 0xaf, 0x8d, 0xb5, 0xe6, 0x40, 0xff, 0x66, + 0xc0, 0xcd, 0x72, 0xfb, 0xfe, 0x8f, 0x88, 0xff, 0x50, 0x87, 0xeb, 0x62, 0x09, 0xf9, 0x61, 0xd1, + 0x27, 0x2e, 0x7a, 0x17, 0x16, 0x7c, 0x95, 0x75, 0xf0, 0x32, 0xcc, 0x1a, 0x92, 0xba, 0xa1, 0x62, + 0x65, 0x5f, 0xd3, 0x55, 0xf6, 0xaf, 0x73, 0x81, 0x28, 0xaf, 0x82, 0x46, 0xfe, 0x55, 0x90, 0xcf, + 0x67, 0xd3, 0x23, 0x4b, 0x8c, 0x66, 0x69, 0xed, 0x3c, 0x53, 0x5e, 0x3b, 0xb7, 0xd4, 0xda, 0xf9, + 0x1d, 0x98, 0x17, 0xda, 0xb7, 0x53, 0x9b, 0x81, 0xc9, 0x14, 0x07, 0x72, 0xb5, 0x5f, 0xbb, 0x50, + 0xfb, 0x0d, 0xc1, 0xdc, 0x2f, 0x1c, 0xe6, 0x5d, 0x7c, 0x81, 0x87, 0x63, 0x1e, 0xbd, 0x43, 0x2a, + 0xc3, 0xd0, 0x6e, 0xd8, 0x09, 0x31, 0x41, 0x3c, 0x7f, 0x0e, 0x37, 0x4a, 0x57, 0xab, 0x16, 0xcd, + 0x5b, 0xaf, 0x00, 0xae, 0x3c, 0x65, 0x12, 0xfb, 0x38, 0xba, 0xf0, 0x06, 0x18, 0x3d, 0x80, 0xb6, + 0xd4, 0xa8, 0x45, 0xbc, 0x42, 0x56, 0x3b, 0xc1, 0xe6, 0x8a, 0x96, 0x4f, 0x42, 0xf4, 0x01, 0xb4, + 0x78, 0xef, 0x13, 0x2d, 0xf2, 0xe5, 0xa5, 0x96, 0xac, 0xb9, 0xa4, 0xe1, 0x26, 0x33, 0x79, 0x43, + 0x52, 0xcc, 0x94, 0x7b, 0xa0, 0x62, 0xa6, 0xda, 0xb9, 0xdc, 0x84, 0xe9, 0xa4, 0x63, 0x87, 0xe6, + 0x33, 0x01, 0xde, 0x94, 0x34, 0x51, 0x9e, 0x45, 0x42, 0xea, 0xa4, 0xd4, 0xb9, 0x12, 0x4e, 0xaa, + 0x4d, 0x3b, 0xe1, 0x64, 0xbe, 0xcd, 0xb5, 0xc3, 0x3a, 0xe3, 0x52, 0xab, 0x06, 0x5d, 0x97, 0xf0, + 0x50, 0x3b, 0x59, 0xa6, 0x59, 0x36, 0xc4, 0x15, 0x49, 0x7d, 0x0c, 0x45, 0x91, 0xda, 0x44, 0x51, + 0x14, 0xe5, 0x5b, 0x1f, 0x5f, 0xc0, 0x82, 0xe6, 0x55, 0x80, 0xd6, 0x54, 0xa8, 0xf3, 0x75, 0xa5, + 0x79, 0x6b, 0xe4, 0x78, 0xa2, 0x57, 0x53, 0xa6, 0x0b, 0xbd, 0xfa, 0xb7, 0x83, 0xd0, 0x5b, 0x56, + 0xe3, 0xef, 0xc1, 0x7c, 0xa1, 0x72, 0x46, 0x37, 0xb3, 0x59, 0xba, 0x52, 0xde, 0x5c, 0x1d, 0x31, + 0x4a, 0x42, 0xf4, 0x25, 0x2c, 0xea, 0x0a, 0x51, 0x74, 0x2b, 0xf7, 0x8a, 0x2d, 0xe8, 0x5d, 0x1f, + 0x2d, 0x90, 0x18, 0x5b, 0xa8, 0x0c, 0x85, 0xb1, 0xba, 0x72, 0x55, 0x18, 0xab, 0x2f, 0x29, 0x4f, + 0xc1, 0x2c, 0x2f, 0x89, 0xd0, 0x5d, 0x6e, 0xd1, 0xa8, 0x6a, 0xd0, 0x7c, 0x73, 0x12, 0x31, 0x12, + 0xa2, 0x7d, 0xde, 0x2c, 0x93, 0xf2, 0x06, 0x5a, 0xcd, 0x45, 0x93, 0x7a, 0x79, 0x9b, 0x6b, 0xa3, + 0x86, 0x49, 0x88, 0x30, 0x74, 0xca, 0xee, 0x56, 0x74, 0x3b, 0x37, 0x57, 0x57, 0x1d, 0x98, 0x77, + 0xc6, 0x0b, 0x91, 0x10, 0x3d, 0x87, 0x95, 0x92, 0x9c, 0x87, 0x2c, 0xe9, 0x60, 0x97, 0xa4, 0x60, + 0xf3, 0xf6, 0x58, 0x19, 0x12, 0x3e, 0x9c, 0xff, 0x6a, 0x6e, 0x23, 0xfd, 0x1f, 0xf0, 0xa3, 0xe4, + 0xe7, 0xf9, 0x34, 0xfb, 0x93, 0xef, 0xbd, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x01, 0xfa, 0xac, + 0xd6, 0x26, 0x1c, 0x00, 0x00, } diff --git a/pkg/proto/office/office.proto b/pkg/proto/office/office.proto index 0dd518e48..04ead1788 100644 --- a/pkg/proto/office/office.proto +++ b/pkg/proto/office/office.proto @@ -129,18 +129,28 @@ message Comment { int32 createTime = 8; } +message PermissionGroup { + string groupName = 1; + string groupID = 2; +} + +message WorkMomentUser { + string userID = 1; + string userName = 2; +} + message WorkMoment { string workMomentID = 1; string userID = 2; string userName = 3; string faceURL = 4; string content = 5; - repeated LikeUser likeUsers = 6; + repeated WorkMomentUser likeUserList = 6; repeated Comment comments = 7; int32 permission = 8; - repeated string permissionUserIDList = 9; - repeated string permissionGroupIDList = 10; - repeated string atUserIDList = 11; + repeated WorkMomentUser permissionUserList = 9; + repeated PermissionGroup permissionGroupList = 10; + repeated WorkMomentUser atUserList = 11; int32 createTime = 12; } @@ -210,8 +220,9 @@ message ChangeWorkMomentPermissionResp { message GetUserWorkMomentsReq { string userID = 1; - server_api_params.RequestPagination Pagination = 2; - string operationID = 3; + string opUserID = 2; + server_api_params.RequestPagination Pagination = 3; + string operationID = 4; } message GetUserWorkMomentsResp { @@ -234,12 +245,16 @@ message GetUserFriendWorkMomentsResp { message WorkMomentNotificationMsg { int32 notificationMsgType = 1; - Comment comment = 2; - string workMomentID = 3; - string userID = 4; - string userName = 5; - string faceURL = 6; - string workMomentContent = 7; + string replyUserName = 2; + string replyUserID = 3; + string content = 4; + string contentID = 5; + string workMomentID = 6; + string userID = 7; + string userName = 8; + string faceURL = 9; + string workMomentContent = 10; + int32 createTime = 11; } message SetUserWorkMomentsLevelReq { diff --git a/pkg/proto/proto_dir.cfg b/pkg/proto/proto_dir.cfg index bc7945472..99b94de97 100644 --- a/pkg/proto/proto_dir.cfg +++ b/pkg/proto/proto_dir.cfg @@ -12,4 +12,5 @@ all_proto=( push/push.proto relay/relay.proto sdk_ws/ws.proto + conversation/conversation.proto ) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index f53793083..2f5ca5e67 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_d729044b7cff282f, []int{0} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{1} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{2} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{3} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{4} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{5} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{6} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{7} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{8} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{9} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{10} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{11} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{12} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{13} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{14} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{15} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{16} + return fileDescriptor_ws_8b0ea2633e539530, []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_d729044b7cff282f, []int{17} + return fileDescriptor_ws_8b0ea2633e539530, []int{17} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1521,6 +1521,7 @@ type MsgData struct { 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:"-"` @@ -1530,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_d729044b7cff282f, []int{18} + return fileDescriptor_ws_8b0ea2633e539530, []int{18} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1676,6 +1677,13 @@ func (m *MsgData) GetOfflinePushInfo() *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"` @@ -1691,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_d729044b7cff282f, []int{19} + return fileDescriptor_ws_8b0ea2633e539530, []int{19} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1759,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_d729044b7cff282f, []int{20} + return fileDescriptor_ws_8b0ea2633e539530, []int{20} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1816,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_d729044b7cff282f, []int{21} + return fileDescriptor_ws_8b0ea2633e539530, []int{21} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1885,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_d729044b7cff282f, []int{22} + return fileDescriptor_ws_8b0ea2633e539530, []int{22} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1940,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_d729044b7cff282f, []int{23} + return fileDescriptor_ws_8b0ea2633e539530, []int{23} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -1996,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_d729044b7cff282f, []int{24} + return fileDescriptor_ws_8b0ea2633e539530, []int{24} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2051,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_d729044b7cff282f, []int{25} + return fileDescriptor_ws_8b0ea2633e539530, []int{25} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2106,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_d729044b7cff282f, []int{26} + return fileDescriptor_ws_8b0ea2633e539530, []int{26} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2162,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_d729044b7cff282f, []int{27} + return fileDescriptor_ws_8b0ea2633e539530, []int{27} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2225,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_d729044b7cff282f, []int{28} + return fileDescriptor_ws_8b0ea2633e539530, []int{28} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2288,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_d729044b7cff282f, []int{29} + return fileDescriptor_ws_8b0ea2633e539530, []int{29} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2350,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_d729044b7cff282f, []int{30} + return fileDescriptor_ws_8b0ea2633e539530, []int{30} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2404,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_d729044b7cff282f, []int{31} + return fileDescriptor_ws_8b0ea2633e539530, []int{31} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2460,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_d729044b7cff282f, []int{32} + return fileDescriptor_ws_8b0ea2633e539530, []int{32} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2529,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_d729044b7cff282f, []int{33} + return fileDescriptor_ws_8b0ea2633e539530, []int{33} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2590,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_d729044b7cff282f, []int{34} + return fileDescriptor_ws_8b0ea2633e539530, []int{34} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2644,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_d729044b7cff282f, []int{35} + return fileDescriptor_ws_8b0ea2633e539530, []int{35} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2699,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_d729044b7cff282f, []int{36} + return fileDescriptor_ws_8b0ea2633e539530, []int{36} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2759,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_d729044b7cff282f, []int{37} + return fileDescriptor_ws_8b0ea2633e539530, []int{37} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2806,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_d729044b7cff282f, []int{38} + return fileDescriptor_ws_8b0ea2633e539530, []int{38} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2859,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_d729044b7cff282f, []int{39} + return fileDescriptor_ws_8b0ea2633e539530, []int{39} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2905,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_d729044b7cff282f, []int{40} + return fileDescriptor_ws_8b0ea2633e539530, []int{40} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2945,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_d729044b7cff282f, []int{41} + return fileDescriptor_ws_8b0ea2633e539530, []int{41} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -2992,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_d729044b7cff282f, []int{42} + return fileDescriptor_ws_8b0ea2633e539530, []int{42} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3040,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_d729044b7cff282f, []int{43} + return fileDescriptor_ws_8b0ea2633e539530, []int{43} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3093,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_d729044b7cff282f, []int{44} + return fileDescriptor_ws_8b0ea2633e539530, []int{44} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3131,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_d729044b7cff282f, []int{45} + return fileDescriptor_ws_8b0ea2633e539530, []int{45} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3169,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_d729044b7cff282f, []int{46} + return fileDescriptor_ws_8b0ea2633e539530, []int{46} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3207,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_d729044b7cff282f, []int{47} + return fileDescriptor_ws_8b0ea2633e539530, []int{47} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3246,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_d729044b7cff282f, []int{48} + return fileDescriptor_ws_8b0ea2633e539530, []int{48} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3285,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_d729044b7cff282f, []int{49} + return fileDescriptor_ws_8b0ea2633e539530, []int{49} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3325,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_d729044b7cff282f, []int{50} + return fileDescriptor_ws_8b0ea2633e539530, []int{50} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3379,7 +3387,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_d729044b7cff282f, []int{51} + return fileDescriptor_ws_8b0ea2633e539530, []int{51} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3425,7 +3433,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_d729044b7cff282f, []int{52} + return fileDescriptor_ws_8b0ea2633e539530, []int{52} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3478,7 +3486,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_d729044b7cff282f, []int{53} + return fileDescriptor_ws_8b0ea2633e539530, []int{53} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3745,7 +3753,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_d729044b7cff282f, []int{54} + return fileDescriptor_ws_8b0ea2633e539530, []int{54} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4013,7 +4021,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_d729044b7cff282f, []int{55} + return fileDescriptor_ws_8b0ea2633e539530, []int{55} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4109,7 +4117,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_d729044b7cff282f, []int{56} + return fileDescriptor_ws_8b0ea2633e539530, []int{56} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4164,7 +4172,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_d729044b7cff282f, []int{57} + return fileDescriptor_ws_8b0ea2633e539530, []int{57} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4225,7 +4233,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_d729044b7cff282f, []int{58} + return fileDescriptor_ws_8b0ea2633e539530, []int{58} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4280,7 +4288,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_d729044b7cff282f, []int{59} + return fileDescriptor_ws_8b0ea2633e539530, []int{59} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4341,7 +4349,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_d729044b7cff282f, []int{60} + return fileDescriptor_ws_8b0ea2633e539530, []int{60} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4396,7 +4404,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_d729044b7cff282f, []int{61} + return fileDescriptor_ws_8b0ea2633e539530, []int{61} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4454,7 +4462,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_d729044b7cff282f, []int{62} + return fileDescriptor_ws_8b0ea2633e539530, []int{62} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4489,7 +4497,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_d729044b7cff282f, []int{63} + return fileDescriptor_ws_8b0ea2633e539530, []int{63} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4557,7 +4565,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_d729044b7cff282f, []int{64} + return fileDescriptor_ws_8b0ea2633e539530, []int{64} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4611,7 +4619,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_d729044b7cff282f, []int{65} + return fileDescriptor_ws_8b0ea2633e539530, []int{65} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4662,7 +4670,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_d729044b7cff282f, []int{66} + return fileDescriptor_ws_8b0ea2633e539530, []int{66} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4697,7 +4705,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_d729044b7cff282f, []int{67} + return fileDescriptor_ws_8b0ea2633e539530, []int{67} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4762,7 +4770,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_d729044b7cff282f, []int{68} + return fileDescriptor_ws_8b0ea2633e539530, []int{68} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -4796,7 +4804,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_d729044b7cff282f, []int{69} + return fileDescriptor_ws_8b0ea2633e539530, []int{69} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -4856,7 +4864,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_d729044b7cff282f, []int{70} + return fileDescriptor_ws_8b0ea2633e539530, []int{70} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -4965,198 +4973,199 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_d729044b7cff282f) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_8b0ea2633e539530) } -var fileDescriptor_ws_d729044b7cff282f = []byte{ - // 3033 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, 0xf1, 0x8f, 0xde, 0xfd, 0x3a, 0x83, 0xd9, 0x2c, - 0xa6, 0xb1, 0x42, 0x08, 0xb0, 0x41, 0x89, 0x90, 0x20, 0x81, 0x45, 0x6b, 0x7b, 0x7f, 0x85, 0xb5, - 0xd7, 0xe9, 0xd9, 0x25, 0x08, 0x90, 0xa2, 0xf6, 0x74, 0x79, 0xdc, 0x71, 0x77, 0x55, 0x4f, 0xff, - 0xf0, 0xee, 0x22, 0x24, 0x24, 0x90, 0x10, 0x37, 0x4e, 0x70, 0xe0, 0x82, 0xc4, 0x05, 0x81, 0xa2, - 0x28, 0x42, 0x20, 0x71, 0x88, 0x10, 0x07, 0xfe, 0x01, 0x8e, 0x88, 0x1b, 0x67, 0xae, 0x1c, 0x90, - 0x90, 0x40, 0x55, 0xaf, 0xba, 0xbb, 0xaa, 0x7b, 0xc6, 0x9e, 0x1d, 0x59, 0xd9, 0x8d, 0x96, 0xdb, - 0xbc, 0xd7, 0xf5, 0x5e, 0xbd, 0xfa, 0xbc, 0x57, 0xf5, 0x5e, 0xfd, 0x18, 0x58, 0x4e, 0xbc, 0xe3, - 0xb7, 0x1f, 0x24, 0x2f, 0x3f, 0x48, 0xae, 0x44, 0x31, 0x4b, 0x99, 0xb5, 0x9a, 0x90, 0xf8, 0x84, - 0xc4, 0x6f, 0xbb, 0x91, 0xff, 0x76, 0xe4, 0xc6, 0x6e, 0x98, 0xd8, 0xff, 0x34, 0xa1, 0x7d, 0x33, - 0x66, 0x59, 0x74, 0x9b, 0x1e, 0x32, 0xab, 0x07, 0xf3, 0x43, 0x41, 0xec, 0xf4, 0x8c, 0x0d, 0xe3, - 0xc5, 0xb6, 0x93, 0x93, 0xd6, 0x25, 0x68, 0x8b, 0x9f, 0x7b, 0x6e, 0x48, 0x7a, 0xa6, 0xf8, 0x56, - 0x32, 0x2c, 0x1b, 0x16, 0x29, 0x4b, 0xfd, 0x43, 0x7f, 0xe0, 0xa6, 0x3e, 0xa3, 0xbd, 0x86, 0x68, - 0xa0, 0xf1, 0x78, 0x1b, 0x9f, 0xa6, 0x31, 0xf3, 0xb2, 0x81, 0x68, 0x33, 0x87, 0x6d, 0x54, 0x1e, - 0xef, 0xff, 0xd0, 0x1d, 0x90, 0xfb, 0xce, 0x9d, 0x5e, 0x13, 0xfb, 0x97, 0xa4, 0xb5, 0x01, 0x1d, - 0xf6, 0x80, 0x92, 0xf8, 0x7e, 0x42, 0xe2, 0xdb, 0x3b, 0xbd, 0x96, 0xf8, 0xaa, 0xb2, 0xac, 0xcb, - 0x00, 0x83, 0x98, 0xb8, 0x29, 0xb9, 0xe7, 0x87, 0xa4, 0x37, 0xbf, 0x61, 0xbc, 0xd8, 0x75, 0x14, - 0x0e, 0xd7, 0x10, 0x92, 0xf0, 0x80, 0xc4, 0xdb, 0x2c, 0xa3, 0x69, 0x6f, 0x41, 0x34, 0x50, 0x59, - 0xd6, 0x12, 0x98, 0xe4, 0x61, 0xaf, 0x2d, 0x54, 0x9b, 0xe4, 0xa1, 0xb5, 0x06, 0xad, 0x24, 0x75, - 0xd3, 0x2c, 0xe9, 0xc1, 0x86, 0xf1, 0x62, 0xd3, 0x91, 0x94, 0xb5, 0x09, 0x5d, 0xa1, 0x97, 0xe5, - 0xd6, 0x74, 0x84, 0x88, 0xce, 0x2c, 0x10, 0xbb, 0xf7, 0x28, 0x22, 0xbd, 0x45, 0xa1, 0xa0, 0x64, - 0xd8, 0x7f, 0x35, 0xe1, 0x82, 0xc0, 0x7d, 0x57, 0x18, 0x70, 0x23, 0x0b, 0x82, 0x33, 0x3c, 0xb0, - 0x06, 0xad, 0x0c, 0xbb, 0x43, 0xf8, 0x25, 0xc5, 0xfb, 0x89, 0x59, 0x40, 0xee, 0x90, 0x13, 0x12, - 0x08, 0xe0, 0x9b, 0x4e, 0xc9, 0xb0, 0xd6, 0x61, 0xe1, 0x1d, 0xe6, 0x53, 0x81, 0xc9, 0x9c, 0xf8, - 0x58, 0xd0, 0xfc, 0x1b, 0xf5, 0x07, 0xc7, 0x94, 0xbb, 0x14, 0xe1, 0x2e, 0x68, 0xd5, 0x13, 0x2d, - 0xdd, 0x13, 0x2f, 0xc0, 0x92, 0x1b, 0x45, 0xbb, 0x2e, 0x1d, 0x92, 0x18, 0x3b, 0x9d, 0x17, 0x7a, - 0x2b, 0x5c, 0xee, 0x0f, 0xde, 0x53, 0x9f, 0x65, 0xf1, 0x80, 0x08, 0xb8, 0x9b, 0x8e, 0xc2, 0xe1, - 0x7a, 0x58, 0x44, 0x62, 0x05, 0x46, 0x44, 0xbe, 0xc2, 0x95, 0x5e, 0x81, 0xc2, 0x2b, 0xdc, 0x8f, - 0x59, 0x4a, 0xae, 0x53, 0x4f, 0x0c, 0xaa, 0x23, 0xfd, 0x58, 0xb2, 0xec, 0x1f, 0x19, 0xb0, 0xb4, - 0x9f, 0x1d, 0x04, 0xfe, 0x40, 0xa8, 0xe0, 0xb0, 0x96, 0xe0, 0x19, 0x1a, 0x78, 0x2a, 0x04, 0xe6, - 0x64, 0x08, 0x1a, 0x3a, 0x04, 0x6b, 0xd0, 0x1a, 0x12, 0xea, 0x91, 0x58, 0x42, 0x2a, 0x29, 0x69, - 0x6a, 0x33, 0x37, 0xd5, 0xfe, 0x99, 0x09, 0x0b, 0x1f, 0xb2, 0x09, 0x1b, 0xd0, 0x89, 0x8e, 0x18, - 0x25, 0x7b, 0x19, 0x0f, 0x2b, 0x69, 0x8b, 0xca, 0xb2, 0x2e, 0x42, 0xf3, 0xc0, 0x8f, 0xd3, 0x23, - 0xe1, 0xd7, 0xae, 0x83, 0x04, 0xe7, 0x92, 0xd0, 0xf5, 0xd1, 0x99, 0x6d, 0x07, 0x09, 0x39, 0xa0, - 0x85, 0x02, 0x7b, 0x7d, 0x8e, 0xb5, 0x6b, 0x73, 0xac, 0x1e, 0x1b, 0x30, 0x2e, 0x36, 0xec, 0x7f, - 0x19, 0x00, 0x37, 0x62, 0x9f, 0x50, 0x4f, 0x40, 0x53, 0x99, 0xdc, 0x46, 0x7d, 0x72, 0xaf, 0x41, - 0x2b, 0x26, 0xa1, 0x1b, 0x1f, 0xe7, 0xc1, 0x8f, 0x54, 0xc5, 0xa0, 0x46, 0xcd, 0xa0, 0xd7, 0x01, - 0x0e, 0x45, 0x3f, 0x5c, 0x8f, 0x80, 0xaa, 0xf3, 0xca, 0xc7, 0xaf, 0xd4, 0x96, 0xc1, 0x2b, 0xb9, - 0x97, 0x1c, 0xa5, 0x39, 0x9f, 0x59, 0xae, 0xe7, 0xc9, 0x00, 0x6e, 0xe2, 0xcc, 0x2a, 0x18, 0x63, - 0xe2, 0xb7, 0x75, 0x4a, 0xfc, 0xce, 0x17, 0x41, 0xf1, 0x0f, 0x03, 0xda, 0x5b, 0x81, 0x3b, 0x38, - 0x9e, 0x72, 0xe8, 0xfa, 0x10, 0xcd, 0xda, 0x10, 0x6f, 0x42, 0xf7, 0x80, 0xab, 0xcb, 0x87, 0x20, - 0x50, 0xe8, 0xbc, 0xf2, 0xc9, 0x31, 0xa3, 0xd4, 0x27, 0x85, 0xa3, 0xcb, 0xe9, 0xc3, 0x9d, 0x3b, - 0x7b, 0xb8, 0xcd, 0x53, 0x86, 0xdb, 0x2a, 0x86, 0xfb, 0x17, 0x13, 0x16, 0xc5, 0x42, 0xe7, 0x90, - 0x51, 0x46, 0x92, 0xd4, 0xfa, 0x2a, 0x2c, 0x64, 0xb9, 0xa9, 0xc6, 0xb4, 0xa6, 0x16, 0x22, 0xd6, - 0x6b, 0x72, 0x59, 0x15, 0xf2, 0xa6, 0x90, 0xbf, 0x34, 0x46, 0xbe, 0xc8, 0x69, 0x4e, 0xd9, 0x9c, - 0xa7, 0xa0, 0x23, 0x97, 0x7a, 0x01, 0x71, 0x48, 0x92, 0x05, 0xa9, 0x5c, 0x2d, 0x35, 0x1e, 0x46, - 0xda, 0x68, 0x37, 0x19, 0xca, 0x04, 0x25, 0x29, 0x8e, 0x0e, 0xb6, 0xe3, 0x9f, 0x70, 0xe8, 0x25, - 0x83, 0x4f, 0xd4, 0x98, 0x8c, 0x84, 0x87, 0x70, 0x5a, 0xe5, 0x64, 0xd9, 0xa7, 0x44, 0x0d, 0x03, - 0x41, 0xe3, 0x71, 0x17, 0x23, 0x2d, 0x14, 0x60, 0x66, 0x52, 0x38, 0xd5, 0xc4, 0x64, 0xff, 0xad, - 0x01, 0x5d, 0x9c, 0x3e, 0x39, 0xa8, 0x97, 0x79, 0x9c, 0xb3, 0x50, 0x8b, 0x22, 0x85, 0xc3, 0xad, - 0xe0, 0xd4, 0x9e, 0xbe, 0xd0, 0x68, 0x3c, 0x1e, 0x8a, 0x9c, 0xbe, 0xa1, 0x2d, 0x38, 0x2a, 0x2b, - 0xef, 0xe5, 0xa6, 0xba, 0xf0, 0x28, 0x1c, 0xbe, 0x94, 0xa5, 0x4c, 0x8b, 0x8e, 0x82, 0xe6, 0xb2, - 0x29, 0x2b, 0xfa, 0xc7, 0xf8, 0x50, 0x38, 0x1c, 0xdf, 0x94, 0xe5, 0x7d, 0x23, 0x48, 0x25, 0x03, - 0x35, 0xcb, 0x7e, 0x31, 0x95, 0x14, 0x74, 0xcd, 0xab, 0xed, 0x53, 0xbd, 0x0a, 0x9a, 0x57, 0xf5, - 0xc9, 0xd5, 0xa9, 0x4d, 0xae, 0x4d, 0xe8, 0xa2, 0x9e, 0x3c, 0xe8, 0x17, 0x31, 0xd5, 0x6b, 0x4c, - 0x3d, 0x36, 0xba, 0xd5, 0xd8, 0xd0, 0xbd, 0xbb, 0x34, 0xc1, 0xbb, 0xcb, 0x85, 0x77, 0x7f, 0x6b, - 0x02, 0xec, 0x90, 0xc8, 0x8d, 0xd3, 0x90, 0xd0, 0x94, 0x0f, 0xcf, 0x2b, 0xa8, 0xc2, 0xb9, 0x1a, - 0x4f, 0xcd, 0x13, 0xa6, 0x9e, 0x27, 0x2c, 0x98, 0x13, 0x80, 0xa3, 0x37, 0xc5, 0x6f, 0x0e, 0x66, - 0xe4, 0xc6, 0xa8, 0x0d, 0x83, 0xbc, 0xa0, 0x79, 0x1e, 0x60, 0xb1, 0x27, 0x33, 0x47, 0xd3, 0x41, - 0x82, 0x4f, 0xfe, 0xb2, 0x3f, 0x51, 0xd0, 0xb4, 0x70, 0x5d, 0xd7, 0xb9, 0x67, 0xd6, 0x60, 0x2f, - 0xc1, 0x4a, 0x92, 0x1d, 0x94, 0x83, 0xdb, 0xcb, 0x42, 0x19, 0xee, 0x35, 0x3e, 0x07, 0x15, 0x8b, - 0x33, 0xde, 0x08, 0x53, 0x4d, 0xc9, 0xa8, 0x56, 0x05, 0xf6, 0xbb, 0x26, 0xac, 0xdc, 0x8d, 0x87, - 0x2e, 0xf5, 0xbf, 0x2b, 0xca, 0x4d, 0xb1, 0x80, 0xcf, 0x92, 0x72, 0x37, 0xa0, 0x43, 0xe8, 0x30, - 0xf0, 0x93, 0xa3, 0xbd, 0x12, 0x37, 0x95, 0xa5, 0x82, 0x3d, 0x37, 0x29, 0x29, 0x37, 0xb5, 0xa4, - 0xbc, 0x06, 0xad, 0x90, 0x1d, 0xf8, 0x41, 0x1e, 0xf7, 0x92, 0x12, 0x31, 0x4f, 0x02, 0x22, 0xb2, - 0x73, 0x11, 0xf3, 0x39, 0xa3, 0x4c, 0xd4, 0x0b, 0x63, 0x13, 0x75, 0x5b, 0x4d, 0xd4, 0x3a, 0xf0, - 0x50, 0x03, 0x1e, 0xe1, 0xea, 0x14, 0x70, 0xfd, 0xc9, 0x80, 0x95, 0x12, 0x6e, 0xac, 0x41, 0x27, - 0xc2, 0x55, 0x8d, 0x40, 0x73, 0x4c, 0x04, 0x16, 0x71, 0xd3, 0x50, 0xe3, 0x86, 0x47, 0x1a, 0x4b, - 0x7c, 0xa5, 0xde, 0x2f, 0x68, 0xde, 0x5b, 0x40, 0x5c, 0x05, 0x2c, 0xa4, 0x94, 0xaa, 0xbb, 0xa5, - 0x55, 0xdd, 0xd5, 0x3c, 0xfa, 0x07, 0x03, 0x2e, 0x72, 0x2f, 0xd7, 0x86, 0x71, 0x17, 0x56, 0x58, - 0x25, 0x12, 0x64, 0xa2, 0xf9, 0xd4, 0x98, 0x44, 0x51, 0x0d, 0x1a, 0xa7, 0x26, 0xcc, 0x15, 0x7a, - 0x95, 0x4e, 0x64, 0xe6, 0x19, 0xa7, 0xb0, 0x6a, 0x8f, 0x53, 0x13, 0xb6, 0x3f, 0x30, 0x60, 0x05, - 0x53, 0x9b, 0x32, 0xcf, 0xcf, 0xdd, 0xec, 0xb7, 0xe0, 0x62, 0xb5, 0xe7, 0x3b, 0x7e, 0x92, 0xf6, - 0xcc, 0x8d, 0xc6, 0xb4, 0xa6, 0x8f, 0x55, 0x60, 0x7f, 0x0f, 0x7a, 0xfb, 0x59, 0x10, 0xec, 0x92, - 0x24, 0x71, 0x87, 0x64, 0xeb, 0x51, 0x9f, 0x8c, 0x38, 0xdf, 0x21, 0x49, 0xc4, 0x27, 0x07, 0x89, - 0xe3, 0x6d, 0xe6, 0x11, 0x61, 0x7c, 0xd3, 0xc9, 0x49, 0xee, 0x57, 0x12, 0xc7, 0x7c, 0x85, 0x94, - 0x25, 0x1c, 0x52, 0xd6, 0x15, 0x98, 0x0b, 0xb8, 0x59, 0x0d, 0x61, 0xd6, 0xfa, 0x18, 0xb3, 0x76, - 0x93, 0xe1, 0x8e, 0x9b, 0xba, 0x8e, 0x68, 0x67, 0x87, 0xf0, 0xdc, 0xf8, 0xde, 0x47, 0x13, 0x03, - 0x98, 0x17, 0x59, 0xa2, 0x4a, 0xf1, 0x19, 0x2d, 0xe2, 0x57, 0x65, 0x71, 0xb3, 0x13, 0xd4, 0x23, - 0xec, 0xe8, 0x3a, 0x39, 0x69, 0x5f, 0x04, 0xeb, 0x26, 0x49, 0x77, 0xdd, 0x87, 0xd7, 0xa8, 0xb7, - 0xeb, 0xd3, 0x3e, 0x19, 0x39, 0x64, 0x64, 0x5f, 0x87, 0x0b, 0x35, 0x6e, 0x12, 0x89, 0x89, 0xee, - 0x3e, 0xec, 0x93, 0x91, 0x30, 0xa0, 0xeb, 0x48, 0x4a, 0xf0, 0x45, 0x2b, 0x59, 0xbf, 0x49, 0xca, - 0x1e, 0xc1, 0x32, 0x77, 0x55, 0x9f, 0x50, 0x6f, 0x37, 0x19, 0x0a, 0x15, 0x1b, 0xd0, 0x41, 0x04, - 0x76, 0x93, 0x61, 0x59, 0x10, 0x2a, 0x2c, 0xde, 0x62, 0x10, 0xf8, 0xdc, 0x25, 0xa2, 0x85, 0x1c, - 0x8d, 0xc2, 0xe2, 0xd3, 0x2e, 0x21, 0x72, 0x7f, 0xc4, 0xe7, 0x63, 0xc3, 0x29, 0x68, 0xfb, 0x83, - 0x26, 0xcc, 0x4b, 0x40, 0xc5, 0x54, 0xe3, 0x35, 0x78, 0x81, 0x17, 0x52, 0x98, 0x2d, 0x07, 0x27, - 0xe5, 0x56, 0x13, 0x29, 0x75, 0x73, 0xda, 0xd0, 0x37, 0xa7, 0x15, 0x9b, 0xe6, 0xea, 0x36, 0x55, - 0xc6, 0xd5, 0xac, 0x8f, 0x8b, 0x27, 0x07, 0xb1, 0x5e, 0xee, 0x07, 0x6e, 0x7a, 0xc8, 0xe2, 0x50, - 0x96, 0xd4, 0x4d, 0xa7, 0xc6, 0xe7, 0x09, 0x09, 0x79, 0x45, 0x45, 0x81, 0x0b, 0x43, 0x85, 0xcb, - 0xf3, 0x37, 0x72, 0xf2, 0xca, 0x02, 0xf7, 0x32, 0x3a, 0x13, 0x6d, 0x4b, 0x12, 0x9f, 0x51, 0x91, - 0xdb, 0xb0, 0x80, 0x50, 0x59, 0x7c, 0xe4, 0x61, 0x32, 0xbc, 0x11, 0xb3, 0x50, 0xee, 0x68, 0x72, - 0x52, 0x8c, 0x9c, 0xd1, 0x34, 0xcf, 0x8b, 0x1d, 0x94, 0x55, 0x58, 0x5c, 0x56, 0x92, 0xa2, 0x7a, - 0x58, 0x74, 0x72, 0xd2, 0x5a, 0x81, 0x46, 0x42, 0x46, 0xb2, 0x24, 0xe0, 0x3f, 0x35, 0xcf, 0x2d, - 0xeb, 0x9e, 0xab, 0xac, 0xf1, 0x2b, 0xe2, 0xab, 0xba, 0xc6, 0x97, 0x0b, 0xe7, 0xaa, 0xb6, 0x70, - 0x5e, 0x83, 0x79, 0x16, 0xf1, 0x38, 0x4f, 0x7a, 0x96, 0x98, 0x63, 0x9f, 0x9e, 0x3c, 0xc7, 0xae, - 0xdc, 0xc5, 0x96, 0xd7, 0x69, 0x1a, 0x3f, 0x72, 0x72, 0x39, 0xeb, 0x0e, 0x2c, 0xb3, 0xc3, 0xc3, - 0xc0, 0xa7, 0x64, 0x3f, 0x4b, 0x8e, 0x44, 0xe9, 0x7d, 0x41, 0x2c, 0x4d, 0xf6, 0xb8, 0xa5, 0x49, - 0x6f, 0xe9, 0x54, 0x45, 0xd7, 0x5f, 0x83, 0x45, 0xb5, 0x1b, 0x0e, 0xc3, 0x31, 0x79, 0x24, 0x63, - 0x90, 0xff, 0xe4, 0xd9, 0xe4, 0xc4, 0x0d, 0x32, 0xcc, 0xce, 0x0b, 0x0e, 0x12, 0xaf, 0x99, 0x5f, - 0x32, 0xec, 0x9f, 0x1a, 0xb0, 0x5c, 0xe9, 0x80, 0xb7, 0x4e, 0xfd, 0x34, 0x20, 0x52, 0x03, 0x12, - 0xbc, 0xf2, 0xf1, 0x48, 0x32, 0x90, 0x21, 0x2c, 0x7e, 0xcb, 0x1c, 0xd2, 0x28, 0xf6, 0xb3, 0x36, - 0x2c, 0xfa, 0x77, 0xfb, 0x5c, 0x51, 0x9f, 0x65, 0xd4, 0x2b, 0xce, 0xa4, 0x14, 0x1e, 0x0f, 0x21, - 0xff, 0x6e, 0x7f, 0xcb, 0xf5, 0x86, 0x04, 0x4f, 0x8e, 0x9a, 0xc2, 0x26, 0x9d, 0x69, 0x7b, 0xb0, - 0x70, 0xcf, 0x8f, 0x92, 0x6d, 0x16, 0x86, 0xdc, 0x11, 0x1e, 0x49, 0x79, 0x8e, 0x36, 0x84, 0xbf, - 0x25, 0xc5, 0x43, 0xc5, 0x23, 0x87, 0x6e, 0x16, 0xa4, 0xbc, 0x69, 0x3e, 0x71, 0x15, 0x96, 0x38, - 0x33, 0x49, 0x18, 0xdd, 0x41, 0x69, 0xb4, 0x53, 0xe1, 0xd8, 0x7f, 0x36, 0x61, 0x45, 0xec, 0x6c, - 0xb6, 0x85, 0xdb, 0x3d, 0x21, 0xf4, 0x0a, 0x34, 0xc5, 0x34, 0x94, 0xd9, 0xe2, 0xf4, 0xdd, 0x10, - 0x36, 0xb5, 0xae, 0x42, 0x8b, 0x45, 0x22, 0xc5, 0x60, 0x22, 0x7b, 0x61, 0x92, 0x90, 0x7e, 0x3c, - 0xe5, 0x48, 0x29, 0xeb, 0x06, 0x40, 0x58, 0x66, 0x14, 0x5c, 0xba, 0xa7, 0xd5, 0xa1, 0x48, 0x72, - 0x70, 0x8b, 0x65, 0xb8, 0x38, 0xa3, 0x6a, 0x38, 0x3a, 0xd3, 0xda, 0x83, 0x25, 0x61, 0xf6, 0xdd, - 0x7c, 0x5b, 0x2c, 0x7c, 0x30, 0x7d, 0x8f, 0x15, 0x69, 0xfb, 0x97, 0x86, 0x84, 0x91, 0x7f, 0xed, - 0x13, 0xc4, 0xbe, 0x84, 0xc4, 0x98, 0x09, 0x92, 0x75, 0x58, 0x08, 0x33, 0x65, 0x97, 0xde, 0x70, - 0x0a, 0xba, 0x74, 0x51, 0x63, 0x6a, 0x17, 0xd9, 0xbf, 0x32, 0xa0, 0xf7, 0x06, 0xf3, 0xa9, 0xf8, - 0x70, 0x2d, 0x8a, 0x02, 0x79, 0x90, 0x3a, 0xb3, 0xcf, 0xbf, 0x06, 0x6d, 0x17, 0xd5, 0xd0, 0x54, - 0xba, 0x7d, 0x8a, 0x9d, 0x77, 0x29, 0xa3, 0x6c, 0xa2, 0x1a, 0xea, 0x26, 0xca, 0x7e, 0xcf, 0x80, +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, 0x44, 0xce, 0x55, 0x36, 0x91, 0x63, 0x4d, 0x76, - 0xc8, 0x3b, 0x64, 0xf0, 0xf4, 0x9a, 0xfc, 0x43, 0x13, 0x3e, 0x76, 0xb3, 0x98, 0x78, 0xf7, 0x62, + 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, 0xdd, + 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, 0xde, 0x80, 0x65, 0xd4, + 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, 0xb9, 0x09, 0x17, 0x15, 0x2d, 0xbb, 0x59, 0xfa, 0xb4, 0x9b, - 0x6c, 0xed, 0x40, 0x9b, 0xd7, 0x08, 0xea, 0xed, 0xc4, 0xb4, 0x1d, 0x95, 0x82, 0xbc, 0x8a, 0x15, + 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, 0x63, 0xc0, 0x12, 0x36, 0x79, 0xfa, - 0x87, 0xcc, 0x73, 0x3d, 0x06, 0xf2, 0x47, 0xc6, 0x4b, 0x3c, 0xbc, 0xd6, 0x14, 0x2d, 0x6a, 0x5d, + 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, 0x03, 0xb9, 0x6d, 0xfc, 0x24, 0x86, 0xff, 0x6a, 0x65, 0x28, 0xa7, 0xde, 0x3e, - 0x3e, 0x1e, 0xe8, 0xc7, 0xb0, 0x8a, 0xb7, 0x40, 0x4a, 0x4d, 0x68, 0xf5, 0x60, 0xde, 0xf5, 0xf0, - 0x00, 0xc1, 0x10, 0x42, 0x39, 0xa9, 0xdf, 0xef, 0xc9, 0x27, 0x1c, 0xe5, 0xfd, 0xde, 0x65, 0x00, + 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, 0x3e, 0xe7, 0xd4, 0x1b, 0x27, 0xf5, 0x2e, 0xc8, 0xd4, 0xef, 0x82, 0xec, - 0xef, 0xc0, 0xff, 0xd7, 0x0c, 0x17, 0x60, 0x6d, 0xe3, 0x35, 0x55, 0xde, 0x89, 0x0c, 0x99, 0x4f, - 0x8c, 0x81, 0x4c, 0xb5, 0xc5, 0xd1, 0x84, 0xec, 0x1f, 0x18, 0xf0, 0x7c, 0x4d, 0xfd, 0xb5, 0x28, + 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, 0x08, 0x46, 0xfc, 0xda, 0x80, 0x65, 0x69, 0x84, 0xe7, 0xc9, 0x6e, 0xbf, 0x08, - 0x2d, 0xbc, 0xe2, 0x96, 0x1d, 0x3e, 0x3f, 0xb6, 0xc3, 0xfc, 0x6a, 0xde, 0x91, 0x8d, 0xeb, 0x11, - 0x69, 0x8e, 0x9b, 0x51, 0x5f, 0x2e, 0x82, 0x7d, 0xea, 0x4b, 0x68, 0x29, 0x60, 0x7f, 0x33, 0x0f, - 0xe6, 0x1d, 0x12, 0x90, 0xf3, 0xc4, 0xc8, 0xbe, 0x0f, 0x4b, 0xe2, 0xbe, 0xbd, 0xc4, 0xe0, 0x5c, + 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, 0xc3, 0x85, 0x1c, 0xfb, 0xfb, 0x91, 0x57, 0x1c, 0x22, 0x4d, 0x38, 0x3a, 0xb7, - 0xbf, 0x00, 0x6b, 0xdb, 0x8c, 0x9e, 0x90, 0x38, 0xc1, 0x8b, 0x05, 0x21, 0x92, 0x4b, 0x68, 0x93, + 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, - 0x5a, 0x36, 0xb4, 0xa3, 0xe5, 0xf2, 0x28, 0xda, 0xd4, 0x8e, 0xa2, 0x2f, 0x41, 0xdb, 0x4f, 0xa4, - 0x02, 0x11, 0x54, 0x0b, 0x4e, 0xc9, 0xb0, 0xfb, 0xb0, 0x2a, 0x6f, 0xc0, 0xf7, 0xdd, 0xa1, 0x4f, - 0x71, 0x05, 0xbc, 0x0c, 0x10, 0xb9, 0xc3, 0xfc, 0x05, 0x0c, 0xde, 0x42, 0x28, 0x1c, 0xfe, 0x3d, - 0x39, 0x62, 0x0f, 0xe4, 0x77, 0x13, 0xbf, 0x97, 0x1c, 0xfb, 0x1b, 0x60, 0x39, 0x24, 0x89, 0x18, - 0x4d, 0x88, 0xa2, 0x75, 0x03, 0x3a, 0xdb, 0x59, 0x1c, 0x13, 0xca, 0xbb, 0xca, 0x9f, 0x83, 0xa8, - 0x2c, 0xae, 0xb7, 0x5f, 0xea, 0xc5, 0x93, 0x6b, 0x85, 0x63, 0xff, 0xa2, 0x01, 0xed, 0xbe, 0x3f, - 0xa4, 0x6e, 0xe0, 0x90, 0x91, 0xf5, 0x15, 0x68, 0xe1, 0x7e, 0x42, 0xba, 0x71, 0xdc, 0x49, 0x2a, + 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, 0xcf, 0x9c, 0xa1, 0x44, 0xb6, 0x46, 0x5d, 0xba, 0x06, 0x6e, + 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, 0xb3, 0xd3, 0x3a, + 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, 0xc5, 0xa3, 0x87, 0x4c, 0x1c, 0xd6, 0x0b, 0xb8, 0xf4, 0x07, - 0x55, 0x3a, 0xd3, 0xfa, 0x1c, 0xac, 0x22, 0x43, 0x3e, 0xc0, 0x29, 0xae, 0x45, 0xdb, 0x4e, 0xfd, - 0x83, 0xb8, 0x77, 0xc9, 0x92, 0x94, 0x85, 0x3b, 0x6e, 0xea, 0xe6, 0x95, 0x51, 0xc9, 0x51, 0x6f, - 0xc5, 0xe6, 0x6a, 0x4f, 0x36, 0x63, 0xc6, 0xc2, 0xe2, 0xba, 0x4b, 0x52, 0x5c, 0x22, 0xf5, 0x43, - 0xc2, 0xb2, 0x54, 0x2e, 0x13, 0x39, 0x89, 0x8f, 0x1e, 0x3c, 0xdf, 0x15, 0x77, 0x49, 0xf2, 0x45, - 0x40, 0xc1, 0x10, 0x2b, 0x5b, 0x79, 0x37, 0x26, 0x9f, 0x54, 0x96, 0x9c, 0xb3, 0xef, 0xb1, 0xec, - 0xbf, 0x1b, 0x70, 0x61, 0xdf, 0x8d, 0x53, 0x7f, 0xe0, 0x47, 0x2e, 0x4d, 0x77, 0x49, 0xea, 0x8a, - 0x31, 0x68, 0xaf, 0xaa, 0x8c, 0xc7, 0x7b, 0x55, 0xb5, 0x0f, 0xcb, 0x43, 0xbd, 0xf4, 0x7f, 0xcc, - 0xaa, 0xbd, 0x2a, 0xae, 0x3d, 0x11, 0x6b, 0x3c, 0xf6, 0x13, 0x31, 0xfb, 0xc7, 0x26, 0x2c, 0x57, - 0x96, 0x4e, 0x5e, 0x8e, 0x62, 0xa1, 0x51, 0xc4, 0x44, 0x41, 0x5b, 0xd7, 0x00, 0xfc, 0x22, 0x8c, - 0x4e, 0x39, 0x19, 0xd7, 0x63, 0xcd, 0x51, 0x84, 0xc6, 0x5d, 0x90, 0x35, 0x66, 0xbe, 0x20, 0xe3, - 0x1b, 0x93, 0xa8, 0x74, 0xd2, 0x29, 0x1b, 0x93, 0x31, 0xae, 0x74, 0x54, 0x51, 0xfb, 0xdb, 0xb0, - 0x5a, 0x5b, 0xa1, 0xc4, 0x7d, 0x19, 0x3b, 0x26, 0xb4, 0xb8, 0x2f, 0xe3, 0x84, 0x12, 0xac, 0x66, - 0x35, 0x58, 0x03, 0xff, 0x44, 0x7d, 0x83, 0x2a, 0x49, 0xfb, 0x27, 0x26, 0xac, 0x8d, 0xcf, 0x2e, - 0xcf, 0x2a, 0xdc, 0x07, 0xd0, 0x9b, 0xb4, 0x92, 0x9f, 0x1b, 0xea, 0x65, 0x74, 0x17, 0x79, 0xf8, - 0x59, 0x85, 0xfb, 0x42, 0x1e, 0xdd, 0x4a, 0xaa, 0xb3, 0x7f, 0x57, 0xe0, 0x53, 0x54, 0x1a, 0xcf, - 0x28, 0x3e, 0xd6, 0x4b, 0xb0, 0x82, 0xc3, 0x54, 0x5e, 0x54, 0x60, 0xe1, 0x5a, 0xe3, 0x97, 0x2b, - 0x85, 0x92, 0xf6, 0xcf, 0x2d, 0x66, 0xff, 0x68, 0xe4, 0x3e, 0x29, 0xea, 0xb7, 0x8f, 0x94, 0x4f, - 0xca, 0x48, 0x53, 0x8a, 0x1a, 0x25, 0xd2, 0x8a, 0xba, 0xf2, 0x7f, 0x91, 0x76, 0x76, 0xa4, 0x15, - 0x58, 0x2a, 0x05, 0x9e, 0xfd, 0x7d, 0xe8, 0xee, 0x90, 0x60, 0x37, 0x19, 0xe6, 0x6f, 0xb9, 0x4e, - 0x03, 0x72, 0xd2, 0x5f, 0x61, 0x26, 0xbe, 0xe2, 0xaa, 0xbe, 0x00, 0x9b, 0xab, 0xbd, 0x00, 0xb3, - 0xb7, 0x60, 0x49, 0x35, 0x60, 0x96, 0xa7, 0x6c, 0x5b, 0x97, 0xbe, 0xb5, 0x7e, 0xe5, 0x65, 0xfc, - 0xd3, 0xd5, 0xeb, 0x35, 0x10, 0x0f, 0x5a, 0xe2, 0x4f, 0x58, 0xaf, 0xfe, 0x37, 0x00, 0x00, 0xff, - 0xff, 0xda, 0x69, 0x8c, 0xa6, 0x97, 0x35, 0x00, 0x00, + 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, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index f8db4047c..c2a89652f 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -213,8 +213,9 @@ message MsgData { int32 status = 17; map options = 18; OfflinePushInfo offlinePushInfo = 19; -} + repeated string atUserIDList = 20; +} message OfflinePushInfo{ string title = 1; string desc = 2; diff --git a/pkg/utils/strings.go b/pkg/utils/strings.go index 49d883f7c..a05ba927a 100644 --- a/pkg/utils/strings.go +++ b/pkg/utils/strings.go @@ -85,6 +85,8 @@ func GetConversationIDBySessionType(sourceID string, sessionType int) string { return "single_" + sourceID case constant.GroupChatType: return "group_" + sourceID + case constant.NotificationChatType: + return "notification_" + sourceID } return "" } diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 8f0b52d72..52cb1bf2e 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -77,6 +77,44 @@ func Difference(slice1, slice2 []uint32) []uint32 { } return n } + +//Get the intersection of two slices +func IntersectString(slice1, slice2 []string) []string { + m := make(map[string]bool) + n := make([]string, 0) + for _, v := range slice1 { + m[v] = true + } + for _, v := range slice2 { + flag, _ := m[v] + if flag { + n = append(n, v) + } + } + return n +} + +//Get the diff of two slices +func DifferenceString(slice1, slice2 []string) []string { + m := make(map[string]bool) + n := make([]string, 0) + inter := IntersectString(slice1, slice2) + for _, v := range inter { + m[v] = true + } + for _, v := range slice1 { + if !m[v] { + n = append(n, v) + } + } + + for _, v := range slice2 { + if !m[v] { + n = append(n, v) + } + } + return n +} func OperationIDGenerator() string { return strconv.FormatInt(time.Now().UnixNano()+int64(rand.Uint32()), 10) } diff --git a/script/check_all.sh b/script/check_all.sh index c434c65d2..60abfad69 100644 --- a/script/check_all.sh +++ b/script/check_all.sh @@ -4,23 +4,24 @@ source ./style_info.cfg source ./path_info.cfg source ./function.sh service_port_name=( - openImCmsApiPort + openImWsPort openImApiPort + openImSdkWsPort + openImDemoPort + openImCmsApiPort openImUserPort openImFriendPort - openImOfflineMessagePort - openImOnlineRelayPort + openImMessagePort + openImMessageGatewayPort openImGroupPort openImAuthPort openImPushPort - openImWsPort - openImSdkWsPort - openImDemoPort - openImAdminCmsPort - openImMessageCmsPort openImStatisticsPort + openImMessageCmsPort + openImAdminCmsPort openImOfficePort openImOrganizationPort + openImConversationPort ) switch=$(cat $config_path | grep demoswitch |awk -F '[:]' '{print $NF}') for i in ${service_port_name[*]}; do diff --git a/script/msg_gateway_start.sh b/script/msg_gateway_start.sh index 7c107f16a..d61edf692 100644 --- a/script/msg_gateway_start.sh +++ b/script/msg_gateway_start.sh @@ -5,7 +5,7 @@ source ./path_info.cfg source ./function.sh ulimit -n 200000 -list1=$(cat $config_path | grep openImOnlineRelayPort | awk -F '[:]' '{print $NF}') +list1=$(cat $config_path | grep openImMessageGatewayPort | awk -F '[:]' '{print $NF}') list2=$(cat $config_path | grep openImWsPort | awk -F '[:]' '{print $NF}') list_to_string $list1 rpc_ports=($ports_array) diff --git a/script/path_info.cfg b/script/path_info.cfg index b50fc18fb..3071a0a5d 100644 --- a/script/path_info.cfg +++ b/script/path_info.cfg @@ -50,6 +50,7 @@ service_source_root=( ../cmd/rpc/open_im_statistics/ ../cmd/rpc/open_im_office/ ../cmd/rpc/open_im_organization/ + ../cmd/rpc/open_im_conversation/ ${msg_gateway_source_root} ${msg_transfer_source_root} ${msg_source_root} @@ -71,7 +72,8 @@ service_names=( open_im_message_cms open_im_statistics open_im_office - open_im_organization + open_im_organization + open_im_conversation ${msg_gateway_name} ${msg_transfer_name} ${msg_name} diff --git a/script/start_rpc_service.sh b/script/start_rpc_service.sh index 20e7991b4..6e60bcdcd 100644 --- a/script/start_rpc_service.sh +++ b/script/start_rpc_service.sh @@ -20,6 +20,7 @@ service_filename=( ${msg_name} open_im_office open_im_organization + open_im_conversation ) #service config port name @@ -35,9 +36,10 @@ service_port_name=( openImAdminCmsPort openImMessageCmsPort openImStatisticsPort - openImOfflineMessagePort + openImMessagePort openImOfficePort openImOrganizationPort + openImConversationPort ) for ((i = 0; i < ${#service_filename[*]}; i++)); do