UNPKG

@jsprismarine/raknet

Version:
60 lines (59 loc) 6.93 kB
import Packet from "./Packet.es.js"; import BinaryStream from "@jsprismarine/jsbinaryutils"; //#region src/protocol/AcknowledgePacket.ts var AcknowledgePacket = class extends Packet { sequenceNumbers = []; decodePayload() { this.sequenceNumbers = []; const recordCount = this.readUnsignedShort(); for (let i = 0; i < recordCount; i++) if (this.readBoolean()) this.sequenceNumbers.push(this.readUnsignedTriadLE()); else { const start = this.readUnsignedTriadLE(); const end = this.readUnsignedTriadLE(); for (let i = start; i <= end; i++) this.sequenceNumbers.push(i); } } encodePayload() { const stream = new BinaryStream(); 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()); } }; //#endregion export { AcknowledgePacket as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNrbm93bGVkZ2VQYWNrZXQuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3RvY29sL0Fja25vd2xlZGdlUGFja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCBQYWNrZXQgZnJvbSAnLi9QYWNrZXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2tub3dsZWRnZVBhY2tldCBleHRlbmRzIFBhY2tldCB7XG4gICAgcHVibGljIHNlcXVlbmNlTnVtYmVyczogbnVtYmVyW10gPSBbXTtcblxuICAgIHB1YmxpYyBkZWNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICAvLyBDbGVhciBvbGQgY2FjaGVkIGRlY29kZWQgcGFja2V0c1xuICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZENvdW50ID0gdGhpcy5yZWFkVW5zaWduZWRTaG9ydCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY29yZENvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdFJhbmdlID0gdGhpcy5yZWFkQm9vbGVhbigpO1xuXG4gICAgICAgICAgICBpZiAobm90UmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVycy5wdXNoKHRoaXMucmVhZFVuc2lnbmVkVHJpYWRMRSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnJlYWRVbnNpZ25lZFRyaWFkTEUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnJlYWRVbnNpZ25lZFRyaWFkTEUoKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVycy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlbmNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKCk7XG4gICAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXJzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnNlcXVlbmNlTnVtYmVycy5sZW5ndGg7XG4gICAgICAgIGxldCByZWNvcmRzID0gMDtcblxuICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICBsZXQgcG9pbnRlciA9IDE7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnNlcXVlbmNlTnVtYmVyc1swXSE7XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRoaXMuc2VxdWVuY2VOdW1iZXJzWzBdITtcblxuICAgICAgICAgICAgd2hpbGUgKHBvaW50ZXIgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlcXVlbmNlTnVtYmVyc1twb2ludGVyKytdITtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gY3VycmVudCAtIGxhc3Q7XG4gICAgICAgICAgICAgICAgaWYgKGRpZmYgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPT09IGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZUJvb2xlYW4odHJ1ZSk7IC8vIHNpbmdsZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVHJpYWRMRShzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxhc3QgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIHNpbmdsZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVHJpYWRMRShzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFRyaWFkTEUobGFzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxhc3QgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICsrcmVjb3JkcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxhc3QgaXRlcmF0aW9uXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGxhc3QpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVCb29sZWFuKHRydWUpOyAvLyBzaW5nbGU/XG4gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRUcmlhZExFKHN0YXJ0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIHNpbmdsZT9cbiAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFRyaWFkTEUoc3RhcnQpO1xuICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVHJpYWRMRShsYXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrcmVjb3JkcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFNob3J0KHJlY29yZHMpO1xuICAgICAgICB0aGlzLndyaXRlKHN0cmVhbS5nZXRCdWZmZXIoKSk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFHQSxJQUFxQixvQkFBckIsY0FBK0MsT0FBTztDQUNsRCxrQkFBbUMsQ0FBQztDQUVwQyxnQkFBNkI7RUFFekIsS0FBSyxrQkFBa0IsQ0FBQztFQUV4QixNQUFNLGNBQWMsS0FBSyxrQkFBa0I7RUFDM0MsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLGFBQWEsS0FHN0IsSUFGaUIsS0FBSyxZQUVsQixHQUNBLEtBQUssZ0JBQWdCLEtBQUssS0FBSyxvQkFBb0IsQ0FBQztPQUNqRDtHQUNILE1BQU0sUUFBUSxLQUFLLG9CQUFvQjtHQUN2QyxNQUFNLE1BQU0sS0FBSyxvQkFBb0I7R0FFckMsS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssS0FDMUIsS0FBSyxnQkFBZ0IsS0FBSyxDQUFDO0VBRW5DO0NBRVI7Q0FFQSxnQkFBNkI7RUFDekIsTUFBTSxTQUFTLElBQUksYUFBYTtFQUNoQyxLQUFLLGdCQUFnQixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUM7RUFDekMsTUFBTSxRQUFRLEtBQUssZ0JBQWdCO0VBQ25DLElBQUksVUFBVTtFQUVkLElBQUksUUFBUSxHQUFHO0dBQ1gsSUFBSSxVQUFVO0dBQ2QsSUFBSSxRQUFRLEtBQUssZ0JBQWdCO0dBQ2pDLElBQUksT0FBTyxLQUFLLGdCQUFnQjtHQUVoQyxPQUFPLFVBQVUsT0FBTztJQUNwQixNQUFNLFVBQVUsS0FBSyxnQkFBZ0I7SUFDckMsTUFBTSxPQUFPLFVBQVU7SUFDdkIsSUFBSSxTQUFTLEdBQ1QsT0FBTztTQUNKLElBQUksT0FBTyxHQUFHO0tBQ2pCLElBQUksVUFBVSxNQUFNO01BQ2hCLE9BQU8sYUFBYSxJQUFJO01BQ3hCLE9BQU8scUJBQXFCLEtBQUs7TUFDakMsUUFBUSxPQUFPO0tBQ25CLE9BQU87TUFDSCxPQUFPLGFBQWEsS0FBSztNQUN6QixPQUFPLHFCQUFxQixLQUFLO01BQ2pDLE9BQU8scUJBQXFCLElBQUk7TUFDaEMsUUFBUSxPQUFPO0tBQ25CO0tBQ0EsRUFBRTtJQUNOO0dBQ0o7R0FHQSxJQUFJLFVBQVUsTUFBTTtJQUNoQixPQUFPLGFBQWEsSUFBSTtJQUN4QixPQUFPLHFCQUFxQixLQUFLO0dBQ3JDLE9BQU87SUFDSCxPQUFPLGFBQWEsS0FBSztJQUN6QixPQUFPLHFCQUFxQixLQUFLO0lBQ2pDLE9BQU8scUJBQXFCLElBQUk7R0FDcEM7R0FDQSxFQUFFO0VBQ047RUFFQSxLQUFLLG1CQUFtQixPQUFPO0VBQy9CLEtBQUssTUFBTSxPQUFPLFVBQVUsQ0FBQztDQUNqQztBQUNKIn0=