jsonrpc_test.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import jsonrpclib
  2. from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer
  3. import threading
  4. import time
  5. SERVER_ADDR = ("localhost", 7000)
  6. class JSONRPCServer:
  7. def __init__(self):
  8. self.server = SimpleJSONRPCServer(SERVER_ADDR)
  9. self.service = ExampleAggregateService()
  10. self.server.register_instance(self.service, allow_dotted_names=True)
  11. self.server.register_function(self.service.sumation, 'sum')
  12. self.server.register_function(self.service.sumation, 'notify_sum')
  13. self.server.register_function(self.service.sumation, 'namespace.sum')
  14. # self.server.register_introspection_functions()
  15. # self.JSONRPC_server.register_function(lambda x, y: x + y, 'add')
  16. self.thread = threading.Thread(self.server.serve_forever)
  17. self.thread.daemon = True
  18. self.thread.stop = self.stop
  19. self.thread.start()
  20. # self._wait_for_rpc_start()
  21. # time.sleeep(3)
  22. def _wait_for_rpc_start(self):
  23. rpc = jsonrpclib.Server("http://{0}:{1}".format(SERVER_ADDR[0], SERVER_ADDR[1]))
  24. while True:
  25. try:
  26. if rpc.ping():
  27. print("Ping JSONRPCServer successfull")
  28. return
  29. except:
  30. pass
  31. time.sleep(1)
  32. def stop(self):
  33. self.server.shutdown()
  34. class JSONRPCClient:
  35. def __init__(self) -> None:
  36. self.client = jsonrpclib.Server("http://{0}:{1}".format(SERVER_ADDR[0], SERVER_ADDR[1]))
  37. class ExampleService:
  38. @staticmethod
  39. def add(x, y):
  40. return x + y
  41. @staticmethod
  42. def sumation(*args):
  43. return sum(args)
  44. @staticmethod
  45. def get_data():
  46. return ['hello', 5]
  47. def ping():
  48. return True
  49. class ExampleAggregateService(ExampleService):
  50. def __init__(self) -> None:
  51. self.sub_service = ExampleService()
  52. server = JSONRPCServer()
  53. client = JSONRPCClient()
  54. print(client.ping())