public async Task Handle(GpsDataReceivedEvent @event) { _logger.LogDebug("Received GPS data from broker..."); var sensorDataEntity = new SensorData { SensorKey = "gps", TimeStamp = DateTime.UtcNow, Value = JsonConvert.SerializeObject(new GpsData { Latitude = @event.Latitude, Longitude = @event.Longitude }) }; try { // Validate payload new GpsDataValidator().Validate(sensorDataEntity); // Save to DB await _sensorDataRepository.CreateAsync(sensorDataEntity); // Notify clients via SignalR await _hubContext.Clients.All.SendAsync(Constants.Topics.GpsPosition, sensorDataEntity.Value); } catch (ValidationException ex) { _logger.LogError(ex, "Received invalid GPS data!"); } catch (Exception ex) { _logger.LogError(ex, $"Unknown error at {nameof(GpsDataReceivedEventHandler)}"); } }
public async Task Handle(SaveSensorDataEvent @event) { // Validate if (string.IsNullOrEmpty(@event.SensorKey) || !double.TryParse(@event.Value.ToString(), out _)) { return; } // Save in DB var entity = new SensorData { SensorKey = @event.SensorKey, Value = @event.Value.ToString(CultureInfo.InvariantCulture), TimeStamp = @event.Time ?? DateTime.UtcNow }; SensorDataValidatorExecutor.Execute(entity, true); var created = await _sensorDataRepository.CreateAsync(entity); var data = JsonConvert.SerializeObject(created); // Notify UI via SignalR (uses 'sensor' topic) await _hubContext.Clients.All.SendAsync(Constants.Topics.Sensor, data); }
public async Task Handle(CompassDataReceivedEvent @event) { _logger.LogDebug("Received compass data from broker..."); var sensorDataEntity = new SensorData { SensorKey = "compass", TimeStamp = DateTime.UtcNow, Value = @event.Angle.ToString() }; try { // Save to DB await _sensorDataRepository.CreateAsync(sensorDataEntity); // Notify clients via SignalR await _hubContext.Clients.All.SendAsync(Constants.Topics.Compass, sensorDataEntity.Value); } catch (Exception ex) { _logger.LogError(ex, $"Unknown error at {nameof(CompassDataReceivedEventHandler)}"); } }