private async Task ReceiveMessagesFromDeviceAsync()

in backend/MXApi/Services/MessagingService.cs [62:111]


    private async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
    {
      var eventHubReceiver = _eventHubClient.GetConsumerGroup(ConfigurationManager.AppSettings["ConsumerGroup"])
        .CreateReceiver(partition, DateTime.UtcNow);

      while (_hubContext != null && !ct.IsCancellationRequested)
      {
        try
        {
          var eventData = await eventHubReceiver.ReceiveAsync();
          if (eventData == null) continue;

          var data = Encoding.UTF8.GetString(eventData.GetBytes());
          var deviceId = eventData.SystemProperties["iothub-connection-device-id"].ToString();
          var fromDeviceObject = JsonConvert.DeserializeObject<MxPayload>(data);

          var gForce = CalculateGForce(Convert.ToDouble(fromDeviceObject.AccelX),
            Convert.ToDouble(fromDeviceObject.AccelY), Convert.ToDouble(fromDeviceObject.AccelZ));

          var mgauss = CalculateSingleMGauss(fromDeviceObject.MagX, fromDeviceObject.MagY, fromDeviceObject.MagZ);

          // We are just going to simulate a DB reading as the sound file is too large to be sent in a message
          var decibel = 0.0;
          if (fromDeviceObject.SoundRecorded)
          {
            decibel = GetRandomSpeakingDecibel(Constants.LowSpeakingDbValue, Constants.HighSpeakingDbValue);
          }

          var metricsPayload = new MetricsPayload
          {
            Id = deviceId,
            Gravity = Math.Round(gForce, 3),
            Temperature = Math.Round(fromDeviceObject.Temperature, 2),
            Humidity = Math.Round(fromDeviceObject.Humidity, 2),
            Pressure = Math.Round(fromDeviceObject.Pressure, 2),
            Magnetometer = mgauss,
            Decibels = decibel
          };

          var msg = JsonConvert.SerializeObject(metricsPayload);
          Trace.TraceInformation($"Publishing message: {msg}");

          _hubContext.Clients.All.Message(msg);
        }
        catch (Exception e)
        {
          Trace.TraceError($"An error occurred while receiving messages: {e}");
        }
      }
    }