コード例 #1
0
ファイル: LogFactory.cs プロジェクト: matteobruni/NLog
        /// <summary>
        /// Initializes a new instance of the <see cref="LogFactory" /> class.
        /// </summary>
        public LogFactory()
        {
#if !SILVERLIGHT
            this.watcher                   = new MultiFileWatcher();
            this.watcher.OnChange         += this.ConfigFileChanged;
            CurrentAppDomain.DomainUnload += currentAppDomain_DomainUnload;
#endif
        }
コード例 #2
0
 public EditorGeneratorContext(Effect effect, string projectPath, string mapsetPath, EditorBeatmap beatmap, IEnumerable <EditorBeatmap> beatmaps, MultiFileWatcher watcher)
 {
     this.projectPath = projectPath;
     this.mapsetPath  = mapsetPath;
     this.effect      = effect;
     this.beatmap     = beatmap;
     this.beatmaps    = beatmaps;
     this.watcher     = watcher;
 }
コード例 #3
0
        protected override void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    dependencyWatcher?.Dispose();
                    scriptContainer.OnScriptChanged -= scriptContainer_OnScriptChanged;
                }
                dependencyWatcher = null;
                disposedValue     = true;
            }

            base.Dispose(disposing);
        }
コード例 #4
0
        protected override void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    dependencyWatcher?.Dispose();
                    scriptContainer.OnScriptChanged -= scriptContainer_OnScriptChanged;
                    foreach (var layer in layers)
                    {
                        Project.LayerManager.Remove(layer);
                    }
                }
                dependencyWatcher = null;
                layers            = null;
                disposedValue     = true;
            }

            base.Dispose(disposing);
        }
コード例 #5
0
ファイル: LogFactory.cs プロジェクト: HUkiah/CLog
 public LogFactory()
 {
     _watcher              = new MultiFileWatcher();
     _watcher.FileChanged += ConfigFileChanged;
 }
コード例 #6
0
        /// <summary>
        /// Should only be called by Project.QueueEffectUpdate(Effect).
        /// Doesn't run on the main thread.
        /// </summary>
        public override void Update()
        {
            if (!scriptContainer.HasScript)
            {
                return;
            }

            var newDependencyWatcher = new MultiFileWatcher();

            newDependencyWatcher.OnFileChanged += (sender, e) =>
            {
                if (IsDisposed)
                {
                    return;
                }
                Refresh();
            };

            var context = new EditorGeneratorContext(this, Project.ProjectFolderPath, Project.MapsetPath, Project.MainBeatmap, Project.MapsetManager.Beatmaps, newDependencyWatcher);
            var success = false;

            try
            {
                changeStatus(EffectStatus.Loading);
                var script = scriptContainer.CreateScript();

                changeStatus(EffectStatus.Configuring);
                Program.RunMainThread(() =>
                {
                    beatmapDependant = true;
                    if (script.Identifier != configScriptIdentifier)
                    {
                        script.UpdateConfiguration(Config);
                        configScriptIdentifier = script.Identifier;

                        RaiseConfigFieldsChanged();
                    }
                    else
                    {
                        script.ApplyConfiguration(Config);
                    }
                });

                changeStatus(EffectStatus.Updating);
                script.Generate(context);
                foreach (var layer in context.EditorLayers)
                {
                    layer.PostProcess();
                }

                success = true;
            }
            catch (RemotingException e)
            {
                Debug.Print($"Script execution failed with RemotingException, reloading {BaseName} ({e.Message})");
                changeStatus(EffectStatus.ReloadPending);
                Program.Schedule(() =>
                {
                    if (Project.IsDisposed)
                    {
                        return;
                    }
                    scriptContainer.ReloadScript();
                });
                return;
            }
            catch (ScriptCompilationException e)
            {
                Debug.Print($"Script compilation failed for {BaseName}\n{e.Message}");
                changeStatus(EffectStatus.CompilationFailed, e.Message, context.Log);
                return;
            }
            catch (ScriptLoadingException e)
            {
                Debug.Print($"Script load failed for {BaseName}\n{e.ToString()}");
                changeStatus(EffectStatus.LoadingFailed, e.InnerException != null ? $"{e.Message}: {e.InnerException.Message}" : e.Message, context.Log);
                return;
            }
            catch (Exception e)
            {
                changeStatus(EffectStatus.ExecutionFailed, getExecutionFailedMessage(e), context.Log);
                return;
            }
            finally
            {
                if (!success)
                {
                    if (dependencyWatcher != null)
                    {
                        dependencyWatcher.Watch(newDependencyWatcher.WatchedFilenames);
                        newDependencyWatcher.Dispose();
                        newDependencyWatcher = null;
                    }
                    else
                    {
                        dependencyWatcher = newDependencyWatcher;
                    }
                }
                context.DisposeResources();
            }
            changeStatus(EffectStatus.Ready, null, context.Log);

            Program.Schedule(() =>
            {
                if (IsDisposed)
                {
                    newDependencyWatcher.Dispose();
                    return;
                }

                beatmapDependant = context.BeatmapDependent;
                dependencyWatcher?.Dispose();
                dependencyWatcher = newDependencyWatcher;

                if (Project.IsDisposed)
                {
                    return;
                }

                if (placeHolderLayer != null)
                {
                    Project.LayerManager.Replace(placeHolderLayer, context.EditorLayers);
                    placeHolderLayer = null;
                }
                else
                {
                    Project.LayerManager.Replace(layers, context.EditorLayers);
                }
                layers = context.EditorLayers;
                refreshLayerNames();
                refreshEstimatedSize();
            });
        }
コード例 #7
0
        /// <summary>
        /// Creates a new instance of <see cref="LogFactory"/>
        /// </summary>
        public LogFactory()
        {
#if !NETCF
            _watcher = new MultiFileWatcher(new EventHandler(ConfigFileChanged));
#endif
        }