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