Пример #1
0
        public async Task StartAsync(MqttServerOptions 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);

            _clientSessionsManager = new MqttClientSessionsManager(_options, _retainedMessagesManager, _logger);
            _clientSessionsManager.ApplicationMessageReceived += OnApplicationMessageReceived;
            _clientSessionsManager.ClientConnected            += OnClientConnected;
            _clientSessionsManager.ClientDisconnected         += OnClientDisconnected;

            await _retainedMessagesManager.LoadMessagesAsync();

            foreach (var adapter in _adapters)
            {
                adapter.ClientAccepted += OnClientAccepted;
                await adapter.StartAsync(_options);
            }

            _logger.Info <MqttServer>("Started.");

            Started?.Invoke(this, new MqttServerStartedEventArgs());
        }
Пример #2
0
        public MqttServer(MqttServerOptions options, IMqttServerAdapter adapter)
        {
            _options = options ?? throw new ArgumentNullException(nameof(options));
            _adapter = adapter ?? throw new ArgumentNullException(nameof(adapter));

            _clientSessionsManager = new MqttClientSessionsManager(options);
        }
 public MqttClientSession(string clientId, MqttServerOptions options, MqttClientSessionsManager mqttClientSessionsManager)
 {
     ClientId = clientId;
     _options = options ?? throw new ArgumentNullException(nameof(options));
     _mqttClientSessionsManager = mqttClientSessionsManager ?? throw new ArgumentNullException(nameof(mqttClientSessionsManager));
     _pendingMessagesQueue      = new MqttClientPendingMessagesQueue(options, this);
 }
Пример #4
0
        public MqttServer(MqttServerOptions options, ICollection <IMqttServerAdapter> adapters)
        {
            _options  = options ?? throw new ArgumentNullException(nameof(options));
            _adapters = adapters ?? throw new ArgumentNullException(nameof(adapters));

            _clientSessionsManager = new MqttClientSessionsManager(options);
            _clientSessionsManager.ApplicationMessageReceived += (s, e) => ApplicationMessageReceived?.Invoke(s, e);
        }
Пример #5
0
        public MqttClientSession(
            string clientId,
            MqttServerOptions options,
            MqttClientSessionsManager sessionsManager,
            IMqttNetLogger logger)
        {
            _sessionsManager = sessionsManager ?? throw new ArgumentNullException(nameof(sessionsManager));
            _logger          = logger ?? throw new ArgumentNullException(nameof(logger));

            ClientId = clientId;

            _options = options;

            _subscriptionsManager = new MqttClientSubscriptionsManager(_options);
            _pendingMessagesQueue = new MqttClientPendingMessagesQueue(_options, this, _logger);
        }
Пример #6
0
        public MqttClientSession(
            string clientId,
            IOptions <MqttServerOptions> options,
            MqttClientSessionsManager sessionsManager,
            MqttClientSubscriptionsManager subscriptionsManager,
            ILogger <MqttClientSession> logger,
            ILogger <MqttClientPendingMessagesQueue> messageQueueLogger)
        {
            _sessionsManager      = sessionsManager ?? throw new ArgumentNullException(nameof(sessionsManager));
            _subscriptionsManager = subscriptionsManager ?? throw new ArgumentNullException(nameof(subscriptionsManager));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));

            ClientId = clientId;

            _options = options.Value;
            _pendingMessagesQueue = new MqttClientPendingMessagesQueue(_options, this, messageQueueLogger);
        }
Пример #7
0
        public async Task StopAsync()
        {
            try
            {
                if (_cancellationTokenSource == null)
                {
                    return;
                }

                _cancellationTokenSource.Cancel(false);
                _cancellationTokenSource.Dispose();

                foreach (var adapter in _adapters)
                {
                    adapter.ClientAccepted -= OnClientAccepted;
                    await adapter.StopAsync();
                }

                await _clientSessionsManager.StopAsync();

                _logger.Info <MqttServer>("Stopped.");
            }
            finally
            {
                _cancellationTokenSource = null;

                _retainedMessagesManager = null;

                if (_clientSessionsManager != null)
                {
                    _clientSessionsManager.ApplicationMessageReceived -= OnApplicationMessageReceived;
                    _clientSessionsManager.ClientConnected            -= OnClientConnected;
                    _clientSessionsManager.ClientDisconnected         -= OnClientDisconnected;
                }

                _clientSessionsManager = null;
            }
        }
Пример #8
0
        public MqttServer(
            IOptions <MqttServerOptions> options,
            IEnumerable <IMqttServerAdapter> adapters,
            ILogger <MqttServer> logger,
            MqttClientSessionsManager clientSessionsManager,
            IMqttClientRetainedMessageManager clientRetainedMessageManager)
        {
            _options = options.Value ?? throw new ArgumentNullException(nameof(options));
            _logger  = logger ?? throw new ArgumentNullException(nameof(logger));
            _clientSessionsManager        = clientSessionsManager ?? throw new ArgumentNullException(nameof(clientSessionsManager));
            _clientRetainedMessageManager = clientRetainedMessageManager ?? throw new ArgumentNullException(nameof(clientRetainedMessageManager));

            if (adapters == null)
            {
                throw new ArgumentNullException(nameof(adapters));
            }

            _adapters = adapters.ToList();

            _clientSessionsManager.ApplicationMessageReceived += (s, e) => ApplicationMessageReceived?.Invoke(s, e);
            _clientSessionsManager.ClientConnected            += OnClientConnected;
            _clientSessionsManager.ClientDisconnected         += OnClientDisconnected;
        }