Skip to content

Commit

Permalink
fix: market acc reuse
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangliang committed Jan 12, 2022
1 parent 792186d commit e144ccb
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 16 deletions.
21 changes: 17 additions & 4 deletions examples/hello/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,24 +46,36 @@ func HelloHandlers() agent.Handlers {

func HelloA(tick agent.Ticker) (behavior3go.Status, error) {
var p *Player
one := tick.Marget().InviteOne()
one := tick.Marget().InviteAcc()
if one == nil {
p = NewPlayer(xid.New().String())
tick.Marget().UseOne(p)
tick.Marget().UseAcc(p)
fmt.Println("new player id", p.ID())
} else {
p = one.(*Player)
}
tick.Blackboard().SetMem("player", p)
fmt.Println("current player id: ", p.ID())
return behavior3go.SUCCESS, nil
}

func HelloB(tick agent.Ticker) (behavior3go.Status, error) {
time.Sleep(time.Millisecond * time.Duration(rand.Intn(10)))
return behavior3go.SUCCESS, nil
}

func HelloC(tick agent.Ticker) (behavior3go.Status, error) {
p := tick.Blackboard().GetMem("player").(*Player)
if tick.Marget().Index() % 2 == 0 {
m := tick.Marget().InviteOne()
if m != nil {
fmt.Println("invite player success: ", m.(*Player).id)
} else {
fmt.Println("invite player failed")
}
} else {
tick.Marget().JoinOne(p)
fmt.Println("player join team: ", p.id)
}
return behavior3go.SUCCESS, nil
}

Expand All @@ -73,6 +85,7 @@ func HelloD(tick agent.Ticker) (behavior3go.Status, error) {
}

func HelloE(tick agent.Ticker) (behavior3go.Status, error) {
fmt.Println("----------------------")
return behavior3go.SUCCESS, nil
}

Expand Down Expand Up @@ -150,4 +163,4 @@ func NewPlayer(id string) *Player {

func (p *Player) ID() string {
return p.id
}
}
10 changes: 9 additions & 1 deletion examples/hello/task.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
plans:

- treeName: subHello
robotNum: 1
robotNum: 2
parallel: 1

- treeName: subHello
robotNum: 3
parallel: 1

- treeName: subHello
robotNum: 2
parallel: 1

- treeName: subHello
Expand Down
37 changes: 26 additions & 11 deletions pkg/agent/tick.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ type One interface {
type Market struct {
idx int64
hub chan One
acc chan One
amount int
roster map[string]One
used map[string]One
sync.Mutex
}

Expand All @@ -28,7 +29,8 @@ func newMarket(amount int) *Market {
return &Market{
amount: amount,
hub: make(chan One, amount),
roster: make(map[string]One),
acc: make(chan One, amount),
used: make(map[string]One),
}
}

Expand Down Expand Up @@ -58,38 +60,51 @@ func (h *Market) JoinOne(one One) {
h.hub <- one
}

func (h *Market) UseOne(one One) {
func (h *Market) UseAcc(one One) {
h.Lock()
h.roster[one.ID()] = one
h.used[one.ID()] = one
h.Unlock()
}

func (h *Market) InviteOneLike(like func(One) bool) One {
for {
func (h *Market) InviteLikeOne(like func(One) bool) One {
for i := 0; i < h.amount; i++ {
select {
case one := <-h.hub:
h.UseOne(one)
if like == nil {
return one
}
if like(one) {
return one
} else {
h.hub <- one
}
case <-time.After(time.Millisecond * 10):
return nil
}
}
return nil
}

func(h *Market) InviteAcc() One {
select {
case one := <- h.acc:
h.UseAcc(one)
return one
case <-time.After(time.Millisecond * 10):
return nil
}
}

func(h *Market) InviteOne() One {
return h.InviteOneLike(nil)
return h.InviteLikeOne(nil)
}

func (h *Market) reset() {
for _, o := range h.roster {
h.hub <- o
h.idx = 0
for _, o := range h.used {
h.acc <- o
}
h.roster = map[string]One{}
h.hub = make(chan One, h.amount)
}

func (h *Market) Index() int {
Expand Down

0 comments on commit e144ccb

Please sign in to comment.