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();
}
}