| #preprocess |
| var workerResponded = false, workerCallbackId = -1; |
| |
| (() => { |
| var messageBuffer = null, buffer = 0; |
| |
| function flushMessages() { |
| if (!messageBuffer) return; |
| if (runtimeInitialized) { |
| var temp = messageBuffer; |
| messageBuffer = null; |
| temp.forEach((message) => onmessage(message)); |
| } |
| } |
| |
| function messageResender() { |
| flushMessages(); |
| if (messageBuffer) { |
| setTimeout(messageResender, 100); // still more to do |
| } |
| } |
| |
| onmessage = (msg) => { |
| // if main has not yet been called (mem init file, other async things), buffer messages |
| if (!runtimeInitialized) { |
| if (!messageBuffer) { |
| messageBuffer = []; |
| setTimeout(messageResender, 100); |
| } |
| messageBuffer.push(msg); |
| return; |
| } |
| flushMessages(); |
| |
| var func = Module['_' + msg.data['funcName']]; |
| if (!func) abort('invalid worker function to call: ' + msg.data['funcName']); |
| var data = msg.data['data']; |
| if (data) { |
| if (!data.byteLength) data = new Uint8Array(data); |
| buffer = _realloc(buffer, data.length); |
| HEAPU8.set(data, buffer); |
| } |
| |
| workerResponded = false; |
| workerCallbackId = msg.data['callbackId']; |
| if (data) { |
| func({{{ to64('buffer') }}}, data.length); |
| } else { |
| func({{{ to64('0') }}}, 0); |
| } |
| } |
| })(); |