blob: a5bb3a448e0f9ee0e08fa3a1f87536f3fe24b293 [file] [log] [blame]
James Kuszmaul8e62b022022-03-22 09:33:25 -07001package 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}