From bd781d600b8ce2bc9dcebebbdb0fb60ad2fb892e Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Thu, 21 May 2015 12:44:46 +0900 Subject: [PATCH] Have queues passed to the network constructor. This is somewhat cleaner as the proxy's pipe and network setup was awkwardly interleaved. It also means network's constructor is free to use both; currently some code is working around the fact that the response queue doesn't exist in the constructor. --- lib/daemon.py | 7 ++++--- lib/network.py | 8 ++++---- lib/network_proxy.py | 6 +++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/daemon.py b/lib/daemon.py index e80e7d921..cff34b985 100644 --- a/lib/daemon.py +++ b/lib/daemon.py @@ -117,9 +117,10 @@ class NetworkServer(util.DaemonThread): util.DaemonThread.__init__(self) self.debug = False self.config = config - self.network = Network(config) # network sends responses on that queue self.network_queue = Queue.Queue() + self.requests_queue = Queue.Queue() + self.network = Network(self.requests_queue, self.network_queue, config) self.running = False self.lock = threading.RLock() @@ -150,11 +151,11 @@ class NetworkServer(util.DaemonThread): if self.debug: print_error("-->", request) - self.network.requests_queue.put(request) + self.requests_queue.put(request) def run(self): - self.network.start(self.network_queue) + self.network.start() while self.is_running(): try: response = self.network_queue.get(timeout=0.1) diff --git a/lib/network.py b/lib/network.py index d351d0e3d..54dc1842c 100644 --- a/lib/network.py +++ b/lib/network.py @@ -123,7 +123,7 @@ def serialize_server(host, port, protocol): class Network(util.DaemonThread): - def __init__(self, config=None): + def __init__(self, requests_queue, response_queue, config=None): if config is None: config = {} # Do not use mutables as default values! util.DaemonThread.__init__(self) @@ -132,6 +132,8 @@ class Network(util.DaemonThread): self.blockchain = Blockchain(self.config, self) self.interfaces = {} self.queue = Queue.Queue() + self.requests_queue = requests_queue + self.response_queue = response_queue # Server for addresses and transactions self.default_server = self.config.get('server') # Sanitize default server @@ -168,7 +170,6 @@ class Network(util.DaemonThread): self.unanswered_requests = {} self.connection_status = 'connecting' - self.requests_queue = Queue.Queue() self.set_proxy(deserialize_proxy(self.config.get('proxy'))) # retry times self.server_retry_time = time.time() @@ -297,9 +298,8 @@ class Network(util.DaemonThread): for i in range(self.num_server): self.start_random_interface() - def start(self, response_queue): + def start(self): self.running = True - self.response_queue = response_queue self.start_interfaces() self.blockchain.start() util.DaemonThread.start(self) diff --git a/lib/network_proxy.py b/lib/network_proxy.py index a5f5af76c..c4763d71c 100644 --- a/lib/network_proxy.py +++ b/lib/network_proxy.py @@ -54,9 +54,9 @@ class NetworkProxy(util.DaemonThread): self.pipe = util.SocketPipe(socket) self.network = None else: - self.network = Network(config) - self.pipe = util.QueuePipe(send_queue=self.network.requests_queue) - self.network.start(self.pipe.get_queue) + self.pipe = util.QueuePipe() + self.network = Network(self.pipe.send_queue, self.pipe.get_queue, config) + self.network.start() for key in ['status','banner','updated','servers','interfaces']: value = self.network.get_status_value(key) self.pipe.get_queue.put({'method':'network.status', 'params':[key, value]})