@jsprismarine/raknet
Version:
Basic RakNet implementation written in TypeScript
37 lines (34 loc) • 3.77 kB
JavaScript
import { BitFlags } from './BitFlags.es.js';
import Frame from './Frame.es.js';
import Packet from './Packet.es.js';
const DATAGRAM_HEADER_BYTE_LENGTH = 6;
class FrameSet extends Packet {
constructor(buffer) {
super(BitFlags.VALID, buffer);
}
sequenceNumber;
frames = [];
decodePayload() {
this.sequenceNumber = this.readUnsignedTriadLE();
do {
this.frames.push(new Frame().fromBinary(this));
} while (!this.feof());
}
encodePayload() {
this.writeUnsignedTriadLE(this.sequenceNumber);
for (const frame of this.frames) {
this.write(frame.toBinary().getBuffer());
}
}
// TODO: for continuos flag
// public addFrame(): boolean {}
getByteLength() {
let length = 4;
for (const frame of this.frames) {
length += frame.getByteLength();
}
return length;
}
}
export { DATAGRAM_HEADER_BYTE_LENGTH, FrameSet as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbWVTZXQuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm90b2NvbC9GcmFtZVNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0RmxhZ3MgZnJvbSAnLi9CaXRGbGFncyc7XG5pbXBvcnQgRnJhbWUgZnJvbSAnLi9GcmFtZSc7XG5pbXBvcnQgUGFja2V0IGZyb20gJy4vUGFja2V0JztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rYXJjaGl2ZS9SYWtOZXQvYmxvYi8xYTE2OTg5NWE5MDBjOWZjNDg0MWM1NTZlMTY1MTQxODJiNzVmYWY4L1NvdXJjZS9SZWxpYWJpbGl0eUxheWVyLmNwcCNMMTMzXG5leHBvcnQgY29uc3QgREFUQUdSQU1fSEVBREVSX0JZVEVfTEVOR1RIID0gNjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJhbWVTZXQgZXh0ZW5kcyBQYWNrZXQge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihidWZmZXI/OiBCdWZmZXIpIHtcbiAgICAgICAgc3VwZXIoQml0RmxhZ3MuVkFMSUQsIGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNlcXVlbmNlTnVtYmVyITogbnVtYmVyO1xuICAgIHB1YmxpYyBmcmFtZXM6IEZyYW1lW10gPSBbXTtcblxuICAgIHB1YmxpYyBkZWNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlcXVlbmNlTnVtYmVyID0gdGhpcy5yZWFkVW5zaWduZWRUcmlhZExFKCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzLnB1c2gobmV3IEZyYW1lKCkuZnJvbUJpbmFyeSh0aGlzKSk7XG4gICAgICAgIH0gd2hpbGUgKCF0aGlzLmZlb2YoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVuY29kZVBheWxvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFRyaWFkTEUodGhpcy5zZXF1ZW5jZU51bWJlcik7XG4gICAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgdGhpcy5mcmFtZXMpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGUoZnJhbWUudG9CaW5hcnkoKS5nZXRCdWZmZXIoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmb3IgY29udGludW9zIGZsYWdcbiAgICAvLyBwdWJsaWMgYWRkRnJhbWUoKTogYm9vbGVhbiB7fVxuXG4gICAgcHVibGljIGdldEJ5dGVMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGxlbmd0aCA9IDQ7IC8vIGhlYWRlciAoMSBieXRlKSArIHRyaWFkICgzIGJ5dGVzKVxuICAgICAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIHRoaXMuZnJhbWVzKSB7XG4gICAgICAgICAgICBsZW5ndGggKz0gZnJhbWUuZ2V0Qnl0ZUxlbmd0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFLTyxNQUFNLDJCQUE4QixHQUFBO0FBRTNDLE1BQXFCLGlCQUFpQixNQUFPLENBQUE7QUFBQSxFQUNsQyxZQUFZLE1BQWlCLEVBQUE7QUFDaEMsSUFBTSxLQUFBLENBQUEsUUFBQSxDQUFTLE9BQU8sTUFBTSxDQUFBO0FBQUE7QUFDaEMsRUFFTyxjQUFBO0FBQUEsRUFDQSxTQUFrQixFQUFDO0FBQUEsRUFFbkIsYUFBc0IsR0FBQTtBQUN6QixJQUFLLElBQUEsQ0FBQSxjQUFBLEdBQWlCLEtBQUssbUJBQW9CLEVBQUE7QUFDL0MsSUFBRyxHQUFBO0FBQ0MsTUFBQSxJQUFBLENBQUssT0FBTyxJQUFLLENBQUEsSUFBSSxPQUFRLENBQUEsVUFBQSxDQUFXLElBQUksQ0FBQyxDQUFBO0FBQUEsS0FDakQsUUFBUyxDQUFDLElBQUEsQ0FBSyxJQUFLLEVBQUE7QUFBQTtBQUN4QixFQUVPLGFBQXNCLEdBQUE7QUFDekIsSUFBSyxJQUFBLENBQUEsb0JBQUEsQ0FBcUIsS0FBSyxjQUFjLENBQUE7QUFDN0MsSUFBVyxLQUFBLE1BQUEsS0FBQSxJQUFTLEtBQUssTUFBUSxFQUFBO0FBQzdCLE1BQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxLQUFBLENBQU0sUUFBUyxFQUFBLENBQUUsV0FBVyxDQUFBO0FBQUE7QUFDM0M7QUFDSjtBQUFBO0FBQUEsRUFLTyxhQUF3QixHQUFBO0FBQzNCLElBQUEsSUFBSSxNQUFTLEdBQUEsQ0FBQTtBQUNiLElBQVcsS0FBQSxNQUFBLEtBQUEsSUFBUyxLQUFLLE1BQVEsRUFBQTtBQUM3QixNQUFBLE1BQUEsSUFBVSxNQUFNLGFBQWMsRUFBQTtBQUFBO0FBRWxDLElBQU8sT0FBQSxNQUFBO0FBQUE7QUFFZjs7OzsifQ==