mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
lint
This commit is contained in:
parent
e3388561ca
commit
787c6a0279
21 changed files with 118 additions and 115 deletions
|
|
@ -76,19 +76,6 @@ export class ParserState {
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
private handleDataTableMessage(message: DataTablesMessage) {
|
|
||||||
for (const table of message.tables) {
|
|
||||||
this.sendTables.set(table.name, table);
|
|
||||||
}
|
|
||||||
this.serverClasses = message.serverClasses;
|
|
||||||
}
|
|
||||||
|
|
||||||
private handleStringTableMessage(message: StringTablesMessage) {
|
|
||||||
for (const table of message.tables) {
|
|
||||||
handleTable(table, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public getUserEntityInfo(userId: number): UserEntityInfo {
|
public getUserEntityInfo(userId: number): UserEntityInfo {
|
||||||
const info = this.userInfo.get(userId);
|
const info = this.userInfo.get(userId);
|
||||||
if (info) {
|
if (info) {
|
||||||
|
|
@ -101,6 +88,19 @@ export class ParserState {
|
||||||
entityId: 0
|
entityId: 0
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private handleDataTableMessage(message: DataTablesMessage) {
|
||||||
|
for (const table of message.tables) {
|
||||||
|
this.sendTables.set(table.name, table);
|
||||||
|
}
|
||||||
|
this.serverClasses = message.serverClasses;
|
||||||
|
}
|
||||||
|
|
||||||
|
private handleStringTableMessage(message: StringTablesMessage) {
|
||||||
|
for (const table of message.tables) {
|
||||||
|
handleTable(table, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getClassBits(state: ParserState) {
|
export function getClassBits(state: ParserState) {
|
||||||
|
|
|
||||||
|
|
@ -2,20 +2,6 @@ import {SendPropDefinition} from './SendPropDefinition';
|
||||||
import {Vector} from './Vector';
|
import {Vector} from './Vector';
|
||||||
|
|
||||||
export class SendProp {
|
export class SendProp {
|
||||||
public definition: SendPropDefinition;
|
|
||||||
public value: SendPropValue | null;
|
|
||||||
|
|
||||||
constructor(definition: SendPropDefinition) {
|
|
||||||
this.definition = definition;
|
|
||||||
this.value = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public clone(): SendProp {
|
|
||||||
const prop = new SendProp(this.definition);
|
|
||||||
prop.value = this.value;
|
|
||||||
return prop;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static areEqual(a: SendProp, b: SendProp) {
|
public static areEqual(a: SendProp, b: SendProp) {
|
||||||
return a.definition.fullName !== b.definition.fullName ? false : SendProp.valuesAreEqual(a.value, b.value);
|
return a.definition.fullName !== b.definition.fullName ? false : SendProp.valuesAreEqual(a.value, b.value);
|
||||||
}
|
}
|
||||||
|
|
@ -37,6 +23,20 @@ export class SendProp {
|
||||||
return a === b;
|
return a === b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public definition: SendPropDefinition;
|
||||||
|
public value: SendPropValue | null;
|
||||||
|
|
||||||
|
constructor(definition: SendPropDefinition) {
|
||||||
|
this.definition = definition;
|
||||||
|
this.value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public clone(): SendProp {
|
||||||
|
const prop = new SendProp(this.definition);
|
||||||
|
prop.value = this.value;
|
||||||
|
return prop;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type SendPropArrayValue = Vector | number | string;
|
export type SendPropArrayValue = Vector | number | string;
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ export interface BaseDataUserPacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SayText2Packet {
|
export interface SayText2Packet {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'sayText2';
|
userMessageType: 'sayText2';
|
||||||
client: number;
|
client: number;
|
||||||
raw: number;
|
raw: number;
|
||||||
|
|
@ -83,24 +83,24 @@ export enum HudTextLocation {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TextMessagePacket {
|
export interface TextMessagePacket {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'textMsg';
|
userMessageType: 'textMsg';
|
||||||
destType: HudTextLocation;
|
destType: HudTextLocation;
|
||||||
text: string;
|
text: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ResetHUDPacket extends BaseDataUserPacket {
|
export interface ResetHUDPacket extends BaseDataUserPacket {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'resetHUD';
|
userMessageType: 'resetHUD';
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TrainPacket extends BaseDataUserPacket {
|
export interface TrainPacket extends BaseDataUserPacket {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'train';
|
userMessageType: 'train';
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface VoiceSubtitlePacket {
|
export interface VoiceSubtitlePacket {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'voiceSubtitle';
|
userMessageType: 'voiceSubtitle';
|
||||||
client: number;
|
client: number;
|
||||||
menu: number;
|
menu: number;
|
||||||
|
|
@ -108,7 +108,7 @@ export interface VoiceSubtitlePacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ShakePacket {
|
export interface ShakePacket {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'shake';
|
userMessageType: 'shake';
|
||||||
command: number;
|
command: number;
|
||||||
amplitude: number;
|
amplitude: number;
|
||||||
|
|
@ -122,12 +122,12 @@ export interface UnknownUserMessageBasePacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface BreakModelPumpkinPacket extends UnknownUserMessageBasePacket {
|
export interface BreakModelPumpkinPacket extends UnknownUserMessageBasePacket {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'breakModelPumpkin';
|
userMessageType: 'breakModelPumpkin';
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GenericUnknownUserMessagePacket extends UnknownUserMessageBasePacket {
|
export interface GenericUnknownUserMessagePacket extends UnknownUserMessageBasePacket {
|
||||||
packetType: 'userMessage',
|
packetType: 'userMessage';
|
||||||
userMessageType: 'unknownUserMessage';
|
userMessageType: 'unknownUserMessage';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
export class Vector {
|
export class Vector {
|
||||||
|
public static areEqual(a: Vector, b: Vector) {
|
||||||
|
return a.x === b.x && a.y === b.y && a.z === b.z;
|
||||||
|
}
|
||||||
|
|
||||||
public x: number;
|
public x: number;
|
||||||
public y: number;
|
public y: number;
|
||||||
public z: number;
|
public z: number;
|
||||||
|
|
@ -8,8 +12,4 @@ export class Vector {
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static areEqual(a: Vector, b: Vector) {
|
|
||||||
return a.x === b.x && a.y === b.y && a.z === b.z;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
|
import {GameEventDefinition} from '../Data/GameEvent';
|
||||||
|
import {GameEventType} from '../Data/GameEventTypes';
|
||||||
import {GameEventListPacket} from '../Data/Packet';
|
import {GameEventListPacket} from '../Data/Packet';
|
||||||
import {ParserState} from '../Data/ParserState';
|
import {ParserState} from '../Data/ParserState';
|
||||||
import {GameEventType} from '../Data/GameEventTypes';
|
|
||||||
import {GameEventDefinition} from '../Data/GameEvent';
|
|
||||||
|
|
||||||
export function handleGameEventList(packet: GameEventListPacket, state: ParserState) {
|
export function handleGameEventList(packet: GameEventListPacket, state: ParserState) {
|
||||||
state.eventDefinitions = packet.eventList;
|
state.eventDefinitions = packet.eventList;
|
||||||
|
|
||||||
const entries: ([number, GameEventDefinition<GameEventType>])[] = Array.from(packet.eventList.entries());
|
const entries: Array<[number, GameEventDefinition<GameEventType>]> = Array.from(packet.eventList.entries());
|
||||||
const reversedEntries = entries.map(([type, definition]) => [definition.name, type]) as [GameEventType, number][];
|
const reversedEntries = entries.map(([type, definition]) => [definition.name, type]) as Array<[GameEventType, number]>;
|
||||||
state.eventDefinitionTypes = new Map(reversedEntries);
|
state.eventDefinitionTypes = new Map(reversedEntries);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
|
import {BitStream} from 'bit-buffer';
|
||||||
import {CreateStringTablePacket, StringTablePacket, UpdateStringTablePacket} from '../Data/Packet';
|
import {CreateStringTablePacket, StringTablePacket, UpdateStringTablePacket} from '../Data/Packet';
|
||||||
import {ParserState} from '../Data/ParserState';
|
import {ParserState} from '../Data/ParserState';
|
||||||
import {StringTable, StringTableEntry} from '../Data/StringTable';
|
import {StringTable, StringTableEntry} from '../Data/StringTable';
|
||||||
import {UserEntityInfo, UserInfo} from '../Data/UserInfo';
|
import {UserEntityInfo, UserInfo} from '../Data/UserInfo';
|
||||||
import {BitStream} from 'bit-buffer';
|
|
||||||
|
|
||||||
export function handleStringTable(packet: CreateStringTablePacket, state: ParserState) {
|
export function handleStringTable(packet: CreateStringTablePacket, state: ParserState) {
|
||||||
handleTable(packet.table, state);
|
handleTable(packet.table, state);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import {Header} from './Data/Header';
|
||||||
import {Message, MessageHandler, MessageType, PacketMessage} from './Data/Message';
|
import {Message, MessageHandler, MessageType, PacketMessage} from './Data/Message';
|
||||||
import {Packet, PacketTypeId} from './Data/Packet';
|
import {Packet, PacketTypeId} from './Data/Packet';
|
||||||
import {ParserState} from './Data/ParserState';
|
import {ParserState} from './Data/ParserState';
|
||||||
|
import {parseHeader} from './Parser/Header';
|
||||||
import {ConsoleCmdHandler} from './Parser/Message/ConsoleCmd';
|
import {ConsoleCmdHandler} from './Parser/Message/ConsoleCmd';
|
||||||
import {DataTableHandler} from './Parser/Message/DataTable';
|
import {DataTableHandler} from './Parser/Message/DataTable';
|
||||||
import {PacketMessageHandler} from './Parser/Message/Packet';
|
import {PacketMessageHandler} from './Parser/Message/Packet';
|
||||||
|
|
@ -10,7 +11,6 @@ import {StopHandler} from './Parser/Message/Stop';
|
||||||
import {StringTableHandler} from './Parser/Message/StringTable';
|
import {StringTableHandler} from './Parser/Message/StringTable';
|
||||||
import {SyncTickHandler} from './Parser/Message/SyncTick';
|
import {SyncTickHandler} from './Parser/Message/SyncTick';
|
||||||
import {UserCmdHandler} from './Parser/Message/UserCmd';
|
import {UserCmdHandler} from './Parser/Message/UserCmd';
|
||||||
import {parseHeader} from './Parser/Header';
|
|
||||||
|
|
||||||
export const messageHandlers: Map<MessageType, MessageHandler<Message>> = new Map<MessageType, MessageHandler<Message>>([
|
export const messageHandlers: Map<MessageType, MessageHandler<Message>> = new Map<MessageType, MessageHandler<Message>>([
|
||||||
[MessageType.Sigon, PacketMessageHandler],
|
[MessageType.Sigon, PacketMessageHandler],
|
||||||
|
|
@ -50,6 +50,17 @@ export class Parser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public * getMessages(): IterableIterator<Message> {
|
||||||
|
// ensure that we are past the header
|
||||||
|
this.getHeader();
|
||||||
|
for (const message of this.iterateMessages()) {
|
||||||
|
for (const _ of this.handleMessage(message)) {
|
||||||
|
// noop, loop needed to "drain" iterator
|
||||||
|
}
|
||||||
|
yield message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected * iterateMessages(): Iterable<Message> {
|
protected * iterateMessages(): Iterable<Message> {
|
||||||
while (true) {
|
while (true) {
|
||||||
const message = this.readMessage(this.stream, this.parserState);
|
const message = this.readMessage(this.stream, this.parserState);
|
||||||
|
|
@ -60,18 +71,6 @@ export class Parser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public * getMessages(): IterableIterator<Message> {
|
|
||||||
// ensure that we are past the header
|
|
||||||
this.getHeader();
|
|
||||||
for (const message of this.iterateMessages()) {
|
|
||||||
for (const _ of this.handleMessage(message)) {
|
|
||||||
//noop
|
|
||||||
}
|
|
||||||
// console.log(message.type);
|
|
||||||
yield message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected * handleMessage(message: Message): Iterable<Packet> {
|
protected * handleMessage(message: Message): Iterable<Packet> {
|
||||||
this.parserState.handleMessage(message);
|
this.parserState.handleMessage(message);
|
||||||
if (message.type === MessageType.Packet) {
|
if (message.type === MessageType.Packet) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import {Header} from '../Data/Header';
|
|
||||||
import {BitStream} from 'bit-buffer';
|
import {BitStream} from 'bit-buffer';
|
||||||
|
import {Header} from '../Data/Header';
|
||||||
|
|
||||||
export function parseHeader(stream: BitStream): Header {
|
export function parseHeader(stream: BitStream): Header {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import {CreateStringTablePacket} from '../../Data/Packet';
|
||||||
import {logBase2} from '../../Math';
|
import {logBase2} from '../../Math';
|
||||||
import {readVarInt, writeVarInt} from '../readBitVar';
|
import {readVarInt, writeVarInt} from '../readBitVar';
|
||||||
|
|
||||||
import {uncompress, compress} from 'snappyjs';
|
import {compress, uncompress} from 'snappyjs';
|
||||||
import {StringTable} from '../../Data/StringTable';
|
import {StringTable} from '../../Data/StringTable';
|
||||||
import {encodeStringTableEntries, guessStringTableEntryLength, parseStringTableEntries} from '../StringTableParser';
|
import {encodeStringTableEntries, guessStringTableEntryLength, parseStringTableEntries} from '../StringTableParser';
|
||||||
|
|
||||||
|
|
@ -84,7 +84,7 @@ export function EncodeCreateStringTable(packet: CreateStringTablePacket, stream:
|
||||||
entryData.writeUint32(decompressedByteLength);
|
entryData.writeUint32(decompressedByteLength);
|
||||||
entryData.writeUint32(compressedData.byteLength + 4); // 4 magic bytes
|
entryData.writeUint32(compressedData.byteLength + 4); // 4 magic bytes
|
||||||
entryData.writeASCIIString('SNAP', 4);
|
entryData.writeASCIIString('SNAP', 4);
|
||||||
let typeForce: any = compressedData.buffer;
|
const typeForce: any = compressedData.buffer;
|
||||||
entryData.writeArrayBuffer(typeForce as BitStream);
|
entryData.writeArrayBuffer(typeForce as BitStream);
|
||||||
}
|
}
|
||||||
const entryLength = entryData.index;
|
const entryLength = entryData.index;
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,18 @@
|
||||||
import {BitStream} from 'bit-buffer';
|
import {BitStream} from 'bit-buffer';
|
||||||
import {Packet, PacketMapType, PacketType} from '../../Data/Packet';
|
import {Packet, PacketMapType, PacketType} from '../../Data/Packet';
|
||||||
import {Encoder, PacketHandler, Parser} from './Parser';
|
|
||||||
import {UserMessagePacketType} from '../../Data/UserMessage';
|
import {UserMessagePacketType} from '../../Data/UserMessage';
|
||||||
|
import {Encoder, PacketHandler, Parser} from './Parser';
|
||||||
|
|
||||||
export interface NamedPacketHandler<P extends Packet, N extends PacketType | UserMessagePacketType> extends PacketHandler<P> {
|
export interface NamedPacketHandler<P extends Packet, N extends PacketType | UserMessagePacketType> extends PacketHandler<P> {
|
||||||
name: N;
|
name: N;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function make<T extends PacketType | UserMessagePacketType>(name: T, definition: string, nameKey: string = 'packetType', extraData: any = {}): NamedPacketHandler<PacketMapType[T], T> {
|
export function make<T extends PacketType | UserMessagePacketType>(
|
||||||
|
name: T,
|
||||||
|
definition: string,
|
||||||
|
nameKey: string = 'packetType',
|
||||||
|
extraData: any = {}
|
||||||
|
): NamedPacketHandler<PacketMapType[T], T> {
|
||||||
const parts = definition.split('}');
|
const parts = definition.split('}');
|
||||||
const items = parts.map((part) => {
|
const items = parts.map((part) => {
|
||||||
return part.split('{');
|
return part.split('{');
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,9 @@ import {
|
||||||
import {EncodeSayText2, ParseSayText2} from '../UserMessage/SayText2';
|
import {EncodeSayText2, ParseSayText2} from '../UserMessage/SayText2';
|
||||||
import {make, NamedPacketHandler} from './ParserGenerator';
|
import {make, NamedPacketHandler} from './ParserGenerator';
|
||||||
|
|
||||||
function unknownPacketHandler<T extends UnknownUserMessagePacket['userMessageType']>(userMessageType: T): NamedPacketHandler<UserMessageTypeMap[T], UserMessagePacketType> {
|
type UnknownType = UnknownUserMessagePacket['userMessageType'];
|
||||||
|
|
||||||
|
function unknownPacketHandler<T extends UnknownType>(userMessageType: T): NamedPacketHandler<UserMessageTypeMap[T], UserMessagePacketType> {
|
||||||
return {
|
return {
|
||||||
parser: (data: BitStream) => {
|
parser: (data: BitStream) => {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,12 @@ export function guessStringTableEntryLength(table: StringTable, entries: StringT
|
||||||
}, 1);
|
}, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function encodeStringTableEntries(stream: BitStream, table: StringTable, entries: StringTableEntry[], oldEntries: StringTableEntry[] = []) {
|
export function encodeStringTableEntries(
|
||||||
|
stream: BitStream,
|
||||||
|
table: StringTable,
|
||||||
|
entries: StringTableEntry[],
|
||||||
|
oldEntries: StringTableEntry[] = []
|
||||||
|
) {
|
||||||
const entryBits = logBase2(table.maxEntries);
|
const entryBits = logBase2(table.maxEntries);
|
||||||
let lastIndex = -1;
|
let lastIndex = -1;
|
||||||
const history: StringTableEntry[] = [];
|
const history: StringTableEntry[] = [];
|
||||||
|
|
@ -128,7 +133,6 @@ export function encodeStringTableEntries(stream: BitStream, table: StringTable,
|
||||||
stream.writeBoolean(false);
|
stream.writeBoolean(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (entry.extraData) {
|
if (entry.extraData) {
|
||||||
stream.writeBoolean(true);
|
stream.writeBoolean(true);
|
||||||
|
|
||||||
|
|
@ -145,7 +149,6 @@ export function encodeStringTableEntries(stream: BitStream, table: StringTable,
|
||||||
stream.writeBoolean(false);
|
stream.writeBoolean(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
history.push(entry);
|
history.push(entry);
|
||||||
if (history.length > 32) {
|
if (history.length > 32) {
|
||||||
history.shift();
|
history.shift();
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import {BitStream} from 'bit-buffer';
|
import {BitStream} from 'bit-buffer';
|
||||||
import {Parser} from './Parser';
|
|
||||||
import {Encoder} from './Encoder';
|
|
||||||
import {Packet} from './Data/Packet';
|
|
||||||
import {Message, MessageType} from './Data/Message';
|
import {Message, MessageType} from './Data/Message';
|
||||||
|
import {Packet} from './Data/Packet';
|
||||||
|
import {Encoder} from './Encoder';
|
||||||
|
import {Parser} from './Parser';
|
||||||
|
|
||||||
export type PacketTransform = (packet: Packet) => Packet;
|
export type PacketTransform = (packet: Packet) => Packet;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import {BitStream} from 'bit-buffer';
|
import {BitStream} from 'bit-buffer';
|
||||||
import {readFileSync, statSync, writeFileSync} from 'fs';
|
import {readFileSync, statSync, writeFileSync} from 'fs';
|
||||||
import {DynamicBitStream} from '../../DynamicBitStream';
|
|
||||||
import {MessageTransform, nullTransform, PacketTransform, Transformer} from '../../Transformer';
|
|
||||||
import {Parser} from '../../Parser';
|
|
||||||
import {Analyser} from '../../Analyser';
|
import {Analyser} from '../../Analyser';
|
||||||
import {Encoder} from '../../Encoder';
|
|
||||||
import {Packet} from '../../Data/Packet';
|
import {Packet} from '../../Data/Packet';
|
||||||
|
import {DynamicBitStream} from '../../DynamicBitStream';
|
||||||
|
import {Encoder} from '../../Encoder';
|
||||||
|
import {Parser} from '../../Parser';
|
||||||
|
import {MessageTransform, nullTransform, PacketTransform, Transformer} from '../../Transformer';
|
||||||
|
|
||||||
function testDemo(name: string, packetTransform: PacketTransform, messageTransform: MessageTransform) {
|
function testDemo(name: string, packetTransform: PacketTransform, messageTransform: MessageTransform) {
|
||||||
const decodeStream = new BitStream(
|
const decodeStream = new BitStream(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import {BitStream} from 'bit-buffer';
|
import {BitStream} from 'bit-buffer';
|
||||||
import {assertEncoder, assertParser, assertReEncode, getStream} from './Packet/PacketTest';
|
|
||||||
import {encodeHeader, parseHeader} from '../../../Parser/Header';
|
import {encodeHeader, parseHeader} from '../../../Parser/Header';
|
||||||
|
import {assertEncoder, assertParser, assertReEncode, getStream} from './Packet/PacketTest';
|
||||||
|
|
||||||
const data = [
|
const data = [
|
||||||
72, 76, 50, 68,
|
72, 76, 50, 68,
|
||||||
|
|
@ -361,38 +361,37 @@ const data = [
|
||||||
147, 25, 115, 17
|
147, 25, 115, 17
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
suite('Header', () => {
|
suite('Header', () => {
|
||||||
test('Parse header', () => {
|
test('Parse header', () => {
|
||||||
assertParser(parseHeader, getStream(data), {
|
assertParser(parseHeader, getStream(data), {
|
||||||
'type': 'HL2DEMO',
|
type: 'HL2DEMO',
|
||||||
'version': 3,
|
version: 3,
|
||||||
'protocol': 24,
|
protocol: 24,
|
||||||
'server': 'FakkelBrigade #1 (#712133)',
|
server: 'FakkelBrigade #1 (#712133)',
|
||||||
'nick': 'SourceTV Demo',
|
nick: 'SourceTV Demo',
|
||||||
'map': 'cp_prolands_b2c',
|
map: 'cp_prolands_b2c',
|
||||||
'game': 'tf',
|
game: 'tf',
|
||||||
'duration': 515.1900024414062,
|
duration: 515.1900024414062,
|
||||||
'ticks': 34346,
|
ticks: 34346,
|
||||||
'frames': 34334,
|
frames: 34334,
|
||||||
'sigon': 808977
|
sigon: 808977
|
||||||
}
|
}
|
||||||
, 8576);
|
, 8576);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Encode header', () => {
|
test('Encode header', () => {
|
||||||
assertEncoder(parseHeader, encodeHeader, {
|
assertEncoder(parseHeader, encodeHeader, {
|
||||||
'type': 'HL2DEMO',
|
type: 'HL2DEMO',
|
||||||
'version': 3,
|
version: 3,
|
||||||
'protocol': 24,
|
protocol: 24,
|
||||||
'server': 'FakkelBrigade #1 (#712133)',
|
server: 'FakkelBrigade #1 (#712133)',
|
||||||
'nick': 'SourceTV Demo',
|
nick: 'SourceTV Demo',
|
||||||
'map': 'cp_prolands_b2c',
|
map: 'cp_prolands_b2c',
|
||||||
'game': 'tf',
|
game: 'tf',
|
||||||
'duration': 515.1900024414062,
|
duration: 515.1900024414062,
|
||||||
'ticks': 34346,
|
ticks: 34346,
|
||||||
'frames': 34334,
|
frames: 34334,
|
||||||
'sigon': 808977
|
sigon: 808977
|
||||||
}
|
}
|
||||||
, 8576);
|
, 8576);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -47,12 +47,12 @@ suite('DataTable', () => {
|
||||||
|
|
||||||
test('Encode DataTable message', () => {
|
test('Encode DataTable message', () => {
|
||||||
const source = getStream(data);
|
const source = getStream(data);
|
||||||
const expected = parser(source);
|
const expectedResult = parser(source);
|
||||||
|
|
||||||
const length = 947888;
|
const length = 947888;
|
||||||
const stream = new BitStream(new ArrayBuffer(length + 64000));
|
const stream = new BitStream(new ArrayBuffer(length + 64000));
|
||||||
|
|
||||||
encoder(expected, stream);
|
encoder(expectedResult, stream);
|
||||||
|
|
||||||
const pos = stream.index;
|
const pos = stream.index;
|
||||||
|
|
||||||
|
|
@ -63,9 +63,9 @@ suite('DataTable', () => {
|
||||||
stream.index = 0;
|
stream.index = 0;
|
||||||
|
|
||||||
const result = parser(stream);
|
const result = parser(stream);
|
||||||
assert.deepEqual(result.serverClasses, expected.serverClasses, 'Re-decoded value not equal to original value');
|
assert.deepEqual(result.serverClasses, expectedResult.serverClasses, 'Re-decoded value not equal to original value');
|
||||||
assert.deepEqual(result.tick, expected.tick, 'Re-decoded value not equal to original value');
|
assert.deepEqual(result.tick, expectedResult.tick, 'Re-decoded value not equal to original value');
|
||||||
assert.deepEqual(result.type, expected.type, 'Re-decoded value not equal to original value');
|
assert.deepEqual(result.type, expectedResult.type, 'Re-decoded value not equal to original value');
|
||||||
for (let i = 0; i < result.tables.length; i++) {
|
for (let i = 0; i < result.tables.length; i++) {
|
||||||
const resultTable = result.tables[i];
|
const resultTable = result.tables[i];
|
||||||
const expectedTable = expectedRaw.tables[i];
|
const expectedTable = expectedRaw.tables[i];
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,8 @@ suite('Packet', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Encode first packet message', () => {
|
test('Encode first packet message', () => {
|
||||||
const expected = parser(new BitStream(firstPacketData));
|
const expectedResult = parser(new BitStream(firstPacketData));
|
||||||
assertEncoder(parser, encoder, expected, 1032952, '');
|
assertEncoder(parser, encoder, expectedResult, 1032952, '');
|
||||||
});
|
});
|
||||||
|
|
||||||
// test('Re-encode first packet message', () => {
|
// test('Re-encode first packet message', () => {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import {
|
||||||
} from '../../../../Parser/Packet/BSPDecal';
|
} from '../../../../Parser/Packet/BSPDecal';
|
||||||
import {SendPropEncoder} from '../../../../Parser/SendPropEncoder';
|
import {SendPropEncoder} from '../../../../Parser/SendPropEncoder';
|
||||||
import {SendPropParser} from '../../../../Parser/SendPropParser';
|
import {SendPropParser} from '../../../../Parser/SendPropParser';
|
||||||
import {assertEncoder, assertParser, getStream, assertReEncode} from './PacketTest';
|
import {assertEncoder, assertParser, assertReEncode, getStream} from './PacketTest';
|
||||||
|
|
||||||
const data = [239, 236, 208, 85, 33, 127, 128, 9, 8];
|
const data = [239, 236, 208, 85, 33, 127, 128, 9, 8];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ function getExistingParserState() {
|
||||||
maxEntries: 2048,
|
maxEntries: 2048,
|
||||||
fixedUserDataSize: 1,
|
fixedUserDataSize: 1,
|
||||||
fixedUserDataSizeBits: 1,
|
fixedUserDataSizeBits: 1,
|
||||||
compressed: false,
|
compressed: false
|
||||||
};
|
};
|
||||||
existingTable.entries[70] = {text: 'maps\\pl_badwater_pro_v9.bsp'};
|
existingTable.entries[70] = {text: 'maps\\pl_badwater_pro_v9.bsp'};
|
||||||
const state = createParserState();
|
const state = createParserState();
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import {BitStream} from 'bit-buffer';
|
import {BitStream} from 'bit-buffer';
|
||||||
import {assertEncoder, assertParser, assertReEncode} from './Packet/PacketTest';
|
|
||||||
import {readFileSync} from 'fs';
|
import {readFileSync} from 'fs';
|
||||||
import {encodeStringTableEntries, parseStringTableEntries} from '../../../Parser/StringTableParser';
|
|
||||||
import {StringTableEntry} from '../../../Data/StringTable';
|
import {StringTableEntry} from '../../../Data/StringTable';
|
||||||
|
import {encodeStringTableEntries, parseStringTableEntries} from '../../../Parser/StringTableParser';
|
||||||
|
import {assertEncoder, assertParser, assertReEncode, getStream} from './Packet/PacketTest';
|
||||||
|
|
||||||
const baseTable = {
|
const baseTable = {
|
||||||
name: 'modelprecache',
|
name: 'modelprecache',
|
||||||
|
|
@ -16,7 +16,6 @@ const baseTable = {
|
||||||
const data = readFileSync(__dirname + '/../../data/stringTableEntries.bin');
|
const data = readFileSync(__dirname + '/../../data/stringTableEntries.bin');
|
||||||
|
|
||||||
function ParseUpdate(stream: BitStream) {
|
function ParseUpdate(stream: BitStream) {
|
||||||
//981
|
|
||||||
return parseStringTableEntries(stream, baseTable, 981);
|
return parseStringTableEntries(stream, baseTable, 981);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -25,10 +24,6 @@ function EncodeUpdate(entries: StringTableEntry[], stream: BitStream) {
|
||||||
}
|
}
|
||||||
|
|
||||||
suite('string table parser', () => {
|
suite('string table parser', () => {
|
||||||
// test('Parse string table entries', () => {
|
|
||||||
// assertParser(ParseUpdate, getStream(exampleData), examplePacket, 41);
|
|
||||||
// });
|
|
||||||
|
|
||||||
test('Encode string table entries', () => {
|
test('Encode string table entries', () => {
|
||||||
const expected = ParseUpdate(new BitStream(data));
|
const expected = ParseUpdate(new BitStream(data));
|
||||||
assertEncoder(ParseUpdate, EncodeUpdate, expected);
|
assertEncoder(ParseUpdate, EncodeUpdate, expected);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue