diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2018-05-20 11:30:48 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2018-05-20 11:30:48 +0200 |
| commit | 2f922b3ac504a5450132447630c6100c7424e16e (patch) | |
| tree | b92f32687636984f5e724004a3177ec479c0ac56 | |
bidirectional python zerorpc client
| -rw-r--r-- | python/relay.py | 25 | ||||
| -rw-r--r-- | python/rpc.py | 57 |
2 files changed, 82 insertions, 0 deletions
diff --git a/python/relay.py b/python/relay.py new file mode 100644 index 0000000..68741d5 --- /dev/null +++ b/python/relay.py @@ -0,0 +1,25 @@ +from dotenv import load_dotenv, find_dotenv +import os +import zerorpc +import gevent + +load_dotenv(find_dotenv()) + +class RelayRPC(object): + def start(self): + print("Relay running on port {}".format(os.getenv('RELAY_PORT'))) + + def connected(self, msg): + print("got connect, trying to call back.") + print("Connecting to RPC on port {}".format(os.getenv('RPC_PORT'))) + client = zerorpc.Client() + client.connect("tcp://127.0.0.1:" + os.getenv('RPC_PORT')) + client.send_param("key", "value") + + def send_file(self, fn): + print("got file: {} bytes".format(len(fn))) + +rpc = RelayRPC() +server = zerorpc.Server(rpc) +server.bind("tcp://127.0.0.1:" + os.getenv('RELAY_PORT')) +server.run() 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) |
