View file api/video-signal.php

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()]);
    }
}