Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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);
        }