Exemplo n.º 1
0
        /// <summary>
        /// 数据解析
        /// </summary>
        /// <param name="context">处理上下文</param>
        /// <returns></returns>
        public override async Task <DataFlowResult> HandleAsync(DataFlowContext context)
        {
            if (context?.Response == null)
            {
                Logger?.LogError("数据上下文或者响应内容为空");
                return(DataFlowResult.Failed);
            }

            try
            {
                // 如果不匹配则跳过,不影响其它数据流处理器的执行
                if (CanParse != null && !CanParse(context.Response.Request))
                {
                    return(DataFlowResult.Success);
                }

                SelectableFactory?.Invoke(context);

                var parserResult = await Parse(context);

                var urls = QueryFollowRequests?.Invoke(context);
                AddTargetRequests(context, urls);

                if (parserResult == DataFlowResult.Failed || parserResult == DataFlowResult.Terminated)
                {
                    return(parserResult);
                }

                return(DataFlowResult.Success);
            }
            catch (Exception e)
            {
                Logger?.LogError($"任务 {context.Response.Request.OwnerId} 数据解析发生异常: {e}");
                return(DataFlowResult.Failed);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Data analysis
        /// </summary>
        /// <param name="context">Processing context</param>
        /// <returns></returns>
        public override async Task <DataFlowResult> HandleAsync(DataFlowContext context)
        {
            if (context?.Response == null)
            {
                Logger?.LogError("Data context or response content is empty");
                return(DataFlowResult.Failed);
            }

            try
            {
                // Skip if not matched, does not affect the execution of other data stream processors
                if (CanParse != null && !CanParse(context.Response.Request))
                {
                    return(DataFlowResult.Success);
                }
                // [Doanh]: call this first to initialize _selectable Instance for the context.
                SelectableFactory?.Invoke(context);

                var parserResult = await Parse(context);

                var urls = QueryFollowRequests?.Invoke(context);
                AddTargetRequests(context, urls);

                if (parserResult == DataFlowResult.Failed || parserResult == DataFlowResult.Terminated)
                {
                    return(parserResult);
                }

                return(DataFlowResult.Success);
            }
            catch (Exception e)
            {
                Logger?.LogError($"任务 {context.Response.Request.OwnerId} 数据解析发生异常: {e}");
                return(DataFlowResult.Failed);
            }
        }