Ejemplo n.º 1
0
 private async Task SendErrorMsgToSenderAsync(IPlayer player, PlayResult result)
 {
     var msgToSend = new ChessPlayResultMessage()
     {
         Message = result.ToString()
     };
     await messageSender.SendMessageAsync(player.Socket, msgToSend);
 }
Ejemplo n.º 2
0
        private async Task SendPromotionAsync(IPlayer player)
        {
            var promotionMsg = new ChessPlayResultMessage()
            {
                Message             = PlayResult.PromotionRequired.ToString(),
                IsClientTurn        = true,
                IsPromotionRequired = true
            };

            await messageSender.SendMessageAsync(player.Socket, promotionMsg);
        }
Ejemplo n.º 3
0
        private async Task SendStalemateAsync(ChessGameSession session)
        {
            var stalemateMsg = new ChessPlayResultMessage()
            {
                Message = PlayResult.Draw.ToString()
            };

            await messageSender.SendMessageAsync(session.PlayerOne.Socket, stalemateMsg);

            await messageSender.SendMessageAsync(session.PlayerTwo.Socket, stalemateMsg);

            await SendChessPiecesAndMovesMessageAsync(session);
        }
Ejemplo n.º 4
0
        private async Task SendToBothAsync(ChessGameSession session, IPlayer sender,
                                           PlayResult result)
        {
            var otherPlayer = GetOtherPlayer(session, sender);
            var msgToSend   = new ChessPlayResultMessage()
            {
                Message = result.ToString()
            };

            await messageSender.SendMessageAsync(sender.Socket, msgToSend);

            msgToSend.IsClientTurn = true;
            await messageSender.SendMessageAsync(otherPlayer.Socket, msgToSend);

            await SendChessPiecesAndMovesMessageAsync(session);
        }
Ejemplo n.º 5
0
        private async Task SendGameFinishedAsync(ChessGameSession session,
                                                 IPlayer winner)
        {
            var loser = GetOtherPlayer(session, winner);

            var msgToWinner = new ChessPlayResultMessage()
            {
                Message = PlayResult.YouWin.ToString()
            };
            var msgToLoser = new ChessPlayResultMessage()
            {
                Message = PlayResult.YouLose.ToString()
            };

            await messageSender.SendMessageAsync(winner.Socket, msgToWinner);

            await messageSender.SendMessageAsync(loser.Socket, msgToLoser);

            await SendChessPiecesAndMovesMessageAsync(session);
        }
Ejemplo n.º 6
0
        public async Task TestWhiteWin()
        {
            var cts = new CancellationTokenSource();

            var clientSocket1 = new ClientWebSocket();
            var clientSocket2 = new ClientWebSocket();

            await clientSocket1.ConnectAsync(utils.serverUrl, cts.Token);

            await clientSocket2.ConnectAsync(utils.serverUrl, cts.Token);

            var findMsg = new FindChessGameMessage()
            {
                ChessGame = true
            };

            await utils.SendThroughSocketAsync(clientSocket1, findMsg, cts.Token);

            await utils.SendThroughSocketAsync(clientSocket2, findMsg, cts.Token);

            var gameFoundMsg1 = await utils.ReceiveFromSocketAsync <GameFoundMessage>(
                clientSocket1);

            var gameFoundMsg2 = await utils.ReceiveFromSocketAsync <GameFoundMessage>(
                clientSocket2);

            await utils.ReceiveFromSocketAsync <dynamic>(clientSocket1);

            await utils.ReceiveFromSocketAsync <dynamic>(clientSocket2);

            ClientWebSocket currentPlayerSocket, nextPlayerSocket;

            if (gameFoundMsg1.IsClientTurn)
            {
                currentPlayerSocket = clientSocket1;
                nextPlayerSocket    = clientSocket2;
            }
            else
            {
                currentPlayerSocket = clientSocket2;
                nextPlayerSocket    = clientSocket1;
            }

            var moveMsgs = new List <MakeChessMoveMessage>()
            {
                //king's white pawn two up
                new MakeChessMoveMessage()
                {
                    X_StartPosition    = 4, Y_StartPosition = 1,
                    X_FinishedPosition = 4, Y_FinishedPosition = 3
                },
                //right bishop's black pawn two down
                new MakeChessMoveMessage()
                {
                    X_StartPosition    = 5, Y_StartPosition = 6,
                    X_FinishedPosition = 5, Y_FinishedPosition = 4
                },
                //leftmost white pawn two up
                new MakeChessMoveMessage()
                {
                    X_StartPosition    = 0, Y_StartPosition = 1,
                    X_FinishedPosition = 0, Y_FinishedPosition = 3
                },
                //right knight's black pawn two down
                new MakeChessMoveMessage()
                {
                    X_StartPosition    = 6, Y_StartPosition = 6,
                    X_FinishedPosition = 6, Y_FinishedPosition = 4
                },
                //white queen checkmate
                new MakeChessMoveMessage()
                {
                    X_StartPosition    = 3, Y_StartPosition = 0,
                    X_FinishedPosition = 7, Y_FinishedPosition = 4
                },
            };

            ChessPlayResultMessage resultMessage1 = null;
            ChessPlayResultMessage resultMessage2 = null;

            foreach (var moveMsg in moveMsgs)
            {
                await utils.SendThroughSocketAsync(currentPlayerSocket, moveMsg, cts.Token);

                resultMessage1 =
                    await utils.ReceiveFromSocketAsync <ChessPlayResultMessage>(currentPlayerSocket);

                resultMessage2 =
                    await utils.ReceiveFromSocketAsync <ChessPlayResultMessage>(nextPlayerSocket);

                await utils.ReceiveFromSocketAsync <dynamic>(currentPlayerSocket);

                await utils.ReceiveFromSocketAsync <dynamic>(nextPlayerSocket);

                (currentPlayerSocket, nextPlayerSocket) = (nextPlayerSocket, currentPlayerSocket);
            }

            Assert.AreEqual(PlayResult.YouWin.ToString(), resultMessage1.Message);
            Assert.AreEqual(PlayResult.YouLose.ToString(), resultMessage2.Message);

            var status = WebSocketCloseStatus.NormalClosure;
            await clientSocket1.CloseAsync(status, "", cts.Token);

            await clientSocket2.CloseAsync(status, "", cts.Token);
        }