Example #1
0
        public static void Test()
        {
            EmbedScheduler scheduler = new EmbedScheduler();

            scheduler.Register(new Resource()
            {
                Name = "STAR", Count = 1, Color = Color.Blue
            });
            scheduler.Register(new Resource()
            {
                Name = "iSWAP", Count = 1, Color = Color.Red
            });
            scheduler.Register(new Resource()
            {
                Name = "Incubator", Count = 10, Color = Color.Green
            });
            scheduler.Register(new Resource()
            {
                Name = "Shaker", Count = 1, Color = Color.Yellow
            });
            scheduler.Register(new Resource()
            {
                Name = "Reader", Count = 1, Color = Color.Orange
            });
            IRuntimeResource reader    = scheduler.GetResource("Reader");
            IRuntimeResource incubator = scheduler.GetResource("Incubator");

            //reader.DisableUnit(1);
            incubator.DisableUnit(3);

            scheduler.Activate(new Task1()
            {
                Name = "Assay1_1"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_2"
            }, new Dictionary <int, TaskRelation>()
            {
                { 1, TaskRelation.AfterTaskEnd }
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_3"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_4"
            }, new Dictionary <int, TaskRelation>()
            {
                { 3, TaskRelation.AfterTaskEnd }
            });
            scheduler.Activate(new Task4()
            {
                Name = "Assay4_5"
            }, new Dictionary <int, TaskRelation>()
            {
                { 1, TaskRelation.BeforeRunEnd }
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_6"
            });
            scheduler.Activate(new Task5()
            {
                Name = "Assay5_7"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_8"
            }, new Dictionary <int, TaskRelation>()
            {
                { 1, TaskRelation.AfterTaskEnd }
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_9"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_10"
            }, new Dictionary <int, TaskRelation>()
            {
                { 9, TaskRelation.AfterTaskStart }
            });
            scheduler.Activate(new Task4()
            {
                Name = "Assay4_11"
            }, new Dictionary <int, TaskRelation>()
            {
                { 9, TaskRelation.AfterTaskStart }
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_12"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_13"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_14"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_15"
            });
            scheduler.Activate(new Task4()
            {
                Name = "Assay4_16"
            });
            scheduler.Activate(new Task5()
            {
                Name = "Assay5_17"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_18"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_19"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_20"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_21"
            });
            scheduler.Activate(new Task5()
            {
                Name = "Assay5_22"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_23"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_24"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_25"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_26"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_27"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_28"
            });
            scheduler.Activate(new Task5()
            {
                Name = "Assay5_29"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_30"
            });;
            scheduler.Activate(new Task4()
            {
                Name = "Assay4_31"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_32"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_33"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay4_34"
            });
            scheduler.Activate(new Task2()
            {
                Name = "Assay2_35"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_36"
            });
            scheduler.Activate(new Task5()
            {
                Name = "Assay5_37"
            });
            scheduler.Activate(new Task3()
            {
                Name = "Assay3_38"
            });
            scheduler.Activate(new Task1()
            {
                Name = "Assay1_39"
            });                                                    /*
                                                                    */
            DateTime d = DateTime.Now;

            scheduler.Schedule();
            Console.WriteLine("time used" + new TimeSpan(DateTime.Now.Ticks - d.Ticks).TotalMilliseconds);

            scheduler.Run();


            /*
             * ScheduleTask t = scheduler.GetTask(3) as ScheduleTask;
             * Console.WriteLine("detail for task" + t.ID);
             * for (int i = 0; i < t.Activities.Length; i++)
             * {
             *  ScheduleActivity ac = t.Activities[i];
             *  Console.WriteLine("activity {0} start={1} duration={2}", ac.Name, ac.PlannedStart, ac.PlannedDuration);
             *  for (int j = 0; j < ac.UnitReservations.Count; j++)
             *  {
             *      UnitReservation ur = ac.UnitReservations[j].Value;
             *      LinkedListNode<UnitReservation> node = ac.UnitReservations[j];
             *      Console.WriteLine("    resource {0} unit {1} nextAct={4}", ur.Resource.Name, ur.Uint,
             *          ur.PlannedStart, ur.PlannedDuration, node.Previous != null ? node.Previous.Value.Activity.Name + " of task " + node.Previous.Value.Activity.Task.ID : "non");
             *  }
             * }
             */
            //scheduler.Run();

            /*
             * ScheduleTask t = scheduler.GetTask(1) as ScheduleTask;
             * t.Activities[0].Duration -= 10;
             * DateTime d2 = DateTime.Now;
             * scheduler.Schedule();
             * Console.WriteLine("time used" + new TimeSpan(DateTime.Now.Ticks - d.Ticks).TotalMilliseconds);
             * Bitmap map2 = scheduler.DrawGannt();
             * //TestForm form2 = new TestForm();
             * //form2.pictureBox1.Image = map2;
             * //form2.Show();
             */
        }
Example #2
0
        void PaintResourcePanel(object sender, PaintEventArgs e)
        {
            if (tasks == null || resources == null)
            {
                return;
            }
            scheduler.Lock();
            try
            {
                Dictionary <int, IRuntimeTask> id2task = new Dictionary <int, IRuntimeTask>();

                foreach (IRuntimeTask t in tasks)
                {
                    id2task[t.ID] = t;
                }
                Graphics g = e.Graphics;

                int count = 0;
                Dictionary <string, int> resouceColumns        = new Dictionary <string, int>();
                Dictionary <string, IRuntimeResource> name2res = new Dictionary <string, IRuntimeResource>();
                //draw resource lable
                for (int i = 0; i < resources.Length; i++)
                {
                    name2res[resources[i].Name] = resources[i];
                    if (resources[i].Count == 1)
                    {
                        count++;
                        resouceColumns[resources[i].Name + "_0"] = count - 1;
                    }
                    else
                    {
                        for (int j = 0; j < resources[i].Count; j++)
                        {
                            count++;
                            string name = resources[i].Name + "-" + (j + 1);
                            if (!resources[i].IsUnitEnabled(j))
                            {
                                name = name + "(disabled)";
                            }
                            resouceColumns[resources[i].Name + "_" + j] = count - 1;
                        }
                    }
                }

                for (int i = 0; i < tasks.Length; i++)
                {
                    if (!IsTaskOK(tasks[i]))
                    {
                        continue;
                    }
                    for (int j = 0; j < tasks[i].Activities.Length; j++)
                    {
                        IRuntimeActivity activity = tasks[i].Activities[j];

                        foreach (string key in activity.Reservations.Keys)
                        {
                            IRuntimeResource r     = name2res[key];
                            int[]            units = activity.Reservations[key];
                            for (int m = 0; m < units.Length; m++)
                            {
                                string nn = key + "_" + units[m];
                                if (units[m] >= 0 && resouceColumns.ContainsKey(nn))
                                {
                                    int rc = resouceColumns[nn];
                                    //draw activity resource reservation
                                    g.FillRectangle(new SolidBrush(r.Color), new RectangleF(activity.PlannedStart * ScaleFactor, rc * RowHeight, (activity.PlannedDuration * ScaleFactor), RowHeight - 1));

                                    if ((activity.PlannedDuration * ScaleFactor) > 1)
                                    {
                                        g.DrawString(activity.Name, SystemFonts.DefaultFont, Brushes.Black, new RectangleF(activity.PlannedStart * ScaleFactor, rc * RowHeight, (activity.PlannedDuration * ScaleFactor), RowHeight - 1));
                                    }
                                }
                            }
                        }
                    }
                }
                //draw current Line
                g.DrawLine(Pens.Red, scheduler.Current * scaleFactor, 0, scheduler.Current * scaleFactor, ResourcePanel.Height);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally{
                scheduler.Unlock();
            }
        }