-
Notifications
You must be signed in to change notification settings - Fork 4
/
BufferPacket.js
23 lines (19 loc) · 1005 Bytes
/
BufferPacket.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { fromU16String, toU16String, fromNodejsBuffer } from 'source/common/data/ArrayBuffer.js'
import { HEADER_BYTE_SIZE, packArrayBufferHeader } from 'source/common/data/ArrayBufferPacket.js'
const EMPTY_BUFFER = Buffer.allocUnsafe(0)
/** @type (headerU16String: string, payloadBuffer?: Buffer) => Buffer */
const packBufferPacket = (headerU16String, payloadBuffer = EMPTY_BUFFER) => Buffer.concat([
...packArrayBufferHeader(fromU16String(headerU16String)).map((arrayBuffer) => Buffer.from(arrayBuffer)),
payloadBuffer
])
/** @type (bufferPacket: Buffer) => [ string, Buffer ] */
const parseBufferPacket = (bufferPacket) => {
const headerSize = bufferPacket.readUIntBE(0, HEADER_BYTE_SIZE)
const headerU16String = toU16String(fromNodejsBuffer(bufferPacket.subarray(HEADER_BYTE_SIZE, HEADER_BYTE_SIZE + headerSize)))
const payloadBuffer = bufferPacket.subarray(HEADER_BYTE_SIZE + headerSize)
return [ headerU16String, payloadBuffer ]
}
export {
packBufferPacket,
parseBufferPacket
}