From f109832c7a4d59fd88a70bf8e5108e856fdd827b Mon Sep 17 00:00:00 2001 From: wh_zcy Date: Fri, 14 Oct 2022 16:03:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/items/module.go | 4 +- modules/rtask/api_choose.go | 100 +------------------------------ modules/rtask/api_getrecord.go | 2 + modules/rtask/api_list.go | 7 ++- modules/rtask/api_reward.go | 6 +- modules/rtask/condiFindHandle.go | 1 - modules/rtask/model_record.go | 75 ++++++----------------- modules/rtask/module.go | 4 -- modules/user/api_create.go | 31 ++++------ modules/user/api_login.go | 1 + modules/user/api_modifyavatar.go | 1 + modules/user/api_modifybgp.go | 1 + modules/user/api_modifyfigure.go | 1 + modules/user/api_modifyname.go | 5 +- modules/user/api_modifysign.go | 5 +- pb/rtask_db.pb.go | 78 +++++++++++------------- 16 files changed, 87 insertions(+), 235 deletions(-) diff --git a/modules/items/module.go b/modules/items/module.go index b62df821c..3eef4551f 100644 --- a/modules/items/module.go +++ b/modules/items/module.go @@ -131,9 +131,9 @@ func (this *Items) AddItems(source *comm.ModuleCallSource, session comm.IUserSes change []*pb.DB_UserItemData ) - defer this.Debugf("给用户添加物品 uId:%s items:%d items:%v", session.GetUserId(), items, err == nil) + defer this.Debugf("给用户添加物品 uId:%s items:%v items:%v", session.GetUserId(), items, err == nil) if change, err = this.modelItems.AddItemsToUserPack(session.GetUserId(), items); err != nil { - this.Errorf("给用户添加物品 uId:%s items:%d err:%v", session.GetUserId(), items, err) + this.Errorf("给用户添加物品 uId:%s items:%v err:%v", session.GetUserId(), items, err) if err == ItemNotEnoughError { code = pb.ErrorCode_ItemsNoEnough } else if err == PackGridNumUpper { diff --git a/modules/rtask/api_choose.go b/modules/rtask/api_choose.go index 19c5dbfcf..1106752a4 100644 --- a/modules/rtask/api_choose.go +++ b/modules/rtask/api_choose.go @@ -14,110 +14,12 @@ func (this *apiComp) ChooseCheck(session comm.IUserSession, req *pb.RtaskChooseR return } +// Deprecated: Use func (this *apiComp) Choose(session comm.IUserSession, req *pb.RtaskChooseReq) (code pb.ErrorCode, data proto.Message) { if code = this.ChooseCheck(session, req); code != pb.ErrorCode_Success { return } - // 获取玩家的任务 - // rtask := &pb.DBRtask{} - // if err := this.moduleRtask.modelRtask.Get(session.GetUserId(), rtask); err != nil { - // return - // } - - // // 获取当前任务配置 - // conf := this.moduleRtask.configure.getRtaskById(req.RtaskId) - // if conf == nil { - // code = pb.ErrorCode_ConfigNoFound - // return - // } - - // // 获取支线任务配置 - // sideConf := this.moduleRtask.configure.getRtaskSidById(req.RtaskSubId) - // if sideConf == nil { - // code = pb.ErrorCode_ConfigNoFound - // return - // } - - // //获取选项配置 - // chooseCnf := this.moduleRtask.configure.getRtaskChooseCfg(req.ChooseId) - // if chooseCnf == nil { - // code = pb.ErrorCode_ConfigNoFound - // return - // } - - // // 校验限定条件 - // if chooseCnf.PreTid != 0 { - // if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), chooseCnf.PreTid); !ok { - // this.moduleRtask.Errorf("no reach condi err: %v", err) - // code = pb.ErrorCode_RtaskCondiNoReach - // return - // } - // } - - // var ( - // frtaskArr *pb.FrtaskIds //完成的任务 - // ok bool - // ) - - // if frtaskArr, ok = rtask.FrtaskIds[conf.Group]; !ok { - // frtaskArr = &pb.FrtaskIds{} - // } - - // //验证该任务是否已完成 - // if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); ok { - // code = pb.ErrorCode_RtaskFinished - // return - // } - - // if chooseCnf.NextTid != 0 { - // // 校验完成条件 - // for _, v := range sideConf.EndTid { - // if v == -1 { - // continue - // } - // if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), v); !ok { - // if err != nil { - // this.moduleRtask.Error(err.Error()) - // } - // code = pb.ErrorCode_RtaskCondiNoReach - // return - // } - // } - // // 更新完成的任务 - // frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId) - // if rtask.FrtaskIds == nil { - // rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds) - // } - // rtask.FrtaskIds[conf.Group] = frtaskArr - // update := map[string]interface{}{ - // "frtaskIds": rtask.FrtaskIds, - // } - // if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { - // code = pb.ErrorCode_SystemError - // return - // } - - // // userexpand update - // if err := this.moduleRtask.modelRtask.updateUserRtaskId(session.GetUserId(), req.RtaskId); err != nil { - // this.moduleRtask.Errorf("update user rtaskId err %v", err) - // } - - // // 发奖励 - // for _, v := range sideConf.Reward { - // if v.ChooseId == req.ChooseId { - // code = this.moduleRtask.DispenseRes(session, v.Reward, true) - // } - // } - - // rsp := &pb.RtaskFinishPush{ - // RtaskId: req.RtaskId, - // } - // if err := session.SendMsg(string(this.moduleRtask.GetType()), "finish", rsp); err != nil { - // code = pb.ErrorCode_SystemError - // } - // } - rsp := &pb.RtaskChooseResp{ RtaskId: req.RtaskId, ChooseId: req.ChooseId, diff --git a/modules/rtask/api_getrecord.go b/modules/rtask/api_getrecord.go index dbefc176a..7ca93abaa 100644 --- a/modules/rtask/api_getrecord.go +++ b/modules/rtask/api_getrecord.go @@ -11,6 +11,8 @@ func (this *apiComp) GetrecordCheck(session comm.IUserSession, req *pb.RtaskGetr return } +// 获取玩家任务条件记录 +// 客户端会在登录时拉取此数据 func (this *apiComp) Getrecord(session comm.IUserSession, req *pb.RtaskGetrecordReq) (code pb.ErrorCode, data proto.Message) { rsp := &pb.RtaskGetrecordResp{} record := this.moduleRtask.modelRtaskRecord.getRecord(session.GetUserId()) diff --git a/modules/rtask/api_list.go b/modules/rtask/api_list.go index 2059f4ea7..883e77bb6 100644 --- a/modules/rtask/api_list.go +++ b/modules/rtask/api_list.go @@ -12,8 +12,7 @@ func (this *apiComp) ListCheck(session comm.IUserSession, req *pb.RtasklistReq) } func (this *apiComp) List(session comm.IUserSession, req *pb.RtasklistReq) (code pb.ErrorCode, data proto.Message) { - - // 获取当前玩家 + // 获取当前玩家随机任务 rtask := this.moduleRtask.modelRtask.GetRtask(session.GetUserId()) if rtask == nil { code = pb.ErrorCode_RtaskNoRtask @@ -22,6 +21,7 @@ func (this *apiComp) List(session comm.IUserSession, req *pb.RtasklistReq) (code ids := make([]int32, 0) + // 查询分组ID对应的任务 if v, ok := rtask.FrtaskIds[req.GroupId]; ok { ids = v.RtaskIds } @@ -30,9 +30,10 @@ func (this *apiComp) List(session comm.IUserSession, req *pb.RtasklistReq) (code RtaskIds: ids, GroupId: req.GroupId, } + if err := session.SendMsg(string(this.moduleRtask.GetType()), RtaskSubTypeList, rsp); err != nil { code = pb.ErrorCode_SystemError - return } + return } diff --git a/modules/rtask/api_reward.go b/modules/rtask/api_reward.go index e88a3ee11..85845e30c 100644 --- a/modules/rtask/api_reward.go +++ b/modules/rtask/api_reward.go @@ -2,7 +2,6 @@ package rtask import ( "go_dreamfactory/comm" - "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" "google.golang.org/protobuf/proto" @@ -24,7 +23,7 @@ func (this *apiComp) GetReward(session comm.IUserSession, req *pb.RtaskGetReward sideConf := this.moduleRtask.configure.getRtaskSidById(req.RtaskSubId) if sideConf == nil { code = pb.ErrorCode_ConfigNoFound - log.Errorf("rdtask_side %v no found", req.RtaskSubId) + this.moduleRtask.Errorf("uid:%v rdtask_side:%v config no found", session.GetUserId(), req.RtaskSubId) return } @@ -50,13 +49,16 @@ func (this *apiComp) GetReward(session comm.IUserSession, req *pb.RtaskGetReward //发奖励 for _, v := range sideConf.Reward { code = this.moduleRtask.DispenseRes(session, v.Reward, true) + this.moduleRtask.Infof("uid:%v 发奖励:%v code:%v", session.GetUserId(), v.Reward, code) } + // 更新奖励领取状态 update := map[string]interface{}{ "isReward": true, } if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { code = pb.ErrorCode_SystemError + return } rsp := &pb.RtaskGetRewardResp{ diff --git a/modules/rtask/condiFindHandle.go b/modules/rtask/condiFindHandle.go index 5316592e9..5c52fb04e 100644 --- a/modules/rtask/condiFindHandle.go +++ b/modules/rtask/condiFindHandle.go @@ -1,4 +1,3 @@ -// 匹配类型和参数,返回任务条件ID package rtask import ( diff --git a/modules/rtask/model_record.go b/modules/rtask/model_record.go index c8db2859b..eb2891c23 100644 --- a/modules/rtask/model_record.go +++ b/modules/rtask/model_record.go @@ -10,6 +10,7 @@ import ( "github.com/pkg/errors" "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" ) type ModelRtaskRecord struct { @@ -36,34 +37,37 @@ func (this *ModelRtaskRecord) GetVerifyData(uid string, condiId int32) (*pb.Rtas return record.Vals[condiId], nil } -// 获取玩家随机任务记录 +// 获取玩家任务条件记录 +// 配置表: rdtask_condi func (this *ModelRtaskRecord) getRecord(uid string) *pb.DBRtaskRecord { record := &pb.DBRtaskRecord{} if err := this.Get(uid, record); err != nil { - log.Warnf("get rtask record err:%v", err) + if err != mongo.ErrNoDocuments { + log.Warnf("获取玩家任务条件 err:%v", err) + } } return record } // 初始化任务条件数据 +// 玩家登录时调用 func (this *ModelRtaskRecord) initCondiData(uid string) error { - // t := time.Now() - // defer func() { - // log.Debugf("初始化条件耗时:%v", time.Since(t)) - // }() dr := this.getRecord(uid) + // 获取rdtask_condi配置表数据 grc, err := this.moduleRtask.configure.getRtaskCondiCfg() if err != nil { return err } if grc == nil { - return errors.New("getRtaskCondiCfg err") + return errors.New("配置空[rdtaskcondi] err") } - if dr != nil && dr.Vals == nil { + // 判断是否有记录 + if dr.Vals == nil || len(dr.Vals) == 0 { record := &pb.DBRtaskRecord{Uid: uid} record.Id = primitive.NewObjectID().Hex() record.Vals = make(map[int32]*pb.RtaskData) + //遍历所有配置数据 for _, v := range grc.GetDataList() { // 不符合参数配置长度则不初始化 if len(v.Inited) != 5 { @@ -71,12 +75,13 @@ func (this *ModelRtaskRecord) initCondiData(uid string) error { } vals := []int32{} + // 遍历初始化参数字段 for _, p := range v.Inited { - if p == 1 { + if p == 1 { // 1表示需要初始0 vals = append(vals, 0) - } else if p == 0 { - vals = append(vals) - } else if p == -1 { + } else if p == 0 { // 0表示需要初始实际值 + vals = append(vals, p) + } else if p == -1 { //-1 表示不初始任何值 break } } @@ -91,52 +96,6 @@ func (this *ModelRtaskRecord) initCondiData(uid string) error { if err := this.Add(uid, record); err != nil { return err } - } - // else { - // //遍历所有配置 - // for _, v := range grc.GetDataList() { - // if len(v.Inited) != 5 { - // continue - // } - // if _, ok := dr.Vals[v.Id]; ok { - // continue - // } - // vals := []int32{} - // // 遍历需要初始化的配置 - // for i, p := range v.Inited { - // if p == 1 { - // vals = append(vals, 0) - // } else if p == 0 { - // sv := int32(0) - // switch i { - // case 0: - // sv = v.Data1 - // case 1: - // sv = v.Data2 - // case 2: - // sv = v.Data3 - // case 3: - // sv = v.Data4 - // case 4: - // sv = v.Data5 - // } - // vals = append(vals, sv) - // } else if p == -1 { - // break - // } - // } - // dr.Vals[v.Id] = &pb.RtaskData{ - // Data: toMap(vals...), - // Rtype: v.Type, - // Timestamp: time.Now().Unix(), - // } - - // } - // update := map[string]interface{}{ - // "vals": dr.Vals, - // } - // err = this.Change(uid, update) - // } return nil } diff --git a/modules/rtask/module.go b/modules/rtask/module.go index 9948448e1..7dbee44b8 100644 --- a/modules/rtask/module.go +++ b/modules/rtask/module.go @@ -199,10 +199,6 @@ func (this *ModuleRtask) initRtaskVerifyHandle() { } func (this *ModuleRtask) SendToRtask(session comm.IUserSession, rtaskType comm.TaskType, params ...int32) (code pb.ErrorCode) { - // t := time.Now() - // defer func() { - // log.Debugf("任务发送耗时:%v", time.Since(t)) - // }() this.Debug("任务事件触发", log.Field{"uid", session.GetUserId()}, log.Field{"taskType", rtaskType}, log.Field{"params", params}) var ( err error diff --git a/modules/user/api_create.go b/modules/user/api_create.go index 4e65b9f93..e4d664c41 100644 --- a/modules/user/api_create.go +++ b/modules/user/api_create.go @@ -4,12 +4,14 @@ import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" + "strings" "google.golang.org/protobuf/proto" ) func (this *apiComp) CreateCheck(session comm.IUserSession, req *pb.UserCreateReq) (code pb.ErrorCode) { - if req.NickName == "" { + name := strings.TrimSpace(req.NickName) + if name == "" || len(name) > 30 { code = pb.ErrorCode_UserNickNameEmpty } @@ -22,13 +24,6 @@ func (this *apiComp) Create(session comm.IUserSession, req *pb.UserCreateReq) (c return } - defer func() { - err := session.SendMsg(string(this.module.GetType()), UserSubTypeCreate, &pb.UserCreateResp{IsSucc: true}) - if err != nil { - code = pb.ErrorCode_SystemError - } - }() - //获取用户 self := this.module.modelUser.GetUser(session.GetUserId()) if self == nil { @@ -55,6 +50,7 @@ func (this *apiComp) Create(session comm.IUserSession, req *pb.UserCreateReq) (c if err := this.module.modelUser.Change(session.GetUserId(), update); err != nil { code = pb.ErrorCode_DBError + this.module.Errorf("创角失败 uid:%v name:%v err:%v", session.GetUserId(), req.NickName, err) return } @@ -64,31 +60,26 @@ func (this *apiComp) Create(session comm.IUserSession, req *pb.UserCreateReq) (c } if err := this.module.modelExpand.ChangeUserExpand(session.GetUserId(), initUpdate); err != nil { code = pb.ErrorCode_DBError + this.module.Errorf("更新修改名称次数失败 uid:%v err:%v", session.GetUserId(), err) return } var ( res []*cfg.Gameatn ) + //初始化英雄卡 if val, err := this.module.configure.GetGlobalInitConf(); err == nil { for _, v := range val.GetDataList() { res = append(res, v.Var...) - } - code = this.module.DispenseRes(session, res, true) - if code != pb.ErrorCode_Success { - this.module.Errorf("资源发放失败,%v", code) - } - //defaultHero := utils.TrInt32(val) - // err = this.hero.CreateHeroes(session.GetUserId(), defaultHero...) - // if err != nil { - // code = pb.ErrorCode_HeroInitCreat - // return - // } + _ = this.module.DispenseRes(session, res, true) } + //初始化用户设置 this.module.modelSetting.InitSetting(session.GetUserId()) - + if err := session.SendMsg(string(this.module.GetType()), UserSubTypeCreate, &pb.UserCreateResp{IsSucc: true}); err != nil { + code = pb.ErrorCode_SystemError + } return } diff --git a/modules/user/api_login.go b/modules/user/api_login.go index a75409f83..a603bb1a0 100644 --- a/modules/user/api_login.go +++ b/modules/user/api_login.go @@ -143,6 +143,7 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod } // 初始化随机任务数据 + // TODO: 判断次功能开启时再初始化 go this.module.ModuleRtask.InitCondiData(user.Uid) // 日常登录任务 diff --git a/modules/user/api_modifyavatar.go b/modules/user/api_modifyavatar.go index 270cadceb..62aa2aea3 100644 --- a/modules/user/api_modifyavatar.go +++ b/modules/user/api_modifyavatar.go @@ -34,6 +34,7 @@ func (this *apiComp) Modifyavatar(session comm.IUserSession, req *pb.UserModifya if err := this.module.modelUser.Change(session.GetUserId(), update); err != nil { code = pb.ErrorCode_DBError + this.module.Errorf("更新头像失败 uid:%v avatarId:%v err:%v", session.GetUserId(), req.AvatarId, err) return } diff --git a/modules/user/api_modifybgp.go b/modules/user/api_modifybgp.go index dd6ca3101..609c41334 100644 --- a/modules/user/api_modifybgp.go +++ b/modules/user/api_modifybgp.go @@ -32,6 +32,7 @@ func (this *apiComp) Modifybgp(session comm.IUserSession, req *pb.UserModifybgpR if err := this.module.modelUser.Change(session.GetUserId(), update); err != nil { code = pb.ErrorCode_DBError + this.module.Errorf("更新背景失败 uid:%v bgpId:%v err:%v", session.GetUserId(), req.BgpId, err) return } diff --git a/modules/user/api_modifyfigure.go b/modules/user/api_modifyfigure.go index 13f7b8ec8..5b146201e 100644 --- a/modules/user/api_modifyfigure.go +++ b/modules/user/api_modifyfigure.go @@ -32,6 +32,7 @@ func (this *apiComp) Modifyfigure(session comm.IUserSession, req *pb.UserModifyf if err := this.module.modelUser.Change(session.GetUserId(), update); err != nil { code = pb.ErrorCode_DBError + this.module.Errorf("更新形象失败 uid:%v figureId:%v err:%v", session.GetUserId(), req.FigureId, err) return } diff --git a/modules/user/api_modifyname.go b/modules/user/api_modifyname.go index 41e3cb44d..4906b769a 100644 --- a/modules/user/api_modifyname.go +++ b/modules/user/api_modifyname.go @@ -41,9 +41,11 @@ func (this *apiComp) Modifyname(session comm.IUserSession, req *pb.UserModifynam //校验名称修改次数 if expand.ModifynameCount <= 0 { - if code = this.module.ConsumeRes(session, globalCnf.Var, true); code != pb.ErrorCode_Success { + code = this.module.ConsumeRes(session, globalCnf.Var, true) + if code != pb.ErrorCode_Success { return } + this.module.Infof("修改昵称 uid:%v 消耗:%v code:%v", session.GetUserId(), globalCnf.Var, code) } //修改名称次数 @@ -56,6 +58,7 @@ func (this *apiComp) Modifyname(session comm.IUserSession, req *pb.UserModifynam } if err := this.module.modelExpand.ChangeUserExpand(session.GetUserId(), mc); err != nil { code = pb.ErrorCode_DBError + this.module.Errorf("更新昵称失败 uid:%v name:%v err:%v", session.GetUserId(), req.Name, err) return } diff --git a/modules/user/api_modifysign.go b/modules/user/api_modifysign.go index a1df5434f..17637cc9d 100644 --- a/modules/user/api_modifysign.go +++ b/modules/user/api_modifysign.go @@ -31,7 +31,10 @@ func (this *apiComp) Modifysign(session comm.IUserSession, req *pb.UserModifysig update := map[string]interface{}{ "sign": req.Sign, } - this.module.ChangeUserExpand(session.GetUserId(), update) + if err := this.module.ChangeUserExpand(session.GetUserId(), update); err != nil { + code = pb.ErrorCode_DBError + this.module.Errorf("更新签名失败 uid:%v sign:%v err:%v", session.GetUserId(), req.Sign, err) + } } if err = session.SendMsg(string(this.module.GetType()), UserSubTypeModifySign, &pb.UserModifysignResp{ diff --git a/pb/rtask_db.pb.go b/pb/rtask_db.pb.go index d729e69d4..9fa2be7d3 100644 --- a/pb/rtask_db.pb.go +++ b/pb/rtask_db.pb.go @@ -73,11 +73,10 @@ type DBRtask struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //ID - Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID - FrtaskIds map[int32]*FrtaskIds `protobuf:"bytes,3,rep,name=frtaskIds,proto3" json:"frtaskIds" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3" bson:"frtaskIds"` //已完成的任务Id - NextRtaskId int32 `protobuf:"varint,4,opt,name=nextRtaskId,proto3" json:"nextRtaskId" bson:"nextRtaskId"` //下个任务Id - IsReward bool `protobuf:"varint,5,opt,name=isReward,proto3" json:"isReward" bson:"isReward"` //接收奖励 + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //ID + Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID + FrtaskIds map[int32]*FrtaskIds `protobuf:"bytes,3,rep,name=frtaskIds,proto3" json:"frtaskIds" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3" bson:"frtaskIds"` //已完成的任务Id + IsReward bool `protobuf:"varint,5,opt,name=isReward,proto3" json:"isReward" bson:"isReward"` //接收奖励 } func (x *DBRtask) Reset() { @@ -133,13 +132,6 @@ func (x *DBRtask) GetFrtaskIds() map[int32]*FrtaskIds { return nil } -func (x *DBRtask) GetNextRtaskId() int32 { - if x != nil { - return x.NextRtaskId - } - return 0 -} - func (x *DBRtask) GetIsReward() bool { if x != nil { return x.IsReward @@ -281,43 +273,41 @@ var file_rtask_rtask_db_proto_rawDesc = []byte{ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x0a, 0x09, 0x66, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, - 0xea, 0x01, 0x0a, 0x07, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0xc8, 0x01, 0x0a, 0x07, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x09, 0x66, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x46, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x66, 0x72, 0x74, 0x61, 0x73, - 0x6b, 0x49, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x74, 0x61, 0x73, - 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x52, - 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x1a, 0x48, 0x0a, 0x0e, 0x46, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x66, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, - 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x01, 0x0a, - 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x72, 0x74, 0x61, 0x73, 0x6b, - 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xa4, 0x01, 0x0a, 0x0d, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x2e, 0x56, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, - 0x61, 0x6c, 0x73, 0x1a, 0x43, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0a, 0x2e, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6b, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x1a, 0x48, 0x0a, 0x0e, 0x46, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x66, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x01, 0x0a, 0x09, 0x72, + 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x72, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xa4, 0x01, 0x0a, 0x0d, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x2e, 0x56, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x6c, + 0x73, 0x1a, 0x43, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var (