protected override async Task HandleCommandAsync(JoinGameCommand command, IMediationContext mediationContext, CancellationToken cancellationToken) { var gameContext = mediationContext as GameContext; var game = _gameManager.GetGame(command.GameCode); var player = new Player() { Initials = command.PlayerInitials }; game.Players.TryAdd(player.Initials, player); _gameConnectionIdStore.StorePlayerConnectionIdForGame(command.GameCode, command.PlayerInitials, gameContext.ConnectionId); gameContext.GameCode = command.GameCode; gameContext.PlayerIntials = command.PlayerInitials; // TODO: refactor into own handler var playerDetails = game.Players.Values .Select(p => new PlayerDetails { Intials = p.Initials, Ready = p.Ready }) .ToList(); await _clientMessageDispatcherFactory .CreateClientMessageDispatcher(x => x.UpdatePlayersList(playerDetails)) .SendToAllGameClients(command.GameCode); }
protected override async Task HandleCommandAsync(PlayerReadyCommand command, IMediationContext mediationContext, CancellationToken cancellationToken) { var gameContext = mediationContext as GameContext; var player = gameContext.Game.Players .Where(o => o.Key == gameContext.PlayerIntials) .SingleOrDefault() .Value; player.Ready = command.Ready; //var playerDetails = _mapper.ProjectTo<Dispatchers.Models.PlayerDetails>(request.GameState.Players.Values.AsQueryable()).ToList(); var playerDetails = gameContext.Game.Players.Values.Select(p => new PlayerDetails { Intials = p.Initials, Ready = p.Ready }).ToList(); await _clientMessageDispatcherFactory .CreateClientMessageDispatcher(x => x.UpdatePlayersList(playerDetails)) .SendToAllGameClients(gameContext.GameCode); var allPlayersReady = gameContext.Game.Players.All(o => o.Value.Ready); if (allPlayersReady && gameContext.Game.Players.Count > 4 || gameContext.Game.Players.Count == 1) { if (gameContext.Game.CurrentState == GameState.GamePending) { await _clientMessageDispatcherFactory .CreateClientMessageDispatcher(x => x.Countdown(true)) .SendToAllGameClients(gameContext.GameCode); } else { await _clientMessageDispatcherFactory .CreateClientMessageDispatcher(x => x.ShowLeaderScript(true)) .SendToAllGameClients(gameContext.GameCode); } } }
protected override async Task HandleCommandAsync(StartGameCommand command, IMediationContext mediationContext, CancellationToken cancellationToken) { var gameContext = mediationContext as GameContext; var gameReady = gameContext.Game.Players.All(o => o.Value.Ready); // TODO: Add validation gameContext.Game.CurrentState = GameState.Started; foreach (var playerReset in gameContext.Game.Players) { playerReset.Value.Ready = false; } var players = gameContext.Game.Players.Values.ToList(); _characterAssignment.AssignRoles(players); foreach (var player in players) { var playerCharacterNotification = new ShowCharacterNotification() { Role = player.Character.Role, Team = player.Character.Team }; await _clientMessageDispatcherFactory .CreateClientMessageDispatcher(x => x.ShowCharacter(playerCharacterNotification)) .SendToPlayerInGame(gameContext.GameCode, player.Initials); } gameContext.Game.SortedPlayers = _playerOrderInitialisation.GetSortedPlayers(players); gameContext.Game.Missions = _missionInitialisation.InitiliseMissions(players.Count); var firstMission = gameContext.Game.Missions.Where(o => o.Number == 1).SingleOrDefault(); firstMission.Team.Leader = gameContext.Game.SortedPlayers.First(); //TODO broadcast mission update }