apple2js/workers/format.worker.ts

57 lines
1.4 KiB
TypeScript

import { debug } from '../js/util';
import { jsonDecode } from '../js/formats/format_utils';
import { createDisk, createDiskFromJsonDisk } from '../js/formats/create_disk';
import {
FormatWorkerMessage,
DiskProcessedResponse,
DISK_PROCESSED,
PROCESS_BINARY,
PROCESS_JSON_DISK,
PROCESS_JSON,
FloppyDisk,
} from '../js/formats/types';
debug('Worker loaded');
addEventListener('message', (message: MessageEvent<FormatWorkerMessage>) => {
debug('Worker started', message.type);
const data = message.data;
const { driveNo } = data.payload;
let disk: FloppyDisk | null = null;
switch (data.type) {
case PROCESS_BINARY:
{
const { fmt, options } = data.payload;
disk = createDisk(fmt, options);
}
break;
case PROCESS_JSON_DISK:
{
const { jsonDisk } = data.payload;
disk = createDiskFromJsonDisk(jsonDisk);
}
break;
case PROCESS_JSON:
{
const { json } = data.payload;
disk = jsonDecode(json);
}
break;
}
const response: DiskProcessedResponse = {
type: DISK_PROCESSED,
payload: {
driveNo,
disk,
},
};
self.postMessage(response);
debug('Worker complete', message.type);
});