@jsprismarine/raknet
Version:
Basic RakNet implementation written in TypeScript
71 lines (70 loc) • 6.75 kB
JavaScript
;
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
const require_runtime = require("../_virtual/_rolldown/runtime.cjs.cjs");
const require_utils_InetAddress = require("../utils/InetAddress.cjs.cjs");
let _jsprismarine_jsbinaryutils = require("@jsprismarine/jsbinaryutils");
_jsprismarine_jsbinaryutils = require_runtime.__toESM(_jsprismarine_jsbinaryutils, 1);
//#region src/protocol/Packet.ts
/**
* The base class for all packets.
*/
var Packet = class extends _jsprismarine_jsbinaryutils.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);
return new require_utils_InetAddress.default(`${-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 require_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());
}
};
//#endregion
exports.default = Packet;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2V0LmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3RvY29sL1BhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgSW5ldEFkZHJlc3MgZnJvbSAnLi4vdXRpbHMvSW5ldEFkZHJlc3MnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgcGFja2V0cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFja2V0IGV4dGVuZHMgQmluYXJ5U3RyZWFtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgcGFja2V0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihpZDogbnVtYmVyLCBidWZmZXI/OiBCdWZmZXIpIHtcbiAgICAgICAgc3VwZXIoYnVmZmVyKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcGFja2V0IElELlxuICAgICAqIEByZXR1cm5zIFRoZSBwYWNrZXQncyBJRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGRlY29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWFkQnl0ZSgpO1xuICAgICAgICB0aGlzLmRlY29kZVBheWxvYWQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZGVjb2RlUGF5bG9hZCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZW5jb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlQnl0ZSh0aGlzLmdldElkKCkpO1xuICAgICAgICB0aGlzLmVuY29kZVBheWxvYWQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW5jb2RlUGF5bG9hZCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgcmVhZFN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkKHRoaXMucmVhZFNob3J0KCkpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVN0cmluZyh2OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5mcm9tKHYsICd1dGYtOCcpO1xuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRTaG9ydChkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLndyaXRlKGRhdGEgYXMgYW55KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZEFkZHJlc3MoKTogSW5ldEFkZHJlc3Mge1xuICAgICAgICBjb25zdCB2ZXIgPSB0aGlzLnJlYWRCeXRlKCk7XG4gICAgICAgIGlmICh2ZXIgPT09IDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlwQnl0ZXMgPSB0aGlzLnJlYWQoNCk7XG4gICAgICAgICAgICBjb25zdCBhZGRyID0gYCR7KC1pcEJ5dGVzWzBdISAtIDEpICYgMHhmZn0uJHsoLWlwQnl0ZXNbMV0hIC0gMSkgJiAweGZmfS4keygtaXBCeXRlc1syXSEgLSAxKSAmIDB4ZmZ9LiR7XG4gICAgICAgICAgICAgICAgKC1pcEJ5dGVzWzNdISAtIDEpICYgMHhmZlxuICAgICAgICAgICAgfWA7XG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5yZWFkU2hvcnQoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW5ldEFkZHJlc3MoYWRkciwgcG9ydCwgdmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2tpcCgyKTsgLy8gU2tpcCAyIGJ5dGVzXG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnJlYWRTaG9ydCgpO1xuICAgICAgICB0aGlzLnNraXAoNCk7IC8vIFNraXAgNCBieXRlc1xuICAgICAgICBjb25zdCBhZGRyID0gdGhpcy5yZWFkKDE2KS50b1N0cmluZygpO1xuICAgICAgICB0aGlzLnNraXAoNCk7IC8vIFNraXAgNCBieXRlc1xuICAgICAgICByZXR1cm4gbmV3IEluZXRBZGRyZXNzKGFkZHIsIHBvcnQsIHZlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlQWRkcmVzcyhhZGRyZXNzOiBJbmV0QWRkcmVzcyk6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlQnl0ZSg0KTsgLy8gSVB2NCBvbmx5XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gYWRkcmVzc1xuICAgICAgICAgICAgLmdldEFkZHJlc3MoKVxuICAgICAgICAgICAgLnNwbGl0KCcuJywgNClcbiAgICAgICAgICAgIC5tYXAoKHYpID0+IE51bWJlci5wYXJzZUludCh2LCAxMCkpO1xuICAgICAgICAvLyAxMCBzaG91bGQgd29yayBwZXJmZWN0bHkgZmluZSwgYnV0IG1heWJlIGJhc2UyIGlzIGRpcmVjdGx5IGJldHRlci4uLlxuICAgICAgICAvLyBUT0RPOiBzZWUgd2hlbiB3aWxsIHJlZmFjdG9yIHRoaXMgY29kZSBzb29uXG4gICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiBieXRlcykge1xuICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGUofmJ5dGUgJiAweGZmKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRTaG9ydChhZGRyZXNzLmdldFBvcnQoKSk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBTUEsSUFBcUIsU0FBckIsY0FBb0MsNEJBQUEsUUFBYTtDQUM3Qzs7OztDQUtBLFlBQW1CLElBQVksUUFBaUI7RUFDNUMsTUFBTSxNQUFNO0VBQ1osS0FBSyxLQUFLO0NBQ2Q7Ozs7O0NBTUEsUUFBdUI7RUFDbkIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsU0FBc0I7RUFDbEIsS0FBSyxTQUFTO0VBQ2QsS0FBSyxjQUFjO0NBQ3ZCO0NBRUEsZ0JBQWdDLENBQUM7Q0FFakMsU0FBc0I7RUFDbEIsS0FBSyxVQUFVLEtBQUssTUFBTSxDQUFDO0VBQzNCLEtBQUssY0FBYztDQUN2QjtDQUVBLGdCQUFnQyxDQUFDO0NBRWpDLGFBQTRCO0VBQ3hCLE9BQU8sS0FBSyxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQUUsU0FBUyxPQUFPO0NBQ3ZEO0NBRUEsWUFBbUIsR0FBaUI7RUFDaEMsTUFBTSxPQUFPLE9BQU8sS0FBSyxHQUFHLE9BQU87RUFDbkMsS0FBSyxtQkFBbUIsS0FBSyxVQUFVO0VBQ3ZDLEtBQUssTUFBTSxJQUFXO0NBQzFCO0NBRUEsY0FBa0M7RUFDOUIsTUFBTSxNQUFNLEtBQUssU0FBUztFQUMxQixJQUFJLFFBQVEsR0FBRztHQUNYLE1BQU0sVUFBVSxLQUFLLEtBQUssQ0FBQztHQUszQixPQUFPLElBQUksMEJBQUEsUUFBWSxHQUpOLENBQUMsUUFBUSxLQUFNLElBQUssSUFBSyxHQUFJLENBQUMsUUFBUSxLQUFNLElBQUssSUFBSyxHQUFJLENBQUMsUUFBUSxLQUFNLElBQUssSUFBSyxHQUMvRixDQUFDLFFBQVEsS0FBTSxJQUFLLE9BRVosS0FBSyxVQUNXLEdBQU0sR0FBRztFQUMxQztFQUVBLEtBQUssS0FBSyxDQUFDO0VBQ1gsTUFBTSxPQUFPLEtBQUssVUFBVTtFQUM1QixLQUFLLEtBQUssQ0FBQztFQUNYLE1BQU0sT0FBTyxLQUFLLEtBQUssRUFBRSxFQUFFLFNBQVM7RUFDcEMsS0FBSyxLQUFLLENBQUM7RUFDWCxPQUFPLElBQUksMEJBQUEsUUFBWSxNQUFNLE1BQU0sR0FBRztDQUMxQztDQUVBLGFBQW9CLFNBQTRCO0VBQzVDLEtBQUssVUFBVSxDQUFDO0VBQ2hCLE1BQU0sUUFBUSxRQUNULFdBQVcsRUFDWCxNQUFNLEtBQUssQ0FBQyxFQUNaLEtBQUssTUFBTSxPQUFPLFNBQVMsR0FBRyxFQUFFLENBQUM7RUFHdEMsS0FBSyxNQUFNLFFBQVEsT0FDZixLQUFLLFVBQVUsQ0FBQyxPQUFPLEdBQUk7RUFFL0IsS0FBSyxtQkFBbUIsUUFBUSxRQUFRLENBQUM7Q0FDN0M7QUFDSiJ9