mirror of
https://codeberg.org/vlw/monkeydo.git
synced 2025-09-13 15:53:40 +02:00
55 lines
No EOL
1.1 KiB
JavaScript
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]);
|
|
}
|
|
} |