From fd74f7a646bd891709e3b5f3b3b749325c5ad60a Mon Sep 17 00:00:00 2001 From: zontreck Date: Sat, 14 Jun 2025 15:52:45 -0700 Subject: [PATCH] Finish v2 protocol --- server/php/timetrack.php | 92 +++++++++++++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 20 deletions(-) diff --git a/server/php/timetrack.php b/server/php/timetrack.php index f9a3132..3df6ec3 100644 --- a/server/php/timetrack.php +++ b/server/php/timetrack.php @@ -11,12 +11,12 @@ $jsx = json_decode(file_get_contents("php://input"), true); // Get operation information // 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 $result = $DB->query("SELECT UUID() AS id"); if (!$result) { http_response_code(500); - echo json_encode(["error" => "Failed to generate UUID"]); + echo json_encode({"error" => "Failed to generate UUID"}); break; } @@ -34,10 +34,14 @@ function create($DB, $jsx, $blank=false) { $stmt->close(); // Prepare data as JSON and insert into `data` table - if($jsx['type'] == "json") { - $data = json_encode($jsx['data']); - }else if($jsx ['type'] == "nbt") { - $data = base64_decode($jsx['data']); + if(!$blank) { + if($jsx['type'] == "json") { + $data = json_encode($jsx['data']); + }else if($jsx ['type'] == "nbt") { + $data = base64_decode($jsx['data']); + } + } else { + $data = ""; } $stmt = $DB->prepare("INSERT INTO `data` (`ID`, `SessionData`) VALUES (?, ?)"); @@ -56,6 +60,44 @@ function create($DB, $jsx, $blank=false) { 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']) { case "create": { $session = create($DB, $jsx, false); @@ -72,25 +114,35 @@ switch($jsx['cmd']) { } // Not AI Generated 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']; - $stmt = $DB->prepare("SELECT `version` FROM `sessions` WHERE `ID` = ?"); - $stmt->bind_param("s", $sessionId); - $stmt->execute(); - $stmt->store_result(); - if($stmt->num_rows === 0) { - http_response_code(418); - echo json_encode({"error" => "Session not found"}); - $stmt->close(); - break; + if($jsx['type'] == "json") { + $data = json_encode($jsx['data']); + }else if($jsx ['type'] == "nbt") { + $data = base64_decode($jsx['data']); } - - $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; } case "get": {