UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

53 lines (52 loc) 5.45 kB
import DisconnectPacket from "./packet/DisconnectPacket.es.js"; import PlayerSession from "./PlayerSession.es.js"; import MinecraftSession from "./MinecraftSession.es.js"; import assert from "assert"; //#region src/network/ClientConnection.ts /** * Handles the connection before the player creation itself, very helpful as * it helps to not waste resources in case the client trying to connect is simply * outdated or sends invalid data during the login handshake. */ var ClientConnection = class extends MinecraftSession { playerSession = null; hasCompression = false; constructor(session, logger) { super(session, logger); } /** * @internal * * @param server - the server instance * @param player - the player instance * @returns the new player session */ initPlayerConnection(server, player) { assert(this.playerSession === null, "Player session was already created"); this.playerSession = new PlayerSession(server, this, player); return this.playerSession; } async closePlayerSession() { if (this.playerSession !== null) { await this.playerSession.getPlayer().disable(); this.playerSession = null; } } disconnect(reason = "disconnect.disconnected", hideReason = true) { const packet = new DisconnectPacket(); packet.skipMessage = hideReason; packet.message = reason; this.sendDataPacket(packet); this.closePlayerSession(); this.forceDisconnect(); } getPlayerSession() { return this.playerSession; } getRakNetSession() { return this.rakSession; } }; //#endregion export { ClientConnection as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpZW50Q29ubmVjdGlvbi5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9DbGllbnRDb25uZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGxheWVyLCBTZXJ2ZXIgfSBmcm9tICcuLi8nO1xuaW1wb3J0IHsgUGxheWVyU2Vzc2lvbiB9IGZyb20gJy4uLyc7XG5cbmltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBSYWtOZXRTZXNzaW9uIH0gZnJvbSAnQGpzcHJpc21hcmluZS9yYWtuZXQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IE1pbmVjcmFmdFNlc3Npb24gZnJvbSAnLi9NaW5lY3JhZnRTZXNzaW9uJztcbmltcG9ydCB7IERpc2Nvbm5lY3RQYWNrZXQgfSBmcm9tICcuL1BhY2tldHMnO1xuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIHRoZSBwbGF5ZXIgY3JlYXRpb24gaXRzZWxmLCB2ZXJ5IGhlbHBmdWwgYXNcbiAqIGl0IGhlbHBzIHRvIG5vdCB3YXN0ZSByZXNvdXJjZXMgaW4gY2FzZSB0aGUgY2xpZW50IHRyeWluZyB0byBjb25uZWN0IGlzIHNpbXBseVxuICogb3V0ZGF0ZWQgb3Igc2VuZHMgaW52YWxpZCBkYXRhIGR1cmluZyB0aGUgbG9naW4gaGFuZHNoYWtlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnRDb25uZWN0aW9uIGV4dGVuZHMgTWluZWNyYWZ0U2Vzc2lvbiB7XG4gICAgcHJpdmF0ZSBwbGF5ZXJTZXNzaW9uOiBQbGF5ZXJTZXNzaW9uIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGhhc0NvbXByZXNzaW9uID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2Vzc2lvbjogUmFrTmV0U2Vzc2lvbiwgbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICAgICAgc3VwZXIoc2Vzc2lvbiwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXJ2ZXIgLSB0aGUgc2VydmVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHBsYXllciAtIHRoZSBwbGF5ZXIgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHBsYXllciBzZXNzaW9uXG4gICAgICovXG4gICAgcHVibGljIGluaXRQbGF5ZXJDb25uZWN0aW9uKHNlcnZlcjogU2VydmVyLCBwbGF5ZXI6IFBsYXllcik6IFBsYXllclNlc3Npb24ge1xuICAgICAgICBhc3NlcnQodGhpcy5wbGF5ZXJTZXNzaW9uID09PSBudWxsLCAnUGxheWVyIHNlc3Npb24gd2FzIGFscmVhZHkgY3JlYXRlZCcpO1xuXG4gICAgICAgIHRoaXMucGxheWVyU2Vzc2lvbiA9IG5ldyBQbGF5ZXJTZXNzaW9uKHNlcnZlciwgdGhpcywgcGxheWVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheWVyU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xvc2VQbGF5ZXJTZXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5wbGF5ZXJTZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsYXllclNlc3Npb24uZ2V0UGxheWVyKCkuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXJTZXNzaW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXNjb25uZWN0KHJlYXNvbiA9ICdkaXNjb25uZWN0LmRpc2Nvbm5lY3RlZCcsIGhpZGVSZWFzb24gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhY2tldCA9IG5ldyBEaXNjb25uZWN0UGFja2V0KCk7XG4gICAgICAgIHBhY2tldC5za2lwTWVzc2FnZSA9IGhpZGVSZWFzb247XG4gICAgICAgIHBhY2tldC5tZXNzYWdlID0gcmVhc29uO1xuICAgICAgICB2b2lkIHRoaXMuc2VuZERhdGFQYWNrZXQocGFja2V0KTtcblxuICAgICAgICB0aGlzLmNsb3NlUGxheWVyU2Vzc2lvbigpO1xuXG4gICAgICAgIC8vIEZvcmNlIFJha05ldCB0byByZW1vdmUgdGhlIHNlc3Npb25cbiAgICAgICAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhlIGRlYWQgc2Vzc2lvblxuICAgICAgICB0aGlzLmZvcmNlRGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQbGF5ZXJTZXNzaW9uKCk6IFBsYXllclNlc3Npb24gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheWVyU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmFrTmV0U2Vzc2lvbigpOiBSYWtOZXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFrU2Vzc2lvbjtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFjQSxJQUFxQixtQkFBckIsY0FBOEMsaUJBQWlCO0NBQzNELGdCQUE4QztDQUM5QyxpQkFBd0I7Q0FFeEIsWUFBbUIsU0FBd0IsUUFBZ0I7RUFDdkQsTUFBTSxTQUFTLE1BQU07Q0FDekI7Ozs7Ozs7O0NBU0EscUJBQTRCLFFBQWdCLFFBQStCO0VBQ3ZFLE9BQU8sS0FBSyxrQkFBa0IsTUFBTSxvQ0FBb0M7RUFFeEUsS0FBSyxnQkFBZ0IsSUFBSSxjQUFjLFFBQVEsTUFBTSxNQUFNO0VBQzNELE9BQU8sS0FBSztDQUNoQjtDQUVBLE1BQWEscUJBQW9DO0VBQzdDLElBQUksS0FBSyxrQkFBa0IsTUFBTTtHQUM3QixNQUFNLEtBQUssY0FBYyxVQUFVLEVBQUUsUUFBUTtHQUM3QyxLQUFLLGdCQUFnQjtFQUN6QjtDQUNKO0NBRUEsV0FBa0IsU0FBUywyQkFBMkIsYUFBYSxNQUFZO0VBQzNFLE1BQU0sU0FBUyxJQUFJLGlCQUFpQjtFQUNwQyxPQUFPLGNBQWM7RUFDckIsT0FBTyxVQUFVO0VBQ2pCLEtBQVUsZUFBZSxNQUFNO0VBRS9CLEtBQUssbUJBQW1CO0VBSXhCLEtBQUssZ0JBQWdCO0NBQ3pCO0NBRUEsbUJBQWdEO0VBQzVDLE9BQU8sS0FBSztDQUNoQjtDQUVBLG1CQUF5QztFQUNyQyxPQUFPLEtBQUs7Q0FDaEI7QUFDSiJ9