예제 #1
0
        public Task UpdateInstalledStateAsync(EngineFeatureState featureState, EngineFeatureState.States value)
        {
            if (Logger.IsEnabled(LogLevel.Debug))
            {
                Logger.LogDebug("Feature '{FeatureName}' InstallState changed from '{FeatureState}' to '{FeatureState}'", featureState.Id, featureState.InstallState, value);
            }

            return(Task.CompletedTask);
        }
예제 #2
0
 private static bool FeatureIsChanging(EngineFeatureState engineFeatureState)
 {
     if (engineFeatureState.EnableState == EngineFeatureState.States.Rising ||
         engineFeatureState.EnableState == EngineFeatureState.States.Falling)
     {
         return(true);
     }
     if (engineFeatureState.InstallState == EngineFeatureState.States.Rising ||
         engineFeatureState.InstallState == EngineFeatureState.States.Falling)
     {
         return(true);
     }
     return(false);
 }
예제 #3
0
        private async Task <EngineFeatureState> GetOrCreateFeatureStateAsync(string id)
        {
            var engineState = await GetEngineStateAsync();

            var featureState = engineState.Features.FirstOrDefault(x => x.Id == id);

            if (featureState == null)
            {
                featureState = new EngineFeatureState()
                {
                    Id = id
                };
                _engineState.Features.Add(featureState);
            }

            return(featureState);
        }
예제 #4
0
        async Task IEngineDescriptorManagerEventHandler.Changed(EngineDescriptor descriptor, string tenant)
        {
            var engineState = await _stateManager.GetEngineStateAsync();

            foreach (var feature in descriptor.Features)
            {
                var featureId    = feature.Id;
                var featureState = engineState.Features.SingleOrDefault(f => f.Id == featureId);
                if (featureState == null)
                {
                    featureState = new EngineFeatureState
                    {
                        Id = featureId
                    };
                }
                if (!featureState.IsInstalled)
                {
                    await _stateManager.UpdateInstalledStateAsync(featureState, EngineFeatureState.States.Rising);
                }
                if (!featureState.IsEnabled)
                {
                    await _stateManager.UpdateEnabledStateAsync(featureState, EngineFeatureState.States.Rising);
                }
            }
            foreach (var featureState in engineState.Features)
            {
                var featureId = featureState.Id;
                if (descriptor.Features.Any(f => f.Id == featureId))
                {
                    continue;
                }
                if (!featureState.IsDisabled)
                {
                    await _stateManager.UpdateEnabledStateAsync(featureState, EngineFeatureState.States.Falling);
                }
            }

            FireApplyChangesIfNeeded();
        }
예제 #5
0
        public async Task UpdateInstalledStateAsync(EngineFeatureState featureState, EngineFeatureState.States value)
        {
            if (Logger.IsEnabled(LogLevel.Debug))
            {
                Logger.LogDebug("Feature '{FeatureName}' InstallState changed from '{FeatureState}' to '{FeatureState}'", featureState.Id, featureState.InstallState, value);
            }

            var previousFeatureState = await GetOrCreateFeatureStateAsync(featureState.Id);

            if (previousFeatureState.InstallState != featureState.InstallState)
            {
                if (Logger.IsEnabled(LogLevel.Warning))
                {
                    Logger.LogWarning("Feature '{FeatureName}' prior InstallState was '{FeatureState}' when '{FeatureState}' was expected",
                                      featureState.Id, previousFeatureState.InstallState, featureState.InstallState);
                }
            }

            previousFeatureState.InstallState = value;
            featureState.InstallState         = value;

            UpdateEngineState();
        }
예제 #6
0
 static bool IsRising(EngineFeatureState state)
 {
     return(state.InstallState == EngineFeatureState.States.Rising ||
            state.EnableState == EngineFeatureState.States.Rising);
 }
예제 #7
0
 private static bool FeatureShouldBeLoadedForStateChangeNotifications(EngineFeatureState engineFeatureState)
 {
     return(FeatureIsChanging(engineFeatureState) || engineFeatureState.EnableState == EngineFeatureState.States.Up);
 }