1
0
Fork 0
mirror of https://github.com/demostf/demo.js synced 2026-06-03 16:44:12 +02:00

more granular parse modes

This commit is contained in:
Robin Appelman 2018-03-06 00:09:31 +01:00
commit 5aa5fe95fd
5 changed files with 36 additions and 16 deletions

View file

@ -1,3 +1,5 @@
import {ParseMode} from "../src/Demo";
const Demo = require('../index');
const fs = require('fs');
const argv = require('minimist')(process.argv.slice(2), {boolean: true});
@ -15,7 +17,7 @@ const echo = function (data) {
fs.readFile(argv._[0], function (err, data) {
if (err) throw err;
const demo = Demo.fromNodeBuffer(data);
const analyser = demo.getAnalyser(!argv.slow);
const analyser = demo.getAnalyser(argv.slow ? ParseMode.ENTITIES : ParseMode.MINIMAL);
const head = analyser.getHeader();
if (argv.head) {
echo(head);

2
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "@demostf/demo.js",
"version": "2.0.2",
"version": "2.0.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -3,6 +3,12 @@ import {Analyser} from './Analyser';
import {PacketTypeId} from './Data/Packet';
import {Parser} from './Parser';
export enum ParseMode {
MINIMAL,
ENTITIES,
COMPLETE
}
export class Demo {
public static fromNodeBuffer(nodeBuffer: Buffer) {
return new Demo(nodeBuffer.buffer as ArrayBuffer);
@ -16,19 +22,31 @@ export class Demo {
this.stream = new BitStream(arrayBuffer);
}
public getParser(fastMode: boolean = false) {
public getParser(mode: ParseMode = ParseMode.ENTITIES) {
if (!this.parser) {
const skippedPackets = fastMode ? [
PacketTypeId.packetEntities,
PacketTypeId.tempEntities,
PacketTypeId.entityMessage
] : [];
this.parser = new Parser(this.stream, skippedPackets);
this.parser = new Parser(this.stream, this.getSkippedPackets(mode));
}
return this.parser;
}
public getAnalyser(fastMode: boolean = false) {
return new Analyser(this.getParser(fastMode));
public getAnalyser(mode: ParseMode = ParseMode.ENTITIES) {
return new Analyser(this.getParser(mode));
}
private getSkippedPackets(mode: ParseMode) {
switch (mode) {
case ParseMode.MINIMAL:
return [
PacketTypeId.packetEntities,
PacketTypeId.tempEntities,
PacketTypeId.entityMessage
];
case ParseMode.ENTITIES:
return [
PacketTypeId.tempEntities
];
case ParseMode.COMPLETE:
return [];
}
}
}

View file

@ -7,7 +7,7 @@ import {createGunzip, createUnzip} from 'zlib';
import {Packet} from '../../Data/Packet';
import {EntityId, PVS} from '../../Data/PacketEntity';
import {SendPropValue} from '../../Data/SendProp';
import {Demo} from '../../Demo';
import {Demo, ParseMode} from '../../Demo';
interface ResultData {
tick: number;
@ -21,7 +21,7 @@ function writeEntities(name: string) {
const targetFile = `${__dirname}/../data/${name}_entities.json`;
const source = readFileSync(`${__dirname}/../data/${name}.dem`);
const demo = Demo.fromNodeBuffer(source);
const parser = demo.getParser(false);
const parser = demo.getParser(ParseMode.COMPLETE);
const resultData = getResultData(parser.getPackets());
@ -64,7 +64,7 @@ function testEntities(name: string, entityCount: number) {
const targetFile = `${__dirname}/../data/${name}_entities.json.gz`;
const source = readFileSync(`${__dirname}/../data/${name}.dem`);
const demo = Demo.fromNodeBuffer(source);
const parser = demo.getParser(false);
const parser = demo.getParser(ParseMode.COMPLETE);
const resultData = getResultData(parser.getPackets());

View file

@ -1,13 +1,13 @@
import * as assert from 'assert';
import {BitStream} from 'bit-buffer';
import {readFileSync} from 'fs';
import {Demo} from '../../Demo';
import {Demo, ParseMode} from '../../Demo';
function testDemo(name: string, fastMode: boolean = false) {
const target = JSON.parse(readFileSync(`${__dirname}/../data/${name}.json`, 'utf8'));
const source = readFileSync(`${__dirname}/../data/${name}.dem`);
const demo = Demo.fromNodeBuffer(source);
const analyser = demo.getAnalyser(fastMode);
const analyser = demo.getAnalyser(fastMode ? ParseMode.MINIMAL : ParseMode.COMPLETE);
const parsed = analyser.getBody().getState();
assert.deepEqual(JSON.parse(JSON.stringify(parsed)), target);
}