From b6ab338e073b4451de781395e732e6d460cacbd8 Mon Sep 17 00:00:00 2001 From: Victor Westerlund Date: Tue, 5 Oct 2021 17:24:37 +0200 Subject: [PATCH] dev21w40b --- Monkeydo.mjs | 31 +++++++++++++++++++------------ classes/Worker.mjs | 10 ---------- worker/MonkeyWorker.mjs | 30 ++++++++++++++++++++++++++++++ worker/Sequencer.js | 5 +++++ 4 files changed, 54 insertions(+), 22 deletions(-) delete mode 100644 classes/Worker.mjs create mode 100644 worker/MonkeyWorker.mjs create mode 100644 worker/Sequencer.js diff --git a/Monkeydo.mjs b/Monkeydo.mjs index 087974a..7790905 100644 --- a/Monkeydo.mjs +++ b/Monkeydo.mjs @@ -1,7 +1,8 @@ -import { default as MonkeyWorker } from "./classes/Worker.mjs"; +import { default as MonkeyWorker } from "./worker/MonkeyWorker.mjs"; -export default class Monekydo { +export default class Monkeydo extends MonkeyWorker { constructor(manifest = false) { + super(); this.monkeydo = { version: "0.1", debugLevel: 0, @@ -14,12 +15,18 @@ export default class Monekydo { }; Object.seal(this.monkeydo); - this.header = null; - this.body = null; + this.manifest = { + header: null, + body: null + }; if(!window.Worker) { this.except("JavaScript Workers aren't supported by your browser"); } + + if(manifest) { + this.load(manifest); + } } debug(attachment = "ATTACHMENT_EMPTY") { @@ -41,7 +48,7 @@ export default class Monekydo { // Attempt to parse the argument as JSON try { data = JSON.parse(manifest); - } + } catch { // If that fails, attempt to parse it as a URL try { @@ -65,20 +72,20 @@ export default class Monekydo { if(!data.hasOwnProperty("header") || !data.hasOwnProperty("body")) { this.debug(data); - throw new Error(errorPrefix + "Object is not a Monkeydo manifest"); + throw new Error(errorPrefix + "Expected 'header' and 'body' properties in object"); } - this.header = data.header; - this.body = data.body; + this.manifest.header = data.header; + this.manifest.body = data.body; return true; } do() { const errorPrefix = "DO_FAILED: "; - if(!this.header) { - this.debug(this.header); - throw new Error(errorPrefix + `Expected Monkeydo manifest, got '${this.header}' instead`); + if(!this.manifest.header) { + this.debug(this.manifest.header); + throw new Error(errorPrefix + `Expected header object from contructed property`); } - const monkey = new MonkeyWorker(); + this.giveManifest(); } } \ No newline at end of file diff --git a/classes/Worker.mjs b/classes/Worker.mjs deleted file mode 100644 index 5f76ae8..0000000 --- a/classes/Worker.mjs +++ /dev/null @@ -1,10 +0,0 @@ -export default class MonkeyWorker extends Worker { - constructor() { - super(); - onmessage = (message) => this.instruction(message); - } - - instruction(message) { - console.log(message); - } -} \ No newline at end of file diff --git a/worker/MonkeyWorker.mjs b/worker/MonkeyWorker.mjs new file mode 100644 index 0000000..d2560ce --- /dev/null +++ b/worker/MonkeyWorker.mjs @@ -0,0 +1,30 @@ +// Spawn a dedicated worker for scheduling events from manifest + +export default class MonkeyWorker { + constructor() { + // Get location of this file + this.ready = false; + let location = new URL(import.meta.url); + location = location.pathname.replace("MonkeyWorker.mjs",""); + + // Spawn worker from file relative to this file + this.worker = new Worker(location + "Sequencer.js"); + this.worker.addEventListener("message",message => this.message(message)); + } + + play() { + this.worker.postMessage(["PLAYSTATE",true]); + } + + pause() { + this.worker.postMessage(["PLAYSTATE",false]); + } + + giveManifest() { + this.worker.postMessage(["GIVE_MANIFEST",this.manifest]); + } + + message(message) { + console.log(message); + } +} \ No newline at end of file diff --git a/worker/Sequencer.js b/worker/Sequencer.js new file mode 100644 index 0000000..4cab0b9 --- /dev/null +++ b/worker/Sequencer.js @@ -0,0 +1,5 @@ +postMessage("MONKEDO_THREAD_SPAWNED"); + +onmessage = (message) => { + console.log("Message received",message); +} \ No newline at end of file