diff --git a/moderation/backend-py/websocket_server.py b/moderation/backend-py/websocket_server.py index 3456e8b..1b5bdff 100644 --- a/moderation/backend-py/websocket_server.py +++ b/moderation/backend-py/websocket_server.py @@ -19,8 +19,7 @@ sio = socketio.AsyncServer( logger=True, # Включить логирование для отладки engineio_logger=True, # Включить логирование Engine.IO ping_timeout=60, - ping_interval=25, - always_connect=True # Разрешить подключение к корневому namespace + ping_interval=25 ) # Track connected moderators @@ -39,21 +38,21 @@ def broadcast_online(): sio.emit('online', online_list, namespace='/mod-chat') -# Обработчик для корневого namespace (требуется для Socket.IO handshake) -# Socket.IO сначала подключается к корневому namespace для handshake, -# затем клиент подключается к указанному namespace -# В python-socketio для корневого namespace можно не указывать namespace явно -@sio.on('connect') -async def on_connect_root(sid, environ): - """Handle client connection to root namespace (Socket.IO handshake)""" - print(f"[WebSocket] 🔄 Handshake to ROOT namespace: {sid}") - print(f"[WebSocket] Environ type: {type(environ)}") - if environ: - print(f"[WebSocket] Environ keys: {list(environ.keys()) if isinstance(environ, dict) else 'N/A'}") - logger.info(f"[WebSocket] Handshake to ROOT namespace: {sid}") - # Разрешаем подключение для handshake - # Возвращаем True, чтобы разрешить подключение - return True +# Создаем класс для корневого namespace +class RootNamespace(socketio.AsyncNamespace): + """Root namespace handler for Socket.IO handshake""" + async def on_connect(self, sid, environ): + """Handle client connection to root namespace (Socket.IO handshake)""" + print(f"[WebSocket] 🔄 Handshake to ROOT namespace: {sid}") + print(f"[WebSocket] Environ type: {type(environ)}") + if environ: + print(f"[WebSocket] Environ keys: {list(environ.keys()) if isinstance(environ, dict) else 'N/A'}") + logger.info(f"[WebSocket] Handshake to ROOT namespace: {sid}") + # Разрешаем подключение для handshake + return True + +# Регистрируем корневой namespace +sio.register_namespace(RootNamespace('/')) # Namespace handlers for /mod-chat @sio.on('connect', namespace='/mod-chat')