From 3bacf504095f0a2cc0dbf061f6008d608363c5b2 Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Mon, 22 May 2023 11:10:36 -0500 Subject: [PATCH] forgot to upload tools/remote --- src/worker/tools/remote.ts | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/worker/tools/remote.ts diff --git a/src/worker/tools/remote.ts b/src/worker/tools/remote.ts new file mode 100644 index 00000000..833f9f48 --- /dev/null +++ b/src/worker/tools/remote.ts @@ -0,0 +1,47 @@ +import { byteArrayToString, stringToByteArray } from "../../common/util"; +import { WorkerFileUpdate, isErrorResult, isOutputResult, isUnchanged } from "../../common/workertypes"; +import { BuildStep, BuildStepResult, gatherFiles, staleFiles, store } from "../workermain"; + +// TODO: are we running from 8bitworkshop.com in this worker? +const REMOTE_URL = "http://localhost:3009/build"; + +// create random UID +const sessionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); + +export async function buildRemote(step: BuildStep): Promise { + gatherFiles(step); // TODO? + var binpath = "a.out"; // TODO? + if (staleFiles(step, [binpath])) { + // grab files from store + let updates : WorkerFileUpdate[] = []; + for (var i = 0; i < step.files.length; i++) { + let path = step.files[i]; + let entry = store.workfs[path]; + // convert to base64 + let data = typeof entry.data === 'string' ? entry.data : btoa(byteArrayToString(entry.data)); + updates.push({ path, data }); + } + // build the command + let cmd = { buildStep: step, updates, sessionID }; + // do a POST to the remote server, sending step as JSON + console.log('POST', cmd); + let result = await fetch(REMOTE_URL, { + method: "POST", + mode: "cors", + body: JSON.stringify(cmd), + headers: { + "Content-Type": "application/json" + } + }); + // return the result as JSON + let json = await result.json(); + // parse the result as JSON + if (isUnchanged(json)) return json; + if (isErrorResult(json)) return json; + if (isOutputResult(json)) { + json.output = stringToByteArray(atob(json.output)); + return json; + } + throw new Error(`Unexpected result from remote build: ${JSON.stringify(json)}`); + } +}