UNPKG

@jsprismarine/raknet

Version:
67 lines (64 loc) 8.25 kB
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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