public MqttAdapter( Settings settings, ISessionStatePersistenceProvider sessionStateManager, IDeviceIdentityProvider authProvider, IQos2StatePersistenceProvider qos2StateProvider, MessagingBridgeFactoryFunc messagingBridgeFactory) { Contract.Requires(settings != null); Contract.Requires(sessionStateManager != null); Contract.Requires(authProvider != null); Contract.Requires(messagingBridgeFactory != null); this.lifetimeCancellation = new CancellationTokenSource(); if (qos2StateProvider != null) { this.maxSupportedQosToClient = QualityOfService.ExactlyOnce; this.qos2StateProvider = qos2StateProvider; } else { this.maxSupportedQosToClient = QualityOfService.AtLeastOnce; } this.settings = settings; this.sessionStateManager = sessionStateManager; this.authProvider = authProvider; this.messagingBridgeFactory = messagingBridgeFactory; }
public MqttProtocolHead( ISettingsProvider settingsProvider, X509Certificate tlsCertificate, IMqttConnectionProvider mqttConnectionProvider, IAuthenticator authenticator, IUsernameParser usernameParser, IClientCredentialsFactory clientCredentialsFactory, ISessionStatePersistenceProvider sessionProvider, IWebSocketListenerRegistry webSocketListenerRegistry, IByteBufferAllocator byteBufferAllocator, IMetadataStore metadataStore, bool clientCertAuthAllowed, SslProtocols sslProtocols) { this.settingsProvider = Preconditions.CheckNotNull(settingsProvider, nameof(settingsProvider)); this.tlsCertificate = Preconditions.CheckNotNull(tlsCertificate, nameof(tlsCertificate)); this.mqttConnectionProvider = Preconditions.CheckNotNull(mqttConnectionProvider, nameof(mqttConnectionProvider)); this.authenticator = Preconditions.CheckNotNull(authenticator, nameof(authenticator)); this.usernameParser = Preconditions.CheckNotNull(usernameParser, nameof(usernameParser)); this.clientCredentialsFactory = Preconditions.CheckNotNull(clientCredentialsFactory, nameof(clientCredentialsFactory)); this.sessionProvider = Preconditions.CheckNotNull(sessionProvider, nameof(sessionProvider)); this.webSocketListenerRegistry = Preconditions.CheckNotNull(webSocketListenerRegistry, nameof(webSocketListenerRegistry)); this.byteBufferAllocator = Preconditions.CheckNotNull(byteBufferAllocator); this.clientCertAuthAllowed = clientCertAuthAllowed; this.metadataStore = Preconditions.CheckNotNull(metadataStore, nameof(metadataStore)); this.sslProtocols = sslProtocols; }
public MqttIotHubAdapter(Settings settings, DeviceClientFactoryFunc deviceClientFactory, ISessionStatePersistenceProvider sessionStateManager, IAuthenticationProvider authProvider, ITopicNameRouter topicNameRouter, IQos2StatePersistenceProvider qos2StateProvider) { Contract.Requires(settings != null); Contract.Requires(sessionStateManager != null); Contract.Requires(authProvider != null); Contract.Requires(topicNameRouter != null); if (qos2StateProvider != null) { this.maxSupportedQosToClient = QualityOfService.ExactlyOnce; this.qos2StateProvider = qos2StateProvider; } else { this.maxSupportedQosToClient = QualityOfService.AtLeastOnce; } this.settings = settings; this.deviceClientFactory = deviceClientFactory; this.sessionStateManager = sessionStateManager; this.authProvider = authProvider; this.topicNameRouter = topicNameRouter; this.publishProcessor = new PacketAsyncProcessor<PublishPacket>(this.PublishToServerAsync); this.publishProcessor.Completion.OnFault(ShutdownOnPublishToServerFaultAction); TimeSpan? ackTimeout = this.settings.DeviceReceiveAckCanTimeout ? this.settings.DeviceReceiveAckTimeout : (TimeSpan?)null; this.publishPubAckProcessor = new RequestAckPairProcessor<AckPendingMessageState, PublishPacket>(this.AcknowledgePublishAsync, this.RetransmitNextPublish, ackTimeout); this.publishPubAckProcessor.Completion.OnFault(ShutdownOnPubAckFaultAction); this.publishPubRecProcessor = new RequestAckPairProcessor<AckPendingMessageState, PublishPacket>(this.AcknowledgePublishReceiveAsync, this.RetransmitNextPublish, ackTimeout); this.publishPubRecProcessor.Completion.OnFault(ShutdownOnPubRecFaultAction); this.pubRelPubCompProcessor = new RequestAckPairProcessor<CompletionPendingMessageState, PubRelPacket>(this.AcknowledgePublishCompleteAsync, this.RetransmitNextPublishRelease, ackTimeout); this.pubRelPubCompProcessor.Completion.OnFault(ShutdownOnPubCompFaultAction); }
public MqttConnectionProvider(IConnectionProvider connectionProvider, IMessageConverter <IProtocolGatewayMessage> pgMessageConverter, IByteBufferConverter byteBufferConverter, ISessionStatePersistenceProvider sessionStatePersistenceProvider) { this.connectionProvider = Preconditions.CheckNotNull(connectionProvider, nameof(connectionProvider)); this.pgMessageConverter = Preconditions.CheckNotNull(pgMessageConverter, nameof(pgMessageConverter)); this.byteBufferConverter = Preconditions.CheckNotNull(byteBufferConverter, nameof(byteBufferConverter)); this.sessionStatePersistenceProvider = Preconditions.CheckNotNull(sessionStatePersistenceProvider, nameof(sessionStatePersistenceProvider)); }
public MessagingServiceClient(IDeviceListener deviceListener, IMessageConverter <IProtocolGatewayMessage> messageConverter, IByteBufferConverter byteBufferConverter, ISessionStatePersistenceProvider sessionStatePersistenceProvider) { this.deviceListener = Preconditions.CheckNotNull(deviceListener, nameof(deviceListener)); this.messageConverter = Preconditions.CheckNotNull(messageConverter, nameof(messageConverter)); this.byteBufferConverter = Preconditions.CheckNotNull(byteBufferConverter, nameof(byteBufferConverter)); this.sessionStatePersistenceProvider = Preconditions.CheckNotNull(sessionStatePersistenceProvider, nameof(sessionStatePersistenceProvider)); }
/// <summary> /// Called by the service fabric when the listener is to be started /// </summary> /// <param name="cancellationToken">A token to monitor for abort requests</param> /// <returns>A task that completes when the service is openned</returns> public async Task <string> OpenAsync(CancellationToken cancellationToken) { string publishAddress = null; Guid traceId = Guid.NewGuid(); int threadCount = Environment.ProcessorCount; this.serverControl = new CancellationTokenSource(); GatewayConfiguration configuration = this.configurationProvider.Config; this.logger.Informational(traceId, this.componentName, "OpenAsync() invoked."); var iotHubConfigurationProvider = new ConfigurationProvider <IoTHubConfiguration>(traceId, this.serviceContext.ServiceName, this.serviceContext.CodePackageActivationContext, this.logger, "IoTHubClient"); iotHubConfigurationProvider.ConfigurationChangedEvent += (sender, args) => this.unsupportedConfigurationChangeCallback?.Invoke(); iotHubConfigurationProvider.ConfigurationPropertyChangedEvent += (sender, args) => this.unsupportedConfigurationChangeCallback?.Invoke(); IoTHubConfiguration iotHubConfiguration = iotHubConfigurationProvider.Config; X509Certificate2 certificate = this.GetServerCertificate(configuration); this.logger.Informational(traceId, this.componentName, "Certificate retrieved."); var mqttConfigurationProvider = new ConfigurationProvider <MqttServiceConfiguration>(traceId, this.serviceContext.ServiceName, this.serviceContext.CodePackageActivationContext, this.logger, "Mqtt"); mqttConfigurationProvider.ConfigurationChangedEvent += (sender, args) => this.unsupportedConfigurationChangeCallback?.Invoke(); mqttConfigurationProvider.ConfigurationPropertyChangedEvent += (sender, args) => this.unsupportedConfigurationChangeCallback?.Invoke(); MqttServiceConfiguration mqttConfiguration = mqttConfigurationProvider.Config; if (mqttConfiguration != null) { var mqttInboundTemplates = new List <string>(mqttConfiguration.MqttInboundTemplates); var mqttOutboundTemplates = new List <string>(mqttConfiguration.MqttOutboundTemplates); ISessionStatePersistenceProvider qosSessionProvider = await this.GetSessionStateProviderAsync(traceId, mqttConfiguration).ConfigureAwait(false); IQos2StatePersistenceProvider qos2SessionProvider = await this.GetQos2StateProvider(traceId, mqttConfiguration).ConfigureAwait(false); this.logger.Informational(traceId, this.componentName, "QOS Providers instantiated."); var settingsProvider = new ServiceFabricConfigurationProvider(traceId, this.componentName, this.logger, configuration, iotHubConfiguration, mqttConfiguration); this.bootStrapper = new Bootstrapper(settingsProvider, qosSessionProvider, qos2SessionProvider, mqttInboundTemplates, mqttOutboundTemplates); this.runTask = this.bootStrapper.RunAsync(certificate, threadCount, this.serverControl.Token); publishAddress = this.BuildPublishAddress(configuration); this.logger.Informational(traceId, this.componentName, "Bootstrapper instantiated."); } else { this.logger.Critical(traceId, this.componentName, "Failed to start endpoint because Mqtt service configuration is missing."); } return(publishAddress); }
public Bootstrapper(ISettingsProvider settingsProvider, ISessionStatePersistenceProvider sessionStateManager, IQos2StatePersistenceProvider qos2StateProvider) { Contract.Requires(settingsProvider != null); Contract.Requires(sessionStateManager != null); this.closeCompletionSource = new TaskCompletionSource(); this.settingsProvider = settingsProvider; this.settings = new Settings(this.settingsProvider); this.sessionStateManager = sessionStateManager; this.qos2StateProvider = qos2StateProvider; this.authProvider = new SasTokenDeviceIdentityProvider(); this.iotHubMessageRouter = new ConfigurableMessageRouter(); }
public Bootstrapper(ISettingsProvider settingsProvider, ISessionStatePersistenceProvider sessionStateManager, IQos2StatePersistenceProvider qos2StateProvider) { Contract.Requires(settingsProvider != null); Contract.Requires(sessionStateManager != null); this.closeCompletionSource = new TaskCompletionSource(); this.settingsProvider = settingsProvider; this.settings = new Settings(this.settingsProvider); this.sessionStateManager = sessionStateManager; this.qos2StateProvider = qos2StateProvider; this.authProvider = new SasTokenAuthenticationProvider(); this.topicNameRouter = new TopicNameRouter(); }
Bootstrapper(ISettingsProvider settingsProvider, ISessionStatePersistenceProvider sessionStateManager, IQos2StatePersistenceProvider qos2StateProvider, IMessageAddressConverter addressConverter) { Contract.Requires(settingsProvider != null); Contract.Requires(sessionStateManager != null); this.closeCompletionSource = new TaskCompletionSource(); this.settingsProvider = settingsProvider; this.settings = new Settings(this.settingsProvider); this.iotHubClientSettings = new IotHubClientSettings(this.settingsProvider); this.sessionStateManager = sessionStateManager; this.qos2StateProvider = qos2StateProvider; this.authProvider = new SasTokenDeviceIdentityProvider(); this.topicNameConverter = addressConverter; }
public MqttIotHubAdapter( Settings settings, ISessionStatePersistenceProvider sessionStateManager, IDeviceIdentityProvider authProvider, IQos2StatePersistenceProvider qos2StateProvider, IMessagingFactory messagingFactory, IMessageRouter messageRouter) { Contract.Requires(settings != null); Contract.Requires(sessionStateManager != null); Contract.Requires(authProvider != null); Contract.Requires(messageRouter != null); if (qos2StateProvider != null) { this.maxSupportedQosToClient = QualityOfService.ExactlyOnce; this.qos2StateProvider = qos2StateProvider; } else { this.maxSupportedQosToClient = QualityOfService.AtLeastOnce; } this.settings = settings; this.sessionStateManager = sessionStateManager; this.authProvider = authProvider; this.messagingFactory = messagingFactory; this.messageRouter = messageRouter; this.publishProcessor = new MessageAsyncProcessor <PublishPacket>(this.PublishToServerAsync); this.publishProcessor.Completion.OnFault(ShutdownOnPublishToServerFaultAction); TimeSpan?ackTimeout = this.settings.DeviceReceiveAckCanTimeout ? this.settings.DeviceReceiveAckTimeout : (TimeSpan?)null; this.publishPubAckProcessor = new RequestAckPairProcessor <AckPendingMessageState, PublishPacket>(this.AcknowledgePublishAsync, this.RetransmitNextPublish, ackTimeout); this.publishPubAckProcessor.Completion.OnFault(ShutdownOnPubAckFaultAction); this.publishPubRecProcessor = new RequestAckPairProcessor <AckPendingMessageState, PublishPacket>(this.AcknowledgePublishReceiveAsync, this.RetransmitNextPublish, ackTimeout); this.publishPubRecProcessor.Completion.OnFault(ShutdownOnPubRecFaultAction); this.pubRelPubCompProcessor = new RequestAckPairProcessor <CompletionPendingMessageState, PubRelPacket>(this.AcknowledgePublishCompleteAsync, this.RetransmitNextPublishRelease, ackTimeout); this.pubRelPubCompProcessor.Completion.OnFault(ShutdownOnPubCompFaultAction); }
/// <summary> /// Retrieves the session state provider to be used for MQTT Sessions /// </summary> /// <param name="traceId">A unique identifier used to correlate debugging and diagnostics messages</param> /// <param name="configuration">The gateway configuration</param> /// <returns>A session state persistence provider if available</returns> async Task <ISessionStatePersistenceProvider> GetSessionStateProviderAsync(Guid traceId, MqttServiceConfiguration configuration) { ISessionStatePersistenceProvider stateProvider = null; this.logger.Informational(traceId, this.componentName, "QOS state provider requested."); switch (configuration.MqttQoSStateProvider) { case MqttServiceConfiguration.QosStateType.AzureStorage: this.logger.Informational(traceId, this.componentName, "QOS state provider requested was Azure Storage."); var azureConfigurationProvider = new ConfigurationProvider <AzureSessionStateConfiguration>(traceId, this.serviceContext.ServiceName, this.serviceContext.CodePackageActivationContext, this.logger, "AzureState"); azureConfigurationProvider.ConfigurationChangedEvent += (sender, args) => this.unsupportedConfigurationChangeCallback?.Invoke(); azureConfigurationProvider.ConfigurationPropertyChangedEvent += (sender, args) => this.unsupportedConfigurationChangeCallback?.Invoke(); AzureSessionStateConfiguration azureConfiguration = azureConfigurationProvider.Config; if (azureConfiguration == null) { this.logger.Critical(traceId, this.componentName, "QOS state provider or configuration could not be retrieved."); throw new ApplicationException("Azure state QoS provider configuration could not be retrieved"); } stateProvider = await BlobSessionStatePersistenceProvider.CreateAsync(azureConfiguration.BlobConnectionString, azureConfiguration.ContainerName).ConfigureAwait(false); this.logger.Informational(traceId, this.componentName, "QOS state provider request complete."); break; case MqttServiceConfiguration.QosStateType.ServiceFabricStateful: this.logger.Critical(traceId, this.componentName, "QOS state provider requested was Service Fabric Stateful Service but it is not currently implemented."); throw new NotImplementedException("Only azure storage provider is supported"); default: this.logger.Critical(traceId, this.componentName, "QOS state provider requested was unknown."); throw new ApplicationException("MQTT state provider must be specified in configuration."); } return(stateProvider); }
public MqttProtocolHead(ISettingsProvider settingsProvider, X509Certificate tlsCertificate, IMqttConnectionProvider mqttConnectionProvider, IDeviceIdentityProvider identityProvider, ISessionStatePersistenceProvider sessionProvider, IWebSocketListenerRegistry webSocketListenerRegistry, IByteBufferAllocator byteBufferAllocator, bool clientCertAuthAllowed, string caChainPath) { this.settingsProvider = Preconditions.CheckNotNull(settingsProvider, nameof(settingsProvider)); this.tlsCertificate = Preconditions.CheckNotNull(tlsCertificate, nameof(tlsCertificate)); this.mqttConnectionProvider = Preconditions.CheckNotNull(mqttConnectionProvider, nameof(mqttConnectionProvider)); this.identityProvider = Preconditions.CheckNotNull(identityProvider, nameof(identityProvider)); this.sessionProvider = Preconditions.CheckNotNull(sessionProvider, nameof(sessionProvider)); this.webSocketListenerRegistry = Preconditions.CheckNotNull(webSocketListenerRegistry, nameof(webSocketListenerRegistry)); this.byteBufferAllocator = Preconditions.CheckNotNull(byteBufferAllocator); this.clientCertAuthAllowed = clientCertAuthAllowed; this.caCertChain = clientCertAuthAllowed ? this.GetCaChainCerts(Preconditions.CheckNonWhiteSpace(caChainPath, nameof(this.caCertChain))) : Option.None <IList <X509Certificate2> >(); }
protected override void Load(ContainerBuilder builder) { // IByteBufferAllocator builder.Register( c => { // TODO - We should probably also use some heuristics to make this determination, like how much memory does the system have. return(this.optimizeForPerformance ? PooledByteBufferAllocator.Default : UnpooledByteBufferAllocator.Default as IByteBufferAllocator); }) .As <IByteBufferAllocator>() .SingleInstance(); builder.Register(c => new ByteBufferConverter(c.Resolve <IByteBufferAllocator>())) .As <IByteBufferConverter>() .SingleInstance(); // MessageAddressConverter builder.Register(c => new MessageAddressConverter(this.conversionConfiguration)) .As <MessageAddressConverter>() .SingleInstance(); // IMessageConverter<IProtocolGatewayMessage> builder.Register(c => new ProtocolGatewayMessageConverter(c.Resolve <MessageAddressConverter>(), c.Resolve <IByteBufferConverter>())) .As <IMessageConverter <IProtocolGatewayMessage> >() .SingleInstance(); // ISettingsProvider builder.Register(c => new MqttSettingsProvider(this.mqttSettingsConfiguration)) .As <ISettingsProvider>() .SingleInstance(); // Task<IMqttConnectionProvider> builder.Register( async c => { var pgMessageConverter = c.Resolve <IMessageConverter <IProtocolGatewayMessage> >(); var byteBufferConverter = c.Resolve <IByteBufferConverter>(); IConnectionProvider connectionProvider = await c.Resolve <Task <IConnectionProvider> >(); IMqttConnectionProvider mqtt = new MqttConnectionProvider(connectionProvider, pgMessageConverter, byteBufferConverter); return(mqtt); }) .As <Task <IMqttConnectionProvider> >() .SingleInstance(); // Task<ISessionStatePersistenceProvider> builder.Register( async c => { if (this.isStoreAndForwardEnabled) { IDbStoreProvider dbStoreProvider = await c.Resolve <Task <IDbStoreProvider> >(); IEntityStore <string, SessionState> entityStore = new StoreProvider(dbStoreProvider).GetEntityStore <string, SessionState>(Constants.SessionStorePartitionKey); IEdgeHub edgeHub = await c.Resolve <Task <IEdgeHub> >(); return(new SessionStateStoragePersistenceProvider(edgeHub, entityStore) as ISessionStatePersistenceProvider); } else { IEdgeHub edgeHub = await c.Resolve <Task <IEdgeHub> >(); return(new SessionStatePersistenceProvider(edgeHub) as ISessionStatePersistenceProvider); } }) .As <Task <ISessionStatePersistenceProvider> >() .SingleInstance(); // MqttProtocolHead builder.Register( async c => { var productInfoStore = await c.Resolve <Task <IProductInfoStore> >(); var settingsProvider = c.Resolve <ISettingsProvider>(); var websocketListenerRegistry = c.Resolve <IWebSocketListenerRegistry>(); var byteBufferAllocator = c.Resolve <IByteBufferAllocator>(); var mqttConnectionProviderTask = c.Resolve <Task <IMqttConnectionProvider> >(); var sessionStatePersistenceProviderTask = c.Resolve <Task <ISessionStatePersistenceProvider> >(); var authenticatorProviderTask = c.Resolve <Task <IAuthenticator> >(); IClientCredentialsFactory clientCredentialsProvider = c.Resolve <IClientCredentialsFactory>(); IMqttConnectionProvider mqttConnectionProvider = await mqttConnectionProviderTask; ISessionStatePersistenceProvider sessionStatePersistenceProvider = await sessionStatePersistenceProviderTask; IAuthenticator authenticator = await authenticatorProviderTask; return(new MqttProtocolHead( settingsProvider, this.tlsCertificate, mqttConnectionProvider, authenticator, clientCredentialsProvider, sessionStatePersistenceProvider, websocketListenerRegistry, byteBufferAllocator, productInfoStore, this.clientCertAuthAllowed, this.sslProtocols)); }) .As <Task <MqttProtocolHead> >() .SingleInstance(); base.Load(builder); }
public Bootstrapper(ISettingsProvider settingsProvider, ISessionStatePersistenceProvider sessionStateManager, IQos2StatePersistenceProvider qos2StateProvider) : this(settingsProvider, sessionStateManager, qos2StateProvider, new ConfigurableMessageAddressConverter()) { }
public Bootstrapper(ISettingsProvider settingsProvider, ISessionStatePersistenceProvider sessionStateManager, IQos2StatePersistenceProvider qos2StateProvider, List <string> inboundTemplates, List <string> outboundTemplates) : this(settingsProvider, sessionStateManager, qos2StateProvider, new ConfigurableMessageAddressConverter(inboundTemplates ?? new List <string>(), outboundTemplates ?? new List <string>())) { }
protected override void Load(ContainerBuilder builder) { // IByteBufferAllocator builder.Register( c => { var usePooledBuffers = this.mqttSettingsConfiguration.GetValue("UsePooledBuffers", false); return(usePooledBuffers ? PooledByteBufferAllocator.Default : UnpooledByteBufferAllocator.Default as IByteBufferAllocator); }) .As <IByteBufferAllocator>() .SingleInstance(); builder.Register(c => new ByteBufferConverter(c.Resolve <IByteBufferAllocator>())) .As <IByteBufferConverter>() .SingleInstance(); // MessageAddressConverter builder.Register(c => new MessageAddressConverter(this.conversionConfiguration)) .As <MessageAddressConverter>() .SingleInstance(); // IMessageConverter<IProtocolGatewayMessage> builder.Register(c => new ProtocolGatewayMessageConverter(c.Resolve <MessageAddressConverter>(), c.Resolve <IByteBufferConverter>())) .As <IMessageConverter <IProtocolGatewayMessage> >() .SingleInstance(); // ISettingsProvider builder.Register(c => new MqttSettingsProvider(this.mqttSettingsConfiguration)) .As <ISettingsProvider>() .SingleInstance(); // Task<IMqttConnectionProvider> builder.Register( async c => { var pgMessageConverter = c.Resolve <IMessageConverter <IProtocolGatewayMessage> >(); var byteBufferConverter = c.Resolve <IByteBufferConverter>(); IConnectionProvider connectionProvider = await c.Resolve <Task <IConnectionProvider> >(); ISessionStatePersistenceProvider sessionStatePersistenceProvider = await c.Resolve <Task <ISessionStatePersistenceProvider> >(); IMqttConnectionProvider mqtt = new MqttConnectionProvider(connectionProvider, pgMessageConverter, byteBufferConverter, sessionStatePersistenceProvider); return(mqtt); }) .As <Task <IMqttConnectionProvider> >() .SingleInstance(); // Task<ISessionStatePersistenceProvider> builder.Register( async c => { if (this.isStoreAndForwardEnabled) { IDbStoreProvider dbStoreProvider = await c.Resolve <Task <IDbStoreProvider> >(); IEntityStore <string, SessionState> entityStore = new StoreProvider(dbStoreProvider).GetEntityStore <string, SessionState>(Constants.SessionStorePartitionKey); IEdgeHub edgeHub = await c.Resolve <Task <IEdgeHub> >(); return(new SessionStateStoragePersistenceProvider(edgeHub, entityStore) as ISessionStatePersistenceProvider); } else { IEdgeHub edgeHub = await c.Resolve <Task <IEdgeHub> >(); return(new SessionStatePersistenceProvider(edgeHub) as ISessionStatePersistenceProvider); } }) .As <Task <ISessionStatePersistenceProvider> >() .SingleInstance(); // MqttProtocolHead builder.Register( async c => { var metadataStore = await c.Resolve <Task <IMetadataStore> >(); var settingsProvider = c.Resolve <ISettingsProvider>(); var websocketListenerRegistry = c.Resolve <IWebSocketListenerRegistry>(); var byteBufferAllocator = c.Resolve <IByteBufferAllocator>(); var mqttConnectionProviderTask = c.Resolve <Task <IMqttConnectionProvider> >(); var sessionStatePersistenceProviderTask = c.Resolve <Task <ISessionStatePersistenceProvider> >(); var authenticatorProviderTask = c.Resolve <Task <IAuthenticator> >(); var usernameParser = c.Resolve <IUsernameParser>(); IClientCredentialsFactory clientCredentialsProvider = c.Resolve <IClientCredentialsFactory>(); IMqttConnectionProvider mqttConnectionProvider = await mqttConnectionProviderTask; ISessionStatePersistenceProvider sessionStatePersistenceProvider = await sessionStatePersistenceProviderTask; IAuthenticator authenticator = await authenticatorProviderTask; return(new MqttProtocolHead( settingsProvider, this.tlsCertificate, mqttConnectionProvider, authenticator, usernameParser, clientCredentialsProvider, sessionStatePersistenceProvider, websocketListenerRegistry, byteBufferAllocator, metadataStore, this.clientCertAuthAllowed, this.sslProtocols)); }) .As <Task <MqttProtocolHead> >() .SingleInstance(); base.Load(builder); }
public Bootstrapper(ISettingsProvider settingsProvider, ISessionStatePersistenceProvider sessionStateManager, IQos2StatePersistenceProvider qos2StateProvider, List<string> inboundTemplates, List<string> outboundTemplates) : this(settingsProvider, sessionStateManager, qos2StateProvider, new ConfigurableMessageAddressConverter(inboundTemplates ?? new List<string>(), outboundTemplates ?? new List<string>())) { }