UNPKG

rsocket-rxjs

Version:
46 lines (45 loc) 1.69 kB
import { factory } from '../config-log4j'; import { Payload } from './payload'; const log = factory.getLogger("protocol.FragmentsContext"); export class FragmentContext { constructor() { this.fragments = []; } add(payload) { this.fragments.push(payload); } /** * Returns aggregated payload */ get() { if (this.fragments.length == 1) { log.trace("Returning Single Fragment Payload"); const payload = this.fragments[0]; this.fragments = []; return payload; } else { log.trace("Returning Multi Fragment Payload"); let metdataLength = 0; let dataLength = 0; for (let fragment of this.fragments) { if (fragment.hasMetadata()) { metdataLength += fragment.metadata.byteLength; } dataLength += fragment.data.byteLength; } let metadataBufferView = new Uint8Array(metdataLength); let dataBufferView = new Uint8Array(dataLength); let metadataPosition = 0; let dataPosition = 0; for (let fragment of this.fragments) { metadataBufferView.set(new Uint8Array(fragment.metadata), metadataPosition); metadataPosition += fragment.metadata.byteLength; dataBufferView.set(new Uint8Array(fragment.data), dataPosition); dataPosition += fragment.data.byteLength; } this.fragments = []; return new Payload(dataBufferView, metadataBufferView); } } }