rework header encode/decode

This commit is contained in:
2025-03-15 08:24:03 -05:00
parent ea2358a315
commit 0ff78d03a4
6 changed files with 75 additions and 78 deletions
+45
View File
@@ -0,0 +1,45 @@
const HEADER_SIZE = 18;
export default (
floatSignature: number,
version: number,
packetID: number,
packetFormat: number,
context: number,
subModules: Uint8Array[],
isLittleEndian: boolean = false
): Uint8Array => {
if (version !== 2) {
throw new Error('Only version 2 of the RTTrP header is currently supported');
}
const bytes = new Uint8Array(HEADER_SIZE);
let totalPacketSize = bytes.byteLength;
subModules.forEach((subModule) => {
totalPacketSize += subModule.length;
});
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
let dataOffset = 0;
view.setUint16(dataOffset, 0x4154, isLittleEndian);
dataOffset += 2;
view.setUint16(dataOffset, floatSignature, isLittleEndian);
dataOffset += 2;
view.setUint16(dataOffset, version);
dataOffset += 2;
view.setUint32(dataOffset, packetID, isLittleEndian);
dataOffset += 4;
view.setUint8(dataOffset, packetFormat);
dataOffset += 1;
view.setUint16(dataOffset, totalPacketSize, isLittleEndian);
dataOffset += 2;
view.setUint32(dataOffset, context, isLittleEndian);
dataOffset += 4;
view.setUint8(dataOffset, subModules.length);
dataOffset += 1;
return bytes;
};
-37
View File
@@ -1,37 +0,0 @@
import { RTTrPHeader } from '../models';
export default (header: RTTrPHeader): Uint8Array => {
if (header.version !== 2) {
throw new Error('Only version 2 of the RTTrP header is currently supported');
}
const bytes = new Uint8Array(18 + header.data.length);
bytes.set(header.data, 18);
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
let dataOffset = 0;
let isLittleEndian = false;
view.setUint16(dataOffset, header.intHeader, isLittleEndian);
dataOffset += 2;
view.setUint16(dataOffset, header.fltHeader, isLittleEndian);
dataOffset += 2;
if (header.intHeader === 0x4154) {
isLittleEndian = false;
}
view.setUint16(dataOffset, header.version, isLittleEndian);
dataOffset += 2;
view.setUint32(dataOffset, header.pID, isLittleEndian);
dataOffset += 4;
view.setUint8(dataOffset, header.pForm);
dataOffset += 1;
view.setUint16(dataOffset, header.pktSize, isLittleEndian);
dataOffset += 2;
view.setUint32(dataOffset, header.context, isLittleEndian);
dataOffset += 4;
view.setUint8(dataOffset, header.numMods);
dataOffset += 1;
return bytes;
};