Beispiel #1
0
 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);
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }