UNPKG

@jsprismarine/raknet

Version:
75 lines (68 loc) 8.62 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const BinaryStream = require('@jsprismarine/jsbinaryutils'); const protocol_Packet = require('./Packet.cjs.cjs'); const _interopDefault = e => e && e.__esModule ? e : { default: e }; const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream); class AcknowledgePacket extends protocol_Packet.default { sequenceNumbers = []; decodePayload() { this.sequenceNumbers = []; const recordCount = this.readUnsignedShort(); for (let i = 0; i < recordCount; i++) { const notRange = this.readBoolean(); if (notRange) { this.sequenceNumbers.push(this.readUnsignedTriadLE()); } else { const start = this.readUnsignedTriadLE(); const end = this.readUnsignedTriadLE(); for (let i2 = start; i2 <= end; i2++) { this.sequenceNumbers.push(i2); } } } } encodePayload() { const stream = new BinaryStream__default.default(); this.sequenceNumbers.sort((a, b) => a - b); const count = this.sequenceNumbers.length; let records = 0; if (count > 0) { let pointer = 1; let start = this.sequenceNumbers[0]; let last = this.sequenceNumbers[0]; while (pointer < count) { const current = this.sequenceNumbers[pointer++]; const diff = current - last; if (diff === 1) { last = current; } else if (diff > 1) { if (start === last) { stream.writeBoolean(true); stream.writeUnsignedTriadLE(start); start = last = current; } else { stream.writeBoolean(false); stream.writeUnsignedTriadLE(start); stream.writeUnsignedTriadLE(last); start = last = current; } ++records; } } if (start === last) { stream.writeBoolean(true); stream.writeUnsignedTriadLE(start); } else { stream.writeBoolean(false); stream.writeUnsignedTriadLE(start); stream.writeUnsignedTriadLE(last); } ++records; } this.writeUnsignedShort(records); this.write(stream.getBuffer()); } } exports.default = AcknowledgePacket; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNrbm93bGVkZ2VQYWNrZXQuY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3RvY29sL0Fja25vd2xlZGdlUGFja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCBQYWNrZXQgZnJvbSAnLi9QYWNrZXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2tub3dsZWRnZVBhY2tldCBleHRlbmRzIFBhY2tldCB7XG4gICAgcHVibGljIHNlcXVlbmNlTnVtYmVyczogbnVtYmVyW10gPSBbXTtcblxuICAgIHB1YmxpYyBkZWNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICAvLyBDbGVhciBvbGQgY2FjaGVkIGRlY29kZWQgcGFja2V0c1xuICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZENvdW50ID0gdGhpcy5yZWFkVW5zaWduZWRTaG9ydCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY29yZENvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdFJhbmdlID0gdGhpcy5yZWFkQm9vbGVhbigpO1xuXG4gICAgICAgICAgICBpZiAobm90UmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVycy5wdXNoKHRoaXMucmVhZFVuc2lnbmVkVHJpYWRMRSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnJlYWRVbnNpZ25lZFRyaWFkTEUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnJlYWRVbnNpZ25lZFRyaWFkTEUoKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVycy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlbmNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKCk7XG4gICAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXJzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnNlcXVlbmNlTnVtYmVycy5sZW5ndGg7XG4gICAgICAgIGxldCByZWNvcmRzID0gMDtcblxuICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICBsZXQgcG9pbnRlciA9IDE7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnNlcXVlbmNlTnVtYmVyc1swXSE7XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRoaXMuc2VxdWVuY2VOdW1iZXJzWzBdITtcblxuICAgICAgICAgICAgd2hpbGUgKHBvaW50ZXIgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlcXVlbmNlTnVtYmVyc1twb2ludGVyKytdITtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gY3VycmVudCAtIGxhc3Q7XG4gICAgICAgICAgICAgICAgaWYgKGRpZmYgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPT09IGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZUJvb2xlYW4odHJ1ZSk7IC8vIHNpbmdsZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVHJpYWRMRShzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxhc3QgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIHNpbmdsZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVHJpYWRMRShzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFRyaWFkTEUobGFzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxhc3QgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICsrcmVjb3JkcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxhc3QgaXRlcmF0aW9uXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGxhc3QpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVCb29sZWFuKHRydWUpOyAvLyBzaW5nbGU/XG4gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRUcmlhZExFKHN0YXJ0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIHNpbmdsZT9cbiAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFRyaWFkTEUoc3RhcnQpO1xuICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVHJpYWRMRShsYXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrcmVjb3JkcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFNob3J0KHJlY29yZHMpO1xuICAgICAgICB0aGlzLndyaXRlKHN0cmVhbS5nZXRCdWZmZXIoKSk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIlBhY2tldCIsImkiLCJCaW5hcnlTdHJlYW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsTUFBcUIsMEJBQTBCQSx1QkFBTyxDQUFBO0FBQUEsRUFDM0Msa0JBQTRCLEVBQUM7QUFBQSxFQUU3QixhQUFzQixHQUFBO0FBRXpCLElBQUEsSUFBQSxDQUFLLGtCQUFrQixFQUFDO0FBRXhCLElBQU0sTUFBQSxXQUFBLEdBQWMsS0FBSyxpQkFBa0IsRUFBQTtBQUMzQyxJQUFBLEtBQUEsSUFBUyxDQUFJLEdBQUEsQ0FBQSxFQUFHLENBQUksR0FBQSxXQUFBLEVBQWEsQ0FBSyxFQUFBLEVBQUE7QUFDbEMsTUFBTSxNQUFBLFFBQUEsR0FBVyxLQUFLLFdBQVksRUFBQTtBQUVsQyxNQUFBLElBQUksUUFBVSxFQUFBO0FBQ1YsUUFBQSxJQUFBLENBQUssZUFBZ0IsQ0FBQSxJQUFBLENBQUssSUFBSyxDQUFBLG1CQUFBLEVBQXFCLENBQUE7QUFBQSxPQUNqRCxNQUFBO0FBQ0gsUUFBTSxNQUFBLEtBQUEsR0FBUSxLQUFLLG1CQUFvQixFQUFBO0FBQ3ZDLFFBQU0sTUFBQSxHQUFBLEdBQU0sS0FBSyxtQkFBb0IsRUFBQTtBQUVyQyxRQUFBLEtBQUEsSUFBU0MsRUFBSSxHQUFBLEtBQUEsRUFBT0EsRUFBSyxJQUFBLEdBQUEsRUFBS0EsRUFBSyxFQUFBLEVBQUE7QUFDL0IsVUFBSyxJQUFBLENBQUEsZUFBQSxDQUFnQixLQUFLQSxFQUFDLENBQUE7QUFBQTtBQUMvQjtBQUNKO0FBQ0o7QUFDSixFQUVPLGFBQXNCLEdBQUE7QUFDekIsSUFBTSxNQUFBLE1BQUEsR0FBUyxJQUFJQyw2QkFBYSxFQUFBO0FBQ2hDLElBQUEsSUFBQSxDQUFLLGdCQUFnQixJQUFLLENBQUEsQ0FBQyxDQUFHLEVBQUEsQ0FBQSxLQUFNLElBQUksQ0FBQyxDQUFBO0FBQ3pDLElBQU0sTUFBQSxLQUFBLEdBQVEsS0FBSyxlQUFnQixDQUFBLE1BQUE7QUFDbkMsSUFBQSxJQUFJLE9BQVUsR0FBQSxDQUFBO0FBRWQsSUFBQSxJQUFJLFFBQVEsQ0FBRyxFQUFBO0FBQ1gsTUFBQSxJQUFJLE9BQVUsR0FBQSxDQUFBO0FBQ2QsTUFBSSxJQUFBLEtBQUEsR0FBUSxJQUFLLENBQUEsZUFBQSxDQUFnQixDQUFDLENBQUE7QUFDbEMsTUFBSSxJQUFBLElBQUEsR0FBTyxJQUFLLENBQUEsZUFBQSxDQUFnQixDQUFDLENBQUE7QUFFakMsTUFBQSxPQUFPLFVBQVUsS0FBTyxFQUFBO0FBQ3BCLFFBQU0sTUFBQSxPQUFBLEdBQVUsSUFBSyxDQUFBLGVBQUEsQ0FBZ0IsT0FBUyxFQUFBLENBQUE7QUFDOUMsUUFBQSxNQUFNLE9BQU8sT0FBVSxHQUFBLElBQUE7QUFDdkIsUUFBQSxJQUFJLFNBQVMsQ0FBRyxFQUFBO0FBQ1osVUFBTyxJQUFBLEdBQUEsT0FBQTtBQUFBLFNBQ1gsTUFBQSxJQUFXLE9BQU8sQ0FBRyxFQUFBO0FBQ2pCLFVBQUEsSUFBSSxVQUFVLElBQU0sRUFBQTtBQUNoQixZQUFBLE1BQUEsQ0FBTyxhQUFhLElBQUksQ0FBQTtBQUN4QixZQUFBLE1BQUEsQ0FBTyxxQkFBcUIsS0FBSyxDQUFBO0FBQ2pDLFlBQUEsS0FBQSxHQUFRLElBQU8sR0FBQSxPQUFBO0FBQUEsV0FDWixNQUFBO0FBQ0gsWUFBQSxNQUFBLENBQU8sYUFBYSxLQUFLLENBQUE7QUFDekIsWUFBQSxNQUFBLENBQU8scUJBQXFCLEtBQUssQ0FBQTtBQUNqQyxZQUFBLE1BQUEsQ0FBTyxxQkFBcUIsSUFBSSxDQUFBO0FBQ2hDLFlBQUEsS0FBQSxHQUFRLElBQU8sR0FBQSxPQUFBO0FBQUE7QUFFbkIsVUFBRSxFQUFBLE9BQUE7QUFBQTtBQUNOO0FBSUosTUFBQSxJQUFJLFVBQVUsSUFBTSxFQUFBO0FBQ2hCLFFBQUEsTUFBQSxDQUFPLGFBQWEsSUFBSSxDQUFBO0FBQ3hCLFFBQUEsTUFBQSxDQUFPLHFCQUFxQixLQUFLLENBQUE7QUFBQSxPQUM5QixNQUFBO0FBQ0gsUUFBQSxNQUFBLENBQU8sYUFBYSxLQUFLLENBQUE7QUFDekIsUUFBQSxNQUFBLENBQU8scUJBQXFCLEtBQUssQ0FBQTtBQUNqQyxRQUFBLE1BQUEsQ0FBTyxxQkFBcUIsSUFBSSxDQUFBO0FBQUE7QUFFcEMsTUFBRSxFQUFBLE9BQUE7QUFBQTtBQUdOLElBQUEsSUFBQSxDQUFLLG1CQUFtQixPQUFPLENBQUE7QUFDL0IsSUFBSyxJQUFBLENBQUEsS0FBQSxDQUFNLE1BQU8sQ0FBQSxTQUFBLEVBQVcsQ0FBQTtBQUFBO0FBRXJDOzs7OyJ9