Пример #1
0
        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)}");
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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)}");
            }
        }