package main import ( "context" "fmt" "log" "net" flatbuffers "github.com/google/flatbuffers/go" models "github.com/google/flatbuffers/grpc/examples/go/greeter/models" "google.golang.org/grpc" ) var ( greetings = [...]string{"Hi", "Hallo", "Ciao"} ) type greeterServer struct { models.UnimplementedGreeterServer } func (s *greeterServer) SayHello(ctx context.Context, request *models.HelloRequest) (*flatbuffers.Builder, error) { v := request.Name() var m string if v == nil { m = "Unknown" } else { m = string(v) } b := flatbuffers.NewBuilder(0) idx := b.CreateString("welcome " + m) models.HelloReplyStart(b) models.HelloReplyAddMessage(b, idx) b.Finish(models.HelloReplyEnd(b)) return b, nil } func (s *greeterServer) SayManyHellos(request *models.HelloRequest, stream models.Greeter_SayManyHellosServer) error { v := request.Name() var m string if v == nil { m = "Unknown" } else { m = string(v) } b := flatbuffers.NewBuilder(0) for _, greeting := range greetings { idx := b.CreateString(greeting + " " + m) models.HelloReplyStart(b) models.HelloReplyAddMessage(b, idx) b.Finish(models.HelloReplyEnd(b)) if err := stream.Send(b); err != nil { return err } } return nil } func newServer() *greeterServer { s := &greeterServer{} return s } func main() { lis, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", 3000)) if err != nil { log.Fatalf("failed to listen: %v", err) } codec := &flatbuffers.FlatbuffersCodec{} grpcServer := grpc.NewServer(grpc.ForceServerCodec(codec)) models.RegisterGreeterServer(grpcServer, newServer()) if err := grpcServer.Serve(lis); err != nil { fmt.Print(err) panic(err) } }