Update files

This commit is contained in:
glpshchn 2025-12-15 07:14:28 +03:00
parent 0437b4d2fd
commit 8f9a4ea72d
1 changed files with 25 additions and 14 deletions

View File

@ -38,10 +38,10 @@ def broadcast_online():
sio.emit('online', online_list, namespace='/mod-chat')
# Обработчик для корневого namespace (требуется для Socket.IO handshake)
# В python-socketio для корневого namespace нужно использовать @sio.on('connect') без namespace
@sio.on('connect')
async def on_connect_root(sid, environ):
# Создаем класс для корневого 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)}")
@ -49,9 +49,13 @@ async def on_connect_root(sid, 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 ПЕРЕД созданием ASGI app
root_ns = RootNamespace('/')
sio.register_namespace(root_ns)
print(f"[WebSocket] ✅ Корневой namespace зарегистрирован: {root_ns.namespace}")
# Namespace handlers for /mod-chat
@sio.on('connect', namespace='/mod-chat')
async def on_connect(sid, environ):
@ -174,13 +178,20 @@ def get_socketio_app():
try:
# Проверяем зарегистрированные namespaces
if hasattr(sio, 'namespace_handlers'):
print(f"[WebSocket] Зарегистрированные namespaces: {list(sio.namespace_handlers.keys())}")
namespaces = list(sio.namespace_handlers.keys())
print(f"[WebSocket] Зарегистрированные namespaces: {namespaces}")
if not namespaces:
print("[WebSocket] ⚠️ ВНИМАНИЕ: Нет зарегистрированных namespaces!")
elif hasattr(sio, 'handlers'):
print(f"[WebSocket] Зарегистрированные handlers: {list(sio.handlers.keys())}")
else:
print("[WebSocket] Не удалось определить зарегистрированные namespaces")
# Попробуем проверить через другие атрибуты
print(f"[WebSocket] Доступные атрибуты sio: {[attr for attr in dir(sio) if not attr.startswith('_')]}")
except Exception as e:
print(f"[WebSocket] Ошибка при проверке namespaces: {e}")
import traceback
traceback.print_exc()
# Socket.IO ASGI app должен обернуть FastAPI app для правильной работы
# Но мы делаем это в main.py через SocketIOWrapper