//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); }
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()}"); } }
//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); }
public void MakeAMove(MakeAMoveRequest request, SynchronizationContext synchCont) { Task.Run(() => SendInfoAboutMovementToHost(request, synchCont)); }