/// <inheritdoc/> public async Task<IClient> CreateAsync(string product, IProcessControl ctrl) { if (_bypassCertValidation) { _logger.Warning("Bypassing certificate validation for client."); } // Configure transport settings var transportSettings = new List<ITransportSettings>(); if ((_transport & TransportOption.MqttOverTcp) != 0) { var setting = new MqttTransportSettings( TransportType.Mqtt_Tcp_Only); if (_bypassCertValidation) { setting.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; } transportSettings.Add(setting); } if ((_transport & TransportOption.MqttOverWebsocket) != 0) { var setting = new MqttTransportSettings( TransportType.Mqtt_WebSocket_Only); if (_bypassCertValidation) { setting.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; } transportSettings.Add(setting); } if ((_transport & TransportOption.AmqpOverTcp) != 0) { var setting = new AmqpTransportSettings( TransportType.Amqp_Tcp_Only); if (_bypassCertValidation) { setting.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; } transportSettings.Add(setting); } if ((_transport & TransportOption.AmqpOverWebsocket) != 0) { var setting = new AmqpTransportSettings( TransportType.Amqp_WebSocket_Only); if (_bypassCertValidation) { setting.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; } transportSettings.Add(setting); } if (transportSettings.Count != 0) { return await Try.Options(transportSettings .Select<ITransportSettings, Func<Task<IClient>>>(t => () => CreateAdapterAsync(product, () => ctrl?.Reset(), t)) .ToArray()); } return await CreateAdapterAsync(product, () => ctrl?.Reset()); }