Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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);
        }
        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 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);
        }