forked from LeenkxTeam/Kmake
38 lines
931 B
JavaScript
38 lines
931 B
JavaScript
importScripts("/common/gc.js");
|
|
|
|
var c;
|
|
|
|
async function handler(e, reply) {
|
|
if (e.data.ping) {
|
|
c.postMessage(e.data.ping);
|
|
return;
|
|
}
|
|
if (e.data.blob) {
|
|
(() => {
|
|
c.postMessage({blob: new Blob(e.data.blob)});
|
|
})();
|
|
await garbageCollect();
|
|
}
|
|
c = new BroadcastChannel(e.data.channel);
|
|
let messages = [];
|
|
c.onmessage = e => {
|
|
if (e.data === 'ready') {
|
|
// Ignore any 'ready' messages from the other thread since there could
|
|
// be some race conditions between this BroadcastChannel instance
|
|
// being created / ready to receive messages and the message being sent.
|
|
return;
|
|
}
|
|
messages.push(e.data);
|
|
if (e.data == 'done')
|
|
reply(messages);
|
|
};
|
|
c.postMessage('from worker');
|
|
}
|
|
|
|
onmessage = e => handler(e, postMessage);
|
|
|
|
onconnect = e => {
|
|
let port = e.ports[0];
|
|
port.onmessage = e => handler(e, msg => port.postMessage(msg));
|
|
};
|