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:
parent
628f23b216
commit
3d0aee619e
5 changed files with 40 additions and 6 deletions
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ 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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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', () => {
|
||||||
|
|
|
||||||
25
src/tests/unit/Parser/Packet/SetConVarTest.ts
Normal file
25
src/tests/unit/Parser/Packet/SetConVarTest.ts
Normal 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));
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Add table
Add a link
Reference in a new issue