diff --git a/server.py b/server.py index e09538b..77194dd 100644 --- a/server.py +++ b/server.py @@ -1138,7 +1138,11 @@ async def client_websocket_endpoint(websocket: WebSocket, room_id: str, password @app.websocket("/ws/admin/{session_id}") async def admin_websocket_endpoint(websocket: WebSocket, session_id: str): """WebSocket для администраторов (просмотр и управление)""" + global admin_sessions + if not AdminAuth.verify_session(session_id): + print(f"[WebSocket] Admin connection REJECTED: session_id={session_id} not found in admin_sessions") + print(f"[WebSocket] Available sessions: {list(admin_sessions.keys()) if admin_sessions else 'None'}") await websocket.close(code=1008) return diff --git a/test_send_frame.py b/test_send_frame.py index e8d0d64..fa1c560 100644 --- a/test_send_frame.py +++ b/test_send_frame.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """ Скрипт для отправки тестового JPEG-кадра на сервер. -Помогает проверить, работает ли VideoProcessor без мобильного приложения. +Автоматически создает комнату и отправляет видеокадры через WebSocket. """ import asyncio @@ -10,18 +10,77 @@ import json import sys import cv2 import numpy as np +import requests from pathlib import Path +from dotenv import load_dotenv +import os + +# Загружаем переменные окружения из .env +load_dotenv() # Параметры подключения -HOST = "192.168.0.112" # Измените на ваш PUBLIC_HOST из .env -PORT = 8000 -ROOM_ID = "AtR2yGhr8QM" # Измените на ID комнаты -PASSWORD = "1" # Измените на пароль комнаты -FRAME_FILE = "test_frame.jpg" # Путь к тестовому JPEG-файлу +HOST = os.getenv("PUBLIC_HOST", "192.168.0.112") +PORT = int(os.getenv("PORT", 8000)) +FRAME_FILE = "test_frame.jpg" +FRAMES_TO_SEND = 300 # 10 сек при 30 FPS + +# Учетные данные админа (из server.py) +ADMIN_USERNAME = "admin" +ADMIN_PASSWORD = "admin123" async def send_frames(): """Подключиться к WebSocket и отправить кадры""" - uri = f"ws://{HOST}:{PORT}/ws/client/{ROOM_ID}/{PASSWORD}" + + # 0. Логинимся как админ чтобы получить сессию + print(f"[Test] Logging in as admin...") + session = requests.Session() + try: + login_response = session.post( + f"http://{HOST}:{PORT}/login", + data={ + "username": ADMIN_USERNAME, + "password": ADMIN_PASSWORD + } + ) + if login_response.status_code != 200: + print(f"[Test] ❌ Failed to login: {login_response.status_code}") + print(f"[Test] Response: {login_response.text}") + return + print(f"[Test] ✓ Admin logged in") + except Exception as e: + print(f"[Test] ❌ Error during login: {e}") + return + + # 1. Создаём новую комнату на сервере + print(f"[Test] Creating room on {HOST}:{PORT}...") + try: + response = session.post( + f"http://{HOST}:{PORT}/api/create-room", + data={ + "name": "Test Room", + "password": "testpass", + "max_connections": "10" + } + ) + if response.status_code != 200: + print(f"[Test] ❌ Failed to create room: {response.status_code}") + print(f"[Test] Response: {response.text}") + return + + room_data = response.json() + if not room_data.get("success"): + print(f"[Test] ❌ Room creation failed: {room_data.get('error')}") + return + + room_id = room_data.get("room", {}).get("id") + password = room_data.get("room", {}).get("password", "testpass") + print(f"[Test] ✓ Room created: {room_id}") + except Exception as e: + print(f"[Test] ❌ Error creating room: {e}") + return + + # 2. Подключаемся к WebSocket с этой комнатой + uri = f"ws://{HOST}:{PORT}/ws/client/{room_id}/{password}" print(f"[Test] Connecting to: {uri}") try: @@ -43,15 +102,15 @@ async def send_frames(): print(f"[Test] Frame size: {len(frame_data)} bytes") - # Отправляем кадры в цикле (30 FPS, 10 секунд) - print(f"[Test] Sending frames (30 FPS for 10 seconds)...") - for i in range(300): # 10 sec * 30 FPS + # Отправляем кадры в цикле (30 FPS, ~10 секунд) + print(f"[Test] Sending frames (30 FPS for ~{FRAMES_TO_SEND // 30} seconds)...") + for i in range(FRAMES_TO_SEND): # ~10 sec * 30 FPS await ws.send(frame_data) if (i + 1) % 30 == 0: print(f"[Test] ✓ Sent {i + 1} frames") await asyncio.sleep(1 / 30) # ~30 FPS - print(f"[Test] ✓ Done! Sent 300 frames") + print(f"[Test] ✓ Done! Sent {FRAMES_TO_SEND} frames") await asyncio.sleep(2) # Пауза перед отключением except asyncio.TimeoutError: @@ -88,7 +147,7 @@ if __name__ == "__main__": print("=" * 60) print("WebSocket Frame Sender Test") print("=" * 60) - print(f"Target: ws://{HOST}:{PORT}/ws/client/{ROOM_ID}/{PASSWORD}") + print(f"Server: http://{HOST}:{PORT}") print() try: