From 5dd7f38450ef52415decc9e5fc17f4c98795e5ab Mon Sep 17 00:00:00 2001 From: ddidderr Date: Sat, 29 Aug 2026 15:55:15 +0200 Subject: [PATCH] feat(web): use the shared high-score service Keep browser settings and the existing local save fallback, but route the browser high-score table through the same-origin service when it is available. The WASM storage bridge now accepts fetched score JSON and queues one validated submission at a time. The JavaScript plugin fetches the canonical table, submits accepted name-entry scores, ignores stale responses, retries failures, and feeds successful responses back into the running game. Update the web and project documentation to describe the optional shared leaderboard and regenerate the tracked browser artifact. A missing service continues to leave the local table usable; the service documentation records that anonymous client scores are intentionally not tamper-resistant. Test Plan: - `just test` -- passed (3 service tests and 137 game tests) - `just clippy` -- passed - `just web-build` -- passed - `cargo +nightly fmt -- --check` -- passed - `node --check web/storage.js` and `prettier --check web/storage.js` -- passed - `rumdl check --flavor commonmark CHANGELOG.md README.md web/README.md highscore-server/README.md` -- passed - Browser WASM load through same-origin API proxy -- passed - `git diff --cached --check` -- passed --- tdkpin-rs/CHANGELOG.md | 4 ++ tdkpin-rs/README.md | 18 +++++--- tdkpin-rs/src/app.rs | 24 +++++++--- tdkpin-rs/src/persistence.rs | 12 ++++- tdkpin-rs/web/README.md | 8 +++- tdkpin-rs/web/storage.js | 76 +++++++++++++++++++++++++++++++ tdkpin-rs/web/tdkpin-rs.wasm | Bin 1327493 -> 1330896 bytes tdkpin-rs/web_storage/src/lib.rs | 61 +++++++++++++++++++++++++ 8 files changed, 186 insertions(+), 17 deletions(-) diff --git a/tdkpin-rs/CHANGELOG.md b/tdkpin-rs/CHANGELOG.md index 12b9eea..1b4066f 100644 --- a/tdkpin-rs/CHANGELOG.md +++ b/tdkpin-rs/CHANGELOG.md @@ -10,6 +10,10 @@ and this project adheres to ### Fixed +- Add the optional same-origin Axum/SQLite high-score service, browser + fetch/submit integration, and an nginx reverse-proxy example. Browser + settings retain their local-storage fallback, while the shared table is + returned by the service. - Seed the initial gameplay random stream from the startup clock so the first maximum-power launcher shot is not identical on every run. - Require an unconsumed record-148 contact before the effect-seven special diff --git a/tdkpin-rs/README.md b/tdkpin-rs/README.md index 8eb5a1e..3299251 100644 --- a/tdkpin-rs/README.md +++ b/tdkpin-rs/README.md @@ -40,9 +40,10 @@ just web-serve ``` Then open . The browser build keeps the original -640x460 presentation centered on a black page and stores settings and high -scores in browser storage. See [web/README.md](web/README.md) for the static -bundle details. +640x460 presentation centered on a black page and stores settings and a local +fallback table in browser storage unless the optional same-origin +`/api/highscores` service is deployed. See [web/README.md](web/README.md) and +[highscore-server/README.md](highscore-server/README.md) for deployment details. ## Deterministic mechanics validation @@ -88,10 +89,13 @@ box closes the program. ## Saved data -Settings and the ten-entry high-score table are stored as `save.json` in the -platform's normal per-user application-data directory. On first run, settings -are imported from an adjacent original INI (or the embedded distributed -TDKPIN.INI), and the table is imported from the original `HISCORES.DAT`. +Native settings and the ten-entry high-score table are stored as `save.json` in +the platform's normal per-user application-data directory. Browser settings +and the fallback table use `localStorage`; a deployed browser build uses the +same-origin high-score service as its shared table when available. On first +run, native settings are imported from an adjacent original INI (or the +embedded distributed TDKPIN.INI), and the table is imported from the original +`HISCORES.DAT`. ## Reconstruction status diff --git a/tdkpin-rs/src/app.rs b/tdkpin-rs/src/app.rs index d787779..58341a1 100644 --- a/tdkpin-rs/src/app.rs +++ b/tdkpin-rs/src/app.rs @@ -257,6 +257,8 @@ impl App { pub fn frame(&mut self) { #[cfg(target_arch = "wasm32")] self.assets.update(); + #[cfg(target_arch = "wasm32")] + self.update_remote_high_scores(); self.handle_global_input(); match self.screen { Screen::Loading => { @@ -557,13 +559,13 @@ impl App { } fn accept_high_score_name(&mut self) { - insert_high_score( - &mut self.saved.high_scores, - HighScore { - name: self.name.clone(), - score: self.pending_score, - }, - ); + let entry = HighScore { + name: self.name.clone(), + score: self.pending_score, + }; + insert_high_score(&mut self.saved.high_scores, entry.clone()); + #[cfg(target_arch = "wasm32")] + self.persistence.submit_high_score(&entry); self.save(); if self.game.as_ref().is_some_and(|game| game.finished) { self.take_game_and_preserve_random_seed(); @@ -1314,6 +1316,14 @@ impl App { eprintln!("could not save settings and highscores: {error}"); } } + + #[cfg(target_arch = "wasm32")] + fn update_remote_high_scores(&mut self) { + if let Some(scores) = self.persistence.take_high_scores() { + self.saved.high_scores = scores; + self.save(); + } + } } fn draw_panel(x: f32, y: f32, width: f32, height: f32) { diff --git a/tdkpin-rs/src/persistence.rs b/tdkpin-rs/src/persistence.rs index 0bc6d50..2cf375a 100644 --- a/tdkpin-rs/src/persistence.rs +++ b/tdkpin-rs/src/persistence.rs @@ -6,7 +6,7 @@ use std::{fs, path::PathBuf}; use directories::ProjectDirs; use serde::{Deserialize, Serialize}; #[cfg(target_arch = "wasm32")] -use tdkpin_web_storage::{queue_save, take_loaded}; +use tdkpin_web_storage::{queue_high_score, queue_save, take_high_scores, take_loaded}; const ORIGINAL_HIGHSCORES: &[u8] = include_bytes!("../assets/original/HISCORES.DAT"); const ORIGINAL_INI: &str = include_str!("../../original/TDKPIN.INI"); @@ -143,6 +143,16 @@ impl Persistence { queue_save(encoded); Ok(()) } + + pub fn take_high_scores(&self) -> Option> { + take_high_scores().and_then(|bytes| serde_json::from_slice(&bytes).ok()) + } + + pub fn submit_high_score(&self, entry: &HighScore) { + if let Ok(encoded) = serde_json::to_vec(entry) { + queue_high_score(encoded); + } + } } #[cfg(not(target_arch = "wasm32"))] diff --git a/tdkpin-rs/web/README.md b/tdkpin-rs/web/README.md index 083786e..7e50cdc 100644 --- a/tdkpin-rs/web/README.md +++ b/tdkpin-rs/web/README.md @@ -8,9 +8,13 @@ just web-serve The game is compiled for `wasm32-unknown-unknown` and loaded into a fixed 640x460 canvas centered on the black page by `index.html`. Browser settings and -high scores are saved in `localStorage`; native builds continue to use their -normal per-user save file. +a fallback copy of the high-score table are saved in `localStorage`; native +builds continue to use their normal per-user save file. The page uses Macroquad's official browser loader from the miniquad samples site. The web page must be served over HTTP rather than opened directly from a `file:` URL. + +When the same-origin `/api/highscores` endpoint is available, the browser loads +and submits the shared top-ten table there. The small Axum service and an nginx +proxy example are in [highscore-server](../highscore-server/). diff --git a/tdkpin-rs/web/storage.js b/tdkpin-rs/web/storage.js index d2255f7..f832098 100644 --- a/tdkpin-rs/web/storage.js +++ b/tdkpin-rs/web/storage.js @@ -4,7 +4,12 @@ const storageKey = "tdkpin.save.v1"; const encoder = new TextEncoder(); const decoder = new TextDecoder(); + const highScoreApi = "/api/highscores"; let lastRevision = 0; + let lastHighScoreRevision = 0; + let highScoreRequestInFlight = false; + let highScoreGeneration = 0; + let highScoreSubmissionWarningShown = false; function browserStorage() { try { @@ -54,10 +59,81 @@ lastRevision = revision; } + function deliverHighScores(json) { + wasm_exports.tdkpin_browser_high_scores_clear(); + for (const byte of encoder.encode(json)) { + wasm_exports.tdkpin_browser_high_scores_push(byte); + } + wasm_exports.tdkpin_browser_high_scores_finish(); + } + + async function fetchHighScores() { + const generation = ++highScoreGeneration; + try { + const response = await fetch(highScoreApi, { + cache: "no-store", + headers: { Accept: "application/json" }, + }); + if (!response.ok) { + throw new Error(`high-score request failed (${response.status})`); + } + const json = await response.text(); + if (generation === highScoreGeneration) { + deliverHighScores(json); + } + } catch (error) { + console.warn("shared high scores unavailable; using local scores", error); + } + } + + async function flushHighScoreSubmission() { + if (highScoreRequestInFlight) { + return; + } + const revision = wasm_exports.tdkpin_browser_high_score_revision(); + if (revision === lastHighScoreRevision) { + return; + } + const bytes = new Uint8Array( + wasm_exports.tdkpin_browser_high_score_length(), + ); + for (let index = 0; index < bytes.length; index += 1) { + bytes[index] = wasm_exports.tdkpin_browser_high_score_byte(index); + } + + highScoreRequestInFlight = true; + try { + const response = await fetch(highScoreApi, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: decoder.decode(bytes), + keepalive: true, + }); + if (!response.ok) { + throw new Error(`high-score submission failed (${response.status})`); + } + const json = await response.text(); + highScoreGeneration += 1; + deliverHighScores(json); + wasm_exports.tdkpin_browser_high_score_ack(revision); + lastHighScoreRevision = revision; + highScoreSubmissionWarningShown = false; + } catch (error) { + if (!highScoreSubmissionWarningShown) { + console.warn("shared high-score submission failed; will retry", error); + highScoreSubmissionWarningShown = true; + } + } finally { + highScoreRequestInFlight = false; + } + } + function onInit() { sendSavedDataToRust(); lastRevision = wasm_exports.tdkpin_browser_storage_save_revision(); + void fetchHighScores(); window.setInterval(flushRustSave, 50); + window.setInterval(() => void flushHighScoreSubmission(), 50); window.addEventListener("beforeunload", flushRustSave); } diff --git a/tdkpin-rs/web/tdkpin-rs.wasm b/tdkpin-rs/web/tdkpin-rs.wasm index b3fec1926a8b65a279d5b73265af3f009a525474..91847111cba1d0ba7bee38dee7b4a0547bd431d7 100755 GIT binary patch delta 83322 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 rpgH+E9i272A8B}9} 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 delta 80860 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�D}m}d1y)C%97q}Q=E(Gmx7ZaJ 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 diff --git a/tdkpin-rs/web_storage/src/lib.rs b/tdkpin-rs/web_storage/src/lib.rs index 6ed3335..8740231 100644 --- a/tdkpin-rs/web_storage/src/lib.rs +++ b/tdkpin-rs/web_storage/src/lib.rs @@ -7,8 +7,11 @@ use std::{ thread_local! { static LOADED_BYTES: RefCell> = const { RefCell::new(Vec::new()) }; + static LOADED_HIGH_SCORES: RefCell> = const { RefCell::new(Vec::new()) }; static PENDING_SAVE: RefCell>> = const { RefCell::new(None) }; + static PENDING_HIGH_SCORE: RefCell>> = const { RefCell::new(None) }; static SAVE_REVISION: Cell = const { Cell::new(0) }; + static HIGH_SCORE_REVISION: Cell = const { Cell::new(0) }; } pub fn take_loaded() -> Option> { @@ -21,6 +24,16 @@ pub fn queue_save(bytes: Vec) { SAVE_REVISION.with(|revision| revision.set(revision.get().wrapping_add(1))); } +pub fn take_high_scores() -> Option> { + let bytes = LOADED_HIGH_SCORES.with(|loaded| mem::take(&mut *loaded.borrow_mut())); + (!bytes.is_empty()).then_some(bytes) +} + +pub fn queue_high_score(bytes: Vec) { + PENDING_HIGH_SCORE.with(|pending| *pending.borrow_mut() = Some(bytes)); + HIGH_SCORE_REVISION.with(|revision| revision.set(revision.get().wrapping_add(1))); +} + #[unsafe(no_mangle)] pub extern "C" fn tdkpin_storage_crate_version() -> u32 { 1 @@ -41,6 +54,21 @@ pub extern "C" fn tdkpin_browser_storage_push(byte: u32) { #[unsafe(no_mangle)] pub extern "C" fn tdkpin_browser_storage_finish() {} +#[unsafe(no_mangle)] +pub extern "C" fn tdkpin_browser_high_scores_clear() { + LOADED_HIGH_SCORES.with(|loaded| loaded.borrow_mut().clear()); +} + +#[unsafe(no_mangle)] +pub extern "C" fn tdkpin_browser_high_scores_push(byte: u32) { + if let Ok(byte) = u8::try_from(byte) { + LOADED_HIGH_SCORES.with(|loaded| loaded.borrow_mut().push(byte)); + } +} + +#[unsafe(no_mangle)] +pub extern "C" fn tdkpin_browser_high_scores_finish() {} + #[unsafe(no_mangle)] pub extern "C" fn tdkpin_browser_storage_save_revision() -> u32 { SAVE_REVISION.with(Cell::get) @@ -71,3 +99,36 @@ pub extern "C" fn tdkpin_browser_storage_save_byte(index: u32) -> u32 { pub extern "C" fn tdkpin_browser_storage_save_ack() { PENDING_SAVE.with(|pending| *pending.borrow_mut() = None); } + +#[unsafe(no_mangle)] +pub extern "C" fn tdkpin_browser_high_score_revision() -> u32 { + HIGH_SCORE_REVISION.with(Cell::get) +} + +#[unsafe(no_mangle)] +pub extern "C" fn tdkpin_browser_high_score_length() -> u32 { + PENDING_HIGH_SCORE.with(|pending| { + pending + .borrow() + .as_ref() + .map_or(0, |bytes| u32::try_from(bytes.len()).unwrap_or(u32::MAX)) + }) +} + +#[unsafe(no_mangle)] +pub extern "C" fn tdkpin_browser_high_score_byte(index: u32) -> u32 { + PENDING_HIGH_SCORE.with(|pending| { + pending + .borrow() + .as_ref() + .and_then(|bytes| bytes.get(usize::try_from(index).ok()?)) + .map_or(0, |byte| u32::from(*byte)) + }) +} + +#[unsafe(no_mangle)] +pub extern "C" fn tdkpin_browser_high_score_ack(revision: u32) { + if HIGH_SCORE_REVISION.with(Cell::get) == revision { + PENDING_HIGH_SCORE.with(|pending| *pending.borrow_mut() = None); + } +}