• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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