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; }
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); }
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); }
/// <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); } } }