Ejemplo n.º 1
0
 internal bool SetRunningStatus(PluginRunningRequirementReason reason)
 {
     if (_configSolvedStatus == SolvedConfigurationStatus.Running)
     {
         return(!Disabled);
     }
     _configSolvedStatus       = SolvedConfigurationStatus.Running;
     _configSolvedStatusReason = reason;
     if (Service != null && !Service.Family.SetRunningPlugin(this))
     {
         return(false);
     }
     return(PropagateRunningStatus());
 }
Ejemplo n.º 2
0
        internal PluginData(IConfigurationSolver solver, IPluginInfo p, ServiceData service, ConfigurationStatus pluginStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown)
        {
            _solver              = solver;
            PluginInfo           = p;
            Service              = service;
            ConfigOriginalStatus = pluginStatus;
            switch (pluginStatus)
            {
            case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break;

            case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break;

            default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break;
            }
            _configSolvedStatusReason = PluginRunningRequirementReason.Config;

            RawConfigSolvedImpact = ConfigOriginalImpact = impact;
            if (RawConfigSolvedImpact == StartDependencyImpact.Unknown && Service != null)
            {
                RawConfigSolvedImpact = Service.ConfigSolvedImpact;
            }
            _configSolvedImpact = RawConfigSolvedImpact;
            if (_configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0)
            {
                _configSolvedImpact = StartDependencyImpact.Minimal;
            }

            if (ConfigOriginalStatus == ConfigurationStatus.Disabled)
            {
                _configDisabledReason = PluginDisabledReason.Config;
            }
            else if (p.HasError)
            {
                _configDisabledReason = PluginDisabledReason.PluginInfoHasError;
            }
            else if (Service != null)
            {
                if (Service.Disabled)
                {
                    _configDisabledReason = PluginDisabledReason.ServiceIsDisabled;
                }
                else if (Service.Family.RunningPlugin != null)
                {
                    _configDisabledReason = PluginDisabledReason.AnotherRunningPluginExistsInFamilyByConfig;
                }
            }
            // Immediately check for Runnable references to Disabled Services: this disables us.
            if (!Disabled)
            {
                foreach (var sRef in PluginInfo.ServiceReferences)
                {
                    if (sRef.Requirement >= DependencyRequirement.Runnable)
                    {
                        // If the required service is already disabled, we immediately disable this plugin.
                        if (sRef.Reference.HasError && !Disabled)
                        {
                            _configDisabledReason = PluginDisabledReason.RunnableReferenceServiceIsOnError;
                            break;
                        }
                        ServiceData sr = _solver.FindExistingService(sRef.Reference.ServiceFullName);
                        if (sr.Disabled && !Disabled)
                        {
                            _configDisabledReason = PluginDisabledReason.RunnableReferenceIsDisabled;
                            break;
                        }
                    }
                }
            }
            if (Service != null)
            {
                Service.AddPlugin(this);
            }
            if (!Disabled)
            {
                // If the plugin is not yet disabled, we register it:
                // whenever the referenced service is disabled (or stopped during dynamic resolution), this
                // will disable (or stop) the plugin according to its ConfigSolvedImpact.
                foreach (var sRef in PluginInfo.ServiceReferences)
                {
                    _solver.FindExistingService(sRef.Reference.ServiceFullName).RegisterPluginReference(this, sRef.Requirement);
                }
                if (Service != null && ConfigOriginalStatus == ConfigurationStatus.Running)
                {
                    Service.Family.SetRunningPlugin(this);
                }
            }
        }
Ejemplo n.º 3
0
        internal PluginData( IConfigurationSolver solver, IPluginInfo p, ServiceData service, ConfigurationStatus pluginStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown )
        {
            _solver = solver;
            PluginInfo = p;
            Service = service;
            ConfigOriginalStatus = pluginStatus;
            switch( pluginStatus )
            {
                case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break;
                case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break;
                default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break;
            }
            _configSolvedStatusReason = PluginRunningRequirementReason.Config;

            RawConfigSolvedImpact = ConfigOriginalImpact = impact;
            if( RawConfigSolvedImpact == StartDependencyImpact.Unknown && Service != null )
            {
                RawConfigSolvedImpact = Service.ConfigSolvedImpact;
            }
            _configSolvedImpact = RawConfigSolvedImpact;
            if( _configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0 )
            {
                _configSolvedImpact = StartDependencyImpact.Minimal;
            }

            if( ConfigOriginalStatus == ConfigurationStatus.Disabled )
            {
                _configDisabledReason = PluginDisabledReason.Config;
            }
            else if( p.HasError )
            {
                _configDisabledReason = PluginDisabledReason.PluginInfoHasError;
            }
            else if( Service != null )
            {
                if( Service.Disabled )
                {
                    _configDisabledReason = PluginDisabledReason.ServiceIsDisabled;
                }
                else if( Service.Family.RunningPlugin != null )
                {
                    _configDisabledReason = PluginDisabledReason.AnotherRunningPluginExistsInFamilyByConfig;
                }
            }
            // Immediately check for Runnable references to Disabled Services: this disables us.
            if( !Disabled )
            {
                foreach( var sRef in PluginInfo.ServiceReferences )
                {
                    if( sRef.Requirement >= DependencyRequirement.Runnable )
                    {
                        // If the required service is already disabled, we immediately disable this plugin.
                        if( sRef.Reference.HasError && !Disabled )
                        {
                            _configDisabledReason = PluginDisabledReason.RunnableReferenceServiceIsOnError;
                            break;
                        }
                        ServiceData sr = _solver.FindExistingService( sRef.Reference.ServiceFullName );
                        if( sr.Disabled && !Disabled )
                        {
                            _configDisabledReason = PluginDisabledReason.RunnableReferenceIsDisabled;
                            break;
                        }
                    }
                }
            }
            if( Service != null ) Service.AddPlugin( this );
            if( !Disabled  )
            {
                // If the plugin is not yet disabled, we register it:
                // whenever the referenced service is disabled (or stopped during dynamic resolution), this
                // will disable (or stop) the plugin according to its ConfigSolvedImpact.
                foreach( var sRef in PluginInfo.ServiceReferences )
                {
                    _solver.FindExistingService( sRef.Reference.ServiceFullName ).RegisterPluginReference( this, sRef.Requirement );
                }
                if( Service != null && ConfigOriginalStatus == ConfigurationStatus.Running )
                {
                    Service.Family.SetRunningPlugin( this );
                }
            }
        }
Ejemplo n.º 4
0
 internal bool SetRunningStatus( PluginRunningRequirementReason reason )
 {
     if( _configSolvedStatus == SolvedConfigurationStatus.Running ) return !Disabled;
     _configSolvedStatus = SolvedConfigurationStatus.Running;
     _configSolvedStatusReason = reason;
     if( Service != null && !Service.Family.SetRunningPlugin( this ) ) return false;
     return PropagateRunningStatus();
 }