Exemplo n.º 1
0
        public void GetCurrentRaceResults_OneRace()
        {
            _raceManager.SetMaxParticipants(3);
            var ip1 = IPAddress.Parse("1.1.1.1");
            var ip2 = IPAddress.Parse("2.2.2.2");
            var ip3 = IPAddress.Parse("3.3.3.3");

            _raceManager.Register(ip1.ToString());
            _raceManager.Register(ip2.ToString());
            _raceManager.Register(ip3.ToString());

            int numLaps = 5;

            _raceManager.NumberOfLaps = numLaps;
            _raceManager.StartRace(0);

            for (int i = 0; i < numLaps; i++)
            {
                _raceManager.AddLapResult(ip1, new TimeSpan(0, 1, 1));
                _raceManager.AddLapResult(ip2, new TimeSpan(0, 1, 2));
                _raceManager.AddLapResult(ip3, new TimeSpan(0, 1, 3));
            }

            var raceResults = _raceManager.GetCurrentRaceResults();

            Assert.Contains(1, raceResults.Keys);
            Assert.Contains(2, raceResults.Keys);
            Assert.Contains(3, raceResults.Keys);

            for (int i = 1; i <= 3; i++)
            {
                var resultsFound = raceResults.TryGetValue(i, out List <Lap> timer1Laps);
                Assert.True(resultsFound);

                for (int lap = 0; lap < numLaps; lap++)
                {
                    Assert.Equal(new TimeSpan(0, 1, i), timer1Laps[lap].Time);
                }
            }
        }
Exemplo n.º 2
0
        public JsonResult GetLastRaceResultById(int id)
        {
            _logger.LogInformation("GET /GetLastRaceResultById");
            ResponseObject.RaceResultByID raceResult = new ResponseObject.RaceResultByID
            {
                id = id,
                responseMessage = "success"
            };

            try
            {
                if (_raceManager.GetRaceState() != RaceState.Finished)
                {
                    raceResult.responseMessage = "Race is not finished.";
                    return(Json(raceResult));
                }

                Race lastRace   = _raceManager.GetAllRaces().Last();
                int  placeIndex = lastRace.GetFinishedParticipants().IndexOf(id); // -1 if not found
                Dictionary <int, List <Lap> > raceResults = _raceManager.GetCurrentRaceResults();
                bool idFound = raceResults.TryGetValue(id, out List <Lap> laps);

                if (placeIndex < 0 || !idFound)
                {
                    raceResult.responseMessage = "ID [" + id + "] was not found.";
                    return(Json(raceResult));
                }

                raceResult.place = placeIndex + 1;
                Lap      fastestLap = new Lap(0, new TimeSpan(0));
                TimeSpan totalTime  = new TimeSpan();

                for (int i = 0; i < laps.Count; i++)
                {
                    if (i == 0)
                    {
                        fastestLap        = laps[0];
                        fastestLap.Number = laps[0].Number;
                    }
                    else if (laps[i].Time < fastestLap.Time)
                    {
                        fastestLap = laps[i];
                    }
                    totalTime += laps[i].Time;
                }

                raceResult.overallTime             = totalTime.ToString();
                raceResult.overallTimeMilliseconds = totalTime.TotalMilliseconds;
                raceResult.fastestLap             = fastestLap.Time.ToString();
                raceResult.fastestLapMilliseconds = fastestLap.Time.TotalMilliseconds;
                raceResult.fastestLapNumber       = fastestLap.Number;

                return(Json(raceResult));
            }
            catch (Exception error)
            {
                _logger.LogError("RaceTimer/GetLastRaceResultById Exception: " + error.Message);

                raceResult.responseMessage = error.Message;

                return(new JsonResult(raceResult)

                {
                    StatusCode = (int)HttpStatusCode.BadRequest
                });
            }
        }