示例#1
0
        public void ManualDnf_WithRiderOnTrack_ShouldEndLap()
        {
            Beacon martijnBeacon = new Beacon(new byte[] { 0, 0, 0, 0, 0, 1 }, 0);
            Rider  martijn       = new Rider("Martijn", martijnBeacon);

            subject.AddRider(martijn);

            //rider enters start box
            startId.EmitIdEvent(martijn, new DateTime(2000, 1, 1, 1, 1, 1));

            //Martijn triggers timing gate
            timer.EmitTriggerEvent(100, "Timer", 0, new DateTime(2000, 1, 1, 1, 2, 1));

            subject.AddEvent(new ManualDNFEventArgs(DateTime.Now, martijn.Name, "staff"));

            source.Cancel();
            race.Wait();

            Assert.AreEqual(0, endId.KnownRiders.Count);
            Assert.AreEqual(1, subject.Laps.Count);

            Lap lap = subject.Laps[0];

            Assert.IsTrue(lap.End is ManualDNFEvent);
            Assert.AreEqual(-1, lap.GetLapTime());
            Assert.IsFalse(lap.Disqualified);
        }
示例#2
0
        public void Penalty_WithRiderOnTrack_ShouldApplyOnFinish()
        {
            Beacon martijnBeacon = new Beacon(new byte[] { 0, 0, 0, 0, 0, 1 }, 0);
            Rider  martijn       = new Rider("Martijn", martijnBeacon);

            subject.AddRider(martijn);

            //rider enters start box
            startId.EmitIdEvent(martijn, new DateTime(2000, 1, 1, 1, 1, 1));

            //Martijn triggers timing gate
            timer.EmitTriggerEvent(100, "Timer", 0, new DateTime(2000, 1, 1, 1, 2, 1));

            subject.AddEvent(new PenaltyEventArgs(DateTime.Now, martijn.Name, "staff", "testEvent", 1));
            subject.AddEvent(new PenaltyEventArgs(DateTime.Now, martijn.Name, "staff", "testEvent", 2));

            //finish the lap
            endId.EmitIdEvent(martijn, new DateTime(2000, 1, 1, 1, 2, 1));
            timer.EmitTriggerEvent(200, "Timer", 1, new DateTime(2000, 1, 1, 1, 2, 1));
            endId.EmitExitEvent(martijn, new DateTime(2000, 1, 1, 1, 2, 1));


            //do another lap, this one should not have any penalties
            MakeStartEvents(martijn, DateTime.Now, startId, timer);
            MakeEndEvents(martijn, DateTime.Now, endId, timer);

            source.Cancel();
            race.Wait();

            Assert.AreEqual(0, endId.KnownRiders.Count);
            Assert.AreEqual(2, subject.Laps.Count);

            Lap penaltyLap = subject.Laps[0];

            Assert.IsTrue(penaltyLap.End is FinishedEvent);
            //100 micros lap time, 3 second penalty
            Assert.AreEqual(3000100, penaltyLap.GetLapTime());
            Assert.IsFalse(penaltyLap.Disqualified);

            Lap normalLap = subject.Laps[1];

            Assert.IsTrue(normalLap.End is FinishedEvent);
            //Lap from MakeEvent methods has nonsense lap time
            Assert.AreEqual(0, normalLap.GetLapTime());
            Assert.IsFalse(normalLap.Disqualified);
        }
        public async Task NewTime(Lap lap)
        {
            Guid startId = GetStartGuid(lap);

            onTrack.Remove(startId);

            if (lap.Disqualified)
            {
                await http.GetAsync($"{baseUrl}/penalty?auth={authToken}&uniqueId={GetId(startId)}$dsq=1");

                await http.GetAsync($"{baseUrl}/end_ride_with_result?auth={authToken}&tag={lap.End.Rider.Name}&uniqueId={GetId(startId)}");
            }
            else if (lap.End is ManualDNFEvent || lap.End is UnitDNFEvent)
            {
                HttpResponseMessage result = await http.GetAsync($"{baseUrl}/penalty?auth={authToken}&uniqueId={GetId(startId)}&dnf=1");

                Console.WriteLine($"Gymkhana response (DNF): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}");

                result = await http.GetAsync($"{baseUrl}/end_ride_with_result?auth={authToken}&tag={lap.End.Rider.Name}&uniqueId={GetId(startId)}");

                Console.WriteLine($"Gymkhana response (END): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}");
            }
            else
            {
                HttpResponseMessage result = await http.GetAsync($"{baseUrl}/new_time?auth={authToken}&tag={lap.Rider.Name}&uniqueId={GetId(startId)}&time={lap.GetLapTime(false)/1000}");

                Console.WriteLine($"Gymkhana response (NEW): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}");

                int penalty = lap.Penalties.Sum(p => p.Seconds);

                if (penalty > 0)
                {
                    result = await http.GetAsync($"{baseUrl}/penalty?auth={authToken}&uniqueId={GetId(startId)}&time={penalty}");

                    Console.WriteLine($"Gymkhana response (PENALTY): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}");
                }
            }
        }