"no action"]); exit; } if (!file_exists($pcsFile)) file_put_contents($pcsFile, "{}"); if (!file_exists($resultsFile)) file_put_contents($resultsFile, "{}"); $pcs = json_decode(file_get_contents($pcsFile), true) ?? []; $results = json_decode(file_get_contents($resultsFile), true) ?? []; // ── register ────────────────────────────────────────────────── if ($action == "register") { $id = $data['id']; $host = $data['host']; $pcs[$id] = [ "host" => $host, "last_seen" => time() ]; file_put_contents($pcsFile, json_encode($pcs, JSON_PRETTY_PRINT), LOCK_EX); echo json_encode(["status" => "ok"]); exit; } // ── result ──────────────────────────────────────────────────── if ($action == "result") { $id = $data['id'] ?? null; $cmd_id = $data['cmd_id'] ?? null; $result = $data['result'] ?? null; if (!$id) { echo json_encode(["error" => "missing id"]); exit; } // Un solo bloque por PC (clave = id de la PC) // Siempre reemplaza con el resultado mas reciente $results[$id] = [ "id" => $id, "cmd_id" => $cmd_id, "result" => $result, "time" => time() ]; file_put_contents($resultsFile, json_encode($results, JSON_PRETTY_PRINT), LOCK_EX); echo json_encode(["status" => "ok"]); exit; } echo json_encode(["error" => "invalid action"]);