コード例 #1
0
        public void ProcessStatusUpdate(IParkingSpotStatusUpdate parkingSpotStatusUpdate)
        {
            logger.LogInformation("BEGIN ProcessStatusUpdate");
            this.carparkProvider.ProcessStatusUpdate(parkingSpotStatusUpdate);
            Carpark carpark = this.carparkProvider.GetCarparkByName(parkingSpotStatusUpdate.Location);

            if (carpark == null)
            {
                logger.LogError($"No carpark found for {parkingSpotStatusUpdate.Location}");
                return;
            }

            ISpotUpdate spotUpdate = new SpotUpdateImpl()
            {
                CarparkId = carpark.Id,
                SpotId    = parkingSpotStatusUpdate.SpotId,
                Status    = parkingSpotStatusUpdate.Available ? SpotStatus.Available : SpotStatus.Unavailable,
                UpdatedOn = parkingSpotStatusUpdate.Timestamp,
                Source    = MessageSource.MessageBus
            };

            ProcessUpdate(spotUpdate);

            logger.LogInformation("END ProcessStatusUpdate");
        }
コード例 #2
0
        public void ProcessUnresponsive()
        {
            DateTime now = DateTime.Now;

            IEnumerable <Carpark> carparks = this.carparkProvider.GetCarparks();

            foreach (var carpark in carparks)
            {
                List <int> unresponsiveSpots = carpark.SpotData.Where(x => (now - x.Value.LastUpdated).Seconds >= 20).Select(x => x.Key).ToList();

                foreach (var spot in unresponsiveSpots)
                {
                    ISpotUpdate update = new SpotUpdateImpl()
                    {
                        CarparkId = carpark.Id,
                        SpotId    = spot,
                        Status    = SpotStatus.Unknown,
                        UpdatedOn = now,
                        Source    = MessageSource.System
                    };

                    ProcessUpdate(update);
                }
            }
        }