Updates to get XHR polling working correctly. Mostly encode/decode issues.

This commit is contained in:
Sean Arietta 2014-12-22 22:08:15 -08:00
commit f4a96c72d0
3 changed files with 21 additions and 14 deletions

View file

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

View file

@ -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.
"""

View file

@ -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