public void Start() { _storageService.TryReadOrCreate(out MqttServiceOptions options, MqttServiceOptions.Filename); var mqttFactory = new MqttFactory(); _enableMqttLogging = options.EnableLogging; if (_enableMqttLogging) { _mqttServer = mqttFactory.CreateMqttServer(new LoggerAdapter(_logger)); } else { _mqttServer = mqttFactory.CreateMqttServer(); } _mqttServer.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(e => OnApplicationMessageReceived(e))); var serverOptions = new MqttServerOptionsBuilder() .WithDefaultEndpointPort(options.ServerPort) .WithPersistentSessions(); if (options.PersistRetainedMessages) { var storage = new MqttServerStorage(_storageService, _logger); storage.Start(); serverOptions.WithStorage(storage); } _mqttServer.StartAsync(serverOptions.Build()).GetAwaiter().GetResult(); Task.Factory.StartNew(() => ProcessIncomingMqttMessages(_systemCancellationToken.Token), _systemCancellationToken.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
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 void Start() { _storageService.TryReadOrCreate(out _options, DefaultDirectoryNames.Configuration, MqttServiceOptions.Filename); var mqttFactory = new MqttFactory(); IsLowLevelMqttLoggingEnabled = _options.EnableLogging; if (IsLowLevelMqttLoggingEnabled) { _mqttServer = mqttFactory.CreateMqttServer(new LoggerAdapter(_logger)); } else { _mqttServer = mqttFactory.CreateMqttServer(); } _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, _logger); storage.Start(); serverOptions.WithStorage(storage); } _mqttServer.StartAsync(serverOptions.Build()).GetAwaiter().GetResult(); _workerThread = new Thread(ProcessIncomingMqttMessages) { Name = nameof(MqttService), IsBackground = true }; _workerThread.Start(); }
public void Start() { _storageService.TryReadOrCreate(out MqttServiceOptions options, MqttServiceOptions.Filename); var mqttFactory = new MqttFactory(); IsLowLevelMqttLoggingEnabled = options.EnableLogging; if (IsLowLevelMqttLoggingEnabled) { _mqttServer = mqttFactory.CreateMqttServer(new LoggerAdapter(_logger)); } else { _mqttServer = mqttFactory.CreateMqttServer(); } _mqttServer.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(e => OnApplicationMessageReceived(e))); var serverOptions = new MqttServerOptionsBuilder() .WithDefaultEndpointPort(options.ServerPort) .WithPersistentSessions(); if (options.PersistRetainedMessages) { var storage = new MqttServerStorage(_storageService, _logger); storage.Start(); serverOptions.WithStorage(storage); } _mqttServer.StartAsync(serverOptions.Build()).GetAwaiter().GetResult(); _workerThread = new Thread(ProcessIncomingMqttMessages) { Priority = ThreadPriority.AboveNormal, IsBackground = true }; _workerThread.Start(); }
static Igloo15MqttServer InitializeServer(Options config, ILoggerFactory factory) { Igloo15MqttServer server = null; try { MqttServerOptionsBuilder serverBuilder = new MqttServerOptionsBuilder(); if (config.Encrypted && File.Exists(config.CertificateLocation)) { if (config.IPAddress == "Any") { serverBuilder.WithEncryptedEndpoint(); } else if (IPAddress.TryParse(config.IPAddress, out IPAddress address)) { serverBuilder.WithEncryptedEndpointBoundIPAddress(address); } else { _logger.LogWarning($"Failed to parse provided IP Address : {config.IPAddress} using default"); serverBuilder.WithEncryptedEndpoint(); } serverBuilder.WithEncryptedEndpointPort(config.Port); var certificate = new X509Certificate2(config.CertificateLocation, config.CertificatePassword); var certBytes = certificate.Export(X509ContentType.Cert); serverBuilder.WithEncryptionCertificate(certBytes); } else { if (config.IPAddress == "Any") { serverBuilder.WithDefaultEndpoint(); } else if (IPAddress.TryParse(config.IPAddress, out IPAddress address)) { serverBuilder.WithDefaultEndpointBoundIPAddress(address); } else { _logger.LogWarning("Failed to parse provided IP Address : {IPAddress} using default", config.IPAddress); serverBuilder.WithDefaultEndpoint(); } serverBuilder.WithDefaultEndpointPort(config.Port); } if (config.Persistent) { serverBuilder.WithPersistentSessions(); } if (!String.IsNullOrEmpty(config.MessageStorageLocation)) { serverBuilder.WithStorage(new RetainedMessageHandler(config.MessageStorageLocation)); } if (config.ShowSubscriptions) { serverBuilder.WithSubscriptionInterceptor(_interceptors.SubscriptionInterceptor); } if (config.ShowMessages) { serverBuilder.WithApplicationMessageInterceptor(_interceptors.MessageInterceptor); } if (config.ShowClientConnections) { serverBuilder.WithConnectionValidator(_interceptors.ConnectionInterceptor); } serverBuilder .WithConnectionBacklog(config.ConnectionBacklog) .WithMaxPendingMessagesPerClient(config.MaxPendingMessagesPerClient) .WithDefaultCommunicationTimeout(TimeSpan.FromSeconds(config.CommunicationTimeout)); server = new Igloo15MqttServer(serverBuilder.Build(), factory); } catch (Exception e) { _logger.LogError(e, "Exception occured during Initialization of Server"); return(null); } return(server); }