上床捕羊匹配优化

This commit is contained in:
liwei1dao 2023-10-23 16:41:21 +08:00
parent 6d86f3a05b
commit 74344f18ac
26 changed files with 1920 additions and 762 deletions

View File

@ -13,7 +13,8 @@ const (
)
const (
SC_ServiceGateRouteComp core.S_Comps = "SC_GateRouteComp" //s_comps.ISC_GateRouteComp
SC_ServiceGateRouteComp core.S_Comps = "SC_GateRouteComp" //s_comps.ISC_GateRouteComp
SC_ServiceMatchComp core.S_Comps = "SC_ServiceMatchComp" //s_comps.ISC_GateRouteComp
)
const (
@ -115,6 +116,7 @@ const (
ModuleEntertainment core.M_Modules = "entertain" //消消乐
ModuleDcolor core.M_Modules = "dcolor" //猜颜色
ModuleMaincity core.M_Modules = "maincity" //主城同屏
ModuleMatchPool core.M_Modules = "matchpool" //匹配
)
// 数据表名定义处
@ -452,7 +454,11 @@ const ( //Rpc
//PVP 离线托管
RPC_PVPTrusteeship core.Rpc_Key = "RPC_PVPTrusteeship"
//捕羊大赛加入匹配请求
RPC_JoinMatchPools core.Rpc_Key = "RPC_JoinMatchPools" //加入匹配池
RPC_CancelMatch core.Rpc_Key = "RPC_CancelMatch" //取消匹配
//成功匹配
RPC_SuccMatchNotice core.Rpc_Key = "RPC_SuccMatchNotice" //成功匹配
//捕羊大赛加入匹配请求
RPC_ParkourJoinMatch core.Rpc_Key = "RPC_ParkourJoinMatch" //加入匹配
RPC_ParkourCancelMatch core.Rpc_Key = "RPC_ParkourCancelMatch" //取消匹配

View File

@ -4,14 +4,15 @@ import (
"context"
"crypto/rand"
"fmt"
"go_dreamfactory/lego/base"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/utils/container/id"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"math/big"
"reflect"
"strings"
"go_dreamfactory/lego/base"
"go_dreamfactory/lego/core"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb"
)
@ -25,6 +26,12 @@ type ISC_GateRouteComp interface {
PutUserSession(session IUserSession)
}
// 服务匹配组件
type ISC_MatchComp interface {
core.IServiceComp
RegisterMatchPool(poolName string, comp reflect.Value, msg reflect.Type, handle reflect.Method)
}
// 游戏类资源类型
const (
AttrType = "attr" //用户属性资源 例如货币 经验 之类的
@ -211,3 +218,14 @@ func GetUserBaseInfo(user *pb.DBUser) *pb.BaseUserInfo {
}
return info
}
func GetRobotBaseInfo(robot *cfg.GameRobotData) *pb.BaseUserInfo {
info := &pb.BaseUserInfo{
Uid: fmt.Sprintf("ai_%s", id.NewXId()),
Name: robot.Name,
Gender: robot.Sex,
Skin: robot.Showid,
Lv: robot.Lvshow,
}
return info
}

61
modules/comp_match.go Normal file
View File

@ -0,0 +1,61 @@
package modules
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/base"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/core/cbase"
"log"
"reflect"
)
/*
模块 网关组件 接收处理用户传递消息
*/
type MCompMatch struct {
cbase.ModuleCompBase
service base.IRPCXService //rpc服务对象
module core.IModule //当前业务模块
comp core.IModuleComp //网关组件自己
scomp comm.ISC_MatchComp
PoolName string
}
//组件初始化接口
func (this *MCompMatch) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.ModuleCompBase.Init(service, module, comp, options)
this.service = service.(base.IRPCXService)
this.module = module
this.comp = comp
return
}
//组件启动接口启动时将自己接收用户消息的处理函数注册到services/comp_gateroute.go 对象中
func (this *MCompMatch) Start() (err error) {
if err = this.ModuleCompBase.Start(); err != nil {
return
}
var comp core.IServiceComp
//注册远程路由
if comp, err = this.service.GetComp(comm.SC_ServiceMatchComp); err != nil {
return
}
this.scomp = comp.(comm.ISC_MatchComp)
this.suitableMethods()
return
}
//反射注册相关接口道services/comp_gateroute.go 对象中
func (this *MCompMatch) suitableMethods() {
typ := reflect.TypeOf(this.comp)
for m := 0; m < typ.NumMethod(); m++ {
method := typ.Method(m)
mname := method.Name
if mname == "MatchNotic" {
agrType := typ.In(1)
this.scomp.RegisterMatchPool(this.PoolName, reflect.ValueOf(this.comp), agrType, method)
return
}
}
log.Panicf("反射注册匹配池处理函数错误 [%s-%s] Api接口格式错误", this.module.GetType(), "MatchNotic")
}

View File

@ -0,0 +1,76 @@
package matchpool
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
)
/*
模块名:匹配池
开发:李伟
描述:集合项目中所有匹配玩法
*/
type MatchPool struct {
modules.ModuleBase
service comm.IService
pools *poolsComp
}
func NewModule() core.IModule {
return &MatchPool{}
}
func (this *MatchPool) GetType() core.M_Modules {
return comm.ModuleMatchPool
}
func (this *MatchPool) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
if err = this.ModuleBase.Init(service, module, options); err != nil {
return
}
this.service = service.(comm.IService)
return
}
func (this *MatchPool) Start() (err error) {
if err = this.ModuleBase.Start(); err != nil {
return
}
this.service.RegisterFunctionName(string(comm.RPC_JoinMatchPools), this.JoinMatchPools)
this.service.RegisterFunctionName(string(comm.RPC_CancelMatch), this.CancelMatch)
return
}
func (this *MatchPool) OnInstallComp() {
this.ModuleBase.OnInstallComp()
this.pools = this.RegisterComp(new(poolsComp)).(*poolsComp)
}
//加入匹配池
func (this *MatchPool) JoinMatchPools(ctx context.Context, req *pb.JoinMatchPoolReq, resp *pb.JoinMatchPoolResp) {
this.pools.joinPools(req)
}
//取消匹配
func (this *MatchPool) CancelMatch(ctx context.Context, req *pb.CancelMatchReq, resp *pb.CancelMatchResp) {
this.pools.cancelMatch(req)
}
func (this *MatchPool) MatchNotice(req *pb.SuccMatchNoticeReq) {
var (
err error
)
if err = this.service.RpcCall(context.Background(),
comm.Service_Worker,
string(comm.RPC_SuccMatchNotice),
req,
&pb.RPCParkourMatchSuccResp{},
); err != nil {
this.Error("MatchNotice err!", log.Field{Key: "err", Value: err.Error()})
return
}
}

115
modules/matchpool/pool.go Normal file
View File

@ -0,0 +1,115 @@
package matchpool
import (
"go_dreamfactory/pb"
"sync"
"sync/atomic"
anypb "google.golang.org/protobuf/types/known/anypb"
)
type MatchPlayer struct {
Uid string
Dan int32
Time int32
Data *anypb.Any
}
//基础匹配池
type MPool struct {
module *MatchPool
Name string
MatchNum int32
Timeout int32
lock sync.RWMutex
state int32
Players map[string]*MatchPlayer
}
func (this *MPool) join(req *pb.JoinMatchPoolReq) {
this.lock.Lock()
player := &MatchPlayer{
Uid: req.Uid,
Time: 0,
Data: req.Data,
}
this.Players[req.Uid] = player
this.lock.Unlock()
}
func (this *MPool) cancel(uid string) {
this.lock.Lock()
delete(this.Players, uid)
this.lock.Unlock()
}
func (this *MPool) match(cd int32) {
if !atomic.CompareAndSwapInt32(&this.state, 1, 2) { //正在执行,就不要在进来了
return
}
defer func() {
atomic.StoreInt32(&this.state, 1) //执行完毕释放
}()
var (
ok bool
playerNum int32
danplayers map[int32][]*MatchPlayer = make(map[int32][]*MatchPlayer)
group []*MatchPlayer
)
this.lock.Lock()
for _, v := range this.Players {
v.Time += cd
playerNum += 1
}
for _, v := range this.Players {
if _, ok = danplayers[v.Dan]; !ok {
danplayers[v.Dan] = make([]*MatchPlayer, 0)
}
danplayers[v.Dan] = append(danplayers[v.Dan], v)
}
this.lock.Unlock()
if playerNum == 0 {
return
}
group = make([]*MatchPlayer, 0)
locp:
for _, players := range danplayers {
if len(players) >= int(this.MatchNum) {
group = append(group, players[0:this.MatchNum]...)
break locp
} else {
for _, player := range players {
if player.Time >= this.Timeout {
group = append(group, players...)
break locp
}
}
}
}
if len(group) > 0 {
this.matchSucc(group)
}
}
func (this *MPool) matchSucc(group []*MatchPlayer) {
var (
Players map[string]*anypb.Any = make(map[string]*anypb.Any)
)
this.lock.Lock()
for _, v := range group {
delete(this.Players, v.Uid)
}
this.lock.Unlock()
for _, v := range group {
Players[v.Uid] = v.Data
}
go this.module.MatchNotice(&pb.SuccMatchNoticeReq{
Poolname: this.Name,
Players: Players,
Missnum: this.MatchNum - int32(len(group)),
})
}

View File

@ -0,0 +1,82 @@
package matchpool
import (
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/cron"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"sync"
)
type poolsComp struct {
modules.MCompGate
service core.IService
module *MatchPool
lock sync.RWMutex
pools map[string]*MPool
}
func (this *poolsComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.MCompGate.Init(service, module, comp, options)
this.module = module.(*MatchPool)
this.service = service
return
}
func (this *poolsComp) Start() (err error) {
err = this.MCompGate.Start()
if _, err = cron.AddFunc("*/1 * * * * ?", this.run); err != nil {
this.module.Errorf("cron.AddFunc err:%v", err)
}
return
}
func (this *poolsComp) joinPools(req *pb.JoinMatchPoolReq) {
var (
pool *MPool
ok bool
)
this.lock.RLock()
pool, ok = this.pools[req.Poolname]
this.lock.RUnlock()
if !ok {
pool = &MPool{
module: this.module,
Name: req.Poolname,
MatchNum: req.Matchnum,
Timeout: req.Timeout,
Players: make(map[string]*MatchPlayer),
}
this.lock.Lock()
this.pools[req.Poolname] = pool
this.lock.Unlock()
}
pool.join(req)
}
func (this *poolsComp) cancelMatch(req *pb.CancelMatchReq) {
var (
pool *MPool
ok bool
)
this.lock.RLock()
pool, ok = this.pools[req.Poolname]
this.lock.RUnlock()
if ok {
pool.cancel(req.Uid)
}
}
func (this *poolsComp) run() {
var (
pools []*MPool = make([]*MPool, 0)
)
this.lock.Lock()
for _, v := range this.pools {
pools = append(pools, v)
}
this.lock.Unlock()
for _, v := range pools {
go v.match(1)
}
}

View File

@ -70,7 +70,7 @@ func (this *aiComp) createAi(battleid string, btype pb.RaceType, users []*pb.DBR
if conf, err = this.module.configure.getgameBukashiAiDataByDan(int32(btype)+1, v.Dan+1); err != nil {
return
}
ais[i] = NewAI(battleid, v.Uid, conf)
ais[i] = NewAI(battleid, v.User.Uid, conf)
}
this.lock.Lock()

View File

@ -89,14 +89,8 @@ func (this *apiComp) Info(session comm.IUserSession, req *pb.ParkourInfoReq) (er
update["weekintegral"] = 0
}
info.Lv = user.Lv
info.Name = user.Name
info.Sex = user.Gender
info.Skin = user.CurSkin
update["lv"] = user.Lv
update["name"] = user.Name
update["sex"] = user.Gender
update["skin"] = user.CurSkin
info.User = comm.GetUserBaseInfo(user)
update["user"] = info.User
if err = this.module.parkourComp.Change(session.GetUserId(), update); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
@ -106,36 +100,5 @@ func (this *apiComp) Info(session comm.IUserSession, req *pb.ParkourInfoReq) (er
return
}
session.SendMsg(string(this.module.GetType()), "info", &pb.ParkourInfoResp{Info: info})
// var (
// isopen bool
// info *pb.DBParkour
// recommend []*pb.DBRaceMember
// err error
// )
// if errdata = this.InfoCheck(session, req); errdata != nil {
// return
// }
// // isopen = this.module.configure.isopen()
// isopen = true
// if isopen {
// if info, err = this.module.parkourComp.queryinfo(session.GetUserId()); err != nil {
// errdata = &pb.ErrorData{
// Code: pb.ErrorCode_DBError,
// Title: pb.ErrorCode_DBError.ToString(),
// Message: err.Error(),
// }
// return
// }
// if recommend, err = this.module.parkourComp.getrusers(session.GetUserId()); err != nil {
// errdata = &pb.ErrorData{
// Code: pb.ErrorCode_DBError,
// Title: pb.ErrorCode_DBError.ToString(),
// Message: err.Error(),
// }
// return
// }
// }
// session.SendMsg(string(this.module.GetType()), "info", &pb.ParkourInfoResp{Isopen: isopen, Info: info, Recommend: recommend})
return
}

View File

@ -43,7 +43,7 @@ func (this *apiComp) RaceMatch(session comm.IUserSession, req *pb.ParkourRaceMat
return
}
// if team.Captainid == "" { //为组队情况
team.Captainid = team.Uid
team.Captainid = team.User.Uid
team.State = pb.RaceTeamState_teaming
// team.Member = append(team.Member, &pb.DBRaceMember{
// Uid: team.Uid,
@ -58,11 +58,7 @@ func (this *apiComp) RaceMatch(session comm.IUserSession, req *pb.ParkourRaceMat
// })
team.Member = []*pb.DBRaceMember{
{
Uid: team.Uid,
Name: team.Name,
Skin: team.Skin,
Sex: team.Sex,
Lv: team.Lv,
User: team.User,
Dan: team.Dan,
Mount: team.Mount,
Property: team.Property,
@ -101,8 +97,8 @@ func (this *apiComp) RaceMatch(session comm.IUserSession, req *pb.ParkourRaceMat
users = make([]string, len(team.Member))
for i, v := range team.Member {
if !v.Isai {
users[i] = v.Uid
if err = this.module.parkourComp.Change(v.Uid, map[string]interface{}{
users[i] = v.User.Uid
if err = this.module.parkourComp.Change(v.User.Uid, map[string]interface{}{
"state": pb.RaceTeamState_matching,
}); err != nil {
errdata = &pb.ErrorData{

View File

@ -53,8 +53,8 @@ func (this *apiComp) RaceMatchCancel(session comm.IUserSession, req *pb.ParkourR
users = make([]string, len(team.Member))
for i, v := range team.Member {
if !v.Isai {
users[i] = v.Uid
if err = this.module.parkourComp.Change(v.Uid, map[string]interface{}{
users[i] = v.User.Uid
if err = this.module.parkourComp.Change(v.User.Uid, map[string]interface{}{
"state": pb.RaceTeamState_matching,
}); err != nil {
errdata = &pb.ErrorData{

View File

@ -28,7 +28,7 @@ func (this *apiComp) Ready(session comm.IUserSession, req *pb.ParkourReadyReq) (
ok = false
isready = true
for _, v := range race.RedMember {
if v.Uid == session.GetUserId() {
if v.User.Uid == session.GetUserId() {
v.Ready = true
ok = true
} else {
@ -38,7 +38,7 @@ func (this *apiComp) Ready(session comm.IUserSession, req *pb.ParkourReadyReq) (
}
}
for _, v := range race.BuleMember {
if v.Uid == session.GetUserId() {
if v.User.Uid == session.GetUserId() {
v.Ready = true
ok = true
} else {

View File

@ -27,8 +27,8 @@ func (this *apiComp) RecoverHp(session comm.IUserSession, req *pb.ParkourRecover
users = make([]string, 0)
ok = false
for _, v := range battle.RedMember {
users = append(users, v.Uid)
if v.Uid == session.GetUserId() {
users = append(users, v.User.Uid)
if v.User.Uid == session.GetUserId() {
ok = true
break
}
@ -36,7 +36,7 @@ func (this *apiComp) RecoverHp(session comm.IUserSession, req *pb.ParkourRecover
if !ok {
users = users[:0]
for _, v := range battle.BuleMember {
users = append(users, v.Uid)
users = append(users, v.User.Uid)
}
}
//恢复hp

118
modules/parkour/match.go Normal file
View File

@ -0,0 +1,118 @@
package parkour
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"google.golang.org/protobuf/types/known/anypb"
)
/*
匹配组件
*/
type matchComp struct {
modules.MCompMatch
service core.IService
module *Parkour
}
//组件初始化接口
func (this *matchComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.MCompMatch.Init(service, module, comp, options)
this.module = module.(*Parkour)
this.service = service
this.PoolName = "parkour"
return
}
func (this *matchComp) Start() (err error) {
err = this.MCompMatch.Start()
return
}
func (this *matchComp) MatchReq(player *pb.DBMatchPlayer) (err error) {
data, _ := anypb.New(player)
err = this.module.service.RpcCall(
context.Background(),
comm.Service_Mainte,
string(comm.RPC_JoinMatchPools),
&pb.JoinMatchPoolReq{
Poolname: this.PoolName,
Uid: player.Suser.Uid,
Data: data,
Matchnum: 6,
Timeout: 10,
},
&pb.JoinMatchPoolResp{})
if err != nil {
this.module.Errorln(err)
return
}
return
}
func (this *matchComp) MatchNotic(players []*pb.DBMatchPlayer) (errdata *pb.ErrorData) {
var (
red []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 3)
bule []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 3)
ais []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 6)
dan int32
leftnum int32
err error
)
for i, v := range players {
if i%2 == 0 {
red = append(red, &pb.DBRaceMember{
User: v.Suser,
Dan: v.Dan,
Mlv: v.Mlv,
Mount: v.Mount,
Property: v.Property,
Currhp: v.Property[comm.Dhp],
})
dan = v.Dan
} else {
bule = append(bule, &pb.DBRaceMember{
User: v.Suser,
Dan: v.Dan,
Mlv: v.Mlv,
Mount: v.Mount,
Property: v.Property,
Currhp: v.Property[comm.Dhp],
})
dan = v.Dan
}
}
leftnum = 6 - int32(len(players))
if leftnum > 0 {
if ais, err = this.module.parkourComp.matcheAI(dan, leftnum); err != nil {
this.module.Error("matcheAI err!", log.Field{Key: "key", Value: err.Error()})
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Message: err.Error(),
}
return
}
if len(red) < 3 {
red = append(red, ais[0:3-len(red)]...)
ais = ais[3-len(red):]
}
if len(bule) < 3 {
bule = append(bule, ais[0:3-len(bule)]...)
}
}
if err = this.module.createbattle(red, bule); err != nil {
this.module.Error("createbattle err!", log.Field{Key: "key", Value: err.Error()})
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
Message: err.Error(),
}
}
return
}

View File

@ -7,7 +7,6 @@ import (
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/lego/sys/mgo"
"go_dreamfactory/lego/utils/container/id"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/configure"
@ -67,7 +66,7 @@ func (this *ModelParkourComp) getrusers(uid string) (recommend []*pb.DBRaceMembe
this.lock.RLock()
users = make([]*Recommend, 0, len(this.users))
for _, v := range this.users {
if v.parkour.Uid != uid {
if v.parkour.User.Uid != uid {
users = append(users, v)
}
}
@ -80,14 +79,11 @@ func (this *ModelParkourComp) getrusers(uid string) (recommend []*pb.DBRaceMembe
r := rand.New(rand.NewSource(configure.Now().Unix()))
for i, v := range r.Perm(num) {
if users[v].member == nil {
if users[v].user, err = this.module.ModuleUser.GetUser(users[v].parkour.Uid); err != nil {
if users[v].user, err = this.module.ModuleUser.GetUser(users[v].parkour.User.Uid); err != nil {
continue
}
users[v].member = &pb.DBRaceMember{
Uid: users[v].user.Uid,
Name: users[v].user.Name,
Sex: users[v].user.Gender,
Lv: users[v].user.Lv,
User: users[v].member.User,
}
}
recommend[i] = users[v].member
@ -111,11 +107,7 @@ func (this *ModelParkourComp) matcheAI(dan, num int32) (results []*pb.DBRaceMemb
return
}
results[i] = &pb.DBRaceMember{
Uid: fmt.Sprintf("ai_%s", id.NewXId()),
Name: v.Name,
Sex: v.Sex,
Skin: v.Showid,
Lv: v.Lvshow,
User: comm.GetRobotBaseInfo(v),
Dan: dan,
Mount: dragon.Dragonid,
Mlv: dragon.Lv,
@ -169,14 +161,14 @@ func (this *ModelParkourComp) queryinfo(uid string) (result *pb.DBParkour, err e
return
}
if err == mgo.MongodbNil {
//var tuser *pb.DBUser
if _, err = this.module.ModuleUser.GetUser(uid); err != nil {
var user *pb.DBUser
if user, err = this.module.ModuleUser.GetUser(uid); err != nil {
err = fmt.Errorf("no found udata:%s", uid)
return
}
result = &pb.DBParkour{
Id: primitive.NewObjectID().Hex(),
Uid: uid,
User: comm.GetUserBaseInfo(user),
State: pb.RaceTeamState_resting,
Invite: make([]*pb.DBRaceInvite, 0),
Member: []*pb.DBRaceMember{},
@ -203,14 +195,14 @@ func (this *ModelParkourComp) queryinfos(uids []string) (results []*pb.DBParkour
}
if len(onfound) > 0 {
for _, v := range onfound {
if _, err = this.module.ModuleUser.GetUser(v); err != nil {
var user *pb.DBUser
if user, err = this.module.ModuleUser.GetUser(v); err != nil {
err = fmt.Errorf("no found udata:%s", v)
return
}
temp := &pb.DBParkour{
Id: primitive.NewObjectID().Hex(),
Uid: v,
User: comm.GetUserBaseInfo(user),
State: pb.RaceTeamState_resting,
Invite: make([]*pb.DBRaceInvite, 0),
Member: []*pb.DBRaceMember{},

View File

@ -89,16 +89,6 @@ func (this *Parkour) OnInstallComp() {
// 匹配
func (this *Parkour) match(team *pb.DBParkour, ais []*pb.DBRaceMember) (err error) {
err = this.service.RpcCall(
context.Background(),
comm.Service_Mainte,
string(comm.RPC_ParkourJoinMatch),
&pb.RPCParkourJoinMatchReq{Captainid: team.Captainid, Member: team.Member, Ais: ais},
&pb.RPCParkourJoinMatchResp{})
if err != nil {
this.Errorln(err)
return
}
return
}
@ -118,19 +108,18 @@ func (this *Parkour) cancelmatch(team *pb.DBParkour) (err error) {
}
// 匹配成功 创建战斗
func (this *Parkour) createbattle(ctx context.Context, req *pb.RPCParkourMatchSuccReq, resp *pb.RPCParkourMatchSuccResp) (err error) {
func (this *Parkour) createbattle(red []*pb.DBRaceMember, bule []*pb.DBRaceMember) (err error) {
var (
race *pb.DBRace
battle *RaceItem
sessions []comm.IUserSession = make([]comm.IUserSession, 0)
)
this.Debug("createbattle", log.Field{Key: "req", Value: req.String()})
this.Debug("createbattle", log.Field{Key: "red", Value: red}, log.Field{Key: "bule", Value: bule})
race = &pb.DBRace{
Id: primitive.NewObjectID().Hex(),
ServicePath: fmt.Sprintf("%s/%s", this.service.GetType(), this.service.GetId()),
Redmember: req.Red,
Bulemember: req.Bule,
Redmember: red,
Bulemember: bule,
}
battle = &RaceItem{
Id: race.Id,
@ -138,33 +127,33 @@ func (this *Parkour) createbattle(ctx context.Context, req *pb.RPCParkourMatchSu
overtimer: timewheel.Add(time.Minute*3, this.overtimer, race.Id),
}
for _, v := range req.Red {
for _, v := range red {
v.Currhp = v.Property[comm.Dhp]
if !v.Isai { //非AI
session, online := this.GetUserSession(v.Uid)
session, online := this.GetUserSession(v.User.Uid)
v.Isoff = !online
if online {
battle.Session[v.Uid] = session
battle.Session[v.User.Uid] = session
}
} else {
v.Ready = true
}
}
battle.RedMember = req.Red
for _, v := range req.Bule {
battle.RedMember = red
for _, v := range bule {
v.Currhp = v.Property[comm.Dhp]
if !v.Isai { //非AI
session, online := this.GetUserSession(v.Uid)
session, online := this.GetUserSession(v.User.Uid)
v.Isoff = !online
if online {
battle.Session[v.Uid] = session
battle.Session[v.User.Uid] = session
}
} else {
v.Ready = true
}
}
battle.BuleMember = req.Bule
battle.BuleMember = bule
for _, v := range battle.Session {
sessions = append(sessions, v)
@ -241,7 +230,7 @@ func (this *Parkour) qte(id string, uid string, time float32, conf *cfg.GameBuzk
if ok {
ok = false
for _, v := range battle.RedMember {
if v.Uid == uid {
if v.User.Uid == uid {
ok = true
v.Scores += conf.Value
side = 1
@ -251,7 +240,7 @@ func (this *Parkour) qte(id string, uid string, time float32, conf *cfg.GameBuzk
}
if !ok {
for _, v := range battle.BuleMember {
if v.Uid == uid {
if v.User.Uid == uid {
ok = true
v.Scores += conf.Value
side = 2
@ -304,7 +293,7 @@ func (this *Parkour) shot(id string, uid string) {
if ok {
ok = false
for _, v := range battle.RedMember {
if v.Uid == uid {
if v.User.Uid == uid {
v.Scores += this.ModuleTools.GetGlobalConf().BuzkashiGoalscore
ok = true
side = 1
@ -313,7 +302,7 @@ func (this *Parkour) shot(id string, uid string) {
}
if !ok {
for _, v := range battle.BuleMember {
if v.Uid == uid {
if v.User.Uid == uid {
v.Scores += this.ModuleTools.GetGlobalConf().BuzkashiGoalscore
ok = true
side = 2
@ -364,7 +353,7 @@ func (this *Parkour) avoid(id string, uid string, distance float32, conf *cfg.Ga
if ok {
ok = false
for _, v := range battle.RedMember {
if v.Uid == uid {
if v.User.Uid == uid {
member = v
ok = true
winSide = 1
@ -373,7 +362,7 @@ func (this *Parkour) avoid(id string, uid string, distance float32, conf *cfg.Ga
}
if !ok {
for _, v := range battle.BuleMember {
if v.Uid == uid {
if v.User.Uid == uid {
member = v
ok = true
winSide = 2
@ -393,7 +382,7 @@ func (this *Parkour) avoid(id string, uid string, distance float32, conf *cfg.Ga
if conf == nil {
member.Currhp -= this.ModuleTools.GetGlobalConf().BuzkashiSpeedbumphp
if member.Currhp <= 0 {
timewheel.Add(time.Second*time.Duration(this.ModuleTools.GetGlobalConf().BuzkashiResurrection), this.resurrectiontimer, battle.Id, member.Uid)
timewheel.Add(time.Second*time.Duration(this.ModuleTools.GetGlobalConf().BuzkashiResurrection), this.resurrectiontimer, battle.Id, member.User.Uid)
}
} else {
member.Scores += conf.Value
@ -435,7 +424,7 @@ func (this *Parkour) recoverhp(id string, uid string, hp int32) {
if ok {
ok = false
for _, v := range battle.RedMember {
if v.Uid == uid {
if v.User.Uid == uid {
player = v
v.Currhp += hp
if v.Currhp > v.Property[comm.Dhp] {
@ -446,7 +435,7 @@ func (this *Parkour) recoverhp(id string, uid string, hp int32) {
}
}
for _, v := range battle.BuleMember {
if v.Uid == uid {
if v.User.Uid == uid {
player = v
v.Currhp += hp
if v.Currhp > v.Property[comm.Dhp] {
@ -518,7 +507,7 @@ func (this *Parkour) overtimer(task *timewheel.Task, args ...interface{}) {
for _, v := range battle.RedMember {
if !v.Isai {
if err = this.parkourComp.Change(v.Uid, map[string]interface{}{
if err = this.parkourComp.Change(v.User.Uid, map[string]interface{}{
"captainid": "",
"state": 0,
"invite": []*pb.DBRaceInvite{},
@ -531,7 +520,7 @@ func (this *Parkour) overtimer(task *timewheel.Task, args ...interface{}) {
}
for _, v := range battle.BuleMember {
if !v.Isai {
if err = this.parkourComp.Change(v.Uid, map[string]interface{}{
if err = this.parkourComp.Change(v.User.Uid, map[string]interface{}{
"captainid": "",
"state": 0,
"invite": []*pb.DBRaceInvite{},
@ -569,13 +558,13 @@ func (this *Parkour) useroffline(uid, sessionid string) {
if info.Captainid == uid {
users = make([]string, 0)
for _, v := range info.Member {
if v.Uid != uid && !v.Isai {
users = append(users, v.Uid)
if err = this.parkourComp.Change(v.Uid, map[string]interface{}{
if v.User.Uid != uid && !v.Isai {
users = append(users, v.User.Uid)
if err = this.parkourComp.Change(v.User.Uid, map[string]interface{}{
"captainid": "",
"state": 0,
}); err != nil {
this.Error("用户离线! 解散队伍处理", log.Field{Key: "uid", Value: v.Uid}, log.Field{Key: "err", Value: err.Error()})
this.Error("用户离线! 解散队伍处理", log.Field{Key: "uid", Value: v.User.Uid}, log.Field{Key: "err", Value: err.Error()})
return
}
}
@ -653,13 +642,13 @@ func (this *Parkour) useroffline(uid, sessionid string) {
}
users = make([]string, 0)
for _, v := range info.Member {
if v.Uid != uid && !v.Isai {
users = append(users, v.Uid)
if err = this.parkourComp.Change(v.Uid, map[string]interface{}{
if v.User.Uid != uid && !v.Isai {
users = append(users, v.User.Uid)
if err = this.parkourComp.Change(v.User.Uid, map[string]interface{}{
"captainid": "",
"state": 0,
}); err != nil {
this.Error("用户离线! 解散队伍处理", log.Field{Key: "uid", Value: v.Uid}, log.Field{Key: "err", Value: err.Error()})
this.Error("用户离线! 解散队伍处理", log.Field{Key: "uid", Value: v.User.Uid}, log.Field{Key: "err", Value: err.Error()})
return
}
}
@ -681,7 +670,7 @@ func (this *Parkour) useroffline(uid, sessionid string) {
}
for _, v := range result {
for _, v1 := range v.Redmember {
if !v1.Isai && v1.Uid == uid {
if !v1.Isai && v1.User.Uid == uid {
if lockpath == v.ServicePath {
this.trusteeship(context.Background(), &pb.RPC_ParkourTrusteeshipReq{Battleid: v.Id, Uid: uid}, nil)
return
@ -702,7 +691,7 @@ func (this *Parkour) useroffline(uid, sessionid string) {
}
}
for _, v1 := range v.Bulemember {
if !v1.Isai && v1.Uid == uid {
if !v1.Isai && v1.User.Uid == uid {
if lockpath == v.ServicePath {
this.trusteeship(context.Background(), &pb.RPC_ParkourTrusteeshipReq{Battleid: v.Id, Uid: uid}, nil)
return
@ -739,12 +728,12 @@ func (this *Parkour) trusteeship(ctx context.Context, req *pb.RPC_ParkourTrustee
if ok {
battle.lock.Lock()
for _, v := range battle.BuleMember {
if v.Uid == v.Uid {
if v.User.Uid == v.User.Uid {
v.Isoff = true
}
}
for _, v := range battle.RedMember {
if v.Uid == v.Uid {
if v.User.Uid == v.User.Uid {
v.Isoff = true
}
}
@ -774,14 +763,14 @@ func (this *Parkour) resurrectiontimer(task *timewheel.Task, args ...interface{}
if ok {
ok = false
for _, v := range battle.RedMember {
if v.Uid == uid {
if v.User.Uid == uid {
member = v
ok = true
}
}
if !ok {
for _, v := range battle.BuleMember {
if v.Uid == uid {
if v.User.Uid == uid {
member = v
ok = true
}

View File

@ -26,10 +26,10 @@ type Timer struct {
service base.IRPCXService //rpc服务对象 通过这个对象可以发布服务和调用其他服务的接口
chat *ChatComp //俩天系统定时任务
//season *SeasonPagoda
forum *ForumComp
arena *ArenaComp
sociaty *SociatyComp
parkour *ParkourComp
forum *ForumComp
arena *ArenaComp
sociaty *SociatyComp
// parkour *ParkourComp
caravan *CaravanRank
activity *Activity
stone *StoneComp
@ -69,7 +69,7 @@ func (this *Timer) OnInstallComp() {
//this.season = this.RegisterComp(new(SeasonPagoda)).(*SeasonPagoda)
this.arena = this.RegisterComp(new(ArenaComp)).(*ArenaComp)
this.sociaty = this.RegisterComp(new(SociatyComp)).(*SociatyComp)
this.parkour = this.RegisterComp(new(ParkourComp)).(*ParkourComp)
// this.parkour = this.RegisterComp(new(ParkourComp)).(*ParkourComp)
this.caravan = this.RegisterComp(new(CaravanRank)).(*CaravanRank)
this.activity = this.RegisterComp(new(Activity)).(*Activity)
this.stone = this.RegisterComp(new(StoneComp)).(*StoneComp)

View File

@ -1,372 +1,372 @@
package timer
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"sync"
"sync/atomic"
"time"
// import (
// "context"
// "go_dreamfactory/comm"
// "go_dreamfactory/modules"
// "go_dreamfactory/pb"
// "go_dreamfactory/sys/db"
// "sync"
// "sync/atomic"
// "time"
"go_dreamfactory/lego/base"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/cron"
"go_dreamfactory/lego/sys/log"
// "go_dreamfactory/lego/base"
// "go_dreamfactory/lego/core"
// "go_dreamfactory/lego/sys/cron"
// "go_dreamfactory/lego/sys/log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
// "go.mongodb.org/mongo-driver/bson"
// "go.mongodb.org/mongo-driver/mongo"
// "go.mongodb.org/mongo-driver/mongo/options"
// )
type ParkourTeam struct {
member []*pb.DBRaceMember
ais []*pb.DBRaceMember
}
// type ParkourTeam struct {
// member []*pb.DBRaceMember
// ais []*pb.DBRaceMember
// }
/*
捕羊大赛 维护服务
*/
type ParkourComp struct {
modules.MCompConfigure
service base.IRPCXService
module *Timer
refresh time.Time //上一次刷新时间
ulock sync.RWMutex
users []*pb.DBRaceMember //推荐用户信息
tlock sync.RWMutex
teams map[string]*ParkourTeam
timerlock int32
total int32
}
// /*
// 捕羊大赛 维护服务
// */
// type ParkourComp struct {
// modules.MCompConfigure
// service base.IRPCXService
// module *Timer
// refresh time.Time //上一次刷新时间
// ulock sync.RWMutex
// users []*pb.DBRaceMember //推荐用户信息
// tlock sync.RWMutex
// teams map[string]*ParkourTeam
// timerlock int32
// total int32
// }
// 组件初始化接口
func (this *ParkourComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.MCompConfigure.Init(service, module, comp, options)
this.service = service.(base.IRPCXService)
this.module = module.(*Timer)
this.timerlock = 1
this.teams = make(map[string]*ParkourTeam)
return
}
// // 组件初始化接口
// func (this *ParkourComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
// this.MCompConfigure.Init(service, module, comp, options)
// this.service = service.(base.IRPCXService)
// this.module = module.(*Timer)
// this.timerlock = 1
// this.teams = make(map[string]*ParkourTeam)
// return
// }
// 自由跨服环境下开启此功能
func (this *ParkourComp) Start() (err error) {
err = this.MCompConfigure.Start()
if db.IsCross() {
this.refreshlist()
this.service.RegisterFunctionName(string(comm.RPC_ParkourJoinMatch), this.join)
this.service.RegisterFunctionName(string(comm.RPC_ParkourCancelMatch), this.cancel)
if _, err = cron.AddFunc("*/10 * * * * ?", this.match); err != nil {
this.module.Errorf("cron.AddFunc err:%v", err)
}
if _, err = cron.AddFunc("1 1 * * * ?", this.refreshlist); err != nil {
this.module.Errorf("cron.AddFunc err:%v", err)
}
}
return
}
// // 自由跨服环境下开启此功能
// func (this *ParkourComp) Start() (err error) {
// err = this.MCompConfigure.Start()
// if db.IsCross() {
// this.refreshlist()
// this.service.RegisterFunctionName(string(comm.RPC_ParkourJoinMatch), this.join)
// this.service.RegisterFunctionName(string(comm.RPC_ParkourCancelMatch), this.cancel)
// if _, err = cron.AddFunc("*/10 * * * * ?", this.match); err != nil {
// this.module.Errorf("cron.AddFunc err:%v", err)
// }
// if _, err = cron.AddFunc("1 1 * * * ?", this.refreshlist); err != nil {
// this.module.Errorf("cron.AddFunc err:%v", err)
// }
// }
// return
// }
// 刷新推荐列表
func (this *ParkourComp) refreshlist() {
var (
c *mongo.Cursor
conn *db.DBConn
err error
)
if conn, err = db.Local(); err != nil {
return
}
if c, err = conn.Mgo.Find(core.SqlTable(comm.TableParkour), bson.M{}, options.Find().SetSort(bson.D{{"integral", -1}}).SetSkip(0).SetLimit(100)); err != nil {
this.module.Errorln(err)
return
} else {
result := make([]*pb.DBParkour, 0, c.RemainingBatchLength())
for c.Next(context.Background()) {
tmp := &pb.DBParkour{}
if err = c.Decode(tmp); err != nil {
log.Errorln(err)
} else {
result = append(result, tmp)
}
}
this.ulock.Lock()
this.users = this.users[:0]
for _, v := range result {
this.users = append(this.users, &pb.DBRaceMember{
Uid: v.Uid,
Name: v.Name,
Sex: v.Sex,
Skin: v.Skin,
Dan: v.Dan,
Lv: v.Lv,
Mount: v.Mount,
Mlv: v.Mlv,
Property: v.Property,
Currhp: v.Property[comm.Dhp],
Isai: true,
})
}
// // 刷新推荐列表
// func (this *ParkourComp) refreshlist() {
// var (
// c *mongo.Cursor
// conn *db.DBConn
// err error
// )
// if conn, err = db.Local(); err != nil {
// return
// }
// if c, err = conn.Mgo.Find(core.SqlTable(comm.TableParkour), bson.M{}, options.Find().SetSort(bson.D{{"integral", -1}}).SetSkip(0).SetLimit(100)); err != nil {
// this.module.Errorln(err)
// return
// } else {
// result := make([]*pb.DBParkour, 0, c.RemainingBatchLength())
// for c.Next(context.Background()) {
// tmp := &pb.DBParkour{}
// if err = c.Decode(tmp); err != nil {
// log.Errorln(err)
// } else {
// result = append(result, tmp)
// }
// }
// this.ulock.Lock()
// this.users = this.users[:0]
// for _, v := range result {
// this.users = append(this.users, &pb.DBRaceMember{
// Uid: v.Uid,
// Name: v.Name,
// Sex: v.Sex,
// Skin: v.Skin,
// Dan: v.Dan,
// Lv: v.Lv,
// Mount: v.Mount,
// Mlv: v.Mlv,
// Property: v.Property,
// Currhp: v.Property[comm.Dhp],
// Isai: true,
// })
// }
this.ulock.Unlock()
}
return
}
// this.ulock.Unlock()
// }
// return
// }
// 加入匹配中
func (this *ParkourComp) join(ctx context.Context, req *pb.RPCParkourJoinMatchReq, resp *pb.RPCParkourJoinMatchResp) (err error) {
this.tlock.Lock()
this.teams[req.Captainid] = &ParkourTeam{
member: req.Member,
ais: req.Ais,
}
this.total += int32(len(req.Member))
this.tlock.Unlock()
if this.total >= 6 && atomic.LoadInt32(&this.timerlock) == 1 {
go this.match()
}
return
}
// // 加入匹配中
// func (this *ParkourComp) join(ctx context.Context, req *pb.RPCParkourJoinMatchReq, resp *pb.RPCParkourJoinMatchResp) (err error) {
// this.tlock.Lock()
// this.teams[req.Captainid] = &ParkourTeam{
// member: req.Member,
// ais: req.Ais,
// }
// this.total += int32(len(req.Member))
// this.tlock.Unlock()
// if this.total >= 6 && atomic.LoadInt32(&this.timerlock) == 1 {
// go this.match()
// }
// return
// }
// 加入匹配中
func (this *ParkourComp) cancel(ctx context.Context, req *pb.RPCParkourCancelMatchReq, resp *pb.RPCParkourCancelMatchResp) (err error) {
this.tlock.Lock()
delete(this.teams, req.Captainid)
this.tlock.Unlock()
return
}
// // 加入匹配中
// func (this *ParkourComp) cancel(ctx context.Context, req *pb.RPCParkourCancelMatchReq, resp *pb.RPCParkourCancelMatchResp) (err error) {
// this.tlock.Lock()
// delete(this.teams, req.Captainid)
// this.tlock.Unlock()
// return
// }
// 定时匹配处理
func (this *ParkourComp) match() {
// this.module.Debug("执行一次匹配!")
if !atomic.CompareAndSwapInt32(&this.timerlock, 1, 2) { //正在执行,就不要在进来了
return
}
// startime := time.Now()
defer func() {
atomic.StoreInt32(&this.timerlock, 1) //执行完毕释放
// log.Debug("Parkour Match",
// log.Field{Key: "t", Value: time.Since(startime).Milliseconds()},
// )
}()
// // 定时匹配处理
// func (this *ParkourComp) match() {
// // this.module.Debug("执行一次匹配!")
// if !atomic.CompareAndSwapInt32(&this.timerlock, 1, 2) { //正在执行,就不要在进来了
// return
// }
// // startime := time.Now()
// defer func() {
// atomic.StoreInt32(&this.timerlock, 1) //执行完毕释放
// // log.Debug("Parkour Match",
// // log.Field{Key: "t", Value: time.Since(startime).Milliseconds()},
// // )
// }()
// this.module.Errorf("捕羊大赛 定时匹配,%d", this.total)
if this.total == 0 {
return
}
// // this.module.Errorf("捕羊大赛 定时匹配,%d", this.total)
// if this.total == 0 {
// return
// }
var (
ok bool
err error
users []*pb.DBRaceMember
teams1 []string = make([]string, 0)
teams2 []string = make([]string, 0)
teams3 []string = make([]string, 0)
left int32 = this.total
red []string = make([]string, 0)
rednum int = 0
reduser []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0)
bule []string = make([]string, 0)
bulenum int = 0
buleuser []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0)
aismap map[string]*pb.DBRaceMember = make(map[string]*pb.DBRaceMember)
ais []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0)
order bool = false
)
this.tlock.Lock()
for k, v := range this.teams {
if len(v.member) == 1 {
teams1 = append(teams1, k)
} else if len(v.member) == 2 {
teams2 = append(teams2, k)
} else {
teams3 = append(teams3, k)
}
}
this.tlock.Unlock()
// var (
// ok bool
// err error
// users []*pb.DBRaceMember
// teams1 []string = make([]string, 0)
// teams2 []string = make([]string, 0)
// teams3 []string = make([]string, 0)
// left int32 = this.total
// red []string = make([]string, 0)
// rednum int = 0
// reduser []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0)
// bule []string = make([]string, 0)
// bulenum int = 0
// buleuser []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0)
// aismap map[string]*pb.DBRaceMember = make(map[string]*pb.DBRaceMember)
// ais []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0)
// order bool = false
// )
// this.tlock.Lock()
// for k, v := range this.teams {
// if len(v.member) == 1 {
// teams1 = append(teams1, k)
// } else if len(v.member) == 2 {
// teams2 = append(teams2, k)
// } else {
// teams3 = append(teams3, k)
// }
// }
// this.tlock.Unlock()
this.ulock.RLock()
users = make([]*pb.DBRaceMember, 0, len(this.users))
for _, v1 := range this.users {
ok = false
for _, v := range this.teams {
for _, v2 := range v.member {
if v1.Uid == v2.Uid {
ok = true
}
}
}
if !ok { //过滤掉已存在的人员
users = append(users, v1)
}
}
this.ulock.RUnlock()
// this.ulock.RLock()
// users = make([]*pb.DBRaceMember, 0, len(this.users))
// for _, v1 := range this.users {
// ok = false
// for _, v := range this.teams {
// for _, v2 := range v.member {
// if v1.Uid == v2.Uid {
// ok = true
// }
// }
// }
// if !ok { //过滤掉已存在的人员
// users = append(users, v1)
// }
// }
// this.ulock.RUnlock()
// if len(users)+int(this.total) < 6 { //人员不足
// return
// }
// // if len(users)+int(this.total) < 6 { //人员不足
// // return
// // }
var fn = func() {
if order {
//找红队
if rednum <= 0 && len(teams3) > 0 {
red = append(red, teams3[0])
teams3 = teams3[1:]
rednum = 3
left -= 3
} else if rednum <= 1 && len(teams2) > 0 {
red = append(red, teams2[0])
teams2 = teams2[1:]
rednum = 2
left -= 2
} else if rednum <= 2 && len(teams1) > 0 {
red = append(red, teams1[0])
teams1 = teams1[1:]
rednum = 1
left -= 1
}
// var fn = func() {
// if order {
// //找红队
// if rednum <= 0 && len(teams3) > 0 {
// red = append(red, teams3[0])
// teams3 = teams3[1:]
// rednum = 3
// left -= 3
// } else if rednum <= 1 && len(teams2) > 0 {
// red = append(red, teams2[0])
// teams2 = teams2[1:]
// rednum = 2
// left -= 2
// } else if rednum <= 2 && len(teams1) > 0 {
// red = append(red, teams1[0])
// teams1 = teams1[1:]
// rednum = 1
// left -= 1
// }
//找蓝队
if bulenum <= 0 && len(teams3) > 0 {
bule = append(bule, teams3[0])
teams3 = teams3[1:]
bulenum = 3
left -= 3
} else if bulenum <= 1 && len(teams2) > 0 {
bule = append(bule, teams2[0])
teams2 = teams2[1:]
bulenum = 2
left -= 2
} else if bulenum <= 2 && len(teams1) > 0 {
bule = append(bule, teams1[0])
teams1 = teams1[1:]
bulenum = 1
left -= 1
}
} else {
//找蓝队
if bulenum <= 0 && len(teams3) > 0 {
bule = append(bule, teams3[0])
teams3 = teams3[1:]
bulenum = 3
left -= 3
} else if bulenum <= 1 && len(teams2) > 0 {
bule = append(bule, teams2[0])
teams2 = teams2[1:]
bulenum = 2
left -= 2
} else if bulenum <= 2 && len(teams1) > 0 {
bule = append(bule, teams1[0])
teams1 = teams1[1:]
bulenum = 1
left -= 1
}
//找红队
if rednum <= 0 && len(teams3) > 0 {
red = append(red, teams3[0])
teams3 = teams3[1:]
rednum = 3
left -= 3
} else if rednum <= 1 && len(teams2) > 0 {
red = append(red, teams2[0])
teams2 = teams2[1:]
rednum = 2
left -= 2
} else if rednum <= 2 && len(teams1) > 0 {
red = append(red, teams1[0])
teams1 = teams1[1:]
rednum = 1
left -= 1
}
// //找蓝队
// if bulenum <= 0 && len(teams3) > 0 {
// bule = append(bule, teams3[0])
// teams3 = teams3[1:]
// bulenum = 3
// left -= 3
// } else if bulenum <= 1 && len(teams2) > 0 {
// bule = append(bule, teams2[0])
// teams2 = teams2[1:]
// bulenum = 2
// left -= 2
// } else if bulenum <= 2 && len(teams1) > 0 {
// bule = append(bule, teams1[0])
// teams1 = teams1[1:]
// bulenum = 1
// left -= 1
// }
// } else {
// //找蓝队
// if bulenum <= 0 && len(teams3) > 0 {
// bule = append(bule, teams3[0])
// teams3 = teams3[1:]
// bulenum = 3
// left -= 3
// } else if bulenum <= 1 && len(teams2) > 0 {
// bule = append(bule, teams2[0])
// teams2 = teams2[1:]
// bulenum = 2
// left -= 2
// } else if bulenum <= 2 && len(teams1) > 0 {
// bule = append(bule, teams1[0])
// teams1 = teams1[1:]
// bulenum = 1
// left -= 1
// }
// //找红队
// if rednum <= 0 && len(teams3) > 0 {
// red = append(red, teams3[0])
// teams3 = teams3[1:]
// rednum = 3
// left -= 3
// } else if rednum <= 1 && len(teams2) > 0 {
// red = append(red, teams2[0])
// teams2 = teams2[1:]
// rednum = 2
// left -= 2
// } else if rednum <= 2 && len(teams1) > 0 {
// red = append(red, teams1[0])
// teams1 = teams1[1:]
// rednum = 1
// left -= 1
// }
}
order = !order
}
fn()
if (rednum < 3 || bulenum < 3) && left > 0 {
_lt := left
fn()
if left < _lt {
fn() //做多执行三次即可
}
}
this.tlock.RLock()
for _, v := range red {
reduser = append(reduser, this.teams[v].member...)
for _, ai := range this.teams[v].ais {
aismap[ai.Name] = ai
}
}
for _, v := range bule {
buleuser = append(buleuser, this.teams[v].member...)
for _, ai := range this.teams[v].ais {
aismap[ai.Name] = ai
}
}
for _, v := range aismap {
ais = append(ais, v)
}
this.tlock.RUnlock()
// }
// order = !order
// }
// fn()
// if (rednum < 3 || bulenum < 3) && left > 0 {
// _lt := left
// fn()
// if left < _lt {
// fn() //做多执行三次即可
// }
// }
// this.tlock.RLock()
// for _, v := range red {
// reduser = append(reduser, this.teams[v].member...)
// for _, ai := range this.teams[v].ais {
// aismap[ai.Name] = ai
// }
// }
// for _, v := range bule {
// buleuser = append(buleuser, this.teams[v].member...)
// for _, ai := range this.teams[v].ais {
// aismap[ai.Name] = ai
// }
// }
// for _, v := range aismap {
// ais = append(ais, v)
// }
// this.tlock.RUnlock()
// if len(users)+rednum+bulenum < 6 {
// return
// }
n := len(reduser)
//补充人员
if len(reduser) < 3 {
if len(users) > 3-n {
reduser = append(reduser, users[0:(3-n)]...)
users = users[(3 - n):]
} else {
reduser = append(reduser, ais[0:(3-n)]...)
ais = ais[(3 - n):]
}
// // if len(users)+rednum+bulenum < 6 {
// // return
// // }
// n := len(reduser)
// //补充人员
// if len(reduser) < 3 {
// if len(users) > 3-n {
// reduser = append(reduser, users[0:(3-n)]...)
// users = users[(3 - n):]
// } else {
// reduser = append(reduser, ais[0:(3-n)]...)
// ais = ais[(3 - n):]
// }
}
n = len(buleuser)
if len(buleuser) < 3 {
if len(users) > 3-n {
buleuser = append(buleuser, users[0:(3-n)]...)
users = users[(3 - n):]
} else {
buleuser = append(buleuser, ais[0:(3-n)]...)
ais = ais[(3 - n):]
}
}
// }
// n = len(buleuser)
// if len(buleuser) < 3 {
// if len(users) > 3-n {
// buleuser = append(buleuser, users[0:(3-n)]...)
// users = users[(3 - n):]
// } else {
// buleuser = append(buleuser, ais[0:(3-n)]...)
// ais = ais[(3 - n):]
// }
// }
if err = this.service.RpcCall(context.Background(),
comm.Service_Worker,
string(comm.RPC_ParkourMatchSucc),
&pb.RPCParkourMatchSuccReq{Red: reduser, Bule: buleuser},
&pb.RPCParkourMatchSuccResp{},
); err != nil {
this.module.Errorln(err)
return
}
this.tlock.Lock()
for _, v := range red {
delete(this.teams, v)
}
for _, v := range bule {
delete(this.teams, v)
}
this.total -= int32(rednum)
this.total -= int32(bulenum)
this.tlock.Unlock()
}
// if err = this.service.RpcCall(context.Background(),
// comm.Service_Worker,
// string(comm.RPC_ParkourMatchSucc),
// &pb.RPCParkourMatchSuccReq{Red: reduser, Bule: buleuser},
// &pb.RPCParkourMatchSuccResp{},
// ); err != nil {
// this.module.Errorln(err)
// return
// }
// this.tlock.Lock()
// for _, v := range red {
// delete(this.teams, v)
// }
// for _, v := range bule {
// delete(this.teams, v)
// }
// this.total -= int32(rednum)
// this.total -= int32(bulenum)
// this.tlock.Unlock()
// }
// 从远程库查询用户
func (this *ParkourComp) getuser(uid string) (user *pb.DBUser, err error) {
var (
model *db.DBModel
)
if model, err = this.module.getDBModelByUid(uid, comm.TableUser); err != nil {
return
}
user = &pb.DBUser{}
if err = model.Get(uid, user); err != nil {
this.module.Errorln(err)
}
return
}
// // 从远程库查询用户
// func (this *ParkourComp) getuser(uid string) (user *pb.DBUser, err error) {
// var (
// model *db.DBModel
// )
// if model, err = this.module.getDBModelByUid(uid, comm.TableUser); err != nil {
// return
// }
// user = &pb.DBUser{}
// if err = model.Get(uid, user); err != nil {
// this.module.Errorln(err)
// }
// return
// }

View File

@ -465,11 +465,13 @@ type DBDColorRoom struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Rid string `protobuf:"bytes,1,opt,name=rid,proto3" json:"rid"`
Results []int32 `protobuf:"varint,2,rep,packed,name=results,proto3" json:"results"`
Red *DBDColorRoomPlayer `protobuf:"bytes,3,opt,name=red,proto3" json:"red"`
Blue *DBDColorRoomPlayer `protobuf:"bytes,4,opt,name=blue,proto3" json:"blue"`
Handles []*DBDColorResult `protobuf:"bytes,5,rep,name=handles,proto3" json:"handles"`
Rid string `protobuf:"bytes,1,opt,name=rid,proto3" json:"rid"`
Difficulty DBDColorDifficulty `protobuf:"varint,2,opt,name=difficulty,proto3,enum=DBDColorDifficulty" json:"difficulty"`
Repeat bool `protobuf:"varint,3,opt,name=Repeat,proto3" json:"Repeat"`
Results []int32 `protobuf:"varint,4,rep,packed,name=results,proto3" json:"results"`
Red *DBDColorRoomPlayer `protobuf:"bytes,5,opt,name=red,proto3" json:"red"`
Blue *DBDColorRoomPlayer `protobuf:"bytes,6,opt,name=blue,proto3" json:"blue"`
Handles []*DBDColorResult `protobuf:"bytes,7,rep,name=handles,proto3" json:"handles"`
}
func (x *DBDColorRoom) Reset() {
@ -511,6 +513,20 @@ func (x *DBDColorRoom) GetRid() string {
return ""
}
func (x *DBDColorRoom) GetDifficulty() DBDColorDifficulty {
if x != nil {
return x.Difficulty
}
return DBDColorDifficulty_Simple
}
func (x *DBDColorRoom) GetRepeat() bool {
if x != nil {
return x.Repeat
}
return false
}
func (x *DBDColorRoom) GetResults() []int32 {
if x != nil {
return x.Results
@ -589,23 +605,28 @@ var file_dcolor_dcolor_db_proto_rawDesc = []byte{
0x75, 0x6c, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x6c, 0x6c, 0x72, 0x69, 0x67, 0x68, 0x74,
0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x72, 0x69, 0x67, 0x68, 0x74,
0x12, 0x1a, 0x0a, 0x08, 0x68, 0x61, 0x6c, 0x66, 0x70, 0x61, 0x69, 0x72, 0x18, 0x05, 0x20, 0x01,
0x28, 0x05, 0x52, 0x08, 0x68, 0x61, 0x6c, 0x66, 0x70, 0x61, 0x69, 0x72, 0x22, 0xb5, 0x01, 0x0a,
0x28, 0x05, 0x52, 0x08, 0x68, 0x61, 0x6c, 0x66, 0x70, 0x61, 0x69, 0x72, 0x22, 0x82, 0x02, 0x0a,
0x0c, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a,
0x03, 0x72, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x69, 0x64, 0x12,
0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05,
0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x03, 0x72, 0x65, 0x64,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c, 0x6f,
0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x03, 0x72, 0x65, 0x64,
0x12, 0x27, 0x0a, 0x04, 0x62, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13,
0x2e, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x52, 0x04, 0x62, 0x6c, 0x75, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x68, 0x61, 0x6e,
0x64, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x44, 0x42, 0x44,
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x68, 0x61, 0x6e,
0x64, 0x6c, 0x65, 0x73, 0x2a, 0x3a, 0x0a, 0x12, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
0x44, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x69,
0x6d, 0x70, 0x6c, 0x65, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x69, 0x66, 0x66, 0x69, 0x63,
0x75, 0x6c, 0x74, 0x79, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x6c, 0x10, 0x02,
0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x33, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x69,
0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63,
0x75, 0x6c, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07,
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x72,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x03, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x6f,
0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x03, 0x72, 0x65, 0x64, 0x12, 0x27, 0x0a,
0x04, 0x62, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x42,
0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x52, 0x04, 0x62, 0x6c, 0x75, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65,
0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c,
0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65,
0x73, 0x2a, 0x3a, 0x0a, 0x12, 0x44, 0x42, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x44, 0x69, 0x66,
0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x69, 0x6d, 0x70, 0x6c,
0x65, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
0x79, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x6c, 0x10, 0x02, 0x42, 0x06, 0x5a,
0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -636,14 +657,15 @@ var file_dcolor_dcolor_db_proto_depIdxs = []int32{
2, // 0: DBDColorQiecuoRecord.targets:type_name -> DBDColorQiecuoInvite
0, // 1: DBDColorQiecuoRecord.difficulty:type_name -> DBDColorDifficulty
7, // 2: DBDColorRoomPlayer.info:type_name -> BaseUserInfo
4, // 3: DBDColorRoom.red:type_name -> DBDColorRoomPlayer
4, // 4: DBDColorRoom.blue:type_name -> DBDColorRoomPlayer
5, // 5: DBDColorRoom.handles:type_name -> DBDColorResult
6, // [6:6] is the sub-list for method output_type
6, // [6:6] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
0, // 3: DBDColorRoom.difficulty:type_name -> DBDColorDifficulty
4, // 4: DBDColorRoom.red:type_name -> DBDColorRoomPlayer
4, // 5: DBDColorRoom.blue:type_name -> DBDColorRoomPlayer
5, // 6: DBDColorRoom.handles:type_name -> DBDColorResult
7, // [7:7] is the sub-list for method output_type
7, // [7:7] is the sub-list for method input_type
7, // [7:7] is the sub-list for extension type_name
7, // [7:7] is the sub-list for extension extendee
0, // [0:7] is the sub-list for field type_name
}
func init() { file_dcolor_dcolor_db_proto_init() }

View File

@ -948,8 +948,9 @@ type DColorHandleReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Index int32 `protobuf:"varint,1,opt,name=index,proto3" json:"index"`
Results []int32 `protobuf:"varint,2,rep,packed,name=results,proto3" json:"results"`
Roomid string `protobuf:"bytes,1,opt,name=roomid,proto3" json:"roomid"` //战斗id
Index int32 `protobuf:"varint,2,opt,name=index,proto3" json:"index"`
Results []int32 `protobuf:"varint,3,rep,packed,name=results,proto3" json:"results"`
}
func (x *DColorHandleReq) Reset() {
@ -984,6 +985,13 @@ func (*DColorHandleReq) Descriptor() ([]byte, []int) {
return file_dcolor_dcolor_msg_proto_rawDescGZIP(), []int{17}
}
func (x *DColorHandleReq) GetRoomid() string {
if x != nil {
return x.Roomid
}
return ""
}
func (x *DColorHandleReq) GetIndex() int32 {
if x != nil {
return x.Index
@ -1043,8 +1051,9 @@ type DColorGameHandlePush struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid"`
Handle *DBDColorResult `protobuf:"bytes,2,opt,name=handle,proto3" json:"handle"`
Roomid string `protobuf:"bytes,1,opt,name=roomid,proto3" json:"roomid"` //战斗id
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid"`
Handle *DBDColorResult `protobuf:"bytes,3,opt,name=handle,proto3" json:"handle"`
}
func (x *DColorGameHandlePush) Reset() {
@ -1079,6 +1088,13 @@ func (*DColorGameHandlePush) Descriptor() ([]byte, []int) {
return file_dcolor_dcolor_msg_proto_rawDescGZIP(), []int{19}
}
func (x *DColorGameHandlePush) GetRoomid() string {
if x != nil {
return x.Roomid
}
return ""
}
func (x *DColorGameHandlePush) GetUid() string {
if x != nil {
return x.Uid
@ -1243,16 +1259,19 @@ var file_dcolor_dcolor_msg_proto_rawDesc = []byte{
0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x75, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06,
0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f,
0x6f, 0x6d, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x64, 0x65, 0x22, 0x41, 0x0a, 0x0f, 0x44, 0x43, 0x6f, 0x6c,
0x6f, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x69,
0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65,
0x78, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03,
0x28, 0x05, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x44,
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22,
0x51, 0x0a, 0x14, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6e,
0x64, 0x6c, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01,
0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x64, 0x65, 0x22, 0x59, 0x0a, 0x0f, 0x44, 0x43, 0x6f, 0x6c,
0x6f, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x72,
0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f,
0x6d, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01,
0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75,
0x6c, 0x74, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x48, 0x61, 0x6e,
0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x69, 0x0a, 0x14, 0x44, 0x43, 0x6f, 0x6c, 0x6f,
0x72, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12,
0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x06, 0x68, 0x61, 0x6e,
0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x44, 0x42, 0x44, 0x43,
0x64, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x44, 0x42, 0x44, 0x43,
0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64,
0x6c, 0x65, 0x22, 0x74, 0x0a, 0x12, 0x44, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x47, 0x61, 0x6d, 0x65,
0x4f, 0x76, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x69, 0x6e, 0x73,

61
pb/matchpool_db.pb.go Normal file
View File

@ -0,0 +1,61 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.20.0
// source: matchpool/matchpool_db.proto
package pb
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
var File_matchpool_matchpool_db_proto protoreflect.FileDescriptor
var file_matchpool_matchpool_db_proto_rawDesc = []byte{
0x0a, 0x1c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x74, 0x63,
0x68, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x06,
0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var file_matchpool_matchpool_db_proto_goTypes = []interface{}{}
var file_matchpool_matchpool_db_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_matchpool_matchpool_db_proto_init() }
func file_matchpool_matchpool_db_proto_init() {
if File_matchpool_matchpool_db_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_matchpool_matchpool_db_proto_rawDesc,
NumEnums: 0,
NumMessages: 0,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_matchpool_matchpool_db_proto_goTypes,
DependencyIndexes: file_matchpool_matchpool_db_proto_depIdxs,
}.Build()
File_matchpool_matchpool_db_proto = out.File
file_matchpool_matchpool_db_proto_rawDesc = nil
file_matchpool_matchpool_db_proto_goTypes = nil
file_matchpool_matchpool_db_proto_depIdxs = nil
}

520
pb/matchpool_msg.pb.go Normal file
View File

@ -0,0 +1,520 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.20.0
// source: matchpool/matchpool_msg.proto
package pb
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
anypb "google.golang.org/protobuf/types/known/anypb"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
//加入匹配池请求
type JoinMatchPoolReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Poolname string `protobuf:"bytes,1,opt,name=poolname,proto3" json:"poolname"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid"`
Dan int32 `protobuf:"varint,3,opt,name=dan,proto3" json:"dan"` //段位
Data *anypb.Any `protobuf:"bytes,4,opt,name=data,proto3" json:"data"`
Matchnum int32 `protobuf:"varint,5,opt,name=matchnum,proto3" json:"matchnum"` //匹配人数
Timeout int32 `protobuf:"varint,6,opt,name=timeout,proto3" json:"timeout"` //秒级单位
}
func (x *JoinMatchPoolReq) Reset() {
*x = JoinMatchPoolReq{}
if protoimpl.UnsafeEnabled {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *JoinMatchPoolReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*JoinMatchPoolReq) ProtoMessage() {}
func (x *JoinMatchPoolReq) ProtoReflect() protoreflect.Message {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use JoinMatchPoolReq.ProtoReflect.Descriptor instead.
func (*JoinMatchPoolReq) Descriptor() ([]byte, []int) {
return file_matchpool_matchpool_msg_proto_rawDescGZIP(), []int{0}
}
func (x *JoinMatchPoolReq) GetPoolname() string {
if x != nil {
return x.Poolname
}
return ""
}
func (x *JoinMatchPoolReq) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
func (x *JoinMatchPoolReq) GetDan() int32 {
if x != nil {
return x.Dan
}
return 0
}
func (x *JoinMatchPoolReq) GetData() *anypb.Any {
if x != nil {
return x.Data
}
return nil
}
func (x *JoinMatchPoolReq) GetMatchnum() int32 {
if x != nil {
return x.Matchnum
}
return 0
}
func (x *JoinMatchPoolReq) GetTimeout() int32 {
if x != nil {
return x.Timeout
}
return 0
}
type JoinMatchPoolResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *JoinMatchPoolResp) Reset() {
*x = JoinMatchPoolResp{}
if protoimpl.UnsafeEnabled {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *JoinMatchPoolResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*JoinMatchPoolResp) ProtoMessage() {}
func (x *JoinMatchPoolResp) ProtoReflect() protoreflect.Message {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use JoinMatchPoolResp.ProtoReflect.Descriptor instead.
func (*JoinMatchPoolResp) Descriptor() ([]byte, []int) {
return file_matchpool_matchpool_msg_proto_rawDescGZIP(), []int{1}
}
//取消匹配请求
type CancelMatchReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Poolname string `protobuf:"bytes,1,opt,name=poolname,proto3" json:"poolname"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid"`
}
func (x *CancelMatchReq) Reset() {
*x = CancelMatchReq{}
if protoimpl.UnsafeEnabled {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CancelMatchReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CancelMatchReq) ProtoMessage() {}
func (x *CancelMatchReq) ProtoReflect() protoreflect.Message {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CancelMatchReq.ProtoReflect.Descriptor instead.
func (*CancelMatchReq) Descriptor() ([]byte, []int) {
return file_matchpool_matchpool_msg_proto_rawDescGZIP(), []int{2}
}
func (x *CancelMatchReq) GetPoolname() string {
if x != nil {
return x.Poolname
}
return ""
}
func (x *CancelMatchReq) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
type CancelMatchResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *CancelMatchResp) Reset() {
*x = CancelMatchResp{}
if protoimpl.UnsafeEnabled {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CancelMatchResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CancelMatchResp) ProtoMessage() {}
func (x *CancelMatchResp) ProtoReflect() protoreflect.Message {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CancelMatchResp.ProtoReflect.Descriptor instead.
func (*CancelMatchResp) Descriptor() ([]byte, []int) {
return file_matchpool_matchpool_msg_proto_rawDescGZIP(), []int{3}
}
//成功匹配通知请求
type SuccMatchNoticeReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Poolname string `protobuf:"bytes,1,opt,name=poolname,proto3" json:"poolname"` //匹配池
Players map[string]*anypb.Any `protobuf:"bytes,2,rep,name=players,proto3" json:"players" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` //匹配玩家
Missnum int32 `protobuf:"varint,3,opt,name=missnum,proto3" json:"missnum"` //缺失人数
}
func (x *SuccMatchNoticeReq) Reset() {
*x = SuccMatchNoticeReq{}
if protoimpl.UnsafeEnabled {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SuccMatchNoticeReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SuccMatchNoticeReq) ProtoMessage() {}
func (x *SuccMatchNoticeReq) ProtoReflect() protoreflect.Message {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SuccMatchNoticeReq.ProtoReflect.Descriptor instead.
func (*SuccMatchNoticeReq) Descriptor() ([]byte, []int) {
return file_matchpool_matchpool_msg_proto_rawDescGZIP(), []int{4}
}
func (x *SuccMatchNoticeReq) GetPoolname() string {
if x != nil {
return x.Poolname
}
return ""
}
func (x *SuccMatchNoticeReq) GetPlayers() map[string]*anypb.Any {
if x != nil {
return x.Players
}
return nil
}
func (x *SuccMatchNoticeReq) GetMissnum() int32 {
if x != nil {
return x.Missnum
}
return 0
}
type SuccMatchNoticeResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *SuccMatchNoticeResp) Reset() {
*x = SuccMatchNoticeResp{}
if protoimpl.UnsafeEnabled {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SuccMatchNoticeResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SuccMatchNoticeResp) ProtoMessage() {}
func (x *SuccMatchNoticeResp) ProtoReflect() protoreflect.Message {
mi := &file_matchpool_matchpool_msg_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SuccMatchNoticeResp.ProtoReflect.Descriptor instead.
func (*SuccMatchNoticeResp) Descriptor() ([]byte, []int) {
return file_matchpool_matchpool_msg_proto_rawDescGZIP(), []int{5}
}
var File_matchpool_matchpool_msg_proto protoreflect.FileDescriptor
var file_matchpool_matchpool_msg_proto_rawDesc = []byte{
0x0a, 0x1d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x74, 0x63,
0x68, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb2, 0x01, 0x0a, 0x10, 0x4a,
0x6f, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x12,
0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75,
0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a,
0x03, 0x64, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x6e, 0x12,
0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x41, 0x6e, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x74,
0x63, 0x68, 0x6e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x74,
0x63, 0x68, 0x6e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22,
0x13, 0x0a, 0x11, 0x4a, 0x6f, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x6f, 0x6c,
0x52, 0x65, 0x73, 0x70, 0x22, 0x3e, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x61,
0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x75, 0x69, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4d, 0x61,
0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd8, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x63, 0x63,
0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a,
0x0a, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x70, 0x6c,
0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x53, 0x75,
0x63, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71,
0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x73, 0x73, 0x6e, 0x75,
0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x73, 0x73, 0x6e, 0x75, 0x6d,
0x1a, 0x50, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
0x38, 0x01, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x63, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e,
0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70,
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_matchpool_matchpool_msg_proto_rawDescOnce sync.Once
file_matchpool_matchpool_msg_proto_rawDescData = file_matchpool_matchpool_msg_proto_rawDesc
)
func file_matchpool_matchpool_msg_proto_rawDescGZIP() []byte {
file_matchpool_matchpool_msg_proto_rawDescOnce.Do(func() {
file_matchpool_matchpool_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_matchpool_matchpool_msg_proto_rawDescData)
})
return file_matchpool_matchpool_msg_proto_rawDescData
}
var file_matchpool_matchpool_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_matchpool_matchpool_msg_proto_goTypes = []interface{}{
(*JoinMatchPoolReq)(nil), // 0: JoinMatchPoolReq
(*JoinMatchPoolResp)(nil), // 1: JoinMatchPoolResp
(*CancelMatchReq)(nil), // 2: CancelMatchReq
(*CancelMatchResp)(nil), // 3: CancelMatchResp
(*SuccMatchNoticeReq)(nil), // 4: SuccMatchNoticeReq
(*SuccMatchNoticeResp)(nil), // 5: SuccMatchNoticeResp
nil, // 6: SuccMatchNoticeReq.PlayersEntry
(*anypb.Any)(nil), // 7: google.protobuf.Any
}
var file_matchpool_matchpool_msg_proto_depIdxs = []int32{
7, // 0: JoinMatchPoolReq.data:type_name -> google.protobuf.Any
6, // 1: SuccMatchNoticeReq.players:type_name -> SuccMatchNoticeReq.PlayersEntry
7, // 2: SuccMatchNoticeReq.PlayersEntry.value:type_name -> google.protobuf.Any
3, // [3:3] is the sub-list for method output_type
3, // [3:3] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
}
func init() { file_matchpool_matchpool_msg_proto_init() }
func file_matchpool_matchpool_msg_proto_init() {
if File_matchpool_matchpool_msg_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_matchpool_matchpool_msg_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*JoinMatchPoolReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_matchpool_matchpool_msg_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*JoinMatchPoolResp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_matchpool_matchpool_msg_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CancelMatchReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_matchpool_matchpool_msg_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CancelMatchResp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_matchpool_matchpool_msg_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SuccMatchNoticeReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_matchpool_matchpool_msg_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SuccMatchNoticeResp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_matchpool_matchpool_msg_proto_rawDesc,
NumEnums: 0,
NumMessages: 7,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_matchpool_matchpool_msg_proto_goTypes,
DependencyIndexes: file_matchpool_matchpool_msg_proto_depIdxs,
MessageInfos: file_matchpool_matchpool_msg_proto_msgTypes,
}.Build()
File_matchpool_matchpool_msg_proto = out.File
file_matchpool_matchpool_msg_proto_rawDesc = nil
file_matchpool_matchpool_msg_proto_goTypes = nil
file_matchpool_matchpool_msg_proto_depIdxs = nil
}

View File

@ -125,23 +125,19 @@ type DBRaceMember struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid"` //用户id
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name"` //用户名称
Skin string `protobuf:"bytes,3,opt,name=skin,proto3" json:"skin"` //皮肤
Sex int32 `protobuf:"varint,4,opt,name=sex,proto3" json:"sex"` //性别
Dan int32 `protobuf:"varint,5,opt,name=dan,proto3" json:"dan"` //段位
Lv int32 `protobuf:"varint,6,opt,name=lv,proto3" json:"lv"` //等级
Mlv int32 `protobuf:"varint,7,opt,name=mlv,proto3" json:"mlv"` //坐骑等级
Mount string `protobuf:"bytes,8,opt,name=mount,proto3" json:"mount"` //上阵坐骑
Property map[string]int32 `protobuf:"bytes,9,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //坐骑属性
Currhp int32 `protobuf:"varint,10,opt,name=currhp,proto3" json:"currhp"` //当前血量
Ready bool `protobuf:"varint,12,opt,name=ready,proto3" json:"ready"` //是否准备
Isai bool `protobuf:"varint,13,opt,name=isai,proto3" json:"isai"` //是否是ai
Isoff bool `protobuf:"varint,14,opt,name=isoff,proto3" json:"isoff"` //是否离线
Scores int32 `protobuf:"varint,15,opt,name=scores,proto3" json:"scores"` //当前分数
Energy int32 `protobuf:"varint,16,opt,name=energy,proto3" json:"energy"` //当前能量
Dodge int32 `protobuf:"varint,17,opt,name=dodge,proto3" json:"dodge"` //闪避次数
Shot int32 `protobuf:"varint,18,opt,name=shot,proto3" json:"shot"` //射门次数
User *BaseUserInfo `protobuf:"bytes,1,opt,name=user,proto3" json:"user"` //发起者信息
Dan int32 `protobuf:"varint,2,opt,name=dan,proto3" json:"dan"` //段位
Mlv int32 `protobuf:"varint,3,opt,name=mlv,proto3" json:"mlv"` //坐骑等级
Mount string `protobuf:"bytes,4,opt,name=mount,proto3" json:"mount"` //上阵坐骑
Property map[string]int32 `protobuf:"bytes,5,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //坐骑属性
Currhp int32 `protobuf:"varint,6,opt,name=currhp,proto3" json:"currhp"` //当前血量
Ready bool `protobuf:"varint,7,opt,name=ready,proto3" json:"ready"` //是否准备
Isai bool `protobuf:"varint,8,opt,name=isai,proto3" json:"isai"` //是否是ai
Isoff bool `protobuf:"varint,9,opt,name=isoff,proto3" json:"isoff"` //是否离线
Scores int32 `protobuf:"varint,10,opt,name=scores,proto3" json:"scores"` //当前分数
Energy int32 `protobuf:"varint,11,opt,name=energy,proto3" json:"energy"` //当前能量
Dodge int32 `protobuf:"varint,12,opt,name=dodge,proto3" json:"dodge"` //闪避次数
Shot int32 `protobuf:"varint,13,opt,name=shot,proto3" json:"shot"` //射门次数
}
func (x *DBRaceMember) Reset() {
@ -176,32 +172,11 @@ func (*DBRaceMember) Descriptor() ([]byte, []int) {
return file_parkour_parkour_db_proto_rawDescGZIP(), []int{0}
}
func (x *DBRaceMember) GetUid() string {
func (x *DBRaceMember) GetUser() *BaseUserInfo {
if x != nil {
return x.Uid
return x.User
}
return ""
}
func (x *DBRaceMember) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *DBRaceMember) GetSkin() string {
if x != nil {
return x.Skin
}
return ""
}
func (x *DBRaceMember) GetSex() int32 {
if x != nil {
return x.Sex
}
return 0
return nil
}
func (x *DBRaceMember) GetDan() int32 {
@ -211,13 +186,6 @@ func (x *DBRaceMember) GetDan() int32 {
return 0
}
func (x *DBRaceMember) GetLv() int32 {
if x != nil {
return x.Lv
}
return 0
}
func (x *DBRaceMember) GetMlv() int32 {
if x != nil {
return x.Mlv
@ -380,26 +348,22 @@ type DBParkour 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"` //用户id
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name"` //名字
Lv int32 `protobuf:"varint,4,opt,name=lv,proto3" json:"lv"` //等级
Sex int32 `protobuf:"varint,5,opt,name=sex,proto3" json:"sex"` //性别
Skin string `protobuf:"bytes,6,opt,name=skin,proto3" json:"skin"` //时装
Dan int32 `protobuf:"varint,7,opt,name=dan,proto3" json:"dan"` //段位
Defmts string `protobuf:"bytes,8,opt,name=defmts,proto3" json:"defmts"` //默认坐骑
Mlv int32 `protobuf:"varint,9,opt,name=mlv,proto3" json:"mlv"` //坐骑等级
Mount string `protobuf:"bytes,10,opt,name=mount,proto3" json:"mount"` //上阵坐骑
Property map[string]int32 `protobuf:"bytes,11,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //坐骑属性
State RaceTeamState `protobuf:"varint,12,opt,name=state,proto3,enum=RaceTeamState" json:"state"` //队伍状态
Currbattid string `protobuf:"bytes,13,opt,name=currbattid,proto3" json:"currbattid"` //当前战斗id
Integral int32 `protobuf:"varint,14,opt,name=integral,proto3" json:"integral"` //积分
Captainid string `protobuf:"bytes,15,opt,name=captainid,proto3" json:"captainid"` //队长id 当前所在队伍
Invite []*DBRaceInvite `protobuf:"bytes,16,rep,name=invite,proto3" json:"invite"` //邀请列表
Member []*DBRaceMember `protobuf:"bytes,17,rep,name=member,proto3" json:"member"` //成员列表
Weektime int64 `protobuf:"varint,18,opt,name=weektime,proto3" json:"weektime"` //周积分重置使用
Weekreward map[int32]bool `protobuf:"bytes,19,rep,name=weekreward,proto3" json:"weekreward" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //周长奖励领取
Weekintegral int32 `protobuf:"varint,20,opt,name=weekintegral,proto3" json:"weekintegral"` //周积分
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` // 比赛唯一id
User *BaseUserInfo `protobuf:"bytes,2,opt,name=user,proto3" json:"user"` //发起者信息
Dan int32 `protobuf:"varint,3,opt,name=dan,proto3" json:"dan"` //段位
Defmts string `protobuf:"bytes,4,opt,name=defmts,proto3" json:"defmts"` //默认坐骑
Mlv int32 `protobuf:"varint,5,opt,name=mlv,proto3" json:"mlv"` //坐骑等级
Mount string `protobuf:"bytes,6,opt,name=mount,proto3" json:"mount"` //上阵坐骑
Property map[string]int32 `protobuf:"bytes,7,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //坐骑属性
State RaceTeamState `protobuf:"varint,8,opt,name=state,proto3,enum=RaceTeamState" json:"state"` //队伍状态
Currbattid string `protobuf:"bytes,9,opt,name=currbattid,proto3" json:"currbattid"` //当前战斗id
Integral int32 `protobuf:"varint,10,opt,name=integral,proto3" json:"integral"` //积分
Captainid string `protobuf:"bytes,11,opt,name=captainid,proto3" json:"captainid"` //队长id 当前所在队伍
Invite []*DBRaceInvite `protobuf:"bytes,12,rep,name=invite,proto3" json:"invite"` //邀请列表
Member []*DBRaceMember `protobuf:"bytes,13,rep,name=member,proto3" json:"member"` //成员列表
Weektime int64 `protobuf:"varint,14,opt,name=weektime,proto3" json:"weektime"` //周积分重置使用
Weekreward map[int32]bool `protobuf:"bytes,15,rep,name=weekreward,proto3" json:"weekreward" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //周长奖励领取
Weekintegral int32 `protobuf:"varint,16,opt,name=weekintegral,proto3" json:"weekintegral"` //周积分
}
func (x *DBParkour) Reset() {
@ -441,39 +405,11 @@ func (x *DBParkour) GetId() string {
return ""
}
func (x *DBParkour) GetUid() string {
func (x *DBParkour) GetUser() *BaseUserInfo {
if x != nil {
return x.Uid
return x.User
}
return ""
}
func (x *DBParkour) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *DBParkour) GetLv() int32 {
if x != nil {
return x.Lv
}
return 0
}
func (x *DBParkour) GetSex() int32 {
if x != nil {
return x.Sex
}
return 0
}
func (x *DBParkour) GetSkin() string {
if x != nil {
return x.Skin
}
return ""
return nil
}
func (x *DBParkour) GetDan() int32 {
@ -686,119 +622,207 @@ func (x *DBRace) GetBulescores() int32 {
return 0
}
//撇配用户数据
type DBMatchPlayer struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Suser *BaseUserInfo `protobuf:"bytes,1,opt,name=suser,proto3" json:"suser"` //发起者信息
Dan int32 `protobuf:"varint,2,opt,name=dan,proto3" json:"dan"` //段位
Mount string `protobuf:"bytes,3,opt,name=mount,proto3" json:"mount"` //上阵坐骑
Property map[string]int32 `protobuf:"bytes,4,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //坐骑属性
Mlv int32 `protobuf:"varint,5,opt,name=mlv,proto3" json:"mlv"` //坐骑等级
}
func (x *DBMatchPlayer) Reset() {
*x = DBMatchPlayer{}
if protoimpl.UnsafeEnabled {
mi := &file_parkour_parkour_db_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DBMatchPlayer) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DBMatchPlayer) ProtoMessage() {}
func (x *DBMatchPlayer) ProtoReflect() protoreflect.Message {
mi := &file_parkour_parkour_db_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DBMatchPlayer.ProtoReflect.Descriptor instead.
func (*DBMatchPlayer) Descriptor() ([]byte, []int) {
return file_parkour_parkour_db_proto_rawDescGZIP(), []int{4}
}
func (x *DBMatchPlayer) GetSuser() *BaseUserInfo {
if x != nil {
return x.Suser
}
return nil
}
func (x *DBMatchPlayer) GetDan() int32 {
if x != nil {
return x.Dan
}
return 0
}
func (x *DBMatchPlayer) GetMount() string {
if x != nil {
return x.Mount
}
return ""
}
func (x *DBMatchPlayer) GetProperty() map[string]int32 {
if x != nil {
return x.Property
}
return nil
}
func (x *DBMatchPlayer) GetMlv() int32 {
if x != nil {
return x.Mlv
}
return 0
}
var File_parkour_parkour_db_proto protoreflect.FileDescriptor
var file_parkour_parkour_db_proto_rawDesc = []byte{
0x0a, 0x18, 0x70, 0x61, 0x72, 0x6b, 0x6f, 0x75, 0x72, 0x2f, 0x70, 0x61, 0x72, 0x6b, 0x6f, 0x75,
0x72, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcc, 0x03, 0x0a, 0x0c, 0x44,
0x42, 0x52, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x73, 0x6b, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01,
0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x6e, 0x18, 0x05,
0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x76, 0x18,
0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x6c, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x6c, 0x76,
0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x6c, 0x76, 0x12, 0x14, 0x0a, 0x05, 0x6d,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x37, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x09, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x62,
0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75,
0x72, 0x72, 0x68, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x75, 0x72, 0x72,
0x68, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28,
0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x61, 0x69,
0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x61, 0x69, 0x12, 0x14, 0x0a, 0x05,
0x69, 0x73, 0x6f, 0x66, 0x66, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x6f,
0x66, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01,
0x28, 0x05, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e,
0x65, 0x72, 0x67, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x65, 0x6e, 0x65, 0x72,
0x67, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x6f, 0x64, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28,
0x05, 0x52, 0x05, 0x64, 0x6f, 0x64, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x74,
0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x3b, 0x0a, 0x0d,
0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x76, 0x0a, 0x0c, 0x44, 0x42, 0x52,
0x61, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x76, 0x18, 0x04, 0x20,
0x01, 0x28, 0x05, 0x52, 0x02, 0x6c, 0x76, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72,
0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
0x64, 0x22, 0xc5, 0x05, 0x0a, 0x09, 0x44, 0x42, 0x50, 0x61, 0x72, 0x6b, 0x6f, 0x75, 0x72, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28,
0x05, 0x52, 0x02, 0x6c, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01,
0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x6e, 0x18,
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x64,
0x61, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x6e, 0x12, 0x16, 0x0a,
0x06, 0x64, 0x65, 0x66, 0x6d, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64,
0x65, 0x66, 0x6d, 0x74, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x6c, 0x76, 0x18, 0x09, 0x20, 0x01,
0x28, 0x05, 0x52, 0x03, 0x6d, 0x6c, 0x76, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74,
0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a,
0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x18, 0x2e, 0x44, 0x42, 0x50, 0x61, 0x72, 0x6b, 0x6f, 0x75, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x52, 0x61, 0x63, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61,
0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x72,
0x72, 0x62, 0x61, 0x74, 0x74, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63,
0x75, 0x72, 0x72, 0x62, 0x61, 0x74, 0x74, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74,
0x65, 0x67, 0x72, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74,
0x65, 0x67, 0x72, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e,
0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x70, 0x74, 0x61, 0x69,
0x6e, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x10, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69,
0x74, 0x65, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x6d, 0x65,
0x6d, 0x62, 0x65, 0x72, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x52,
0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65,
0x72, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x12, 0x20,
0x01, 0x28, 0x03, 0x52, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a,
0x0a, 0x77, 0x65, 0x65, 0x6b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x13, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x1a, 0x2e, 0x44, 0x42, 0x50, 0x61, 0x72, 0x6b, 0x6f, 0x75, 0x72, 0x2e, 0x57, 0x65,
0x65, 0x6b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x77,
0x65, 0x65, 0x6b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x65, 0x65,
0x6b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52,
0x0c, 0x77, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x6c, 0x1a, 0x3b, 0x0a,
0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x57, 0x65,
0x65, 0x6b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 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, 0x08, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xad, 0x02, 0x0a, 0x06, 0x44, 0x42,
0x52, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50,
0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x05, 0x72, 0x74, 0x79, 0x70, 0x65, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x52, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65,
0x52, 0x05, 0x72, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63, 0x6b,
0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69,
0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x18, 0x05,
0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x12,
0x2b, 0x0a, 0x09, 0x72, 0x65, 0x64, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65,
0x72, 0x52, 0x09, 0x72, 0x65, 0x64, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09,
0x72, 0x65, 0x64, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
0x09, 0x72, 0x65, 0x64, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x0a, 0x62, 0x75,
0x6c, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d,
0x2e, 0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x0a, 0x62,
0x75, 0x6c, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6c,
0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x62,
0x75, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x2a, 0x22, 0x0a, 0x08, 0x52, 0x61, 0x63,
0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x72,
0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x70, 0x72, 0x6f, 0x70, 0x10, 0x01, 0x2a, 0x44, 0x0a,
0x0d, 0x52, 0x61, 0x63, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b,
0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x74,
0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63,
0x68, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x72, 0x61, 0x63, 0x65, 0x69, 0x6e,
0x67, 0x10, 0x03, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
0x72, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x93, 0x03, 0x0a, 0x0c, 0x44, 0x42, 0x52, 0x61, 0x63,
0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61,
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x6e, 0x12, 0x10, 0x0a, 0x03,
0x6d, 0x6c, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x6c, 0x76, 0x12, 0x14,
0x0a, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d,
0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x4d,
0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x16, 0x0a,
0x06, 0x63, 0x75, 0x72, 0x72, 0x68, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63,
0x75, 0x72, 0x72, 0x68, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x07,
0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x69,
0x73, 0x61, 0x69, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x61, 0x69, 0x12,
0x14, 0x0a, 0x05, 0x69, 0x73, 0x6f, 0x66, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05,
0x69, 0x73, 0x6f, 0x66, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a,
0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x65,
0x6e, 0x65, 0x72, 0x67, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x6f, 0x64, 0x67, 0x65, 0x18, 0x0c,
0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x6f, 0x64, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73,
0x68, 0x6f, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x74, 0x1a,
0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x76, 0x0a, 0x0c,
0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x76,
0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x6c, 0x76, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78,
0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70,
0x69, 0x72, 0x65, 0x64, 0x22, 0x8c, 0x05, 0x0a, 0x09, 0x44, 0x42, 0x50, 0x61, 0x72, 0x6b, 0x6f,
0x75, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
0x69, 0x64, 0x12, 0x21, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52,
0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01,
0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x66, 0x6d, 0x74,
0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x66, 0x6d, 0x74, 0x73, 0x12,
0x10, 0x0a, 0x03, 0x6d, 0x6c, 0x76, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x6c,
0x76, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
0x52, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x79, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x42, 0x50, 0x61,
0x72, 0x6b, 0x6f, 0x75, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x24, 0x0a,
0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x52,
0x61, 0x63, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74,
0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x62, 0x61, 0x74, 0x74, 0x69,
0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x62, 0x61, 0x74,
0x74, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x6c, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x6c, 0x12,
0x1c, 0x0a, 0x09, 0x63, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x64, 0x12, 0x25, 0x0a,
0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x06, 0x69, 0x6e,
0x76, 0x69, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0d,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d,
0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x77,
0x65, 0x65, 0x6b, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x77,
0x65, 0x65, 0x6b, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x77, 0x65, 0x65, 0x6b, 0x72,
0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x44, 0x42,
0x50, 0x61, 0x72, 0x6b, 0x6f, 0x75, 0x72, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x72, 0x65, 0x77, 0x61,
0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x77, 0x65, 0x65, 0x6b, 0x72, 0x65, 0x77,
0x61, 0x72, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x74, 0x65, 0x67,
0x72, 0x61, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x77, 0x65, 0x65, 0x6b, 0x69,
0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x6c, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x57, 0x65, 0x65, 0x6b, 0x72, 0x65, 0x77, 0x61,
0x72, 0x64, 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, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
0x02, 0x38, 0x01, 0x22, 0xad, 0x02, 0x0a, 0x06, 0x44, 0x42, 0x52, 0x61, 0x63, 0x65, 0x12, 0x0e,
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20,
0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68,
0x12, 0x1f, 0x0a, 0x05, 0x72, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x09, 0x2e, 0x52, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x72, 0x74, 0x79, 0x70,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01,
0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69,
0x6e, 0x6e, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
0x69, 0x6e, 0x6e, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x09, 0x72, 0x65, 0x64,
0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44,
0x42, 0x52, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x09, 0x72, 0x65, 0x64,
0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x64, 0x73, 0x63, 0x6f,
0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x64, 0x73, 0x63,
0x6f, 0x72, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x0a, 0x62, 0x75, 0x6c, 0x65, 0x6d, 0x65, 0x6d, 0x62,
0x65, 0x72, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x52, 0x61, 0x63,
0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x75, 0x6c, 0x65, 0x6d, 0x65, 0x6d,
0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65,
0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x62, 0x75, 0x6c, 0x65, 0x73, 0x63, 0x6f,
0x72, 0x65, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x0d, 0x44, 0x42, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x05, 0x73, 0x75, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61,
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x6e, 0x12, 0x14, 0x0a, 0x05,
0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x04,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x44, 0x42, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6c,
0x61, 0x79, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x6d, 0x6c, 0x76, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x6c, 0x76, 0x1a, 0x3b,
0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x22, 0x0a, 0x08, 0x52,
0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x69, 0x6e,
0x61, 0x72, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x70, 0x72, 0x6f, 0x70, 0x10, 0x01, 0x2a,
0x44, 0x0a, 0x0d, 0x52, 0x61, 0x63, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65,
0x12, 0x0b, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x0b, 0x0a,
0x07, 0x74, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x6d, 0x61,
0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x72, 0x61, 0x63, 0x65,
0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -814,33 +838,40 @@ func file_parkour_parkour_db_proto_rawDescGZIP() []byte {
}
var file_parkour_parkour_db_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_parkour_parkour_db_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_parkour_parkour_db_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_parkour_parkour_db_proto_goTypes = []interface{}{
(RaceType)(0), // 0: RaceType
(RaceTeamState)(0), // 1: RaceTeamState
(*DBRaceMember)(nil), // 2: DBRaceMember
(*DBRaceInvite)(nil), // 3: DBRaceInvite
(*DBParkour)(nil), // 4: DBParkour
(*DBRace)(nil), // 5: DBRace
nil, // 6: DBRaceMember.PropertyEntry
nil, // 7: DBParkour.PropertyEntry
nil, // 8: DBParkour.WeekrewardEntry
(RaceType)(0), // 0: RaceType
(RaceTeamState)(0), // 1: RaceTeamState
(*DBRaceMember)(nil), // 2: DBRaceMember
(*DBRaceInvite)(nil), // 3: DBRaceInvite
(*DBParkour)(nil), // 4: DBParkour
(*DBRace)(nil), // 5: DBRace
(*DBMatchPlayer)(nil), // 6: DBMatchPlayer
nil, // 7: DBRaceMember.PropertyEntry
nil, // 8: DBParkour.PropertyEntry
nil, // 9: DBParkour.WeekrewardEntry
nil, // 10: DBMatchPlayer.PropertyEntry
(*BaseUserInfo)(nil), // 11: BaseUserInfo
}
var file_parkour_parkour_db_proto_depIdxs = []int32{
6, // 0: DBRaceMember.property:type_name -> DBRaceMember.PropertyEntry
7, // 1: DBParkour.property:type_name -> DBParkour.PropertyEntry
1, // 2: DBParkour.state:type_name -> RaceTeamState
3, // 3: DBParkour.invite:type_name -> DBRaceInvite
2, // 4: DBParkour.member:type_name -> DBRaceMember
8, // 5: DBParkour.weekreward:type_name -> DBParkour.WeekrewardEntry
0, // 6: DBRace.rtype:type_name -> RaceType
2, // 7: DBRace.redmember:type_name -> DBRaceMember
2, // 8: DBRace.bulemember:type_name -> DBRaceMember
9, // [9:9] is the sub-list for method output_type
9, // [9:9] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
11, // 0: DBRaceMember.user:type_name -> BaseUserInfo
7, // 1: DBRaceMember.property:type_name -> DBRaceMember.PropertyEntry
11, // 2: DBParkour.user:type_name -> BaseUserInfo
8, // 3: DBParkour.property:type_name -> DBParkour.PropertyEntry
1, // 4: DBParkour.state:type_name -> RaceTeamState
3, // 5: DBParkour.invite:type_name -> DBRaceInvite
2, // 6: DBParkour.member:type_name -> DBRaceMember
9, // 7: DBParkour.weekreward:type_name -> DBParkour.WeekrewardEntry
0, // 8: DBRace.rtype:type_name -> RaceType
2, // 9: DBRace.redmember:type_name -> DBRaceMember
2, // 10: DBRace.bulemember:type_name -> DBRaceMember
11, // 11: DBMatchPlayer.suser:type_name -> BaseUserInfo
10, // 12: DBMatchPlayer.property:type_name -> DBMatchPlayer.PropertyEntry
13, // [13:13] is the sub-list for method output_type
13, // [13:13] is the sub-list for method input_type
13, // [13:13] is the sub-list for extension type_name
13, // [13:13] is the sub-list for extension extendee
0, // [0:13] is the sub-list for field type_name
}
func init() { file_parkour_parkour_db_proto_init() }
@ -848,6 +879,7 @@ func file_parkour_parkour_db_proto_init() {
if File_parkour_parkour_db_proto != nil {
return
}
file_comm_proto_init()
if !protoimpl.UnsafeEnabled {
file_parkour_parkour_db_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DBRaceMember); i {
@ -897,6 +929,18 @@ func file_parkour_parkour_db_proto_init() {
return nil
}
}
file_parkour_parkour_db_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DBMatchPlayer); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
@ -904,7 +948,7 @@ func file_parkour_parkour_db_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_parkour_parkour_db_proto_rawDesc,
NumEnums: 2,
NumMessages: 7,
NumMessages: 9,
NumExtensions: 0,
NumServices: 0,
},

View File

@ -8,7 +8,6 @@ import (
"go_dreamfactory/sys/configure"
"go_dreamfactory/sys/db"
"reflect"
"sync"
"time"
"go_dreamfactory/lego/core"
@ -52,7 +51,6 @@ type SCompGateRoute struct {
cbase.ServiceCompBase
options *CompOptions
service comm.IService //rpc服务对象 通过这个对象可以发布服务和调用其他服务的接口
mrlock sync.RWMutex //msghandles 对象的锁
msghandles map[string]*msghandle //处理函数的管理对象
}
@ -73,7 +71,7 @@ func (this *SCompGateRoute) Init(service core.IService, comp core.IServiceComp,
this.msghandles = make(map[string]*msghandle)
return err
} //
}
// 组件启动时注册rpc服务监听
func (this *SCompGateRoute) Start() (err error) {
@ -92,20 +90,16 @@ func (this *SCompGateRoute) Start() (err error) {
// 业务模块注册用户消息处理路由
func (this *SCompGateRoute) RegisterRoute(methodName string, comp reflect.Value, msg reflect.Type, handele reflect.Method) {
//log.Debugf("注册用户路由【%s】", methodName)
this.mrlock.RLock()
_, ok := this.msghandles[methodName]
this.mrlock.RUnlock()
if ok {
log.Errorf("重复 注册网关消息【%s】", methodName)
return
}
this.mrlock.Lock()
this.msghandles[methodName] = &msghandle{
rcvr: comp,
msgType: msg,
handle: handele,
}
this.mrlock.Unlock()
}
// Rpc_GatewayRoute服务接口的接收函数
@ -125,9 +119,7 @@ func (this *SCompGateRoute) ReceiveMsg(ctx context.Context, args *pb.AgentMessag
// log.Field{Key: "args", Value: args.String()},
// )
reply.ServiceId = this.service.GetId()
this.mrlock.RLock()
msghandle, ok := this.msghandles[method]
this.mrlock.RUnlock()
if ok {
session := this.service.GetUserSession()
session.SetSession(args.Ip, args.UserSessionId, args.ServiceTag, args.GatewayServiceId, args.UserId)

81
services/comp_match.go Normal file
View File

@ -0,0 +1,81 @@
package services
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/core/cbase"
"go_dreamfactory/pb"
"reflect"
"google.golang.org/protobuf/proto"
)
/*
服务网关组件 用于接收网关服务发送过来的消息
*/
func NewMatchComp() comm.ISC_MatchComp {
comp := new(SCompMatch)
return comp
}
// 服务网关组件
type SCompMatch struct {
cbase.ServiceCompBase
options *CompOptions
service comm.IService //rpc服务对象 通过这个对象可以发布服务和调用其他服务的接口
msghandles map[string]*msghandle //处理函数的管理对象
}
// 设置服务组件名称 方便业务模块中获取此组件对象
func (this *SCompMatch) GetName() core.S_Comps {
return comm.SC_ServiceMatchComp
}
func (this *SCompMatch) NewOptions() (options core.ICompOptions) {
return new(CompOptions)
}
// 组件初始化函数
func (this *SCompMatch) Init(service core.IService, comp core.IServiceComp, options core.ICompOptions) (err error) {
err = this.ServiceCompBase.Init(service, comp, options)
this.options = options.(*CompOptions)
this.service = service.(comm.IService)
return err
}
// 组件启动时注册rpc服务监听
func (this *SCompMatch) Start() (err error) {
this.service.RegisterFunctionName(string(comm.RPC_SuccMatchNotice), this.SuccMatchNotice) //注册用户登录通知
err = this.ServiceCompBase.Start()
return
}
func (this *SCompMatch) RegisterMatchPool(poolName string, comp reflect.Value, msg reflect.Type, handle reflect.Method) {
this.msghandles[poolName] = &msghandle{
rcvr: comp,
msgType: msg,
handle: handle,
}
}
// RPC_NoticeUserClose 接收用户登录通知
func (this *SCompMatch) SuccMatchNotice(ctx context.Context, args *pb.SuccMatchNoticeReq, reply *pb.SuccMatchNoticeResp) (err error) {
msghandle, ok := this.msghandles[args.Poolname]
if ok {
var (
msg proto.Message
)
newSlice := reflect.New(msghandle.msgType)
for _, v := range args.Players {
if msg, err = v.UnmarshalNew(); err != nil {
return
}
newSlice = reflect.Append(newSlice, reflect.ValueOf(msg))
}
//执行处理流
msghandle.handle.Func.Call([]reflect.Value{msghandle.rcvr, newSlice})
}
return nil
}

View File

@ -3,6 +3,7 @@ package main
import (
"flag"
"fmt"
"go_dreamfactory/modules/matchpool"
"go_dreamfactory/modules/mgolog"
"go_dreamfactory/modules/timer"
"go_dreamfactory/modules/web"
@ -38,6 +39,7 @@ func main() {
mgolog.NewModule(),
web.NewModule(),
timer.NewModule(),
matchpool.NewModule(),
)
}

View File

@ -102,6 +102,7 @@ func main() {
)
s.OnInstallComp( //装备组件
services.NewGateRouteComp(), //此服务需要接受用户的消息 需要装备网关组件
services.NewMatchComp(), //匹配管理组件
)
lego.Run(s, //运行模块
sys.NewModule(),