コード例 #1
0
        public void MoveCard(string gamePin, MoveCardModel moveCardModel)
        {
            Status status = GameManager.MoveCard(gamePin, moveCardModel);

            if (status == Status.Success)
            {
                Clients.Group(gamePin).MoveCard(moveCardModel);

                //Delete source pile if it is empty and a run pile
                Pile oldPile = GameManager.GetGameState(gamePin).Single((pile) => pile.PileNo == moveCardModel.SourcePileNo);
                if (oldPile.GetCards().Count() == 0 && oldPile.PileType == PileType.Run)
                {
                    DeleteEmptyRunPile(gamePin, oldPile);
                }
            }
            else
            {
                //TODO: Pile version issues...
                IEnumerable <Pile> piles = GameManager.GetGameState(gamePin);

                Clients.Caller.StartGame(piles);
                //MoveRejected(moveCardModel.TargetPileVersionNo, moveCardModel.TargetPileNo, moveCardModel.TargetIndex,
                //    moveCardModel.SourcePileVersionNo, moveCardModel.SourcePileNo, moveCardModel.SourceIndex);
            }
        }
コード例 #2
0
        public void MoveCardShouldUpdateVersionNumberOfSourcePileAndTargetPileTest()
        {
            //Arrange
            GameManager.AddPlayerToGame(GamePin, NickNamePlayerOne, ConnIdPlayerOne);

            GameManager.StartGame(GamePin, ConnIdPlayerOne);

            IEnumerable <Pile> piles = GameManager.GetGameState(GamePin);
            Pile deck   = piles.First((pile) => pile.PileType == PileType.Deck);
            Pile BoHand = piles.First((pile) => pile.PileType == PileType.Hand);

            int sourcePileVersionNo = deck.VersionNo;
            int sourcePileNo        = deck.PileNo;
            int sourceIndex         = deck.GetCards().Count() - 1;
            int targetPileVersionNo = BoHand.VersionNo;
            int targetPileNo        = BoHand.PileNo;
            int targetIndex         = 0;

            MoveCardModel moveCardModel = new MoveCardModel(sourcePileVersionNo, sourcePileNo, sourceIndex, targetPileVersionNo, targetPileNo, targetIndex);

            Card deckCard0 = deck.GetCards().ElementAt(sourceIndex);

            //Act
            GameManager.MoveCard(GamePin, moveCardModel);

            //Assert
            Assert.AreEqual(1, deck.VersionNo);
            Assert.AreEqual(1, BoHand.VersionNo);

            Assert.AreEqual(deck.VersionNo, moveCardModel.SourcePileVersionNo);
            Assert.AreEqual(BoHand.VersionNo, moveCardModel.TargetPileVersionNo);

            CollectionAssert.DoesNotContain(deck.GetCards().ToList(), deckCard0);
            Assert.AreEqual(deckCard0, BoHand.GetCards().ElementAt(0));
        }
コード例 #3
0
        public ReturnModel MoveCardToLane([FromBody] MoveCardModel model, string accessToken)
        {
            var         account = _readOnlyRepository.First <Account>(account1 => account1.Token == accessToken);
            ReturnModel remodel = new ReturnModel();

            if (account != null)
            {
                if (account.VerifyToken(account))
                {
                    var   card  = _readOnlyRepository.GetById <Cards>(model.Id);
                    Cards card1 = new Cards();
                    card1.Text        = card.Text;
                    card1.Description = card.Description;
                    var line = _readOnlyRepository.GetById <Lines>(model.IdLineTo);

                    line.AddCard(card1);
                    var      archivedCard = _writeOnlyRepository.Archive(card);
                    var      updateLine   = _writeOnlyRepository.Update(line);
                    Activity activity     = new Activity();
                    activity.Text = account.FirstName + " Movio la card " + card.Text + " a la line: " + line.Title;
                    account.AddActivities(activity);
                    var accountUpdate = _writeOnlyRepository.Update(account);
                    return(remodel.ConfigureModel("Successfull", "Se movio correctamente la card", remodel));
                }
                return(remodel.ConfigureModel("Error", "Su session ya expiro", remodel));
            }
            return(remodel.ConfigureModel("Error", "No se pudo acceder a su cuenta", remodel));
        }
コード例 #4
0
        public async Task <IActionResult> MoveCard([FromBody] MoveCardModel command)
        {
            await _boardService.MoveAsync(command.CardId, command.ColumnId);

            return(Ok(new
            {
                Moved = true
            }));
        }
コード例 #5
0
        public void MoveCardToLastIndexSamePileTest()
        {
            //Arrange
            string gamePin = GameManager.CreateNewGame("testName");

            GameRoom GameRoom = GameManager.GetGameRoomWithPin(gamePin);
            string   connId   = "connId";

            GameManager.AddPlayerToGame(gamePin, "Bo", connId);

            GameManager.StartGame(gamePin, connId);

            int sourcePileVersionNo = 0,
                sourcePileNo        = 0,
                sourceIndex         = 0,

                targetPileVersionNo = 0,
                targetPileNo        = 1,
                targetIndex         = 0;

            MoveCardModel moveCardModel = new MoveCardModel(sourcePileVersionNo, sourcePileNo, sourceIndex, targetPileVersionNo, targetPileNo, targetIndex);

            GameManager.MoveCard(gamePin, moveCardModel);
            GameManager.MoveCard(gamePin, moveCardModel);
            GameManager.MoveCard(gamePin, moveCardModel);

            moveCardModel.SourcePileNo = 1;
            moveCardModel.TargetIndex  = 2;

            IEnumerable <Pile> piles = GameManager.GetGameState(gamePin);

            //Act
            Card boHandCard0 = piles.ElementAt(1).GetCards().ElementAt(0);
            Card boHandCard1 = piles.ElementAt(1).GetCards().ElementAt(1);
            Card boHandCard2 = piles.ElementAt(1).GetCards().ElementAt(2);

            GameManager.MoveCard(gamePin, moveCardModel);

            Pile deck   = piles.ElementAt(0);
            Pile boHand = piles.ElementAt(1);

            //Assert
            Assert.AreEqual(3, deck.VersionNo);
            Assert.AreEqual(4, boHand.VersionNo);

            Assert.AreEqual(boHand.VersionNo, moveCardModel.SourcePileVersionNo);
            Assert.AreEqual(boHand.VersionNo, moveCardModel.TargetPileVersionNo);

            Assert.AreEqual(3, boHand.GetCards().Count());
            Assert.AreEqual(boHandCard0, boHand.GetCards().ElementAt(2));
            Assert.AreEqual(boHandCard1, boHand.GetCards().ElementAt(0));
            Assert.AreEqual(boHandCard2, boHand.GetCards().ElementAt(1));
        }
コード例 #6
0
        public Status MoveCard(string gamePin, MoveCardModel moveCardModel)
        {
            Status   status   = Status.None;
            GameRoom gameRoom = GetGameRoomWithPin(gamePin);

            if (gameRoom != null)
            {
                if (gameRoom.MoveCard(moveCardModel))
                {
                    status = Status.Success;
                }
                else
                {
                    status = Status.InvalidMoveError;
                }
            }
            else
            {
                status = Status.GameNotFoundError;
            }

            return(status);
        }
コード例 #7
0
        private bool validateMove(Pile sourcePile, Pile targetPile, MoveCardModel moveToValidate)
        {
            bool sourcePileVersionIsValid = moveToValidate.SourcePileVersionNo == sourcePile.VersionNo;
            bool targetPileVersionIsValid = moveToValidate.TargetPileVersionNo == targetPile.VersionNo;

            bool sourceIndexIsValid = moveToValidate.SourceIndex >= 0 && moveToValidate.SourceIndex <= sourcePile.Cards.Count() - 1;
            bool targetIndexIsValid;

            if (targetPile != sourcePile)
            {
                targetIndexIsValid = moveToValidate.TargetIndex >= 0 && moveToValidate.TargetIndex <= targetPile.Cards.Count();
            }
            else   //Source and Target pile are the same
            {
                targetIndexIsValid = moveToValidate.TargetIndex >= 0 && moveToValidate.TargetIndex <= targetPile.Cards.Count() - 1;
            }

#if BREAK_MOVE
            return(true);
#else
            return(sourcePileVersionIsValid && targetPileVersionIsValid && sourceIndexIsValid && targetIndexIsValid);
#endif
        }
コード例 #8
0
        public bool MoveCard(MoveCardModel moveCardModel)
        {
            bool result = false;

            Pile sourcePile = Piles.Find(pile => pile.PileNo == moveCardModel.SourcePileNo);
            Pile targetPile = Piles.Find(pile => pile.PileNo == moveCardModel.TargetPileNo);

            try {
                if (Monitor.TryEnter(sourcePile))
                {
#if DELAY_MOVE
                    if (Monitor.TryEnter(ConcurrencyIssueLock))
                    {
                        Debug.WriteLine("Paused with move " + moveCardModel.ToString());
                        Thread.Sleep(5000);
                        Debug.WriteLine("Continueing paused move...");
                        Monitor.Exit(ConcurrencyIssueLock);
                    }
#endif
#if BREAK_MOVE
                }
                else
                {
                    Debug.WriteLine("Skipping pause for move " + moveCardModel.ToString());
                }
                { //To match closing bracket
#endif
                    if (targetPile != sourcePile)
                    {
                        if (Monitor.TryEnter(targetPile) && validateMove(sourcePile, targetPile, moveCardModel))
                        {
                            Card cardToMove = sourcePile.RemoveCard(moveCardModel.SourceIndex);
                            targetPile.AddCard(moveCardModel.TargetIndex, cardToMove);
                            sourcePile.VersionNo++;
                            targetPile.VersionNo++;
                            moveCardModel.SourcePileVersionNo = sourcePile.VersionNo;
                            moveCardModel.TargetPileVersionNo = targetPile.VersionNo;
                            result = true;
#if BREAK_MOVE
                            Debug.WriteLine("Made move " + moveCardModel.ToString());
#endif
                        }
                    }
                    else   //Source and Target pile are the same

                    {
                        if (validateMove(sourcePile, targetPile, moveCardModel))
                        {
                            Card cardToMove = sourcePile.RemoveCard(moveCardModel.SourceIndex);
                            sourcePile.AddCard(moveCardModel.TargetIndex, cardToMove);
                            sourcePile.VersionNo++;
                            moveCardModel.SourcePileVersionNo = sourcePile.VersionNo;
                            moveCardModel.TargetPileVersionNo = sourcePile.VersionNo;
                            result = true;
#if BREAK_MOVE
                            Debug.WriteLine("Made move " + moveCardModel.ToString());
#endif
                        }
                    }
                }
            }
            catch (Exception e) {
#if BREAK_MOVE
                Debug.WriteLine("Excepiton during move " + moveCardModel.ToString());
#endif
                Debug.WriteLine(e.Message);
            }
            finally {
                if (Monitor.IsEntered(sourcePile))
                {
                    Monitor.Exit(sourcePile);
                }

                if (Monitor.IsEntered(targetPile))
                {
                    Monitor.Exit(targetPile);
                }
            }

            return(result);
        }