mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-15 12:53:51 +02:00
35 lines
976 B
JavaScript
35 lines
976 B
JavaScript
import ActivityWorker from './activityWorker.js?worker&inline';
|
|
|
|
let worker = null;
|
|
let workerSeq = 0;
|
|
const pendingWorkerCallbacks = new Map();
|
|
|
|
function getWorker() {
|
|
if (!worker) {
|
|
worker = new ActivityWorker();
|
|
worker.onmessage = (event) => {
|
|
const { type, seq, payload } = event.data;
|
|
const callback = pendingWorkerCallbacks.get(seq);
|
|
if (!callback) {
|
|
return;
|
|
}
|
|
pendingWorkerCallbacks.delete(seq);
|
|
if (type === 'error') {
|
|
callback.reject(new Error(payload.message));
|
|
return;
|
|
}
|
|
callback.resolve(payload);
|
|
};
|
|
}
|
|
return worker;
|
|
}
|
|
|
|
export function runActivityWorkerTask(type, payload) {
|
|
return new Promise((resolve, reject) => {
|
|
const seq = ++workerSeq;
|
|
pendingWorkerCallbacks.set(seq, { resolve, reject });
|
|
getWorker().postMessage({ type, seq, payload });
|
|
});
|
|
}
|
|
|