58ca4e68db
- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics) - Rust analytics service with parallel report generation - C runtime with POSIX shared memory IPC - PostgreSQL schema with 30+ tables, full migrations - Redis cache, sessions, pub/sub - Kafka event streaming with Zookeeper - WebSocket hub for real-time updates - Automation engine with cron jobs, workflows, event triggers - JWT authentication, multi-tenant from start - Docker Compose with all services - Nginx reverse proxy with rate limiting - Integration tests passing - Feature gap analysis against Fortnox/Odoo/Visma Refs: BOC-001
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
export class BufferReader {
|
|
private buffer: Buffer = Buffer.allocUnsafe(0)
|
|
|
|
// TODO(bmc): support non-utf8 encoding?
|
|
private encoding: BufferEncoding = 'utf-8'
|
|
|
|
constructor(private offset: number = 0) {}
|
|
|
|
public setBuffer(offset: number, buffer: Buffer): void {
|
|
this.offset = offset
|
|
this.buffer = buffer
|
|
}
|
|
|
|
public int16(): number {
|
|
const result = this.buffer.readInt16BE(this.offset)
|
|
this.offset += 2
|
|
return result
|
|
}
|
|
|
|
public byte(): number {
|
|
const result = this.buffer[this.offset]
|
|
this.offset++
|
|
return result
|
|
}
|
|
|
|
public int32(): number {
|
|
const result = this.buffer.readInt32BE(this.offset)
|
|
this.offset += 4
|
|
return result
|
|
}
|
|
|
|
public uint32(): number {
|
|
const result = this.buffer.readUInt32BE(this.offset)
|
|
this.offset += 4
|
|
return result
|
|
}
|
|
|
|
public string(length: number): string {
|
|
const result = this.buffer.toString(this.encoding, this.offset, this.offset + length)
|
|
this.offset += length
|
|
return result
|
|
}
|
|
|
|
public cstring(): string {
|
|
const start = this.offset
|
|
let end = start
|
|
// eslint-disable-next-line no-empty
|
|
while (this.buffer[end++]) {}
|
|
this.offset = end
|
|
return this.buffer.toString(this.encoding, start, end - 1)
|
|
}
|
|
|
|
public bytes(length: number): Buffer {
|
|
const result = this.buffer.slice(this.offset, this.offset + length)
|
|
this.offset += length
|
|
return result
|
|
}
|
|
}
|