Пример #1
0
        private void OnDownloadProgressChanged(DownloadClient <DownloadItem> sender, DownloadProgressChangedArgs e, DownloadItem userToken)
        {
            var item = new FileDownloadProgressChangedArgs();

            item.ReceivedBytes = e.ReceivedBytes;
            item.ClientId      = sender.ClientId;

            item.TotalBytesToBeRecieved = e.TotalBytesToBeRecieved;
            item.ProgressPercentage     = e.ProgressPercentage;
            item.DownloadItem           = userToken;
            item.DownloadSpeed          = e.DownloadSpeed;
            RaiseDownloadProgressChanged(item);
        }
Пример #2
0
        public async void OnDownloadCompleted(DownloadClient <DownloadItem> sender, DownloadCompletedArgs e, DownloadItem userToken)
        {
            _clients.Add(sender); //클라이언트 큐에 추가


            Downloaded++; //다운로드된 아이템 추가(DownloadFileAsync는 비동기-동기화를 쓰기때문에 InterLocked를 쓸 필요가 없다.)

            DownloadItem di = userToken;
            FileDownloadCompletedArgs args = new FileDownloadCompletedArgs();

            args.DownloadedItem     = di;
            args.DownloadQueue      = _filequeue.Count;
            args.ClientId           = sender.ClientId;
            args.Downloaded         = Downloaded;
            args.DownloadToComplete = DownloadToComplete;
            args.ProgressPercentage = Math.Round((double)(100 * Downloaded) / DownloadToComplete);

            if (di.UseFileIntegrityCheck) // 파일 무결성 검사
            {
                args.DownloadedFileHash = await FileHashing.GetFileHashAsync(di.Path, di.HashType);

                if (di.FileHash != args.DownloadedFileHash)
                {
                    args.FileIntegrity = false;
                }
                else
                {
                    args.FileIntegrity = true;
                }
            }


            if (di.UseAutoRedownloadWhenFileIsCracked) //파일 깨졌다면 재다운로드
            {
                if (!args.FileIntegrity)
                {
                    if (di.UseTempPath)
                    {
                        File.Delete(di.TempPath);
                    }
                    else
                    {
                        File.Delete(di.Path);
                    }
                    EnqueueItem(userToken);
                }
            }

            if (di.UseTempPath)
            {
                string path = Path.GetDirectoryName(di.Path);
                if (!System.IO.Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                string temppath = Path.GetDirectoryName(di.TempPath);
                if (!System.IO.Directory.Exists(temppath))
                {
                    Directory.CreateDirectory(temppath);
                }
                File.Delete(di.Path);
                File.Move(di.TempPath, di.Path);
            }
            RaiseDownloadCompleted(args);
            if (Downloaded == DownloadToComplete)
            {
                RaiseAllDownloadCompleted(new AllFileDownloadCompletedArgs());
            }
        }