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}")
|
@app.websocket("/ws/admin/{session_id}")
|
||||||
async def admin_websocket_endpoint(websocket: WebSocket, session_id: str):
|
async def admin_websocket_endpoint(websocket: WebSocket, session_id: str):
|
||||||
"""WebSocket для администраторов (просмотр и управление)"""
|
"""WebSocket для администраторов (просмотр и управление)"""
|
||||||
|
global admin_sessions
|
||||||
|
|
||||||
if not AdminAuth.verify_session(session_id):
|
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)
|
await websocket.close(code=1008)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
Скрипт для отправки тестового JPEG-кадра на сервер.
|
Скрипт для отправки тестового JPEG-кадра на сервер.
|
||||||
Помогает проверить, работает ли VideoProcessor без мобильного приложения.
|
Автоматически создает комнату и отправляет видеокадры через WebSocket.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
@@ -10,18 +10,77 @@ import json
|
|||||||
import sys
|
import sys
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import requests
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Загружаем переменные окружения из .env
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
# Параметры подключения
|
# Параметры подключения
|
||||||
HOST = "192.168.0.112" # Измените на ваш PUBLIC_HOST из .env
|
HOST = os.getenv("PUBLIC_HOST", "192.168.0.112")
|
||||||
PORT = 8000
|
PORT = int(os.getenv("PORT", 8000))
|
||||||
ROOM_ID = "AtR2yGhr8QM" # Измените на ID комнаты
|
FRAME_FILE = "test_frame.jpg"
|
||||||
PASSWORD = "1" # Измените на пароль комнаты
|
FRAMES_TO_SEND = 300 # 10 сек при 30 FPS
|
||||||
FRAME_FILE = "test_frame.jpg" # Путь к тестовому JPEG-файлу
|
|
||||||
|
# Учетные данные админа (из server.py)
|
||||||
|
ADMIN_USERNAME = "admin"
|
||||||
|
ADMIN_PASSWORD = "admin123"
|
||||||
|
|
||||||
async def send_frames():
|
async def send_frames():
|
||||||
"""Подключиться к WebSocket и отправить кадры"""
|
"""Подключиться к 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}")
|
print(f"[Test] Connecting to: {uri}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -43,15 +102,15 @@ async def send_frames():
|
|||||||
|
|
||||||
print(f"[Test] Frame size: {len(frame_data)} bytes")
|
print(f"[Test] Frame size: {len(frame_data)} bytes")
|
||||||
|
|
||||||
# Отправляем кадры в цикле (30 FPS, 10 секунд)
|
# Отправляем кадры в цикле (30 FPS, ~10 секунд)
|
||||||
print(f"[Test] Sending frames (30 FPS for 10 seconds)...")
|
print(f"[Test] Sending frames (30 FPS for ~{FRAMES_TO_SEND // 30} seconds)...")
|
||||||
for i in range(300): # 10 sec * 30 FPS
|
for i in range(FRAMES_TO_SEND): # ~10 sec * 30 FPS
|
||||||
await ws.send(frame_data)
|
await ws.send(frame_data)
|
||||||
if (i + 1) % 30 == 0:
|
if (i + 1) % 30 == 0:
|
||||||
print(f"[Test] ✓ Sent {i + 1} frames")
|
print(f"[Test] ✓ Sent {i + 1} frames")
|
||||||
await asyncio.sleep(1 / 30) # ~30 FPS
|
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) # Пауза перед отключением
|
await asyncio.sleep(2) # Пауза перед отключением
|
||||||
|
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
@@ -88,7 +147,7 @@ if __name__ == "__main__":
|
|||||||
print("=" * 60)
|
print("=" * 60)
|
||||||
print("WebSocket Frame Sender Test")
|
print("WebSocket Frame Sender Test")
|
||||||
print("=" * 60)
|
print("=" * 60)
|
||||||
print(f"Target: ws://{HOST}:{PORT}/ws/client/{ROOM_ID}/{PASSWORD}")
|
print(f"Server: http://{HOST}:{PORT}")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user