public RobotCommandType Run(IRobot robot, List <string> commandList) { if (commandList == null || commandList.Count == 0) { throw new ArgumentException(BlankCommandError); } if (!char.TryParse(commandList[0].ToUpper(), out var commandChar)) { throw new ArgumentException(string.Format(CannotIdentityCommandError, commandList[0])); } if (!_robotCommandDictionary.ContainsKey((RobotCommandType)commandChar)) { throw new ArgumentException(string.Format(CannotIdentityCommandError, commandChar)); } var robotCommandType = (RobotCommandType)commandChar; if (robotCommandType == RobotCommandType.Quit) { return(robotCommandType); } var robotCommandEventArgs = new RobotCommandEventArgs(robot, commandList); _robotCommandDictionary[(RobotCommandType)commandChar].Execute(robotCommandEventArgs); return(robotCommandType); }
public override bool CanExecute(RobotCommandEventArgs robotCommandEventArgs) { if (robotCommandEventArgs.RobotCommandList.Count != 1 || robotCommandEventArgs.RobotCommandList[0].ToUpper() != "S") { throw new ArgumentException(String.Format("Reset command syntax not matched.{0}Syntax: S{0}Eg: S", Environment.NewLine)); } return(true); }
public override bool CanExecute(RobotCommandEventArgs robotCommandEventArgs) { if (robotCommandEventArgs.Robot == null) { throw new ArgumentException("Robot has not been initialized. Cannot send command to it."); } if (robotCommandEventArgs.RobotCommandList.Count != 1 || robotCommandEventArgs.RobotCommandList[0].ToUpper() != "R") { throw new ArgumentException(String.Format("Replay command syntax not matched.{0}Syntax: R{0}Eg: R", Environment.NewLine)); } return(true); }
public override bool CanExecute(RobotCommandEventArgs robotCommandEventArgs) { if (robotCommandEventArgs.Robot == null) { throw new ArgumentException("Robot has not been initialized. Cannot send command to it."); } if (robotCommandEventArgs.RobotCommandList.Count != 2 || robotCommandEventArgs.RobotCommandList[0].ToUpper() != "M" || !double.TryParse(robotCommandEventArgs.RobotCommandList[1], out var distance)) { throw new ArgumentException(String.Format("Move command syntax not matched.{0}Syntax: M <Distance in Decimal number>{0}Eg: M 10.3", Environment.NewLine)); } return(true); }
protected override void InnerExecute(RobotCommandEventArgs robotCommandEventArgs) { var replayCommands = CommandRecorder.Replay(); foreach (var command in replayCommands) { try { _robotCommandHandler.Run(robotCommandEventArgs.Robot, command); } catch (Exception e) { Console.WriteLine(e.Message); } } }
protected override void InnerExecute(RobotCommandEventArgs robotCommandEventArgs) { var distance = double.Parse(robotCommandEventArgs.RobotCommandList[1]); robotCommandEventArgs.Robot.Move(distance); }
protected override void InnerExecute(RobotCommandEventArgs robotCommandEventArgs) { var angle = double.Parse(robotCommandEventArgs.RobotCommandList[1]); robotCommandEventArgs.Robot.Turn(angle); }
protected override void InnerExecute(RobotCommandEventArgs robotCommandEventArgs) { CommandRecorder.Reset(); }
public abstract bool CanExecute(RobotCommandEventArgs robotCommandEventArgs);
protected abstract void InnerExecute(RobotCommandEventArgs robotCommandEventArgs);
protected override void InnerExecute(RobotCommandEventArgs robotCommandEventArgs) { robotCommandEventArgs.Robot.Beep(); }