public static RlmGetRacesResponse GetRaces(int tournamentID) { IRlmRepository repo = RepositoryManager.GetDefaultRepository(); RlmGetRacesResponse response = null; lock (_lock) { Tournament tournament = repo.LoadTournament(tournamentID); response = GetRaces(tournament); } return(response); }
public static RlmGetRacesResponse GetRaces(Tournament tournament) { RlmGetRacesResponse response = new RlmGetRacesResponse(); response.NumCars = tournament.NumCars; response.NumLanes = tournament.NumLanes; response.NumRaces = tournament.NumRaces; response.Races = tournament.Races; Dictionary <int, List <RlmGetRacesResponse.CarRaces.CarLaneAssignment> > carRaceDictionary = new Dictionary <int, List <RlmGetRacesResponse.CarRaces.CarLaneAssignment> >(); foreach (IRace race in tournament.Races) { foreach (ILaneAssignment assignment in race.LaneAssignments) { if (assignment.Car == null) { continue; } if (!carRaceDictionary.ContainsKey(assignment.Car.ID)) { carRaceDictionary.Add(assignment.Car.ID, new List <RlmGetRacesResponse.CarRaces.CarLaneAssignment>()); } carRaceDictionary[assignment.Car.ID].Add(new RlmGetRacesResponse.CarRaces.CarLaneAssignment() { RaceNum = race.RaceNumber, LaneNum = assignment.Lane }); } } List <RlmGetRacesResponse.CarRaces> racesByCar = new List <RlmGetRacesResponse.CarRaces>(); foreach (int carID in carRaceDictionary.Keys) { RlmGetRacesResponse.CarRaces carRaces = new RlmGetRacesResponse.CarRaces(); carRaces.Car = tournament.Cars.Where(c => c.ID == carID).SingleOrDefault(); carRaces.Assignments = carRaceDictionary[carID].OrderBy(c => c.RaceNum).ToList(); racesByCar.Add(carRaces); } response.RacesByCar = racesByCar; return(response); }
public static RlmGetRacesResponse GenerateRaces(int tournamentID) { IRlmRepository repo = RepositoryManager.GetDefaultRepository(); RlmGetRacesResponse result = null; lock (_lock) { Tournament tournament = repo.LoadTournament(tournamentID); // generate the races TournamentManager.GenerateRaces(ref tournament); repo.SaveTournament(tournament); result = GetRaces(tournament); } RacesUpdated?.Invoke(tournamentID, new RacesUpdatedEventArgs(result)); CurrentRaceChanged?.Invoke(tournamentID, new CurrentRaceChangedEventArgs(null, GetCurrentRace(tournamentID))); //RaceUpdated?.Invoke(tournamentID, new RaceUpdatedEventArgs(GetCurrentRace(tournamentID))); NextRacesUpdated?.Invoke(tournamentID, new NextRacesUpdatedEventArgs(GetNextRaces(tournamentID))); StandingsUpdated?.Invoke(tournamentID, new StandingsUpdatedEventArgs(GetStandings(tournamentID))); return(result); }
public RacesUpdatedEventArgs(RlmGetRacesResponse races) { this.Races = races; }