Example #1
0
        public void WhenNamedClientDropsOutOfGameSessionBeforeLaunchOtherClientsAreNotified()
        {
            Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null;
            try
            {
                var expectedMessageForTestPlayer1 = new PlayerHasLeftGameMessage();
                var expectedMessageForTestPlayer2 = new OtherPlayerHasLeftGameMessage(TestPlayer1UserName);

                var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName);

                var mockPlayerCardRepository = this.CreateMockPlayerCardRepository(testPlayer1Data);

                gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4)
                                     .AddPlayerCardRepository(mockPlayerCardRepository)
                                     .WaitUntilGameSessionManagerHasStarted();

                var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager);
                var testPlayer2 = new TestClient(TestPlayer2UserName, gameSessionManager);

                var testScript = new TestScript(testPlayer1, testPlayer2);
                testScript.AllClientsJoinGame();
                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlayerDataReceivedMessage), testPlayer1, testPlayer2);

                // Act
                testPlayer1.LeaveGame();

                // Assert
                testScript.WaitUntilClientsReceiveMessage(expectedMessageForTestPlayer1, testPlayer1);
                testScript.WaitUntilClientsReceiveMessage(expectedMessageForTestPlayer2, testPlayer2);
            }
            finally
            {
                gameSessionManager?.WaitUntilGameSessionManagerHasStopped();
            }
        }
Example #2
0
        public async Task ExitGame(GameIdModel model)
        {
            var game = GetGame(model.GameId);

            var playerWhoLeft  = game.GetPlayerByUserId(GetUserIdByCurrentConnectionId());
            var opponentPlayer = game.GetOpponentPlayer(playerWhoLeft);

            var message = new PlayerHasLeftGameMessage
            {
                GameId   = game.Id,
                UserName = playerWhoLeft.Name,
                TeamId   = playerWhoLeft.TeamId
            };

            game.ChatMessages.Add(message);

            await SendMessageToClientsAsync("PlayerHasLeftGame", GetAllConnectionsByUsersIds(new List <string>()
            {
                opponentPlayer.UserId
            }), message);

            game.PlayerLeft(playerWhoLeft);

            if (!opponentPlayer.HasUserLeftTheGame)
            {
                await SendGameStatusToPlayer(game, opponentPlayer);
            }
        }
Example #3
0
        public void WhenNamedClientDropsOutOfGameSessionAfterLaunchOtherClientsAreNotified()
        {
            Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null;
            try
            {
                var expectedMessageForTestPlayer1      = new PlayerHasLeftGameMessage();
                var expectedMessageForOtherTestPlayers = new OtherPlayerHasLeftGameMessage(TestPlayer1UserName);

                var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName);
                var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName);
                var testPlayer3Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer3UserName);
                var testPlayer4Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer4UserName);

                var mockPlayerCardRepository = this.CreateMockPlayerCardRepository(testPlayer1Data, testPlayer2Data, testPlayer3Data, testPlayer4Data);

                gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4)
                                     .AddPlayerCardRepository(mockPlayerCardRepository)
                                     .WaitUntilGameSessionManagerHasStarted();

                var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager);
                var testPlayer2 = new TestClient(TestPlayer2UserName, gameSessionManager);
                var testPlayer3 = new TestClient(TestPlayer3UserName, gameSessionManager);
                var testPlayer4 = new TestClient(TestPlayer4UserName, gameSessionManager);

                var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4);
                testScript.RunUntil(TestScript.RunPoints.RunUntilClientsReceiveGameInitializationMessage);

                // Act
                testPlayer1.LeaveGame();

                // Assert
                testScript.WaitUntilClientsReceiveMessage(expectedMessageForTestPlayer1, testPlayer1);
                testScript.WaitUntilClientsReceiveMessage(expectedMessageForOtherTestPlayers, testPlayer2, testPlayer3, testPlayer4);
            }
            finally
            {
                gameSessionManager?.WaitUntilGameSessionManagerHasStopped();
            }
        }