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()