diff options
| author | LLLL Colonq <llll@colonq> | 2026-08-26 23:47:59 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-08-26 23:47:59 -0400 |
| commit | 0d2d8cd897e94bd94e0b3ae7c6ce9aa580a44a0a (patch) | |
| tree | e9039d1c3aedca515d6cb499451d4b73aca4f5fd /2026/games_submissions/just__jane/src/score.cpp | |
| parent | 242943e5b023ce40eb3be826c418a478d4672f78 (diff) | |
Add a_tension_span
Diffstat (limited to '2026/games_submissions/just__jane/src/score.cpp')
| -rw-r--r-- | 2026/games_submissions/just__jane/src/score.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/2026/games_submissions/just__jane/src/score.cpp b/2026/games_submissions/just__jane/src/score.cpp new file mode 100644 index 0000000..ea0aa78 --- /dev/null +++ b/2026/games_submissions/just__jane/src/score.cpp @@ -0,0 +1,79 @@ +#include <cstring> +#include <format> +#include <string> + +#include <emscripten/em_types.h> +#include <emscripten/emscripten.h> +#include <emscripten/fetch.h> +#include <emscripten/html5.h> + +struct PostData { + char *body; +}; + +EM_JS(char *, get_cookie, (const char *name), { + const cookieName = UTF8ToString(name) + "="; + const cookies = document.cookie.split(";"); + + for (let c of cookies) { + c = c.trim(); + + if (c.startsWith(cookieName)) { + const value = c.substring(cookieName.length); + const len = lengthBytesUTF8(value) + 1; + const buffer = _malloc(len); + stringToUTF8(value, buffer, len); + return buffer; + } + } + + return 0; +}); + +void cleanup(emscripten_fetch_t *fetch) { + auto *data = static_cast<PostData *>(fetch->userData); + free(data->body); + delete data; + emscripten_fetch_close(fetch); +} + +void on_success(emscripten_fetch_t *fetch) { + printf("success: %d\n", fetch->status); + cleanup(fetch); +} + +void on_error(emscripten_fetch_t *fetch) { + printf("error: %d\n", fetch->status); + cleanup(fetch); +} + +void post_score(int score) { + auto username = get_cookie("bahms_user_login"); + if (!username) { + return; + } + + std::string text = std::format("## {}\nscore: {}", username, score); + + auto *data = new PostData; + data->body = static_cast<char *>(malloc(text.size())); + memcpy(data->body, text.data(), text.size()); + + emscripten_fetch_attr_t attr; + emscripten_fetch_attr_init(&attr); + + strcpy(attr.requestMethod, "POST"); + attr.withCredentials = true; + + const char *headers[] = {"Content-Type", "text/plain; charset=utf-8", nullptr}; + + attr.requestHeaders = headers; + attr.requestData = data->body; + attr.requestDataSize = text.size(); + attr.userData = data; + + attr.onsuccess = on_success; + attr.onerror = on_error; + + emscripten_fetch(&attr, "https://api.bahms.org/v1/game/sakura-samurai"); +} |
