private static bool ProcessDownloader(IDownloader provider, YieldDownloader yieldDownloader, FourPartVersion asmVersion, IRequest request) { try { // provider.InitializeProvider(DynamicInterface.Instance, request); FourPartVersion ver = provider.GetProviderVersion(); if (yieldDownloader(provider.GetDownloaderName(), provider, ver == 0 ? asmVersion : ver, request)) { // provider.InitializeProvider(request); return(true); } } catch (Exception e) { e.Dump(); } return(false); }
internal static bool AcquireProviders(string assemblyPath, IRequest request, YieldMetaProvider yieldMetaProvider, YieldPackageProvider yieldPackageProvider, YieldArchiver yieldArchiver, YieldDownloader yieldDownloader) { var found = false; try { var assembly = Assembly.LoadFile(assemblyPath); AppDomain.CurrentDomain.SetData("DynamicInteface", DynamicInterface.Instance); if (assembly == null) { return(false); } var asmVersion = GetAssemblyVersion(assembly); var t1 = Task.Factory.StartNew(() => { // process Meta Providers foreach (var metaProviderClass in DynamicInterface.Instance.FilterTypesCompatibleTo <IMetaProvider>(assembly)) { found = found | AcquireProvidersViaMetaProvider(DynamicInterface.Instance.Create <IMetaProvider>(metaProviderClass), yieldMetaProvider, yieldPackageProvider, yieldArchiver, yieldDownloader, asmVersion, request); } }, TaskCreationOptions.AttachedToParent | TaskCreationOptions.LongRunning); var t2 = Task.Factory.StartNew(() => { // process Package Providers Parallel.ForEach(DynamicInterface.Instance.FilterTypesCompatibleTo <IPackageProvider>(assembly), packageProviderClass => { //foreach (var packageProviderClass in DynamicInterface.Instance.FilterTypesCompatibleTo<IPackageProvider>(assembly)) { found = found | ProcessPackageProvider(DynamicInterface.Instance.Create <IPackageProvider>(packageProviderClass), yieldPackageProvider, asmVersion, request); }); }, TaskCreationOptions.AttachedToParent | TaskCreationOptions.LongRunning); var t3 = Task.Factory.StartNew(() => { // Process archiver Providers Parallel.ForEach(DynamicInterface.Instance.FilterTypesCompatibleTo <IArchiver>(assembly), serviceProviderClass => { // foreach (var serviceProviderClass in DynamicInterface.Instance.FilterTypesCompatibleTo<IArchiver>(assembly)) { found = found | ProcessArchiver(DynamicInterface.Instance.Create <IArchiver>(serviceProviderClass), yieldArchiver, asmVersion, request); }); }, TaskCreationOptions.AttachedToParent | TaskCreationOptions.LongRunning); var t4 = Task.Factory.StartNew(() => { // Process downloader Providers Parallel.ForEach(DynamicInterface.Instance.FilterTypesCompatibleTo <IDownloader>(assembly), serviceProviderClass => { // foreach (var serviceProviderClass in DynamicInterface.Instance.FilterTypesCompatibleTo<IDownloader>(assembly)) { found = found | ProcessDownloader(DynamicInterface.Instance.Create <IDownloader>(serviceProviderClass), yieldDownloader, asmVersion, request); }) ; }, TaskCreationOptions.AttachedToParent | TaskCreationOptions.LongRunning); t1.Wait(); t2.Wait(); t3.Wait(); t4.Wait(); } catch (Exception e) { e.Dump(); } return(found); }
internal static bool AcquireProvidersViaMetaProvider(IMetaProvider provider, YieldMetaProvider yieldMetaProvider, YieldPackageProvider yieldPackageProvider, YieldArchiver yieldArchiver, YieldDownloader yieldDownloader, FourPartVersion asmVersion, IRequest request) { var found = false; var metaProviderName = provider.GetMetaProviderName(); FourPartVersion metaProviderVersion = provider.GetProviderVersion(); var reloading = yieldMetaProvider(metaProviderName, provider, (metaProviderVersion == 0 ? asmVersion : metaProviderVersion), request); try { provider.InitializeProvider(request); var metaProvider = provider; Parallel.ForEach(provider.GetProviderNames(), name => { // foreach (var name in provider.GetProviderNames()) { var instance = metaProvider.CreateProvider(name); if (instance != null) { // check if it's a Package Provider if (DynamicInterface.Instance.IsInstanceCompatible <IPackageProvider>(instance)) { try { found = found | ProcessPackageProvider(DynamicInterface.Instance.Create <IPackageProvider>(instance), yieldPackageProvider, asmVersion, request); } catch (Exception e) { e.Dump(); } } // check if it's a Services Provider if (DynamicInterface.Instance.IsInstanceCompatible <IArchiver>(instance)) { try { found = found | ProcessArchiver(DynamicInterface.Instance.Create <IArchiver>(instance), yieldArchiver, asmVersion, request); } catch (Exception e) { e.Dump(); } } if (DynamicInterface.Instance.IsInstanceCompatible <IDownloader>(instance)) { try { found = found | ProcessDownloader(DynamicInterface.Instance.Create <IDownloader>(instance), yieldDownloader, asmVersion, request); } catch (Exception e) { e.Dump(); } } } }); } catch (Exception e) { e.Dump(); } return(found); }