Example #1
0
        public async Task HandleStatusChangeAsync(string connectionId, PlayerStateDto playerState)
        {
            if (!playerState.State.Equals(PlayerStateTypes.Won))
            {
                await NextHandler.HandleStatusChangeAsync(connectionId, playerState);
            }
            else
            {
                Debug.WriteLine("Chain of Responsibility: WonStateHandler handling the request");
                using (var dbContext = (GameContext)_sp.GetService(typeof(GameContext)))
                {
                    var players = await dbContext.Players.Include(x => x.Connection).ToListAsync();

                    var connection = await dbContext.Connections.Include(x => x.Player)
                                     .FirstOrDefaultAsync(x => x.Id == connectionId);

                    var wonPlayer = connection.Player;
                    wonPlayer.PlayerState = (int)PlayerStateTypes.Won;

                    var lostPlayer = players.Single(x =>
                                                    x.GameId == playerState.GameId && connectionId != x.Connection.Id);
                    lostPlayer.PlayerState = (int)PlayerStateTypes.Lost;

                    dbContext.Players.Update(lostPlayer);
                    dbContext.Players.Update(wonPlayer);
                    await dbContext.SaveChangesAsync();
                }

                await _hub.NotifyAboutWonGame(playerState);
            }
        }
 public async Task PlayerStatusChange(PlayerStateDto playerState)
 {
     if (_connection.State.Equals(HubConnectionState.Connected))
     {
         // Debug.WriteLine("Sending to server that player is ready" + playerRequest.Name);
         await SendAsync("PlayerStatusChange", playerState);
     }
 }
Example #3
0
        public async Task NotifyAboutWonGame(PlayerStateDto playerState)
        {
            await Clients.OthersInGroup(playerState.GameId).EndGame(new GameEndDto {
                EndGameResult = "YOU LOST"
            });

            await Clients.Caller.EndGame(new GameEndDto { EndGameResult = "YOU WON" });
        }
        public async Task HandleStatusChangeAsync(string connectionId, PlayerStateDto playerState)
        {
            Debug.WriteLine(!playerState.State.Equals(PlayerStateTypes.Ready));
            if (!playerState.State.Equals(PlayerStateTypes.Ready))
            {
                await NextHandler.HandleStatusChangeAsync(connectionId, playerState);
            }
            else
            {
                Debug.WriteLine("Chain of Responsibility: ReadyStateHandler handling the request");
                var playerName         = "";
                var opponentPlayerName = "";
                var gamePlayersCount   = 0;
                using (var dbContext = (GameContext)_sp.GetService(typeof(GameContext)))
                {
                    var players = await dbContext.Players.Include(x => x.Connection).ToListAsync();

                    var connection = await dbContext.Connections.Include(x => x.Player)
                                     .FirstOrDefaultAsync(x => x.Id == connectionId);

                    var storedPlayer = connection.Player;
                    storedPlayer.PlayerState = (int)PlayerStateTypes.Ready;

                    playerName = storedPlayer.Name;

                    storedPlayer.GameId = GameSettings.CurrentGameId.ToString();

                    gamePlayersCount = await dbContext.Players
                                       .Where(x => x.GameId == GameSettings.CurrentGameId.ToString()).CountAsync();

                    var opponentPlayer = await dbContext.Players.SingleOrDefaultAsync(x =>
                                                                                      x.GameId == GameSettings.CurrentGameId.ToString() && x.Name != playerName);

                    if (opponentPlayer != null)
                    {
                        opponentPlayerName = opponentPlayer.Name;
                    }

                    dbContext.Players.Update(storedPlayer);
                    dbContext.SaveChanges();
                }

                GameSettings.GamePlayersCount++;
                await _hub.Groups.AddToGroupAsync(connectionId, GameSettings.CurrentGameId.ToString());

                if (GameSettings.GamePlayersCount >= 2 || gamePlayersCount >= 2)
                {
                    await _hub.NotifyAboutGameStart(playerName, opponentPlayerName);

                    GameSettings.CurrentGameId    = Guid.NewGuid();
                    GameSettings.GamePlayersCount = 0;
                }
            }
        }
Example #5
0
 public Task HandleStatusChangeAsync(string connectionId, PlayerStateDto playerState)
 {
     Debug.WriteLine("Chain of Responsibility: NullStateHandler handling the request");
     return(Task.CompletedTask);
 }
Example #6
0
 public async Task PlayerStatusChange(PlayerStateDto playerState)
 {
     await _handler.HandleStatusChangeAsync(Context.ConnectionId, playerState);
 }