Update files
This commit is contained in:
parent
0437b4d2fd
commit
8f9a4ea72d
|
|
@ -38,19 +38,23 @@ def broadcast_online():
|
||||||
sio.emit('online', online_list, namespace='/mod-chat')
|
sio.emit('online', online_list, namespace='/mod-chat')
|
||||||
|
|
||||||
|
|
||||||
# Обработчик для корневого namespace (требуется для Socket.IO handshake)
|
# Создаем класс для корневого namespace
|
||||||
# В python-socketio для корневого namespace нужно использовать @sio.on('connect') без namespace
|
class RootNamespace(socketio.AsyncNamespace):
|
||||||
@sio.on('connect')
|
"""Root namespace handler for Socket.IO handshake"""
|
||||||
async def on_connect_root(sid, environ):
|
async def on_connect(self, sid, environ):
|
||||||
"""Handle client connection to root namespace (Socket.IO handshake)"""
|
"""Handle client connection to root namespace (Socket.IO handshake)"""
|
||||||
print(f"[WebSocket] 🔄 Handshake to ROOT namespace: {sid}")
|
print(f"[WebSocket] 🔄 Handshake to ROOT namespace: {sid}")
|
||||||
print(f"[WebSocket] Environ type: {type(environ)}")
|
print(f"[WebSocket] Environ type: {type(environ)}")
|
||||||
if environ:
|
if environ:
|
||||||
print(f"[WebSocket] Environ keys: {list(environ.keys()) if isinstance(environ, dict) else 'N/A'}")
|
print(f"[WebSocket] Environ keys: {list(environ.keys()) if isinstance(environ, dict) else 'N/A'}")
|
||||||
logger.info(f"[WebSocket] Handshake to ROOT namespace: {sid}")
|
logger.info(f"[WebSocket] Handshake to ROOT namespace: {sid}")
|
||||||
# Разрешаем подключение для handshake
|
# Разрешаем подключение для handshake
|
||||||
# Возвращаем True, чтобы разрешить подключение
|
return 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
|
# Namespace handlers for /mod-chat
|
||||||
@sio.on('connect', namespace='/mod-chat')
|
@sio.on('connect', namespace='/mod-chat')
|
||||||
|
|
@ -174,13 +178,20 @@ def get_socketio_app():
|
||||||
try:
|
try:
|
||||||
# Проверяем зарегистрированные namespaces
|
# Проверяем зарегистрированные namespaces
|
||||||
if hasattr(sio, 'namespace_handlers'):
|
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'):
|
elif hasattr(sio, 'handlers'):
|
||||||
print(f"[WebSocket] Зарегистрированные handlers: {list(sio.handlers.keys())}")
|
print(f"[WebSocket] Зарегистрированные handlers: {list(sio.handlers.keys())}")
|
||||||
else:
|
else:
|
||||||
print("[WebSocket] Не удалось определить зарегистрированные namespaces")
|
print("[WebSocket] Не удалось определить зарегистрированные namespaces")
|
||||||
|
# Попробуем проверить через другие атрибуты
|
||||||
|
print(f"[WebSocket] Доступные атрибуты sio: {[attr for attr in dir(sio) if not attr.startswith('_')]}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[WebSocket] Ошибка при проверке namespaces: {e}")
|
print(f"[WebSocket] Ошибка при проверке namespaces: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
# Socket.IO ASGI app должен обернуть FastAPI app для правильной работы
|
# Socket.IO ASGI app должен обернуть FastAPI app для правильной работы
|
||||||
# Но мы делаем это в main.py через SocketIOWrapper
|
# Но мы делаем это в main.py через SocketIOWrapper
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue