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 {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',
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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', () => {
|
||||
|
|
|
|||
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