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}");
}
}
}