xref: /aosp_15_r20/external/flatbuffers/grpc/examples/python/greeter/server.py (revision 890232f25432b36107d06881e0a25aaa6b473652)
1from concurrent import futures
2import sys
3import argparse
4import grpc
5
6sys.path.insert(0, '../../../../../flatbuffers/python')
7
8import flatbuffers
9from models import HelloReply, HelloRequest, greeter_grpc_fb
10
11parser = argparse.ArgumentParser()
12parser.add_argument("port", help="server on port", default=3000)
13
14def build_reply(message):
15    builder = flatbuffers.Builder()
16    ind = builder.CreateString(message)
17    HelloReply.HelloReplyStart(builder)
18    HelloReply.HelloReplyAddMessage(builder, ind)
19    root = HelloReply.HelloReplyEnd(builder)
20    builder.Finish(root)
21    return bytes(builder.Output())
22
23class GreeterServicer(greeter_grpc_fb.GreeterServicer):
24
25    def __init__(self):
26        self.greetings = ["Hi", "Hallo", "Ciao"]
27
28    def SayHello(self, request, context):
29        r = HelloRequest.HelloRequest().GetRootAs(request, 0)
30        reply = "Unknown"
31        if r.Name():
32            reply = r.Name()
33        return build_reply("welcome " + reply.decode('UTF-8'))
34
35    def SayManyHellos(self, request, context):
36        r = HelloRequest.HelloRequest().GetRootAs(request, 0)
37        reply = "Unknown"
38        if r.Name():
39            reply = r.Name()
40
41        for greeting in self.greetings:
42            print(type(reply))
43            yield build_reply(greeting + " " + reply.decode('UTF-8'))
44
45
46def serve():
47    args = parser.parse_args()
48    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
49    greeter_grpc_fb.add_GreeterServicer_to_server(
50        GreeterServicer(), server
51    )
52    server.add_insecure_port('[::]:' + args.port)
53    server.start()
54    server.wait_for_termination()
55
56if __name__ == '__main__':
57    serve()