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

better parsing of parserGenerator definitions

This commit is contained in:
Robin Appelman 2017-08-12 02:18:18 +02:00
commit 0f9d93b3b7
2 changed files with 14 additions and 14 deletions

View file

@ -1,4 +1,4 @@
import * as ParserGenerator from '../Packet/ParserGenerator'; import {make} from '../Packet/ParserGenerator';
import {ParseBSPDecal} from '../Packet/BSPDecal'; import {ParseBSPDecal} from '../Packet/BSPDecal';
import {ParseClassInfo} from '../Packet/ClassInfo'; import {ParseClassInfo} from '../Packet/ClassInfo';
@ -29,35 +29,35 @@ import {Packet as IPacket} from '../../Data/Packet';
export class Packet extends Parser { export class Packet extends Parser {
private static parsers: PacketParserMap = { private static parsers: PacketParserMap = {
2: ParserGenerator.make('file', 'transferId{32}fileName{s}requested{b}'), 2: make('file', 'transferId{32}fileName{s}requested{b}'),
3: ParserGenerator.make('netTick', 'tick{32}frameTime{16}stdDev{16}'), 3: make('netTick', 'tick{32}frameTime{16}stdDev{16}'),
4: ParserGenerator.make('stringCmd', 'command{s}'), 4: make('stringCmd', 'command{s}'),
5: {parser: ParseSetConVar, encoder: voidEncoder}, 5: {parser: ParseSetConVar, encoder: voidEncoder},
6: ParserGenerator.make('sigOnState', 'state{8}count{32}'), 6: make('sigOnState', 'state{8}count{32}'),
7: ParserGenerator.make('print', 'value{s}'), 7: make('print', 'value{s}'),
8: ParserGenerator.make('serverInfo', 8: make('serverInfo',
'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' + 'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' +
'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' + 'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' +
'game{s}map{s}skybox{s}serverName{s}replay{b}'), 'game{s}map{s}skybox{s}serverName{s}replay{b}'),
10: {parser: ParseClassInfo, encoder: voidEncoder}, 10: {parser: ParseClassInfo, encoder: voidEncoder},
11: ParserGenerator.make('setPause', 'paused{b}'), 11: make('setPause', 'paused{b}'),
12: {parser: ParseCreateStringTable, encoder: voidEncoder}, 12: {parser: ParseCreateStringTable, encoder: voidEncoder},
13: {parser: ParseUpdateStringTable, encoder: voidEncoder}, 13: {parser: ParseUpdateStringTable, encoder: voidEncoder},
14: {parser: ParseVoiceInit, encoder: voidEncoder}, 14: {parser: ParseVoiceInit, encoder: voidEncoder},
15: {parser: ParseVoiceData, encoder: voidEncoder}, 15: {parser: ParseVoiceData, encoder: voidEncoder},
17: {parser: ParseParseSounds, encoder: voidEncoder}, 17: {parser: ParseParseSounds, encoder: voidEncoder},
18: ParserGenerator.make('setView', 'index{11}'), 18: make('setView', 'index{11}'),
19: ParserGenerator.make('fixAngle', 'relative{b}x{16}y{16}z{16}'), 19: make('fixAngle', 'relative{b}x{16}y{16}z{16}'),
21: {parser: ParseBSPDecal, encoder: voidEncoder}, 21: {parser: ParseBSPDecal, encoder: voidEncoder},
23: {parser: ParseUserMessage, encoder: voidEncoder}, 23: {parser: ParseUserMessage, encoder: voidEncoder},
24: {parser: ParseEntityMessage, encoder: voidEncoder}, 24: {parser: ParseEntityMessage, encoder: voidEncoder},
25: {parser: ParseGameEvent, encoder: voidEncoder}, 25: {parser: ParseGameEvent, encoder: voidEncoder},
26: {parser: ParsePacketEntities, encoder: voidEncoder}, 26: {parser: ParsePacketEntities, encoder: voidEncoder},
27: {parser: ParseTempEntities, encoder: voidEncoder}, 27: {parser: ParseTempEntities, encoder: voidEncoder},
28: ParserGenerator.make('preFetch', 'index{14}'), 28: make('preFetch', 'index{14}'),
29: {parser: ParseMenu, encoder: voidEncoder}, 29: {parser: ParseMenu, encoder: voidEncoder},
30: {parser: ParseGameEventList, encoder: voidEncoder}, 30: {parser: ParseGameEventList, encoder: voidEncoder},
31: ParserGenerator.make('getCvarValue', 'cookie{32}value{s}'), 31: make('getCvarValue', 'cookie{32}value{s}'),
32: {parser: ParseCmdKeyValues, encoder: voidEncoder}, 32: {parser: ParseCmdKeyValues, encoder: voidEncoder},
}; };

View file

@ -2,10 +2,10 @@ import {Packet} from '../../Data/Packet';
import {PacketHandler, Parser} from './Parser'; import {PacketHandler, Parser} from './Parser';
export function make(name: string, definition: string): PacketHandler { export function make(name: string, definition: string): PacketHandler {
const parts = definition.substr(0, definition.length - 1).split('}'); // remove leading } to prevent empty part const parts = definition.split('}');
const items = parts.map((part) => { const items = parts.map((part) => {
return part.split('{'); return part.split('{');
}); }).filter(part => part[0]);
return { return {
parser: (stream) => { parser: (stream) => {
const result = { const result = {