UNPKG

@jsprismarine/raknet

Version:
64 lines (63 loc) 6.33 kB
import InetAddress from "../utils/InetAddress.es.js"; import BinaryStream from "@jsprismarine/jsbinaryutils"; //#region src/protocol/Packet.ts /** * The base class for all packets. */ var Packet = class 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); return new InetAddress(`${-ipBytes[0] - 1 & 255}.${-ipBytes[1] - 1 & 255}.${-ipBytes[2] - 1 & 255}.${-ipBytes[3] - 1 & 255}`, this.readShort(), 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()); } }; //#endregion export { Packet as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2V0LmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm90b2NvbC9QYWNrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IEluZXRBZGRyZXNzIGZyb20gJy4uL3V0aWxzL0luZXRBZGRyZXNzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHBhY2tldHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhY2tldCBleHRlbmRzIEJpbmFyeVN0cmVhbSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IHBhY2tldC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaWQ6IG51bWJlciwgYnVmZmVyPzogQnVmZmVyKSB7XG4gICAgICAgIHN1cGVyKGJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHBhY2tldCBJRC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcGFja2V0J3MgSUQuXG4gICAgICovXG4gICAgcHVibGljIGdldElkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNvZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVhZEJ5dGUoKTtcbiAgICAgICAgdGhpcy5kZWNvZGVQYXlsb2FkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRlY29kZVBheWxvYWQoKTogdm9pZCB7fVxuXG4gICAgcHVibGljIGVuY29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUodGhpcy5nZXRJZCgpKTtcbiAgICAgICAgdGhpcy5lbmNvZGVQYXlsb2FkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGVuY29kZVBheWxvYWQoKTogdm9pZCB7fVxuXG4gICAgcHVibGljIHJlYWRTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCh0aGlzLnJlYWRTaG9ydCgpKS50b1N0cmluZygndXRmLTgnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVTdHJpbmcodjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuZnJvbSh2LCAndXRmLTgnKTtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkU2hvcnQoZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdGhpcy53cml0ZShkYXRhIGFzIGFueSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRBZGRyZXNzKCk6IEluZXRBZGRyZXNzIHtcbiAgICAgICAgY29uc3QgdmVyID0gdGhpcy5yZWFkQnl0ZSgpO1xuICAgICAgICBpZiAodmVyID09PSA0KSB7XG4gICAgICAgICAgICBjb25zdCBpcEJ5dGVzID0gdGhpcy5yZWFkKDQpO1xuICAgICAgICAgICAgY29uc3QgYWRkciA9IGAkeygtaXBCeXRlc1swXSEgLSAxKSAmIDB4ZmZ9LiR7KC1pcEJ5dGVzWzFdISAtIDEpICYgMHhmZn0uJHsoLWlwQnl0ZXNbMl0hIC0gMSkgJiAweGZmfS4ke1xuICAgICAgICAgICAgICAgICgtaXBCeXRlc1szXSEgLSAxKSAmIDB4ZmZcbiAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMucmVhZFNob3J0KCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEluZXRBZGRyZXNzKGFkZHIsIHBvcnQsIHZlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNraXAoMik7IC8vIFNraXAgMiBieXRlc1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5yZWFkU2hvcnQoKTtcbiAgICAgICAgdGhpcy5za2lwKDQpOyAvLyBTa2lwIDQgYnl0ZXNcbiAgICAgICAgY29uc3QgYWRkciA9IHRoaXMucmVhZCgxNikudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5za2lwKDQpOyAvLyBTa2lwIDQgYnl0ZXNcbiAgICAgICAgcmV0dXJuIG5ldyBJbmV0QWRkcmVzcyhhZGRyLCBwb3J0LCB2ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZUFkZHJlc3MoYWRkcmVzczogSW5ldEFkZHJlc3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoNCk7IC8vIElQdjQgb25seVxuICAgICAgICBjb25zdCBieXRlcyA9IGFkZHJlc3NcbiAgICAgICAgICAgIC5nZXRBZGRyZXNzKClcbiAgICAgICAgICAgIC5zcGxpdCgnLicsIDQpXG4gICAgICAgICAgICAubWFwKCh2KSA9PiBOdW1iZXIucGFyc2VJbnQodiwgMTApKTtcbiAgICAgICAgLy8gMTAgc2hvdWxkIHdvcmsgcGVyZmVjdGx5IGZpbmUsIGJ1dCBtYXliZSBiYXNlMiBpcyBkaXJlY3RseSBiZXR0ZXIuLi5cbiAgICAgICAgLy8gVE9ETzogc2VlIHdoZW4gd2lsbCByZWZhY3RvciB0aGlzIGNvZGUgc29vblxuICAgICAgICBmb3IgKGNvbnN0IGJ5dGUgb2YgYnl0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlKH5ieXRlICYgMHhmZik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkU2hvcnQoYWRkcmVzcy5nZXRQb3J0KCkpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBTUEsSUFBcUIsU0FBckIsY0FBb0MsYUFBYTtDQUM3Qzs7OztDQUtBLFlBQW1CLElBQVksUUFBaUI7RUFDNUMsTUFBTSxNQUFNO0VBQ1osS0FBSyxLQUFLO0NBQ2Q7Ozs7O0NBTUEsUUFBdUI7RUFDbkIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsU0FBc0I7RUFDbEIsS0FBSyxTQUFTO0VBQ2QsS0FBSyxjQUFjO0NBQ3ZCO0NBRUEsZ0JBQWdDLENBQUM7Q0FFakMsU0FBc0I7RUFDbEIsS0FBSyxVQUFVLEtBQUssTUFBTSxDQUFDO0VBQzNCLEtBQUssY0FBYztDQUN2QjtDQUVBLGdCQUFnQyxDQUFDO0NBRWpDLGFBQTRCO0VBQ3hCLE9BQU8sS0FBSyxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQUUsU0FBUyxPQUFPO0NBQ3ZEO0NBRUEsWUFBbUIsR0FBaUI7RUFDaEMsTUFBTSxPQUFPLE9BQU8sS0FBSyxHQUFHLE9BQU87RUFDbkMsS0FBSyxtQkFBbUIsS0FBSyxVQUFVO0VBQ3ZDLEtBQUssTUFBTSxJQUFXO0NBQzFCO0NBRUEsY0FBa0M7RUFDOUIsTUFBTSxNQUFNLEtBQUssU0FBUztFQUMxQixJQUFJLFFBQVEsR0FBRztHQUNYLE1BQU0sVUFBVSxLQUFLLEtBQUssQ0FBQztHQUszQixPQUFPLElBQUksWUFBWSxHQUpOLENBQUMsUUFBUSxLQUFNLElBQUssSUFBSyxHQUFJLENBQUMsUUFBUSxLQUFNLElBQUssSUFBSyxHQUFJLENBQUMsUUFBUSxLQUFNLElBQUssSUFBSyxHQUMvRixDQUFDLFFBQVEsS0FBTSxJQUFLLE9BRVosS0FBSyxVQUNXLEdBQU0sR0FBRztFQUMxQztFQUVBLEtBQUssS0FBSyxDQUFDO0VBQ1gsTUFBTSxPQUFPLEtBQUssVUFBVTtFQUM1QixLQUFLLEtBQUssQ0FBQztFQUNYLE1BQU0sT0FBTyxLQUFLLEtBQUssRUFBRSxFQUFFLFNBQVM7RUFDcEMsS0FBSyxLQUFLLENBQUM7RUFDWCxPQUFPLElBQUksWUFBWSxNQUFNLE1BQU0sR0FBRztDQUMxQztDQUVBLGFBQW9CLFNBQTRCO0VBQzVDLEtBQUssVUFBVSxDQUFDO0VBQ2hCLE1BQU0sUUFBUSxRQUNULFdBQVcsRUFDWCxNQUFNLEtBQUssQ0FBQyxFQUNaLEtBQUssTUFBTSxPQUFPLFNBQVMsR0FBRyxFQUFFLENBQUM7RUFHdEMsS0FBSyxNQUFNLFFBQVEsT0FDZixLQUFLLFVBQVUsQ0FBQyxPQUFPLEdBQUk7RUFFL0IsS0FBSyxtQkFBbUIsUUFBUSxRQUFRLENBQUM7Q0FDN0M7QUFDSiJ9