mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
more granular parse modes
This commit is contained in:
parent
18883e65a9
commit
5aa5fe95fd
5 changed files with 36 additions and 16 deletions
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