UNPKG

deadem

Version:

JavaScript (Node.js & Browsers) parser for Deadlock (Valve Source 2 Engine) demo/replay files

52 lines (41 loc) 1.19 kB
import Assert from '#core/Assert.js'; import TransformStream from '#core/stream/TransformStream.js'; /** * Balances stream processing load by periodically yielding control back to * the event loop, preventing long blocking operations and allowing * garbage collection to proceed smoothly. */ class DemoStreamLoadBalancer extends TransformStream { /** * @public * @constructor * @param {ParserEngine} engine * @param {number} breakInterval */ constructor(engine, breakInterval) { super(); Assert.isTrue(Number.isInteger(breakInterval) && breakInterval > 0); this._engine = engine; this._breakInterval = breakInterval; this._counter = 0; } /** * @public * @param {DemoPacketRaw} demoPacketRaw */ async _handle(demoPacketRaw) { this._counter += 1; if (this._counter % this._breakInterval === 0) { await pauseTimeout(0); } this._push(demoPacketRaw); } } function pauseTimeout(ms) { return new Promise((resolve) => { setTimeout(() => { resolve(); }, ms); }); } export default DemoStreamLoadBalancer;