Exemplo n.º 1
0
        public async Task <RoverAggregate> MoveRover([FromBody] MoveRoverRequest request)
        {
            RoverAggregate rover;
            var            roverId            = new Identity(request.RoverId);
            var            plateauAggregateId = new Identity(request.PlateauAggregateId);

            using (var resolver = EventFlowOptions.New
                                  .RegisterModule <RoverModule>()
                                  .UseNullLog()
                                  .CreateResolver())
            {
                Helpers.RootResolver = resolver;
                var commandBus = resolver.Resolve <ICommandBus>();
                var createPlateauSurfaceCommand = new CreatePlateauSurfaceCommand(plateauAggregateId, request.PlateauSurfaceSize);
                var deployRoverCommand          = new DeployRoverCommand(roverId, plateauAggregateId, request.RoverPosition);

                var commands = new List <ICommand>
                {
                    createPlateauSurfaceCommand,
                    deployRoverCommand
                };
                commands.AddRange(request.RoverCommand.ToRoverCommands(roverId));
                await commandBus.PublishMultipleAsync(commands.ToArray());

                var aggregateStore = resolver.Resolve <IAggregateStore>();
                return(rover = await aggregateStore.LoadAsync <RoverAggregate, Identity>(roverId, CancellationToken.None));
            }
        }
Exemplo n.º 2
0
        public void GeneratePlataueAndExecuteRoverCommands(
            string plateauSurfaceSize,
            string roverPosition,
            string roverCommand,
            int expectedX,
            int exceptedY,
            Orientation expectedOrientation
            )
        {
            RoverAggregate rover;
            var            roverId = Identity.New;

            using (var resolver = EventFlowOptions.New
                                  .RegisterModule <RoverModule>()
                                  .UseNullLog()
                                  .CreateResolver())
            {
                Helpers.RootResolver = resolver;

                var commandBus = resolver.Resolve <ICommandBus>();

                var plateauAggregateId = Identity.New;

                var createPlateauSurfaceCommand = new CreatePlateauSurfaceCommand(plateauAggregateId, plateauSurfaceSize);
                var deployRoverCommand          = new DeployRoverCommand(roverId, plateauAggregateId, roverPosition);

                var commands = new List <ICommand>
                {
                    createPlateauSurfaceCommand,
                    deployRoverCommand
                };
                commands.AddRange(roverCommand.ToRoverCommands(roverId));

                commandBus
                .PublishMultipleAsync(commands.ToArray())
                .GetAwaiter()
                .GetResult();

                var aggregateStore = resolver.Resolve <IAggregateStore>();
                rover = aggregateStore.LoadAsync <RoverAggregate, Identity>(roverId, CancellationToken.None).Result;
            }

            Assert.NotNull(rover);
            Assert.NotNull(rover.RoverPosition);
            Assert.Equal(expectedX, rover.RoverPosition.X);
            Assert.Equal(exceptedY, rover.RoverPosition.Y);
            Assert.Equal(expectedOrientation, rover.RoverPosition.Orientation);
        }
Exemplo n.º 3
0
        public async Task <IExecutionResult> DeployRover([FromBody] DeployRoverRequest request)
        {
            var roverId = new Identity(request.RoverId);

            using (var resolver = EventFlowOptions.New
                                  .RegisterModule <RoverModule>()
                                  .UseNullLog()
                                  .CreateResolver())
            {
                Helpers.RootResolver = resolver;
                var commandBus         = resolver.Resolve <ICommandBus>();
                var plateauAggregateId = new Identity(request.PlateauAggregateId);
                var deployRoverCommand = new DeployRoverCommand(roverId, plateauAggregateId, request.RoverPosition);
                return(await commandBus.PublishAsync(deployRoverCommand, CancellationToken.None).ConfigureAwait(false));
            }
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            var roverIdList = new List <Identity>();

            using (var resolver = EventFlowOptions.New
                                  //.ConfigureEventStore()
                                  .RegisterModule <RoverModule>()
                                  .UseNullLog()
                                  .CreateResolver())
            {
                Helpers.RootResolver = resolver;

                var commandBus = resolver.Resolve <ICommandBus>();

                Console.WriteLine("Plateau surface size :");

                var sizeInput = Console.ReadLine();

                var plateauAggregateId          = Identity.New;
                var createPlateauSurfaceCommand = new CreatePlateauSurfaceCommand(plateauAggregateId, sizeInput);

                var commands = new List <ICommand>
                {
                    createPlateauSurfaceCommand,
                };

                while (true)
                {
                    Console.WriteLine("Rover position :");
                    string roverPositionInput = Console.ReadLine();

                    Console.WriteLine("Rover command :");
                    var roverCommandInput = Console.ReadLine();

                    var roverId = Identity.New;
                    roverIdList.Add(roverId);

                    var deployRoverCommand = new DeployRoverCommand(roverId, plateauAggregateId, roverPositionInput);

                    commands.Add(deployRoverCommand);
                    commands.AddRange(roverCommandInput.ToRoverCommands(roverId));

                    Console.WriteLine("Do you want to add another rover ? (Y/N)");
                    var addRoverInput = Console.ReadLine();

                    if (!addRoverInput.Equals("Y", StringComparison.InvariantCultureIgnoreCase))
                    {
                        break;
                    }
                }

                commandBus
                .PublishMultipleAsync(commands.ToArray())
                .GetAwaiter()
                .GetResult();

                Console.WriteLine("Expected Output :");

                IAggregateStore aggregateStore = resolver.Resolve <IAggregateStore>();

                foreach (Identity roverId in roverIdList)
                {
                    var rover = aggregateStore.LoadAsync <RoverAggregate, Identity>(roverId, CancellationToken.None).Result;

                    Console.WriteLine($"{rover.RoverPosition.X} " +
                                      $"{rover.RoverPosition.Y} " +
                                      $"{rover.RoverPosition.Orientation.ToString()}");
                }

                Console.Write("Press <enter> to exit...");
                Console.ReadLine();
            }
        }