package main import ( "context" "flag" "fmt" "io" "log" "time" flatbuffers "github.com/google/flatbuffers/go" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" models "github.com/google/flatbuffers/grpc/examples/go/greeter/models" ) var ( addr = "3000" name = flag.String("name", "Flatbuffers", "name to be sent to server :D") ) func printSayHello(client models.GreeterClient, name string) { log.Printf("Name to be sent (%s)", name) b := flatbuffers.NewBuilder(0) i := b.CreateString(name) models.HelloRequestStart(b) models.HelloRequestAddName(b, i) b.Finish(models.HelloRequestEnd(b)) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() request, err := client.SayHello(ctx, b, grpc.CallContentSubtype("flatbuffers")) if err != nil { log.Fatalf("%v.SayHello(_) = _, %v: ", client, err) } log.Printf("server said %q", request.Message()) } func printSayManyHello(client models.GreeterClient, name string) { log.Printf("Name to be sent (%s)", name) b := flatbuffers.NewBuilder(0) i := b.CreateString(name) models.HelloRequestStart(b) models.HelloRequestAddName(b, i) b.Finish(models.HelloRequestEnd(b)) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() stream, err := client.SayManyHellos(ctx, b, grpc.CallContentSubtype("flatbuffers")) if err != nil { log.Fatalf("%v.SayManyHellos(_) = _, %v", client, err) } for { request, err := stream.Recv() if err == io.EOF { break } if err != nil { log.Fatalf("%v.SayManyHellos(_) = _, %v", client, err) } log.Printf("server said %q", request.Message()) } } func main() { flag.Parse() conn, err := grpc.Dial(fmt.Sprintf("localhost:%d", 3000), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithDefaultCallOptions(grpc.ForceCodec(flatbuffers.FlatbuffersCodec{}))) if err != nil { log.Fatalf("fail to dial: %v", err) } defer conn.Close() client := models.NewGreeterClient(conn) printSayHello(client, *name) printSayManyHello(client, *name) }