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

encode for setConVar

This commit is contained in:
Robin Appelman 2017-08-12 15:36:23 +02:00
commit 3d0aee619e
5 changed files with 40 additions and 6 deletions

View file

@ -11,7 +11,7 @@ import {ParseMenu} from '../Packet/Menu';
import {ParsePacketEntities} from '../Packet/PacketEntities';
import {PacketParserMap, voidEncoder} from '../Packet/Parser';
import {ParseParseSounds} from '../Packet/ParseSounds';
import {ParseSetConVar} from '../Packet/SetConVar';
import {EncodeSetConVar, ParseSetConVar} from '../Packet/SetConVar';
import {ParseTempEntities} from '../Packet/TempEntities';
import {ParseUpdateStringTable} from '../Packet/UpdateStringTable';
import {ParseUserMessage} from '../Packet/UserMessage';
@ -32,7 +32,7 @@ export class Packet extends Parser {
2: make('file', 'transferId{32}fileName{s}requested{b}'),
3: make('netTick', 'tick{32}frameTime{16}stdDev{16}'),
4: make('stringCmd', 'command{s}'),
5: {parser: ParseSetConVar, encoder: voidEncoder},
5: {parser: ParseSetConVar, encoder: EncodeSetConVar},
6: make('sigOnState', 'state{8}count{32}'),
7: make('print', 'value{s}'),
8: make('serverInfo',

View file

@ -2,8 +2,8 @@ import {BitStream} from 'bit-buffer';
import {SetConVarPacket} from '../../Data/Packet';
export function ParseSetConVar(stream: BitStream): SetConVarPacket { // 5: setconvar
const count = stream.readBits(8);
const vars: {[key: string]: string} = {};
const count = stream.readUint8();
const vars: { [key: string]: string } = {};
for (let i = 0; i < count; i++) {
vars[stream.readUTF8String()] = stream.readUTF8String();
}
@ -12,3 +12,12 @@ export function ParseSetConVar(stream: BitStream): SetConVarPacket { // 5: setco
vars,
};
}
export function EncodeSetConVar(packet: SetConVarPacket, stream: BitStream) {
const keys = Object.keys(packet.vars);
stream.writeUint8(keys.length);
for (const key of keys) {
stream.writeUTF8String(key);
stream.writeUTF8String(packet.vars[key]);
}
}

View file

@ -4,7 +4,7 @@ import {Packet} from '../../../../Data/Packet';
import {Encoder, Parser} from '../../../../Parser/Packet/Parser';
export function getStream(data: string) {
const buffer = new Buffer(data);
const buffer = new Buffer(data + '\0remaining dummy data');
return new BitStream(buffer);
}

View file

@ -24,7 +24,7 @@ suite('Parser generator', () => {
});
test('Null terminated string', () => {
assertGeneratedParser('foo{s}', getStream('dummy'), {foo: 'dummy'}, 5 * 8);
assertGeneratedParser('foo{s}', getStream('dummy\0'), {foo: 'dummy'}, 6 * 8);
});
test('Boolean', () => {

View file

@ -0,0 +1,25 @@
import {BitStream} from 'bit-buffer';
import {assertEncoder, assertParser, getStream} from './PacketTest';
import {EncodeSetConVar, ParseSetConVar} from '../../../../Parser/Packet/SetConVar';
suite('SetConVar', () => {
test('Parse setConVar', () => {
assertParser(ParseSetConVar, getStream(String.fromCharCode(2) + 'foo\0bar\0second\0value\0'), {
packetType: 'setConVar',
vars: {
foo: 'bar',
second: 'value'
}
}, 8 + ('foo\0bar\0second\0value\0'.length * 8));
});
test('Encode setConVar', () => {
assertEncoder(ParseSetConVar, EncodeSetConVar, {
packetType: 'setConVar',
vars: {
foo: 'bar',
second: 'value'
}
}, 8 + ('foo\0bar\0second\0value\0'.length * 8));
});
});