xref: /aosp_15_r20/external/flatbuffers/grpc/examples/go/greeter/server/main.go (revision 890232f25432b36107d06881e0a25aaa6b473652)
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