示例#1
0
        public async Task <IEnumerable <RaceRanking>?> GetFinishedSkierRanking(int raceId, int count = 0)
        {
            var maxSensorNr = await _sensorDao.GetLastSensorNumber(raceId);

            var ranking = new List <RaceRanking>();

            if (maxSensorNr == null)
            {
                return(null);
            }
            var position         = 0;
            var equalityIncrease = 1;

            foreach (var timeData in (await _timeDataDao.GetRankingForSensor(raceId, maxSensorNr.Value)).Where(
                         td => td.StartList != null))
            {
                if (position != 0)
                {
                    if (ranking[position - 1].Time == timeData.Time)
                    {
                        equalityIncrease++;
                        if (position == count)
                        {
                            count++;
                        }
                    }
                    else
                    {
                        position        += equalityIncrease;
                        equalityIncrease = 1;
                    }
                }
                else
                {
                    position++;
                }

                ranking.Add(new RaceRanking(timeData.StartList !, timeData.Time, position,
                                            timeData.Time - ranking.FirstOrDefault()?.Time ?? 0));
            }

            return(count == 0 ? ranking : ranking.Take(count));
        }
        public async Task InitializeAsync()
        {
            var clock = await _raceClockProvider.GetRaceClock();

            if (clock != null)
            {
                clock.TimingTriggered +=
                    async(sensorNumber, dateTime) => await OnTimingTriggered(sensorNumber, dateTime);
            }
            _maxSensorNr = await _sensorDao.GetLastSensorNumber(RaceId) ?? -1;
        }