34 lines
820 B
TypeScript
34 lines
820 B
TypeScript
export class BufferManager {
|
|
|
|
private buffer: Buffer;
|
|
|
|
constructor(
|
|
private readonly maxBufferSize: number,
|
|
) {
|
|
this.buffer = Buffer.alloc(0);
|
|
}
|
|
|
|
hasRoom(chunk: Buffer): boolean {
|
|
return chunk.length + this.buffer.length <= this.maxBufferSize;
|
|
}
|
|
|
|
append(chunk: Buffer) {
|
|
|
|
if (!this.hasRoom(chunk)) {
|
|
throw new Error('Buffer overflow - data will be lost. Check hasRoom before calling');
|
|
}
|
|
|
|
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
}
|
|
|
|
appendAndGetCompletedBuffer(chunk: Buffer): Buffer {
|
|
|
|
const fillSize = this.maxBufferSize - this.buffer.length;
|
|
const completedBuffer = Buffer.concat([this.buffer, chunk.slice(0, fillSize)]);
|
|
|
|
this.buffer = Buffer.from(chunk.slice(fillSize, chunk.length)); // ??? could be an issue
|
|
|
|
return completedBuffer;
|
|
}
|
|
}
|