Beispiel #1
0
        protected override async Task <AcquisitionActionResult> StartCore(StartAcquisitionParameter parameters, AcquisitionActionResult result)
        {
            result = await base.StartCore(parameters, result).ConfigureAwait(false);

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

            this.RegisterObserver(AgentBroker.Instance.ObserveAny <ILocalisationAgent, LocalisationData>("DataSource").Subscribe(data => _localisationSubject.OnNext(data)));

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

            this.RegisterObserver(
                AgentBroker.Instance.ObserveAll <IFileTransferAgent, FileTransferData>("FileTransferDataSource")
                .SelectMany(t => t.Item2)
                .Subscribe(_fileTransferSubject),
                AcquisitionStep.Stop);

            var acquisitionManagerState = await AgentBroker.Instance.TryExecuteOnFirst <IAcquisitionManagerAgent, ProviderState>(a => a.ProviderState).GetValueOrDefault().ConfigureAwait(false);

#pragma warning disable 4014
            if (acquisitionManagerState <= ProviderState.Started)
            {
                StartTransferring();
            }
#pragma warning restore 4014

            // start transferring when AcquisitionManager is not recording (ProviderState <= Started)
            this.RegisterObserver(
                AgentBroker.Instance.ObserveAny <IAcquisitionManagerAgent, ProviderState>("ProviderStateDataSource")
                .Where(state => state <= ProviderState.Started && this.OperationalState == OperationalAgentStates.None)
                .Subscribe(_ => StartTransferring()),
                AcquisitionStep.Stop);

            // for each new FileTransferAgent, start transferring if applicable
            this.RegisterObserver(
                AgentBroker.Instance.ObserveAll <IFileTransferAgent, ProviderState>("ProviderStateDataSource")
                .SelectMany(t => t.Item2.Select(state => Tuple.Create(t.Item1, state)))
                .Where(t => t.Item2 == ProviderState.Started)
                .Subscribe(
                    t =>
            {
                if (this.IsTransferring)
                {
                    AgentBroker.Instance.TryExecuteOnOne <IFileTransferAgent>(t.Item1.AgentId, a => a.StartTransferring());
                }
            }),
                AcquisitionStep.Stop);

            return(result);
        }
 protected virtual Task <AcquisitionActionResult> StartCore(StartAcquisitionParameter parameters, AcquisitionActionResult result)
 {
     return(Task.FromResult(result));
 }
 public Task <AcquisitionActionResult> Start(StartAcquisitionParameter parameters)
 {
     return(MakeStateTransition(AcquisitionStep.Start, this.Provider.Start, parameters, StartCore));
 }