tmove interfaces maintenance to its own function - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit a1d1999545e0d9b2c741ed8411c1bcb6c52f00d1 DIR parent 30519e7024cef22d98838b1b9c2543b06e43b116 HTML Author: ThomasV <thomasv@gitorious> Date: Fri, 8 May 2015 20:13:18 +0200 move interfaces maintenance to its own function Diffstat: M lib/network.py | 56 +++++++++++++++++-------------- 1 file changed, 30 insertions(+), 26 deletions(-) --- DIR diff --git a/lib/network.py b/lib/network.py t@@ -170,6 +170,9 @@ class Network(util.DaemonThread): 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() + self.nodes_retry_time = time.time() def read_recent_servers(self): if not self.config.path: t@@ -464,37 +467,38 @@ class Network(util.DaemonThread): self.requests_queue.put(request) time.sleep(0.1) + def check_interfaces(self): + now = time.time() + if len(self.interfaces) + len(self.pending_servers) < self.num_server: + self.start_random_interface() + if not self.interfaces: + if now - self.nodes_retry_time > NODES_RETRY_INTERVAL: + self.print_error('network: retrying connections') + self.disconnected_servers = set([]) + self.nodes_retry_time = now + if not self.interface.is_connected(): + if self.config.get('auto_cycle'): + if self.interfaces: + self.switch_to_random_interface() + else: + if self.default_server in self.interfaces.keys(): + self.switch_to_interface(self.interfaces[self.default_server]) + else: + if self.default_server in self.disconnected_servers: + if now - self.server_retry_time > SERVER_RETRY_INTERVAL: + self.disconnected_servers.remove(self.default_server) + self.server_retry_time = now + else: + if self.default_server not in self.pending_servers: + self.print_error("forcing reconnection") + self.interface = self.start_interface(self.default_server) + def run(self): - server_retry_time = time.time() - nodes_retry_time = time.time() while self.is_running(): + self.check_interfaces() try: i, response = self.queue.get(timeout=0.1) except Queue.Empty: - now = time.time() - if len(self.interfaces) + len(self.pending_servers) < self.num_server: - self.start_random_interface() - if not self.interfaces: - if now - nodes_retry_time > NODES_RETRY_INTERVAL: - self.print_error('network: retrying connections') - self.disconnected_servers = set([]) - nodes_retry_time = now - if not self.interface.is_connected(): - if self.config.get('auto_cycle'): - if self.interfaces: - self.switch_to_random_interface() - else: - if self.default_server in self.interfaces.keys(): - self.switch_to_interface(self.interfaces[self.default_server]) - else: - if self.default_server in self.disconnected_servers: - if now - server_retry_time > SERVER_RETRY_INTERVAL: - self.disconnected_servers.remove(self.default_server) - server_retry_time = now - else: - if self.default_server not in self.pending_servers: - self.print_error("forcing reconnection") - self.interface = self.start_interface(self.default_server) continue if response is not None: