protected override async Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result)
        {
            result = await base.StartRecordCore(parameters, result).ConfigureAwait(false);

            if (!result.IsSuccessful)
            {
                return(result);
            }

            switch (this.AcquisitionMode)
            {
            case DistanceAcquisitionMode.Time:
                this.RegisterObserver(
                    this.DataSource
                    .Sample(this.SavingInterval)
                    .Buffer(this.SavingInterval, 1)
                    .Select(buffer => buffer.Count > 0 ? buffer[0] : new SpeedData {
                    CurrentSpeed = -1, SpeedSource = SpeedActiveMode.None
                })
                    .Subscribe(data => AddEventJournalEntry(CreateEjxJournalEntry(data))), AcquisitionStep.StopRecord);
                break;

            case DistanceAcquisitionMode.Distance:
                this.RegisterObserver(this.DataSource
                                      .Where(data => data.CurrentDistance != null)
                                      .DistinctUntilChanged()           // only for new values
                                      .Subscribe(data => AddEventJournalEntry(CreateEjxJournalEntry(data))), AcquisitionStep.StopRecord);
                break;

            default:
                throw new NotSupportedException(string.Format("Acquisition mode '{0}' is not supported.", this.AcquisitionMode));
            }

            return(result);
        }
        protected async override Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result)
        {
            result = await base.StartRecordCore(parameters, result).ConfigureAwait(false);

            if (!result.IsSuccessful)
            {
                return(result);
            }

            _roadEventSequence = 0;

            // we stop recording at UninitializeReocrd, not StopRecord
            // to allow operators to add comments before they validate the acquisition
            this.RegisterObserver(
                this.DataSource.Subscribe(
                    data =>
            {
                if (data.IsJournalised)
                {
                    AddEventJournalEntry(CreateEjxJournalEntry(data));
                }
            }), AcquisitionStep.UninitializeRecord);

            return(result);
        }
        private async Task <AcquisitionActionResult> InternalStartRecord(StartRecordParameter parameters, AcquisitionActionResult result)
        {
            // delayed start
            if (this.DeviceDistanceFromStartTriggerPoint > 0 && this.IsDependencyOperational <IDistanceAgent>())
            {
                await AgentBroker.Instance.ObserveAny <IDistanceAgent, DistanceData>("DataSource").Where(data => data.AbsoluteDistance >= this.DeviceDistanceFromStartTriggerPoint).Take(1).ToTask().ConfigureAwait(false);
            }

            result = await StartRecordCore(parameters, result).ConfigureAwait(false);

            return(result);
        }
Exemplo n.º 4
0
        protected async override Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result)
        {
            result = await base.StartRecordCore(parameters, result).ConfigureAwait(false);

            if (!result.IsSuccessful)
            {
                return(result);
            }

            this.RegisterObserver(
                this.DataSource
                .Where((data, i) => i % this.LogGap == 0)
                .Subscribe(data => LogGpsData(data)), AcquisitionStep.StopRecord);

            return(result);
        }
 protected virtual Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result)
 {
     return(Task.FromResult(result));
 }
 public Task <AcquisitionActionResult> StartRecord(StartRecordParameter parameters)
 {
     return(MakeStateTransition(AcquisitionStep.StartRecord, this.Provider.StartRecord, parameters, InternalStartRecord));
 }