static private bool ExecuteCompetitionEvents(SoccerWorldDatabaseContext _context, IRealtimeCallback _callback, DateTime date) { //get all events for current date ICollection <CompetitionEvent> events = _context.CompetitionEvents.Where(o => o.Date == date) .Include(o => o.NextCompetitionEvent) .Include(o => o.Competition) .ThenInclude(o => o.Clubs) .ThenInclude(o => o.Country) .OrderByDescending(o => o.Id) .ToList(); if (events.Count == 0) { return(false); } //process each event sequential foreach (CompetitionEvent comp_event in events) { comp_event.Execute(); } _context.SaveChanges(); foreach (CompetitionEvent comp_event in events) { _callback.OnCompetitionEventProcessed(comp_event); } return(true); }
public void Seed() { var country = CreateCountry(); var divisions = CreateCompetition(country); CreateCup(country); CreateClubs(divisions); Context.SaveChanges(); }
static private void ProcessWorld(SoccerWorldDatabaseContext _context, IRealtimeCallback _callback, DateTime target_date) { //if another Process is taking care of it, return if (IsProcessingMatches()) { return; } //as long we did not reach target date while (GetWorldState().CurrentDateTime < target_date) { DateTime eventdate = GetEarliestEvent(_context); //update world date with the first next date (target or event) GetWorldState().CurrentDateTime = (eventdate < target_date ? eventdate : target_date); GetWorldState().AsyncProcessesCount++; _context.SaveChanges(); _callback.OnWorldStateChanged(GetWorldState()); ProcessGameTick(_context, _callback, true); GetWorldState().AsyncProcessesCount--; _context.SaveChanges(); } }