deadem
Version:
JavaScript (Node.js & Browsers) parser for Deadlock (Valve Source 2 Engine) demo/replay files
73 lines (59 loc) • 2.02 kB
JavaScript
import axios from 'axios';
import { Buffer } from 'buffer';
import Assert from '#core/Assert.js';
import BroadcastFragmentType from '#data/enums/BroadcastFragmentType.js';
import Protocol from '#data/enums/Protocol.js';
class BroadcastGateway {
/**
* @constructor
* @param {String} baseUrl
* @param {Protocol} [protocol=Protocol.HTTPS]
*/
constructor(baseUrl, protocol = Protocol.HTTPS) {
Assert.isTrue(typeof baseUrl === 'string');
Assert.isTrue(protocol instanceof Protocol);
this._baseUrl = baseUrl;
this._protocol = protocol;
}
/**
* @public
* @param {number} match
* @param {BroadcastFragmentType} fragmentType
* @param {number} fragment
* @returns {Promise<Buffer>}
*/
async getFragment(match, fragmentType, fragment) {
Assert.isTrue(Number.isInteger(match) && match > 0);
Assert.isTrue(fragmentType instanceof BroadcastFragmentType);
Assert.isTrue(Number.isInteger(fragment) && fragment >= 0);
const response = await axios.get(`${this._protocol.scheme}://${this._baseUrl}/${match}/${fragment}/${fragmentType.endpoint}`, {
responseType: 'arraybuffer'
});
return Buffer.from(response.data);
}
/**
* @public
* @param {number} match
* @returns {Promise<SyncObject>}
*/
async getSync(match) {
Assert.isTrue(Number.isInteger(match) && match > 0);
const response = await axios.get(`${this._protocol.scheme}://${this._baseUrl}/${match}/sync`);
return response.data;
}
}
/**
* @typedef {Object} SyncObject
* @property {number} tick
* @property {number} endtick
* @property {number} maxtick
* @property {number} rtdelay
* @property {number} rcvage
* @property {number} fragment
* @property {number} signup_fragment
* @property {number} tps
* @property {number} keyframe_interval
* @property {string} map
* @property {number} protocol
*/
export default BroadcastGateway;