private void ChooseFloor(Floor floor, Lift lift) { if (mDir == Dir.Up) mNext = random.Next(floor.mNum + 1, Program.NUMFLOORS); if (mDir == Dir.Down) mNext = random.Next(0, floor.mNum); lift.Stop(mNext); }
public Cabin(int num, Lift lift, List<Floor> floors) { this.mNum = num; this.mLift = lift; this.mFloors = floors; join.When(ProcessMessage).Do(CabinLoop); }
public Floor(List<Lift> lifts, FloorNum floor) { this.mLifts = lifts; this.mNum = floor; join.Initialize(out Up); join.Initialize(out Down); join.Initialize(out Arrived); join.Initialize(out PersonArrived); join.Initialize(out PersonDeparted); join.When(ProcessMessage).And(Up).Do(delegate { mReservedUp = Reserve(Dir.Up); UnderViewLock(delegate { mUpButtonBackColor = Color.Yellow; }); }); join.When(ProcessMessage).And(Down).Do(delegate { mReservedDown = Reserve(Dir.Down); UnderViewLock(delegate { mDownButtonBackColor = Color.Yellow; }); }); join.When(ProcessMessage).And(Arrived).Do(delegate(Lift lift) { if (mReservedUp == lift) { mReservedUp = null; UnderViewLock(delegate { mUpButtonBackColor = Color.Silver; }); foreach (Person p in mPeople) p.Arrived(Helpers.pair(lift, Dir.Up)); }; if (mReservedDown == lift) { mReservedDown = null; UnderViewLock(delegate { mDownButtonBackColor = Color.Silver; }); foreach (Person p in mPeople) p.Arrived(Helpers.pair(lift, Dir.Down)); }; }); join.When(ProcessMessage).And(PersonArrived).Do(delegate(Pair<Person, Ack> p) { mPeople.Add(p.Fst); p.Snd.Send(); }); join.When(ProcessMessage).And(PersonDeparted).Do(delegate(Person person) { mPeople.Remove(person); }); Font Wingdings = new System.Drawing.Font("Wingdings", 10.0F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2))); Button up = mUpButton; up.Location = new Point(Program.COLUMNWIDTH, (Program.NUMFLOORS - mNum) * Program.COLUMNHEIGHT); up.Font = Wingdings; up.Text = "\x00F1"; up.Size = new Size(Program.COLUMNWIDTH / 2, Program.COLUMNHEIGHT); up.ForeColor = Color.Green; up.BackColor = Color.Silver; up.Click += new EventHandler(delegate { this.Up(); }); Button down = mDownButton; down.Location = new Point(Program.COLUMNWIDTH + Program.COLUMNWIDTH / 2 , (Program.NUMFLOORS - mNum) * Program.COLUMNHEIGHT); down.Text = "\x00F2"; down.Font = Wingdings; down.Size = new Size(Program.COLUMNWIDTH / 2, Program.COLUMNHEIGHT); down.ForeColor = Color.Red; down.BackColor = Color.Silver; down.Click += new EventHandler(delegate { this.Down(); }); }