public async Task <IAmqpIoTAuthenticationRefresher> CreateRefresher(DeviceIdentity deviceIdentity, TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, deviceIdentity, timeout, $"{nameof(CreateRefresher)}"); } if (_amqpIoTConnection == null) { throw new IotHubCommunicationException(); } if (_amqpIoTCbsLink == null) { _amqpIoTCbsLink = _amqpIoTConnection.CreateCbsLink(deviceIdentity, timeout); } IAmqpIoTAuthenticationRefresher amqpAuthenticator = new AmqpAuthenticationRefresher(deviceIdentity, _amqpIoTCbsLink); await amqpAuthenticator.InitLoopAsync(timeout).ConfigureAwait(false); if (Logging.IsEnabled) { Logging.Exit(this, deviceIdentity, timeout, $"{nameof(CreateRefresher)}"); } return(amqpAuthenticator); }
private async Task <IAmqpAuthenticationRefresher> AuthenticationRefresherCreator(DeviceIdentity deviceIdentity, TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, deviceIdentity, timeout, $"{nameof(AuthenticationRefresherCreator)}"); } if (AmqpConnection == null) { throw new IotHubCommunicationException(); } AmqpCbsLink = AmqpCbsLink ?? new AmqpCbsLink(AmqpConnection); IAmqpAuthenticationRefresher amqpAuthenticator = new AmqpAuthenticationRefresher(deviceIdentity, AmqpCbsLink); await amqpAuthenticator.InitLoopAsync(timeout).ConfigureAwait(false); if (Logging.IsEnabled) { Logging.Exit(this, deviceIdentity, timeout, $"{nameof(AuthenticationRefresherCreator)}"); } return(amqpAuthenticator); }
public async Task <AmqpIotConnection> EnsureConnectionAsync(TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, timeout, nameof(EnsureConnectionAsync)); } AmqpIotConnection amqpIotConnection = null; IAmqpAuthenticationRefresher amqpAuthenticationRefresher = null; bool gain = await _lock.WaitAsync(timeout).ConfigureAwait(false); if (!gain) { throw new TimeoutException(); } try { if (_amqpIotConnection == null || _amqpIotConnection.IsClosing()) { if (Logging.IsEnabled) { Logging.Info(this, "Creating new AmqpConnection", nameof(EnsureConnectionAsync)); } // Create AmqpConnection amqpIotConnection = await _amqpIotConnector.OpenConnectionAsync(timeout).ConfigureAwait(false); if (_deviceIdentity.AuthenticationModel != AuthenticationModel.X509) { if (_deviceIdentity.AuthenticationModel == AuthenticationModel.SasGrouped) { if (Logging.IsEnabled) { Logging.Info(this, "Creating connection width AmqpAuthenticationRefresher", nameof(EnsureConnectionAsync)); } amqpAuthenticationRefresher = new AmqpAuthenticationRefresher(_deviceIdentity, amqpIotConnection.GetCbsLink()); await amqpAuthenticationRefresher.InitLoopAsync(timeout).ConfigureAwait(false); } } _amqpIotConnection = amqpIotConnection; _amqpAuthenticationRefresher = amqpAuthenticationRefresher; _amqpIotConnection.Closed += OnConnectionClosed; if (Logging.IsEnabled) { Logging.Associate(this, _amqpIotConnection, nameof(_amqpIotConnection)); } } else { amqpIotConnection = _amqpIotConnection; } } catch (Exception ex) when(!ex.IsFatal()) { amqpAuthenticationRefresher?.StopLoop(); amqpIotConnection?.SafeClose(); throw; } finally { _lock.Release(); } if (Logging.IsEnabled) { Logging.Exit(this, timeout, nameof(EnsureConnectionAsync)); } return(amqpIotConnection); }
private async Task <AmqpConnection> EnsureConnection(TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, timeout, $"{nameof(EnsureConnection)}"); } AmqpConnection amqpConnection = null; IAmqpAuthenticationRefresher amqpAuthenticationRefresher = null; AmqpCbsLink amqpCbsLink = null; bool gain = await Lock.WaitAsync(timeout).ConfigureAwait(false); if (!gain) { throw new TimeoutException(); } try { if (AmqpConnection == null) { if (Logging.IsEnabled) { Logging.Info(this, "Creating new AmqpConnection", $"{nameof(EnsureConnection)}"); } // Create AmqpConnection amqpConnection = await Connector.OpenConnectionAsync(timeout).ConfigureAwait(false); if (DeviceIdentity.AuthenticationModel != AuthenticationModel.X509) { if (AmqpCbsLink == null) { if (Logging.IsEnabled) { Logging.Info(this, "Creating new AmqpCbsLink", $"{nameof(EnsureConnection)}"); } amqpCbsLink = new AmqpCbsLink(amqpConnection); } else { amqpCbsLink = AmqpCbsLink; } if (DeviceIdentity.AuthenticationModel == AuthenticationModel.SasGrouped) { if (Logging.IsEnabled) { Logging.Info(this, "Creating connection width AmqpAuthenticationRefresher", $"{nameof(EnsureConnection)}"); } amqpAuthenticationRefresher = new AmqpAuthenticationRefresher(DeviceIdentity, amqpCbsLink); await amqpAuthenticationRefresher.InitLoopAsync(timeout).ConfigureAwait(false); } } AmqpConnection = amqpConnection; AmqpCbsLink = amqpCbsLink; AmqpAuthenticationRefresher = amqpAuthenticationRefresher; AmqpConnection.Closed += OnConnectionClosed; if (Logging.IsEnabled) { Logging.Associate(this, AmqpConnection, $"{nameof(AmqpConnection)}"); } if (Logging.IsEnabled) { Logging.Associate(this, AmqpCbsLink, $"{nameof(AmqpCbsLink)}"); } } else if (AmqpConnection.IsClosing()) { throw new IotHubCommunicationException("AMQP connection is closing."); } else { amqpConnection = AmqpConnection; } } catch (Exception ex) when(!ex.IsFatal()) { amqpCbsLink?.Close(); amqpAuthenticationRefresher?.StopLoop(); amqpConnection?.SafeClose(); throw; } finally { Lock.Release(); } if (Logging.IsEnabled) { Logging.Exit(this, timeout, $"{nameof(EnsureConnection)}"); } return(amqpConnection); }