xref: /aosp_15_r20/external/flatbuffers/grpc/examples/go/greeter/client/main.go (revision 890232f25432b36107d06881e0a25aaa6b473652)
1package main
2
3import (
4	"context"
5	"flag"
6	"fmt"
7	"io"
8	"log"
9	"time"
10
11	flatbuffers "github.com/google/flatbuffers/go"
12	"google.golang.org/grpc"
13	"google.golang.org/grpc/credentials/insecure"
14
15	models "github.com/google/flatbuffers/grpc/examples/go/greeter/models"
16)
17
18var (
19	addr = "3000"
20	name = flag.String("name", "Flatbuffers", "name to be sent to server :D")
21)
22
23func printSayHello(client models.GreeterClient, name string) {
24	log.Printf("Name to be sent (%s)", name)
25	b := flatbuffers.NewBuilder(0)
26	i := b.CreateString(name)
27	models.HelloRequestStart(b)
28	models.HelloRequestAddName(b, i)
29	b.Finish(models.HelloRequestEnd(b))
30
31	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
32	defer cancel()
33	request, err := client.SayHello(ctx, b, grpc.CallContentSubtype("flatbuffers"))
34	if err != nil {
35		log.Fatalf("%v.SayHello(_) = _, %v: ", client, err)
36	}
37	log.Printf("server said %q", request.Message())
38}
39
40func printSayManyHello(client models.GreeterClient, name string) {
41	log.Printf("Name to be sent (%s)", name)
42	b := flatbuffers.NewBuilder(0)
43	i := b.CreateString(name)
44	models.HelloRequestStart(b)
45	models.HelloRequestAddName(b, i)
46	b.Finish(models.HelloRequestEnd(b))
47
48	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
49	defer cancel()
50	stream, err := client.SayManyHellos(ctx, b, grpc.CallContentSubtype("flatbuffers"))
51	if err != nil {
52		log.Fatalf("%v.SayManyHellos(_) = _, %v", client, err)
53	}
54	for {
55		request, err := stream.Recv()
56		if err == io.EOF {
57			break
58		}
59		if err != nil {
60			log.Fatalf("%v.SayManyHellos(_) = _, %v", client, err)
61		}
62		log.Printf("server said %q", request.Message())
63	}
64}
65
66func main() {
67	flag.Parse()
68	conn, err := grpc.Dial(fmt.Sprintf("localhost:%d", 3000),
69		grpc.WithTransportCredentials(insecure.NewCredentials()),
70		grpc.WithDefaultCallOptions(grpc.ForceCodec(flatbuffers.FlatbuffersCodec{})))
71	if err != nil {
72		log.Fatalf("fail to dial: %v", err)
73	}
74	defer conn.Close()
75	client := models.NewGreeterClient(conn)
76	printSayHello(client, *name)
77	printSayManyHello(client, *name)
78}
79