/// <summary> /// Called after Service DynamicResetState. /// </summary> public void DynamicResetState() { switch (FinalConfigSolvedStatus) { case SolvedConfigurationStatus.Disabled: { _dynamicReason = PluginRunningStatusReason.StoppedByConfig; _dynamicStatus = RunningStatus.Disabled; break; } case SolvedConfigurationStatus.Running: { Debug.Assert(Service == null || (Service.Family.RunningPlugin == this)); _dynamicReason = PluginRunningStatusReason.StartedByConfig; _dynamicStatus = RunningStatus.RunningLocked; break; } default: { Debug.Assert(Service == null || !Service.Disabled); _dynamicReason = PluginRunningStatusReason.None; _dynamicStatus = null; break; } } }
/// <summary> /// Called after Service DynamicResetState. /// </summary> public void DynamicResetState() { switch( FinalConfigSolvedStatus ) { case SolvedConfigurationStatus.Disabled: { _dynamicReason = PluginRunningStatusReason.StoppedByConfig; _dynamicStatus = RunningStatus.Disabled; break; } case SolvedConfigurationStatus.Running: { Debug.Assert( Service == null || (Service.Family.RunningPlugin == this) ); _dynamicReason = PluginRunningStatusReason.StartedByConfig; _dynamicStatus = RunningStatus.RunningLocked; break; } default: { Debug.Assert( Service == null || !Service.Disabled ); _dynamicReason = PluginRunningStatusReason.None; _dynamicStatus = null; break; } } }
public bool DynamicStartByCommand( StartDependencyImpact impact ) { if( _dynamicStatus != null ) return _dynamicStatus.Value >= RunningStatus.Running; if( impact == StartDependencyImpact.Unknown ) impact = ConfigSolvedImpact; if( !DynTestCanStart( impact ) ) return false; _dynamicStatus = RunningStatus.Running; _dynamicReason = PluginRunningStatusReason.StartedByCommand; DynamicStartBy( impact, PluginRunningStatusReason.StartedByCommand ); return true; }
internal void DynamicStopBy(PluginRunningStatusReason reason) { Debug.Assert(_dynamicStatus == null); Debug.Assert(reason != PluginRunningStatusReason.None); _dynamicStatus = RunningStatus.Stopped; _dynamicReason = reason; if (Service != null) { Service.OnPluginStopped(true); Service.OnPostPluginStopped(); } }
public bool DynamicStartByCommand(StartDependencyImpact impact) { if (_dynamicStatus != null) { return(_dynamicStatus.Value >= RunningStatus.Running); } if (impact == StartDependencyImpact.Unknown) { impact = ConfigSolvedImpact; } if (!DynTestCanStart(impact)) { return(false); } _dynamicStatus = RunningStatus.Running; _dynamicReason = PluginRunningStatusReason.StartedByCommand; DynamicStartBy(impact, PluginRunningStatusReason.StartedByCommand); return(true); }
internal void DynamicStartBy(StartDependencyImpact impact, PluginRunningStatusReason reason) { Debug.Assert(_dynamicStatus == null || _dynamicStatus.Value >= RunningStatus.Running); if (_dynamicStatus == null) { _dynamicStatus = RunningStatus.Running; _dynamicReason = reason; } if (Service != null) { Service.OnDirectPluginStarted(this); } foreach (var sRef in PluginInfo.ServiceReferences) { ServiceData s = _solver.FindExistingService(sRef.Reference.ServiceFullName); s.DynamicStartByDependency(impact, sRef.Requirement); } }
internal void DynamicStopBy(ServiceRunningStatusReason reason) { Debug.Assert(_dynamicStatus == null); Debug.Assert(reason == ServiceRunningStatusReason.StoppedByGeneralization || reason == ServiceRunningStatusReason.StoppedByCommand || reason == ServiceRunningStatusReason.StoppedByPluginStopped || reason == ServiceRunningStatusReason.StoppedBySiblingRunningService || reason == ServiceRunningStatusReason.StoppedByOptionalReference || reason == ServiceRunningStatusReason.StoppedByOptionalRecommendedReference || reason == ServiceRunningStatusReason.StoppedByRunnableReference || reason == ServiceRunningStatusReason.StoppedByRunnableRecommendedReference || reason == ServiceRunningStatusReason.StoppedByFinalDecision); _dynamicStatus = RunningStatus.Stopped; _dynamicReason = reason; for (int i = 0; i < _inheritedServicesWithThis.Length - 1; ++i) { --_inheritedServicesWithThis[i]._dynamicAvailableServicesCount; } if (_dynamicTotalAvailablePluginsCount > 0) { // Stops the specialized services. ServiceData child = FirstSpecialization; while (child != null) { Debug.Assert(child.DynamicStatus == null || child.DynamicStatus.Value <= RunningStatus.Stopped); if (child.DynamicStatus == null) { child.DynamicStopBy(ServiceRunningStatusReason.StoppedByGeneralization); } child = child.NextSpecialization; } // Stops the plugins. PluginData p = FirstPlugin; while (p != null) { Debug.Assert(p.DynamicStatus == null || p.DynamicStatus.Value <= RunningStatus.Stopped); if (p.DynamicStatus == null) { p.DynamicStopBy(PluginRunningStatusReason.StoppedByStoppedService); } p = p.NextPluginForService; } Debug.Assert(_dynamicTotalAvailablePluginsCount == 0); } foreach (var backRef in _backReferences) { Debug.Assert(backRef.PluginData.DynamicStatus == null || backRef.PluginData.DynamicStatus.Value <= RunningStatus.Stopped || ((backRef.Requirement == DependencyRequirement.Optional || backRef.Requirement == DependencyRequirement.Runnable) && backRef.PluginData.ConfigSolvedImpact != StartDependencyImpact.FullStart) || ((backRef.Requirement == DependencyRequirement.OptionalRecommended || backRef.Requirement == DependencyRequirement.RunnableRecommended) && backRef.PluginData.ConfigSolvedImpact < StartDependencyImpact.StartRecommended)); if (backRef.PluginData.DynamicStatus == null) { PluginRunningStatusReason r = backRef.PluginData.GetStoppedReasonForStoppedReference(backRef.Requirement); if (r != PluginRunningStatusReason.None) { backRef.PluginData.DynamicStopBy(r); } } } }
internal void DynamicStopBy( PluginRunningStatusReason reason ) { Debug.Assert( _dynamicStatus == null ); Debug.Assert( reason != PluginRunningStatusReason.None ); _dynamicStatus = RunningStatus.Stopped; _dynamicReason = reason; if( Service != null ) { Service.OnPluginStopped( true ); Service.OnPostPluginStopped(); } }
internal void DynamicStartBy( StartDependencyImpact impact, PluginRunningStatusReason reason ) { Debug.Assert( _dynamicStatus == null || _dynamicStatus.Value >= RunningStatus.Running ); if( _dynamicStatus == null ) { _dynamicStatus = RunningStatus.Running; _dynamicReason = reason; } if( Service != null ) Service.OnDirectPluginStarted( this ); foreach( var sRef in PluginInfo.ServiceReferences ) { ServiceData s = _solver.FindExistingService( sRef.Reference.ServiceFullName ); s.DynamicStartByDependency( impact, sRef.Requirement ); } }