File size: 3.39Kb
<?php
session_start();
require '../db.php';
header('Content-Type: application/json');
if (!isset($_SESSION['user_id'])) {
echo json_encode(['status' => 'error', 'message' => 'Unauthorized']);
exit;
}
$userId = $_SESSION['user_id'];
$method = $_SERVER['REQUEST_METHOD'];
// POST: Отправить сигнал
if ($method === 'POST') {
$data = json_decode(file_get_contents('php://input'), true);
if (!$data || !isset($data['type'])) {
echo json_encode(['status' => 'error', 'message' => 'Invalid data']);
exit;
}
// Сохранить сигнал в базе данных для опроса
// В продакшене используйте WebSocket для реального времени
try {
// Создать таблицу сигналов, если не существует
$pdo->exec("CREATE TABLE IF NOT EXISTS video_signals (
id INT AUTO_INCREMENT PRIMARY KEY,
from_user INT NOT NULL,
to_user INT NOT NULL,
signal_type VARCHAR(50) NOT NULL,
signal_data TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_read TINYINT DEFAULT 0,
INDEX(to_user, is_read)
)");
$stmt = $pdo->prepare("INSERT INTO video_signals (from_user, to_user, signal_type, signal_data) VALUES (?, ?, ?, ?)");
$stmt->execute([
$userId,
$data['to'] ?? 0,
$data['type'],
json_encode($data)
]);
echo json_encode(['status' => 'success']);
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
}
}
// GET: Опрос сигналов
if ($method === 'GET') {
try {
// Получить непрочитанные сигналы для текущего пользователя
$stmt = $pdo->prepare("SELECT * FROM video_signals WHERE to_user = ? AND is_read = 0 ORDER BY created_at ASC");
$stmt->execute([$userId]);
$signals = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Отметить как прочитанные
if (!empty($signals)) {
$ids = array_column($signals, 'id');
$placeholders = implode(',', array_fill(0, count($ids), '?'));
$stmt = $pdo->prepare("UPDATE video_signals SET is_read = 1 WHERE id IN ($placeholders)");
$stmt->execute($ids);
}
// Распарсить данные сигнала
$parsedSignals = [];
foreach ($signals as $signal) {
$parsedSignals[] = json_decode($signal['signal_data'], true);
}
echo json_encode(['status' => 'success', 'signals' => $parsedSignals]);
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
}
}
// DELETE: Очистить старые сигналы (опционально, можно вызывать периодически)
if ($method === 'DELETE') {
try {
// Удалить сигналы старше 1 часа
$pdo->exec("DELETE FROM video_signals WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 HOUR)");
echo json_encode(['status' => 'success']);
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
}
}