// +build ignore,OMIT

package main

import (
	"fmt"
	"time"
)

// STARTMAIN1 OMIT
type Ball struct{ hits int }

func main() {
	in, out := make(chan *Ball), make(chan *Ball)
	go player("ping", in, out)
	go player("pong", in, out)

	for i := 0; i < 8; {
		select { // HL
		case in <- new(Ball): // feed the pipeline // HL
		case <-out: // drain the pipeline // HL
			i++ // HL
		} // HL
	}
}

func player(name string, in <-chan *Ball, out chan<- *Ball) {
	for i := 0; ; i++ {
		ball := <-in
		ball.hits++
		fmt.Println(name, i, "hit", ball.hits)
		time.Sleep(100 * time.Millisecond)
		out <- ball
	}
}

// STOPMAIN1 OMIT
