Skip to content

Commit cdc968e

Browse files
Adds user assignment to project rooms on connect
Ensures users are automatically added to socket rooms for projects they have open when connecting, improving real-time collaboration and state synchronization across project sessions.
1 parent 562497c commit cdc968e

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)