modern-netcdf
Version:
Modern NetCDF file reader and utilities
40 lines (37 loc) • 1.16 kB
JavaScript
const { parentPort, workerData } = require('worker_threads');
const path = require('path');
const { NetCDFReader } = require('..');
let reader = null;
async function handleMessage(msg) {
const { id, cmd, payload } = msg;
try {
switch (cmd) {
case 'open': {
const { source, options } = payload;
reader = await NetCDFReader.open(source, options);
parentPort.postMessage({ id, result: 'ok' });
break;
}
case 'getData': {
const { variable, slice } = payload;
if (!reader) throw new Error('Reader not open');
const data = await reader.getData(variable, slice);
parentPort.postMessage({ id, result: data }, [
ArrayBuffer.isView(data) ? data.buffer : undefined
].filter(Boolean));
break;
}
case 'close': {
if (reader) reader.close();
reader = null;
parentPort.postMessage({ id, result: 'closed' });
break;
}
default:
throw new Error('Unknown command');
}
} catch (err) {
parentPort.postMessage({ id, error: err.message });
}
}
parentPort.on('message', handleMessage);