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); } }
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; } } }
public Task HandleStatusChangeAsync(string connectionId, PlayerStateDto playerState) { Debug.WriteLine("Chain of Responsibility: NullStateHandler handling the request"); return(Task.CompletedTask); }
public async Task PlayerStatusChange(PlayerStateDto playerState) { await _handler.HandleStatusChangeAsync(Context.ConnectionId, playerState); }