summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-05-20 11:30:48 +0200
committerJules Laplace <julescarbon@gmail.com>2018-05-20 11:30:48 +0200
commit2f922b3ac504a5450132447630c6100c7424e16e (patch)
treeb92f32687636984f5e724004a3177ec479c0ac56
bidirectional python zerorpc client
-rw-r--r--python/relay.py25
-rw-r--r--python/rpc.py57
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)