@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
49 lines (48 loc) • 6.22 kB
JavaScript
import BatchPacket from "./packet/BatchPacket.es.js";
import { ConnectionPriority, Protocol } from "@jsprismarine/raknet";
//#region src/network/MinecraftSession.ts
/**
* Act as the first connection layer, handles everything related to batching,
* queuing and encrypting of Minecraft packets in a hypotetical session.
* TODO: implement ticking, batching, queues, encryption.
*/
var MinecraftSession = class {
logger;
rakSession;
constructor(session, logger) {
this.logger = logger;
this.rakSession = session;
}
sendBatch(batch, direct = true) {
batch.encode();
const sendPacket = new Protocol.Frame();
sendPacket.reliability = Protocol.FrameReliability.RELIABLE_ORDERED;
sendPacket.orderChannel = 0;
sendPacket.content = batch.getBuffer();
this.rakSession.sendFrame(sendPacket, direct ? ConnectionPriority.IMMEDIATE : ConnectionPriority.NORMAL);
}
async sendDataPacket(packet, comp = true, direct = false) {
const batch = new BatchPacket();
try {
batch.addPacket(packet);
batch.compressed = comp;
batch.encode();
} catch (error) {
this.logger.error(error);
this.logger.warn(`Packet §b${packet.constructor.name}§r to §b${this.rakSession.getAddress().toToken()}§r failed with: ${error.message}`);
return;
}
const sendPacket = new Protocol.Frame();
sendPacket.reliability = Protocol.FrameReliability.RELIABLE_ORDERED;
sendPacket.orderChannel = 0;
sendPacket.content = batch.getBuffer();
this.rakSession.sendFrame(sendPacket, direct ? ConnectionPriority.IMMEDIATE : ConnectionPriority.NORMAL);
this.logger.silly(`Sent §b${packet.constructor.name}§r packet`);
}
forceDisconnect() {
this.rakSession.disconnect();
}
};
//#endregion
export { MinecraftSession as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluZWNyYWZ0U2Vzc2lvbi5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9NaW5lY3JhZnRTZXNzaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBSYWtOZXRTZXNzaW9uIH0gZnJvbSAnQGpzcHJpc21hcmluZS9yYWtuZXQnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblByaW9yaXR5LCBQcm90b2NvbCB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvcmFrbmV0JztcbmltcG9ydCB0eXBlIHsgRGF0YVBhY2tldCB9IGZyb20gJy4vUGFja2V0cyc7XG5pbXBvcnQgeyBCYXRjaFBhY2tldCB9IGZyb20gJy4vUGFja2V0cyc7XG5cbi8qKlxuICogQWN0IGFzIHRoZSBmaXJzdCBjb25uZWN0aW9uIGxheWVyLCBoYW5kbGVzIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBiYXRjaGluZyxcbiAqIHF1ZXVpbmcgYW5kIGVuY3J5cHRpbmcgb2YgTWluZWNyYWZ0IHBhY2tldHMgaW4gYSBoeXBvdGV0aWNhbCBzZXNzaW9uLlxuICogVE9ETzogaW1wbGVtZW50IHRpY2tpbmcsIGJhdGNoaW5nLCBxdWV1ZXMsIGVuY3J5cHRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pbmVjcmFmdFNlc3Npb24ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSByYWtTZXNzaW9uOiBSYWtOZXRTZXNzaW9uO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBzZXNzaW9uOiBSYWtOZXRTZXNzaW9uLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyXG4gICAgKSB7XG4gICAgICAgIHRoaXMucmFrU2Vzc2lvbiA9IHNlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRCYXRjaChiYXRjaDogQmF0Y2hQYWNrZXQsIGRpcmVjdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgYmF0Y2guZW5jb2RlKCk7XG4gICAgICAgIGNvbnN0IHNlbmRQYWNrZXQgPSBuZXcgUHJvdG9jb2wuRnJhbWUoKTtcbiAgICAgICAgc2VuZFBhY2tldC5yZWxpYWJpbGl0eSA9IFByb3RvY29sLkZyYW1lUmVsaWFiaWxpdHkuUkVMSUFCTEVfT1JERVJFRDtcbiAgICAgICAgc2VuZFBhY2tldC5vcmRlckNoYW5uZWwgPSAwO1xuICAgICAgICBzZW5kUGFja2V0LmNvbnRlbnQgPSBiYXRjaC5nZXRCdWZmZXIoKTtcblxuICAgICAgICB0aGlzLnJha1Nlc3Npb24uc2VuZEZyYW1lKHNlbmRQYWNrZXQsIGRpcmVjdCA/IENvbm5lY3Rpb25Qcmlvcml0eS5JTU1FRElBVEUgOiBDb25uZWN0aW9uUHJpb3JpdHkuTk9STUFMKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZERhdGFQYWNrZXQ8VCBleHRlbmRzIERhdGFQYWNrZXQ+KHBhY2tldDogVCwgY29tcCA9IHRydWUsIGRpcmVjdCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gbmV3IEJhdGNoUGFja2V0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBiYXRjaC5hZGRQYWNrZXQocGFja2V0KTtcbiAgICAgICAgICAgIGJhdGNoLmNvbXByZXNzZWQgPSBjb21wO1xuICAgICAgICAgICAgYmF0Y2guZW5jb2RlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAgIGBQYWNrZXQgwqdiJHtwYWNrZXQuY29uc3RydWN0b3IubmFtZX3Cp3IgdG8gwqdiJHt0aGlzLnJha1Nlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgLmdldEFkZHJlc3MoKVxuICAgICAgICAgICAgICAgICAgICAudG9Ub2tlbigpfcKnciBmYWlsZWQgd2l0aDogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCB0aGlzIGluIHJha25ldFxuICAgICAgICBjb25zdCBzZW5kUGFja2V0ID0gbmV3IFByb3RvY29sLkZyYW1lKCk7XG4gICAgICAgIHNlbmRQYWNrZXQucmVsaWFiaWxpdHkgPSBQcm90b2NvbC5GcmFtZVJlbGlhYmlsaXR5LlJFTElBQkxFX09SREVSRUQ7XG4gICAgICAgIHNlbmRQYWNrZXQub3JkZXJDaGFubmVsID0gMDtcbiAgICAgICAgc2VuZFBhY2tldC5jb250ZW50ID0gYmF0Y2guZ2V0QnVmZmVyKCk7XG5cbiAgICAgICAgdGhpcy5yYWtTZXNzaW9uLnNlbmRGcmFtZShzZW5kUGFja2V0LCBkaXJlY3QgPyBDb25uZWN0aW9uUHJpb3JpdHkuSU1NRURJQVRFIDogQ29ubmVjdGlvblByaW9yaXR5Lk5PUk1BTCk7XG4gICAgICAgIHRoaXMubG9nZ2VyLnNpbGx5KGBTZW50IMKnYiR7cGFja2V0LmNvbnN0cnVjdG9yLm5hbWV9wqdyIHBhY2tldGApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JjZURpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmFrU2Vzc2lvbi5kaXNjb25uZWN0KCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVdBLElBQXFCLG1CQUFyQixNQUFzQztDQUtiO0NBSnJCO0NBRUEsWUFDSSxTQUNBLFFBQ0Y7RUFEbUIsS0FBQSxTQUFBO0VBRWpCLEtBQUssYUFBYTtDQUN0QjtDQUVBLFVBQWlCLE9BQW9CLFNBQVMsTUFBWTtFQUN0RCxNQUFNLE9BQU87RUFDYixNQUFNLGFBQWEsSUFBSSxTQUFTLE1BQU07RUFDdEMsV0FBVyxjQUFjLFNBQVMsaUJBQWlCO0VBQ25ELFdBQVcsZUFBZTtFQUMxQixXQUFXLFVBQVUsTUFBTSxVQUFVO0VBRXJDLEtBQUssV0FBVyxVQUFVLFlBQVksU0FBUyxtQkFBbUIsWUFBWSxtQkFBbUIsTUFBTTtDQUMzRztDQUVBLE1BQWEsZUFBcUMsUUFBVyxPQUFPLE1BQU0sU0FBUyxPQUFzQjtFQUNyRyxNQUFNLFFBQVEsSUFBSSxZQUFZO0VBQzlCLElBQUk7R0FDQSxNQUFNLFVBQVUsTUFBTTtHQUN0QixNQUFNLGFBQWE7R0FDbkIsTUFBTSxPQUFPO0VBQ2pCLFNBQVMsT0FBZ0I7R0FDckIsS0FBSyxPQUFPLE1BQU0sS0FBSztHQUN2QixLQUFLLE9BQU8sS0FDUixZQUFZLE9BQU8sWUFBWSxLQUFLLFVBQVUsS0FBSyxXQUM5QyxXQUFXLEVBQ1gsUUFBUSxFQUFFLGtCQUFtQixNQUFnQixTQUN0RDtHQUNBO0VBQ0o7RUFHQSxNQUFNLGFBQWEsSUFBSSxTQUFTLE1BQU07RUFDdEMsV0FBVyxjQUFjLFNBQVMsaUJBQWlCO0VBQ25ELFdBQVcsZUFBZTtFQUMxQixXQUFXLFVBQVUsTUFBTSxVQUFVO0VBRXJDLEtBQUssV0FBVyxVQUFVLFlBQVksU0FBUyxtQkFBbUIsWUFBWSxtQkFBbUIsTUFBTTtFQUN2RyxLQUFLLE9BQU8sTUFBTSxVQUFVLE9BQU8sWUFBWSxLQUFLLFVBQVU7Q0FDbEU7Q0FFQSxrQkFBK0I7RUFDM0IsS0FBSyxXQUFXLFdBQVc7Q0FDL0I7QUFDSiJ9