コード例 #1
0
        public void Join(Int32?gameID, Entities.Enums.ConnectionType connectionType)
        {
            String groupName = GLOBAL;

            if (gameID.HasValue)
            {
                groupName = String.Format("Game_{0}", gameID.Value);
            }

            Entities.ActiveConnection newConnection = InsertConnection(groupName, connectionType);

            Entities.Models.Hub.Lobby lobby = new Entities.Models.Hub.Lobby
            {
                ActiveConnections = GetConnections(groupName, connectionType)
            };

            if (gameID.HasValue)
            {
                this.Groups.Add(Context.ConnectionId, groupName);
                Clients.Group(groupName).UpdateLobby(lobby);
            }
            else
            {
                Clients.All.UpdateLobby(lobby.ActiveConnections);
            }
        }
コード例 #2
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);
        }
コード例 #3
0
ファイル: SendMessage.cs プロジェクト: kwmcrell/ArmedCards
        /// <summary>
        /// Update most of the game view
        /// </summary>
        /// <param name="game">The game to update</param>
        /// <param name="sendToSpectators">Should this update go to the spectators</param>
        /// <param name="forcedToLeaveUserId">The player was forced to leave</param>
        public void UpdateGame(Entities.Game game, Boolean sendToSpectators, Int32?forcedToLeaveUserId)
        {
            Entities.ActiveConnection excluded = Execute(game, Entities.Enums.Hubs.Actions.UpdateGameView, sendToSpectators, forcedToLeaveUserId);

            if (excluded != null)
            {
                _hub.Clients.Client(excluded.ActiveConnectionID).ForceLeave();
                _hub.Groups.Remove(excluded.ActiveConnectionID, excluded.GroupName);
            }
        }
コード例 #4
0
ファイル: Insert.cs プロジェクト: kwmcrell/ArmedCards
        /// <summary>
        /// Insert a active connection
        /// </summary>
        /// <param name="connection">The connection to insert</param>
        public void Execute(Entities.ActiveConnection connection)
        {
            using (DbCommand cmd = db.GetStoredProcCommand("ActiveConnection_Insert"))
            {
                db.AddInParameter(cmd, "@ActiveConnectionID", DbType.String, connection.ActiveConnectionID);
                db.AddInParameter(cmd, "@GroupName", DbType.String, connection.GroupName);
                db.AddInParameter(cmd, "@User_UserId", DbType.Int32, connection.User_UserId);
                db.AddInParameter(cmd, "@ConnectionType", DbType.Int32, connection.ConnectionType);

                db.ExecuteScalar(cmd);
            }
        }
コード例 #5
0
        public void Disconnect()
        {
            AS.ActiveConnection.Base.IDelete _deleteConnection = BusinessLogic.UnityConfig.Container.Resolve <AS.ActiveConnection.Base.IDelete>();

            Entities.Filters.ActiveConnection.Delete filter = new Entities.Filters.ActiveConnection.Delete
            {
                ActiveConnectionID = Context.ConnectionId
            };

            Entities.ActiveConnection connection = _deleteConnection.Execute(filter);

            Clients.All.RemoveConnection(connection);
        }
コード例 #6
0
ファイル: Delete.cs プロジェクト: kwmcrell/ArmedCards
        /// <summary>
        /// Delete a active connection based on <paramref name="filter"/>
        /// </summary>
        /// <param name="filter">Filter used to determine what to delete</param>
        /// <returns>The Deleted Connection</returns>
        public Entities.ActiveConnection Execute(Entities.Filters.ActiveConnection.Delete filter)
        {
            Entities.ActiveConnection connection = new Entities.ActiveConnection();

            using (DbCommand cmd = _db.GetStoredProcCommand("ActiveConnection_Delete"))
            {
                _db.AddInParameter(cmd, "@ActiveConnectionID", DbType.String, filter.ActiveConnectionID);

                using (IDataReader idr = _db.ExecuteReader(cmd))
                {
                    while (idr.Read())
                    {
                        connection = new Entities.ActiveConnection(idr);
                    }
                }
            }

            return(connection);
        }
コード例 #7
0
ファイル: Delete.cs プロジェクト: kwmcrell/ArmedCards
        /// <summary>
        /// Delete a active connection based on <paramref name="filter"/>
        /// </summary>
        /// <param name="filter">Filter used to determine what to delete</param>
        /// <returns>The Deleted Connection</returns>
        public Entities.ActiveConnection Execute(Entities.Filters.ActiveConnection.Delete filter)
        {
            Entities.ActiveConnection connection = new Entities.ActiveConnection();

            using (DbCommand cmd = _db.GetStoredProcCommand("ActiveConnection_Delete"))
            {
                _db.AddInParameter(cmd, "@ActiveConnectionID", DbType.String, filter.ActiveConnectionID);

                using (IDataReader idr = _db.ExecuteReader(cmd))
                {
                    while (idr.Read())
                    {
                        connection = new Entities.ActiveConnection(idr);
                    }
                }
            }

            return connection;
        }
コード例 #8
0
        private Entities.ActiveConnection InsertConnection(String groupName, Entities.Enums.ConnectionType connectionType)
        {
            Int32 userId = Authentication.Security.CurrentUserId;

            if (userId > 0)
            {
                AS.ActiveConnection.Base.IInsert _insertConnection = BusinessLogic.UnityConfig.Container.Resolve <AS.ActiveConnection.Base.IInsert>();

                Entities.ActiveConnection connection = new Entities.ActiveConnection
                {
                    ActiveConnectionID = Context.ConnectionId,
                    GroupName          = groupName,
                    User_UserId        = userId,
                    ConnectionType     = connectionType
                };

                _insertConnection.Execute(connection);

                return(connection);
            }

            return(null);
        }
コード例 #9
0
ファイル: SendMessage.cs プロジェクト: kwmcrell/ArmedCards
        private Entities.ActiveConnection Execute(Entities.Game game, Entities.Enums.Hubs.Actions action, Boolean sendToSpectators,
                                                  Int32?excludedPlayerId = null)
        {
            Entities.Filters.ActiveConnection.SelectAll filter = new Entities.Filters.ActiveConnection.SelectAll();
            filter.GroupName = String.Format("Game_{0}", game.GameID);

            List <Entities.ActiveConnection> connections = _selectActiveConnection.Execute(filter);

            Entities.ActiveConnection excludedConnection = null;

            if (excludedPlayerId.HasValue)
            {
                excludedConnection = connections.DefaultIfEmpty(null).FirstOrDefault(x => x.User_UserId == excludedPlayerId);
            }

            ExecuteAction(game, action, connections.Where(x => x.ConnectionType == Entities.Enums.ConnectionType.GamePlayer), game.Players);

            if (sendToSpectators)
            {
                ExecuteAction(game, action, connections.Where(x => x.ConnectionType == Entities.Enums.ConnectionType.GameSpectator), game.Spectators);
            }

            return(excludedConnection);
        }
コード例 #10
0
        /// <summary>
        /// Return all active connections that match the filter
        /// </summary>
        /// <param name="filter">The filter used to select active connections</param>
        /// <returns>A list of active connections</returns>
        public List <Entities.ActiveConnection> Execute(Entities.Filters.ActiveConnection.SelectAll filter)
        {
            List <Entities.ActiveConnection> activeConnections = new List <Entities.ActiveConnection>();

            using (DbCommand cmd = _db.GetStoredProcCommand("ActiveConnection_Select"))
            {
                if (!String.IsNullOrWhiteSpace(filter.GroupName))
                {
                    _db.AddInParameter(cmd, "@GroupName", DbType.String, filter.GroupName);
                }

                if (filter.ExcludeUsers != null && filter.ExcludeUsers.Count > 0)
                {
                    _db.AddInParameter(cmd, "@ExcludeUserIds", DbType.Xml, filter.ExcludeUsers.ConvertCollectionToXML());
                }

                if (filter.ConnectionType > 0)
                {
                    _db.AddInParameter(cmd, "@ConnectionType", DbType.Int32, filter.ConnectionType);
                }

                using (IDataReader idr = _db.ExecuteReader(cmd))
                {
                    Entities.ActiveConnection connection = null;

                    while (idr.Read())
                    {
                        connection = new Entities.ActiveConnection(idr);

                        activeConnections.Add(connection);
                    }
                }
            }

            return(activeConnections);
        }
コード例 #11
0
ファイル: Select.cs プロジェクト: kwmcrell/ArmedCards
        /// <summary>
        /// Return all active connections that match the filter
        /// </summary>
        /// <param name="filter">The filter used to select active connections</param>
        /// <returns>A list of active connections</returns>
        public List<Entities.ActiveConnection> Execute(Entities.Filters.ActiveConnection.SelectAll filter)
        {
            List<Entities.ActiveConnection> activeConnections = new List<Entities.ActiveConnection>();

            using (DbCommand cmd = _db.GetStoredProcCommand("ActiveConnection_Select"))
            {
                if (!String.IsNullOrWhiteSpace(filter.GroupName))
                {
                    _db.AddInParameter(cmd, "@GroupName", DbType.String, filter.GroupName);
                }

                if (filter.ExcludeUsers != null && filter.ExcludeUsers.Count > 0)
                {
                    _db.AddInParameter(cmd, "@ExcludeUserIds", DbType.Xml, filter.ExcludeUsers.ConvertCollectionToXML());
                }

                if (filter.ConnectionType > 0)
                {
                    _db.AddInParameter(cmd, "@ConnectionType", DbType.Int32, filter.ConnectionType);
                }

                using (IDataReader idr = _db.ExecuteReader(cmd))
                {
                    Entities.ActiveConnection connection = null;

                    while (idr.Read())
                    {
                        connection = new Entities.ActiveConnection(idr);

                        activeConnections.Add(connection);
                    }
                }
            }

            return activeConnections;
        }
コード例 #12
0
ファイル: SendMessage.cs プロジェクト: kwmcrell/ArmedCards
 private Entities.Models.Game.Board.Lobby GetGameLobbyViewModel(Entities.ActiveConnection connection, Entities.Game game)
 {
     return(new Entities.Models.Game.Board.Lobby(GetPlayerType(connection), game.Players, game.MaxNumberOfSpectators > 0, game.Spectators));
 }
コード例 #13
0
ファイル: SendMessage.cs プロジェクト: kwmcrell/ArmedCards
 private Entities.Enums.GamePlayerType GetPlayerType(Entities.ActiveConnection connection)
 {
     return(connection.ConnectionType == Entities.Enums.ConnectionType.GamePlayer ?
            Entities.Enums.GamePlayerType.Player :
            Entities.Enums.GamePlayerType.Spectator);
 }
コード例 #14
0
ファイル: SendMessage.cs プロジェクト: kwmcrell/ArmedCards
 /// <summary>
 /// Get a gameboard model
 /// </summary>
 /// <param name="connection">The connection the message is being sent to</param>
 /// <param name="game">The game to render the view for</param>
 /// <param name="commanderLeft">Commander left game</param>
 /// <returns></returns>
 private Entities.Models.Game.Board.GameBoard GetGameBoardModal(Entities.ActiveConnection connection, Entities.Game game)
 {
     return(new Entities.Models.Game.Board.GameBoard(game, connection.User_UserId, GetPlayerType(connection)));
 }
コード例 #15
0
ファイル: ArmedCards.cs プロジェクト: kwmcrell/ArmedCards
        private Entities.ActiveConnection InsertConnection(String groupName, Entities.Enums.ConnectionType connectionType)
        {
            Int32 userId = Authentication.Security.CurrentUserId;

            if (userId > 0)
            {
                AS.ActiveConnection.Base.IInsert _insertConnection = BusinessLogic.UnityConfig.Container.Resolve<AS.ActiveConnection.Base.IInsert>();

                Entities.ActiveConnection connection = new Entities.ActiveConnection
                {
                    ActiveConnectionID = Context.ConnectionId,
                    GroupName = groupName,
                    User_UserId = userId,
                    ConnectionType = connectionType
                };

                _insertConnection.Execute(connection);

                return connection;
            }

            return null;
        }
コード例 #16
0
 /// <summary>
 /// Insert a active connection
 /// </summary>
 /// <param name="connection">The connection to insert</param>
 public void Execute(Entities.ActiveConnection connection)
 {
     _insertActiveConnection.Execute(connection);
 }