Merge pull request #1198 from kyuupichan/if-cleanup7b

Move response getting to its own function.
This commit is contained in:
ThomasV 2015-05-06 11:28:03 +02:00
commit 241b3b073f
1 changed files with 29 additions and 25 deletions

View File

@ -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
@ -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)
@ -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:
@ -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()