private void Run() { while (!_cancelationToken.IsCancellationRequested) { _logger.Info("Sending telemetry"); _metricRecorder.CountEvent(DeconzToMqttIdentifier.SendInterval()); try { foreach (var repository in _repositories) { foreach (var item in repository.GetAllDeconzItems()) { try { var msg = new DeconzItemTelemetryMqttMessage { Content = repository.Serialize(item), Entity = item }; _mqttClient.SendMessage(msg); } catch (Exception ex) { _logger.Error(ex, "Sending of message for sensor {0} failed", item.Name); } } } } catch (Exception ex) { _logger.Error(ex, "Error in telemetry processing occurred"); } Thread.Sleep(TimeSpan.FromSeconds(60)); } _task = null; }
public void SendMessage(MqttMessage message) { _metricRecorder.CountEvent(DeconzToMqttIdentifier.SendMessage()); lock (_sendLock) { if (!_client.IsConnected) { _logger.Warn("MQTT Client not connected. Try reconnect"); if (_client != null) { _client.Dispose(); } _client = null; Connect(); } var visitor = new MqttMessageBuilderVisitor(); var messageConverted = message.Accept(visitor); _metricRecorder.Measure(DeconzToMqttIdentifier.MessageSize(), messageConverted.Payload.Length); _client.PublishAsync(messageConverted, _cancelationToken.Token).Wait(); } }