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()); }
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); }
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); }
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); }
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); }
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; } }
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; }