Skip to content

Commit a4cc0b2

Browse files
v5 protocol: client manager unit tests
1 parent 308b0c8 commit a4cc0b2

File tree

10 files changed

+228
-221
lines changed

10 files changed

+228
-221
lines changed

socketio/asyncio_manager.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ async def emit(self, event, data, namespace, room=None, skip_sid=None,
2323
for sid, eio_sid in self.get_participants(namespace, room):
2424
if sid not in skip_sid:
2525
if callback is not None:
26-
id = self._generate_ack_id(sid, namespace, callback)
26+
id = self._generate_ack_id(sid, callback)
2727
else:
2828
id = None
2929
tasks.append(self.server._emit_internal(eio_sid, event, data,
@@ -39,19 +39,19 @@ async def close_room(self, room, namespace):
3939
"""
4040
return super().close_room(room, namespace)
4141

42-
async def trigger_callback(self, sid, namespace, id, data):
42+
async def trigger_callback(self, sid, id, data):
4343
"""Invoke an application callback.
4444
4545
Note: this method is a coroutine.
4646
"""
4747
callback = None
4848
try:
49-
callback = self.callbacks[sid][namespace][id]
49+
callback = self.callbacks[sid][id]
5050
except KeyError:
5151
# if we get an unknown callback we just ignore it
5252
self._get_logger().warning('Unknown callback received, ignoring.')
5353
else:
54-
del self.callbacks[sid][namespace][id]
54+
del self.callbacks[sid][id]
5555
if callback is not None:
5656
ret = callback(*data)
5757
if asyncio.iscoroutine(ret):

socketio/asyncio_pubsub_manager.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ async def emit(self, event, data, namespace=None, room=None, skip_sid=None,
6060
'context of a server.')
6161
if room is None:
6262
raise ValueError('Cannot use callback without a room set.')
63-
id = self._generate_ack_id(room, namespace, callback)
63+
id = self._generate_ack_id(room, callback)
6464
callback = (room, namespace, id)
6565
else:
6666
callback = None
@@ -122,12 +122,11 @@ async def _handle_callback(self, message):
122122
if self.host_id == message.get('host_id'):
123123
try:
124124
sid = message['sid']
125-
namespace = message['namespace']
126125
id = message['id']
127126
args = message['args']
128127
except KeyError:
129128
return
130-
await self.trigger_callback(sid, namespace, id, args)
129+
await self.trigger_callback(sid, id, args)
131130

132131
async def _return_callback(self, host_id, sid, namespace, callback_id,
133132
*args):

socketio/asyncio_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ async def _handle_ack(self, eio_sid, namespace, id, data):
482482
namespace = namespace or '/'
483483
sid = self.manager.sid_from_eio_sid(eio_sid, namespace)
484484
self.logger.info('received ack from %s [%s]', sid, namespace)
485-
await self.manager.trigger_callback(sid, namespace, id, data)
485+
await self.manager.trigger_callback(sid, id, data)
486486

487487
async def _trigger_event(self, event, namespace, *args):
488488
"""Invoke an application event handler."""

socketio/base_manager.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def is_connected(self, sid, namespace):
5555
# the client is in the process of being disconnected
5656
return False
5757
try:
58-
return self.rooms[namespace][None][sid]
58+
return self.rooms[namespace][None][sid] is not None
5959
except KeyError:
6060
pass
6161

@@ -87,10 +87,8 @@ def disconnect(self, sid, namespace):
8787
rooms.append(room_name)
8888
for room in rooms:
8989
self.leave_room(sid, namespace, room)
90-
if sid in self.callbacks and namespace in self.callbacks[sid]:
91-
del self.callbacks[sid][namespace]
92-
if len(self.callbacks[sid]) == 0:
93-
del self.callbacks[sid]
90+
if sid in self.callbacks:
91+
del self.callbacks[sid]
9492
if namespace in self.pending_disconnect and \
9593
sid in self.pending_disconnect[namespace]:
9694
self.pending_disconnect[namespace].remove(sid)
@@ -148,33 +146,30 @@ def emit(self, event, data, namespace, room=None, skip_sid=None,
148146
for sid, eio_sid in self.get_participants(namespace, room):
149147
if sid not in skip_sid:
150148
if callback is not None:
151-
id = self._generate_ack_id(sid, namespace, callback)
149+
id = self._generate_ack_id(sid, callback)
152150
else:
153151
id = None
154152
self.server._emit_internal(eio_sid, event, data, namespace, id)
155153

156-
def trigger_callback(self, sid, namespace, id, data):
154+
def trigger_callback(self, sid, id, data):
157155
"""Invoke an application callback."""
158156
callback = None
159157
try:
160-
callback = self.callbacks[sid][namespace][id]
158+
callback = self.callbacks[sid][id]
161159
except KeyError:
162160
# if we get an unknown callback we just ignore it
163161
self._get_logger().warning('Unknown callback received, ignoring.')
164162
else:
165-
del self.callbacks[sid][namespace][id]
163+
del self.callbacks[sid][id]
166164
if callback is not None:
167165
callback(*data)
168166

169-
def _generate_ack_id(self, sid, namespace, callback):
167+
def _generate_ack_id(self, sid, callback):
170168
"""Generate a unique identifier for an ACK packet."""
171-
namespace = namespace or '/'
172169
if sid not in self.callbacks:
173-
self.callbacks[sid] = {}
174-
if namespace not in self.callbacks[sid]:
175-
self.callbacks[sid][namespace] = {0: itertools.count(1)}
176-
id = six.next(self.callbacks[sid][namespace][0])
177-
self.callbacks[sid][namespace][id] = callback
170+
self.callbacks[sid] = {0: itertools.count(1)}
171+
id = six.next(self.callbacks[sid][0])
172+
self.callbacks[sid][id] = callback
178173
return id
179174

180175
def _get_logger(self):

socketio/pubsub_manager.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def emit(self, event, data, namespace=None, room=None, skip_sid=None,
5858
'context of a server.')
5959
if room is None:
6060
raise ValueError('Cannot use callback without a room set.')
61-
id = self._generate_ack_id(room, namespace, callback)
61+
id = self._generate_ack_id(room, callback)
6262
callback = (room, namespace, id)
6363
else:
6464
callback = None
@@ -120,16 +120,15 @@ def _handle_callback(self, message):
120120
if self.host_id == message.get('host_id'):
121121
try:
122122
sid = message['sid']
123-
namespace = message['namespace']
124123
id = message['id']
125124
args = message['args']
126125
except KeyError:
127126
return
128-
self.trigger_callback(sid, namespace, id, args)
127+
self.trigger_callback(sid, id, args)
129128

130129
def _return_callback(self, host_id, sid, namespace, callback_id, *args):
131130
# When an event callback is received, the callback is returned back
132-
# the sender, which is identified by the host_id
131+
# to the sender, which is identified by the host_id
133132
self._publish({'method': 'callback', 'host_id': host_id,
134133
'sid': sid, 'namespace': namespace, 'id': callback_id,
135134
'args': args})

socketio/server.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ def sleep(self, seconds=0):
579579
"""
580580
return self.eio.sleep(seconds)
581581

582-
def _emit_internal(self, sid, event, data, namespace=None, id=None):
582+
def _emit_internal(self, eio_sid, event, data, namespace=None, id=None):
583583
"""Send a message to a client."""
584584
# tuples are expanded to multiple arguments, everything else is sent
585585
# as a single argument
@@ -589,8 +589,8 @@ def _emit_internal(self, sid, event, data, namespace=None, id=None):
589589
data = [data]
590590
else:
591591
data = []
592-
self._send_packet(sid, packet.Packet(packet.EVENT, namespace=namespace,
593-
data=[event] + data, id=id))
592+
self._send_packet(eio_sid, packet.Packet(
593+
packet.EVENT, namespace=namespace, data=[event] + data, id=id))
594594

595595
def _send_packet(self, eio_sid, pkt):
596596
"""Send a Socket.IO packet to a client."""
@@ -680,7 +680,7 @@ def _handle_ack(self, eio_sid, namespace, id, data):
680680
namespace = namespace or '/'
681681
sid = self.manager.sid_from_eio_sid(eio_sid, namespace)
682682
self.logger.info('received ack from %s [%s]', sid, namespace)
683-
self.manager.trigger_callback(sid, namespace, id, data)
683+
self.manager.trigger_callback(sid, id, data)
684684

685685
def _trigger_event(self, event, namespace, *args):
686686
"""Invoke an application event handler."""

0 commit comments

Comments
 (0)