Skip to content

Commit 9461e3d

Browse files
🐛 Adds user to project rooms on websocket reconnect (#8407)
1 parent 562497c commit 9461e3d

File tree

1 file changed

+18
-1
lines changed
  • services/web/server/src/simcore_service_webserver/socketio

1 file changed

+18
-1
lines changed

services/web/server/src/simcore_service_webserver/socketio/_handlers.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from common_library.logging.logging_errors import create_troubleshooting_log_kwargs
1414
from models_library.api_schemas_webserver.socketio import SocketIORoomStr
1515
from models_library.products import ProductName
16+
from models_library.projects import ProjectID
1617
from models_library.socketio import SocketMessageDict
1718
from models_library.users import UserID
1819
from pydantic import TypeAdapter
@@ -23,7 +24,7 @@
2324
from ..groups.api import list_user_groups_ids_with_read_access
2425
from ..login.decorators import login_required
2526
from ..products import products_web
26-
from ..resource_manager.user_sessions import managed_resource
27+
from ..resource_manager.user_sessions import PROJECT_ID_KEY, managed_resource
2728
from ._utils import EnvironDict, SocketID, get_socket_server, register_socketio_handler
2829
from .messages import SOCKET_IO_HEARTBEAT_EVENT, send_message_to_user
2930

@@ -99,6 +100,21 @@ async def _set_user_in_group_rooms(
99100
await sio.enter_room(socket_id, SocketIORoomStr.from_user_id(user_id))
100101

101102

103+
async def _set_user_in_project_rooms(
104+
app: web.Application, user_id: UserID, client_session_id: str, socket_id: SocketID
105+
) -> None:
106+
"""Adds user in project rooms in case he has any project open"""
107+
project_ids = []
108+
with managed_resource(user_id, client_session_id, app) as user_session:
109+
project_ids = await user_session.find_all_resources_of_user(PROJECT_ID_KEY)
110+
111+
sio = get_socket_server(app)
112+
for project_id in project_ids:
113+
await sio.enter_room(
114+
socket_id, SocketIORoomStr.from_project_id(ProjectID(project_id))
115+
)
116+
117+
102118
#
103119
# socketio event handlers
104120
#
@@ -135,6 +151,7 @@ async def connect(
135151
)
136152

137153
await _set_user_in_group_rooms(app, user_id, socket_id)
154+
await _set_user_in_project_rooms(app, user_id, client_session_id, socket_id)
138155

139156
_logger.debug("Sending set_heartbeat_emit_interval with %s", _EMIT_INTERVAL_S)
140157

0 commit comments

Comments
 (0)