上传捕羊匹配逻辑
This commit is contained in:
parent
e47d9cbc27
commit
1cbfd710e3
@ -162,7 +162,6 @@ func (this *ModelItemsComp) UpdateUserPack(uid string, itmes ...*pb.DB_UserItemD
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,11 @@ import (
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
type ParkourTeam struct {
|
||||
member []*pb.DBRaceMember
|
||||
ais []*pb.DBRaceMember
|
||||
}
|
||||
|
||||
/*
|
||||
捕羊大赛 维护服务
|
||||
*/
|
||||
@ -31,7 +36,7 @@ type ParkourComp struct {
|
||||
ulock sync.RWMutex
|
||||
users []*pb.DBRaceMember //推荐用户信息
|
||||
tlock sync.RWMutex
|
||||
teams map[string][]*pb.DBRaceMember
|
||||
teams map[string]*ParkourTeam
|
||||
timerlock int32
|
||||
total int32
|
||||
}
|
||||
@ -42,7 +47,7 @@ func (this *ParkourComp) Init(service core.IService, module core.IModule, comp c
|
||||
this.service = service.(base.IRPCXService)
|
||||
this.module = module.(*Timer)
|
||||
this.timerlock = 1
|
||||
this.teams = make(map[string][]*pb.DBRaceMember)
|
||||
this.teams = make(map[string]*ParkourTeam)
|
||||
return
|
||||
}
|
||||
|
||||
@ -112,7 +117,10 @@ func (this *ParkourComp) refreshlist() {
|
||||
// 加入匹配中
|
||||
func (this *ParkourComp) join(ctx context.Context, req *pb.RPCParkourJoinMatchReq, resp *pb.RPCParkourJoinMatchResp) (err error) {
|
||||
this.tlock.Lock()
|
||||
this.teams[req.Captainid] = req.Member
|
||||
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 {
|
||||
@ -152,23 +160,25 @@ func (this *ParkourComp) match() {
|
||||
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)
|
||||
order bool = false
|
||||
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) == 1 {
|
||||
if len(v.member) == 1 {
|
||||
teams1 = append(teams1, k)
|
||||
} else if len(v) == 2 {
|
||||
} else if len(v.member) == 2 {
|
||||
teams2 = append(teams2, k)
|
||||
} else {
|
||||
teams3 = append(teams3, k)
|
||||
@ -181,7 +191,7 @@ func (this *ParkourComp) match() {
|
||||
for _, v1 := range this.users {
|
||||
ok = false
|
||||
for _, v := range this.teams {
|
||||
for _, v2 := range v {
|
||||
for _, v2 := range v.member {
|
||||
if v1.Uid == v2.Uid {
|
||||
ok = true
|
||||
}
|
||||
@ -193,9 +203,9 @@ func (this *ParkourComp) match() {
|
||||
}
|
||||
this.ulock.RUnlock()
|
||||
|
||||
if len(users)+int(this.total) < 6 { //人员不足
|
||||
return
|
||||
}
|
||||
// if len(users)+int(this.total) < 6 { //人员不足
|
||||
// return
|
||||
// }
|
||||
|
||||
var fn = func() {
|
||||
if order {
|
||||
@ -283,50 +293,45 @@ func (this *ParkourComp) match() {
|
||||
}
|
||||
this.tlock.RLock()
|
||||
for _, v := range red {
|
||||
reduser = append(reduser, this.teams[v]...)
|
||||
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]...)
|
||||
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 {
|
||||
n := len(reduser)
|
||||
reduser = append(reduser, users[0:(3-len(reduser))]...)
|
||||
users = users[(3 - n):]
|
||||
for _, v := range reduser[rednum:3] {
|
||||
if v.Name == "" { //同步用户数据
|
||||
if user, err := this.getuser(v.Uid); err != nil {
|
||||
this.module.Errorln(err)
|
||||
return
|
||||
} else {
|
||||
v.Name = user.Name
|
||||
v.Sex = user.Gender
|
||||
v.Lv = user.Lv
|
||||
}
|
||||
}
|
||||
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 {
|
||||
n := len(buleuser)
|
||||
buleuser = append(buleuser, users[0:(3-len(buleuser))]...)
|
||||
users = users[(3 - n):]
|
||||
for _, v := range buleuser[bulenum:3] {
|
||||
if v.Name == "" { //同步用户数据
|
||||
if user, err := this.getuser(v.Uid); err != nil {
|
||||
this.module.Errorln(err)
|
||||
return
|
||||
} else {
|
||||
v.Name = user.Name
|
||||
v.Sex = user.Gender
|
||||
v.Lv = user.Lv
|
||||
}
|
||||
}
|
||||
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):]
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user