from concurrent import futures import sys import argparse import grpc sys.path.insert(0, '../../../../../flatbuffers/python') import flatbuffers from models import HelloReply, HelloRequest, greeter_grpc_fb parser = argparse.ArgumentParser() parser.add_argument("port", help="server on port", default=3000) def build_reply(message): builder = flatbuffers.Builder() ind = builder.CreateString(message) HelloReply.HelloReplyStart(builder) HelloReply.HelloReplyAddMessage(builder, ind) root = HelloReply.HelloReplyEnd(builder) builder.Finish(root) return bytes(builder.Output()) class GreeterServicer(greeter_grpc_fb.GreeterServicer): def __init__(self): self.greetings = ["Hi", "Hallo", "Ciao"] def SayHello(self, request, context): r = HelloRequest.HelloRequest().GetRootAs(request, 0) reply = "Unknown" if r.Name(): reply = r.Name() return build_reply("welcome " + reply.decode('UTF-8')) def SayManyHellos(self, request, context): r = HelloRequest.HelloRequest().GetRootAs(request, 0) reply = "Unknown" if r.Name(): reply = r.Name() for greeting in self.greetings: print(type(reply)) yield build_reply(greeting + " " + reply.decode('UTF-8')) def serve(): args = parser.parse_args() server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) greeter_grpc_fb.add_GreeterServicer_to_server( GreeterServicer(), server ) server.add_insecure_port('[::]:' + args.port) server.start() server.wait_for_termination() if __name__ == '__main__': serve()