예제 #1
0
        public async Task Build()
        {
            BuildContext buildContext = null;

            try
            {
                var dataSource = _pluginManager.Resolve <IDataSource>(_project.DataSource.Name);
                if (OnStartup != null)
                {
                    await OnStartup.Invoke(this, new OnProjectBuildStartupEventArgs { Project = _project });
                }
                await dataSource.InitData();

                foreach (var buildKV in _project.BuildTasks)
                {
                    _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------");
                    var output = buildKV.Value.Output;
                    buildContext = new BuildContext
                    {
                        PluginManager = _pluginManager,
                        Project       = _project,
                        DataSource    = dataSource,
                        BuildKey      = buildKV.Key,
                        Build         = buildKV.Value,
                        Output        = output == null ? null : new Output
                        {
                            Type      = output.Type,
                            Path      = output.Path,
                            Name      = output.Name,
                            Mode      = output.Mode,
                            Extension = output.Extension
                        }
                    };
                    await _pluginManager.Resolve <IBuildTask>(buildKV.Value.Type).Build(buildContext);

                    _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------");
                }

                if (OnSucceed != null)
                {
                    await OnSucceed.Invoke(this, new OnProjectBuildSucceedEventArgs
                    {
                        Project = _project
                    });
                }
            }
            catch (Exception ex)
            {
                if (OnFailed != null)
                {
                    await OnFailed.Invoke(this, new OnProjectBuildFailedEventArgs
                    {
                        Project        = _project,
                        Context        = buildContext,
                        ErrorException = ex
                    });
                }
                throw;
            }
        }
예제 #2
0
        private void CheckProbe(bool IsFinal)
        {
            var Index = new QuickIndex(ElementsCount_);

            if (Elements_.ContainsKey(Index.GetHashCode()))
            {
                var Node = Elements_[Index.GetHashCode()];
                if (IsFinal)
                {
                    OnSucceed?.Invoke(Node);
                }
                else
                {
                    OnProbe?.Invoke(Node);
                }
            }
            else
            {
                if (IsFinal)
                {
                    OnFailed?.Invoke();
                }
                else
                {
                    OnProbe?.Invoke(null);
                }
            }
        }