function appendToBuffer(buffer, value) { const result = new ArrayBuffer(buffer.byteLength + 1); const byteResult = new Uint8Array(result); byteResult.set(new Uint8Array(buffer), 0); byteResult[buffer.byteLength] = value; return result; } onrtctransform = (event) => { const transformer = event.transformer; transformer.reader = transformer.readable.getReader(); transformer.writer = transformer.writable.getWriter(); function process(transformer) { transformer.reader.read().then(chunk => { if (chunk.done) return; if (transformer.options.name === 'sender1') chunk.value.data = appendToBuffer(chunk.value.data, 1); else if (transformer.options.name === 'sender2') chunk.value.data = appendToBuffer(chunk.value.data, 2); else { const value = new Uint8Array(chunk.value.data)[chunk.value.data.byteLength - 1]; if (value !== 1 && value !== 2) self.postMessage("unexpected value: " + value); else if (value === 2) self.postMessage("got value 2"); chunk.value.data = chunk.value.data.slice(0, chunk.value.data.byteLength - 1); } transformer.writer.write(chunk.value); process(transformer); }); } process(transformer); }; self.postMessage("registered");