예제 #1
0
        public void RunExperiment(ScienceInstance s, bool runSingleUse = true)
        {
            //_logger.Trace( "Finding Module for Science Report: " + s.ScienceExperiment.id );
            ModuleScienceExperiment m = null;



            // If possible run with DMagic new API
            IEnumerable <ModuleScienceExperiment> lm = FindDMAnimateGenericsForExperiment(s.ScienceExperiment.id);

            if (lm != null && lm.Any())
            {
                DMModuleScienceAnimateGeneric NewDMagicInstance = _parent.DMagic.GetDMModuleScienceAnimateGeneric( );
                m = lm.FirstOrDefault(x =>
                                      (int)x.Fields.GetValue("experimentsLimit") > 1 ? NewDMagicInstance.canConduct(x) : NewDMagicInstance.canConduct(x) &&
                                      (x.rerunnable || runSingleUse));

                if (m != null)
                {
                    _logger.Debug("Running DMModuleScienceAnimateGenerics Experiment " + m.experimentID + " on part " + m.part.partInfo.name);
                    NewDMagicInstance.gatherScienceData(m, !_parent.Config.ShowResultsWindow);
                }

                return;
            }



            // If possible run with DMagic DMAPI
            if (_DMModuleScienceAnimates != null && _DMModuleScienceAnimates.Count > 0)
            {
                DMAPI DMAPIInstance = _parent.DMagic.GetDMAPI( );
                if (DMAPIInstance != null)
                {
                    IEnumerable <ModuleScienceExperiment> lm2 = _DMModuleScienceAnimates.Where(x => x.experimentID == s.ScienceExperiment.id);
                    if (lm2.Any())
                    {
                        m = lm2.FirstOrDefault(x =>
                        {
                            return(!x.Inoperable &&
                                   ((int)x.Fields.GetValue("experimentLimit") > 1 ? DMAPIInstance.experimentCanConduct(x) : DMAPIInstance.experimentCanConduct(x) &&
                                    (x.rerunnable || runSingleUse)));
                        });

                        if (m != null)
                        {
                            //_logger.Trace("Running DMModuleScienceAnimates Experiment " + m.experimentID + " on part " + m.part.partInfo.name);
                            DMAPIInstance.deployDMExperiment(m, !_parent.Config.ShowResultsWindow);
                        }

                        return;
                    }
                }
            }



            // Do stock run
            m = FindExperiment(s, runSingleUse);
            if (m != null)
            {
                //_logger.Trace( "Running Experiment " + m.experimentID + " on part " + m.part.partInfo.name );
                RunStandardModuleScienceExperiment(m);
                return;
            }
        }
예제 #2
0
        public bool CanRunExperiment(ScienceInstance s, bool runSingleUse = true)
        {
            bool IsAvailable = false;

            if (_availableScienceExperiments.ContainsKey(s.ScienceExperiment.id))
            {
                return(_availableScienceExperiments[s.ScienceExperiment.id]);
            }

            IEnumerable <ModuleScienceExperiment> dlm = FindDMAnimateGenericsForExperiment(s.ScienceExperiment.id);

            if (dlm != null && dlm.Any())
            {
                DMModuleScienceAnimateGeneric NewDMagicInstance = _parent.DMagic.GetDMModuleScienceAnimateGeneric();
                IsAvailable = dlm.Any(x =>
                                      (int)x.Fields.GetValue("experimentsLimit") > 1 ? NewDMagicInstance.canConduct(x) : NewDMagicInstance.canConduct(x) &&
                                      (x.rerunnable || runSingleUse));

                _availableScienceExperiments[s.ScienceExperiment.id] = IsAvailable;
                return(IsAvailable);
            }

            if (_moduleScienceExperiments != null && _moduleScienceExperiments.Count > 0)
            {
                IEnumerable <ModuleScienceExperiment> lm = _moduleScienceExperiments.Where(x => (
                                                                                               x.experimentID == s.ScienceExperiment.id &&
                                                                                               !(x.GetScienceCount() > 0) &&
                                                                                               (x.rerunnable || runSingleUse) &&
                                                                                               !x.Inoperable
                                                                                               ));

                IsAvailable = lm.Count( ) != 0;
                _availableScienceExperiments[s.ScienceExperiment.id] = IsAvailable;
            }
            return(IsAvailable);
        }