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

View file

@ -2,8 +2,8 @@ import {BitStream} from 'bit-buffer';
import {SetConVarPacket} from '../../Data/Packet'; import {SetConVarPacket} from '../../Data/Packet';
export function ParseSetConVar(stream: BitStream): SetConVarPacket { // 5: setconvar export function ParseSetConVar(stream: BitStream): SetConVarPacket { // 5: setconvar
const count = stream.readBits(8); const count = stream.readUint8();
const vars: {[key: string]: string} = {}; const vars: { [key: string]: string } = {};
for (let i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
vars[stream.readUTF8String()] = stream.readUTF8String(); vars[stream.readUTF8String()] = stream.readUTF8String();
} }
@ -12,3 +12,12 @@ export function ParseSetConVar(stream: BitStream): SetConVarPacket { // 5: setco
vars, 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'; import {Encoder, Parser} from '../../../../Parser/Packet/Parser';
export function getStream(data: string) { export function getStream(data: string) {
const buffer = new Buffer(data); const buffer = new Buffer(data + '\0remaining dummy data');
return new BitStream(buffer); return new BitStream(buffer);
} }

View file

@ -24,7 +24,7 @@ suite('Parser generator', () => {
}); });
test('Null terminated string', () => { 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', () => { 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));
});
});