1package main 2 3import ( 4 "context" 5 "fmt" 6 "log" 7 "net" 8 9 flatbuffers "github.com/google/flatbuffers/go" 10 models "github.com/google/flatbuffers/grpc/examples/go/greeter/models" 11 "google.golang.org/grpc" 12 "google.golang.org/grpc/encoding" 13) 14 15var ( 16 greetings = [...]string{"Hi", "Hallo", "Ciao"} 17) 18 19type greeterServer struct { 20 models.UnimplementedGreeterServer 21} 22 23func (s *greeterServer) SayHello(ctx context.Context, request *models.HelloRequest) (*flatbuffers.Builder, error) { 24 v := request.Name() 25 var m string 26 if v == nil { 27 m = "Unknown" 28 } else { 29 m = string(v) 30 } 31 b := flatbuffers.NewBuilder(0) 32 idx := b.CreateString("welcome " + m) 33 models.HelloReplyStart(b) 34 models.HelloReplyAddMessage(b, idx) 35 b.Finish(models.HelloReplyEnd(b)) 36 return b, nil 37} 38 39func (s *greeterServer) SayManyHellos(request *models.HelloRequest, stream models.Greeter_SayManyHellosServer) error { 40 v := request.Name() 41 var m string 42 if v == nil { 43 m = "Unknown" 44 } else { 45 m = string(v) 46 } 47 b := flatbuffers.NewBuilder(0) 48 49 for _, greeting := range greetings { 50 idx := b.CreateString(greeting + " " + m) 51 models.HelloReplyStart(b) 52 models.HelloReplyAddMessage(b, idx) 53 b.Finish(models.HelloReplyEnd(b)) 54 if err := stream.Send(b); err != nil { 55 return err 56 } 57 } 58 return nil 59} 60 61func newServer() *greeterServer { 62 s := &greeterServer{} 63 return s 64} 65 66func main() { 67 lis, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", 3000)) 68 if err != nil { 69 log.Fatalf("failed to listen: %v", err) 70 } 71 grpcServer := grpc.NewServer() 72 encoding.RegisterCodec(flatbuffers.FlatbuffersCodec{}) 73 models.RegisterGreeterServer(grpcServer, newServer()) 74 if err := grpcServer.Serve(lis); err != nil { 75 fmt.Print(err) 76 panic(err) 77 } 78} 79