示例#1
0
        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);
        }
示例#2
0
 public void RegisterCallBack(RobotMoved handler)
 {
     Handler += handler;
 }
示例#3
0
 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));
 }