public async Task <ConnectionDescription> InitializeConnectionAsync(IConnection connection, CancellationToken cancellationToken) { Ensure.IsNotNull(connection, nameof(connection)); var isMasterCommand = CreateInitialIsMasterCommand(connection.Settings.Authenticators); var isMasterProtocol = IsMasterHelper.CreateProtocol(isMasterCommand); var isMasterResult = await IsMasterHelper.GetResultAsync(connection, isMasterProtocol, cancellationToken).ConfigureAwait(false); var buildInfoProtocol = CreateBuildInfoProtocol(); var buildInfoResult = new BuildInfoResult(await buildInfoProtocol.ExecuteAsync(connection, cancellationToken).ConfigureAwait(false)); var description = new ConnectionDescription(connection.ConnectionId, isMasterResult, buildInfoResult); await AuthenticationHelper.AuthenticateAsync(connection, description, cancellationToken).ConfigureAwait(false); try { var getLastErrorProtocol = CreateGetLastErrorProtocol(); var getLastErrorResult = await getLastErrorProtocol.ExecuteAsync(connection, cancellationToken).ConfigureAwait(false); description = UpdateConnectionIdWithServerValue(description, getLastErrorResult); } catch { // if we couldn't get the server's connection id, so be it. } return(description); }
public ConnectionDescription InitializeConnection(IConnection connection, CancellationToken cancellationToken) { Ensure.IsNotNull(connection, nameof(connection)); var authenticators = connection.Settings.AuthenticatorFactories.Select(f => f.Create()).ToList(); var isMasterCommand = CreateInitialIsMasterCommand(authenticators); var isMasterProtocol = IsMasterHelper.CreateProtocol(isMasterCommand, _serverApi); var isMasterResult = IsMasterHelper.GetResult(connection, isMasterProtocol, cancellationToken); var buildInfoProtocol = CreateBuildInfoProtocol(_serverApi); var buildInfoResult = new BuildInfoResult(buildInfoProtocol.Execute(connection, cancellationToken)); var description = new ConnectionDescription(connection.ConnectionId, isMasterResult, buildInfoResult); AuthenticationHelper.Authenticate(connection, description, authenticators, cancellationToken); var connectionIdServerValue = isMasterResult.ConnectionIdServerValue; if (connectionIdServerValue.HasValue) { description = UpdateConnectionIdWithServerValue(description, connectionIdServerValue.Value); } else { try { var getLastErrorProtocol = CreateGetLastErrorProtocol(_serverApi); var getLastErrorResult = getLastErrorProtocol.Execute(connection, cancellationToken); description = UpdateConnectionIdWithServerValue(description, getLastErrorResult); } catch { // if we couldn't get the server's connection id, so be it. } } return(description); }