Пример #1
0
        public static TaskDatabase GetDatabaseByUser(LocalDiskUser user)
        {
            if (List.Any(v => v.Name == user.Name))
            {
                return(List.FirstOrDefault(v => v.Name == user.Name));
            }
            var db = new TaskDatabase(user);

            List.Add(db);
            return(db);
        }
Пример #2
0
 public TaskManager(IUnityContainer container, LocalDiskUser user) : base(container)
 {
     _user       = user;
     _dataFolder = Path.Combine(Directory.GetCurrentDirectory(), "Users", user.Name);
     _database   = TaskDatabase.GetDatabaseByUser(user);
     _runing     = true;
     new Thread(async() =>
     {
         while (_runing)
         {
             Thread.Sleep(300);
             if (_downloadingTasks.Count(v => v.DownloadState == DownloadStateEnum.Downloading) < _user.ParallelTaskNumber)
             {
                 //如果正在下载的文件数量与已经请求的文件数量相同
                 if (_database.GetDownloadingTask().Length == _downloadingTasks.Count)
                 {
                     var result = await _database.Next();
                     if (result == null)
                     {
                         continue;
                     }
                     if (result.ErrorCode != 0)
                     {
                         if (result.ErrorCode == 209)
                         {
                             //没有新的任务了
                         }
                         //出现错误时的处理
                         continue;
                     }
                     //Created -> Waiting
                     EventAggregator.GetEvent <DownloadStateChangedEvent>().Publish(new DownloadStateChangedEventArgs(_database.GetFileIdByPath(result.Info.DownloadPath), DownloadStateEnum.Created, DownloadStateEnum.Waiting));
                     AddDownloadingTask(result.Info);
                     continue;
                 }
                 var data =
                     _database.GetDownloadingTask()
                     .FirstOrDefault(v => _downloadingTasks.All(v2 => v.DownloadPath != v2.DownloadPath));
                 if (data != null)
                 {
                     AddDownloadingTask(data.Info);
                 }
             }
         }
     })
     {
         IsBackground = true
     }.Start();
 }
Пример #3
0
 public static TaskManager GetTaskManagerByLocalDiskUser(IUnityContainer container, LocalDiskUser user)
 {
     if (!Manager.ContainsKey(user.Name))
     {
         //Manager.Add(user.Name, new TaskManager(user));
         Manager.Add(user.Name, container.Resolve <TaskManager>(new DependencyOverride <LocalDiskUser>(user)));
     }
     return(Manager[user.Name]);
 }
Пример #4
0
 private TaskDatabase(LocalDiskUser user)
 {
     _user = user;
     Reload();
 }