예제 #1
0
        public async Task Consume_RoomDoesExist_DoesNotCreateAnother()
        {
            var @event = new RoomCreatedEvent()
            {
                ClubId = Guid.NewGuid(),
                RoomId = Guid.NewGuid()
            };

            using (var context = _factory.CreateContext())
            {
                context.Clubs.Add(new Club()
                {
                    ClubId = @event.ClubId
                });
                context.Rooms.Add(new Room()
                {
                    ClubId = @event.ClubId,
                    RoomId = @event.RoomId
                });
                context.SaveChanges();
            }

            await SendEvent(@event);


            using (var context = _factory.CreateContext())
            {
                Assert.That(context.Rooms.Count(), Is.EqualTo(1));
            }
        }
예제 #2
0
        public void Execute(CreateRoomCommand command)
        {
            var room = new Room();

            if (_repo.RoomExists(command.RoomName))
            {
                throw new FunctionalException(new FunctionalError("US003.1", $"A room with the name '{command.RoomName}' already exists"));
            }
            room.Create(command.RoomName, command.GameID);
            _repo.Create(room);
            room.Join(command.PlayerID, command.Colour);
            _repo.Save(room);

            var createdEvent = new RoomCreatedEvent()
            {
                RoomName = room.Name, GameID = room.GameID
            };

            _publisher.Publish(createdEvent);
            var joinedEvent = new PlayerJoinedRoomEvent()
            {
                RoomName = room.Name, PlayerID = command.PlayerID, Colour = command.Colour
            };

            _publisher.Publish(joinedEvent);
        }
예제 #3
0
 public static RoomCreated FromDomainEvent(RoomCreatedEvent domainEvent)
 {
     return(new RoomCreated
     {
         HostPlayerId = domainEvent.HostPlayerId.ToString(),
         RoomCode = domainEvent.RoomCode.ToString(),
         RoomId = domainEvent.RoomId.ToString(),
     });
 }
예제 #4
0
        public async Task Consume_ClubDoesNotExist_DoesNotAddRoom()
        {
            var @event = new RoomCreatedEvent()
            {
                ClubId = Guid.NewGuid(),
                RoomId = Guid.NewGuid(),
            };

            await SendEvent(@event);


            using (var context = _factory.CreateContext())
            {
                Assert.That(context.Clubs.Count(), Is.EqualTo(0));
                Assert.That(context.Rooms.Count(), Is.EqualTo(0));
            }
        }
예제 #5
0
        public Room StartGame(CreateRoomCommand command)
        {
            var room = new Room()
            {
                Name = command.RoomName
            };

            _repository.Insert(room);

            // (optional) throw RoomCreatedEvent
            var roomCreatedEvent = new RoomCreatedEvent()
            {
                GUID = Guid.NewGuid().ToString(), RoutingKey = "Minor.GameRooms", TimeStamp = DateTime.UtcNow
            };

            _publisher.Publish(roomCreatedEvent);

            return(room);
        }
 public void RoomCreatedHandler(RoomCreatedEvent rce)
 {
 }