Example #1
0
        /// <summary>
        /// 执行数据提取
        /// </summary>
        private async Task DoDataExtract()
        {
            /*
             * APP数据提取流程:
             * 1.根据设备类型和提取方式获取该APP的所有插件
             * 2.通过数据泵服务获取SourceFileItems
             * 3.通过特征匹配和版本匹配确定要执行的插件版本
             * 4.执行插件
             * 5.获取解析结果
             *
             * */

            var items = PluginAdapter.MatchPluginByPump(SourcePump, ExtractItems);

            switch (WorkMode)
            {
            case EnumDataExtractWorkMode.HalfAsync:
                await DoHalfAsyncDataExtract(items);

                break;

            default:
                throw new NotImplementedException();
            }
        }
Example #2
0
        /// <summary>
        /// 执行插件
        /// </summary>
        /// <param name="extractItem"></param>
        /// <param name="plugs"></param>
        /// <returns></returns>
        private async Task DoDataPlug(ExtractItem extractItem, IEnumerable <DataParsePluginInfo> plugs)
        {
            await Task.Run(() =>
            {
                WaitRunWorkThread(() =>
                {
                    //1.匹配插件
                    var plug = PluginAdapter.MatchPluginByApp(plugs, SourcePump, RootSourceDataPath, GetAppVersion(extractItem));

                    //2.执行插件
                    PluginAdapter.ExecutePlugin(plug, Asyn, (ds) =>
                    {            //插件执行完处理
                        FinishExtractItem(extractItem, ds);
                    });
                }, () =>
                {
                    //TODO:取消插件执行后处理
                });
            });
        }
 /// <summary>
 /// 初始化
 /// </summary>
 /// <param name="pump">提取信息。</param>
 /// <param name="extractItems">提取项列表。</param>
 private Boolean Initialization(Pump pump, ExtractItem[] extractItems)
 {
     if (pump == null)
     {
         return(false);
     }
     if (extractItems == null || extractItems.Length == 0)
     {
         return(false);
     }
     _pluginAdapter = PluginAdapter.Instance;
     if (_pluginAdapter == null)
     {
         return(false);
     }
     DataItemsCount     = 0;
     DataPump           = pump.GetDataPump();
     _extractItems      = extractItems;
     _cancelTokenSource = new CancellationTokenSource();
     _cancelToken       = _cancelTokenSource.Token;
     FileHelper.CreateExitsDirectory(pump.SourceStorePath);
     Reporter?.Reset();
     return(true);
 }