@jsprismarine/raknet
Version:
Basic RakNet implementation written in TypeScript
67 lines (64 loc) • 7.57 kB
JavaScript
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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