From 2f922b3ac504a5450132447630c6100c7424e16e Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Sun, 20 May 2018 11:30:48 +0200 Subject: bidirectional python zerorpc client --- python/rpc.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 python/rpc.py (limited to 'python/rpc.py') diff --git a/python/rpc.py b/python/rpc.py new file mode 100644 index 0000000..e71eb04 --- /dev/null +++ b/python/rpc.py @@ -0,0 +1,57 @@ +from dotenv import load_dotenv, find_dotenv +import os +import zerorpc +import gevent +import time + +load_dotenv(find_dotenv()) + +class CortexRPC(object): + def __init__(self, fn): + super().__init__() + self._listener = fn + self.connect() + + def connect(self): + print("Connecting to RPC on port {}".format(os.getenv('RPC_PORT'))) + self.rpc = zerorpc.Server(self) + self.rpc.bind("tcp://127.0.0.1:" + os.getenv('RPC_PORT')) + gevent.spawn(self.started) + self.rpc.run() + + def started(self): + print("RPC running on port {}".format(os.getenv('RPC_PORT'))) + self.reconnect() + print("defer sending a file...") + gevent.sleep(2) + self.send_file("test.png") + + def reconnect(self): + print("Connecting to Relay on port {}".format(os.getenv('RELAY_PORT'))) + self.relay = zerorpc.Client() + self.relay.connect("tcp://127.0.0.1:" + os.getenv('RELAY_PORT')) + val = None + try: + val = self.relay.connected("rpc") + print("rpc connected... {}".format(val)) + except zerorpc.TimeoutExpired: + print("timeout") + return val + + def send_param(self, key, value): + print("aloha. {}: {}".format(key, value)) + if self._listener is not None: + self._listener(key, value) + + def send_file(self, file): + print("sending a file...") + file = '01234567' * 8 * 8 * 8 * 8 * 2 + self.relay.send_file(file) + pass + +if __name__ == '__main__': + def log_param(key, value): + print("log param. {}: {}".format(key, value)) + + # this will block + rpc = CortexRPC(log_param) -- cgit v1.2.3-70-g09d2