@jsprismarine/raknet
Version:
Basic RakNet implementation written in TypeScript
60 lines (59 loc) • 6.93 kB
JavaScript
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=