UNPKG

@jsprismarine/raknet

Version:
67 lines (64 loc) 7.57 kB
import BinaryStream from '@jsprismarine/jsbinaryutils'; import InetAddress from '../utils/InetAddress.es.js'; class Packet extends BinaryStream { id; /** * Create a new packet. */ constructor(id, buffer) { super(buffer); this.id = id; } /** * Get the packet ID. * @returns The packet's ID. */ getId() { return this.id; } decode() { this.readByte(); this.decodePayload(); } decodePayload() { } encode() { this.writeByte(this.getId()); this.encodePayload(); } encodePayload() { } readString() { return this.read(this.readShort()).toString("utf-8"); } writeString(v) { const data = Buffer.from(v, "utf-8"); this.writeUnsignedShort(data.byteLength); this.write(data); } readAddress() { const ver = this.readByte(); if (ver === 4) { const ipBytes = this.read(4); const addr2 = `${-ipBytes[0] - 1 & 255}.${-ipBytes[1] - 1 & 255}.${-ipBytes[2] - 1 & 255}.${-ipBytes[3] - 1 & 255}`; const port2 = this.readShort(); return new InetAddress(addr2, port2, ver); } this.skip(2); const port = this.readShort(); this.skip(4); const addr = this.read(16).toString(); this.skip(4); return new InetAddress(addr, port, ver); } writeAddress(address) { this.writeByte(4); const bytes = address.getAddress().split(".", 4).map((v) => Number.parseInt(v, 10)); for (const byte of bytes) { this.writeByte(~byte & 255); } this.writeUnsignedShort(address.getPort()); } } export { Packet as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2V0LmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdG9jb2wvUGFja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCBJbmV0QWRkcmVzcyBmcm9tICcuLi91dGlscy9JbmV0QWRkcmVzcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBwYWNrZXRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWNrZXQgZXh0ZW5kcyBCaW5hcnlTdHJlYW0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBwYWNrZXQuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGlkOiBudW1iZXIsIGJ1ZmZlcj86IEJ1ZmZlcikge1xuICAgICAgICBzdXBlcihidWZmZXIpO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwYWNrZXQgSUQuXG4gICAgICogQHJldHVybnMgVGhlIHBhY2tldCdzIElELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlYWRCeXRlKCk7XG4gICAgICAgIHRoaXMuZGVjb2RlUGF5bG9hZCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBkZWNvZGVQYXlsb2FkKCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBlbmNvZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud3JpdGVCeXRlKHRoaXMuZ2V0SWQoKSk7XG4gICAgICAgIHRoaXMuZW5jb2RlUGF5bG9hZCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBlbmNvZGVQYXlsb2FkKCk6IHZvaWQge31cblxuICAgIHB1YmxpYyByZWFkU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWQodGhpcy5yZWFkU2hvcnQoKSkudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlU3RyaW5nKHY6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmZyb20odiwgJ3V0Zi04Jyk7XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFNob3J0KGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHRoaXMud3JpdGUoZGF0YSBhcyBhbnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkQWRkcmVzcygpOiBJbmV0QWRkcmVzcyB7XG4gICAgICAgIGNvbnN0IHZlciA9IHRoaXMucmVhZEJ5dGUoKTtcbiAgICAgICAgaWYgKHZlciA9PT0gNCkge1xuICAgICAgICAgICAgY29uc3QgaXBCeXRlcyA9IHRoaXMucmVhZCg0KTtcbiAgICAgICAgICAgIGNvbnN0IGFkZHIgPSBgJHsoLWlwQnl0ZXNbMF0hIC0gMSkgJiAweGZmfS4keygtaXBCeXRlc1sxXSEgLSAxKSAmIDB4ZmZ9LiR7KC1pcEJ5dGVzWzJdISAtIDEpICYgMHhmZn0uJHtcbiAgICAgICAgICAgICAgICAoLWlwQnl0ZXNbM10hIC0gMSkgJiAweGZmXG4gICAgICAgICAgICB9YDtcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnJlYWRTaG9ydCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmV0QWRkcmVzcyhhZGRyLCBwb3J0LCB2ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5za2lwKDIpOyAvLyBTa2lwIDIgYnl0ZXNcbiAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMucmVhZFNob3J0KCk7XG4gICAgICAgIHRoaXMuc2tpcCg0KTsgLy8gU2tpcCA0IGJ5dGVzXG4gICAgICAgIGNvbnN0IGFkZHIgPSB0aGlzLnJlYWQoMTYpLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc2tpcCg0KTsgLy8gU2tpcCA0IGJ5dGVzXG4gICAgICAgIHJldHVybiBuZXcgSW5ldEFkZHJlc3MoYWRkciwgcG9ydCwgdmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVBZGRyZXNzKGFkZHJlc3M6IEluZXRBZGRyZXNzKTogdm9pZCB7XG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDQpOyAvLyBJUHY0IG9ubHlcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBhZGRyZXNzXG4gICAgICAgICAgICAuZ2V0QWRkcmVzcygpXG4gICAgICAgICAgICAuc3BsaXQoJy4nLCA0KVxuICAgICAgICAgICAgLm1hcCgodikgPT4gTnVtYmVyLnBhcnNlSW50KHYsIDEwKSk7XG4gICAgICAgIC8vIDEwIHNob3VsZCB3b3JrIHBlcmZlY3RseSBmaW5lLCBidXQgbWF5YmUgYmFzZTIgaXMgZGlyZWN0bHkgYmV0dGVyLi4uXG4gICAgICAgIC8vIFRPRE86IHNlZSB3aGVuIHdpbGwgcmVmYWN0b3IgdGhpcyBjb2RlIHNvb25cbiAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIGJ5dGVzKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQnl0ZSh+Ynl0ZSAmIDB4ZmYpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFNob3J0KGFkZHJlc3MuZ2V0UG9ydCgpKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiYWRkciIsInBvcnQiXSwibWFwcGluZ3MiOiI7OztBQU1BLE1BQXFCLGVBQWUsWUFBYSxDQUFBO0FBQUEsRUFDNUIsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS1YsV0FBQSxDQUFZLElBQVksTUFBaUIsRUFBQTtBQUM1QyxJQUFBLEtBQUEsQ0FBTSxNQUFNLENBQUE7QUFDWixJQUFBLElBQUEsQ0FBSyxFQUFLLEdBQUEsRUFBQTtBQUFBO0FBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLEtBQWdCLEdBQUE7QUFDbkIsSUFBQSxP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