Пример #1
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            // create a loader page
            Progress loader = new Progress();

            // set the visual root to loader page
            this.RootVisual = loader;

            // Debug helper -> make sure we have html params!
            if (e.InitParams.Count == 0)
            {
                MessageBox.Show("Error: You must tell your loader what files to load in your web page(init params) or manually in the code!", "Loader Error Message", MessageBoxButton.OK);
                //throw new Exception("Loader init params error");
                return;
            }
            // create package download manager and start the download process using html supplied InitParams
            // note the last param sets a 100KB max download speed for debuging and simulation mode!
            PackageDownloadManager pdm = new PackageDownloadManager(loader, e.InitParams, 0);

            // another option is to use a hand coded list ->
            //List<Uri> myDownloadList = new List<Uri>();
            //myDownloadList.Add(new Uri("ClientBin/Beegger.xap", UriKind.RelativeOrAbsolute));
            //ParamUtil.fixRelativeLinks(ref myDownloadList);
            //PackageDownloadManager pdm = new PackageDownloadManager(loader, myDownloadList, 50);
        }
Пример #2
0
 public WebFacade(AppInfo appInfo, PackageDownloadManager packageDownloadManager, PackageDataValidator validator, LocalPackageManager localPackageManager, IPeerRegistry peerRegistry, IPackageRegistry packageRegistry, InstanceHash instanceHash, LongRunningTasksManager tasks, PeersCluster peersCluster)
 {
     this.appInfo = appInfo ?? throw new ArgumentNullException(nameof(appInfo));
     this.packageDownloadManager = packageDownloadManager ?? throw new ArgumentNullException(nameof(packageDownloadManager));
     this.validator           = validator ?? throw new ArgumentNullException(nameof(validator));
     this.localPackageManager = localPackageManager ?? throw new ArgumentNullException(nameof(localPackageManager));
     this.peerRegistry        = peerRegistry ?? throw new ArgumentNullException(nameof(peerRegistry));
     this.packageRegistry     = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry));
     this.instanceHash        = instanceHash ?? throw new ArgumentNullException(nameof(instanceHash));
     this.tasks        = tasks ?? throw new ArgumentNullException(nameof(tasks));
     this.peersCluster = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster));
 }
Пример #3
0
        public async Task Load(PackagesLock packagesLock, IServerInfo serverInfo, CancellationToken token)
        {
            var serverRepo = new ServerRepository(new Uri(serverInfo.ServerUri, "nuget"));

            var context = new PackageDownloadContext(new SourceCacheContext {
                DirectDownload = true, NoCache = true
            },
                                                     Environment.ExpandEnvironmentVariables(_options.TempPath), true);

            var packageDownloadManager = new PackageDownloadManager(_modulesDirectory, serverRepo);
            var result =
                await packageDownloadManager.DownloadPackages(packagesLock, context, NullLogger.Instance, token);

            if (result.Any())
            {
                try
                {
                    foreach (var preFetchResult in result.Values)
                    {
                        using (var downloadPackageResult = await preFetchResult.GetResultAsync())
                        {
                            // use the version exactly as specified in the nuspec file
                            var packageIdentity = await downloadPackageResult.PackageReader.GetIdentityAsync(token);

                            var packageExtractionContext = new PackageExtractionContext(
                                PackageSaveMode.Defaultv3,
                                PackageExtractionBehavior.XmlDocFileSaveMode,
                                ClientPolicyContext.GetClientPolicy(new NullSettings(), new NullLogger()),
                                new NullLogger());

                            downloadPackageResult.PackageStream.Position = 0;

                            await PackageExtractor.InstallFromSourceAsync(serverRepo.PackageSource.Source,
                                                                          packageIdentity, stream => downloadPackageResult.PackageStream.CopyToAsync(stream),
                                                                          _modulesDirectory.VersionFolderPathResolver, packageExtractionContext, token);
                        }
                    }
                }
                finally
                {
                    foreach (var fetcherResult in result.Values)
                    {
                        await fetcherResult.EnsureResultAsync();

                        fetcherResult.Dispose();
                    }
                }
            }
        }
Пример #4
0
 public AppInstanceBootstrapper(
     PackageDownloadManager packageDownloadManager,
     UdpPeerDiscovery udpPeerDiscovery,
     IPeerRegistry peerRegistry,
     IPackageRegistry packageRegistry,
     LocalPackageManager localPackageManager,
     PeersCluster peersCluster
     )
 {
     PackageDownloadManager = packageDownloadManager ?? throw new ArgumentNullException(nameof(packageDownloadManager));
     UdpPeerDiscovery       = udpPeerDiscovery ?? throw new ArgumentNullException(nameof(udpPeerDiscovery));
     PeerRegistry           = peerRegistry ?? throw new ArgumentNullException(nameof(peerRegistry));
     PackageRegistry        = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry));
     LocalPackageManager    = localPackageManager ?? throw new ArgumentNullException(nameof(localPackageManager));
     PeersCluster           = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster));
 }
Пример #5
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            // create a loader page
            Loader loader = new Loader();

            // set the visual root to loader page
            this.RootVisual = loader;

            // create package download manager and start the download process using html supplied InitParams
            // note the last param sets a 50KB max download speed for debuging and simulation mode!
            PackageDownloadManager pdm = new PackageDownloadManager(loader, e.InitParams, 50);

            // another option is to use a hand coded list ->
            //List<Uri> myDownloadList = new List<Uri>();
            //myDownloadList.Add(new Uri("ClientBin/Beegger.xap", UriKind.RelativeOrAbsolute));
            //ParamUtil.fixRelativeLinks(ref myDownloadList);
            //PackageDownloadManager pdm = new PackageDownloadManager(loader, myDownloadList, 50);
        }
Пример #6
0
        public void Start(AppInstanceSettings settings)
        {
            if (settings.DownloadEverything)
            {
                PackageRegistry.RemotePackageDiscovered += (package) =>
                {
                    if (PackageDownloadManager.GetDiscoveredPackageAndStartDownloadPackage(package, out var task))
                    {
                        task.Wait();
                    }
                };
            }

            UdpPeerDiscovery.EnableAutoSearch(
                allowListener: settings.EnableUdpDiscoveryListener,
                allowClient: settings.EnableUdpDiscoveryClient
                );

            PackageDownloadManager.RestoreUnfinishedDownloads();
        }
Пример #7
0
        public static void Initialise(string downloadsPath, string packagesPath, string sourcePortsPath)
        {
            if (downloadsPath is null)
            {
                throw new ArgumentNullException(nameof(downloadsPath));
            }
            if (packagesPath is null)
            {
                throw new ArgumentNullException(nameof(packagesPath));
            }
            if (sourcePortsPath is null)
            {
                throw new ArgumentNullException(nameof(sourcePortsPath));
            }

            if (Packages != null || SourcePorts != null)
            {
                throw new Exception("Attempted to re-initialise DownloadService.");
            }

            Packages    = new PackageDownloadManager(downloadsPath, packagesPath);
            SourcePorts = new SourcePortDownloadManager(downloadsPath, sourcePortsPath);
        }
Пример #8
0
 public HttpApiController(PeersCluster peersCluster, IPackageRegistry packageRegistry, PackageDownloadManager downloadManager)
 {
     this.peersCluster    = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster));
     this.packageRegistry = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry));
     this.downloadManager = downloadManager ?? throw new ArgumentNullException(nameof(downloadManager));
 }
Пример #9
0
        public async Task <Dictionary <PackageIdentity, FileInfoBase> > LoadPackages(PackagesLock packagesLock, DirectoryInfoBase tempDirectory,
                                                                                     CancellationToken cancellationToken)
        {
            var result             = new Dictionary <PackageIdentity, FileInfoBase>();
            var packagesToDownload = new List <PackageIdentity>();

            foreach (var packageId in packagesLock.Keys)
            {
                var filePath = _versionFolderPathResolver.GetPackageFilePath(packageId.Id, packageId.Version);
                var file     = _fileSystem.FileInfo.FromFileName(filePath);
                if (file.Exists)
                {
                    _logger.LogDebug("Package {packageId} could be resolved locally at {path}", packageId, file.FullName);
                    result.Add(packageId, file);
                }
                else
                {
                    _logger.LogDebug("Package {packageId} could not be resolved locally", packageId);
                    packagesToDownload.Add(packageId);
                }

                cancellationToken.ThrowIfCancellationRequested();
            }

            if (packagesToDownload.Any())
            {
                _logger.LogInformation("{0} package(s) were not found locally and will be downloaded.", packagesToDownload.Count);

                var nugetFolder            = tempDirectory.CreateSubdirectory("nuget");
                var tempFolderPathResolver = new VersionFolderPathResolverFlat(nugetFolder.FullName);

                var serverRepo = new ServerRepository(new Uri(_restClient.Server.ServerUri, "nuget"));
                var downloader = new PackageDownloadManager(new ModulesDirectory(tempFolderPathResolver), serverRepo);

                var results = await downloader.DownloadPackages(
                    new PackagesLock(packagesToDownload.ToDictionary(x => x,
                                                                     _ => (IImmutableList <PackageIdentity>)ImmutableList <PackageIdentity> .Empty)),
                    new PackageDownloadContext(new SourceCacheContext {
                    DirectDownload = true, NoCache = true
                }, nugetFolder.FullName, true),
                    new NuGetLoggerWrapper(_logger), cancellationToken);

                try
                {
                    foreach (var preFetchResult in results.Values)
                    {
                        using (var downloadPackageResult = await preFetchResult.GetResultAsync())
                        {
                            var packageIdentity = await downloadPackageResult.PackageReader.GetIdentityAsync(cancellationToken);

                            _logger.LogInformation("Package {0} was successfully downloaded.", packageIdentity);

                            var fileStream = (FileStream)downloadPackageResult.PackageStream;
                            var file       = _fileSystem.FileInfo.FromFileName(fileStream.Name);
                            if (!file.Exists)
                            {
                                _logger.LogError("Package {0} was not found at {1}. The download may have failed.", packageIdentity, file.FullName);
                                throw new FileNotFoundException($"The file {file.FullName} does not exist.");
                            }

                            var packagePath = _fileSystem.Path.Combine(_fileSystem.Path.GetDirectoryName(file.FullName), packageIdentity + ".nupkg");
                            using (var stream = _fileSystem.FileStream.Create(packagePath, FileMode.CreateNew))
                                await fileStream.CopyToAsync(stream);

                            result.Add(packageIdentity, _fileSystem.FileInfo.FromFileName(packagePath));
                        }
                    }
                }
                finally
                {
                    foreach (var fetcherResult in results.Values)
                    {
                        await fetcherResult.EnsureResultAsync();

                        fetcherResult.Dispose();
                    }
                }
            }

            return(result);
        }