worker.js (1012B)
1 export async function worker_function() { 2 3 let wt = null; 4 5 async function processMessage(e) { 6 const target = this; 7 8 function respond(data) { 9 target.postMessage(Object.assign(data, {rqid: e.data.rqid})); 10 } 11 12 // ORB will block errors (webtransport_url('custom-response.py?:status=404');) 13 // so we need to try/catch 14 try { 15 switch (e.data.op) { 16 case 'open': { 17 wt = new WebTransport(e.data.url); 18 await wt.ready; 19 respond({ack: 'open'}); 20 break; 21 } 22 23 case 'openandclose': { 24 wt = new WebTransport(e.data.url); 25 await wt.ready; 26 wt.close(); 27 await wt.closed; 28 respond({ack: 'openandclose'}); 29 break; 30 } 31 32 case 'close': { 33 wt.close(); 34 await wt.closed; 35 respond({ack: 'close'}); 36 break; 37 } 38 } 39 } catch(e) { 40 respond({failed: true}); 41 } 42 } 43 44 self.addEventListener('message', processMessage); 45 46 self.addEventListener('connect', ev => { 47 // Shared worker case 48 ev.ports[0].onmessage = processMessage; 49 }); 50 }