From 65c4160c8e34d4a30177c4309080fa43348ad378 Mon Sep 17 00:00:00 2001 From: Roy Hyunjin Han Date: Wed, 6 Nov 2013 10:26:49 -0800 Subject: [PATCH] Fixes #25 --- TODO.goals | 1 + socketIO_client/__init__.py | 35 ++++++++++++++++++++--------------- socketIO_client/transports.py | 8 ++++---- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/TODO.goals b/TODO.goals index 77bf64e..6721fe8 100644 --- a/TODO.goals +++ b/TODO.goals @@ -1 +1,2 @@ # America/Los_Angeles 11/3/2013 +Add test for server ack callback in namespace diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index f166cc3..1cfd900 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -250,7 +250,7 @@ class SocketIO(object): code, packet_id, path, data = packet namespace = self.get_namespace(path) delegate = self._get_delegate(code) - delegate(packet_id, data, namespace._find_event_callback) + delegate(packet, namespace._find_event_callback) def get_namespace(self, path=''): try: @@ -274,36 +274,40 @@ class SocketIO(object): except KeyError: raise PacketError('unexpected code (%s)' % code) - def _on_disconnect(self, packet_id, data, find_event_callback): + def _on_disconnect(self, packet, find_event_callback): find_event_callback('disconnect')() - def _on_connect(self, packet_id, data, find_event_callback): + def _on_connect(self, packet, find_event_callback): find_event_callback('connect')() - def _on_heartbeat(self, packet_id, data, find_event_callback): + def _on_heartbeat(self, packet, find_event_callback): find_event_callback('heartbeat')() - def _on_message(self, packet_id, data, find_event_callback): + def _on_message(self, packet, find_event_callback): + code, packet_id, path, data = packet args = [data] if packet_id: - args.append(self._prepare_to_send_ack(packet_id)) + args.append(self._prepare_to_send_ack(path, packet_id)) find_event_callback('message')(*args) - def _on_json(self, packet_id, data, find_event_callback): + def _on_json(self, packet, find_event_callback): + code, packet_id, path, data = packet args = [json.loads(data)] if packet_id: - args.append(self._prepare_to_send_ack(packet_id)) + args.append(self._prepare_to_send_ack(path, packet_id)) find_event_callback('message')(*args) - def _on_event(self, packet_id, data, find_event_callback): + def _on_event(self, packet, find_event_callback): + code, packet_id, path, data = packet value_by_name = json.loads(data) event = value_by_name['name'] args = value_by_name.get('args', []) if packet_id: - args.append(self._prepare_to_send_ack(packet_id)) + args.append(self._prepare_to_send_ack(path, packet_id)) find_event_callback(event)(*args) - def _on_ack(self, packet_id, data, find_event_callback): + def _on_ack(self, packet, find_event_callback): + code, packet_id, path, data = packet data_parts = data.split('+', 1) packet_id = data_parts[0] try: @@ -313,16 +317,17 @@ class SocketIO(object): args = json.loads(data_parts[1]) if len(data_parts) > 1 else [] ack_callback(*args) - def _on_error(self, packet_id, data, find_event_callback): + def _on_error(self, packet, find_event_callback): + code, packet_id, path, data = packet reason, advice = data.split('+', 1) find_event_callback('error')(reason, advice) - def _on_noop(self, packet_id, data, find_event_callback): + def _on_noop(self, packet, find_event_callback): find_event_callback('noop')() - def _prepare_to_send_ack(self, packet_id): + def _prepare_to_send_ack(self, path, packet_id): 'Return function that acknowledges the server' - return lambda *args: self._transport.ack(packet_id, *args) + return lambda *args: self._transport.ack(path, packet_id, *args) def find_callback(args, kw=None): diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 833289a..a3469e5 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -49,16 +49,16 @@ class _AbstractTransport(object): data = json.dumps(dict(name=event, args=args), ensure_ascii=False) self.send_packet(5, path, data, callback) - def ack(self, packet_id, *args): + def ack(self, path, packet_id, *args): packet_id = packet_id.rstrip('+') data = '%s+%s' % ( packet_id, json.dumps(args, ensure_ascii=False), ) if args else packet_id - self.send_packet(6, data=data) + self.send_packet(6, path, data) - def noop(self): - self.send_packet(8) + def noop(self, path=''): + self.send_packet(8, path) def send_packet(self, code, path='', data='', callback=None): packet_id = self.set_ack_callback(callback) if callback else ''