PDO::FETCH_ASSOC, ]); if (php_sapi_name() == 'cli') { if ($argv[$argc - 1] == 'init-db') { $db->query(<<execute(); } return; } $inputPost = json_decode(file_get_contents('php://input'), true); if ($inputPost) { $_POST = $inputPost + $_POST; } $response = []; if (isset($_POST['host'])) { $ip = filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP); if ($ip === false) { $response = [ 'success' => false, 'error' => 'Invalid IP.', ]; } else { $port = intval($_POST['port']); $name = $_POST['name']; $id = md5($name . time()); $success = $db->prepare(<<execute([ 'id' => $id, 'ip' => $ip, 'port' => $port, 'timestamp' => time(), 'name' => $name, ]); if ($success) { $response = [ 'success' => $success, 'data' => $id, ]; } else { $response = [ 'success' => $success, 'error' => $db->errorInfo(), ]; } } } else if (isset($_GET['get-list'])) { $statement = $db->prepare(<< :comparison_time SQL); $statement->execute([ 'comparison_time' => time() - $timeoutMax, ]); $results = $statement->fetchAll(); $list = []; foreach ($results as $row) { $list[] = [ 'id' => $row['id'], 'name' => $row['name'], ]; } $response = [ 'success' => true, 'data' => $list, ]; } else if (isset($_GET['join'])) { $id = $_GET['join']; $statement = $db->prepare(<<execute([ 'id' => $id, ]); $result = $statement->fetch(); if ($result === false) { $response = [ 'success' => false, 'error' => 'Game not found.' ]; http_response_code(404); } else { $response = [ 'success' => true, 'data' => [ 'ip' => $result['ip'], 'port' => $result['port'], ], ]; } } else if (isset($_POST['close'])) { $id = $_POST['close']; $success = $db->prepare(<<execute([ 'id' => $id, ]); $response = [ 'success' => $success, ]; } else if (isset($_POST['keep-alive'])) { $id = $_POST['keep-alive']; $success = $db->prepare(<<execute([ 'id' => $id, 'ping_time' => time(), ]); $response = [ 'success' => $success, ]; } else { $response = [ 'success' => false, 'error' => 'Route not found.' ]; http_response_code(404); } header('Content-Type: application/json'); echo json_encode($response);