Beispiel #1
0
        private void addSendToTemporaryWorkerMenuItem()
        {
            jobQueue.AddMenuItem("Run in new temporary worker", null, new MultiJobHandler(
                                     delegate(List <TaggedJob> jobs)
            {
                // find a good name
                int number = 0;
                string name;
                do
                {
                    number++;
                    name = "Temporary worker " + number;
                } while (workers.ContainsKey(name));
                JobWorker w = NewWorker(name, false);

                foreach (TaggedJob j in jobs)
                {
                    ReleaseJob(j);
                    w.AddJob(j);
                }
                this.refresh();
                w.Mode = JobWorkerMode.CloseOnLocalListCompleted;
                w.StartEncoding(true);
            }));
        }
Beispiel #2
0
 internal void ShutDown(JobWorker w)
 {
     workers.Remove(w.Name);
     if (w.Visible)
     {
         w.Close();
     }
     summary.Remove(w.Name);
 }
Beispiel #3
0
 internal void ShutDown(JobWorker w)
 {
     workers.Remove(w.Name);
     if (w.Visible)
     {
         Util.ThreadSafeRun(w, delegate { w.Close(); });
     }
     summary.Remove(w.Name);
 }
Beispiel #4
0
        private JobWorker NewWorker(string name, bool show)
        {
            Debug.Assert(!workers.ContainsKey(name));

            JobWorker w = new JobWorker(mainForm);

            w.Name = name;
            w.WorkerFinishedJobs += new EventHandler(WorkerFinishedJobs);
            workers.Add(w.Name, w);
            summary.Add(w);
            mainForm.RegisterForm(w);
            return(w);
        }
Beispiel #5
0
        private void loadJobLists()
        {
            string path = Path.Combine(mainForm.MeGUIPath, "joblists.xml");

            JobListSerializer s = Util.XmlDeserializeOrDefault <JobListSerializer>(path);

            jobQueue.JobList = toJobList(s.mainJobList);

            foreach (Pair <string, List <string> > p in s.workersAndTheirJobLists)
            {
                JobWorkerMode mode = JobWorkerMode.RequestNewJobs;
                bool          bIsTemporaryWorker = false;
                if (p.fst.StartsWith("Temporary worker "))
                {
                    if (p.snd.Count == 0)
                    {
                        continue;
                    }
                    mode = JobWorkerMode.CloseOnLocalListCompleted;
                    bIsTemporaryWorker = true;
                }
                JobWorker w = NewWorker(p.fst, false);
                w.Mode = mode;
                w.IsTemporaryWorker = bIsTemporaryWorker;

                // check if there are any unassigned jobs which belongs to this worker
                foreach (TaggedJob oJob in allJobs.Values)
                {
                    if (w.Name.Equals(oJob.OwningWorker) && !p.snd.Contains(oJob.Name))
                    {
                        p.snd.Add(oJob.Name);
                    }
                }

                IEnumerable <TaggedJob> list = toJobList(p.snd);
                foreach (TaggedJob j in list)
                {
                    w.AddJob(j);
                }
            }

            // check if there are any assigned jobs which have no existing worker
            foreach (TaggedJob oJob in allJobs.Values)
            {
                if (oJob.OwningWorker != null && !workers.ContainsKey(oJob.OwningWorker))
                {
                    oJob.OwningWorker = null;
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// created a new worker
        /// </summary>
        /// <param name="name">prefix of the worker name</param>
        /// <returns>the new worker</returns>
        private JobWorker NewWorker(string prefix)
        {
            int    num = 0;
            string name;

            do
            {
                name = prefix + " " + ++num;
            } while (workers.ContainsKey(name));

            JobWorker w = new JobWorker(mainForm);

            w.Name = name;
            w.WorkerFinishedJobs += new EventHandler(WorkerFinishedJobs);
            workers.Add(w.Name, w);
            summary.Add(w);
            return(w);
        }
Beispiel #7
0
        private void loadJobLists()
        {
            string path = Path.Combine(mainForm.MeGUIPath, "joblists.xml");

            JobListSerializer s = Util.XmlDeserializeOrDefault <JobListSerializer>(path);

            jobQueue.JobList = toJobList(s.mainJobList);

            foreach (Pair <string, List <string> > p in s.workersAndTheirJobLists)
            {
                JobWorker w = NewWorker(p.fst, false);
                IEnumerable <TaggedJob> list = toJobList(p.snd);
                w.Jobs = list;
                foreach (TaggedJob j in list)
                {
                    j.OwningWorker = w.Name;
                }
            }
        }
Beispiel #8
0
        internal void RequestNewWorker()
        {
            string name = InputBox.Show("Please enter a name for this new worker", "Please enter a name", freeWorkerName());

            if (string.IsNullOrEmpty(name))
            {
                return;
            }
            if (workers.ContainsKey(name))
            {
                MessageBox.Show("A worker by this name already exists. Adding worker failed", "Adding worker failed",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            JobWorker w = NewWorker(name, true);

            w.StartEncoding(true);
        }
Beispiel #9
0
        /// <summary>
        /// adds the "run in new temporary worker" menu item
        /// </summary>
        private void AddSendToTemporaryWorkerMenuItem()
        {
            globalJobQueue.AddMenuItem("Run in new temporary worker", null, new MultiJobHandler(
                                           delegate(List <TaggedJob> jobs)
            {
                JobWorker w = NewWorker("Temporary worker");

                foreach (TaggedJob j in jobs)
                {
                    if (j.Status != JobStatus.WAITING)
                    {
                        continue;
                    }
                    AssignJob(j, w.Name);
                }
                RefreshStatus();
                w.Mode = JobWorkerMode.CloseOnLocalListCompleted;
                w.IsTemporaryWorker = true;
                w.StartEncoding(true);
            }));
        }
Beispiel #10
0
        internal void RenameWorker(string name, string value)
        {
            if (workers.ContainsKey(value))
            {
                throw new NameTakenException(value);
            }

            JobWorker w = workers[name];

            w.Name = value;
            workers.Remove(name);
            workers[value] = w;
            summary.Rename(name, value);

            foreach (TaggedJob job in allJobs.Values)
            {
                if (name == job.OwningWorker)
                {
                    job.OwningWorker = value;
                }
            }
        }
Beispiel #11
0
 public SendToWorkerThunk(JobWorker w, JobControl c)
 {
     this.c = c;
     this.w = w;
 }
Beispiel #12
0
 public void ShutDown(JobWorker w)
 {
     workers.Remove(w.Name);
     summary.Remove(w.Name);
 }