async _finalizeHandshake()

in src/internal/ClientSocket.ts [312:350]


    async _finalizeHandshake(buffer: MessageBuffer, request: Request) {
        const isSuccess = buffer.readByte() === HANDSHAKE_SUCCESS_STATUS_CODE;

        if (!isSuccess) {
            // Server protocol version
            const serverVersion = new ProtocolVersion();
            serverVersion.read(buffer);
            // Error message
            const errMessage = BinaryCommunicator.readString(buffer);

            if (!this._protocolVersion.equals(serverVersion)) {
                if (!this._isSupportedVersion(serverVersion) ||
                    serverVersion.compareTo(PROTOCOL_VERSION_1_1_0) < 0 && this._config.userName) {
                    request.reject(new OperationError(
                        Util.format('Protocol version mismatch: client %s / server %s. Server details: %s',
                            this._protocolVersion.toString(), serverVersion.toString(), errMessage)));
                    this._disconnect();
                }
                else {
                    // retry handshake with server version
                    const handshakeRequest = this._getHandshake(serverVersion, request.resolve, request.reject);
                    await this._sendRequest(handshakeRequest);
                }
            }
            else {
                request.reject(new OperationError(errMessage));
                this._disconnect();
            }
        }
        else {
            if (this._protocolVersion.compareTo(PROTOCOL_VERSION_1_4_0) >= 0) {
                this._nodeUuid = await this._communicator.readObject(buffer, BinaryUtils.TYPE_CODE.UUID);
            }

            this._state = STATE.CONNECTED;
            this._wasConnected = true;
            request.resolve();
        }
    }