Пример #1
0
        public DatabaseDelegatorRaceRun(Race race, RaceRun rr, IAppDataModelDataBase db)
        {
            _db   = db;
            _race = race;
            _rr   = rr;

            rr.GetResultList().ItemChanged       += OnItemChanged;
            rr.GetResultList().CollectionChanged += OnCollectionChanged;
        }
Пример #2
0
    private void ObserveRaceRun(RaceRun previousRaceRun, RaceRun raceRun)
    {
        // Only the list of the current run is allowed to be sent.
        // => Startlist needs to be send in following cases:
        // a) Start list itself changes
        // b) The previous run completed so that the next run needs to be send
        ItemsChangedNotifier startListNotifier = new ItemsChangedNotifier(raceRun.GetStartListProvider().GetViewList());

        startListNotifier.CollectionChanged += (o, e) =>
        {
            updateStartList(previousRaceRun, raceRun);
        };
        updateStartList(previousRaceRun, raceRun); // Initial update
        _notifier.Add(startListNotifier);

        if (previousRaceRun != null)
        {
            IsCompleteObserver completeObserver = new IsCompleteObserver(previousRaceRun, raceRun, updateStartList);
            _notifier.Add(completeObserver);
        }

        // Results
        ItemsChangedNotifier resultsNotifier = new ItemsChangedNotifier(raceRun.GetResultList());

        resultsNotifier.ItemChanged += (o, e) =>
        {
            _liveTiming.UpdateResults(raceRun);
        };
        _liveTiming.UpdateResults(raceRun); // Initial update
        _notifier.Add(resultsNotifier);
    }
Пример #3
0
        private void TxtStartNumber_TextChanged(object sender, TextChangedEventArgs e)
        {
            uint startNumber = 0U;

            try { startNumber = uint.Parse(txtStartNumber.Text); } catch (Exception) { }
            RaceParticipant participant = _race.GetParticipant(startNumber);

            if (participant != null)
            {
                txtParticipant.Text = participant.Fullname;
                RunResult rr = _currentRaceRun.GetResultList().FirstOrDefault(r => r.Participant == participant);
                if (rr != null)
                {
                    cmbDisqualifyReason.Text    = rr.GetDisqualifyText();
                    txtDisqualify.Text          = rr.GetDisqualifyGoal();
                    cmbDisqualify.SelectedValue = rr.ResultCode;
                }
                else
                {
                    txtDisqualify.Text          = "";
                    cmbDisqualify.SelectedValue = null;
                }
            }
            else
            {
                txtParticipant.Text = "";
            }
        }
Пример #4
0
        public RunResultProxy(RaceParticipant rp, RaceRun raceRun)
            : base(rp)
        {
            _raceRun = raceRun;
            _raceRun.GetResultList().CollectionChanged += runResults_CollectionChanged;

            runResults_CollectionChanged(null, null);
        }
Пример #5
0
        private void runResults_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            // Look for RunResult for current participant and update this
            var rr = _raceRun.GetResultList().FirstOrDefault(r => r.Participant == this.Participant);

            if (rr != _rrMaster)
            {
                if (_rrMaster != null)
                {
                    _rrMaster.PropertyChanged -= rr_PropertyChanged;
                }

                _rrMaster = rr;

                if (_rrMaster != null)
                {
                    _rrMaster.PropertyChanged += rr_PropertyChanged;
                }

                UpdateRunResult(rr);
            }
        }
Пример #6
0
        public HandTimingVM GetHandTimingVM(Race race, RaceRun run, ETimeModus timeModus)
        {
            HandTimingVM vm;

            if (!_handTimingVM.TryGetValue(handTimingVMKey(race, run, timeModus), out vm))
            {
                vm = new HandTimingVM(timeModus);
                _handTimingVM.Add(handTimingVMKey(race, run, timeModus), vm);
            }

            vm.AddRunResults(run.GetResultList());

            return(vm);
        }
Пример #7
0
        private void observeRaceRun(RaceRun previousRaceRun, RaceRun raceRun)
        {
            ItemsChangedNotifier startListNotifier = new ItemsChangedNotifier(raceRun.GetStartListProvider().GetViewList());

            startListNotifier.CollectionChanged += (o, e) =>
            {
                updateStartList(previousRaceRun, raceRun);
            };
            updateStartList(previousRaceRun, raceRun); // Initial update
            _notifier.Add(startListNotifier);

            if (previousRaceRun != null)
            {
                IsCompleteObserver completeObserver = new IsCompleteObserver(previousRaceRun, raceRun, updateStartList);
                _notifier.Add(completeObserver);
            }

            // Results
            _liveTiming.UpdateResults(raceRun); // Initial update


            ItemsChangedNotifier resultsNotifier = new ItemsChangedNotifier(raceRun.GetResultList());

            resultsNotifier.ItemChanged += (sender, e) =>
            {
                if (sender is RunResult rr)
                {
                    Task.Delay(new TimeSpan(0, 0, 0, 0, 200)).ContinueWith(o =>
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke(() =>
                        {
                            _liveTiming.UpdateInFinish(raceRun, rr.Participant);
                            updateNextStarter(raceRun);
                        });
                    });
                }
            };
            _notifier.Add(resultsNotifier);

            raceRun.OnTrackChanged += raceRun_OnTrackChanged;
        }
Пример #8
0
        private void TxtStartNumber_TextChanged(object sender, TextChangedEventArgs e)
        {
            uint startNumber = 0U;

            try { startNumber = uint.Parse(txtStartNumber.Text); } catch (Exception) { }
            RaceParticipant participant = _thisRace.GetParticipant(startNumber);

            if (participant != null)
            {
                txtParticipant.Text = participant.Fullname;
                RunResult rr = _currentRaceRun.GetResultList().FirstOrDefault(r => r.Participant == participant);
                if (rr != null)
                {
                    txtStart.Text  = rr.GetStartTime()?.ToString(@"hh\:mm\:ss\,ffff");
                    txtFinish.Text = rr.GetFinishTime()?.ToString(@"hh\:mm\:ss\,ffff");
                    txtRun.Text    = rr.GetRunTime()?.ToString(@"mm\:ss\,ff");
                }
                else
                {
                    txtStart.Text  = "";
                    txtFinish.Text = "";
                    txtRun.Text    = "";
                }
            }
            else
            {
                txtParticipant.Text = "";
                txtStart.Text       = "";
                txtFinish.Text      = "";
                txtRun.Text         = "";
            }

            CheckTime(txtStart);
            CheckTime(txtFinish);
            CheckTime(txtRun);
        }
Пример #9
0
    internal string getTimingData(RaceRun raceRun)
    {
        // iiiehhmmss,zh
        // iii Id des Teilnehmers(muss in Datei mit Teilnehmerdaten vorhanden sein)
        // e ErgCode: 0 = Läufer im Ziel Laufzeit = hhmmss,zh
        //            1 = Nicht am Start Laufzeit = 999999,99
        //            2 = Nicht im Ziel Laufzeit = 999999,99
        //            3 = Disqualifiziert Laufzeit = 999999,99
        //            4 = Nicht qualifiziert Laufzeit = 999999,99
        //            9 = Läufer auf der Strecke Laufzeit = 000000,01
        // hhmmss,zh Laufzeit

        string result = "";

        List <RunResult> results = raceRun.GetResultList().OrderBy(o => o.StartNumber).ToList();

        foreach (var r in results)
        {
            string item, time;
            int    eCode;

            if (r.ResultCode == RunResult.EResultCode.Normal)
            {
                if (r.Runtime != null)
                {
                    time  = r.Runtime?.ToString(@"hhmmss\,ff", System.Globalization.CultureInfo.InvariantCulture);
                    eCode = 0;
                }
                else if (r.GetStartTime() != null)
                {
                    time  = "000000,01";
                    eCode = 9;
                }
                else
                {
                    // No useful data => skip
                    continue;
                }
            }
            else
            {
                time = "999999,99";
                switch (r.ResultCode)
                {
                case RunResult.EResultCode.NaS: eCode = 1; break;

                case RunResult.EResultCode.NiZ: eCode = 2; break;

                case RunResult.EResultCode.DIS: eCode = 3; break;

                case RunResult.EResultCode.NQ:  eCode = 4; break;

                default:
                    // No useful data => skip
                    continue;
                }
            }

            item = string.Format("{0,3}{1,1}{2}", r.Participant.Id, eCode, time);

            if (!string.IsNullOrEmpty(result))
            {
                result += "\n";
            }

            result += item;
        }

        return(result);
    }