コード例 #1
0
        public async Task Parse()
        {
            string source;

            if (isUrl)
            {
                source = await _loader.GetPage();
            }
            else
            {
                source = Source;
            }
            Console.WriteLine("loader");
            var domParser = new AngleSharp.Parser.Html.HtmlParser();
            var document  = await domParser.ParseAsync(source);

            Console.WriteLine("parser");
            _result = await _parser.Parse(document);

            ParsingCompleted?.Invoke(this, new ParseResult <Dictionary <string, List <StringDictionary> > >()
            {
                Res = _result
            });
            //OnNewData?.Invoke(this, result);
        }
コード例 #2
0
        //private static IAsyncResult EnqueueTask(Action action)
        //{
        //    var combinedActions = new DoubleAction(action, OnRunningTaskEnd);
        //    var task = new Task(combinedActions.ActionDoSecondAlways);
        //    lock (m_runningTasksSync)
        //    {
        //        if (m_runningTasks.Count == 0)
        //        {
        //            task.Start();
        //        }
        //        m_runningTasks.Enqueue(task);
        //    }
        //    return task;
        //}

        //private static void OnRunningTaskEnd()
        //{
        //    lock (m_runningTasksSync)
        //    {
        //        m_runningTasks.Dequeue();   // Remove task that just ended.
        //        if (m_runningTasks.Count > 0)
        //        {
        //            var next = m_runningTasks.Peek();
        //            next.Start();
        //        }
        //    }
        //}

        /// <summary>
        /// Starts a task parsing all loaded script files.
        /// </summary>
        /// <param name="force">Set to true to force a parsing of all files.</param>
        /// <returns>True if parsing succeeded (no errors or parsing skipped).</returns>
        public static ITask StartFileParsing(bool force)
        {
            if (m_parsingInQueue != null)
            {
                return(m_parsingInQueue);
            }
            if (force || CheckIfFileParsingNeeded())
            {
                m_parsingInQueue = m_hostActions.AddTask("Script File Parsing", true, null, (context) =>
                {
                    try
                    {
                        context.UpdateStatus($"Resetting files ({(force ? "forced" : "not forced")})");
                        foreach (var f in m_loadedFilesManager.ListFiles <ScriptFile>())
                        {
                            f.ResetBeforeParsing(preserveUpdateableElements: force == false);
                        }

                        context.UpdateStatus("Parsing files");
                        m_lastParsingErrorCount = FileBuilder.ParseFiles(m_serviceManagerAdmin.Manager, context.Logger);
                    }
                    catch (Exception ex)
                    {
                        m_lastParsingErrorCount = 1;        // At least one...
                        context.Logger.LogError("File Parsing", ex.ToString());
                    }
                    finally
                    {
                        context.UpdateStatus($"Finished parsing. {m_lastParsingErrorCount} parsing error(s).");
                        m_parsingInQueue = null;
                        ParsingCompleted?.Invoke(null, EventArgs.Empty);
                    }
                });
                return(m_parsingInQueue);
            }
            else
            {
                return(null);
            }
        }
コード例 #3
0
        //######################################################################################################################

        protected void OnParsingCompleted()
        {
            ParsingCompleted?.Invoke(this, this._abort);
        }