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)