public void MoveRobot(string name) { var maybeRobot = GetRobot(name); if (maybeRobot.IsNone) { throw new ApplicationException($"Robot {name} does not exist"); } //check all is valid var robot = maybeRobot.Value.Move(); var arenaCoordinates = ArenaCoordinates.Value; if (!arenaCoordinates.IsWithinCoordinates(robot.Coordinates.X, robot.Coordinates.Y)) { throw new ApplicationException("Invalid move"); } var evt = new RobotMoved(robot.Name, Id, Version, robot.Coordinates.X, robot.Coordinates.Y, EnumEx.MapByStringValue <CompassPoint, Contracts.CompassPoint>(robot.CompassPoint)); RaiseDomainEvent(evt); }
public void RegisterCallBack(RobotMoved handler) { Handler += handler; }
private void Apply(RobotMoved evt) { _robots[evt.Name] = Domain.Robot.Create(evt.Name, RobotCoordinates.Create(evt.XPosition, evt.YPosition), EnumEx.MapByStringValue <Contracts.CompassPoint, CompassPoint>(evt.CompassPoint)); }