Fix emit bug

This commit is contained in:
Roy Hyunjin Han 2015-02-22 20:29:12 -05:00
commit 3d8efe0eb4
3 changed files with 20 additions and 29 deletions

View file

@ -21,7 +21,7 @@ LoggingNamespace = LoggingSocketIONamespace
class EngineIO(LoggingMixin): class EngineIO(LoggingMixin):
def __init__( def __init__(
self, host, port=None, Namespace=None, self, host, port=None, Namespace=EngineIONamespace,
wait_for_connection=True, transports=TRANSPORTS, wait_for_connection=True, transports=TRANSPORTS,
resource='engine.io', **kw): resource='engine.io', **kw):
self._is_secure, self._url = parse_host(host, port, resource) self._is_secure, self._url = parse_host(host, port, resource)
@ -30,32 +30,29 @@ class EngineIO(LoggingMixin):
self._http_session = prepare_http_session(kw) self._http_session = prepare_http_session(kw)
self._log_name = self._url self._log_name = self._url
self._wants_to_close = False self._wants_to_close = False
self._connected = False
if Namespace: if Namespace:
self.define(Namespace) self.define(Namespace)
# self._transport
# Connect # Connect
@property
def connected(self):
try:
return self._connected
except AttributeError:
return False
@property @property
def _transport(self): def _transport(self):
try: print 't1'
if self.connected: if self._connected:
return self._transport_instance return self._transport_instance
except AttributeError: print 't2'
pass
self._engineIO_session = self._get_engineIO_session() self._engineIO_session = self._get_engineIO_session()
print 't3'
self._transport_instance = self._negotiate_transport() self._transport_instance = self._negotiate_transport()
print 't4'
self._connect_namespaces() self._connect_namespaces()
print 't5'
self._connected = True self._connected = True
for engineIO_packet in self._transport_instance.recv_packet(): print 't6 starting heartbeat'
self._transport_instance.queue_packet(engineIO_packet)
self._reset_heartbeat() self._reset_heartbeat()
print 't7'
return self._transport_instance return self._transport_instance
def _get_engineIO_session(self): def _get_engineIO_session(self):
@ -144,7 +141,7 @@ class EngineIO(LoggingMixin):
def _close(self): def _close(self):
self._wants_to_close = True self._wants_to_close = True
if not self.connected: if not self._connected:
return return
engineIO_packet_type = 1 engineIO_packet_type = 1
self._transport.send_packet(engineIO_packet_type, '') self._transport.send_packet(engineIO_packet_type, '')
@ -274,7 +271,7 @@ class SocketIO(EngineIO):
""" """
def __init__( def __init__(
self, host, port=None, Namespace=None, self, host, port=None, Namespace=SocketIONamespace,
wait_for_connection=True, transports=TRANSPORTS, wait_for_connection=True, transports=TRANSPORTS,
resource='socket.io', **kw): resource='socket.io', **kw):
self._namespace_by_path = {} self._namespace_by_path = {}
@ -329,7 +326,7 @@ class SocketIO(EngineIO):
self._message(str(socketIO_packet_type) + socketIO_packet_data) self._message(str(socketIO_packet_type) + socketIO_packet_data)
def disconnect(self, path=''): def disconnect(self, path=''):
if not self.connected: if not self._connected:
return return
if path: if path:
socketIO_packet_type = 1 socketIO_packet_type = 1
@ -351,10 +348,11 @@ class SocketIO(EngineIO):
print 'z3' print 'z3'
ack_id = self._set_ack_callback(callback) if callback else None ack_id = self._set_ack_callback(callback) if callback else None
print 'z4' print 'z4'
args = [event] + list(args)
socketIO_packet_type = 2 socketIO_packet_type = 2
print 'z5' print 'z5 path=%s ack_id=%s args=%s' % (path, ack_id, str(args))
socketIO_packet_data = format_socketIO_packet_data(path, ack_id, args) socketIO_packet_data = format_socketIO_packet_data(path, ack_id, args)
print 'z6' print 'z6 emitting %s' % str(socketIO_packet_data)
self._message(str(socketIO_packet_type) + socketIO_packet_data) self._message(str(socketIO_packet_type) + socketIO_packet_data)
print 'z7' print 'z7'

View file

@ -59,6 +59,7 @@ def format_socketIO_packet_data(path=None, ack_id=None, args=None):
socketIO_packet_data = str(ack_id) + socketIO_packet_data socketIO_packet_data = str(ack_id) + socketIO_packet_data
if path: if path:
socketIO_packet_data = path + ',' + socketIO_packet_data socketIO_packet_data = path + ',' + socketIO_packet_data
print 'format_socketIO_packet_data = %s' % socketIO_packet_data
return socketIO_packet_data return socketIO_packet_data

View file

@ -16,19 +16,13 @@ class AbstractTransport(object):
self.is_secure = is_secure self.is_secure = is_secure
self.url = url self.url = url
self.engineIO_session = engineIO_session self.engineIO_session = engineIO_session
self.engineIO_packets = []
def recv_packet(self): def recv_packet(self):
while self.engineIO_packets: pass
yield self.engineIO_packets.pop(0)
def send_packet(self, engineIO_packet_type, engineIO_packet_data): def send_packet(self, engineIO_packet_type, engineIO_packet_data):
pass pass
def queue_packet(self, engineIO_packet):
print 'queue_packet %s' % str(engineIO_packet)
self.engineIO_packets.append(engineIO_packet)
class XHR_PollingTransport(AbstractTransport): class XHR_PollingTransport(AbstractTransport):
@ -53,8 +47,6 @@ class XHR_PollingTransport(AbstractTransport):
self.kw_post = {} self.kw_post = {}
def recv_packet(self): def recv_packet(self):
for engineIO_packet in super(XHR_PollingTransport, self).recv_packet():
yield engineIO_packet
params = dict(self.params) params = dict(self.params)
params['t'] = self._get_timestamp() params['t'] = self._get_timestamp()
response = get_response( response = get_response(