tMerge pull request #1198 from kyuupichan/if-cleanup7b - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 241b3b073ff9c5f80acc9d16e752d9b12f83666b DIR parent 43b8e202fdee6fed4324419729fac858cd0065f6 HTML Author: ThomasV <electrumdev@gmail.com> Date: Wed, 6 May 2015 11:28:03 +0200 Merge pull request #1198 from kyuupichan/if-cleanup7b Move response getting to its own function. Diffstat: M lib/interface.py | 54 +++++++++++++++++-------------- 1 file changed, 29 insertions(+), 25 deletions(-) --- DIR diff --git a/lib/interface.py b/lib/interface.py t@@ -61,6 +61,8 @@ class TcpInterface(threading.Thread): self.response_queue = response_queue self.request_queue = Queue.Queue() self.unanswered_requests = {} + # request timeouts + self.request_time = False # are we waiting for a pong? self.is_ping = False self.ping_time = 0 t@@ -263,7 +265,7 @@ class TcpInterface(threading.Thread): self.pipe.send(r) except socket.error, e: self.print_error("socket error:", e) - self.connected = False + self.stop() return if self.debug: self.print_error("-->", r) t@@ -291,6 +293,31 @@ class TcpInterface(threading.Thread): self.is_ping = True self.ping_time = time.time() + def get_and_process_one_response(self): + if self.is_connected(): + try: + response = self.pipe.get() + except util.timeout: + if self.unanswered_requests: + if self.request_time is False: + self.request_time = time.time() + self.print_error("setting timer") + else: + if time.time() - self.request_time > 10: + self.print_error("request timeout", len(self.unanswered_requests)) + self.stop() + return + + if self.request_time is not False: + self.print_error("stopping timer") + self.request_time = False + + # If remote side closed the socket, SocketPipe closes our socket and returns None + if response is None: + self.connected = False + else: + self.process_response(response) + def run(self): self.s = self.get_socket() if self.s: t@@ -303,33 +330,10 @@ class TcpInterface(threading.Thread): if not self.connected: return - # request timer - request_time = False while self.connected: self.maybe_ping() self.send_requests() - if not self.connected: - break - try: - response = self.pipe.get() - except util.timeout: - if self.unanswered_requests: - if request_time is False: - request_time = time.time() - self.print_error("setting timer") - else: - if time.time() - request_time > 10: - self.print_error("request timeout", len(self.unanswered_requests)) - self.connected = False - break - continue - if response is None: - self.connected = False - break - if request_time is not False: - self.print_error("stopping timer") - request_time = False - self.process_response(response) + self.get_and_process_one_response() self.change_status()