import debug from 'debug' import type { StatePacket } from '../index.js' import type { Debugger } from 'debug' export class ContentReader { bytesReceived: number packets: StatePacket[] inOrder: StatePacket[] reading: boolean startingDataNr: number nextDataNr: number | undefined lastDataNr: number | undefined logger: Debugger constructor(startingDataNr: number) { this.bytesReceived = 0 this.packets = new Array() this.inOrder = new Array() this.reading = true this.startingDataNr = startingDataNr this.nextDataNr = startingDataNr this.lastDataNr = undefined this.logger = debug('read').extend('READING') // this.socket.reader = this } async addPacket(packet: StatePacket): Promise { this.packets.push(packet) this.bytesReceived += packet.payload!.length if (packet.header.seqNr === this.nextDataNr) { this.nextDataNr++ return this.inOrder.push(packet) } else { return false } } async compile(precompiled: Uint8Array[]): Promise { const compiled = Buffer.concat(precompiled.flatMap((v) => Buffer.from(v))) this.logger(`${compiled.length} Bytes Received.`) return compiled } async run(): Promise { const sortedPackets = this.packets.sort((a, b) => { return a.header.seqNr - b.header.seqNr }) const precompiled = sortedPackets.map((pk) => { return pk.payload! }) const compiled = await this.compile(precompiled) return compiled } }