WS fix
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user