private readonly Queue <ICleaningRobotCommand> _commandQueue = new Queue <ICleaningRobotCommand>(); // Command queue

        /// <summary>
        /// Constructor
        /// </summary>
        public CleaningRobotBackOffStrategy(
            ICleaningRobotCommand turnLeftCommand,
            ICleaningRobotCommand turnRightCommand,
            ICleaningRobotCommand advanceCommand,
            ICleaningRobotCommand backCommand,
            ICleaningRobotCommand cleanCommand
            )
        {
            _turnLeftCommand  = turnLeftCommand;
            _turnRightCommand = turnRightCommand;
            _advanceCommand   = advanceCommand;
            _backCommand      = backCommand;
            _cleanCommand     = cleanCommand;
        }
예제 #2
0
        private readonly Queue <ICleaningRobotCommand> _commandQueue = new Queue <ICleaningRobotCommand>(); // Command queue

        /// <summary>
        /// Constructor
        /// </summary>
        public CleaningRobotResumableStrategy(
            ICleaningRobotCommand turnLeftCommand,
            ICleaningRobotCommand turnRightCommand,
            ICleaningRobotCommand advanceCommand,
            ICleaningRobotCommand cleanCommand,
            ICleaningRobotStrategySerializer serializer
            )
        {
            _turnLeftCommand  = turnLeftCommand;
            _turnRightCommand = turnRightCommand;
            _advanceCommand   = advanceCommand;
            _cleanCommand     = cleanCommand;
            _serializer       = serializer;
        }
        // Processing command queue
        private CleaningRobotActionResult ProcessCommandQueue()
        {
            CleaningRobotActionResult result = CleaningRobotActionResult.Success;

            while (_commandQueue.Count > 0)
            {
                ICleaningRobotCommand command = _commandQueue.Dequeue();
                result = command.Run();
                if (result != CleaningRobotActionResult.Success)
                {
                    break;
                }
            }

            return(result);
        }
예제 #4
0
 public void Setup()
 {
     _mapSerializer      = new RoomMapJsonSerializer();
     _map                = new RoombaMap(_mapSerializer);
     _robotSerializer    = new CleaningRobotJsonSerializer();
     _robot              = new RoombaRobot(_map, _robotSerializer);
     _strategySerializer = new CleaningRobotStrategyJsonSerializer();
     _trCommand          = new CleaningRobotTurnRightCommand(_robot);
     _tlCommand          = new CleaningRobotTurnLeftCommand(_robot);
     _aCommand           = new CleaningRobotAdvanceCommand(_robot);
     _bCommand           = new CleaningRobotBackCommand(_robot);
     _cCommand           = new CleaningRobotCleanCommand(_robot);
     _givenStrategy      = new CleaningRobotResumableStrategy(_tlCommand, _trCommand, _aCommand, _cCommand, _strategySerializer);
     _backOffStrategy    = new CleaningRobotBackOffStrategy(_tlCommand, _trCommand, _aCommand, _bCommand, _cCommand);
     _robotController    = new RoombaRobotController(_map, _robot, _givenStrategy, _backOffStrategy);
 }
예제 #5
0
        /// <summary>
        /// Load strategy data from file
        /// </summary>
        public void Load(string inputFileName)
        {
            // Loading raw data
            _data = _serializer.Deserialize(inputFileName);

            // Enqueuing commands
            _commandQueue.Clear();
            foreach (var str in _data)
            {
                ICleaningRobotCommand command = null;

                // Defining commands
                switch (str)
                {
                case "TL":
                    command = _turnLeftCommand;
                    break;

                case "TR":
                    command = _turnRightCommand;
                    break;

                case "A":
                    command = _advanceCommand;
                    break;

                case "C":
                    command = _cleanCommand;
                    break;
                }

                if (command != null)
                {
                    _commandQueue.Enqueue(command);
                }
            }
        }