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