Example #1
0
        //method which starts sending the data about move
        private void SendMovementDataToHost(MakeAMoveRequest request)
        {
            EngineHostDataOperator Operator = new EngineHostDataOperator();

            Operator.MakeAMove(request, SynchCont);
            ResetUIAfterMakingMoveOrCancelingMove();
        }
        //method for performing movement of player
        /// <summary>
        /// request.TakingCardsOrPutingCards - true is puting cards and false when taking cards
        /// </summary>
        bool IMakaoGameHostService.PerformPlayerMove(MakeAMoveRequest request)
        {
            var logger = NLog.LogManager.GetCurrentClassLogger();

            logger.Info($"Engine host received request to make a move from player: {request.PlayerNumber}. Taking or puting cards: {request.TakingCardsOrPutingCards}.");
            bool moveSuccessful = false;

            LogDataFromClient(request);

            try
            {
                //get player number
                int playerNumber = DataPlaceholders.MakaoEngineHostDataPlaceholders.PlayersData.Single(x => x.PlayerID == request.PlayerID).PlayerNumber;
                moveSuccessful = DataPlaceholders.GameStateHolder.EngineInstance.PutCardsOnTheTable(request.TakingCardsOrPutingCards, request.CardsToPutOnTheTable,
                                                                                                    playerNumber, request.PlayerIsDemanding, request.DemandedRank, request.DemandedSuit, request.SkipTheMove);
            }
            catch (Exception ex)
            {
                logger.Info($"Error while processing make a move request: {ex.Message}.");
            }

            logger.Info($"Was the move successful: {moveSuccessful}.");

            return(moveSuccessful);
        }
Example #3
0
 private void SendInfoAboutMovementToHost(MakeAMoveRequest request, SynchronizationContext synchCont)
 {
     try
     {
         IMakaoGameHostService proxy = factory.CreateChannel();
         bool response = proxy.PerformPlayerMove(request);
         if (!response)
         {
             synchCont.Post(_ => ShowInfoAboutMovePerformingError(), null);
         }
     }
     catch (Exception ex)
     {
         var logger = NLog.LogManager.GetCurrentClassLogger();
         logger.Error($"Error while performing a move - sending data to host: {ex.Message}.");
     }
 }
        //method for logging data received for client = making a move
        private void LogDataFromClient(MakeAMoveRequest request)
        {
            var logger = NLog.LogManager.GetCurrentClassLogger();

            logger.Info($"CurrentPlayerNumber: {DataPlaceholders.GameStateHolder.EngineInstance.CurrentPlayer}.");
            logger.Info($"Data received from the client with number: {request.PlayerNumber}:");
            logger.Info($"  Player ID = {request.PlayerID}");
            logger.Info($"  Taking cards or puting them = {request.TakingCardsOrPutingCards}");
            logger.Info($"  Is demanding = {request.PlayerIsDemanding}");
            logger.Info($"  DemandedRank = {request.DemandedRank}");
            logger.Info($"  DemandedSuit = {request.DemandedSuit}");

            logger.Info($"  Cards list (amount =  {request.CardsToPutOnTheTable.Count}):");
            foreach (PlayingCard item in request.CardsToPutOnTheTable)
            {
                logger.Info($"  NewCard = {item.ToString()}");
            }
        }
Example #5
0
        //mathod for generating request sended to host to perform a move
        private MakeAMoveRequest GeneratePerformingAMoveRequestData(bool takingCardsOrPutiingCards, List <PlayingCard> CardsList, bool skipMove) //false, new List<PlayingCard>(), false
        {
            List <PlayingCard> cardsToSend = new List <PlayingCard>();

            foreach (PlayingCard item in CardsList)
            {
                cardsToSend.Add(item);
            }

            MakeAMoveRequest request = new MakeAMoveRequest()
            {
                PlayerID                 = MainWindow.PlayerID,
                PlayerNumber             = MainWindow.PlayerNumber,
                TakingCardsOrPutingCards = takingCardsOrPutiingCards,
                CardsToPutOnTheTable     = cardsToSend,
                PlayerIsDemanding        = demandedRankRequest != CardRanks.None || demandedSuitRequest != CardSuits.None || jackOrAceInCardsToPutOnTheTable,
                DemandedRank             = demandedRankRequest,
                DemandedSuit             = demandedSuitRequest,
                SkipTheMove              = skipMove,
            };

            return(request);
        }
Example #6
0
 public void MakeAMove(MakeAMoveRequest request, SynchronizationContext synchCont)
 {
     Task.Run(() => SendInfoAboutMovementToHost(request, synchCont));
 }