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

skip null message

This commit is contained in:
Robin Appelman 2017-10-24 23:34:24 +02:00
commit f94788db18
2 changed files with 25 additions and 22 deletions

View file

@ -1,7 +1,7 @@
{ {
"name": "tf2-demo", "name": "tf2-demo",
"description": "A parser for TF2 demo files", "description": "A parser for TF2 demo files",
"version": "1.1.4", "version": "1.1.5",
"bin": { "bin": {
"demo-analyse": "./bin/analyse.js" "demo-analyse": "./bin/analyse.js"
}, },

View file

@ -7,7 +7,7 @@ import {BitStream} from 'bit-buffer';
import {EventEmitter} from 'events'; import {EventEmitter} from 'events';
import {Match} from './Data/Match'; import {Match} from './Data/Match';
import {Parser as MessageParser} from './Parser/Message/Parser'; import {Parser as MessageParser} from './Parser/Message/Parser';
import {Header} from "./Data/Header"; import {Header} from './Data/Header';
export class Parser extends EventEmitter { export class Parser extends EventEmitter {
stream: BitStream; stream: BitStream;
@ -17,7 +17,7 @@ export class Parser extends EventEmitter {
constructor(stream: BitStream, skipPackets: PacketType[] = []) { constructor(stream: BitStream, skipPackets: PacketType[] = []) {
super(); super();
this.stream = stream; this.stream = stream;
this.match = new Match(); this.match = new Match();
this.on('packet', this.match.handlePacket.bind(this.match)); this.on('packet', this.match.handlePacket.bind(this.match));
this.skipPackets = skipPackets; this.skipPackets = skipPackets;
} }
@ -28,18 +28,18 @@ export class Parser extends EventEmitter {
parseHeader(stream): Header { parseHeader(stream): Header {
return { return {
'type': stream.readASCIIString(8), 'type': stream.readASCIIString(8),
'version': stream.readInt32(), 'version': stream.readInt32(),
'protocol': stream.readInt32(), 'protocol': stream.readInt32(),
'server': stream.readASCIIString(260), 'server': stream.readASCIIString(260),
'nick': stream.readASCIIString(260), 'nick': stream.readASCIIString(260),
'map': stream.readASCIIString(260), 'map': stream.readASCIIString(260),
'game': stream.readASCIIString(260), 'game': stream.readASCIIString(260),
'duration': stream.readFloat32(), 'duration': stream.readFloat32(),
'ticks': stream.readInt32(), 'ticks': stream.readInt32(),
'frames': stream.readInt32(), 'frames': stream.readInt32(),
'sigon': stream.readInt32() 'sigon': stream.readInt32()
} };
} }
parseBody() { parseBody() {
@ -74,7 +74,7 @@ export class Parser extends EventEmitter {
case MessageType.StringTables: case MessageType.StringTables:
return new StringTable(type, tick, data, length, match, this.skipPackets); return new StringTable(type, tick, data, length, match, this.skipPackets);
default: default:
throw new Error("unknown message type"); throw new Error('unknown message type');
} }
} }
@ -90,11 +90,14 @@ export class Parser extends EventEmitter {
} }
} }
readMessage(stream: BitStream, match: Match): MessageParser|boolean { readMessage(stream: BitStream, match: Match): MessageParser | boolean {
if (stream.bitsLeft < 8) { if (stream.bitsLeft < 8) {
return false; return false;
} }
const type: MessageType = stream.readBits(8); const type: MessageType = stream.readBits(8);
if (type === 0) {
return true;
}
if (type === MessageType.Stop) { if (type === MessageType.Stop) {
return false; return false;
} }
@ -137,12 +140,12 @@ export class Parser extends EventEmitter {
} }
export enum MessageType { export enum MessageType {
Sigon = 1, Sigon = 1,
Packet = 2, Packet = 2,
SyncTick = 3, SyncTick = 3,
ConsoleCmd = 4, ConsoleCmd = 4,
UserCmd = 5, UserCmd = 5,
DataTables = 6, DataTables = 6,
Stop = 7, Stop = 7,
StringTables = 8 StringTables = 8
} }