blob: fd3aa62047793f0442396a7458e360f252925b2e [file] [log] [blame]
// +build OMIT
// The client command issues RPCs to a Google server and prints the
// results.
//
// In "search" mode, client calls Search on the server and prints the
// results.
//
// In "watch" mode, client starts a Watch on the server and prints the
// result stream.
package main
import (
"flag"
"fmt"
"io"
"log"
"time"
"golang.org/x/net/context"
pb "golang.org/x/talks/content/2015/gotham-grpc/search"
"google.golang.org/grpc"
)
var (
server = flag.String("server", "localhost:36060", "server address")
mode = flag.String("mode", "search", `one of "search" or "watch"`)
query = flag.String("query", "test", "query string")
)
func main() {
flag.Parse()
// Connect to the server.
conn, err := grpc.Dial(*server, grpc.WithInsecure()) // HL
if err != nil {
log.Fatalf("fail to dial: %v", err)
}
defer conn.Close()
client := pb.NewGoogleClient(conn) // HL
// Run the RPC.
switch *mode {
case "search":
search(client, *query) // HL
case "watch":
watch(client, *query)
default:
log.Fatalf("unknown mode: %q", *mode)
}
}
// search issues a search for query and prints the result.
func search(client pb.GoogleClient, query string) {
ctx, cancel := context.WithTimeout(context.Background(), 80*time.Millisecond) // HL
defer cancel()
req := &pb.Request{Query: query} // HL
res, err := client.Search(ctx, req) // HL
if err != nil {
log.Fatal(err)
}
fmt.Println(res) // HL
}
// watch runs a Watch RPC and prints the result stream.
func watch(client pb.GoogleClient, query string) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
req := &pb.Request{Query: query} // HL
stream, err := client.Watch(ctx, req) // HL
if err != nil {
log.Fatal(err)
}
for {
res, err := stream.Recv() // HL
if err == io.EOF { // HL
fmt.Println("and now your watch is ended")
return
}
if err != nil {
log.Fatal(err)
}
fmt.Println(res) // HL
}
}