Exemple #1
0
func doEchoStream(client simple.SimpleClient, num int) {
	log.Printf("EchoStream: %v", num)
	stream, err := client.EchoStream(context.Background())
	if err != nil {
		log.Printf("Failed EchoStream: %v", err)
		return
	}
	done := make(chan struct{})
	go func() {
		defer close(done)
		for {
			in, err := stream.Recv()
			if err == io.EOF {
				return
			}
			if err != nil {
				log.Printf("Failed EchoStream: %v", err)
				return
			}
			log.Printf("EchoStream received %v", in)
		}
	}()
	defer func() {
		stream.CloseSend()
		<-done
	}()
	for i := 0; i < num; i++ {
		if err := stream.Send(&simple.Number{Num: int32(i)}); err != nil {
			log.Printf("Failed to EchoStream: %v", err)
			return
		}
	}
}