Files
VRCX/src/workers/activityWorkerRunner.js
2026-03-23 21:43:16 +09:00

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