Finish v2 protocol

This commit is contained in:
zontreck 2025-06-14 15:52:45 -07:00
parent faf1eeef5f
commit fd74f7a646

View file

@ -11,12 +11,12 @@ $jsx = json_decode(file_get_contents("php://input"), true);
// Get operation information // Get operation information
// DISCLAIMER: All php code below this point is AI Generated // DISCLAIMER: All php code below this point is AI Generated
function create($DB, $jsx, $blank=false) { function create($DB, $jsx, $blank) {
// Get UUID from MySQL and insert into sessions table // Get UUID from MySQL and insert into sessions table
$result = $DB->query("SELECT UUID() AS id"); $result = $DB->query("SELECT UUID() AS id");
if (!$result) { if (!$result) {
http_response_code(500); http_response_code(500);
echo json_encode(["error" => "Failed to generate UUID"]); echo json_encode({"error" => "Failed to generate UUID"});
break; break;
} }
@ -34,10 +34,14 @@ function create($DB, $jsx, $blank=false) {
$stmt->close(); $stmt->close();
// Prepare data as JSON and insert into `data` table // Prepare data as JSON and insert into `data` table
if($jsx['type'] == "json") { if(!$blank) {
$data = json_encode($jsx['data']); if($jsx['type'] == "json") {
}else if($jsx ['type'] == "nbt") { $data = json_encode($jsx['data']);
$data = base64_decode($jsx['data']); }else if($jsx ['type'] == "nbt") {
$data = base64_decode($jsx['data']);
}
} else {
$data = "";
} }
$stmt = $DB->prepare("INSERT INTO `data` (`ID`, `SessionData`) VALUES (?, ?)"); $stmt = $DB->prepare("INSERT INTO `data` (`ID`, `SessionData`) VALUES (?, ?)");
@ -56,6 +60,44 @@ function create($DB, $jsx, $blank=false) {
return $sessionId; return $sessionId;
} }
function get_version($DB, $jsx) {
$sessionId = $jsx['id'];
$stmt = $DB->prepare("SELECT `version` FROM `sessions` WHERE `ID` = ?");
$stmt->bind_param("s", $sessionId);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows === 0) {
$stmt->close();
return 0;
}
$stmt->bind_result($version);
$stmt->fetch();
$stmt->close();
return $version;
}
function update_version($DB, $sesisonId, $newVer) {
$stmt = $DB->prepare("UPDATE `sessions` SET `version` = ? WHERE `ID` = ?");
$stmt->bind_param("is", $newVer, $sesisonId);
$stmt->execute();
$stmt->close();
}
function pushNewData($DB, $sessionId, $data) {
$stmt = $DB->prepare("UPDATE `data` SET `SessionData` = ? WHERE `ID` = ?");
$stmt->bind_param("bs", NULL, $sessionId);
$stmt->send_long_data(0, $data);
if(!$stmt->execute()) {
return false;
}
return true;
}
switch($jsx['cmd']) { switch($jsx['cmd']) {
case "create": { case "create": {
$session = create($DB, $jsx, false); $session = create($DB, $jsx, false);
@ -72,25 +114,35 @@ switch($jsx['cmd']) {
} }
// Not AI Generated // Not AI Generated
case "get_version": { case "get_version": {
$ver = get_version($DB, $jsx);
echo json_encode({"status" => "version_back", "version" => $ver});
break;
}
// Not AI Generated
case "patch": {
$sessionId = $jsx['id']; $sessionId = $jsx['id'];
$stmt = $DB->prepare("SELECT `version` FROM `sessions` WHERE `ID` = ?");
$stmt->bind_param("s", $sessionId);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows === 0) { if($jsx['type'] == "json") {
http_response_code(418); $data = json_encode($jsx['data']);
echo json_encode({"error" => "Session not found"}); }else if($jsx ['type'] == "nbt") {
$stmt->close(); $data = base64_decode($jsx['data']);
break;
} }
$stmt->bind_result($version);
$stmt->fetch();
$stmt->close();
echo json_encode({"status" => "version_back", "version" => $version}); $curVer = get_version($DB, $jsx);
$curVer += 1; // We'll push this back to the database momentarily.
// Now, we update the data blob.
$success = pushNewData($DB, $sessionId, $data);
if($success) {
update_version($DB, $sessionId, $curVer);
die(json_encode({"status" => "patched", "version" => $curVer}));
} else {
die(json_encode({"status" => "failed"}));
}
break; break;
} }
case "get": { case "get": {