Пример #1
0
        /// <summary>
        /// 构造函数.
        /// </summary>
        public Elevator(int maxFloor, int minFloor)
        {
            // 设置最高、最低楼层.
            MaxFloor = maxFloor;
            MinFloor = minFloor;

            // 默认状态 = 待机.
            RunningStatus = ElevatorRunningStatus.Ready;


            // 初始情况下, 电梯处于  底楼状态.
            Status = new ElevatorStatusIsBottom()
            {
                ElevatorData = this,
            };
        }
Пример #2
0
        /// <summary>
        /// 获取 最接近当前楼层的 一个命令.
        /// </summary>
        /// <param name="direction"></param>
        /// <returns></returns>
        private ElevatorCommand GetNearestCommand(ElevatorRunningStatus status)
        {
            if (logger.IsDebugEnabled)
            {
                logger.DebugFormat("GetNearestCommand -- 获取最接近当前楼层的一个命令:方向= {0}", status);
            }

            if (status == ElevatorRunningStatus.Up
                || status == ElevatorRunningStatus.Ready)
            {

                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand --电梯正在向上运行.查询目前还有哪些楼层, 要在向上的过程中,停下来的。");
                }

                //  电梯正在向上运行.
                // 查询目前还有哪些楼层, 要在向上的过程中,停下来的。
                var todoQuery =
                    from data in todoList
                    where
                        // 停靠楼层大于当前楼层.
                        data.StopAtFloorNum >= this.CurrentFloor
                        // 向上停靠.
                        && data.StopWhen == ElevatorRunningStatus.Up
                        // 按楼层从小到大排序.
                    orderby data.StopAtFloorNum
                    select data;

                ElevatorCommand result = todoQuery.FirstOrDefault();

                if (result == null)
                {
                    if (logger.IsDebugEnabled)
                    {
                        logger.DebugFormat("GetNearestCommand --不存在正在向上停的楼层, 要在向下楼层进行查询。");
                    }

                    todoQuery =
                        from data in todoList
                        where
                            // 停靠楼层大于当前楼层.
                            data.StopAtFloorNum >= this.CurrentFloor
                            // 向下停靠.
                            && data.StopWhen == ElevatorRunningStatus.Down
                            // 按楼层从大到小排序.
                        orderby data.StopAtFloorNum descending
                        select data;

                    // 也就是要迁移到 最上面那个  按“向下”的按钮.
                    result = todoQuery.FirstOrDefault();
                }

                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand -Up-返回结果:{0}", result);
                }

                return result;
            }

            if (status == ElevatorRunningStatus.Down)
            {
                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand --电梯正在向下运行.查询目前还有哪些楼层, 要在向下的过程中,停下来的。");
                }

                //  电梯正在向下运行.
                // 查询目前还有哪些楼层, 要在向下的过程中,停下来的。
                var todoQuery =
                    from data in todoList
                    where
                        // 停靠楼层小于当前楼层.
                        data.StopAtFloorNum <= this.CurrentFloor
                        // 向下停靠.
                        && data.StopWhen == ElevatorRunningStatus.Down
                        // 按楼层从大到小排序
                    orderby data.StopAtFloorNum descending
                    select data;

                ElevatorCommand result = todoQuery.FirstOrDefault();

                if (result == null)
                {
                    if (logger.IsDebugEnabled)
                    {
                        logger.DebugFormat("GetNearestCommand --不存在正在向下停的楼层, 要在向上楼层进行查询。");
                    }

                    todoQuery =
                       from data in todoList
                       where
                            // 停靠楼层小于当前楼层.
                            data.StopAtFloorNum <= this.CurrentFloor
                            // 向上停靠.
                            && data.StopWhen == ElevatorRunningStatus.Up
                            // 按楼层从小到大排序
                       orderby data.StopAtFloorNum
                       select data;

                    // 也就是要迁移到 最下面那个  按“向上”的按钮.
                    result = todoQuery.FirstOrDefault();
                }

                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand -Down-返回结果:{0}", result);
                }

                return result;
            }

            // 其他未知状况下, 简单返回 null
            return null;
        }
Пример #3
0
        /// <summary>
        /// 获取 最接近当前楼层的 一个命令.
        /// </summary>
        /// <param name="direction"></param>
        /// <returns></returns>
        private ElevatorCommand GetNearestCommand(ElevatorRunningStatus status)
        {
            if (logger.IsDebugEnabled)
            {
                logger.DebugFormat("GetNearestCommand -- 获取最接近当前楼层的一个命令:方向= {0}", status);
            }

            if (status == ElevatorRunningStatus.Up ||
                status == ElevatorRunningStatus.Ready)
            {
                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand --电梯正在向上运行.查询目前还有哪些楼层, 要在向上的过程中,停下来的。");
                }

                //  电梯正在向上运行.
                // 查询目前还有哪些楼层, 要在向上的过程中,停下来的。
                var todoQuery =
                    from data in todoList
                    where
                    // 停靠楼层大于当前楼层.
                    data.StopAtFloorNum >= this.CurrentFloor
                    // 向上停靠.
                    && data.StopWhen == ElevatorRunningStatus.Up
                    // 按楼层从小到大排序.
                    orderby data.StopAtFloorNum
                    select data;

                ElevatorCommand result = todoQuery.FirstOrDefault();


                if (result == null)
                {
                    if (logger.IsDebugEnabled)
                    {
                        logger.DebugFormat("GetNearestCommand --不存在正在向上停的楼层, 要在向下楼层进行查询。");
                    }

                    todoQuery =
                        from data in todoList
                        where
                        // 停靠楼层大于当前楼层.
                        data.StopAtFloorNum >= this.CurrentFloor
                        // 向下停靠.
                        && data.StopWhen == ElevatorRunningStatus.Down
                        // 按楼层从大到小排序.
                        orderby data.StopAtFloorNum descending
                        select data;

                    // 也就是要迁移到 最上面那个  按“向下”的按钮.
                    result = todoQuery.FirstOrDefault();
                }



                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand -Up-返回结果:{0}", result);
                }

                return(result);
            }

            if (status == ElevatorRunningStatus.Down)
            {
                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand --电梯正在向下运行.查询目前还有哪些楼层, 要在向下的过程中,停下来的。");
                }

                //  电梯正在向下运行.
                // 查询目前还有哪些楼层, 要在向下的过程中,停下来的。
                var todoQuery =
                    from data in todoList
                    where
                    // 停靠楼层小于当前楼层.
                    data.StopAtFloorNum <= this.CurrentFloor
                    // 向下停靠.
                    && data.StopWhen == ElevatorRunningStatus.Down
                    // 按楼层从大到小排序
                    orderby data.StopAtFloorNum descending
                    select data;

                ElevatorCommand result = todoQuery.FirstOrDefault();

                if (result == null)
                {
                    if (logger.IsDebugEnabled)
                    {
                        logger.DebugFormat("GetNearestCommand --不存在正在向下停的楼层, 要在向上楼层进行查询。");
                    }

                    todoQuery =
                        from data in todoList
                        where
                        // 停靠楼层小于当前楼层.
                        data.StopAtFloorNum <= this.CurrentFloor
                        // 向上停靠.
                        && data.StopWhen == ElevatorRunningStatus.Up
                        // 按楼层从小到大排序
                        orderby data.StopAtFloorNum
                        select data;

                    // 也就是要迁移到 最下面那个  按“向上”的按钮.
                    result = todoQuery.FirstOrDefault();
                }


                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("GetNearestCommand -Down-返回结果:{0}", result);
                }

                return(result);
            }

            // 其他未知状况下, 简单返回 null
            return(null);
        }