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