@jsprismarine/raknet
Version:
Basic RakNet implementation written in TypeScript
75 lines (68 loc) • 7.96 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const BinaryStream = require('@jsprismarine/jsbinaryutils');
const utils_InetAddress = require('../utils/InetAddress.cjs.cjs');
const _interopDefault = e => e && e.__esModule ? e : { default: e };
const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream);
class Packet extends BinaryStream__default.default {
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 utils_InetAddress.default(addr2, port2, ver);
}
this.skip(2);
const port = this.readShort();
this.skip(4);
const addr = this.read(16).toString();
this.skip(4);
return new utils_InetAddress.default(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());
}
}
exports.default = Packet;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2V0LmNqcy5janMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm90b2NvbC9QYWNrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IEluZXRBZGRyZXNzIGZyb20gJy4uL3V0aWxzL0luZXRBZGRyZXNzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHBhY2tldHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhY2tldCBleHRlbmRzIEJpbmFyeVN0cmVhbSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IHBhY2tldC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaWQ6IG51bWJlciwgYnVmZmVyPzogQnVmZmVyKSB7XG4gICAgICAgIHN1cGVyKGJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHBhY2tldCBJRC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcGFja2V0J3MgSUQuXG4gICAgICovXG4gICAgcHVibGljIGdldElkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNvZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVhZEJ5dGUoKTtcbiAgICAgICAgdGhpcy5kZWNvZGVQYXlsb2FkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRlY29kZVBheWxvYWQoKTogdm9pZCB7fVxuXG4gICAgcHVibGljIGVuY29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUodGhpcy5nZXRJZCgpKTtcbiAgICAgICAgdGhpcy5lbmNvZGVQYXlsb2FkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGVuY29kZVBheWxvYWQoKTogdm9pZCB7fVxuXG4gICAgcHVibGljIHJlYWRTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCh0aGlzLnJlYWRTaG9ydCgpKS50b1N0cmluZygndXRmLTgnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVTdHJpbmcodjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuZnJvbSh2LCAndXRmLTgnKTtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkU2hvcnQoZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdGhpcy53cml0ZShkYXRhIGFzIGFueSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRBZGRyZXNzKCk6IEluZXRBZGRyZXNzIHtcbiAgICAgICAgY29uc3QgdmVyID0gdGhpcy5yZWFkQnl0ZSgpO1xuICAgICAgICBpZiAodmVyID09PSA0KSB7XG4gICAgICAgICAgICBjb25zdCBpcEJ5dGVzID0gdGhpcy5yZWFkKDQpO1xuICAgICAgICAgICAgY29uc3QgYWRkciA9IGAkeygtaXBCeXRlc1swXSEgLSAxKSAmIDB4ZmZ9LiR7KC1pcEJ5dGVzWzFdISAtIDEpICYgMHhmZn0uJHsoLWlwQnl0ZXNbMl0hIC0gMSkgJiAweGZmfS4ke1xuICAgICAgICAgICAgICAgICgtaXBCeXRlc1szXSEgLSAxKSAmIDB4ZmZcbiAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMucmVhZFNob3J0KCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEluZXRBZGRyZXNzKGFkZHIsIHBvcnQsIHZlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNraXAoMik7IC8vIFNraXAgMiBieXRlc1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5yZWFkU2hvcnQoKTtcbiAgICAgICAgdGhpcy5za2lwKDQpOyAvLyBTa2lwIDQgYnl0ZXNcbiAgICAgICAgY29uc3QgYWRkciA9IHRoaXMucmVhZCgxNikudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5za2lwKDQpOyAvLyBTa2lwIDQgYnl0ZXNcbiAgICAgICAgcmV0dXJuIG5ldyBJbmV0QWRkcmVzcyhhZGRyLCBwb3J0LCB2ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZUFkZHJlc3MoYWRkcmVzczogSW5ldEFkZHJlc3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoNCk7IC8vIElQdjQgb25seVxuICAgICAgICBjb25zdCBieXRlcyA9IGFkZHJlc3NcbiAgICAgICAgICAgIC5nZXRBZGRyZXNzKClcbiAgICAgICAgICAgIC5zcGxpdCgnLicsIDQpXG4gICAgICAgICAgICAubWFwKCh2KSA9PiBOdW1iZXIucGFyc2VJbnQodiwgMTApKTtcbiAgICAgICAgLy8gMTAgc2hvdWxkIHdvcmsgcGVyZmVjdGx5IGZpbmUsIGJ1dCBtYXliZSBiYXNlMiBpcyBkaXJlY3RseSBiZXR0ZXIuLi5cbiAgICAgICAgLy8gVE9ETzogc2VlIHdoZW4gd2lsbCByZWZhY3RvciB0aGlzIGNvZGUgc29vblxuICAgICAgICBmb3IgKGNvbnN0IGJ5dGUgb2YgYnl0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlKH5ieXRlICYgMHhmZik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkU2hvcnQoYWRkcmVzcy5nZXRQb3J0KCkpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJCaW5hcnlTdHJlYW0iLCJhZGRyIiwicG9ydCIsIkluZXRBZGRyZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU1BLE1BQXFCLGVBQWVBLDZCQUFhLENBQUE7QUFBQSxFQUM1QixFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLVixXQUFBLENBQVksSUFBWSxNQUFpQixFQUFBO0FBQzVDLElBQUEsS0FBQSxDQUFNLE1BQU0sQ0FBQTtBQUNaLElBQUEsSUFBQSxDQUFLLEVBQUssR0FBQSxFQUFBO0FBQUE7QUFDZDtBQUFBO0FB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