diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index e472083..1a97d89 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -50,9 +50,11 @@ class EngineIO(LoggingMixin): except AttributeError: pass self._engineIO_session = self._get_engineIO_session() - self._negotiate_transport() + self._transport_instance = self._negotiate_transport() self._connect_namespaces() self._connected = True + for engineIO_packet in self._transport_instance.recv_packet(): + self._transport_instance.queue_packet(engineIO_packet) self._reset_heartbeat() return self._transport_instance @@ -74,9 +76,8 @@ class EngineIO(LoggingMixin): return parse_engineIO_session(engineIO_packet_data) def _negotiate_transport(self): - transport_name = 'xhr-polling' - self._transport_instance = self._get_transport(transport_name) - self._transport_name = transport_name + self._transport_name = 'xhr-polling' + return self._get_transport(self._transport_name) def _reset_heartbeat(self): try: @@ -158,6 +159,7 @@ class EngineIO(LoggingMixin): self._transport.send_packet(engineIO_packet_type, engineIO_packet_data) def _message(self, engineIO_packet_data): + print('_message %s' % str(engineIO_packet_data)) engineIO_packet_type = 4 self._transport.send_packet(engineIO_packet_type, engineIO_packet_data) @@ -208,6 +210,7 @@ class EngineIO(LoggingMixin): def _process_packet(self, packet): engineIO_packet_type, engineIO_packet_data = packet + print 'engineIO_packet_data=%s' % engineIO_packet_data # Launch callbacks namespace = self.get_namespace() try: @@ -224,6 +227,8 @@ class EngineIO(LoggingMixin): raise PacketError( 'unexpected engine.io packet type (%s)' % engineIO_packet_type) delegate(engineIO_packet_data, namespace._find_packet_callback) + print '*** in engine.io, engineIO_packet_type=%s' % engineIO_packet_type + print '*** in engine.io, engineIO_packet_data=%s' % engineIO_packet_data if engineIO_packet_type is 4: return engineIO_packet_data @@ -339,12 +344,19 @@ class SocketIO(EngineIO): pass def emit(self, event, *args, **kw): + print 'z1' path = kw.get('path', '') + print 'z2' callback, args = find_callback(args, kw) + print 'z3' ack_id = self._set_ack_callback(callback) if callback else None + print 'z4' socketIO_packet_type = 2 + print 'z5' socketIO_packet_data = format_socketIO_packet_data(path, ack_id, args) + print 'z6' self._message(str(socketIO_packet_type) + socketIO_packet_data) + print 'z7' def send(self, data='', callback=None): args = [data] @@ -372,6 +384,7 @@ class SocketIO(EngineIO): def _process_packet(self, packet): engineIO_packet_data = super(SocketIO, self)._process_packet(packet) + print '*** in socket.io, engineIO_packet_data=%s' % engineIO_packet_data if engineIO_packet_data is None: return socketIO_packet_type = int(get_character(engineIO_packet_data, 0)) diff --git a/socketIO_client/tests/__init__.py b/socketIO_client/tests/__init__.py index d0e7e8f..239de78 100644 --- a/socketIO_client/tests/__init__.py +++ b/socketIO_client/tests/__init__.py @@ -39,7 +39,9 @@ class BaseMixin(object): def test_emit(self): 'Emit' namespace = self.socketIO.define(Namespace) + print 'a' self.socketIO.emit('emit') + print 'b' self.socketIO.wait(self.wait_time_in_seconds) self.assertEqual(namespace.args_by_event, { 'emit_response': (), @@ -169,21 +171,26 @@ class Test_XHR_PollingTransport(BaseMixin, TestCase): class Namespace(LoggingNamespace): def initialize(self): + print('xxx initialize') self.called_on_disconnect = False self.args_by_event = {} self.response = None def on_disconnect(self): + print('xxx on_disconnect') self.called_on_disconnect = True def on_wait_with_disconnect_response(self): + print('xxx on_wait_with_disconnect_response') self.disconnect() def on_event(self, event, *args): + print('xxx on_event') callback, args = find_callback(args) if callback: callback(*args) self.args_by_event[event] = args def on_message(self, data): + print('xxx on_message') self.response = data diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 12a97b8..0ca398d 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -16,13 +16,19 @@ class AbstractTransport(object): self.is_secure = is_secure self.url = url self.engineIO_session = engineIO_session + self.engineIO_packets = [] def recv_packet(self): - pass + while self.engineIO_packets: + yield self.engineIO_packets.pop(0) def send_packet(self, engineIO_packet_type, engineIO_packet_data): pass + def queue_packet(self, engineIO_packet): + print 'queue_packet %s' % str(engineIO_packet) + self.engineIO_packets.append(engineIO_packet) + class XHR_PollingTransport(AbstractTransport): @@ -47,18 +53,21 @@ class XHR_PollingTransport(AbstractTransport): self.kw_post = {} def recv_packet(self): + for engineIO_packet in super(XHR_PollingTransport, self).recv_packet(): + yield engineIO_packet params = dict(self.params) - params['t'] = self.get_timestamp() + params['t'] = self._get_timestamp() response = get_response( self.http_session.get, self.http_url, params=params, **self.kw_get) - return decode_engineIO_content(response.content) + for engineIO_packet in decode_engineIO_content(response.content): + yield engineIO_packet def send_packet(self, engineIO_packet_type, engineIO_packet_data): params = dict(self.params) - params['t'] = self.get_timestamp() + params['t'] = self._get_timestamp() response = get_response( self.http_session.post, self.http_url, @@ -69,7 +78,7 @@ class XHR_PollingTransport(AbstractTransport): **self.kw_post) assert response.content == 'ok' - def get_timestamp(self): + def _get_timestamp(self): timestamp = '%s-%s' % (int(time.time() * 1000), self.request_index) self.request_index += 1 return timestamp