protected override void OnStart() { _storageService.SafeReadSerializedValue(out _options, DefaultDirectoryNames.Configuration, MqttServiceOptions.Filename); IsLowLevelMqttLoggingEnabled = _options.EnableLogging; var mqttFactory = new MqttFactory(); IMqttNetLogger mqttNetLogger; if (IsLowLevelMqttLoggingEnabled) { mqttNetLogger = new LoggerAdapter(_logger); } else { mqttNetLogger = new MqttNetLogger(); } _webSocketServerAdapter = new MqttWebSocketServerAdapter(mqttNetLogger); var serverAdapters = new List <IMqttServerAdapter> { new MqttTcpServerAdapter(mqttNetLogger), _webSocketServerAdapter }; _mqttServer = mqttFactory.CreateMqttServer(serverAdapters, mqttNetLogger); _mqttServer.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(e => OnApplicationMessageReceived(e))); var serverOptions = new MqttServerOptionsBuilder() .WithDefaultEndpointPort(_options.ServerPort) .WithConnectionValidator(ValidateClientConnection) .WithPersistentSessions(); if (_options.PersistRetainedMessages) { var storage = new MqttServerStorage(_storageService, _systemCancellationToken, _logger); storage.Start(); serverOptions.WithStorage(storage); } _mqttServer.StartAsync(serverOptions.Build()).GetAwaiter().GetResult(); _systemCancellationToken.Token.Register(() => { _mqttServer.StopAsync().GetAwaiter().GetResult(); }); ParallelTask.StartLongRunning(ProcessIncomingMqttMessages, _systemCancellationToken.Token, _logger); }
public MqttServerService( MqttSettingsModel mqttSettings, CustomMqttFactory mqttFactory, MqttClientConnectedHandler mqttClientConnectedHandler, MqttClientDisconnectedHandler mqttClientDisconnectedHandler, MqttClientSubscribedTopicHandler mqttClientSubscribedTopicHandler, MqttClientUnsubscribedTopicHandler mqttClientUnsubscribedTopicHandler, MqttServerConnectionValidator mqttConnectionValidator, MqttSubscriptionInterceptor mqttSubscriptionInterceptor, MqttUnsubscriptionInterceptor mqttUnsubscriptionInterceptor, MqttApplicationMessageInterceptor mqttApplicationMessageInterceptor, MqttServerStorage mqttServerStorage, PythonScriptHostService pythonScriptHostService, ILogger <MqttServerService> logger) { _settings = mqttSettings ?? throw new ArgumentNullException(nameof(mqttSettings)); _mqttClientConnectedHandler = mqttClientConnectedHandler ?? throw new ArgumentNullException(nameof(mqttClientConnectedHandler)); _mqttClientDisconnectedHandler = mqttClientDisconnectedHandler ?? throw new ArgumentNullException(nameof(mqttClientDisconnectedHandler)); _mqttClientSubscribedTopicHandler = mqttClientSubscribedTopicHandler ?? throw new ArgumentNullException(nameof(mqttClientSubscribedTopicHandler)); _mqttClientUnsubscribedTopicHandler = mqttClientUnsubscribedTopicHandler ?? throw new ArgumentNullException(nameof(mqttClientUnsubscribedTopicHandler)); _mqttConnectionValidator = mqttConnectionValidator ?? throw new ArgumentNullException(nameof(mqttConnectionValidator)); _mqttSubscriptionInterceptor = mqttSubscriptionInterceptor ?? throw new ArgumentNullException(nameof(mqttSubscriptionInterceptor)); _mqttUnsubscriptionInterceptor = mqttUnsubscriptionInterceptor ?? throw new ArgumentNullException(nameof(mqttUnsubscriptionInterceptor)); _mqttApplicationMessageInterceptor = mqttApplicationMessageInterceptor ?? throw new ArgumentNullException(nameof(mqttApplicationMessageInterceptor)); _mqttServerStorage = mqttServerStorage ?? throw new ArgumentNullException(nameof(mqttServerStorage)); _pythonScriptHostService = pythonScriptHostService ?? throw new ArgumentNullException(nameof(pythonScriptHostService)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _webSocketServerAdapter = new MqttWebSocketServerAdapter(mqttFactory.Logger); var adapters = new List <IMqttServerAdapter> { new MqttTcpServerAdapter(mqttFactory.Logger) { TreatSocketOpeningErrorAsWarning = true // Opening other ports than for HTTP is not allows in Azure App Services. }, _webSocketServerAdapter }; _mqttServer = mqttFactory.CreateMqttServer(adapters); }
public MqttServerService( MqttSettingsModel mqttSettings, MqttClientConnectedHandler mqttClientConnectedHandler, MqttClientDisconnectedHandler mqttClientDisconnectedHandler, MqttClientSubscribedTopicHandler mqttClientSubscribedTopicHandler, MqttClientUnsubscribedTopicHandler mqttClientUnsubscribedTopicHandler, MqttServerConnectionValidator mqttConnectionValidator, MqttSubscriptionInterceptor mqttSubscriptionInterceptor, MqttUnsubscriptionInterceptor mqttUnsubscriptionInterceptor, MqttApplicationMessageInterceptor mqttApplicationMessageInterceptor, ILogger <MqttServerService> logger) { _settings = mqttSettings ?? throw new ArgumentNullException(nameof(mqttSettings)); _mqttClientConnectedHandler = mqttClientConnectedHandler ?? throw new ArgumentNullException(nameof(mqttClientConnectedHandler)); _mqttClientDisconnectedHandler = mqttClientDisconnectedHandler ?? throw new ArgumentNullException(nameof(mqttClientDisconnectedHandler)); _mqttClientSubscribedTopicHandler = mqttClientSubscribedTopicHandler ?? throw new ArgumentNullException(nameof(mqttClientSubscribedTopicHandler)); _mqttClientUnsubscribedTopicHandler = mqttClientUnsubscribedTopicHandler ?? throw new ArgumentNullException(nameof(mqttClientUnsubscribedTopicHandler)); _mqttConnectionValidator = mqttConnectionValidator ?? throw new ArgumentNullException(nameof(mqttConnectionValidator)); _mqttSubscriptionInterceptor = mqttSubscriptionInterceptor ?? throw new ArgumentNullException(nameof(mqttSubscriptionInterceptor)); _mqttUnsubscriptionInterceptor = mqttUnsubscriptionInterceptor ?? throw new ArgumentNullException(nameof(mqttUnsubscriptionInterceptor)); _mqttApplicationMessageInterceptor = mqttApplicationMessageInterceptor ?? throw new ArgumentNullException(nameof(mqttApplicationMessageInterceptor)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); var mqttFactory = new MqttFactory(); _webSocketServerAdapter = new MqttWebSocketServerAdapter(mqttFactory.DefaultLogger); var adapters = new List <IMqttServerAdapter> { new MqttTcpServerAdapter(mqttFactory.DefaultLogger) { TreatSocketOpeningErrorAsWarning = true }, _webSocketServerAdapter }; _mqttServer = mqttFactory.CreateMqttServer(adapters); // Make this object available to message interceptor class avoiding // circular references created when using dependency injection. _mqttApplicationMessageInterceptor.SetServerService(this); }
public MqttServerService( SettingsModel settings, CustomMqttFactory mqttFactory, MqttClientConnectedHandler mqttClientConnectedHandler, MqttClientDisconnectedHandler mqttClientDisconnectedHandler, MqttClientSubscribedTopicHandler mqttClientSubscribedTopicHandler, MqttClientUnsubscribedTopicHandler mqttClientUnsubscribedTopicHandler, MqttConnectionValidator mqttConnectionValidator, MqttSubscriptionInterceptor mqttSubscriptionInterceptor, MqttApplicationMessageInterceptor mqttApplicationMessageInterceptor, MqttServerStorage mqttServerStorage, PythonScriptHostService pythonScriptHostService, ILogger <MqttServerService> logger) { _settings = settings ?? throw new ArgumentNullException(nameof(settings)); _mqttClientConnectedHandler = mqttClientConnectedHandler ?? throw new ArgumentNullException(nameof(mqttClientConnectedHandler)); _mqttClientDisconnectedHandler = mqttClientDisconnectedHandler ?? throw new ArgumentNullException(nameof(mqttClientDisconnectedHandler)); _mqttClientSubscribedTopicHandler = mqttClientSubscribedTopicHandler ?? throw new ArgumentNullException(nameof(mqttClientSubscribedTopicHandler)); _mqttClientUnsubscribedTopicHandler = mqttClientUnsubscribedTopicHandler ?? throw new ArgumentNullException(nameof(mqttClientUnsubscribedTopicHandler)); _mqttConnectionValidator = mqttConnectionValidator ?? throw new ArgumentNullException(nameof(mqttConnectionValidator)); _mqttSubscriptionInterceptor = mqttSubscriptionInterceptor ?? throw new ArgumentNullException(nameof(mqttSubscriptionInterceptor)); _mqttApplicationMessageInterceptor = mqttApplicationMessageInterceptor ?? throw new ArgumentNullException(nameof(mqttApplicationMessageInterceptor)); _mqttServerStorage = mqttServerStorage ?? throw new ArgumentNullException(nameof(mqttServerStorage)); _pythonScriptHostService = pythonScriptHostService ?? throw new ArgumentNullException(nameof(pythonScriptHostService)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _webSocketServerAdapter = new MqttWebSocketServerAdapter(mqttFactory.Logger.CreateChildLogger()); var adapters = new List <IMqttServerAdapter> { new MqttTcpServerAdapter(mqttFactory.Logger.CreateChildLogger()), _webSocketServerAdapter }; _mqttServer = mqttFactory.CreateMqttServer(adapters); }