public async Task StartAsync(IMqttServerOptions options) { Options = options ?? throw new ArgumentNullException(nameof(options)); if (_cancellationTokenSource != null) { throw new InvalidOperationException("The server is already started."); } _cancellationTokenSource = new CancellationTokenSource(); _retainedMessagesManager = new MqttRetainedMessagesManager(Options, _logger); await _retainedMessagesManager.LoadMessagesAsync().ConfigureAwait(false); _clientSessionsManager = new MqttClientSessionsManager(Options, _retainedMessagesManager, _cancellationTokenSource.Token, _eventDispatcher, _logger); _clientSessionsManager.Start(); foreach (var adapter in _adapters) { adapter.ClientAccepted += OnClientAccepted; await adapter.StartAsync(Options).ConfigureAwait(false); } _logger.Info("Started."); Started?.Invoke(this, EventArgs.Empty); }
public async Task StopAsync() { try { if (_cancellationTokenSource == null) { return; } _cancellationTokenSource.Cancel(false); _clientSessionsManager.Stop(); foreach (var adapter in _adapters) { adapter.ClientAccepted -= OnClientAccepted; await adapter.StopAsync().ConfigureAwait(false); } _logger.Info("Stopped."); Stopped?.Invoke(this, EventArgs.Empty); } finally { _cancellationTokenSource?.Dispose(); _cancellationTokenSource = null; _retainedMessagesManager = null; _clientSessionsManager?.Dispose(); _clientSessionsManager = null; } }
async Task <List <string> > PrepareTopicHashSubscriptions(TopicHashSelector selector) { Dictionary <string, List <string> > topicsByPublisher; Dictionary <string, List <string> > singleWildcardTopicsByPublisher; Dictionary <string, List <string> > multiWildcardTopicsByPublisher; const int NumPublishers = 1; const int NumTopicsPerPublisher = 10000; TopicGenerator.Generate(NumPublishers, NumTopicsPerPublisher, out topicsByPublisher, out singleWildcardTopicsByPublisher, out multiWildcardTopicsByPublisher); var topics = topicsByPublisher.FirstOrDefault().Value; var singleWildcardTopics = singleWildcardTopicsByPublisher.FirstOrDefault().Value; var multiWildcardTopics = multiWildcardTopicsByPublisher.FirstOrDefault().Value; const string ClientId = "Client1"; var logger = new Mockups.TestLogger(); var serverOptions = new MQTTnet.Server.MqttServerOptions(); var eventContainer = new MQTTnet.Server.MqttServerEventContainer(); var retainedMessagesManager = new MqttRetainedMessagesManager(eventContainer, logger); var sessionManager = new MqttClientSessionsManager(serverOptions, retainedMessagesManager, eventContainer, logger); _clientSession = new MQTTnet.Server.MqttSession( ClientId, false, new Dictionary <object, object>(), serverOptions, eventContainer, retainedMessagesManager, sessionManager ); List <string> topicsToSubscribe; switch (selector) { case TopicHashSelector.SingleWildcard: topicsToSubscribe = singleWildcardTopics; break; case TopicHashSelector.MultiWildcard: topicsToSubscribe = multiWildcardTopics; break; default: topicsToSubscribe = topics; break; } foreach (var t in topicsToSubscribe) { var subPacket = new Packets.MqttSubscribePacket(); var filter = new Packets.MqttTopicFilter(); filter.Topic = t; subPacket.TopicFilters.Add(filter); await _clientSession.SubscriptionsManager.Subscribe(subPacket, default(CancellationToken)); } return(topics); }
public MqttHostedServer( IOptions <MqttServerOptions> options, IEnumerable <IMqttServerAdapter> adapters, ILogger <MqttServer> logger, MqttClientSessionsManager clientSessionsManager, IMqttClientRetainedMessageManager clientRetainedMessageManager ) : base(options, adapters, logger, clientSessionsManager, clientRetainedMessageManager) { }
public MqttClientSession CreateClientSession(string clientId, MqttClientSessionsManager clientSessionsManager) { return(new MqttClientSession( clientId, _serviceProvider.GetRequiredService <IOptions <MqttServerOptions> >(), clientSessionsManager, _serviceProvider.GetRequiredService <MqttClientSubscriptionsManager>(), _serviceProvider.GetRequiredService <ILogger <MqttClientSession> >(), _serviceProvider.GetRequiredService <ILogger <MqttClientPendingMessagesQueue> >())); }
public void TestInitialize() { var logger = new TestLogger(); var options = new MqttServerOptions(); var retainedMessagesManager = new MqttRetainedMessagesManager(new MqttServerEventContainer(), logger); var eventContainer = new MqttServerEventContainer(); var clientSessionManager = new MqttClientSessionsManager(options, retainedMessagesManager, eventContainer, logger); var session = new MqttSession("", false, new ConcurrentDictionary <object, object>(), options, eventContainer, retainedMessagesManager, clientSessionManager); _subscriptionsManager = new MqttClientSubscriptionsManager(session, new MqttServerEventContainer(), retainedMessagesManager, clientSessionManager); }
public MqttSessionStatus(MqttClientSession session, MqttClientSessionsManager sessionsManager) { _session = session ?? throw new ArgumentNullException(nameof(session)); _sessionsManager = sessionsManager ?? throw new ArgumentNullException(nameof(sessionsManager)); }
public MqttClientSession CreateClientSession(string clientId, MqttClientSessionsManager mqttClientSessionsManager) { throw new NotImplementedException(); //return new MqttClientSession(clientId, mqttClientSessionsManager, new TestLogger<MqttClientSession>(), new TestLogger<MqttClientPendingMessagesQueue>()); }