Пример #1
0
        public void UploadJobTest()
        {
            using var tempRoot = new TemporaryDirectory();
            DirectoryInfo remoteRoot; remoteRoot         = tempRoot.CreateSubDirectory(nameof(remoteRoot));
            DirectoryInfo localDirectory; localDirectory = tempRoot.CreateSubDirectory(nameof(localDirectory));

            var allFileInfos = new[]
            {
                tempRoot.CreateSubDirectoryFile(localDirectory, fileSize: 5 * TemporaryDirectory.OneMebibyte)
            };

            var allFilesTotalSize = allFileInfos.Select(fi => fi.Length).Sum();
            var allFilesToUpload  = allFileInfos.Select(fi => fi.Name).ToArray();


            var            raiseException = false;
            AutoResetEvent autoReset;

            // Local method because of local vars.
            void OnUploadCompleted(object s, BackgroundCopyJobEventArgs e)
            {
                UploadCompleted(e, autoReset, allFilesToUpload.Length, allFilesTotalSize);
            }

            // Create an upload job.
            using var uploadJob = BackgroundCopyManager.Jobs.Add($"{nameof(remoteRoot)} upload", jobType: BackgroundCopyJobType.Upload);

            using (autoReset = new AutoResetEvent(false))
            {
                // Set event handlers for job, these are weak references.
                uploadJob.Error           += OnUploadError;
                uploadJob.FileTransferred += OnUploadFileTransferred;
                uploadJob.Completed       += OnUploadCompleted;


                // Add upload file information.
                var fileToUpload = Path.Combine(remoteRoot.FullName, allFileInfos[0].Name);

                uploadJob.Files.Add(fileToUpload, allFileInfos[0].FullName);

                // Start (resume) the job.
                uploadJob.Resume();


                // Block thread and wait.
                raiseException = !autoReset.WaitOne(TimeSpan.FromSeconds(10));
            }


            // Remove weak references to prevent memory leak.
            uploadJob.Completed       -= OnUploadCompleted;
            uploadJob.FileTransferred -= OnUploadFileTransferred;
            uploadJob.Error           -= OnUploadError;


            if (raiseException)
            {
                throw new InvalidOperationException();
            }
        }
Пример #2
0
		public void DownloadJobTest()
		{
			using var tempRoot = new TemporaryDirectory();
			DirectoryInfo remoteRoot; remoteRoot = tempRoot.CreateSubDirectory(nameof(remoteRoot));
			DirectoryInfo localDirectory; localDirectory = tempRoot.CreateSubDirectory(nameof(localDirectory));

			var allFileInfos = new[]
			{
				tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 1 * TemporaryDirectory.OneMebibyte),
				tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 2 * TemporaryDirectory.OneMebibyte),
				tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 3 * TemporaryDirectory.OneMebibyte),
				tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 4 * TemporaryDirectory.OneMebibyte),
				tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 5 * TemporaryDirectory.OneMebibyte)
			};

			var allFilesTotalSize = allFileInfos.Select(fi => fi.Length).Sum();
			var allFilesToDownload = allFileInfos.Select(fi => fi.Name).ToArray();


			var raiseException = false;
			AutoResetEvent autoReset;
			
			// Local method because of local vars.
			void OnDownloadCompleted(object s, BackgroundCopyJobEventArgs e)
			{
				DownloadCompleted(e, autoReset, allFilesToDownload.Length, allFilesTotalSize);
			}


			// Create a download job.
			using var downloadJob = BackgroundCopyManager.Jobs.Add($"{nameof(remoteRoot)} download");

			using (autoReset = new AutoResetEvent(false))
			{
				// Set job properties.
				downloadJob.Credentials.Add(BackgroundCopyJobCredentialScheme.Digest, BackgroundCopyJobCredentialTarget.Proxy, "user", "mypwd");
				downloadJob.CustomHeaders = new WebHeaderCollection() { "A1:Test", "A2:Prova" };
				downloadJob.MinimumNotificationInterval = TimeSpan.FromSeconds(1);


				// Set event handlers for job, these are weak references.
				downloadJob.Error += OnDownloadError;
				downloadJob.FileTransferred += OnDownloadFileTransferred;
				downloadJob.Completed += OnDownloadCompleted;



				// Add download file information.
				downloadJob.Files.AddRange(remoteRoot.FullName, localDirectory.FullName, allFilesToDownload);

				// Start (resume) the job.
				downloadJob.Resume();


				// Block thread and wait.
				raiseException = !autoReset.WaitOne(TimeSpan.FromSeconds(10));
			}


			// Remove weak references to prevent memory leak.
			downloadJob.Completed -= OnDownloadCompleted;
			downloadJob.FileTransferred -= OnDownloadFileTransferred;
			downloadJob.Error -= OnDownloadError;


			if (raiseException)
				throw new InvalidOperationException();
		}