Add 'buffer.manager.ts'
This commit is contained in:
33
buffer.manager.ts
Normal file
33
buffer.manager.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user