Move response getting to its own function.
This makes the operation of run() more clear. No essential change in functionality.
This commit is contained in:
parent
a99c2bc9fa
commit
6171779442
|
@ -61,6 +61,8 @@ class TcpInterface(threading.Thread):
|
||||||
self.response_queue = response_queue
|
self.response_queue = response_queue
|
||||||
self.request_queue = Queue.Queue()
|
self.request_queue = Queue.Queue()
|
||||||
self.unanswered_requests = {}
|
self.unanswered_requests = {}
|
||||||
|
# request timeouts
|
||||||
|
self.request_time = False
|
||||||
# are we waiting for a pong?
|
# are we waiting for a pong?
|
||||||
self.is_ping = False
|
self.is_ping = False
|
||||||
self.ping_time = 0
|
self.ping_time = 0
|
||||||
|
@ -263,7 +265,7 @@ class TcpInterface(threading.Thread):
|
||||||
self.pipe.send(r)
|
self.pipe.send(r)
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
self.print_error("socket error:", e)
|
self.print_error("socket error:", e)
|
||||||
self.connected = False
|
self.stop()
|
||||||
return
|
return
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.print_error("-->", r)
|
self.print_error("-->", r)
|
||||||
|
@ -291,6 +293,31 @@ class TcpInterface(threading.Thread):
|
||||||
self.is_ping = True
|
self.is_ping = True
|
||||||
self.ping_time = time.time()
|
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):
|
def run(self):
|
||||||
self.s = self.get_socket()
|
self.s = self.get_socket()
|
||||||
if self.s:
|
if self.s:
|
||||||
|
@ -303,33 +330,10 @@ class TcpInterface(threading.Thread):
|
||||||
if not self.connected:
|
if not self.connected:
|
||||||
return
|
return
|
||||||
|
|
||||||
# request timer
|
|
||||||
request_time = False
|
|
||||||
while self.connected:
|
while self.connected:
|
||||||
self.maybe_ping()
|
self.maybe_ping()
|
||||||
self.send_requests()
|
self.send_requests()
|
||||||
if not self.connected:
|
self.get_and_process_one_response()
|
||||||
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.change_status()
|
self.change_status()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue