import "./pyodide.js"; async function prepare() { self.postMessage({type: 'status', stage: 'initialize', text: 'Initializing...'}); let pyodide = await loadPyodide(); await pyodide.loadPackage("pycryptodome"); await pyodide.loadPackage("./santaexchange-0.1-py3-none-any.whl"); let response = await fetch('./exchange_client.py'); pyodide.runPython(await response.text()) function sendMessage(messageString) { self.postMessage({type: 'message', message: messageString}) } function receiveUser(username) { self.postMessage({type: 'new_user', username: username}) } function announceRecipient(recipient_name, recipient_info) { self.postMessage({type: 'status', stage: 'finished', text: `Your secret santa receiver is \n${recipient_name}\n${recipient_info}`}) } function printLogs(record) { postMessage({type: 'status', stage: 'exchange', text: record}); } pyodide.globals.set('send_message', sendMessage); pyodide.globals.set('receive_user', receiveUser); pyodide.globals.set('announce_recipient', announceRecipient); pyodide.globals.set('logging_function', printLogs); pyodide.runPython(` exchange_worker = ExchangeClient(send_message, receive_user, announce_recipient) `); addEventListener('message', e => { if (e.data.type == 'message') { pyodide.globals.get('exchange_worker').decode_received_message(e.data.message); } else if (e.data.type == 'set_user') { let username = e.data.username; let userinfo = e.data.userinfo; pyodide.globals.get('exchange_worker').set_user_info(username, userinfo); postMessage({type: 'status', stage: 'wait_for_start', text: 'Waiting for other participants'}); } else if (e.data.type == 'start') { postMessage({ type: 'status', stage: 'exchanging', text: 'Performing exchange when all users have pressed start. This may take a minute or so.' }); pyodide.globals.get('exchange_worker').start_exchange(e.data.users); } }); self.postMessage({type: 'status', stage: 'wait_for_user', text: 'Initialized'}) } prepare();