/// <summary> /// 添加一个 内部的命令. /// </summary> /// <param name="cmd"></param> public void AddNewInsideCommand(CommandInside cmd) { if (logger.IsInfoEnabled) { logger.InfoFormat("电梯内部的人,按了一个前往{0}层的按钮!", cmd.GotoFloorNum); } if (cmd.CommandType == CommandInside.CommandInsideType.Goto) { // 如果内部命令是 “前往指定的楼层” // 那么判断, 该楼层是否已经在列表中了. var query = from data in todoList where data.StopAtFloorNum == cmd.GotoFloorNum select data; if (query.Count() == 0) { // 楼层在 todolist 中不存在,需要加入到列表中. // 判断 目标楼层 与 当前楼层之间的 区间。 // 从而设置 向上停 或者 向下停. if (this.CurrentFloor > cmd.GotoFloorNum) { // 当前楼层比 目标楼层高. // 需要向下的时候, 停电梯. todoList.Add(new ElevatorCommand() { StopWhen = ElevatorRunningStatus.Down, StopAtFloorNum = cmd.GotoFloorNum }); } else if (this.CurrentFloor < cmd.GotoFloorNum) { // 当前楼层比 目标楼层低. // 需要向上的时候, 停电梯. todoList.Add(new ElevatorCommand() { StopWhen = ElevatorRunningStatus.Down, StopAtFloorNum = cmd.GotoFloorNum }); } else { // 这个也太着急了, 有急刹车的趋势啊. todoList.Add(new ElevatorCommand() { StopWhen = this.RunningStatus, StopAtFloorNum = cmd.GotoFloorNum }); } } } // 基本状态切换. SwitchRunningStatus(); }
/// <summary> /// 楼层按钮事件处理. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGoto1_Click(object sender, EventArgs e) { // 取得按钮对象. Button btn = sender as Button; btn.BackColor = Color.Orange ; // 取得按钮上的数字. int gotoNum = Convert.ToInt32(btn.Text); // 构造命令 CommandInside cmd = new CommandInside() { // 前往指定楼层. CommandType = CommandInside.CommandInsideType.Goto, GotoFloorNum = gotoNum }; // 加入内部命令. this.myElevatorManager.AddNewInsideCommand(cmd); }
/// <summary> /// 电梯内部 按了指定楼层的按钮. /// </summary> /// <param name="cmd"></param> public void AddNewInsideCommand(CommandInside cmd) { this.myElevator.AddNewInsideCommand(cmd); }