Пример #1
0
        private static int AsessTaskPriority(ServerTask serverTask, int taskIndex)
        {
            // Initial priority rate
            int priority = 100;

            // Asessment by:
            // - account type
            if (serverTask.Account.IsPremium)
            {
                priority += 100;
            }

            // - performed operations
            priority -= serverTask.Account.PerformedOperations * 5;

            // - transfer size
            priority -= serverTask.Duration * 2;

            // - transfer total size
            priority -= (serverTask.Account.TransferTotalSize / Server.LoggedClients.Count) * 5;

            // - transfer progress
            priority += serverTask.Progress * 1;

            // - arrival order
            priority -= taskIndex * 1;

            return(priority);
        }
Пример #2
0
        public static void AddTask(ServerTask task)
        {
            task.PriorityChanged += OnTaskPriorityChanged;
            task.StatusChanged   += OnTaskStatusChanged;

            Tasks.Add(task);
            TasksListChanged?.Invoke(Tasks);
        }
Пример #3
0
        private static void OnTaskStatusChanged(ServerTask serverTask)
        {
            if (serverTask.Status == ServerTask.TaskStatus.Finished)
            {
                RemoveTask(serverTask);
            }

            var taskCopy = (ServerTask)serverTask.FlatCopy();

            TasksListChanged?.Invoke(Tasks);
            TasksStatusChanged?.Invoke(taskCopy);
            ClientListChanged?.Invoke(LoggedClients);
        }
Пример #4
0
 private void OnTaskStatusChanged(ServerTask serverTask)
 {
     UpdateLog(string.Format("Task status changed Client:{0} File:{1} Status:{2} Priority:{3} " +
                             "Running tasks:{4}/{5} Assigned tasks:{6}/{7}",
                             serverTask.Account.Name,
                             serverTask.FileName,
                             serverTask.Status.ToString(),
                             serverTask.Priority.ToString(),
                             Server.RunningTasksCount,
                             Configuration.MaxRunningThreads,
                             serverTask.Account.AssignedTasksCount.ToString(),
                             serverTask.Account.MaxTasksCount.ToString()
                             ));
 }
Пример #5
0
 private void UpdateTaskItem(ListViewItem item, ServerTask task)
 {
     item.SubItems[1].Text = task.Account.Name;
     item.SubItems[2].Text = task.Type.ToString();
     item.SubItems[3].Text = task.FileName;
     item.SubItems[4].Text = task.Status.ToString();
     item.SubItems[5].Text = task.Progress.ToString() + "%";
     item.SubItems[6].Text = task.Priority.ToString();
     if (item.SubItems[4].Text == ServerTask.TaskStatus.Running.ToString())
     {
         item.BackColor = Color.LightGreen;
     }
     else
     {
         item.BackColor = Color.White;
     }
 }
Пример #6
0
        // Download file from server to target directory.
        public void DownloadFile(Cookie cookie, string fileName)
        {
            var clientAccount = Server.LoggedClients.Where(c => c.Name == cookie.ClientName).ToArray()[0];

            var serverTask = new ServerTask(ServerTask.TaskType.Download)
            {
                Account         = clientAccount,
                FileName        = fileName,
                SourcePath      = Configuration.ServerDirectory + "\\" + cookie.ClientName + "\\" + fileName,
                DestinationPath = cookie.FolderPath + "\\" + fileName,
                Duration        = FileOperation.ParseFileName(fileName)
            };


            serverTask.Account.PerformedOperations++;
            serverTask.Account.TransferTotalSize += serverTask.Duration;

            Server.AddTask(serverTask);
        }
Пример #7
0
        private ListViewItem CreateTaskItem(ServerTask task)
        {
            var item = new ListViewItem(task.Id.ToString());

            item.Tag = task.Id;
            ListViewItem.ListViewSubItem[] subItems = new ListViewItem.ListViewSubItem[]
            {
                new ListViewItem.ListViewSubItem(item, task.Account.Name),
                new ListViewItem.ListViewSubItem(item, task.Type.ToString()),
                new ListViewItem.ListViewSubItem(item, task.FileName),
                new ListViewItem.ListViewSubItem(item, task.Status.ToString()),
                new ListViewItem.ListViewSubItem(item, task.Progress.ToString() + "%"),
                new ListViewItem.ListViewSubItem(item, task.Priority.ToString()),
            };
            item.SubItems.AddRange(subItems);
            if (item.SubItems[4].Text == ServerTask.TaskStatus.Running.ToString())
            {
                item.BackColor = Color.LightGreen;
            }
            return(item);
        }
Пример #8
0
 public void SuspendLowerPriorityTask(ServerTask task)
 {
     SuspendedTask = task;
     SuspendedTask.semaphore.WaitOne();
     SuspendedTask.ChangeStatus(TaskStatus.Suspended);
 }
Пример #9
0
 private static void OnTaskPriorityChanged(ServerTask serverTask)
 {
     TasksListChanged?.Invoke(Tasks);
 }
Пример #10
0
 public static void RemoveTask(ServerTask task)
 {
     Tasks.Remove(task);
     TasksListChanged?.Invoke(Tasks);
 }