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