From f4a96c72d036292ce1d5111b59843a06fc90f393 Mon Sep 17 00:00:00 2001 From: Sean Arietta Date: Mon, 22 Dec 2014 22:08:15 -0800 Subject: [PATCH] Updates to get XHR polling working correctly. Mostly encode/decode issues. --- socketIO_client/__init__.py | 3 +-- socketIO_client/parser.py | 5 ----- socketIO_client/transports.py | 27 ++++++++++++++++++++------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index 30a8643..fd9ebf7 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -178,7 +178,6 @@ class SocketIO(object): def _terminate_heartbeat(self): if self.heartbeat_terminator is not None: self.heartbeat_terminator.set(); - #time.sleep(self.session.heartbeat_interval); self.heartbeat_thread.join(); def define(self, Namespace, path=''): @@ -239,7 +238,7 @@ class SocketIO(object): try: self.reconnect(); except ConnectionError as e: - time.sleep(1); + time.sleep(RETRY_INTERVAL_IN_SECONDS); continue; try: diff --git a/socketIO_client/parser.py b/socketIO_client/parser.py index 39fcb3d..4edd487 100644 --- a/socketIO_client/parser.py +++ b/socketIO_client/parser.py @@ -234,8 +234,3 @@ def decode_packet(packet): else: import ipdb; ipdb.set_trace(); pass; - -def encode_packet_string(code, path, data): - """Encodes packet to be sent to socket.io server. - """ - diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 2c70cf4..b13738a 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -50,12 +50,15 @@ class _AbstractTransport(object): responded = False; while not responded: for packet in self.recv_packet(): - _log.debug("[connect wait] Waiting for confirmation of connect to: %s" % path); - if (packet.type == PacketType.MESSAGE - and packet.payload.type == MessageType.CONNECT - and packet.payload.path == path): - _log.debug("[connect] Connected to path: %s" % path); - responded = True; + if not responded: + _log.debug("[connect wait] Waiting for confirmation of connect to: %s" % path); + if (packet.type == PacketType.MESSAGE + and packet.payload.type == MessageType.CONNECT + and packet.payload.path == path): + _log.debug("[connect] Connected to path: %s" % path); + responded = True; + else: + self._packets.append(packet); else: self.send_packet(PacketType.OPEN, path, data); @@ -167,7 +170,7 @@ class WebsocketTransport(_AbstractTransport): response = self._connection.recv(); try: for packet in parser.decode_response(response): - _log.debug('[websocket packet received] %s', str(packet)); + _log.debug('[websocket] Packet received: %s', str(packet)); yield packet; except AttributeError: _log.warn('[packet error] %s', repr(response)) @@ -207,6 +210,10 @@ class XHR_PollingTransport(_AbstractTransport): @property def _params(self): return dict(t=int(time.time() * 1000)) + + def send_engineio_packet(self, packet, callback=None): + packet_text = packet.encode_as_string(for_websocket = False); + self.send(packet_text) def send(self, packet_text): _log.debug("[xhr] send: " + str(packet_text)); @@ -233,6 +240,11 @@ class XHR_PollingTransport(_AbstractTransport): if self._waiting: return; + # Yield any packets that were not processed before. + for packet in self._packets: + _log.debug('[xhr] Packet received: %s', str(packet)); + yield packet; + self._waiting = True; response = _get_response( self._http_session.get, @@ -245,6 +257,7 @@ class XHR_PollingTransport(_AbstractTransport): return; for packet in parser.decode_response(response): + _log.debug('[xhr] Packet received: %s', str(packet)); yield packet; return