@jsprismarine/raknet
Version:
Basic RakNet implementation written in TypeScript
67 lines (64 loc) • 8.25 kB
JavaScript
import BinaryStream from '@jsprismarine/jsbinaryutils';
import Packet from './Packet.es.js';
class AcknowledgePacket extends Packet {
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();
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());
}
}
export { AcknowledgePacket as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNrbm93bGVkZ2VQYWNrZXQuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm90b2NvbC9BY2tub3dsZWRnZVBhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgUGFja2V0IGZyb20gJy4vUGFja2V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNrbm93bGVkZ2VQYWNrZXQgZXh0ZW5kcyBQYWNrZXQge1xuICAgIHB1YmxpYyBzZXF1ZW5jZU51bWJlcnM6IG51bWJlcltdID0gW107XG5cbiAgICBwdWJsaWMgZGVjb2RlUGF5bG9hZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2xlYXIgb2xkIGNhY2hlZCBkZWNvZGVkIHBhY2tldHNcbiAgICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlcnMgPSBbXTtcblxuICAgICAgICBjb25zdCByZWNvcmRDb3VudCA9IHRoaXMucmVhZFVuc2lnbmVkU2hvcnQoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBub3RSYW5nZSA9IHRoaXMucmVhZEJvb2xlYW4oKTtcblxuICAgICAgICAgICAgaWYgKG5vdFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlcnMucHVzaCh0aGlzLnJlYWRVbnNpZ25lZFRyaWFkTEUoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5yZWFkVW5zaWduZWRUcmlhZExFKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5yZWFkVW5zaWduZWRUcmlhZExFKCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlcnMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZW5jb2RlUGF5bG9hZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbSgpO1xuICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVycy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5zZXF1ZW5jZU51bWJlcnMubGVuZ3RoO1xuICAgICAgICBsZXQgcmVjb3JkcyA9IDA7XG5cbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgbGV0IHBvaW50ZXIgPSAxO1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5zZXF1ZW5jZU51bWJlcnNbMF0hO1xuICAgICAgICAgICAgbGV0IGxhc3QgPSB0aGlzLnNlcXVlbmNlTnVtYmVyc1swXSE7XG5cbiAgICAgICAgICAgIHdoaWxlIChwb2ludGVyIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZXF1ZW5jZU51bWJlcnNbcG9pbnRlcisrXSE7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGN1cnJlbnQgLSBsYXN0O1xuICAgICAgICAgICAgICAgIGlmIChkaWZmID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVCb29sZWFuKHRydWUpOyAvLyBzaW5nbGU/XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFRyaWFkTEUoc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBsYXN0ID0gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZUJvb2xlYW4oZmFsc2UpOyAvLyBzaW5nbGU/XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFRyaWFkTEUoc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRUcmlhZExFKGxhc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBsYXN0ID0gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICArK3JlY29yZHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsYXN0IGl0ZXJhdGlvblxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQm9vbGVhbih0cnVlKTsgLy8gc2luZ2xlP1xuICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVHJpYWRMRShzdGFydCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZUJvb2xlYW4oZmFsc2UpOyAvLyBzaW5nbGU/XG4gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRUcmlhZExFKHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFRyaWFkTEUobGFzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK3JlY29yZHM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRTaG9ydChyZWNvcmRzKTtcbiAgICAgICAgdGhpcy53cml0ZShzdHJlYW0uZ2V0QnVmZmVyKCkpO1xuICAgIH1cbn1cbiJd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