import {get, set} from 'idb-keyval'; import {encode} from '@/packets/index.js'; import Engine from '../../engine/engine.js'; import Server from './server.js'; class WorkerServer extends Server { constructor() { super(); this.fs = {}; } static qualify(path) { return ['UNIVERSE', path].join('/'); } async readData(path) { const data = await get(this.constructor.qualify(path)); if ('undefined' !== typeof data) { return data; } const error = new Error(); error.code = 'ENOENT'; throw error; } async writeData(path, view) { await set(this.constructor.qualify(path), view); } transmit(connection, packed) { postMessage(packed); } } const engine = new Engine(WorkerServer); onmessage = async (event) => { if (0 === event.data) { engine.stop(); await engine.disconnectPlayer(0, 0); await engine.saveEcses(); postMessage(0); return; } engine.server.accept(0, event.data); }; (async () => { await engine.load(); engine.start(); await engine.connectPlayer(0, 0); postMessage(encode({type: 'ConnectionStatus', payload: 'connected'})); })(); import.meta.hot.accept('../../engine/engine.js', async () => { await engine.disconnectPlayer(0, 0); postMessage(encode({type: 'ConnectionStatus', payload: 'aborted'})); close(); });