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); }
public static void AddTask(ServerTask task) { task.PriorityChanged += OnTaskPriorityChanged; task.StatusChanged += OnTaskStatusChanged; Tasks.Add(task); TasksListChanged?.Invoke(Tasks); }
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); }
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() )); }
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; } }
// 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); }
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); }
public void SuspendLowerPriorityTask(ServerTask task) { SuspendedTask = task; SuspendedTask.semaphore.WaitOne(); SuspendedTask.ChangeStatus(TaskStatus.Suspended); }
private static void OnTaskPriorityChanged(ServerTask serverTask) { TasksListChanged?.Invoke(Tasks); }
public static void RemoveTask(ServerTask task) { Tasks.Remove(task); TasksListChanged?.Invoke(Tasks); }