@loaders.gl/core
Version:
Framework-independent loaders for 3D graphics formats
76 lines (64 loc) • 1.71 kB
JavaScript
import { toArrayBuffer } from '../../javascript-utils/binary-utils';
import WorkerFarm from '../../worker-utils/worker-farm';
import { parse } from '../parse';
import { getTransferList } from '../../worker-utils/worker-utils';
let _workerFarm = null;
function getWorkerFarm(options = {}) {
const props = {};
if (options.maxConcurrency) {
props.maxConcurrency = options.maxConcurrency;
}
if (options.onDebug) {
props.onDebug = options.onDebug;
}
if (!_workerFarm) {
_workerFarm = new WorkerFarm({
onMessage: onWorkerMessage
});
}
_workerFarm.setProps(props);
return _workerFarm;
}
async function onWorkerMessage({
worker,
data,
resolve,
reject
}) {
switch (data.type) {
case 'done':
resolve(data.result);
break;
case 'process':
try {
const result = await parse(data.arraybuffer, data.options, data.url);
worker.postMessage({
type: 'process-done',
id: data.id,
result
}, getTransferList(result));
} catch (error) {
worker.postMessage({
type: 'process-error',
id: data.id,
message: error.message
});
}
break;
case 'error':
reject(data.message);
break;
default:
}
}
export default function parseWithWorker(workerSource, workerName, data, options = {}, context = {}) {
const workerFarm = getWorkerFarm(options);
options = JSON.parse(JSON.stringify(options));
return workerFarm.process(workerSource, "loaders.gl-".concat(workerName), {
arraybuffer: toArrayBuffer(data),
options,
source: 'loaders.gl',
type: 'process'
});
}
//# sourceMappingURL=parse-with-worker.js.map