Fixes #25
This commit is contained in:
parent
13b482e075
commit
65c4160c8e
3 changed files with 25 additions and 19 deletions
|
|
@ -1 +1,2 @@
|
||||||
# America/Los_Angeles 11/3/2013
|
# America/Los_Angeles 11/3/2013
|
||||||
|
Add test for server ack callback in namespace
|
||||||
|
|
|
||||||
|
|
@ -250,7 +250,7 @@ class SocketIO(object):
|
||||||
code, packet_id, path, data = packet
|
code, packet_id, path, data = packet
|
||||||
namespace = self.get_namespace(path)
|
namespace = self.get_namespace(path)
|
||||||
delegate = self._get_delegate(code)
|
delegate = self._get_delegate(code)
|
||||||
delegate(packet_id, data, namespace._find_event_callback)
|
delegate(packet, namespace._find_event_callback)
|
||||||
|
|
||||||
def get_namespace(self, path=''):
|
def get_namespace(self, path=''):
|
||||||
try:
|
try:
|
||||||
|
|
@ -274,36 +274,40 @@ class SocketIO(object):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise PacketError('unexpected code (%s)' % code)
|
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')()
|
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')()
|
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')()
|
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]
|
args = [data]
|
||||||
if packet_id:
|
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)
|
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)]
|
args = [json.loads(data)]
|
||||||
if packet_id:
|
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)
|
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)
|
value_by_name = json.loads(data)
|
||||||
event = value_by_name['name']
|
event = value_by_name['name']
|
||||||
args = value_by_name.get('args', [])
|
args = value_by_name.get('args', [])
|
||||||
if packet_id:
|
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)
|
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)
|
data_parts = data.split('+', 1)
|
||||||
packet_id = data_parts[0]
|
packet_id = data_parts[0]
|
||||||
try:
|
try:
|
||||||
|
|
@ -313,16 +317,17 @@ class SocketIO(object):
|
||||||
args = json.loads(data_parts[1]) if len(data_parts) > 1 else []
|
args = json.loads(data_parts[1]) if len(data_parts) > 1 else []
|
||||||
ack_callback(*args)
|
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)
|
reason, advice = data.split('+', 1)
|
||||||
find_event_callback('error')(reason, advice)
|
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')()
|
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 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):
|
def find_callback(args, kw=None):
|
||||||
|
|
|
||||||
|
|
@ -49,16 +49,16 @@ class _AbstractTransport(object):
|
||||||
data = json.dumps(dict(name=event, args=args), ensure_ascii=False)
|
data = json.dumps(dict(name=event, args=args), ensure_ascii=False)
|
||||||
self.send_packet(5, path, data, callback)
|
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('+')
|
packet_id = packet_id.rstrip('+')
|
||||||
data = '%s+%s' % (
|
data = '%s+%s' % (
|
||||||
packet_id,
|
packet_id,
|
||||||
json.dumps(args, ensure_ascii=False),
|
json.dumps(args, ensure_ascii=False),
|
||||||
) if args else packet_id
|
) if args else packet_id
|
||||||
self.send_packet(6, data=data)
|
self.send_packet(6, path, data)
|
||||||
|
|
||||||
def noop(self):
|
def noop(self, path=''):
|
||||||
self.send_packet(8)
|
self.send_packet(8, path)
|
||||||
|
|
||||||
def send_packet(self, code, path='', data='', callback=None):
|
def send_packet(self, code, path='', data='', callback=None):
|
||||||
packet_id = self.set_ack_callback(callback) if callback else ''
|
packet_id = self.set_ack_callback(callback) if callback else ''
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue