Esempio n. 1
0
        /// <summary>
        /// Join a game
        /// </summary>
        /// <param name="gameID">The id of the game to join</param>
        /// <param name="user">The current user</param>
        /// <param name="passphrase">The passphrase for the game</param>
        /// <param name="playerType">Type of player joining</param>
        /// <returns>The response to a join request</returns>
        public Entities.JoinResponse Execute(Int32 gameID, Entities.User user, String passphrase,
                                             Entities.Enums.GamePlayerType playerType)
        {
            Entities.Filters.Game.Select filter = new Entities.Filters.Game.Select();
            filter.GameID        = gameID;
            filter.DataToSelect |= Entities.Enums.Game.Select.Rounds;
            filter.DataToSelect |= Entities.Enums.Game.Select.GamePlayerCards;

            Entities.Game game = _selectGame.Execute(filter);

            Entities.JoinResponse response = _joinGame.Execute(game, user, passphrase, playerType);

            if (response.Game != null)
            {
                if (response.Game.IsWaiting() &&
                    response.Result.HasFlag(Entities.Enums.Game.JoinResponseCode.SuccessfulAlreadyPlayer) == false)
                {
                    _sendMessage.UpdateWaiting(response.Game, true);
                }
                else if (response.Result.HasFlag(Entities.Enums.Game.JoinResponseCode.NewRoundStart) == true)
                {
                    _sendMessage.UpdateGame(response.Game, true);
                }
                else
                {
                    _sendMessage.UpdateLobby(response.Game, true);
                }
            }

            return(response);
        }
Esempio n. 2
0
        /// <summary>
        /// Join a game
        /// </summary>
        /// <param name="gameID">The game to join</param>
        /// <param name="user">The current user</param>
        /// <param name="playerType">Type of player joining</param>
        /// <returns>If the user was able to join the game</returns>
        public Boolean Execute(Entities.Game game, Entities.User user, Entities.Enums.GamePlayerType playerType)
        {
            Entities.GamePlayer player = new Entities.GamePlayer();
            player.GameID     = game.GameID;
            player.Points     = 0;
            player.User       = user;
            player.PlayerType = playerType;

            Boolean successful = _insertGamePlayer.Execute(player) != -1;

            if (successful)
            {
                if (playerType == Entities.Enums.GamePlayerType.Player)
                {
                    game.Players.Add(player);
                    game.PlayerCount++;
                }
                else if (playerType == Entities.Enums.GamePlayerType.Spectator)
                {
                    game.Spectators.Add(player);
                    game.SpectatorCount++;
                }
            }

            return(successful);
        }
Esempio n. 3
0
        /// <summary>
        /// Removes a player from the game
        /// </summary>
        /// <param name="gameID">The ID of the game to leave</param>
        /// <param name="user">The user leaving the game</param>
        /// <param name="playerType">Type of player leaving</param>
        public void Execute(Int32 gameID, Entities.User user, Entities.Enums.GamePlayerType playerType)
        {
            Entities.GamePlayer player = new Entities.GamePlayer();
            player.GameID     = gameID;
            player.User       = user;
            player.PlayerType = playerType;

            _deleteGamePlayer.Execute(player);
        }
Esempio n. 4
0
        public void RefreshGameView(Int32 gameID, Entities.Enums.ConnectionType connectionType)
        {
            Join(gameID, connectionType);

            AS.GameRound.Base.ISelect          _selectGameRound  = BusinessLogic.UnityConfig.Container.Resolve <AS.GameRound.Base.ISelect>();
            AS.Game.Base.ISelect               _selectGame       = BusinessLogic.UnityConfig.Container.Resolve <AS.Game.Base.ISelect>();
            AS.GamePlayerKickVote.Base.ISelect _selectVotes      = BusinessLogic.UnityConfig.Container.Resolve <AS.GamePlayerKickVote.Base.ISelect>();
            AS.ActiveConnection.Base.ISelect   _selectConnection = BusinessLogic.UnityConfig.Container.Resolve <AS.ActiveConnection.Base.ISelect>();

            Int32 currentUserId = Authentication.Security.CurrentUserId;

            Entities.ActiveConnection connection = _selectConnection.Execute(new Entities.Filters.ActiveConnection.Select(Context.ConnectionId, currentUserId));

            Entities.Filters.GamePlayerKickVote.SelectForGame kickVoteFilter = new Entities.Filters.GamePlayerKickVote.SelectForGame();
            kickVoteFilter.GameID = gameID;

            List <Entities.GamePlayerKickVote> votes = _selectVotes.Execute(kickVoteFilter);
            IEnumerable <IGrouping <Int32, Entities.GamePlayerKickVote> > grouped = votes.GroupBy(x => x.KickUserId);

            Entities.Models.Game.Board.VoteToKick kickModel = null;

            List <Entities.Models.Game.Board.VoteToKick> votesToKick = new List <Entities.Models.Game.Board.VoteToKick>();

            foreach (IGrouping <Int32, Entities.GamePlayerKickVote> group in grouped)
            {
                if (group.FirstOrDefault(x => x.VotedUserId == currentUserId) == null)
                {
                    kickModel = new Entities.Models.Game.Board.VoteToKick(group.First().KickUser,
                                                                          group.Count(x => x.Vote),
                                                                          group.Count(x => !x.Vote));

                    votesToKick.Add(kickModel);
                }
            }

            List <Entities.GameRound> completedRounds = _selectGameRound.Execute(new Entities.Filters.GameRound.SelectCompleted(gameID));

            Entities.Game game = _selectGame.Execute(new Entities.Filters.Game.Select
            {
                GameID       = gameID,
                DataToSelect = Entities.Enums.Game.Select.GamePlayerCards | Entities.Enums.Game.Select.Rounds
            });

            Entities.Enums.GamePlayerType playerType = (connection != null && connection.ConnectionType == Entities.Enums.ConnectionType.GamePlayer) ?
                                                       Entities.Enums.GamePlayerType.Player :
                                                       Entities.Enums.GamePlayerType.Spectator;

            Entities.Models.Game.Board.GameBoard model =
                new Entities.Models.Game.Board.GameBoard(game,
                                                         currentUserId,
                                                         playerType,
                                                         votesToKick,
                                                         completedRounds);

            Clients.Client(Context.ConnectionId).UpdateGameView(model, model.LobbyViewModel);
        }
Esempio n. 5
0
 public Lobby(Entities.Enums.GamePlayerType playerType,
              List <Entities.GamePlayer> players,
              Boolean showSpectators,
              List <Entities.GamePlayer> spectators)
 {
     this.PlayerType     = playerType;
     this.Players        = players;
     this.ShowSpectators = showSpectators;
     this.Spectators     = spectators;
 }
        public JsonResult Index(int id, string passphrase, Entities.Enums.GamePlayerType playerType)
        {
            bool validated = false;

            validated = _validatePassphrase.Execute(id, passphrase);

            string key = string.Format("Game_{0}_Passphrase", id);

            if (validated && !string.IsNullOrWhiteSpace(passphrase))
            {
                Session.Add(key, MachineKey.Protect(Encoding.ASCII.GetBytes(passphrase), Session.SessionID));
            }

            string url = Url.Action("Index", "Game", new { id = id });

            if (playerType == Entities.Enums.GamePlayerType.Spectator)
            {
                url = Url.Action("Spectate", "Game", new { id = id });
            }

            return(Json(new { Validated = validated, URL = url }));
        }
Esempio n. 7
0
        /// <summary>
        /// Action responsible for leaving a game
        /// </summary>
        /// <param name="id">The game id to leave</param>
        /// <param name="playerType">The type of player leaving</param>
        /// <returns>The view for game listing screen</returns>
        public ActionResult Index(Int32 id, Entities.Enums.GamePlayerType playerType, Boolean windowUnload = false)
        {
            Entities.User user = new Entities.User
            {
                UserId      = Authentication.Security.CurrentUserId,
                DisplayName = Authentication.Security.CurrentUserName
            };

            if (windowUnload)
            {
                String jobId = BackgroundJob.Schedule(() => _leaveGame.Execute(id, user.UserId, user.DisplayName, playerType), TimeSpan.FromSeconds(20));

                String key = String.Format("LeaveGame_{0}_JobId", id);

                Session.Add(key, MachineKey.Protect(Encoding.ASCII.GetBytes(jobId), Session.SessionID));
            }
            else
            {
                _leaveGame.Execute(id, user, playerType);
            }

            return(Redirect("/GameListing"));
        }
Esempio n. 8
0
        public static String Build(Entities.Game game, Int32 currentUserId, Entities.Enums.GamePlayerType playerType)
        {
            String waitingOnPlayers   = "{0} is waiting for {1} more {2}...";
            String commanderStartGame = "{0} can be started. {1}";
            String waitingOnHost      = "{0} waiting on commander to start game...";

            String headerText = String.Empty;

            if (game.HasRequiredNumberOfPlayers() == false)
            {
                Int32 shortNumberOfPlayers = game.NumberOfPlayersNeededToStart();

                headerText = string.Format(waitingOnPlayers,
                                           game.Title,
                                           shortNumberOfPlayers.ToString(),
                                           shortNumberOfPlayers == 1 ? "player" : "players");
            }
            else
            {
                if (game.IsCurrentCommander(currentUserId) && playerType == Entities.Enums.GamePlayerType.Player)
                {
                    TagBuilder startGame = new TagBuilder("a");
                    startGame.AddCssClass("button");
                    startGame.AddCssClass("startGameButton");
                    startGame.InnerHtml = "Start";
                    startGame.Attributes.Add("style", "font-size: .8em; cursor: pointer;");

                    headerText = string.Format(commanderStartGame, game.Title, startGame.ToString());
                }
                else
                {
                    headerText = string.Format(waitingOnHost, game.Title);
                }
            }

            return(headerText);
        }
Esempio n. 9
0
        /// <summary>
        /// Join a game
        /// </summary>
        /// <param name="gameID">The game to join</param>
        /// <param name="user">The current user</param>
        /// <param name="passphrase">The passphrase for the game</param>
        /// <param name="playerType">Type of player joining</param>
        /// <returns>The response to a join request</returns>
        public Entities.JoinResponse Execute(Entities.Game game, Entities.User user, String passphrase, Entities.Enums.GamePlayerType playerType)
        {
            Entities.JoinResponse response = new Entities.JoinResponse();

            Boolean wasWaiting = game.IsWaiting();

            if (game.GameOver.HasValue)
            {
                response.Result = Entities.Enums.Game.JoinResponseCode.GameOver;
            }
            else
            {
                if (playerType == Entities.Enums.GamePlayerType.Spectator)
                {
                    AsSpectator(game, user, passphrase, response);
                }
                else
                {
                    AsPlayer(game, user, passphrase, response, wasWaiting);
                }
            }

            return(response);
        }
Esempio n. 10
0
        /// <summary>
        /// Removes a player from the game
        /// </summary>
        /// <param name="gameID">The ID of the game to leave</param>
        /// <param name="user">The user leaving the game</param>
        /// <param name="playerType">Type of player leaving</param>
        /// <param name="forcedToLeave">The player was forced to leave</param>
        public void Execute(Int32 gameID, Entities.User user, Entities.Enums.GamePlayerType playerType, Boolean forcedToLeave = false)
        {
            Entities.Filters.Game.Select filter = new Entities.Filters.Game.Select();
            filter.GameID       = gameID;
            filter.DataToSelect = Entities.Enums.Game.Select.Rounds | Entities.Enums.Game.Select.GamePlayerCards;

            Entities.Game game = _selectGame.Execute(filter);

            Boolean wasWaiting = game.IsWaiting();

            Boolean wasCurrentCommander = game.IsCurrentCommander(user.UserId) && playerType == Entities.Enums.GamePlayerType.Player;

            Entities.GamePlayer player = null;

            if (playerType == Entities.Enums.GamePlayerType.Player)
            {
                player = game.Players.Find(x => x.User.UserId == user.UserId);
                game.Players.Remove(player);
                game.PlayerCount--;
            }
            else
            {
                player = game.Spectators.Find(x => x.User.UserId == user.UserId);

                game.Spectators.Remove(player);
                game.SpectatorCount--;
            }

            if (wasCurrentCommander)
            {
                if (game.HasRounds())
                {
                    Entities.GameRound current = game.CurrentRound();

                    if (!current.HasWinner())
                    {
                        game.Rounds.Remove(current);
                        game.RoundCount--;

                        Entities.Filters.GameRound.Delete deleteRoundFilter = new Entities.Filters.GameRound.Delete();
                        deleteRoundFilter.GameRoundID = current.GameRoundID;

                        _deleteRound.Execute(deleteRoundFilter);
                    }
                }

                Boolean started = false;

                if (game.PlayerCount > 0)
                {
                    started = _startRound.Execute(game, game.NextCommander(null));
                }

                if (game.HasRounds() && started)
                {
                    _sendMessage.CommanderLeft(game, user.DisplayName);
                }
                else
                {
                    _sendMessage.UpdateGame(game, true);
                }
            }
            else if (game.IsWaiting() && wasWaiting)
            {
                _sendMessage.UpdateWaiting(game, true);
            }
            else
            {
                if (game.HasRounds())
                {
                    Entities.GameRound current = game.CurrentRound();
                    current.CurrentPlayerCount--;

                    if (!game.Players.Any(x => x.Hand.Count > 0 && !current.IsCommander(x.User.UserId)))
                    {
                        if (!current.HasWinner() && current.Answers.Count == 0)
                        {
                            _dealCards.Execute(game, false);
                        }
                    }
                }

                _sendMessage.UpdateGame(game, true, (forcedToLeave ? (int?)user.UserId : null));
            }

            _leaveGame.Execute(gameID, user, playerType);
        }
Esempio n. 11
0
 /// <summary>
 /// Removes a player from the game
 /// </summary>
 /// <param name="gameID">The ID of the game to leave</param>
 /// <param name="userId">The user id of the user leaving the game</param>
 /// <param name="displayName">The user display name of the user leaving the game</param>
 /// <param name="playerType">Type of player leaving</param>
 public void Execute(Int32 gameID, Int32 userId, String displayName, Entities.Enums.GamePlayerType playerType)
 {
     this.Execute(gameID, new Entities.User {
         UserId = userId, DisplayName = displayName
     }, playerType, false);
 }
Esempio n. 12
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="game"></param>
        /// <param name="userId"></param>
        /// <param name="hand"></param>
        /// <param name="playerType"></param>
        /// <param name="voteToKickList"></param>
        /// <param name="completedRounds"></param>
        public GameBoard(Entities.Game game, Int32 userId, Entities.Enums.GamePlayerType playerType,
                         List <Models.Game.Board.VoteToKick> voteToKickList = null,
                         List <Entities.GameRound> completedRounds          = null)
        {
            Game   = game;
            UserId = userId;

            Hand = new List <GamePlayerCard>();

            if (playerType == Enums.GamePlayerType.Player)
            {
                Entities.GamePlayer player = Game.Players.FirstOrDefault(x => x.User.UserId == userId);

                if (player != null && player.Hand != null)
                {
                    Hand = player.Hand;
                }
            }


            Hand         = playerType == Enums.GamePlayerType.Player ? Game.Players.First(x => x.User.UserId == userId).Hand : new List <GamePlayerCard>();
            ActivePlayer = Hand.Count > 0;
            PlayerType   = playerType;

            Entities.GameRound round = Game.CurrentRound();

            if (Game.HasRounds() && round != null)
            {
                Answered       = round.HasAnswer(UserId);
                ShowAnswers    = round.PlayedCount >= round.CurrentPlayerCount && round.Answers.Count > 0;
                RoundHasWinner = round.Winner() != null;
                GroupedAnswers = round.GroupedAnswers();
                IsCommander    = Game.IsCurrentCommander(UserId) && PlayerType == Entities.Enums.GamePlayerType.Player;
            }
            else
            {
                Answered       = false;
                ShowAnswers    = false;
                RoundHasWinner = false;
                IsCommander    = false;
            }

            ShowHand = ActivePlayer && !Answered && !IsCommander && PlayerType == Entities.Enums.GamePlayerType.Player;

            ShowWaiting = (round == null || RoundHasWinner) && Game.IsWaiting();

            WaitingOnAllAnswersOrWinner = !RoundHasWinner && !ShowAnswers;

            ShowBoard = !ShowWaiting && !Game.HasWinner();

            if (ShowBoard && round != null)
            {
                Question = round.Question;
            }
            else
            {
                Question = null;
            }

            AnswersViewModel       = new Answers(RoundHasWinner, IsCommander, WaitingOnAllAnswersOrWinner, ShowAnswers, ShowHand, ShowBoard, GroupedAnswers);
            GameOverViewModel      = new GameOver(Game.HasWinner(), Game.GameID, Game.Players);
            HandViewModel          = new Board.Hand(ShowHand, Hand, ShowBoard);
            LobbyViewModel         = new Lobby(PlayerType, Game.Players, Game.MaxNumberOfSpectators > 0, Game.Spectators);
            RoundQuestionViewModel = new RoundQuestion(round, ShowBoard);
            WaitingViewModel       = new Waiting(ShowWaiting);
            VotesToKickViewModel   = new VotesToKick(voteToKickList ?? new List <Models.Game.Board.VoteToKick>());
            AllRoundsViewModel     = new AllRounds(completedRounds ?? new List <GameRound>());

            HeaderViewModel = new Shared.Header();

            if (Game.HasWinner())
            {
                HeaderViewModel.SubHeaderText = "Game Over, man!";
            }
            else if (ShowWaiting)
            {
                HeaderViewModel.SubHeaderText = ArmedCards.Entities.Models.Helpers.WaitingHeader.Build(Game, UserId, PlayerType);
            }
            else
            {
                HeaderViewModel.SubHeaderText = String.Format("{0} is the Card Commander", Game.DetermineCommander().DisplayName);
            }
        }
Esempio n. 13
0
 /// <summary>
 /// Removes a player from the game
 /// </summary>
 /// <param name="gameID">The ID of the game to leave</param>
 /// <param name="user">The user leaving the game</param>
 /// <param name="playerType">Type of player leaving</param>
 public void Execute(Int32 gameID, Entities.User user, Entities.Enums.GamePlayerType playerType)
 {
     _leaveGame.Execute(gameID, user, playerType);
 }