diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 551a37a0e..36815617d 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -97,14 +97,19 @@ func main() { } //Conversation conversationGroup := r.Group("/conversation") - { - conversationGroup.POST("/set_receive_message_opt", conversation.SetReceiveMessageOpt) //1 - conversationGroup.POST("/get_receive_message_opt", conversation.GetReceiveMessageOpt) //1 - conversationGroup.POST("/get_all_conversation_message_opt", conversation.GetAllConversationMessageOpt) //1 + { //1 + conversationGroup.POST("/get_all_conversations", conversation.GetAllConversations) + conversationGroup.POST("/get_conversation", conversation.GetConversation) + conversationGroup.POST("/get_conversations", conversation.GetConversations) + conversationGroup.POST("/set_conversation", conversation.SetConversation) + conversationGroup.POST("/batch_set_conversation", conversation.BatchSetConversations) } apiThird.MinioInit() log.NewPrivateLog("api") ginPort := flag.Int("port", 10000, "get ginServerPort from cmd,default 10000 as port") flag.Parse() - r.Run(":" + strconv.Itoa(*ginPort)) + err := r.Run(":" + strconv.Itoa(*ginPort)) + if err != nil { + log.NewError("", utils.GetSelfFuncName(), "start gin failed", err.Error()) + } } diff --git a/config/config.yaml b/config/config.yaml index dfaeaaed1..c318fa19f 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -8,7 +8,7 @@ etcd: etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 mysql: - dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 + dbMysqlAddress: [ 43.128.5.63:13306 ] #mysql地址 目前仅支持单机,默认即可 dbMysqlUserName: root #mysql用户名,建议修改 dbMysqlPassword: openIM # mysql密码,建议修改 dbMysqlDatabaseName: openIM_v2 #默认即可 @@ -19,7 +19,7 @@ mysql: dbMaxLifeTime: 120 mongo: - dbAddress: [ 127.0.0.1:37017 ] #redis地址 目前仅支持单机,默认即可 + dbAddress: [ 43.128.5.63:37017 ] #redis地址 目前仅支持单机,默认即可 dbDirect: false dbTimeout: 10 dbDatabase: openIM #mongo db 默认即可 @@ -30,7 +30,7 @@ mongo: dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 redis: - dbAddress: 127.0.0.1:16379 #redis地址 目前仅支持单机,默认即可 + dbAddress: 43.128.5.63:16379 #redis地址 目前仅支持单机,默认即可 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 @@ -133,7 +133,7 @@ log: rotationTime: 24 remainRotationCount: 3 #日志数量 #日志级别 6表示全都打印,测试阶段建议设置为6 - remainLogLevel: 4 + remainLogLevel: 6 elasticSearchSwitch: false elasticSearchAddr: [ 127.0.0.1:9201 ] elasticSearchUser: "" @@ -200,21 +200,21 @@ callback: callbackbeforeSendSingleMsg: enable: false # 回调是否启用 callbackTimeOut: 2 # 回调超时时间 - CallbackFailedContinue: true # 回调超时是否继续执行代码 + callbackFailedContinue: true # 回调超时是否继续执行代码 callbackAfterSendSingleMsg: enable: false callbackTimeOut: 2 callbackBeforeSendGroupMsg: enable: false callbackTimeOut: 2 - CallbackFailedContinue: true + callbackFailedContinue: true callbackAfterSendGroupMsg: enable: false callbackTimeOut: 2 callbackWordFilter: enable: false callbackTimeOut: 2 - CallbackFailedContinue: true + callbackFailedContinue: true notification: diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go index 3971fbad7..1ea49ed31 100644 --- a/internal/api/conversation/conversation.go +++ b/internal/api/conversation/conversation.go @@ -4,10 +4,8 @@ import ( api "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" - "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" - "Open_IM/pkg/proto/user" - rpc "Open_IM/pkg/proto/user" + pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" "github.com/gin-gonic/gin" @@ -15,111 +13,194 @@ import ( "strings" ) -func GetAllConversationMessageOpt(c *gin.Context) { - params := api.GetAllConversationMessageOptReq{} - if err := c.BindJSON(¶ms); err != nil { +func SetConversation(c *gin.Context) { + var ( + req api.SetConversationReq + resp api.SetConversationResp + reqPb pbUser.SetConversationReq + ) + 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 } - req := &rpc.GetAllConversationMsgOptReq{} - utils.CopyStructFields(req, ¶ms) - var ok bool - ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) - if !ok { - log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed or not set token in header"}) - return - } - log.NewInfo(params.OperationID, "GetAllConversationMessageOpt args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := user.NewUserClient(etcdConn) - RpcResp, err := client.GetAllConversationMsgOpt(context.Background(), req) + reqPb.Conversation = &pbUser.Conversation{} + err := utils.CopyStructFields(&reqPb, req) + err = utils.CopyStructFields(reqPb.Conversation, req.Conversation) if err != nil { - log.NewError(params.OperationID, "GetAllConversationMsgOpt rpc failed, ", req, err.Error()) + 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.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()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()}) return } - optResult := make([]*api.OptResult, 0) - for _, v := range RpcResp.ConversationOptResultList { - temp := new(api.OptResult) - temp.ConversationID = v.ConversationID - temp.Result = &v.Result - optResult = append(optResult, temp) + 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 ( + req api.BatchSetConversationsReq + resp api.BatchSetConversationsResp + reqPb pbUser.BatchSetConversationsReq + ) + 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 } - resp := api.GetAllConversationMessageOptResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, ConversationOptResultList: optResult} - log.NewInfo(req.OperationID, "GetAllConversationMsgOpt api return: ", resp) + if err := utils.CopyStructFields(&reqPb, req); 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.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.BatchSetConversations(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 + } + if err := utils.CopyStructFields(&resp.Data, respPb); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) + } + resp.ErrMsg = respPb.CommonResp.ErrMsg + resp.ErrCode = respPb.CommonResp.ErrCode + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + c.JSON(http.StatusOK, resp) +} + +func GetAllConversations(c *gin.Context) { + var ( + req api.GetAllConversationsReq + resp api.GetAllConversationsResp + reqPb pbUser.GetAllConversationsReq + ) + 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 + } + if err := utils.CopyStructFields(&reqPb, req); 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.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.GetAllConversations(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 + if err := utils.CopyStructFields(&resp.Conversations, respPb.Conversations); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed, ", err.Error()) + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + c.JSON(http.StatusOK, resp) +} + +func GetConversation(c *gin.Context) { + var ( + req api.GetConversationReq + resp api.GetConversationResp + reqPb pbUser.GetConversationReq + ) + 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 + } + if err := utils.CopyStructFields(&reqPb, req); 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.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.GetConversation(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 + if err := utils.CopyStructFields(&resp.Conversation, respPb.Conversation); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + c.JSON(http.StatusOK, resp) +} + + +func GetConversations(c *gin.Context) { + var ( + req api.GetConversationsReq + resp api.GetConversationsResp + reqPb pbUser.GetConversationsReq + ) + 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 + } + if err := utils.CopyStructFields(&reqPb, req); 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.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.GetConversations(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 + if err := utils.CopyStructFields(&resp.Conversations, respPb.Conversations); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + c.JSON(http.StatusOK, resp) +} + + + + + + + + +func GetAllConversationMessageOpt(c *gin.Context) { + var ( + _ api.GetAllConversationMessageOptReq + resp api.GetAllConversationMessageOptResp + ) c.JSON(http.StatusOK, resp) } func GetReceiveMessageOpt(c *gin.Context) { - params := api.GetReceiveMessageOptReq{} - if err := c.BindJSON(¶ms); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) - return - } - req := &rpc.GetReceiveMessageOptReq{} - utils.CopyStructFields(req, ¶ms) - var ok bool - ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) - if !ok { - log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) - return - } - log.NewInfo(params.OperationID, "GetReceiveMessageOpt args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := user.NewUserClient(etcdConn) - RpcResp, err := client.GetReceiveMessageOpt(context.Background(), req) - if err != nil { - log.NewError(params.OperationID, "GetReceiveMessageOpt rpc failed, ", req, err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetReceiveMessageOpt rpc failed, " + err.Error()}) - return - } - optResult := make([]*api.OptResult, 0) - for _, v := range RpcResp.ConversationOptResultList { - temp := new(api.OptResult) - temp.ConversationID = v.ConversationID - temp.Result = &v.Result - optResult = append(optResult, temp) - } - resp := api.GetReceiveMessageOptResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, ConversationOptResultList: optResult} - log.NewInfo(req.OperationID, "GetReceiveMessageOpt api return: ", resp) + var ( + _ api.GetReceiveMessageOptReq + resp api.GetReceiveMessageOptResp + ) c.JSON(http.StatusOK, resp) } func SetReceiveMessageOpt(c *gin.Context) { - params := api.SetReceiveMessageOptReq{} - if err := c.BindJSON(¶ms); err != nil { - log.NewError(params.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) - return - } - req := &rpc.SetReceiveMessageOptReq{} - utils.CopyStructFields(req, ¶ms) - var ok bool - ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) - if !ok { - log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) - return - } - log.NewInfo(params.OperationID, "SetReceiveMessageOpt args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := user.NewUserClient(etcdConn) - RpcResp, err := client.SetReceiveMessageOpt(context.Background(), req) - if err != nil { - log.NewError(params.OperationID, "SetReceiveMessageOpt rpc failed, ", req, err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "SetReceiveMessageOpt rpc failed, " + err.Error()}) - return - } - optResult := make([]*api.OptResult, 0) - for _, v := range RpcResp.ConversationOptResultList { - temp := new(api.OptResult) - temp.ConversationID = v.ConversationID - temp.Result = &v.Result - optResult = append(optResult, temp) - } - resp := api.SetReceiveMessageOptResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, ConversationOptResultList: optResult} - log.NewInfo(req.OperationID, "SetReceiveMessageOpt api return: ", resp) + var ( + _ api.SetReceiveMessageOptReq + resp api.SetReceiveMessageOptResp + ) c.JSON(http.StatusOK, resp) } diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index 29338ee77..a5a8cbe4f 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -45,8 +45,8 @@ 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 ", err.Error()) - // return`z + // log.NewError("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) + // return //} log.NewInfo("", utils.GetSelfFuncName(), "minio create and set policy success") } diff --git a/internal/rpc/msg/conversation_notification.go b/internal/rpc/msg/conversation_notification.go index cd9a7a6be..598ba1cc7 100644 --- a/internal/rpc/msg/conversation_notification.go +++ b/internal/rpc/msg/conversation_notification.go @@ -44,9 +44,8 @@ func conversationNotification(contentType int32, m proto.Message, operationID, u Notification(&n) } -// 客户端调用设置opt接口后调用 -func SetReceiveMessageOptNotification(operationID, opUserID, userID string) { - log.NewInfo(operationID, utils.GetSelfFuncName(), "operation user: ", opUserID, "operation id: ", userID) +func SetConversationNotification(operationID, userID string) { + log.NewInfo(operationID, utils.GetSelfFuncName(), "userID: ", userID) conversationUpdateTips := open_im_sdk.ConversationUpdateTips{ UserID: userID, } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index af8f40b4f..b65c2ea2c 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -274,7 +274,7 @@ func returnMsg(replay *pbChat.SendMsgResp, pb *pbChat.SendMsgReq, errCode int32, func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType int, pb *pbChat.SendMsgReq) bool { conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) - opt, err := db.DB.GetSingleConversationMsgOpt(userID, conversationID) + opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) if err != nil && err != redis.ErrNil { log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), err.Error()) return true diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index b0ebf593a..73e689d05 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -88,63 +88,165 @@ func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq userInfoList = append(userInfoList, &userInfo) } } else { - return &pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}}, nil } log.NewInfo(req.OperationID, "GetUserInfo rpc return ", pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{}, UserInfoList: userInfoList}) return &pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{}, UserInfoList: userInfoList}, nil } -func (s *userServer) SetReceiveMessageOpt(ctx context.Context, req *pbUser.SetReceiveMessageOptReq) (*pbUser.SetReceiveMessageOptResp, error) { - log.NewInfo(req.OperationID, "SetReceiveMessageOpt args ", req.String()) - m := make(map[string]int, len(req.ConversationIDList)) - for _, v := range req.ConversationIDList { - m[v] = int(req.Opt) - } - err := db.DB.SetMultiConversationMsgOpt(req.FromUserID, m) - if err != nil { - log.NewError(req.OperationID, "SetMultiConversationMsgOpt failed ", err.Error(), req) - return &pbUser.SetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } - resp := pbUser.SetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{}} - for _, v := range req.ConversationIDList { - resp.ConversationOptResultList = append(resp.ConversationOptResultList, &pbUser.OptResult{ConversationID: v, Result: req.Opt}) +func (s *userServer) BatchSetConversations(ctx context.Context, req *pbUser.BatchSetConversationsReq) (*pbUser.BatchSetConversationsResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbUser.BatchSetConversationsResp{} + for _, v := range req.Conversations { + conversation := db.Conversation{} + if err := utils.CopyStructFields(&conversation, v); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), v.String(), "CopyStructFields failed", err.Error()) + } + 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} + return resp, nil + } + if err := imdb.SetConversation(conversation); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation error", err.Error()) + resp.Failed = append(resp.Failed, v.ConversationID) + continue + } + resp.Success = append(resp.Success, v.ConversationID) } - chat.SetReceiveMessageOptNotification(req.OperationID, req.OpUserID, req.FromUserID) - log.NewInfo(req.OperationID, "SetReceiveMessageOpt rpc return ", resp.String()) - return &resp, nil + chat.SetConversationNotification(req.OperationID, req.OwnerUserID) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String()) + resp.CommonResp = &pbUser.CommonResp{} + return resp, nil } -func (s *userServer) GetReceiveMessageOpt(ctx context.Context, req *pbUser.GetReceiveMessageOptReq) (*pbUser.GetReceiveMessageOptResp, error) { - log.NewInfo(req.OperationID, "GetReceiveMessageOpt args ", req.String()) - m, err := db.DB.GetMultiConversationMsgOpt(req.FromUserID, req.ConversationIDList) +func (s *userServer) GetAllConversations(ctx context.Context, req *pbUser.GetAllConversationsReq) (*pbUser.GetAllConversationsResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbUser.GetAllConversationsResp{Conversations: []*pbUser.Conversation{}} + conversations, err := imdb.GetUserAllConversations(req.OwnerUserID) if err != nil { - log.NewError(req.OperationID, "GetMultiConversationMsgOpt failed ", err.Error(), req.FromUserID, req.ConversationIDList) - return &pbUser.GetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversations error", err.Error()) + resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil } - resp := pbUser.GetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{}} - for k, v := range m { - resp.ConversationOptResultList = append(resp.ConversationOptResultList, &pbUser.OptResult{ConversationID: k, Result: int32(v)}) + if err = utils.CopyStructFields(&resp.Conversations, conversations); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields error", err.Error()) } - log.NewInfo(req.OperationID, "GetReceiveMessageOpt rpc return ", resp.String()) - return &resp, nil + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String()) + resp.CommonResp = &pbUser.CommonResp{} + return resp, nil } -func (s *userServer) GetAllConversationMsgOpt(ctx context.Context, req *pbUser.GetAllConversationMsgOptReq) (*pbUser.GetAllConversationMsgOptResp, error) { - log.NewInfo(req.OperationID, "GetAllConversationMsgOpt args ", req.String()) - m, err := db.DB.GetAllConversationMsgOpt(req.FromUserID) - if err != nil { - log.NewError(req.OperationID, "GetAllConversationMsgOpt failed ", err.Error(), req.FromUserID) - return &pbUser.GetAllConversationMsgOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } - resp := pbUser.GetAllConversationMsgOptResp{CommonResp: &pbUser.CommonResp{}} - for k, v := range m { - resp.ConversationOptResultList = append(resp.ConversationOptResultList, &pbUser.OptResult{ConversationID: k, Result: int32(v)}) - } - log.NewInfo(req.OperationID, "GetAllConversationMsgOpt rpc return ", resp.String()) - return &resp, nil +func (s *userServer) GetConversation(ctx context.Context, req *pbUser.GetConversationReq) (*pbUser.GetConversationResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbUser.GetConversationResp{Conversation: &pbUser.Conversation{}} + conversation, err := imdb.GetConversation(req.OwnerUserID, req.ConversationID) + if err != nil{ + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversation error", err.Error()) + resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + if err := utils.CopyStructFields(resp.Conversation, &conversation); err != nil { + log.Debug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields error", conversation, err.Error()) + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + resp.CommonResp = &pbUser.CommonResp{} + return resp, nil } + +func (s *userServer) GetConversations(ctx context.Context, req *pbUser.GetConversationsReq) (*pbUser.GetConversationsResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbUser.GetConversationsResp{Conversations: []*pbUser.Conversation{}} + conversations, err := imdb.GetConversations(req.OwnerUserID, req.ConversationIDs) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversations error", err.Error()) + resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + if err := utils.CopyStructFields(&resp.Conversations, conversations); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", conversations, err.Error()) + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + resp.CommonResp = &pbUser.CommonResp{} + return resp, nil +} + +func (s *userServer) SetConversation(ctx context.Context, req *pbUser.SetConversationReq) (*pbUser.SetConversationResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbUser.SetConversationResp{} + 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()) + } + if err := db.DB.SetSingleConversationRecvMsgOpt(req.Conversation.OwnerUserID, req.Conversation.ConversationID, req.Conversation.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} + return resp, nil + } + err := imdb.SetConversation(conversation) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation error", err.Error()) + resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg} + return resp, nil + } + chat.SetConversationNotification(req.OperationID, req.Conversation.OwnerUserID) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String()) + resp.CommonResp = &pbUser.CommonResp{} + return resp, nil +} + +//func (s *userServer) SetReceiveMessageOpt(ctx context.Context, req *pbUser.SetReceiveMessageOptReq) (*pbUser.SetReceiveMessageOptResp, error) { +// log.NewInfo(req.OperationID, "SetReceiveMessageOpt args ", req.String()) +// m := make(map[string]int, len(req.ConversationIDList)) +// for _, v := range req.ConversationIDList { +// m[v] = int(req.Opt) +// } +// err := db.DB.SetMultiConversationMsgOpt(req.FromUserID, m) +// if err != nil { +// log.NewError(req.OperationID, "SetMultiConversationMsgOpt failed ", err.Error(), req) +// return &pbUser.SetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil +// } +// resp := pbUser.SetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{}} +// +// for _, v := range req.ConversationIDList { +// resp.ConversationOptResultList = append(resp.ConversationOptResultList, &pbUser.OptResult{ConversationID: v, Result: req.Opt}) +// } +// chat.SetReceiveMessageOptNotification(req.OperationID, req.OpUserID, req.FromUserID) +// log.NewInfo(req.OperationID, "SetReceiveMessageOpt rpc return ", resp.String()) +// return &resp, nil +//} +// +//func (s *userServer) GetReceiveMessageOpt(ctx context.Context, req *pbUser.GetReceiveMessageOptReq) (*pbUser.GetReceiveMessageOptResp, error) { +// log.NewInfo(req.OperationID, "GetReceiveMessageOpt args ", req.String()) +// m, err := db.DB.GetMultiConversationMsgOpt(req.FromUserID, req.ConversationIDList) +// if err != nil { +// log.NewError(req.OperationID, "GetMultiConversationMsgOpt failed ", err.Error(), req.FromUserID, req.ConversationIDList) +// return &pbUser.GetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil +// } +// resp := pbUser.GetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{}} +// for k, v := range m { +// resp.ConversationOptResultList = append(resp.ConversationOptResultList, &pbUser.OptResult{ConversationID: k, Result: int32(v)}) +// } +// log.NewInfo(req.OperationID, "GetReceiveMessageOpt rpc return ", resp.String()) +// return &resp, nil +//} +// +//func (s *userServer) GetAllConversationMsgOpt(ctx context.Context, req *pbUser.GetAllConversationMsgOptReq) (*pbUser.GetAllConversationMsgOptResp, error) { +// log.NewInfo(req.OperationID, "GetAllConversationMsgOpt args ", req.String()) +// m, err := db.DB.GetAllConversationMsgOpt(req.FromUserID) +// if err != nil { +// log.NewError(req.OperationID, "GetAllConversationMsgOpt failed ", err.Error(), req.FromUserID) +// return &pbUser.GetAllConversationMsgOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil +// } +// resp := pbUser.GetAllConversationMsgOptResp{CommonResp: &pbUser.CommonResp{}} +// for k, v := range m { +// resp.ConversationOptResultList = append(resp.ConversationOptResultList, &pbUser.OptResult{ConversationID: k, Result: int32(v)}) +// } +// log.NewInfo(req.OperationID, "GetAllConversationMsgOpt rpc return ", resp.String()) +// return &resp, nil +//} + func (s *userServer) DeleteUsers(_ context.Context, req *pbUser.DeleteUsersReq) (*pbUser.DeleteUsersResp, error) { log.NewInfo(req.OperationID, "DeleteUsers args ", req.String()) if !token_verify.IsMangerUserID(req.OpUserID) { diff --git a/pkg/base_info/conversation_api_struct.go b/pkg/base_info/conversation_api_struct.go index 95aa8527f..45139a1fa 100644 --- a/pkg/base_info/conversation_api_struct.go +++ b/pkg/base_info/conversation_api_struct.go @@ -32,17 +32,72 @@ type SetReceiveMessageOptResp struct { ConversationOptResultList []*OptResult `json:"data"` } -//type Conversation struct { -// OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"` -// ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"` -// ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"` -// UserID string `gorm:"column:user_id;type:char(64)" json:"userID"` -// GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"` -// RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"` -// UnreadCount int32 `gorm:"column:unread_count" json:"unreadCount"` -// DraftTextTime int64 `gorm:"column:draft_text_time" json:"draftTextTime"` -// IsPinned bool `gorm:"column:is_pinned" json:"isPinned"` -// AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"` -// Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"` -//} +type Conversation struct { + OwnerUserID string `json:"ownerUserID" binding:"required"` + ConversationID string `json:"conversationID"` + ConversationType int32 `json:"conversationType"` + UserID string `json:"userID"` + GroupID string `json:"groupID"` + RecvMsgOpt int32 `json:"recvMsgOpt"` + UnreadCount int32 `json:"unreadCount"` + DraftTextTime int64 `json:"draftTextTime"` + IsPinned bool `json:"isPinned"` + IsPrivateChat bool `json:"isPrivateChat"` + AttachedInfo string `json:"attachedInfo"` + Ex string `json:"ex"` +} +type SetConversationReq struct { + Conversation + OperationID string `json:"operationID" binding:"required"` +} + +type SetConversationResp struct { + CommResp +} + +type BatchSetConversationsReq struct { + Conversations []Conversation `json:"conversations" binding:"required"` + OwnerUserID string `json:"ownerUserID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` +} + +type BatchSetConversationsResp struct { + CommResp + Data struct{ + Success []string `json:"success"` + Failed []string `json:"failed"` + } `json:"data"` +} + +type GetConversationReq struct { + ConversationID string `json:"conversationID" binding:"required"` + OwnerUserID string `json:"ownerUserID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` +} + +type GetConversationResp struct { + CommResp + Conversation Conversation `json:"data"` +} + +type GetAllConversationsReq struct { + OwnerUserID string `json:"ownerUserID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` +} + +type GetAllConversationsResp struct { + CommResp + Conversations []Conversation `json:"data"` +} + +type GetConversationsReq struct { + ConversationIDs []string `json:"conversationIDs" binding:"required"` + OwnerUserID string `json:"ownerUserID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` +} + +type GetConversationsResp struct { + CommResp + Conversations []Conversation `json:"data"` +} \ No newline at end of file diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 282440672..e29d7c6b0 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -22,7 +22,7 @@ var Config config type callBackConfig struct { Enable bool `yaml:"enable"` CallbackTimeOut int `yaml:"callbackTimeOut"` - CallbackFailedContinue bool `CallbackFailedContinue` + CallbackFailedContinue bool `callbackFailedContinue` } type config struct { diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 184f51e9d..e9e5454cd 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -213,6 +213,11 @@ type Conversation struct { UnreadCount int32 `gorm:"column:unread_count" json:"unreadCount"` 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"` AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"` Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"` } + +func (Conversation) TableName() string { + return "conversations" +} \ No newline at end of file diff --git a/pkg/common/db/mysql_model/im_mysql_model/message_cms.go b/pkg/common/db/mysql_model/im_mysql_model/message_cms.go index 811943667..eb4b0cc52 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/message_cms.go +++ b/pkg/common/db/mysql_model/im_mysql_model/message_cms.go @@ -2,6 +2,8 @@ package im_mysql_model import ( "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "fmt" ) @@ -30,7 +32,6 @@ func GetChatLog(chatLog db.ChatLog, pageNumber, showNumber int32) ([]db.ChatLog, if chatLog.SendTime.Unix() > 0 { db = db.Where("send_time > ? and send_time < ?", chatLog.SendTime, chatLog.SendTime.AddDate(0, 0, 1)) } - err = db.Find(&chatLogs).Error return chatLogs, err } @@ -58,6 +59,7 @@ func GetChatLogCount(chatLog db.ChatLog) (int64, error) { db = db.Where("recv_id = ?", chatLog.RecvID) } if chatLog.SendTime.Unix() > 0 { + log.NewDebug("", utils.GetSelfFuncName(), chatLog.SendTime, chatLog.SendTime.AddDate(0, 0, 1)) db = db.Where("send_time > ? and send_time < ?", chatLog.SendTime, chatLog.SendTime.AddDate(0, 0, 1)) } 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 7492d6a38..260a096c5 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,6 +4,7 @@ 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" @@ -291,3 +292,56 @@ 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(true) + 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(&db.Conversation{}).Update(conversation). + Update(map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt, "is_pinned": conversation.IsPinned, "is_private_chat": conversation.IsPrivateChat}).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(true) + 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 +} \ No newline at end of file diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index c8529b97c..c5594da9a 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -111,12 +111,14 @@ func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int32, fields _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) return err } -func (d *DataBases) SetSingleConversationMsgOpt(userID, conversationID string, opt int) error { + +func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { key := conversationReceiveMessageOpt + userID _, err := d.Exec("HSet", key, conversationID, opt) return err } -func (d *DataBases) GetSingleConversationMsgOpt(userID, conversationID string) (int, error) { + +func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { key := conversationReceiveMessageOpt + userID return redis.Int(d.Exec("HGet", key, conversationID)) } diff --git a/pkg/common/log/logrus.go b/pkg/common/log/logrus.go index a5e0ae7dd..63485e8d9 100644 --- a/pkg/common/log/logrus.go +++ b/pkg/common/log/logrus.go @@ -2,7 +2,6 @@ package log import ( "Open_IM/pkg/common/config" - "bufio" "fmt" "os" "time" @@ -33,13 +32,13 @@ func loggerInit(moduleName string) *Logger { //All logs will be printed logger.SetLevel(logrus.Level(config.Config.Log.RemainLogLevel)) //Close std console output - src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend) - if err != nil { - panic(err.Error()) - } - writer := bufio.NewWriter(src) - logger.SetOutput(writer) - //logger.SetOutput(os.Stdout) + //src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend) + //if err != nil { + // panic(err.Error()) + //} + //writer := bufio.NewWriter(src) + //logger.SetOutput(writer) + logger.SetOutput(os.Stdout) //Log Console Print Style Setting logger.SetFormatter(&nested.Formatter{ TimestampFormat: "2006-01-02 15:04:05.000", diff --git a/pkg/proto/proto_dir.cfg b/pkg/proto/proto_dir.cfg index 4a9853fbd..6383ac619 100644 --- a/pkg/proto/proto_dir.cfg +++ b/pkg/proto/proto_dir.cfg @@ -1,15 +1,14 @@ all_proto=( - message_cms/message_cms.proto - admin_cms/admin_cms.proto - statistics/statistics.proto - auth/auth.proto - friend/friend.proto - group/group.proto + #message_cms/message_cms.proto + #admin_cms/admin_cms.proto + #statistics/statistics.proto + #auth/auth.proto + #friend/friend.proto + #group/group.proto user/user.proto - chat/chat.proto - push/push.proto - relay/relay.proto - sdk_ws/ws.proto - + #chat/chat.proto + #push/push.proto + #relay/relay.proto + #sdk_ws/ws.proto ) diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index cb622b96c..5d200cce6 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -338,36 +338,6 @@ message ConversationUpdateTips{ } -///callback -message CommonCallbackURLReq { - string CallbackCommand = 1 [json_name = "code"]; - string OpenIMServerID = 2; - string OperationID = 3; -} - -message CommonCallbackURLResp { - string Code = 1 [json_name = "code"]; - string Msg = 2 [json_name = "msg"]; - string OperationID = 3 [json_name = "operationID"]; -} - -message CallbackBeforeSendMsgReq { - commonReq CommonCallbackURLReq = 1; - -} - -message CallbackBeforeSendMsgResp { - commonResp CommonCallbackURLResp = 1; - string FromUserID = 2; -} - -message CallbackAfterAddFriendReq { - commonReq CommonCallbackURLReq = 1; -} - -message CallbackAfterAddFriendResp { - commonResp CommonCallbackURLResp = 1; -} ///cms diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index aecc22680..efa105b60 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -6,7 +6,6 @@ package user - import ( sdk_ws "Open_IM/pkg/proto/sdk_ws" context "context" @@ -655,20 +654,27 @@ func (x *UpdateUserInfoResp) GetCommonResp() *CommonResp { return nil } -type SetReceiveMessageOptReq struct { +type Conversation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FromUserID string `protobuf:"bytes,1,opt,name=FromUserID,proto3" json:"FromUserID,omitempty"` - Opt int32 `protobuf:"varint,2,opt,name=opt,proto3" json:"opt,omitempty"` - ConversationIDList []string `protobuf:"bytes,3,rep,name=conversationIDList,proto3" json:"conversationIDList,omitempty"` - OperationID string `protobuf:"bytes,4,opt,name=operationID,proto3" json:"operationID,omitempty"` - OpUserID string `protobuf:"bytes,5,opt,name=OpUserID,proto3" json:"OpUserID,omitempty"` + OwnerUserID string `protobuf:"bytes,1,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"` + ConversationID string `protobuf:"bytes,2,opt,name=ConversationID,proto3" json:"ConversationID,omitempty"` + RecvMsgOpt int32 `protobuf:"varint,3,opt,name=RecvMsgOpt,proto3" json:"RecvMsgOpt,omitempty"` + ConversationType int32 `protobuf:"varint,4,opt,name=ConversationType,proto3" json:"ConversationType,omitempty"` + UserID string `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,omitempty"` + GroupID string `protobuf:"bytes,6,opt,name=GroupID,proto3" json:"GroupID,omitempty"` + UnreadCount int32 `protobuf:"varint,7,opt,name=UnreadCount,proto3" json:"UnreadCount,omitempty"` + DraftTextTime int64 `protobuf:"varint,8,opt,name=DraftTextTime,proto3" json:"DraftTextTime,omitempty"` + IsPinned bool `protobuf:"varint,9,opt,name=IsPinned,proto3" json:"IsPinned,omitempty"` + AttachedInfo string `protobuf:"bytes,10,opt,name=AttachedInfo,proto3" json:"AttachedInfo,omitempty"` + IsPrivateChat bool `protobuf:"varint,11,opt,name=IsPrivateChat,proto3" json:"IsPrivateChat,omitempty"` + Ex string `protobuf:"bytes,12,opt,name=Ex,proto3" json:"Ex,omitempty"` } -func (x *SetReceiveMessageOptReq) Reset() { - *x = SetReceiveMessageOptReq{} +func (x *Conversation) Reset() { + *x = Conversation{} if protoimpl.UnsafeEnabled { mi := &file_user_user_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -676,13 +682,13 @@ func (x *SetReceiveMessageOptReq) Reset() { } } -func (x *SetReceiveMessageOptReq) String() string { +func (x *Conversation) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetReceiveMessageOptReq) ProtoMessage() {} +func (*Conversation) ProtoMessage() {} -func (x *SetReceiveMessageOptReq) ProtoReflect() protoreflect.Message { +func (x *Conversation) ProtoReflect() protoreflect.Message { mi := &file_user_user_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -694,57 +700,106 @@ func (x *SetReceiveMessageOptReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetReceiveMessageOptReq.ProtoReflect.Descriptor instead. -func (*SetReceiveMessageOptReq) Descriptor() ([]byte, []int) { +// Deprecated: Use Conversation.ProtoReflect.Descriptor instead. +func (*Conversation) Descriptor() ([]byte, []int) { return file_user_user_proto_rawDescGZIP(), []int{11} } -func (x *SetReceiveMessageOptReq) GetFromUserID() string { +func (x *Conversation) GetOwnerUserID() string { if x != nil { - return x.FromUserID + return x.OwnerUserID } return "" } -func (x *SetReceiveMessageOptReq) GetOpt() int32 { +func (x *Conversation) GetConversationID() string { if x != nil { - return x.Opt + return x.ConversationID + } + return "" +} + +func (x *Conversation) GetRecvMsgOpt() int32 { + if x != nil { + return x.RecvMsgOpt } return 0 } -func (x *SetReceiveMessageOptReq) GetConversationIDList() []string { +func (x *Conversation) GetConversationType() int32 { if x != nil { - return x.ConversationIDList + return x.ConversationType } - return nil + return 0 } -func (x *SetReceiveMessageOptReq) GetOperationID() string { +func (x *Conversation) GetUserID() string { if x != nil { - return x.OperationID + return x.UserID } return "" } -func (x *SetReceiveMessageOptReq) GetOpUserID() string { +func (x *Conversation) GetGroupID() string { if x != nil { - return x.OpUserID + return x.GroupID } return "" } -type OptResult struct { +func (x *Conversation) GetUnreadCount() int32 { + if x != nil { + return x.UnreadCount + } + return 0 +} + +func (x *Conversation) GetDraftTextTime() int64 { + if x != nil { + return x.DraftTextTime + } + return 0 +} + +func (x *Conversation) GetIsPinned() bool { + if x != nil { + return x.IsPinned + } + return false +} + +func (x *Conversation) GetAttachedInfo() string { + if x != nil { + return x.AttachedInfo + } + return "" +} + +func (x *Conversation) GetIsPrivateChat() bool { + if x != nil { + return x.IsPrivateChat + } + return false +} + +func (x *Conversation) GetEx() string { + if x != nil { + return x.Ex + } + return "" +} + +type SetConversationReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ConversationID string `protobuf:"bytes,1,opt,name=conversationID,proto3" json:"conversationID,omitempty"` - Result int32 `protobuf:"varint,2,opt,name=result,proto3" json:"result,omitempty"` //-1: failed; 0:default; 1: not receive ; 2: not jpush + Conversation *Conversation `protobuf:"bytes,1,opt,name=Conversation,proto3" json:"Conversation,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"` } -func (x *OptResult) Reset() { - *x = OptResult{} +func (x *SetConversationReq) Reset() { + *x = SetConversationReq{} if protoimpl.UnsafeEnabled { mi := &file_user_user_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -752,13 +807,13 @@ func (x *OptResult) Reset() { } } -func (x *OptResult) String() string { +func (x *SetConversationReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OptResult) ProtoMessage() {} +func (*SetConversationReq) ProtoMessage() {} -func (x *OptResult) ProtoReflect() protoreflect.Message { +func (x *SetConversationReq) ProtoReflect() protoreflect.Message { mi := &file_user_user_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -770,36 +825,35 @@ func (x *OptResult) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OptResult.ProtoReflect.Descriptor instead. -func (*OptResult) Descriptor() ([]byte, []int) { +// Deprecated: Use SetConversationReq.ProtoReflect.Descriptor instead. +func (*SetConversationReq) Descriptor() ([]byte, []int) { return file_user_user_proto_rawDescGZIP(), []int{12} } -func (x *OptResult) GetConversationID() string { +func (x *SetConversationReq) GetConversation() *Conversation { if x != nil { - return x.ConversationID + return x.Conversation + } + return nil +} + +func (x *SetConversationReq) GetOperationID() string { + if x != nil { + return x.OperationID } return "" } -func (x *OptResult) GetResult() int32 { - if x != nil { - return x.Result - } - return 0 -} - -type SetReceiveMessageOptResp struct { +type SetConversationResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` - ConversationOptResultList []*OptResult `protobuf:"bytes,2,rep,name=conversationOptResultList,proto3" json:"conversationOptResultList,omitempty"` + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` } -func (x *SetReceiveMessageOptResp) Reset() { - *x = SetReceiveMessageOptResp{} +func (x *SetConversationResp) Reset() { + *x = SetConversationResp{} if protoimpl.UnsafeEnabled { mi := &file_user_user_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -807,13 +861,13 @@ func (x *SetReceiveMessageOptResp) Reset() { } } -func (x *SetReceiveMessageOptResp) String() string { +func (x *SetConversationResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetReceiveMessageOptResp) ProtoMessage() {} +func (*SetConversationResp) ProtoMessage() {} -func (x *SetReceiveMessageOptResp) ProtoReflect() protoreflect.Message { +func (x *SetConversationResp) ProtoReflect() protoreflect.Message { mi := &file_user_user_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -825,38 +879,30 @@ func (x *SetReceiveMessageOptResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetReceiveMessageOptResp.ProtoReflect.Descriptor instead. -func (*SetReceiveMessageOptResp) Descriptor() ([]byte, []int) { +// Deprecated: Use SetConversationResp.ProtoReflect.Descriptor instead. +func (*SetConversationResp) Descriptor() ([]byte, []int) { return file_user_user_proto_rawDescGZIP(), []int{13} } -func (x *SetReceiveMessageOptResp) GetCommonResp() *CommonResp { +func (x *SetConversationResp) GetCommonResp() *CommonResp { if x != nil { return x.CommonResp } return nil } -func (x *SetReceiveMessageOptResp) GetConversationOptResultList() []*OptResult { - if x != nil { - return x.ConversationOptResultList - } - return nil -} - -type GetReceiveMessageOptReq struct { +type GetConversationReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FromUserID string `protobuf:"bytes,1,opt,name=FromUserID,proto3" json:"FromUserID,omitempty"` - ConversationIDList []string `protobuf:"bytes,2,rep,name=conversationIDList,proto3" json:"conversationIDList,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID,proto3" json:"operationID,omitempty"` - OpUserID string `protobuf:"bytes,4,opt,name=OpUserID,proto3" json:"OpUserID,omitempty"` + ConversationID string `protobuf:"bytes,1,opt,name=ConversationID,proto3" json:"ConversationID,omitempty"` + OwnerUserID string `protobuf:"bytes,2,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"` } -func (x *GetReceiveMessageOptReq) Reset() { - *x = GetReceiveMessageOptReq{} +func (x *GetConversationReq) Reset() { + *x = GetConversationReq{} if protoimpl.UnsafeEnabled { mi := &file_user_user_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -864,13 +910,13 @@ func (x *GetReceiveMessageOptReq) Reset() { } } -func (x *GetReceiveMessageOptReq) String() string { +func (x *GetConversationReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetReceiveMessageOptReq) ProtoMessage() {} +func (*GetConversationReq) ProtoMessage() {} -func (x *GetReceiveMessageOptReq) ProtoReflect() protoreflect.Message { +func (x *GetConversationReq) ProtoReflect() protoreflect.Message { mi := &file_user_user_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -882,50 +928,43 @@ func (x *GetReceiveMessageOptReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetReceiveMessageOptReq.ProtoReflect.Descriptor instead. -func (*GetReceiveMessageOptReq) Descriptor() ([]byte, []int) { +// Deprecated: Use GetConversationReq.ProtoReflect.Descriptor instead. +func (*GetConversationReq) Descriptor() ([]byte, []int) { return file_user_user_proto_rawDescGZIP(), []int{14} } -func (x *GetReceiveMessageOptReq) GetFromUserID() string { +func (x *GetConversationReq) GetConversationID() string { if x != nil { - return x.FromUserID + return x.ConversationID } return "" } -func (x *GetReceiveMessageOptReq) GetConversationIDList() []string { +func (x *GetConversationReq) GetOwnerUserID() string { if x != nil { - return x.ConversationIDList + return x.OwnerUserID } - return nil + return "" } -func (x *GetReceiveMessageOptReq) GetOperationID() string { +func (x *GetConversationReq) GetOperationID() string { if x != nil { return x.OperationID } return "" } -func (x *GetReceiveMessageOptReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -type GetReceiveMessageOptResp struct { +type GetConversationResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` - ConversationOptResultList []*OptResult `protobuf:"bytes,3,rep,name=conversationOptResultList,proto3" json:"conversationOptResultList,omitempty"` + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` + Conversation *Conversation `protobuf:"bytes,2,opt,name=Conversation,proto3" json:"Conversation,omitempty"` } -func (x *GetReceiveMessageOptResp) Reset() { - *x = GetReceiveMessageOptResp{} +func (x *GetConversationResp) Reset() { + *x = GetConversationResp{} if protoimpl.UnsafeEnabled { mi := &file_user_user_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -933,13 +972,13 @@ func (x *GetReceiveMessageOptResp) Reset() { } } -func (x *GetReceiveMessageOptResp) String() string { +func (x *GetConversationResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetReceiveMessageOptResp) ProtoMessage() {} +func (*GetConversationResp) ProtoMessage() {} -func (x *GetReceiveMessageOptResp) ProtoReflect() protoreflect.Message { +func (x *GetConversationResp) ProtoReflect() protoreflect.Message { mi := &file_user_user_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -951,37 +990,37 @@ func (x *GetReceiveMessageOptResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetReceiveMessageOptResp.ProtoReflect.Descriptor instead. -func (*GetReceiveMessageOptResp) Descriptor() ([]byte, []int) { +// Deprecated: Use GetConversationResp.ProtoReflect.Descriptor instead. +func (*GetConversationResp) Descriptor() ([]byte, []int) { return file_user_user_proto_rawDescGZIP(), []int{15} } -func (x *GetReceiveMessageOptResp) GetCommonResp() *CommonResp { +func (x *GetConversationResp) GetCommonResp() *CommonResp { if x != nil { return x.CommonResp } return nil } -func (x *GetReceiveMessageOptResp) GetConversationOptResultList() []*OptResult { +func (x *GetConversationResp) GetConversation() *Conversation { if x != nil { - return x.ConversationOptResultList + return x.Conversation } return nil } -type GetAllConversationMsgOptReq struct { +type GetConversationsReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FromUserID string `protobuf:"bytes,1,opt,name=FromUserID,proto3" json:"FromUserID,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID,proto3" json:"operationID,omitempty"` - OpUserID string `protobuf:"bytes,3,opt,name=OpUserID,proto3" json:"OpUserID,omitempty"` + OwnerUserID string `protobuf:"bytes,1,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"` + ConversationIDs []string `protobuf:"bytes,2,rep,name=ConversationIDs,proto3" json:"ConversationIDs,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"` } -func (x *GetAllConversationMsgOptReq) Reset() { - *x = GetAllConversationMsgOptReq{} +func (x *GetConversationsReq) Reset() { + *x = GetConversationsReq{} if protoimpl.UnsafeEnabled { mi := &file_user_user_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -989,13 +1028,13 @@ func (x *GetAllConversationMsgOptReq) Reset() { } } -func (x *GetAllConversationMsgOptReq) String() string { +func (x *GetConversationsReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAllConversationMsgOptReq) ProtoMessage() {} +func (*GetConversationsReq) ProtoMessage() {} -func (x *GetAllConversationMsgOptReq) ProtoReflect() protoreflect.Message { +func (x *GetConversationsReq) ProtoReflect() protoreflect.Message { mi := &file_user_user_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1007,43 +1046,43 @@ func (x *GetAllConversationMsgOptReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetAllConversationMsgOptReq.ProtoReflect.Descriptor instead. -func (*GetAllConversationMsgOptReq) Descriptor() ([]byte, []int) { +// Deprecated: Use GetConversationsReq.ProtoReflect.Descriptor instead. +func (*GetConversationsReq) Descriptor() ([]byte, []int) { return file_user_user_proto_rawDescGZIP(), []int{16} } -func (x *GetAllConversationMsgOptReq) GetFromUserID() string { +func (x *GetConversationsReq) GetOwnerUserID() string { if x != nil { - return x.FromUserID + return x.OwnerUserID } return "" } -func (x *GetAllConversationMsgOptReq) GetOperationID() string { +func (x *GetConversationsReq) GetConversationIDs() []string { + if x != nil { + return x.ConversationIDs + } + return nil +} + +func (x *GetConversationsReq) GetOperationID() string { if x != nil { return x.OperationID } return "" } -func (x *GetAllConversationMsgOptReq) GetOpUserID() string { - if x != nil { - return x.OpUserID - } - return "" -} - -type GetAllConversationMsgOptResp struct { +type GetConversationsResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` - ConversationOptResultList []*OptResult `protobuf:"bytes,3,rep,name=conversationOptResultList,proto3" json:"conversationOptResultList,omitempty"` + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` + Conversations []*Conversation `protobuf:"bytes,2,rep,name=Conversations,proto3" json:"Conversations,omitempty"` } -func (x *GetAllConversationMsgOptResp) Reset() { - *x = GetAllConversationMsgOptResp{} +func (x *GetConversationsResp) Reset() { + *x = GetConversationsResp{} if protoimpl.UnsafeEnabled { mi := &file_user_user_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1051,13 +1090,13 @@ func (x *GetAllConversationMsgOptResp) Reset() { } } -func (x *GetAllConversationMsgOptResp) String() string { +func (x *GetConversationsResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAllConversationMsgOptResp) ProtoMessage() {} +func (*GetConversationsResp) ProtoMessage() {} -func (x *GetAllConversationMsgOptResp) ProtoReflect() protoreflect.Message { +func (x *GetConversationsResp) ProtoReflect() protoreflect.Message { mi := &file_user_user_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1069,21 +1108,257 @@ func (x *GetAllConversationMsgOptResp) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetAllConversationMsgOptResp.ProtoReflect.Descriptor instead. -func (*GetAllConversationMsgOptResp) Descriptor() ([]byte, []int) { +// Deprecated: Use GetConversationsResp.ProtoReflect.Descriptor instead. +func (*GetConversationsResp) Descriptor() ([]byte, []int) { return file_user_user_proto_rawDescGZIP(), []int{17} } -func (x *GetAllConversationMsgOptResp) GetCommonResp() *CommonResp { +func (x *GetConversationsResp) GetCommonResp() *CommonResp { if x != nil { return x.CommonResp } return nil } -func (x *GetAllConversationMsgOptResp) GetConversationOptResultList() []*OptResult { +func (x *GetConversationsResp) GetConversations() []*Conversation { if x != nil { - return x.ConversationOptResultList + return x.Conversations + } + return nil +} + +type GetAllConversationsReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OwnerUserID string `protobuf:"bytes,1,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"` +} + +func (x *GetAllConversationsReq) Reset() { + *x = GetAllConversationsReq{} + if protoimpl.UnsafeEnabled { + mi := &file_user_user_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAllConversationsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAllConversationsReq) ProtoMessage() {} + +func (x *GetAllConversationsReq) ProtoReflect() protoreflect.Message { + mi := &file_user_user_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAllConversationsReq.ProtoReflect.Descriptor instead. +func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { + return file_user_user_proto_rawDescGZIP(), []int{18} +} + +func (x *GetAllConversationsReq) GetOwnerUserID() string { + if x != nil { + return x.OwnerUserID + } + return "" +} + +func (x *GetAllConversationsReq) GetOperationID() string { + if x != nil { + return x.OperationID + } + return "" +} + +type GetAllConversationsResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` + Conversations []*Conversation `protobuf:"bytes,2,rep,name=Conversations,proto3" json:"Conversations,omitempty"` +} + +func (x *GetAllConversationsResp) Reset() { + *x = GetAllConversationsResp{} + if protoimpl.UnsafeEnabled { + mi := &file_user_user_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAllConversationsResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAllConversationsResp) ProtoMessage() {} + +func (x *GetAllConversationsResp) ProtoReflect() protoreflect.Message { + mi := &file_user_user_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAllConversationsResp.ProtoReflect.Descriptor instead. +func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { + return file_user_user_proto_rawDescGZIP(), []int{19} +} + +func (x *GetAllConversationsResp) GetCommonResp() *CommonResp { + if x != nil { + return x.CommonResp + } + return nil +} + +func (x *GetAllConversationsResp) GetConversations() []*Conversation { + if x != nil { + return x.Conversations + } + return nil +} + +type BatchSetConversationsReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Conversations []*Conversation `protobuf:"bytes,1,rep,name=Conversations,proto3" json:"Conversations,omitempty"` + OwnerUserID string `protobuf:"bytes,2,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"` +} + +func (x *BatchSetConversationsReq) Reset() { + *x = BatchSetConversationsReq{} + if protoimpl.UnsafeEnabled { + mi := &file_user_user_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchSetConversationsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchSetConversationsReq) ProtoMessage() {} + +func (x *BatchSetConversationsReq) ProtoReflect() protoreflect.Message { + mi := &file_user_user_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchSetConversationsReq.ProtoReflect.Descriptor instead. +func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { + return file_user_user_proto_rawDescGZIP(), []int{20} +} + +func (x *BatchSetConversationsReq) GetConversations() []*Conversation { + if x != nil { + return x.Conversations + } + return nil +} + +func (x *BatchSetConversationsReq) GetOwnerUserID() string { + if x != nil { + return x.OwnerUserID + } + return "" +} + +func (x *BatchSetConversationsReq) GetOperationID() string { + if x != nil { + return x.OperationID + } + return "" +} + +type BatchSetConversationsResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"` + Success []string `protobuf:"bytes,2,rep,name=Success,proto3" json:"Success,omitempty"` + Failed []string `protobuf:"bytes,3,rep,name=Failed,proto3" json:"Failed,omitempty"` +} + +func (x *BatchSetConversationsResp) Reset() { + *x = BatchSetConversationsResp{} + if protoimpl.UnsafeEnabled { + mi := &file_user_user_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchSetConversationsResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchSetConversationsResp) ProtoMessage() {} + +func (x *BatchSetConversationsResp) ProtoReflect() protoreflect.Message { + mi := &file_user_user_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchSetConversationsResp.ProtoReflect.Descriptor instead. +func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { + return file_user_user_proto_rawDescGZIP(), []int{21} +} + +func (x *BatchSetConversationsResp) GetCommonResp() *CommonResp { + if x != nil { + return x.CommonResp + } + return nil +} + +func (x *BatchSetConversationsResp) GetSuccess() []string { + if x != nil { + return x.Success + } + return nil +} + +func (x *BatchSetConversationsResp) GetFailed() []string { + if x != nil { + return x.Failed } return nil } @@ -1100,7 +1375,7 @@ type ResignUserReq struct { func (x *ResignUserReq) Reset() { *x = ResignUserReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[18] + mi := &file_user_user_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1113,7 +1388,7 @@ func (x *ResignUserReq) String() string { func (*ResignUserReq) ProtoMessage() {} func (x *ResignUserReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[18] + mi := &file_user_user_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1126,7 +1401,7 @@ func (x *ResignUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ResignUserReq.ProtoReflect.Descriptor instead. func (*ResignUserReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{18} + return file_user_user_proto_rawDescGZIP(), []int{22} } func (x *ResignUserReq) GetUserId() string { @@ -1154,7 +1429,7 @@ type ResignUserResp struct { func (x *ResignUserResp) Reset() { *x = ResignUserResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[19] + mi := &file_user_user_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1167,7 +1442,7 @@ func (x *ResignUserResp) String() string { func (*ResignUserResp) ProtoMessage() {} func (x *ResignUserResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[19] + mi := &file_user_user_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1180,7 +1455,7 @@ func (x *ResignUserResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ResignUserResp.ProtoReflect.Descriptor instead. func (*ResignUserResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{19} + return file_user_user_proto_rawDescGZIP(), []int{23} } func (x *ResignUserResp) GetCommonResp() *CommonResp { @@ -1202,7 +1477,7 @@ type GetUserByIdReq struct { func (x *GetUserByIdReq) Reset() { *x = GetUserByIdReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[20] + mi := &file_user_user_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1215,7 +1490,7 @@ func (x *GetUserByIdReq) String() string { func (*GetUserByIdReq) ProtoMessage() {} func (x *GetUserByIdReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[20] + mi := &file_user_user_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1228,7 +1503,7 @@ func (x *GetUserByIdReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserByIdReq.ProtoReflect.Descriptor instead. func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{20} + return file_user_user_proto_rawDescGZIP(), []int{24} } func (x *GetUserByIdReq) GetUserId() string { @@ -1260,7 +1535,7 @@ type User struct { func (x *User) Reset() { *x = User{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[21] + mi := &file_user_user_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1273,7 +1548,7 @@ func (x *User) String() string { func (*User) ProtoMessage() {} func (x *User) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[21] + mi := &file_user_user_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1286,7 +1561,7 @@ func (x *User) ProtoReflect() protoreflect.Message { // Deprecated: Use User.ProtoReflect.Descriptor instead. func (*User) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{21} + return file_user_user_proto_rawDescGZIP(), []int{25} } func (x *User) GetProfilePhoto() string { @@ -1336,7 +1611,7 @@ type GetUserByIdResp struct { func (x *GetUserByIdResp) Reset() { *x = GetUserByIdResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[22] + mi := &file_user_user_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1349,7 +1624,7 @@ func (x *GetUserByIdResp) String() string { func (*GetUserByIdResp) ProtoMessage() {} func (x *GetUserByIdResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[22] + mi := &file_user_user_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1362,7 +1637,7 @@ func (x *GetUserByIdResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserByIdResp.ProtoReflect.Descriptor instead. func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{22} + return file_user_user_proto_rawDescGZIP(), []int{26} } func (x *GetUserByIdResp) GetCommonResp() *CommonResp { @@ -1392,7 +1667,7 @@ type GetUsersByNameReq struct { func (x *GetUsersByNameReq) Reset() { *x = GetUsersByNameReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[23] + mi := &file_user_user_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1405,7 +1680,7 @@ func (x *GetUsersByNameReq) String() string { func (*GetUsersByNameReq) ProtoMessage() {} func (x *GetUsersByNameReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[23] + mi := &file_user_user_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1418,7 +1693,7 @@ func (x *GetUsersByNameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUsersByNameReq.ProtoReflect.Descriptor instead. func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{23} + return file_user_user_proto_rawDescGZIP(), []int{27} } func (x *GetUsersByNameReq) GetUserName() string { @@ -1455,7 +1730,7 @@ type GetUsersByNameResp struct { func (x *GetUsersByNameResp) Reset() { *x = GetUsersByNameResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[24] + mi := &file_user_user_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1468,7 +1743,7 @@ func (x *GetUsersByNameResp) String() string { func (*GetUsersByNameResp) ProtoMessage() {} func (x *GetUsersByNameResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[24] + mi := &file_user_user_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1481,7 +1756,7 @@ func (x *GetUsersByNameResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUsersByNameResp.ProtoReflect.Descriptor instead. func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{24} + return file_user_user_proto_rawDescGZIP(), []int{28} } func (x *GetUsersByNameResp) GetUsers() []*User { @@ -1521,7 +1796,7 @@ type AlterUserReq struct { func (x *AlterUserReq) Reset() { *x = AlterUserReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[25] + mi := &file_user_user_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1534,7 +1809,7 @@ func (x *AlterUserReq) String() string { func (*AlterUserReq) ProtoMessage() {} func (x *AlterUserReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[25] + mi := &file_user_user_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1547,7 +1822,7 @@ func (x *AlterUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AlterUserReq.ProtoReflect.Descriptor instead. func (*AlterUserReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{25} + return file_user_user_proto_rawDescGZIP(), []int{29} } func (x *AlterUserReq) GetUserId() string { @@ -1603,7 +1878,7 @@ type AlterUserResp struct { func (x *AlterUserResp) Reset() { *x = AlterUserResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[26] + mi := &file_user_user_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1616,7 +1891,7 @@ func (x *AlterUserResp) String() string { func (*AlterUserResp) ProtoMessage() {} func (x *AlterUserResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[26] + mi := &file_user_user_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1629,7 +1904,7 @@ func (x *AlterUserResp) ProtoReflect() protoreflect.Message { // Deprecated: Use AlterUserResp.ProtoReflect.Descriptor instead. func (*AlterUserResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{26} + return file_user_user_proto_rawDescGZIP(), []int{30} } func (x *AlterUserResp) GetCommonResp() *CommonResp { @@ -1652,7 +1927,7 @@ type GetUsersReq struct { func (x *GetUsersReq) Reset() { *x = GetUsersReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[27] + mi := &file_user_user_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1665,7 +1940,7 @@ func (x *GetUsersReq) String() string { func (*GetUsersReq) ProtoMessage() {} func (x *GetUsersReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[27] + mi := &file_user_user_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1678,7 +1953,7 @@ func (x *GetUsersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUsersReq.ProtoReflect.Descriptor instead. func (*GetUsersReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{27} + return file_user_user_proto_rawDescGZIP(), []int{31} } func (x *GetUsersReq) GetOperationID() string { @@ -1716,7 +1991,7 @@ type GetUsersResp struct { func (x *GetUsersResp) Reset() { *x = GetUsersResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[28] + mi := &file_user_user_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1729,7 +2004,7 @@ func (x *GetUsersResp) String() string { func (*GetUsersResp) ProtoMessage() {} func (x *GetUsersResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[28] + mi := &file_user_user_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1742,7 +2017,7 @@ func (x *GetUsersResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUsersResp.ProtoReflect.Descriptor instead. func (*GetUsersResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{28} + return file_user_user_proto_rawDescGZIP(), []int{32} } func (x *GetUsersResp) GetCommonResp() *CommonResp { @@ -1788,7 +2063,7 @@ type AddUserReq struct { func (x *AddUserReq) Reset() { *x = AddUserReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[29] + mi := &file_user_user_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1801,7 +2076,7 @@ func (x *AddUserReq) String() string { func (*AddUserReq) ProtoMessage() {} func (x *AddUserReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[29] + mi := &file_user_user_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1814,7 +2089,7 @@ func (x *AddUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddUserReq.ProtoReflect.Descriptor instead. func (*AddUserReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{29} + return file_user_user_proto_rawDescGZIP(), []int{33} } func (x *AddUserReq) GetOperationID() string { @@ -1863,7 +2138,7 @@ type AddUserResp struct { func (x *AddUserResp) Reset() { *x = AddUserResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[30] + mi := &file_user_user_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1876,7 +2151,7 @@ func (x *AddUserResp) String() string { func (*AddUserResp) ProtoMessage() {} func (x *AddUserResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[30] + mi := &file_user_user_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1889,7 +2164,7 @@ func (x *AddUserResp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddUserResp.ProtoReflect.Descriptor instead. func (*AddUserResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{30} + return file_user_user_proto_rawDescGZIP(), []int{34} } func (x *AddUserResp) GetCommonResp() *CommonResp { @@ -1913,7 +2188,7 @@ type BlockUserReq struct { func (x *BlockUserReq) Reset() { *x = BlockUserReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[31] + mi := &file_user_user_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1926,7 +2201,7 @@ func (x *BlockUserReq) String() string { func (*BlockUserReq) ProtoMessage() {} func (x *BlockUserReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[31] + mi := &file_user_user_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1939,7 +2214,7 @@ func (x *BlockUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockUserReq.ProtoReflect.Descriptor instead. func (*BlockUserReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{31} + return file_user_user_proto_rawDescGZIP(), []int{35} } func (x *BlockUserReq) GetUserId() string { @@ -1981,7 +2256,7 @@ type BlockUserResp struct { func (x *BlockUserResp) Reset() { *x = BlockUserResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[32] + mi := &file_user_user_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1994,7 +2269,7 @@ func (x *BlockUserResp) String() string { func (*BlockUserResp) ProtoMessage() {} func (x *BlockUserResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[32] + mi := &file_user_user_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2007,7 +2282,7 @@ func (x *BlockUserResp) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockUserResp.ProtoReflect.Descriptor instead. func (*BlockUserResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{32} + return file_user_user_proto_rawDescGZIP(), []int{36} } func (x *BlockUserResp) GetCommonResp() *CommonResp { @@ -2030,7 +2305,7 @@ type UnBlockUserReq struct { func (x *UnBlockUserReq) Reset() { *x = UnBlockUserReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[33] + mi := &file_user_user_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2043,7 +2318,7 @@ func (x *UnBlockUserReq) String() string { func (*UnBlockUserReq) ProtoMessage() {} func (x *UnBlockUserReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[33] + mi := &file_user_user_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2056,7 +2331,7 @@ func (x *UnBlockUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UnBlockUserReq.ProtoReflect.Descriptor instead. func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{33} + return file_user_user_proto_rawDescGZIP(), []int{37} } func (x *UnBlockUserReq) GetUserId() string { @@ -2091,7 +2366,7 @@ type UnBlockUserResp struct { func (x *UnBlockUserResp) Reset() { *x = UnBlockUserResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[34] + mi := &file_user_user_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2104,7 +2379,7 @@ func (x *UnBlockUserResp) String() string { func (*UnBlockUserResp) ProtoMessage() {} func (x *UnBlockUserResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[34] + mi := &file_user_user_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2117,7 +2392,7 @@ func (x *UnBlockUserResp) ProtoReflect() protoreflect.Message { // Deprecated: Use UnBlockUserResp.ProtoReflect.Descriptor instead. func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{34} + return file_user_user_proto_rawDescGZIP(), []int{38} } func (x *UnBlockUserResp) GetCommonResp() *CommonResp { @@ -2140,7 +2415,7 @@ type GetBlockUsersReq struct { func (x *GetBlockUsersReq) Reset() { *x = GetBlockUsersReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[35] + mi := &file_user_user_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2153,7 +2428,7 @@ func (x *GetBlockUsersReq) String() string { func (*GetBlockUsersReq) ProtoMessage() {} func (x *GetBlockUsersReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[35] + mi := &file_user_user_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2166,7 +2441,7 @@ func (x *GetBlockUsersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockUsersReq.ProtoReflect.Descriptor instead. func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{35} + return file_user_user_proto_rawDescGZIP(), []int{39} } func (x *GetBlockUsersReq) GetPagination() *sdk_ws.RequestPagination { @@ -2203,7 +2478,7 @@ type BlockUser struct { func (x *BlockUser) Reset() { *x = BlockUser{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[36] + mi := &file_user_user_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2216,7 +2491,7 @@ func (x *BlockUser) String() string { func (*BlockUser) ProtoMessage() {} func (x *BlockUser) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[36] + mi := &file_user_user_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2229,7 +2504,7 @@ func (x *BlockUser) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockUser.ProtoReflect.Descriptor instead. func (*BlockUser) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{36} + return file_user_user_proto_rawDescGZIP(), []int{40} } func (x *BlockUser) GetUser() *User { @@ -2267,7 +2542,7 @@ type GetBlockUsersResp struct { func (x *GetBlockUsersResp) Reset() { *x = GetBlockUsersResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[37] + mi := &file_user_user_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2280,7 +2555,7 @@ func (x *GetBlockUsersResp) String() string { func (*GetBlockUsersResp) ProtoMessage() {} func (x *GetBlockUsersResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[37] + mi := &file_user_user_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2293,7 +2568,7 @@ func (x *GetBlockUsersResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockUsersResp.ProtoReflect.Descriptor instead. func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{37} + return file_user_user_proto_rawDescGZIP(), []int{41} } func (x *GetBlockUsersResp) GetCommonResp() *CommonResp { @@ -2336,7 +2611,7 @@ type GetBlockUserByIdReq struct { func (x *GetBlockUserByIdReq) Reset() { *x = GetBlockUserByIdReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[38] + mi := &file_user_user_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2349,7 +2624,7 @@ func (x *GetBlockUserByIdReq) String() string { func (*GetBlockUserByIdReq) ProtoMessage() {} func (x *GetBlockUserByIdReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[38] + mi := &file_user_user_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2362,7 +2637,7 @@ func (x *GetBlockUserByIdReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockUserByIdReq.ProtoReflect.Descriptor instead. func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{38} + return file_user_user_proto_rawDescGZIP(), []int{42} } func (x *GetBlockUserByIdReq) GetUserId() string { @@ -2390,7 +2665,7 @@ type GetBlockUserByIdResp struct { func (x *GetBlockUserByIdResp) Reset() { *x = GetBlockUserByIdResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[39] + mi := &file_user_user_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2403,7 +2678,7 @@ func (x *GetBlockUserByIdResp) String() string { func (*GetBlockUserByIdResp) ProtoMessage() {} func (x *GetBlockUserByIdResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[39] + mi := &file_user_user_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2416,7 +2691,7 @@ func (x *GetBlockUserByIdResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockUserByIdResp.ProtoReflect.Descriptor instead. func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{39} + return file_user_user_proto_rawDescGZIP(), []int{43} } func (x *GetBlockUserByIdResp) GetBlockUser() *BlockUser { @@ -2439,7 +2714,7 @@ type DeleteUserReq struct { func (x *DeleteUserReq) Reset() { *x = DeleteUserReq{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[40] + mi := &file_user_user_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2452,7 +2727,7 @@ func (x *DeleteUserReq) String() string { func (*DeleteUserReq) ProtoMessage() {} func (x *DeleteUserReq) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[40] + mi := &file_user_user_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2465,7 +2740,7 @@ func (x *DeleteUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteUserReq.ProtoReflect.Descriptor instead. func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{40} + return file_user_user_proto_rawDescGZIP(), []int{44} } func (x *DeleteUserReq) GetUserId() string { @@ -2493,12 +2768,14 @@ type DeleteUserResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"` } func (x *DeleteUserResp) Reset() { *x = DeleteUserResp{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[41] + mi := &file_user_user_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2511,7 +2788,7 @@ func (x *DeleteUserResp) String() string { func (*DeleteUserResp) ProtoMessage() {} func (x *DeleteUserResp) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[41] + mi := &file_user_user_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2524,7 +2801,14 @@ func (x *DeleteUserResp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteUserResp.ProtoReflect.Descriptor instead. func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return file_user_user_proto_rawDescGZIP(), []int{41} + return file_user_user_proto_rawDescGZIP(), []int{45} +} + +func (x *DeleteUserResp) GetCommonResp() *CommonResp { + if x != nil { + return x.CommonResp + } + return nil } type AccountCheckResp_SingleUserStatus struct { @@ -2539,7 +2823,7 @@ type AccountCheckResp_SingleUserStatus struct { func (x *AccountCheckResp_SingleUserStatus) Reset() { *x = AccountCheckResp_SingleUserStatus{} if protoimpl.UnsafeEnabled { - mi := &file_user_user_proto_msgTypes[42] + mi := &file_user_user_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2552,7 +2836,7 @@ func (x *AccountCheckResp_SingleUserStatus) String() string { func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (x *AccountCheckResp_SingleUserStatus) ProtoReflect() protoreflect.Message { - mi := &file_user_user_proto_msgTypes[42] + mi := &file_user_user_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2669,325 +2953,372 @@ var file_user_user_proto_rawDesc = []byte{ 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb9, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x6f, 0x70, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x22, 0x4b, 0x0a, 0x09, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x9b, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x4d, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xa7, - 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x46, 0x72, - 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, - 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x9b, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x03, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, + 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, + 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, + 0x70, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, + 0x12, 0x20, 0x0a, 0x0b, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x54, 0x65, 0x78, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x44, 0x72, 0x61, 0x66, 0x74, + 0x54, 0x65, 0x78, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x69, + 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x69, + 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, + 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x49, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x45, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x45, 0x78, 0x22, 0x6e, + 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x47, + 0x0a, 0x13, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x19, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x4f, - 0x70, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x22, 0x9f, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x26, + 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x01, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x22, 0x82, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x0d, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x5c, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x38, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x98, 0x01, 0x0a, + 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x38, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, - 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x22, 0x42, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, - 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, - 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x22, 0x98, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x0a, - 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x63, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, - 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x1e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x22, 0x97, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x20, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, - 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, - 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, - 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x0c, 0x41, 0x6c, 0x74, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x91, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x44, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, - 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, - 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0a, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x22, 0x98, - 0x01, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, - 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, - 0x20, 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x0b, 0x41, 0x64, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, 0x0a, 0x0c, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x45, 0x6e, 0x64, - 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, - 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x66, 0x0a, 0x0e, - 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, - 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0f, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x44, - 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x22, 0x7f, 0x0a, 0x09, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x45, 0x6e, 0x64, - 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x49, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x69, + 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x44, 0x22, 0x42, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x44, 0x22, 0x98, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x68, 0x6f, 0x74, 0x6f, + 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x63, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x55, - 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, - 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x22, 0x50, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, - 0x0a, 0x07, 0x55, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, + 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x99, 0x01, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x20, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x0c, 0x41, 0x6c, + 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x91, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x44, 0x0a, 0x0a, 0x50, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, + 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x45, + 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, + 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x0b, + 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, + 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, + 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x0d, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, + 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x66, 0x0a, 0x0e, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x4f, + 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, + 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0f, 0x55, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9e, 0x01, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x44, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, + 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x45, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x2d, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, - 0x22, 0x66, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x22, 0x7f, 0x0a, + 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x04, 0x55, 0x73, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x42, 0x65, + 0x67, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xd9, + 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0a, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x22, 0x50, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x55, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, - 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x32, 0xdd, 0x09, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x43, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, - 0x12, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x55, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x12, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, - 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x12, 0x1d, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, - 0x18, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x12, 0x21, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3d, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x12, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x14, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, - 0x64, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x37, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x09, 0x41, 0x6c, 0x74, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x6c, - 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x31, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x11, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x12, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, - 0x11, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x34, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x55, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x19, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, - 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x37, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, - 0x75, 0x73, 0x65, 0x72, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x45, 0x0a, 0x14, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x22, 0x66, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x55, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, + 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x0e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, + 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x32, + 0xd5, 0x0a, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, + 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x12, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x1a, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x13, 0x47, + 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x49, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x15, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x1a, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x14, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, + 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, + 0x0a, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x1a, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x09, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, + 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x11, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x2e, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x34, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x1a, 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x40, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, + 0x72, 0x73, 0x12, 0x16, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, + 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, + 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x1a, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x75, 0x73, 0x65, + 0x72, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3002,7 +3333,7 @@ func file_user_user_proto_rawDescGZIP() []byte { return file_user_user_proto_rawDescData } -var file_user_user_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_user_user_proto_msgTypes = make([]protoimpl.MessageInfo, 47) var file_user_user_proto_goTypes = []interface{}{ (*CommonResp)(nil), // 0: user.CommonResp (*DeleteUsersReq)(nil), // 1: user.DeleteUsersReq @@ -3015,120 +3346,133 @@ var file_user_user_proto_goTypes = []interface{}{ (*GetUserInfoResp)(nil), // 8: user.GetUserInfoResp (*UpdateUserInfoReq)(nil), // 9: user.UpdateUserInfoReq (*UpdateUserInfoResp)(nil), // 10: user.UpdateUserInfoResp - (*SetReceiveMessageOptReq)(nil), // 11: user.SetReceiveMessageOptReq - (*OptResult)(nil), // 12: user.OptResult - (*SetReceiveMessageOptResp)(nil), // 13: user.SetReceiveMessageOptResp - (*GetReceiveMessageOptReq)(nil), // 14: user.GetReceiveMessageOptReq - (*GetReceiveMessageOptResp)(nil), // 15: user.GetReceiveMessageOptResp - (*GetAllConversationMsgOptReq)(nil), // 16: user.GetAllConversationMsgOptReq - (*GetAllConversationMsgOptResp)(nil), // 17: user.GetAllConversationMsgOptResp - (*ResignUserReq)(nil), // 18: user.ResignUserReq - (*ResignUserResp)(nil), // 19: user.ResignUserResp - (*GetUserByIdReq)(nil), // 20: user.GetUserByIdReq - (*User)(nil), // 21: user.User - (*GetUserByIdResp)(nil), // 22: user.GetUserByIdResp - (*GetUsersByNameReq)(nil), // 23: user.GetUsersByNameReq - (*GetUsersByNameResp)(nil), // 24: user.GetUsersByNameResp - (*AlterUserReq)(nil), // 25: user.AlterUserReq - (*AlterUserResp)(nil), // 26: user.AlterUserResp - (*GetUsersReq)(nil), // 27: user.GetUsersReq - (*GetUsersResp)(nil), // 28: user.GetUsersResp - (*AddUserReq)(nil), // 29: user.AddUserReq - (*AddUserResp)(nil), // 30: user.AddUserResp - (*BlockUserReq)(nil), // 31: user.BlockUserReq - (*BlockUserResp)(nil), // 32: user.BlockUserResp - (*UnBlockUserReq)(nil), // 33: user.UnBlockUserReq - (*UnBlockUserResp)(nil), // 34: user.UnBlockUserResp - (*GetBlockUsersReq)(nil), // 35: user.GetBlockUsersReq - (*BlockUser)(nil), // 36: user.BlockUser - (*GetBlockUsersResp)(nil), // 37: user.GetBlockUsersResp - (*GetBlockUserByIdReq)(nil), // 38: user.GetBlockUserByIdReq - (*GetBlockUserByIdResp)(nil), // 39: user.GetBlockUserByIdResp - (*DeleteUserReq)(nil), // 40: user.DeleteUserReq - (*DeleteUserResp)(nil), // 41: user.DeleteUserResp - (*AccountCheckResp_SingleUserStatus)(nil), // 42: user.AccountCheckResp.SingleUserStatus - (*sdk_ws.UserInfo)(nil), // 43: server_api_params.UserInfo - (*sdk_ws.RequestPagination)(nil), // 44: server_api_params.RequestPagination - (*sdk_ws.ResponsePagination)(nil), // 45: server_api_params.ResponsePagination + (*Conversation)(nil), // 11: user.Conversation + (*SetConversationReq)(nil), // 12: user.SetConversationReq + (*SetConversationResp)(nil), // 13: user.SetConversationResp + (*GetConversationReq)(nil), // 14: user.GetConversationReq + (*GetConversationResp)(nil), // 15: user.GetConversationResp + (*GetConversationsReq)(nil), // 16: user.GetConversationsReq + (*GetConversationsResp)(nil), // 17: user.GetConversationsResp + (*GetAllConversationsReq)(nil), // 18: user.GetAllConversationsReq + (*GetAllConversationsResp)(nil), // 19: user.GetAllConversationsResp + (*BatchSetConversationsReq)(nil), // 20: user.BatchSetConversationsReq + (*BatchSetConversationsResp)(nil), // 21: user.BatchSetConversationsResp + (*ResignUserReq)(nil), // 22: user.ResignUserReq + (*ResignUserResp)(nil), // 23: user.ResignUserResp + (*GetUserByIdReq)(nil), // 24: user.GetUserByIdReq + (*User)(nil), // 25: user.User + (*GetUserByIdResp)(nil), // 26: user.GetUserByIdResp + (*GetUsersByNameReq)(nil), // 27: user.GetUsersByNameReq + (*GetUsersByNameResp)(nil), // 28: user.GetUsersByNameResp + (*AlterUserReq)(nil), // 29: user.AlterUserReq + (*AlterUserResp)(nil), // 30: user.AlterUserResp + (*GetUsersReq)(nil), // 31: user.GetUsersReq + (*GetUsersResp)(nil), // 32: user.GetUsersResp + (*AddUserReq)(nil), // 33: user.AddUserReq + (*AddUserResp)(nil), // 34: user.AddUserResp + (*BlockUserReq)(nil), // 35: user.BlockUserReq + (*BlockUserResp)(nil), // 36: user.BlockUserResp + (*UnBlockUserReq)(nil), // 37: user.UnBlockUserReq + (*UnBlockUserResp)(nil), // 38: user.UnBlockUserResp + (*GetBlockUsersReq)(nil), // 39: user.GetBlockUsersReq + (*BlockUser)(nil), // 40: user.BlockUser + (*GetBlockUsersResp)(nil), // 41: user.GetBlockUsersResp + (*GetBlockUserByIdReq)(nil), // 42: user.GetBlockUserByIdReq + (*GetBlockUserByIdResp)(nil), // 43: user.GetBlockUserByIdResp + (*DeleteUserReq)(nil), // 44: user.DeleteUserReq + (*DeleteUserResp)(nil), // 45: user.DeleteUserResp + (*AccountCheckResp_SingleUserStatus)(nil), // 46: user.AccountCheckResp.SingleUserStatus + (*sdk_ws.UserInfo)(nil), // 47: server_api_params.UserInfo + (*sdk_ws.RequestPagination)(nil), // 48: server_api_params.RequestPagination + (*sdk_ws.ResponsePagination)(nil), // 49: server_api_params.ResponsePagination } var file_user_user_proto_depIdxs = []int32{ 0, // 0: user.DeleteUsersResp.CommonResp:type_name -> user.CommonResp 0, // 1: user.GetAllUserIDResp.CommonResp:type_name -> user.CommonResp 0, // 2: user.AccountCheckResp.commonResp:type_name -> user.CommonResp - 42, // 3: user.AccountCheckResp.ResultList:type_name -> user.AccountCheckResp.SingleUserStatus + 46, // 3: user.AccountCheckResp.ResultList:type_name -> user.AccountCheckResp.SingleUserStatus 0, // 4: user.GetUserInfoResp.commonResp:type_name -> user.CommonResp - 43, // 5: user.GetUserInfoResp.UserInfoList:type_name -> server_api_params.UserInfo - 43, // 6: user.UpdateUserInfoReq.UserInfo:type_name -> server_api_params.UserInfo + 47, // 5: user.GetUserInfoResp.UserInfoList:type_name -> server_api_params.UserInfo + 47, // 6: user.UpdateUserInfoReq.UserInfo:type_name -> server_api_params.UserInfo 0, // 7: user.UpdateUserInfoResp.commonResp:type_name -> user.CommonResp - 0, // 8: user.SetReceiveMessageOptResp.commonResp:type_name -> user.CommonResp - 12, // 9: user.SetReceiveMessageOptResp.conversationOptResultList:type_name -> user.OptResult - 0, // 10: user.GetReceiveMessageOptResp.commonResp:type_name -> user.CommonResp - 12, // 11: user.GetReceiveMessageOptResp.conversationOptResultList:type_name -> user.OptResult - 0, // 12: user.GetAllConversationMsgOptResp.commonResp:type_name -> user.CommonResp - 12, // 13: user.GetAllConversationMsgOptResp.conversationOptResultList:type_name -> user.OptResult - 0, // 14: user.ResignUserResp.commonResp:type_name -> user.CommonResp - 0, // 15: user.GetUserByIdResp.CommonResp:type_name -> user.CommonResp - 21, // 16: user.GetUserByIdResp.user:type_name -> user.User - 44, // 17: user.GetUsersByNameReq.Pagination:type_name -> server_api_params.RequestPagination - 21, // 18: user.GetUsersByNameResp.users:type_name -> user.User - 45, // 19: user.GetUsersByNameResp.Pagination:type_name -> server_api_params.ResponsePagination - 0, // 20: user.AlterUserResp.CommonResp:type_name -> user.CommonResp - 44, // 21: user.GetUsersReq.Pagination:type_name -> server_api_params.RequestPagination - 0, // 22: user.GetUsersResp.CommonResp:type_name -> user.CommonResp - 21, // 23: user.GetUsersResp.user:type_name -> user.User - 45, // 24: user.GetUsersResp.Pagination:type_name -> server_api_params.ResponsePagination - 0, // 25: user.AddUserResp.CommonResp:type_name -> user.CommonResp - 0, // 26: user.BlockUserResp.CommonResp:type_name -> user.CommonResp - 0, // 27: user.UnBlockUserResp.CommonResp:type_name -> user.CommonResp - 44, // 28: user.GetBlockUsersReq.Pagination:type_name -> server_api_params.RequestPagination - 21, // 29: user.BlockUser.User:type_name -> user.User - 0, // 30: user.GetBlockUsersResp.CommonResp:type_name -> user.CommonResp - 36, // 31: user.GetBlockUsersResp.BlockUsers:type_name -> user.BlockUser - 45, // 32: user.GetBlockUsersResp.Pagination:type_name -> server_api_params.ResponsePagination - 36, // 33: user.GetBlockUserByIdResp.BlockUser:type_name -> user.BlockUser - 7, // 34: user.user.GetUserInfo:input_type -> user.GetUserInfoReq - 9, // 35: user.user.UpdateUserInfo:input_type -> user.UpdateUserInfoReq - 1, // 36: user.user.DeleteUsers:input_type -> user.DeleteUsersReq - 3, // 37: user.user.GetAllUserID:input_type -> user.GetAllUserIDReq - 11, // 38: user.user.SetReceiveMessageOpt:input_type -> user.SetReceiveMessageOptReq - 14, // 39: user.user.GetReceiveMessageOpt:input_type -> user.GetReceiveMessageOptReq - 16, // 40: user.user.GetAllConversationMsgOpt:input_type -> user.GetAllConversationMsgOptReq - 5, // 41: user.user.AccountCheck:input_type -> user.AccountCheckReq - 20, // 42: user.user.GetUserById:input_type -> user.GetUserByIdReq - 23, // 43: user.user.GetUsersByName:input_type -> user.GetUsersByNameReq - 18, // 44: user.user.ResignUser:input_type -> user.ResignUserReq - 25, // 45: user.user.AlterUser:input_type -> user.AlterUserReq - 27, // 46: user.user.GetUsers:input_type -> user.GetUsersReq - 29, // 47: user.user.AddUser:input_type -> user.AddUserReq - 31, // 48: user.user.BlockUser:input_type -> user.BlockUserReq - 33, // 49: user.user.UnBlockUser:input_type -> user.UnBlockUserReq - 35, // 50: user.user.GetBlockUsers:input_type -> user.GetBlockUsersReq - 38, // 51: user.user.GetBlockUserById:input_type -> user.GetBlockUserByIdReq - 40, // 52: user.user.DeleteUser:input_type -> user.DeleteUserReq - 8, // 53: user.user.GetUserInfo:output_type -> user.GetUserInfoResp - 10, // 54: user.user.UpdateUserInfo:output_type -> user.UpdateUserInfoResp - 2, // 55: user.user.DeleteUsers:output_type -> user.DeleteUsersResp - 4, // 56: user.user.GetAllUserID:output_type -> user.GetAllUserIDResp - 13, // 57: user.user.SetReceiveMessageOpt:output_type -> user.SetReceiveMessageOptResp - 15, // 58: user.user.GetReceiveMessageOpt:output_type -> user.GetReceiveMessageOptResp - 17, // 59: user.user.GetAllConversationMsgOpt:output_type -> user.GetAllConversationMsgOptResp - 6, // 60: user.user.AccountCheck:output_type -> user.AccountCheckResp - 22, // 61: user.user.GetUserById:output_type -> user.GetUserByIdResp - 24, // 62: user.user.GetUsersByName:output_type -> user.GetUsersByNameResp - 19, // 63: user.user.ResignUser:output_type -> user.ResignUserResp - 26, // 64: user.user.AlterUser:output_type -> user.AlterUserResp - 28, // 65: user.user.GetUsers:output_type -> user.GetUsersResp - 30, // 66: user.user.AddUser:output_type -> user.AddUserResp - 32, // 67: user.user.BlockUser:output_type -> user.BlockUserResp - 34, // 68: user.user.UnBlockUser:output_type -> user.UnBlockUserResp - 37, // 69: user.user.GetBlockUsers:output_type -> user.GetBlockUsersResp - 39, // 70: user.user.GetBlockUserById:output_type -> user.GetBlockUserByIdResp - 41, // 71: user.user.DeleteUser:output_type -> user.DeleteUserResp - 53, // [53:72] is the sub-list for method output_type - 34, // [34:53] is the sub-list for method input_type - 34, // [34:34] is the sub-list for extension type_name - 34, // [34:34] is the sub-list for extension extendee - 0, // [0:34] is the sub-list for field type_name + 11, // 8: user.SetConversationReq.Conversation:type_name -> user.Conversation + 0, // 9: user.SetConversationResp.commonResp:type_name -> user.CommonResp + 0, // 10: user.GetConversationResp.commonResp:type_name -> user.CommonResp + 11, // 11: user.GetConversationResp.Conversation:type_name -> user.Conversation + 0, // 12: user.GetConversationsResp.commonResp:type_name -> user.CommonResp + 11, // 13: user.GetConversationsResp.Conversations:type_name -> user.Conversation + 0, // 14: user.GetAllConversationsResp.commonResp:type_name -> user.CommonResp + 11, // 15: user.GetAllConversationsResp.Conversations:type_name -> user.Conversation + 11, // 16: user.BatchSetConversationsReq.Conversations:type_name -> user.Conversation + 0, // 17: user.BatchSetConversationsResp.commonResp:type_name -> user.CommonResp + 0, // 18: user.ResignUserResp.commonResp:type_name -> user.CommonResp + 0, // 19: user.GetUserByIdResp.CommonResp:type_name -> user.CommonResp + 25, // 20: user.GetUserByIdResp.user:type_name -> user.User + 48, // 21: user.GetUsersByNameReq.Pagination:type_name -> server_api_params.RequestPagination + 25, // 22: user.GetUsersByNameResp.users:type_name -> user.User + 49, // 23: user.GetUsersByNameResp.Pagination:type_name -> server_api_params.ResponsePagination + 0, // 24: user.AlterUserResp.CommonResp:type_name -> user.CommonResp + 48, // 25: user.GetUsersReq.Pagination:type_name -> server_api_params.RequestPagination + 0, // 26: user.GetUsersResp.CommonResp:type_name -> user.CommonResp + 25, // 27: user.GetUsersResp.user:type_name -> user.User + 49, // 28: user.GetUsersResp.Pagination:type_name -> server_api_params.ResponsePagination + 0, // 29: user.AddUserResp.CommonResp:type_name -> user.CommonResp + 0, // 30: user.BlockUserResp.CommonResp:type_name -> user.CommonResp + 0, // 31: user.UnBlockUserResp.CommonResp:type_name -> user.CommonResp + 48, // 32: user.GetBlockUsersReq.Pagination:type_name -> server_api_params.RequestPagination + 25, // 33: user.BlockUser.User:type_name -> user.User + 0, // 34: user.GetBlockUsersResp.CommonResp:type_name -> user.CommonResp + 40, // 35: user.GetBlockUsersResp.BlockUsers:type_name -> user.BlockUser + 49, // 36: user.GetBlockUsersResp.Pagination:type_name -> server_api_params.ResponsePagination + 40, // 37: user.GetBlockUserByIdResp.BlockUser:type_name -> user.BlockUser + 0, // 38: user.DeleteUserResp.CommonResp:type_name -> user.CommonResp + 7, // 39: user.user.GetUserInfo:input_type -> user.GetUserInfoReq + 9, // 40: user.user.UpdateUserInfo:input_type -> user.UpdateUserInfoReq + 1, // 41: user.user.DeleteUsers:input_type -> user.DeleteUsersReq + 3, // 42: user.user.GetAllUserID:input_type -> user.GetAllUserIDReq + 5, // 43: user.user.AccountCheck:input_type -> user.AccountCheckReq + 14, // 44: user.user.GetConversation:input_type -> user.GetConversationReq + 18, // 45: user.user.GetAllConversations:input_type -> user.GetAllConversationsReq + 16, // 46: user.user.GetConversations:input_type -> user.GetConversationsReq + 20, // 47: user.user.BatchSetConversations:input_type -> user.BatchSetConversationsReq + 12, // 48: user.user.SetConversation:input_type -> user.SetConversationReq + 24, // 49: user.user.GetUserById:input_type -> user.GetUserByIdReq + 27, // 50: user.user.GetUsersByName:input_type -> user.GetUsersByNameReq + 22, // 51: user.user.ResignUser:input_type -> user.ResignUserReq + 29, // 52: user.user.AlterUser:input_type -> user.AlterUserReq + 31, // 53: user.user.GetUsers:input_type -> user.GetUsersReq + 33, // 54: user.user.AddUser:input_type -> user.AddUserReq + 35, // 55: user.user.BlockUser:input_type -> user.BlockUserReq + 37, // 56: user.user.UnBlockUser:input_type -> user.UnBlockUserReq + 39, // 57: user.user.GetBlockUsers:input_type -> user.GetBlockUsersReq + 42, // 58: user.user.GetBlockUserById:input_type -> user.GetBlockUserByIdReq + 44, // 59: user.user.DeleteUser:input_type -> user.DeleteUserReq + 8, // 60: user.user.GetUserInfo:output_type -> user.GetUserInfoResp + 10, // 61: user.user.UpdateUserInfo:output_type -> user.UpdateUserInfoResp + 2, // 62: user.user.DeleteUsers:output_type -> user.DeleteUsersResp + 4, // 63: user.user.GetAllUserID:output_type -> user.GetAllUserIDResp + 6, // 64: user.user.AccountCheck:output_type -> user.AccountCheckResp + 15, // 65: user.user.GetConversation:output_type -> user.GetConversationResp + 19, // 66: user.user.GetAllConversations:output_type -> user.GetAllConversationsResp + 17, // 67: user.user.GetConversations:output_type -> user.GetConversationsResp + 21, // 68: user.user.BatchSetConversations:output_type -> user.BatchSetConversationsResp + 13, // 69: user.user.SetConversation:output_type -> user.SetConversationResp + 26, // 70: user.user.GetUserById:output_type -> user.GetUserByIdResp + 28, // 71: user.user.GetUsersByName:output_type -> user.GetUsersByNameResp + 23, // 72: user.user.ResignUser:output_type -> user.ResignUserResp + 30, // 73: user.user.AlterUser:output_type -> user.AlterUserResp + 32, // 74: user.user.GetUsers:output_type -> user.GetUsersResp + 34, // 75: user.user.AddUser:output_type -> user.AddUserResp + 36, // 76: user.user.BlockUser:output_type -> user.BlockUserResp + 38, // 77: user.user.UnBlockUser:output_type -> user.UnBlockUserResp + 41, // 78: user.user.GetBlockUsers:output_type -> user.GetBlockUsersResp + 43, // 79: user.user.GetBlockUserById:output_type -> user.GetBlockUserByIdResp + 45, // 80: user.user.DeleteUser:output_type -> user.DeleteUserResp + 60, // [60:81] is the sub-list for method output_type + 39, // [39:60] is the sub-list for method input_type + 39, // [39:39] is the sub-list for extension type_name + 39, // [39:39] is the sub-list for extension extendee + 0, // [0:39] is the sub-list for field type_name } func init() { file_user_user_proto_init() } @@ -3270,7 +3614,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetReceiveMessageOptReq); i { + switch v := v.(*Conversation); i { case 0: return &v.state case 1: @@ -3282,7 +3626,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptResult); i { + switch v := v.(*SetConversationReq); i { case 0: return &v.state case 1: @@ -3294,7 +3638,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetReceiveMessageOptResp); i { + switch v := v.(*SetConversationResp); i { case 0: return &v.state case 1: @@ -3306,7 +3650,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReceiveMessageOptReq); i { + switch v := v.(*GetConversationReq); i { case 0: return &v.state case 1: @@ -3318,7 +3662,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReceiveMessageOptResp); i { + switch v := v.(*GetConversationResp); i { case 0: return &v.state case 1: @@ -3330,7 +3674,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllConversationMsgOptReq); i { + switch v := v.(*GetConversationsReq); i { case 0: return &v.state case 1: @@ -3342,7 +3686,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllConversationMsgOptResp); i { + switch v := v.(*GetConversationsResp); i { case 0: return &v.state case 1: @@ -3354,7 +3698,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResignUserReq); i { + switch v := v.(*GetAllConversationsReq); i { case 0: return &v.state case 1: @@ -3366,7 +3710,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResignUserResp); i { + switch v := v.(*GetAllConversationsResp); i { case 0: return &v.state case 1: @@ -3378,7 +3722,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserByIdReq); i { + switch v := v.(*BatchSetConversationsReq); i { case 0: return &v.state case 1: @@ -3390,7 +3734,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*User); i { + switch v := v.(*BatchSetConversationsResp); i { case 0: return &v.state case 1: @@ -3402,7 +3746,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserByIdResp); i { + switch v := v.(*ResignUserReq); i { case 0: return &v.state case 1: @@ -3414,7 +3758,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsersByNameReq); i { + switch v := v.(*ResignUserResp); i { case 0: return &v.state case 1: @@ -3426,7 +3770,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsersByNameResp); i { + switch v := v.(*GetUserByIdReq); i { case 0: return &v.state case 1: @@ -3438,7 +3782,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AlterUserReq); i { + switch v := v.(*User); i { case 0: return &v.state case 1: @@ -3450,7 +3794,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AlterUserResp); i { + switch v := v.(*GetUserByIdResp); i { case 0: return &v.state case 1: @@ -3462,7 +3806,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsersReq); i { + switch v := v.(*GetUsersByNameReq); i { case 0: return &v.state case 1: @@ -3474,7 +3818,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsersResp); i { + switch v := v.(*GetUsersByNameResp); i { case 0: return &v.state case 1: @@ -3486,7 +3830,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddUserReq); i { + switch v := v.(*AlterUserReq); i { case 0: return &v.state case 1: @@ -3498,7 +3842,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddUserResp); i { + switch v := v.(*AlterUserResp); i { case 0: return &v.state case 1: @@ -3510,7 +3854,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockUserReq); i { + switch v := v.(*GetUsersReq); i { case 0: return &v.state case 1: @@ -3522,7 +3866,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockUserResp); i { + switch v := v.(*GetUsersResp); i { case 0: return &v.state case 1: @@ -3534,7 +3878,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnBlockUserReq); i { + switch v := v.(*AddUserReq); i { case 0: return &v.state case 1: @@ -3546,7 +3890,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnBlockUserResp); i { + switch v := v.(*AddUserResp); i { case 0: return &v.state case 1: @@ -3558,7 +3902,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockUsersReq); i { + switch v := v.(*BlockUserReq); i { case 0: return &v.state case 1: @@ -3570,7 +3914,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockUser); i { + switch v := v.(*BlockUserResp); i { case 0: return &v.state case 1: @@ -3582,7 +3926,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockUsersResp); i { + switch v := v.(*UnBlockUserReq); i { case 0: return &v.state case 1: @@ -3594,7 +3938,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockUserByIdReq); i { + switch v := v.(*UnBlockUserResp); i { case 0: return &v.state case 1: @@ -3606,7 +3950,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockUserByIdResp); i { + switch v := v.(*GetBlockUsersReq); i { case 0: return &v.state case 1: @@ -3618,7 +3962,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteUserReq); i { + switch v := v.(*BlockUser); i { case 0: return &v.state case 1: @@ -3630,7 +3974,7 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteUserResp); i { + switch v := v.(*GetBlockUsersResp); i { case 0: return &v.state case 1: @@ -3642,6 +3986,54 @@ func file_user_user_proto_init() { } } file_user_user_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockUserByIdReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_user_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockUserByIdResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_user_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteUserReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_user_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteUserResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_user_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AccountCheckResp_SingleUserStatus); i { case 0: return &v.state @@ -3660,7 +4052,7 @@ func file_user_user_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_user_user_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 47, NumExtensions: 0, NumServices: 1, }, @@ -3690,10 +4082,12 @@ type UserClient interface { UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*UpdateUserInfoResp, error) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error) GetAllUserID(ctx context.Context, in *GetAllUserIDReq, opts ...grpc.CallOption) (*GetAllUserIDResp, error) - SetReceiveMessageOpt(ctx context.Context, in *SetReceiveMessageOptReq, opts ...grpc.CallOption) (*SetReceiveMessageOptResp, error) - GetReceiveMessageOpt(ctx context.Context, in *GetReceiveMessageOptReq, opts ...grpc.CallOption) (*GetReceiveMessageOptResp, error) - GetAllConversationMsgOpt(ctx context.Context, in *GetAllConversationMsgOptReq, opts ...grpc.CallOption) (*GetAllConversationMsgOptResp, error) AccountCheck(ctx context.Context, in *AccountCheckReq, opts ...grpc.CallOption) (*AccountCheckResp, error) + GetConversation(ctx context.Context, in *GetConversationReq, opts ...grpc.CallOption) (*GetConversationResp, error) + GetAllConversations(ctx context.Context, in *GetAllConversationsReq, opts ...grpc.CallOption) (*GetAllConversationsResp, error) + GetConversations(ctx context.Context, in *GetConversationsReq, opts ...grpc.CallOption) (*GetConversationsResp, error) + BatchSetConversations(ctx context.Context, in *BatchSetConversationsReq, opts ...grpc.CallOption) (*BatchSetConversationsResp, error) + SetConversation(ctx context.Context, in *SetConversationReq, opts ...grpc.CallOption) (*SetConversationResp, error) GetUserById(ctx context.Context, in *GetUserByIdReq, opts ...grpc.CallOption) (*GetUserByIdResp, error) GetUsersByName(ctx context.Context, in *GetUsersByNameReq, opts ...grpc.CallOption) (*GetUsersByNameResp, error) ResignUser(ctx context.Context, in *ResignUserReq, opts ...grpc.CallOption) (*ResignUserResp, error) @@ -3751,33 +4145,6 @@ func (c *userClient) GetAllUserID(ctx context.Context, in *GetAllUserIDReq, opts return out, nil } -func (c *userClient) SetReceiveMessageOpt(ctx context.Context, in *SetReceiveMessageOptReq, opts ...grpc.CallOption) (*SetReceiveMessageOptResp, error) { - out := new(SetReceiveMessageOptResp) - err := c.cc.Invoke(ctx, "/user.user/SetReceiveMessageOpt", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *userClient) GetReceiveMessageOpt(ctx context.Context, in *GetReceiveMessageOptReq, opts ...grpc.CallOption) (*GetReceiveMessageOptResp, error) { - out := new(GetReceiveMessageOptResp) - err := c.cc.Invoke(ctx, "/user.user/GetReceiveMessageOpt", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *userClient) GetAllConversationMsgOpt(ctx context.Context, in *GetAllConversationMsgOptReq, opts ...grpc.CallOption) (*GetAllConversationMsgOptResp, error) { - out := new(GetAllConversationMsgOptResp) - err := c.cc.Invoke(ctx, "/user.user/GetAllConversationMsgOpt", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *userClient) AccountCheck(ctx context.Context, in *AccountCheckReq, opts ...grpc.CallOption) (*AccountCheckResp, error) { out := new(AccountCheckResp) err := c.cc.Invoke(ctx, "/user.user/AccountCheck", in, out, opts...) @@ -3787,6 +4154,51 @@ func (c *userClient) AccountCheck(ctx context.Context, in *AccountCheckReq, opts return out, nil } +func (c *userClient) GetConversation(ctx context.Context, in *GetConversationReq, opts ...grpc.CallOption) (*GetConversationResp, error) { + out := new(GetConversationResp) + err := c.cc.Invoke(ctx, "/user.user/GetConversation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userClient) GetAllConversations(ctx context.Context, in *GetAllConversationsReq, opts ...grpc.CallOption) (*GetAllConversationsResp, error) { + out := new(GetAllConversationsResp) + err := c.cc.Invoke(ctx, "/user.user/GetAllConversations", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userClient) GetConversations(ctx context.Context, in *GetConversationsReq, opts ...grpc.CallOption) (*GetConversationsResp, error) { + out := new(GetConversationsResp) + err := c.cc.Invoke(ctx, "/user.user/GetConversations", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userClient) BatchSetConversations(ctx context.Context, in *BatchSetConversationsReq, opts ...grpc.CallOption) (*BatchSetConversationsResp, error) { + out := new(BatchSetConversationsResp) + err := c.cc.Invoke(ctx, "/user.user/BatchSetConversations", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userClient) SetConversation(ctx context.Context, in *SetConversationReq, opts ...grpc.CallOption) (*SetConversationResp, error) { + out := new(SetConversationResp) + err := c.cc.Invoke(ctx, "/user.user/SetConversation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *userClient) GetUserById(ctx context.Context, in *GetUserByIdReq, opts ...grpc.CallOption) (*GetUserByIdResp, error) { out := new(GetUserByIdResp) err := c.cc.Invoke(ctx, "/user.user/GetUserById", in, out, opts...) @@ -3892,10 +4304,12 @@ type UserServer interface { UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*UpdateUserInfoResp, error) DeleteUsers(context.Context, *DeleteUsersReq) (*DeleteUsersResp, error) GetAllUserID(context.Context, *GetAllUserIDReq) (*GetAllUserIDResp, error) - SetReceiveMessageOpt(context.Context, *SetReceiveMessageOptReq) (*SetReceiveMessageOptResp, error) - GetReceiveMessageOpt(context.Context, *GetReceiveMessageOptReq) (*GetReceiveMessageOptResp, error) - GetAllConversationMsgOpt(context.Context, *GetAllConversationMsgOptReq) (*GetAllConversationMsgOptResp, error) AccountCheck(context.Context, *AccountCheckReq) (*AccountCheckResp, error) + GetConversation(context.Context, *GetConversationReq) (*GetConversationResp, error) + GetAllConversations(context.Context, *GetAllConversationsReq) (*GetAllConversationsResp, error) + GetConversations(context.Context, *GetConversationsReq) (*GetConversationsResp, error) + BatchSetConversations(context.Context, *BatchSetConversationsReq) (*BatchSetConversationsResp, error) + SetConversation(context.Context, *SetConversationReq) (*SetConversationResp, error) GetUserById(context.Context, *GetUserByIdReq) (*GetUserByIdResp, error) GetUsersByName(context.Context, *GetUsersByNameReq) (*GetUsersByNameResp, error) ResignUser(context.Context, *ResignUserReq) (*ResignUserResp, error) @@ -3925,18 +4339,24 @@ func (*UnimplementedUserServer) DeleteUsers(context.Context, *DeleteUsersReq) (* func (*UnimplementedUserServer) GetAllUserID(context.Context, *GetAllUserIDReq) (*GetAllUserIDResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetAllUserID not implemented") } -func (*UnimplementedUserServer) SetReceiveMessageOpt(context.Context, *SetReceiveMessageOptReq) (*SetReceiveMessageOptResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetReceiveMessageOpt not implemented") -} -func (*UnimplementedUserServer) GetReceiveMessageOpt(context.Context, *GetReceiveMessageOptReq) (*GetReceiveMessageOptResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetReceiveMessageOpt not implemented") -} -func (*UnimplementedUserServer) GetAllConversationMsgOpt(context.Context, *GetAllConversationMsgOptReq) (*GetAllConversationMsgOptResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAllConversationMsgOpt not implemented") -} func (*UnimplementedUserServer) AccountCheck(context.Context, *AccountCheckReq) (*AccountCheckResp, error) { return nil, status.Errorf(codes.Unimplemented, "method AccountCheck not implemented") } +func (*UnimplementedUserServer) GetConversation(context.Context, *GetConversationReq) (*GetConversationResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetConversation not implemented") +} +func (*UnimplementedUserServer) GetAllConversations(context.Context, *GetAllConversationsReq) (*GetAllConversationsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAllConversations not implemented") +} +func (*UnimplementedUserServer) GetConversations(context.Context, *GetConversationsReq) (*GetConversationsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetConversations not implemented") +} +func (*UnimplementedUserServer) BatchSetConversations(context.Context, *BatchSetConversationsReq) (*BatchSetConversationsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method BatchSetConversations not implemented") +} +func (*UnimplementedUserServer) SetConversation(context.Context, *SetConversationReq) (*SetConversationResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetConversation not implemented") +} func (*UnimplementedUserServer) GetUserById(context.Context, *GetUserByIdReq) (*GetUserByIdResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetUserById not implemented") } @@ -4047,60 +4467,6 @@ func _User_GetAllUserID_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } -func _User_SetReceiveMessageOpt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetReceiveMessageOptReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UserServer).SetReceiveMessageOpt(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/user.user/SetReceiveMessageOpt", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UserServer).SetReceiveMessageOpt(ctx, req.(*SetReceiveMessageOptReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _User_GetReceiveMessageOpt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetReceiveMessageOptReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UserServer).GetReceiveMessageOpt(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/user.user/GetReceiveMessageOpt", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UserServer).GetReceiveMessageOpt(ctx, req.(*GetReceiveMessageOptReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _User_GetAllConversationMsgOpt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetAllConversationMsgOptReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UserServer).GetAllConversationMsgOpt(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/user.user/GetAllConversationMsgOpt", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UserServer).GetAllConversationMsgOpt(ctx, req.(*GetAllConversationMsgOptReq)) - } - return interceptor(ctx, in, info, handler) -} - func _User_AccountCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(AccountCheckReq) if err := dec(in); err != nil { @@ -4119,6 +4485,96 @@ func _User_AccountCheck_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _User_GetConversation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetConversationReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).GetConversation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/GetConversation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).GetConversation(ctx, req.(*GetConversationReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _User_GetAllConversations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAllConversationsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).GetAllConversations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/GetAllConversations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).GetAllConversations(ctx, req.(*GetAllConversationsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _User_GetConversations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetConversationsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).GetConversations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/GetConversations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).GetConversations(ctx, req.(*GetConversationsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _User_BatchSetConversations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchSetConversationsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).BatchSetConversations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/BatchSetConversations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).BatchSetConversations(ctx, req.(*BatchSetConversationsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _User_SetConversation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetConversationReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).SetConversation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/SetConversation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).SetConversation(ctx, req.(*SetConversationReq)) + } + return interceptor(ctx, in, info, handler) +} + func _User_GetUserById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetUserByIdReq) if err := dec(in); err != nil { @@ -4337,22 +4793,30 @@ var _User_serviceDesc = grpc.ServiceDesc{ MethodName: "GetAllUserID", Handler: _User_GetAllUserID_Handler, }, - { - MethodName: "SetReceiveMessageOpt", - Handler: _User_SetReceiveMessageOpt_Handler, - }, - { - MethodName: "GetReceiveMessageOpt", - Handler: _User_GetReceiveMessageOpt_Handler, - }, - { - MethodName: "GetAllConversationMsgOpt", - Handler: _User_GetAllConversationMsgOpt_Handler, - }, { MethodName: "AccountCheck", Handler: _User_AccountCheck_Handler, }, + { + MethodName: "GetConversation", + Handler: _User_GetConversation_Handler, + }, + { + MethodName: "GetAllConversations", + Handler: _User_GetAllConversations_Handler, + }, + { + MethodName: "GetConversations", + Handler: _User_GetConversations_Handler, + }, + { + MethodName: "BatchSetConversations", + Handler: _User_BatchSetConversations_Handler, + }, + { + MethodName: "SetConversation", + Handler: _User_SetConversation_Handler, + }, { MethodName: "GetUserById", Handler: _User_GetUserById_Handler, diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 298b8da84..0a266f3a2 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -67,44 +67,72 @@ message UpdateUserInfoResp{ CommonResp commonResp = 1; } +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; + string Ex = 12; +} -message SetReceiveMessageOptReq{ - string FromUserID = 1; - int32 opt = 2; - repeated string conversationIDList = 3; - string operationID = 4; - string OpUserID = 5; +message SetConversationReq{ + Conversation Conversation = 1; + string OperationID = 2; } -message OptResult{ - string conversationID = 1; - int32 result = 2; //-1: failed; 0:default; 1: not receive ; 2: not jpush -} -message SetReceiveMessageOptResp{ + +message SetConversationResp{ CommonResp commonResp = 1; - repeated OptResult conversationOptResultList = 2; } - -message GetReceiveMessageOptReq{ - string FromUserID = 1; - repeated string conversationIDList = 2; - string operationID = 3; - string OpUserID = 4; +message GetConversationReq{ + string ConversationID = 1; + string OwnerUserID = 2; + string OperationID = 3; } -message GetReceiveMessageOptResp{ + +message GetConversationResp{ CommonResp commonResp = 1; - repeated OptResult conversationOptResultList = 3; + Conversation Conversation = 2; } - -message GetAllConversationMsgOptReq{ - string FromUserID = 1; - string operationID = 2; - string OpUserID = 3; +message GetConversationsReq{ + string OwnerUserID = 1; + repeated string ConversationIDs = 2; + string OperationID = 3; } -message GetAllConversationMsgOptResp{ + +message GetConversationsResp{ CommonResp commonResp = 1; - repeated OptResult conversationOptResultList = 3; + repeated Conversation Conversations = 2; +} + +message GetAllConversationsReq{ + string OwnerUserID = 1; + string OperationID = 2; +} + +message GetAllConversationsResp{ + CommonResp commonResp = 1; + repeated Conversation Conversations = 2; +} + +message BatchSetConversationsReq{ + repeated Conversation Conversations = 1; + string OwnerUserID = 2; + string OperationID = 3; +} + +message BatchSetConversationsResp{ + CommonResp commonResp = 1; + repeated string Success = 2; + repeated string Failed = 3; } message ResignUserReq{ @@ -130,7 +158,7 @@ message User{ } message GetUserByIdResp{ - CommonResp CommonResp = 1; + CommonResp CommonResp = 1; User user = 2; } @@ -241,7 +269,7 @@ message DeleteUserReq { } message DeleteUserResp { - + CommonResp CommonResp = 1; } service user { @@ -249,10 +277,13 @@ service user { rpc UpdateUserInfo(UpdateUserInfoReq) returns(UpdateUserInfoResp); rpc DeleteUsers(DeleteUsersReq)returns(DeleteUsersResp); rpc GetAllUserID(GetAllUserIDReq)returns(GetAllUserIDResp); - rpc SetReceiveMessageOpt(SetReceiveMessageOptReq)returns(SetReceiveMessageOptResp); - rpc GetReceiveMessageOpt(GetReceiveMessageOptReq)returns(GetReceiveMessageOptResp); - rpc GetAllConversationMsgOpt(GetAllConversationMsgOptReq)returns(GetAllConversationMsgOptResp); + rpc AccountCheck(AccountCheckReq)returns(AccountCheckResp); + rpc GetConversation(GetConversationReq)returns(GetConversationResp); + rpc GetAllConversations(GetAllConversationsReq)returns(GetAllConversationsResp); + rpc GetConversations(GetConversationsReq)returns(GetConversationsResp); + rpc BatchSetConversations(BatchSetConversationsReq)returns(BatchSetConversationsResp); + rpc SetConversation(SetConversationReq)returns(SetConversationResp); rpc GetUserById(GetUserByIdReq) returns (GetUserByIdResp); rpc GetUsersByName(GetUsersByNameReq) returns (GetUsersByNameResp);