Skip to content

Commit

Permalink
Correctly handle emits to multiple rooms in the async server (Fixes #…
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Nov 6, 2022
1 parent 81f872c commit 232cef1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/socketio/asyncio_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ async def emit(self, event, data, namespace, room=None, skip_sid=None,
Note: this method is a coroutine.
"""
if namespace not in self.rooms or room not in self.rooms[namespace]:
if namespace not in self.rooms:
return
tasks = []
if not isinstance(skip_sid, list):
Expand Down
23 changes: 23 additions & 0 deletions tests/asyncio/test_asyncio_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,29 @@ def test_emit_to_room(self):
'456', 'my event', {'foo': 'bar'}, '/foo', None
)

def test_emit_to_rooms(self):
sid1 = self.bm.connect('123', '/foo')
self.bm.enter_room(sid1, '/foo', 'bar')
sid2 = self.bm.connect('456', '/foo')
self.bm.enter_room(sid2, '/foo', 'bar')
self.bm.enter_room(sid2, '/foo', 'baz')
sid3 = self.bm.connect('789', '/foo')
self.bm.enter_room(sid3, '/foo', 'baz')
_run(
self.bm.emit('my event', {'foo': 'bar'}, namespace='/foo',
room=['bar', 'baz'])
)
assert self.bm.server._emit_internal.mock.call_count == 3
self.bm.server._emit_internal.mock.assert_any_call(
'123', 'my event', {'foo': 'bar'}, '/foo', None
)
self.bm.server._emit_internal.mock.assert_any_call(
'456', 'my event', {'foo': 'bar'}, '/foo', None
)
self.bm.server._emit_internal.mock.assert_any_call(
'789', 'my event', {'foo': 'bar'}, '/foo', None
)

def test_emit_to_all(self):
sid1 = self.bm.connect('123', '/foo')
self.bm.enter_room(sid1, '/foo', 'bar')
Expand Down

0 comments on commit 232cef1

Please sign in to comment.