示例#1
0
        /// <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);
        }
示例#3
0
        /// <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="cmd"></param>
 public void AddNewInsideCommand(CommandInside cmd)
 {
     this.myElevator.AddNewInsideCommand(cmd);
 }
示例#5
0
 /// <summary>
 /// 电梯内部 按了指定楼层的按钮.
 /// </summary>
 /// <param name="cmd"></param>
 public void AddNewInsideCommand(CommandInside cmd)
 {
     this.myElevator.AddNewInsideCommand(cmd);
 }