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:
parent
18883e65a9
commit
5aa5fe95fd
5 changed files with 36 additions and 16 deletions
|
|
@ -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
2
package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@demostf/demo.js",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.3",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
|||
36
src/Demo.ts
36
src/Demo.ts
|
|
@ -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 [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue