コード例 #1
0
        public void GetResult_Returns_Righ_Result_With_Leavers()
        {
            var laps = new List <Lap>
            {
                new Lap("12:01:12", "1", "testPosition2", "1", "1:11.111", "1"),
                new Lap("12:01:12", "1", "testPosition2", "2", "1:11.111", "1"),
                new Lap("12:01:12", "1", "testPosition2", "3", "1:11.111", "1"),
                new Lap("12:01:12", "1", "testPosition2", "4", "1:11.111", "1"),
                new Lap("12:01:12", "2", "testPosition1", "1", "0:11.111", "1"),
                new Lap("12:01:12", "2", "testPosition1", "2", "0:11.111", "1"),
                new Lap("12:01:12", "2", "testPosition1", "3", "0:11.111", "1"),
                new Lap("12:01:12", "2", "testPosition1", "4", "0:11.111", "1"),
                new Lap("12:01:12", "3", "testPosition3", "4", "0:11.111", "1")
            };
            var race       = new Race(laps);
            var raceResult = new RaceResult(race);

            raceResult.GetResult();
            raceResult.Result[0].Should().NotBeNull();
            raceResult.Result[1].Should().NotBeNull();
            raceResult.Result[0].Racer.Name.Should().Be("testPosition1");
            raceResult.Result[0].Racer.RacerId.Should().Be(2);
            raceResult.Result[1].Racer.Name.Should().Be("testPosition2");
            raceResult.Result[1].Racer.RacerId.Should().Be(1);
            raceResult.Leavers.Should().NotBeEmpty();
            raceResult.Leavers[0].Racer.RacerId.Should().Be(3);
            raceResult.Leavers[0].Racer.Name.Should().Be("testPosition3");
        }
コード例 #2
0
        private async Task <bool> AddRaceResultWherePreviousExists(RaceResultViewModel model,
                                                                   ICollection <RaceResult> RaceResults,
                                                                   IQueryable <Member> members)
        {
            bool isSaveSuccess = true;
            List <RaceResult> assignedRaceResults = new List <RaceResult>();

            foreach (var recordId in model.MemberIds)
            {
                var currentMember = members.Where(a => a.Id == recordId).FirstOrDefault();
                if (currentMember != null)
                {
                    if (!RaceResults.Any(a => a.MemberId == recordId))
                    {
                        int ageGroupId = await CalculateAge(currentMember, model.RaceDistanceId);

                        var raceResultRepo = new RaceResult();
                        assignedRaceResults.Add(raceResultRepo.ToEntity(recordId, model.RaceDistanceId, model.TimeTaken, model.Position, ageGroupId, model.SessionUserId));
                    }
                }
            }

            if (assignedRaceResults.Count > 0)
            {
                await _context.RaceResult.AddRangeAsync(assignedRaceResults);

                await _context.SaveChangesAsync();

                isSaveSuccess = true;
            }

            return(isSaveSuccess);
        }
コード例 #3
0
ファイル: GameUI.cs プロジェクト: marrony/ncar
    void Start()
    {
        gameMaster.OnLapChange += (newLap) => lap = newLap;
        gameMaster.OnBestLap += (bestLap) => {
            this.bestLap = TimeSpan.FromSeconds(bestLap);
            bestTimeHighlight = 1;
        };
        gameMaster.OnRaceFinishes += (result) => {
            showRaceResult = true;
            this.result = result;
        };

        hudRect = new Rect(Screen.width - 130, 10, 120, 85);
        lapRect = new Rect(hudRect.x + 15, hudRect.y + 5, 80, 20);
        bestLabelRect = new Rect(hudRect.x + 15, hudRect.y + 40, 80, 20);
        bestTimeRect = new Rect(hudRect.x + 15, hudRect.y + 57, 80, 20);
        resultRect = new Rect(Screen.width/2 - 50, 100, 100, 30);

        hudStyle = new GUIStyle();
        hudStyle.normal.background = createFlatTexture(new Color(0, 0, 0, 0.4f));

        titleStyle = new GUIStyle();
        titleStyle.normal.textColor = Color.white;
        titleStyle.fontSize = 26;
        titleStyle.font = font;

        labelStyle = new GUIStyle(titleStyle);
        labelStyle.normal.textColor = Color.gray;
        labelStyle.fontSize = 14;

        valueStyle = new GUIStyle(titleStyle);
        valueStyle.fontSize = 16;

        bestTimeStyle = new GUIStyle(valueStyle);
    }
コード例 #4
0
        private async Task <bool> AddEntity(RaceResultViewModel model,
                                            ICollection <RaceResult> containerEntityList,
                                            IQueryable <Member> referralEntityList)
        {
            bool isSaveSuccess = true;
            List <RaceResult> RaceResultList = new List <RaceResult>();

            foreach (var record in model.MemberIds)
            {
                var currentReferralEntity = referralEntityList.Any(a => a.Id == record);
                if (currentReferralEntity)
                {
                    int ageGroupId = await CalculateAge(referralEntityList.FirstOrDefault(), model.RaceDistanceId);

                    RaceResult RaceResult = new RaceResult();
                    RaceResultList.Add(RaceResult.ToEntity(record, model.RaceDistanceId, model.TimeTaken, model.Position, ageGroupId, model.SessionUserId));
                }
            }

            if (RaceResultList.Count > 0)
            {
                await _context.RaceResult.AddRangeAsync(RaceResultList);

                await _context.SaveChangesAsync();

                isSaveSuccess = true;
            }

            return(isSaveSuccess);
        }
コード例 #5
0
        public async Task <RaceResult> AddRaceResult(RaceResult raceResult)
        {
            _dbContext.RaceResults.Add(raceResult);
            await _dbContext.SaveChangesAsync();

            return(raceResult);
        }
コード例 #6
0
        private static Dictionary <RaceResult, ComparativePerformanceResult> GetXYResults(List <RaceResult> raceResults, Dictionary <string, double> genderHistorgram)
        {
            var xyResults = new Dictionary <RaceResult, ComparativePerformanceResult>();

            foreach (var raceResult in raceResults)
            {
                var tempsPartiel1 = RaceResult.ParseAsTimeSpan(raceResult.temps_partiel_1);
                var tempsPartiel2 = RaceResult.ParseAsTimeSpan(raceResult.temps_partiel_2);

                if (genderHistorgram.ContainsKey(raceResult.age) &&
                    tempsPartiel1.HasValue &&
                    tempsPartiel2.HasValue)
                {
                    var totalTime = raceResult.GetTotalTimeAsTimeSpan();
                    var ageAverageTimeInMilliseconds = genderHistorgram[raceResult.age];
                    var ageAverageTime = TimeSpan.FromMilliseconds(ageAverageTimeInMilliseconds);

                    var firstHalfVsTotalTimeSpeedRatio = tempsPartiel1.Value.TotalMilliseconds / totalTime.Value.TotalMilliseconds;
                    var ageComparativePerformanceRatio = totalTime.Value.TotalMilliseconds / ageAverageTime.TotalMilliseconds;

                    var xyResult = new ComparativePerformanceResult(ageComparativePerformanceRatio, firstHalfVsTotalTimeSpeedRatio);
                    xyResults.Add(raceResult, xyResult);
                }
            }
            return(xyResults);
        }
        public async Task <RaceResult> Create(RaceResult newRaceResult)
        {
            Db.RaceResults.Add(newRaceResult);
            await Db.SaveChangesAsync();

            return(newRaceResult);
        }
コード例 #8
0
        public int CreateRaceResult(RaceResult raceResult)
        {
            entities.RaceResults.Add(raceResult);
            int created = entities.SaveChanges();

            return(raceResult.RaceResultID);
        }
コード例 #9
0
        public async Task <IHttpActionResult> PutRaceResult(int id, RaceResult raceResult)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != raceResult.Id)
            {
                return(BadRequest());
            }

            db.Entry(raceResult).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RaceResultExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
コード例 #10
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Time")] RaceResult raceResult)
        {
            if (id != raceResult.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(raceResult);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!RaceResultExists(raceResult.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(raceResult));
        }
コード例 #11
0
 public InstanceResultViewModel(string instanceName, RaceResult result, RaceTime time, bool isPresented = false)
 {
     this.InstanceName = instanceName;
     this.Result       = result;
     this.Time         = time;
     this.IsPresented  = isPresented;
 }
コード例 #12
0
        private void SendResultBtn_Clicked(object s, EventArgs e)
        {
            RaceResult raceresult = new RaceResult();

            raceresult.Time   = Clocktxt.Text;
            raceresult.RaceId = Int32.Parse(PlayContext.MapID);
            HttpClientHandler clientHandler = new HttpClientHandler();

            clientHandler.ServerCertificateCustomValidationCallback            = (sender, cert, chain, sslPolicyErrors) => { return(true); };
            System.Net.ServicePointManager.ServerCertificateValidationCallback = (message, cert, chain, errors) => { return(true); };
            HttpClient client = new HttpClient(clientHandler);

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Tokens.UserToken);
            Uri uri = new Uri("https://xamaracing.azurewebsites.net//v1/RaceResults");

            var content  = JsonConvert.SerializeObject(raceresult);
            var data     = new StringContent(content, Encoding.UTF8, "application/json");
            var response = client.PostAsync(uri, data).Result;
            var result   = response.Content.ReadAsStringAsync().Result;

            //Clocktxt.Text = "Clock";
            SendResultBtn.IsEnabled = false;
            Clock.Reset();
            MapNametxt.Text = "Map name";
        }
コード例 #13
0
        public static BindingList <RaceResult> LoadRaceResult(string path)
        {
            path = Path.Combine(path, "race.rc");
            BindingList <RaceResult> ret = new BindingList <RaceResult>();

            string[] lines = File.ReadAllLines(path);
            for (int i = 0; i < lines.Length; i++)
            {
                string[]   raceResult      = lines[i].Split('\t');
                string     txtId           = raceResult[0];
                string     txtPosition     = raceResult[1];
                string     txtName         = raceResult[2];
                string     txtBestTime     = raceResult[3];
                string     txtRaceTime     = raceResult[4];
                string     txtAverageSpeed = raceResult[5];
                int        id       = int.Parse(txtId);
                int        position = int.Parse(txtPosition);
                TimeSpan   bestTime = TimeSpan.Parse(txtBestTime);
                TimeSpan   raceTime = TimeSpan.Parse(txtRaceTime);
                double     average  = double.Parse(txtAverageSpeed);
                RaceResult rr       = Factory.Factory.CreateRaceResult(id, position, txtName, bestTime, raceTime, average);
                ret.Add(rr);
            }
            return(ret);
        }
コード例 #14
0
 public ViewResult Create(int RaceId = 1)
 {
     ViewData["Driver"] = new SelectList(repository.Drivers.ToList(), "DriverID", "Name");
     ViewData["Race"] = new SelectList(repository.Races.ToList(), "RaceID", "RaceDescription");
     RaceResult rr = new RaceResult();
     rr.RaceID = RaceId;
     return View("Edit", rr);
 }
コード例 #15
0
        public ActionResult DeleteConfirmed(int id)
        {
            RaceResult raceresult = db.RaceResultSet.Find(id);

            db.RaceResultSet.Remove(raceresult);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #16
0
ファイル: ResponseMapper.cs プロジェクト: BL323/Race-Trace
        private RaceResultDto MapRaceResult(RaceResult raceResult)
        {
            var position    = raceResult.Position;
            var constructor = raceResult.Constructor.Name;
            var driverCode  = raceResult.Driver.Code;
            var status      = raceResult.Status.ToString();

            return(new RaceResultDto(driverCode, position, constructor, status));
        }
コード例 #17
0
        public async Task <List <RaceData> > GetRaceData(int runnerid)
        {
            var racedata = new List <RaceData>();
            //Get times by runner
            var listoftimes = await TimeServices.GetListOfTimesbyRunnerId(runnerid);

            //Creates list of dates
            Dictionary <int, DateTime> eventdates  = new Dictionary <int, DateTime>();
            Dictionary <int, string>   eventseason = new Dictionary <int, string>();

            //Select times from a event
            var practices = listoftimes.GroupBy(ev => new { ev.EventId }).Select(grp => grp.First()).ToList();

            foreach (var practice in practices)
            {
                var tmpevent = await EventServices.GetEventById(practice.EventId.GetValueOrDefault());

                //if event is not a race remove form the list of races
                if (!tmpevent.IsRace)
                {
                    listoftimes.RemoveAll(e => e.EventId == practice.EventId.GetValueOrDefault());
                }
                else
                //if event is a race creates a dictionary with Key the event Id and content the race date to use later
                {
                    eventdates.Add(tmpevent.Id, tmpevent.RaceDate);
                    eventseason.Add(tmpevent.Id, tmpevent.Season);
                }
            }
            //Creates RaceData
            //Group list of times by Season


            var groupseason = eventseason.GroupBy(d => d.Value);

            foreach (var group in groupseason)
            {
                var raceresults = new List <RaceResult>();

                foreach (var id in group)
                {
                    var racesplits = listoftimes.Where(e => e.EventId == id.Key).ToList();
                    var raceresult = new RaceResult {
                        Date     = eventdates[id.Key], Time = racesplits.Last().Times.TotalMilliseconds,
                        Distance = racesplits.Last().Distance
                    };
                    raceresults.Add(raceresult);
                }
                var races = new RaceData {
                    Season = group.Key, RaceResults = raceresults
                };
                racedata.Add(races);
            }

            return(racedata);
        }
コード例 #18
0
        private static void Main(string[] args)
        {
            #region DI

            var collection = new ServiceCollection();
            collection.AddSingleton <IFileReader, FileReader>();
            collection.AddSingleton <IResultGenerator <Lap>, ResultGenerator>();
            collection.AddSingleton <IRepository <Lap>, Repository <Lap> >();
            collection.AddSingleton <IApplication, Application.Application>();

            var serviceProvider = collection.BuildServiceProvider();

            #endregion DI

            var service     = serviceProvider.GetService <IRepository <Lap> >();
            var application = serviceProvider.GetService <IApplication>();

            var race   = new Race(service.GetAll());
            var result = new RaceResult(race);

            Console.WriteLine(application.GetInitialMenu());

            var option = Console.ReadLine();

            switch (option)
            {
            case "1":
                result.GetResult();
                var raceResult = application.GetFinalResult(result.Result, result.Leavers);
                Console.WriteLine(raceResult);
                break;

            case "2":
                var bestLap = race.GetBestLap();
                Console.WriteLine(application.GetBestLap(bestLap));
                break;

            case "3":
                var bestLaps = race.GetBestLapFromEachRacer();
                Console.WriteLine(application.GetBestLapFromEachRacer(bestLaps));
                break;

            case "4":
                var averageSpeed = result.GetAverageSpeed();
                Console.WriteLine(application.GetAverageSpeedFromEachRacer(averageSpeed));
                break;

            case "5":
            default:
                var completedAfterFirst = result.GetCompletedTimeAfterFirst();
                Console.WriteLine(application.GetCompletedTimeAfterFirst(completedAfterFirst));
                break;
            }

            Console.ReadKey();
        }
コード例 #19
0
        //
        // GET: /RaceResult/Details/5

        public ActionResult Details(int id = 0)
        {
            RaceResult raceresult = db.RaceResultSet.Find(id);

            if (raceresult == null)
            {
                return(HttpNotFound());
            }
            return(View(raceresult));
        }
コード例 #20
0
        public void OnPostSubmitRaceResult(RaceResult raceResult)
        {
            int raceId = int.Parse(HttpContext.GetRouteData().Values["id"].ToString());

            raceResult.Approved  = false;
            raceResult.RaceRefId = raceId;
            _raceResultRepository.AddRaceResult(raceResult);

            ShowMessage = true;
        }
        public async Task <IHttpActionResult> Get([FromODataUri] int key)
        {
            RaceResult result = await ResultsService.Find(key);

            if (result == null)
            {
                return(NotFound());
            }
            return(Ok(result));
        }
コード例 #22
0
ファイル: Form1.cs プロジェクト: GhoulLord/codersstrikeback
        private List <RaceState> GenerateRaceStatesFor25FPS(RaceResult raceResult)
        {
            List <RaceState> raceStates;

            raceStates = new List <RaceState>();

            RaceState raceStateA;
            RaceState raceStateB;

            int    raceStateIndex = 0;
            double time           = 0;
            double stopTime       = Math.Ceiling(raceResult.RaceStates.Last().Time);

            int timeIndex = 0;

            raceStateA = raceResult.RaceStates[0];
            raceStateB = raceResult.RaceStates[1];

            while (time < stopTime)
            {
                int frameIndex;

                for (frameIndex = 0; frameIndex < 25; frameIndex++)
                {
                    time = timeIndex + frameIndex / 25.0;

                    while (((raceStateIndex + 1) < raceResult.RaceStates.Count) && (time >= raceResult.RaceStates[raceStateIndex + 1].Time))
                    {
                        raceStateIndex++;

                        if (raceStateIndex < raceResult.RaceStates.Count)
                        {
                            raceStateA = raceStateB;
                            raceStateB = raceResult.RaceStates[raceStateIndex + 1];
                        }
                    }

                    RaceState raceStateForFrame;

                    //raceStateForFrame = raceResult.RaceStates[raceStateIndex].Copy();
                    //raceStateForFrame.Time = time;
                    raceStateForFrame = RaceState.CreateInterpolation(raceStateA, raceStateB, time);

                    //raceStateA = raceResult.RaceStates[raceStateIndex];
                    //raceStateB = raceResult.RaceStates[raceStateIndex + 1];

                    raceStates.Add(raceStateForFrame);
                }

                timeIndex++;
                time = timeIndex;
            }

            return(raceStates);
        }
コード例 #23
0
        public async Task <IHttpActionResult> GetRaceResult(int id)
        {
            RaceResult raceResult = await db.RaceResults.FindAsync(id);

            if (raceResult == null)
            {
                return(NotFound());
            }

            return(Ok(raceResult));
        }
コード例 #24
0
        public IActionResult Post([FromForm] IFormFile file)
        {
            RaceRequest requestRaceResult = new RaceRequest(file);

            RaceResult <Metrics> raceResult = _raceUseCase.ProcessRaceResult(requestRaceResult);

            var presenter = new RacePresenter();

            presenter.Populate(raceResult);
            return(presenter.ViewModel);
        }
コード例 #25
0
        public async Task <IActionResult> Create([Bind("Id,Time")] RaceResult raceResult)
        {
            if (ModelState.IsValid)
            {
                _context.Add(raceResult);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(raceResult));
        }
コード例 #26
0
        public static RaceResult CreateRaceResult(int ID, int raceId, int position, int racerId, int teamId)
        {
            RaceResult raceResult = new RaceResult();

            raceResult.Id       = ID;
            raceResult.RaceId   = raceId;
            raceResult.Position = position;
            raceResult.RacerId  = racerId;
            raceResult.TeamId   = teamId;
            return(raceResult);
        }
コード例 #27
0
 public ActionResult Edit(RaceResult raceresult)
 {
     if (ModelState.IsValid)
     {
         db.Entry(raceresult).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.RaceId = new SelectList(db.RaceSet, "Id", "Pool", raceresult.RaceId);
     ViewBag.BoatId = new SelectList(db.BoatSet, "Id", "Name", raceresult.BoatId);
     return(View(raceresult));
 }
コード例 #28
0
        public ActionResult Create([Bind(Include = "ID,NAME,TIME,MeetID,AthleteID")] RaceResult raceResult)
        {
            if (ModelState.IsValid)
            {
                db.RaceResults.Add(raceResult);
                db.SaveChanges();
            }

            ViewBag.AthleteID = new SelectList(db.Athletes, "ID", "NAME", raceResult.AthleteID);
            ViewBag.MeetID    = new SelectList(db.Meets, "ID", "DATE", raceResult.MeetID);
            return(View(raceResult));
        }
コード例 #29
0
        //
        // GET: /RaceResult/Edit/5

        public ActionResult Edit(int id = 0)
        {
            RaceResult raceresult = db.RaceResultSet.Find(id);

            if (raceresult == null)
            {
                return(HttpNotFound());
            }
            ViewBag.RaceId = new SelectList(db.RaceSet, "Id", "Pool", raceresult.RaceId);
            ViewBag.BoatId = new SelectList(db.BoatSet, "Id", "Name", raceresult.BoatId);
            return(View(raceresult));
        }
コード例 #30
0
        public async Task <IHttpActionResult> PostRaceResult(RaceResult raceResult)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.RaceResults.Add(raceResult);
            await db.SaveChangesAsync();

            return(CreatedAtRoute("DefaultApi", new { id = raceResult.Id }, raceResult));
        }
コード例 #31
0
        public void SaveRaceResult(RaceResult raceResult)
        {
            if (raceResult.RaceResultID == 0)
            {
                context.RaceResults.Add(raceResult);
            }
            else
            {
                context.Entry(raceResult).State = EntityState.Modified;
            }

            context.SaveChanges();
        }
コード例 #32
0
 public ActionResult Edit(RaceResult raceResult)
 {
     if (ModelState.IsValid)
     {
         repository.SaveRaceResult(raceResult);
         TempData["message"] = "RaceResult has been saved.";
         return RedirectToRoute(new { controller = "Race", action = "Edit", id = raceResult.RaceID });
     }
     else
     {
         return Edit(raceResult.RaceResultID);
     }
 }
コード例 #33
0
 public override void FillEmptyControl()
 {
     try
     {
         BIZ.RaceResult raceResult = new RaceResult();
         Common.Common.FillDropdownList(rcbBirdCategory, raceResult.GetBirdCategory(ClubID).Tables[0], "Description", "Description", true, "All");
         Common.Common.FillDropdownList(rcbGroupCategory, raceResult.GetGroupCategory(ClubID).Tables[0], "RaceGroup", "RaceGroup", true, "All");
     }
     catch (Exception ex)
     {
         Common.Common.RaiseMessage(RadWindowManager1, ex.Message, "RaceResult", Page.ToString(), MethodBase.GetCurrentMethod().Name, "", "Mavcpigeonclocking");
     }
 }
コード例 #34
0
        private static List <RaceResult> ReadAllRacesToMemory(FileInfo[] files)
        {
            List <RaceResult> allRaceResults = new List <RaceResult>();

            foreach (var file in files)
            {
                string     json       = File.ReadAllText(file.FullName);
                RaceResult raceResult = JsonConvert.DeserializeObject <RaceResult>(json);
                allRaceResults.Add(raceResult);
            }

            return(allRaceResults);
        }
コード例 #35
0
 public ActionResult Delete(RaceResult raceResult)
 {
     if (ModelState.IsValid)
     {
         RaceResult rr = repository.RaceResults.FirstOrDefault(p => p.RaceResultID == raceResult.RaceResultID);
         repository.DeleteRaceResult(rr);
         return RedirectToRoute(new { controller = "Race", action = "Edit", id = rr.RaceID });
     }
     else
     {
         RaceResult rr = repository.RaceResults.FirstOrDefault(p => p.RaceResultID == raceResult.RaceResultID);
         return View(rr);
     }
 }
コード例 #36
0
 public void DeleteRaceResult(RaceResult raceResult)
 {
     context.RaceResults.Remove(raceResult);
     context.SaveChanges();
 }
コード例 #37
0
ファイル: ResultsServices.cs プロジェクト: masuar/BRIATORES
        private IList<RaceResult> GetResultsFromWeb(int season, GrandPrix gp)
        {
            IList<RaceResult> results = new List<RaceResult>();

            Uri url = new Uri("http://www.formula1.com/results/season/" + season.ToString(CultureInfo.GetCultureInfo("en-US")) + "/" + gp.WebId + "/");
            HtmlReader reader = new HtmlReader();
            string html = reader.GetHtmlFromUrl(url);

            Collection<object[]> resultsRead = F1HtmlParserHelper.ParseRaceResultHtml(html);

            var carRepo = this.container.Resolve<IVehicleRepository>();
            TimeSpan pos1Time = new TimeSpan();
            foreach (var item in resultsRead)
            {
                // Vehicle car = carRepo.GetByDriverName((string)item[2]);
                Vehicle car = carRepo.GetByCarNo(Convert.ToInt32((byte)item[1]));
                RaceResult rr = new RaceResult()
                {
                    GrandPrix = gp,
                    Position = Convert.ToInt32((byte)item[0], CultureInfo.GetCultureInfo("en-US")),
                    Vehicle = car,
                    LapsNo = Convert.ToInt32((byte)item[4], CultureInfo.GetCultureInfo("en-US")),
                    Time = pos1Time.Add((TimeSpan)item[5]),
                    Description = (string)item[6]
                };

                if (((TimeSpan)item[5]).TotalMilliseconds == 0d)
                {
                    rr.Time = TimeSpan.FromMilliseconds(-1);
                }

                if (rr.Position == 1)
                {
                    pos1Time = rr.Time;
                }

                results.Add(rr);
            }

            return results;
        }
コード例 #38
0
ファイル: ResultsServices.cs プロジェクト: masuar/BRIATORES
        /// <summary>
        /// Calculates the car time.
        /// </summary>
        /// <param name="car">The car to calculate time.</param>
        /// <param name="grandPrixResult">The grand prix result.</param>
        /// <returns>A partially complete race result.</returns>
        public RaceResult CalculateCarTime(Vehicle car, IList<RaceResult> grandPrixResult)
        {
            if (car == null)
            {
                throw new ArgumentNullException("car");
            }

            if (grandPrixResult == null)
            {
                throw new ArgumentNullException("grandPrixResult");
            }

            if (grandPrixResult.Count == 0)
            {
                throw new ArgumentException("List is empty.", "grandPrixResult");
            }

            if (car.Team == null)
            {
                throw new ArgumentException("Car has no team.", "car");
            }

            if (!car.Team.IsPlayable)
            {
                throw new InvalidOperationException("Car is not playable.");
            }

            RaceResult result = new RaceResult() { Vehicle = car, GrandPrix = grandPrixResult[0].GrandPrix, LapsNo = grandPrixResult[0].LapsNo };

            if (!this.CheckVehicleToRace(car))
            {
                result.Time = TimeSpan.FromMilliseconds(-1); // Not ready to start the race
                result.Description = "Not ready to start the race";
            }
            else
            {
                var vehRepo = this.container.Resolve<IVehicleRepository>();
                RaceResult lastWithTime = this.GetTheLastWithTime(grandPrixResult);
                Dictionary<string, double> percents = this.BuildPercentComponentsMap();
                IncidentProbabilityHelper probHelper = new IncidentProbabilityHelper(grandPrixResult);

                probHelper.RegisterIncidentPerDriver(car.Driver);

                if (probHelper.DecideIfThereIsAnIncident("Driver"))
                {
                    result.Time = TimeSpan.FromMilliseconds(-1);
                    result.Description = "Accident";
                }
                else
                {
                    RaceResult driverResult = grandPrixResult.Where(x => x.Vehicle.Driver.Equals(car.Driver) && x.Time > TimeSpan.FromMilliseconds(0)).FirstOrDefault();
                    if (driverResult == null)
                    {
                        // Driver with less laps... get the time of the last with a time
                        driverResult = lastWithTime;
                    }

                    double driverMillisecs = driverResult.Time.TotalMilliseconds * percents["Driver"];
                    result.Time = result.Time.Add(TimeSpan.FromMilliseconds(driverMillisecs));

                    foreach (var part in car.WearingParts)
                    {
                        IList<Vehicle> vehs = vehRepo.GetVehiclesWearingADesign(this.GetBaseDesign(part.Design));
                        probHelper.RegisterIncidentsPerDesign(part.Design, vehs);
                        if (probHelper.DecideIfThereIsAnIncident(part.Design.PartDesignType.Name))
                        {
                            result.Time = TimeSpan.FromMilliseconds(-1);
                            result.Description = part.Design.PartDesignType.Name;
                            break;
                        }
                        else
                        {
                            double millisecs = 0;
                            int count = 0;

                            foreach (var v in vehs)
                            {
                                RaceResult r = grandPrixResult.Where(x => x.Vehicle.Id == v.Id && x.Time > TimeSpan.FromMilliseconds(0)).FirstOrDefault();
                                if (r != null)
                                {
                                    millisecs += r.Time.TotalMilliseconds * percents[part.Design.PartDesignType.Name];
                                    count++;
                                }
                            }

                            if (count > 0)
                            {
                                millisecs = millisecs / count;
                            }
                            else
                            {
                                // No reference time to make the calculation
                                // Get the last driver with a time, and make the calculation on it
                                millisecs = lastWithTime.Time.TotalMilliseconds * percents[part.Design.PartDesignType.Name];
                            }

                            result.Time = result.Time.Add(TimeSpan.FromMilliseconds(millisecs));
                        }
                    }
                }
            }

            if (result.Time < TimeSpan.FromMilliseconds(0))
            {
                result.LapsNo = 0;
            }

            return result;
        }