dev21w40b

This commit is contained in:
Victor Westerlund 2021-10-05 17:24:37 +02:00
parent c3d584dc8f
commit b6ab338e07
4 changed files with 54 additions and 22 deletions

View file

@ -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();
}
}

View file

@ -1,10 +0,0 @@
export default class MonkeyWorker extends Worker {
constructor() {
super();
onmessage = (message) => this.instruction(message);
}
instruction(message) {
console.log(message);
}
}

30
worker/MonkeyWorker.mjs Normal file
View file

@ -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);
}
}

5
worker/Sequencer.js Normal file
View file

@ -0,0 +1,5 @@
postMessage("MONKEDO_THREAD_SPAWNED");
onmessage = (message) => {
console.log("Message received",message);
}