/// <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(); } }
/// <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); }