internal MqttServerImpl(IMqttChannelListener binaryChannelListener, IPacketChannelFactory channelFactory, IProtocolFlowProvider flowProvider, IConnectionProvider connectionProvider, ISubject <MqttUndeliveredMessage> undeliveredMessagesListener, MqttConfiguration configuration) { _privateStreamListener = new Subject <PrivateStream>(); _binaryChannelListeners = new[] { new PrivateChannelListener(_privateStreamListener, configuration), binaryChannelListener }; _channelFactory = channelFactory; _flowProvider = flowProvider; _connectionProvider = new NotifyingConnectionProvider(this, connectionProvider); _undeliveredMessagesListener = undeliveredMessagesListener; _configuration = configuration; }
/// <summary> /// Creates an MQTT Server /// </summary> /// <param name="configuration"> /// The configuration used for creating the Server /// See <see cref="MqttConfiguration" /> for more details about the supported values /// </param> /// <returns>A new MQTT Server</returns> /// <exception cref="MqttServerException">MqttServerException</exception> public IMqttServer CreateServer(MqttConfiguration configuration) { try { MqttTopicEvaluator topicEvaluator = new MqttTopicEvaluator(configuration); IMqttChannelListener channelProvider = _binding.GetChannelListener(configuration); PacketChannelFactory channelFactory = new PacketChannelFactory(topicEvaluator, configuration); InMemoryRepositoryProvider repositoryProvider = new InMemoryRepositoryProvider(); ConnectionProvider connectionProvider = new ConnectionProvider(); PacketIdProvider packetIdProvider = new PacketIdProvider(); Subject <MqttUndeliveredMessage> undeliveredMessagesListener = new Subject <MqttUndeliveredMessage>(); ServerProtocolFlowProvider flowProvider = new ServerProtocolFlowProvider(_authenticationProvider, connectionProvider, topicEvaluator, repositoryProvider, packetIdProvider, undeliveredMessagesListener, configuration); return(new MqttServerImpl(channelProvider, channelFactory, flowProvider, connectionProvider, undeliveredMessagesListener, configuration)); } catch (Exception ex) { _tracer.Error(ex, ServerProperties.Server_InitializeError); throw new MqttServerException(ServerProperties.Server_InitializeError, ex); } }