Pass on wait timeout to underlying transports

This commit is contained in:
Marcus Cobden 2013-12-09 10:16:22 +00:00
commit d05683262b
2 changed files with 12 additions and 10 deletions

View file

@ -172,7 +172,7 @@ class SocketIO(object):
for elapsed_time in warning_screen: for elapsed_time in warning_screen:
try: try:
try: try:
self._process_events() self._process_events(timeout=seconds)
except TimeoutError: except TimeoutError:
pass pass
if self._stop_waiting(for_callbacks): if self._stop_waiting(for_callbacks):
@ -188,8 +188,8 @@ class SocketIO(object):
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
def _process_events(self): def _process_events(self, timeout=None):
for packet in self._transport.recv_packet(): for packet in self._transport.recv_packet(timeout=timeout):
try: try:
self._process_packet(packet) self._process_packet(packet)
except PacketError as e: except PacketError as e:

View file

@ -71,13 +71,13 @@ class _AbstractTransport(object):
self.send(packet_text) self.send(packet_text)
_log.debug('[packet sent] %s', packet_text) _log.debug('[packet sent] %s', packet_text)
def recv_packet(self): def recv_packet(self, timeout=None):
try: try:
while self._packets: while self._packets:
yield self._packets.pop(0) yield self._packets.pop(0)
except IndexError: except IndexError:
pass pass
for packet_text in self.recv(): for packet_text in self.recv(timeout=timeout):
_log.debug('[packet received] %s', packet_text) _log.debug('[packet received] %s', packet_text)
try: try:
packet_parts = packet_text.split(':', 3) packet_parts = packet_text.split(':', 3)
@ -145,7 +145,9 @@ class _WebsocketTransport(_AbstractTransport):
_log.warn(message) _log.warn(message)
raise ConnectionError(message) raise ConnectionError(message)
def recv(self): def recv(self, timeout=None):
if timeout:
self._connection.settimeout(timeout)
try: try:
yield self._connection.recv() yield self._connection.recv()
except websocket.WebSocketTimeoutException as e: except websocket.WebSocketTimeoutException as e:
@ -190,12 +192,12 @@ class _XHR_PollingTransport(_AbstractTransport):
data=packet_text, data=packet_text,
timeout=TIMEOUT_IN_SECONDS) timeout=TIMEOUT_IN_SECONDS)
def recv(self): def recv(self, timeout=None):
response = _get_response( response = _get_response(
self._http_session.get, self._http_session.get,
self._url, self._url,
params=self._params, params=self._params,
timeout=TIMEOUT_IN_SECONDS) timeout=timeout or TIMEOUT_IN_SECONDS)
response_text = response.text response_text = response.text
if not response_text.startswith(BOUNDARY): if not response_text.startswith(BOUNDARY):
yield response_text yield response_text
@ -244,14 +246,14 @@ class _JSONP_PollingTransport(_AbstractTransport):
headers={'content-type': 'application/x-www-form-urlencoded'}, headers={'content-type': 'application/x-www-form-urlencoded'},
timeout=TIMEOUT_IN_SECONDS) timeout=TIMEOUT_IN_SECONDS)
def recv(self): def recv(self, timeout=None):
'Decode the JavaScript response so that we can parse it as JSON' 'Decode the JavaScript response so that we can parse it as JSON'
response = _get_response( response = _get_response(
self._http_session.get, self._http_session.get,
self._url, self._url,
params=self._params, params=self._params,
headers={'content-type': 'text/javascript; charset=UTF-8'}, headers={'content-type': 'text/javascript; charset=UTF-8'},
timeout=TIMEOUT_IN_SECONDS) timeout=timeout or TIMEOUT_IN_SECONDS)
response_text = response.text response_text = response.text
try: try:
self._id, response_text = self.RESPONSE_PATTERN.match( self._id, response_text = self.RESPONSE_PATTERN.match(