monkeydo/monkey/MonkeyMaster.mjs
2021-11-05 17:34:20 +01:00

55 lines
No EOL
1.1 KiB
JavaScript

// Task manager for Monkeydo dedicated workers (monkeys)
class WorkerTransactions {
constructor() {
this.txn = {
_open: [], // Open transations
prefix: "TXN",
timeout: 2000,
// Close a transaction
set close(name) {
this._open[name].resolve();
},
// Open a new transaction
set open(name) {
name = [this.prefix,name];
name = name.join("_").toUpperCase();
this._open[name] = new Promise();
},
get status(name) {
return this._open[name];
}
}
}
}
export default class MonkeyMaster extends WorkerTransactions {
constructor() {
super();
// Spawn dedicated worker
this.monkey = new Worker("Monkey.js");
this.monkey.addEventListener("message",message => this.receive(message.data));
if(this?.crossOriginIsolateds === true) {
// TODO; SharedArrayBuffer goes here
}
}
send(data) {
this.monkey.postMessage(data);
return true;
}
async receive(data) {
if(data[0] === "TASK") {
this.do(data[1]);
return;
}
this.txn.close = data[1];
}
async transaction(name,data) {
this.txn.open = name;
const send = this.send([this.txn.prefix,name,data]);
}
}