1
0
Fork 0
mirror of https://github.com/demostf/demo.js synced 2026-06-04 09:04:13 +02:00

add encoders for variable length ints

This commit is contained in:
Robin Appelman 2017-08-12 23:09:37 +02:00
commit 79cd277fed
9 changed files with 148 additions and 24 deletions

View file

@ -32,7 +32,7 @@ export function ParseClassInfo(stream: BitStream): ClassInfoPacket { // 10: clas
export function EncodeClassInfo(packet: ClassInfoPacket, stream: BitStream) {
stream.writeUint16(packet.number);
stream.writeBoolean(packet.create ? 1 : 0);
stream.writeBoolean(packet.create);
if (!packet.create) {
const bits = logBase2(packet.number) + 1;
for (const entry of packet.entries) {

View file

@ -1,5 +1,6 @@
import {Packet} from '../../Data/Packet';
import {PacketHandler} from './Parser';
import {BitStream} from 'bit-buffer';
export function make(name: string, definition: string): PacketHandler {
const parts = definition.split('}');
@ -31,7 +32,7 @@ export function make(name: string, definition: string): PacketHandler {
};
}
function readItem(stream, description, data) {
function readItem(stream: BitStream, description: string, data) {
if (description[0] === 'b') {
return stream.readBoolean();
} else if (description[0] === 's') {
@ -54,25 +55,25 @@ function readItem(stream, description, data) {
}
}
function writeItem(stream, description, data, value) {
function writeItem(stream: BitStream, description: string, data, value: boolean | string | number) {
if (description[0] === 'b') {
return stream.writeBoolean(value);
return stream.writeBoolean(value as boolean);
} else if (description[0] === 's') {
if (description.length === 1) {
return stream.writeUTF8String(value);
return stream.writeUTF8String(value as string);
} else {
const length = parseInt(description.substr(1), 10);
return stream.writeUTF8String(value, length);
return stream.writeUTF8String(value as string, length);
}
} else if (description === 'f32') {
return stream.writeFloat32(value);
return stream.writeFloat32(value as number);
} else if (description[0] === 'u') {
const length = parseInt(description.substr(1), 10);
return stream.writeBits(value, length);
return stream.writeBits(value as number, length);
} else if (description[0] === '$') {
const variable = description.substr(1);
return stream.writeBits(value, data[variable]);
return stream.writeBits(value as number, data[variable]);
} else {
return stream.writeBits(value, parseInt(description, 10), true);
return stream.writeBits(value as number, parseInt(description, 10));
}
}