public MqttPublisher( ILogger <MqttPublisher> logger, DeviceConfigModel deviceConfigModel, IConfigurationService configurationService) { this._logger = logger; this.DeviceConfigModel = deviceConfigModel; this._configurationService = configurationService; var options = _configurationService.GetMqttClientOptionsAsync().Result; _configurationService.MqqtConfigChangedHandler = this.ReplaceMqttClient; var factory = new MqttFactory(); this._mqttClient = factory.CreateMqttClient(); if (options != null) { this._mqttClient.ConnectAsync(options); this._mqttClientMessage = "Connecting..."; } else { this._mqttClientMessage = "Not configured"; } this._mqttClient.UseConnectedHandler(e => { this._mqttClientMessage = "All good"; }); // configure what happens on disconnect this._mqttClient.UseDisconnectedHandler(async e => { this._mqttClientMessage = e.ReasonCode.ToString(); if (e.ReasonCode != MQTTnet.Client.Disconnecting.MqttClientDisconnectReason.NormalDisconnection) { _logger.LogWarning("Disconnected from server"); await Task.Delay(TimeSpan.FromSeconds(5)); try { await this._mqttClient.ConnectAsync(options, CancellationToken.None); } catch (Exception ex) { _logger.LogError(ex, "Reconnecting failed"); } } }); }
public MqttPublisher( ILogger <MqttPublisher> logger, DeviceConfigModel deviceConfigModel, IConfigurationService configurationService) { this.Subscribers = new List <AbstractCommand>(); this._logger = logger; this.DeviceConfigModel = deviceConfigModel; this._configurationService = configurationService; var options = _configurationService.GetMqttClientOptionsAsync().Result; _configurationService.MqqtConfigChangedHandler = this.ReplaceMqttClient; var factory = new MqttFactory(); this._mqttClient = factory.CreateManagedMqttClient(); if (options != null) { this._mqttClient.StartAsync(options); this._mqttClientMessage = "Connecting..."; } else { this._mqttClientMessage = "Not configured"; } this._mqttClient.UseConnectedHandler(e => { this._mqttClientMessage = "All good"; }); this._mqttClient.UseApplicationMessageReceivedHandler(e => this.HandleMessageReceived(e.ApplicationMessage)); // configure what happens on disconnect this._mqttClient.UseDisconnectedHandler(e => { this._mqttClientMessage = e.ReasonCode.ToString(); }); }