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); } }
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); }
/// <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); } }
/// <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); } }
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); }
/// <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); }
/// <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; }
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); }
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); }
/// <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); }
/// <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; }
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)); }
private Entities.Enums.GamePlayerType GetPlayerType(Entities.ActiveConnection connection) { return(connection.ConnectionType == Entities.Enums.ConnectionType.GamePlayer ? Entities.Enums.GamePlayerType.Player : Entities.Enums.GamePlayerType.Spectator); }
/// <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))); }
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; }
/// <summary> /// Insert a active connection /// </summary> /// <param name="connection">The connection to insert</param> public void Execute(Entities.ActiveConnection connection) { _insertActiveConnection.Execute(connection); }