// Returns game chat rooms the user has any connections subscribed to to open them on page load. public static IList<ChatRoom> GetUserGameRooms(string userId, bool exceptDefaultRoom = false) { using (var context = new MagicDbContext()) { return context.ChatRoomConnections.Where(rc => rc.UserId == userId).Select(rc => rc.ChatRoom).Distinct().Where(r => r.IsGameRoom).ToList(); } }
private void GetStock(string id) { var dbContext = new MagicDbContext(); MagicRepository repository = new MagicRepository(dbContext); stock = repository.GetStock(int.Parse(id)); }
private void LoadAllStocks() { var dbContext = new MagicDbContext(); MagicRepository repository = new MagicRepository(dbContext); stocks = repository.GetAllStocks(); }
public List<string> GetPlayerGameConnections(string gameId) { var userId = Context.User.Identity.GetUserId(); using (var context = new MagicDbContext()) { return context.Connections.Where(c => c.UserId == userId && c.GameId == gameId).Select(c => c.Id).ToList(); } }
// Returns chat rooms in which user's online visibility is listed. public static IList<ChatRoom> GetChatRoomsWithUser(string userId) { using (var context = new MagicDbContext()) { var chatRooms = context.ChatRoomUsers.Where(ru => ru.UserId == userId).Select(rc => rc.ChatRoom).ToList(); return chatRooms; } }
private void ProcessSet(string response) { Clients.Caller.updateRequestProgress("Processing set data..."); var set = JsonConvert.DeserializeObject<CardSet>(response, new CardSetConverter()); using (var context = new MagicDbContext()) { context.InsertOrUpdate(set); } Clients.Caller.updateRequestProgress("Set data saved!"); }
private static void ClearDatabase() { using (var dbContext = new MagicDbContext()) { MagicRepository repository = new MagicRepository(dbContext); bool status = repository.ClearDatabase(); Console.WriteLine("Database Cleared: " + status); } }
private static void RemoveDuplicates() { using (var dbContext = new MagicDbContext()) { MagicRepository repository = new MagicRepository(dbContext); bool status = repository.RemoveDuplicates(); Console.WriteLine("Duplicates Removed: " + status); } }
// Returns non-game chat rooms the user has any connections subscribed to to open them on page load. public static IList<ChatRoom> GetUserChatRooms(string userId, bool exceptDefaultRoom = false) { using (var context = new MagicDbContext()) { var chatRooms = context.ChatRoomConnections.Where(rc => rc.UserId == userId).Select(rc => rc.ChatRoom).Distinct().Where(r => !r.IsGameRoom).ToList(); if (exceptDefaultRoom) { chatRooms.Remove(chatRooms.FirstOrDefault(r => r.Id == DefaultRoomId)); } return chatRooms; } }
// Returns user's friends and currently online users to populate the available user list when you want to create a chat room with multiple user's. public static IList<ChatUserViewModel> GetAvailableUsers(string userId) { using (var context = new MagicDbContext()) { var userWithRelations = context.Users.Where(u => u.Id == userId).Include(u => u.Relations.Select(r => r.RelatedUser)).First(); var usersFriends = userWithRelations.GetFriendsList().OrderBy(u => u.UserName); var defaultChatRoom = context.ChatRooms.Where(r => r.Id == DefaultRoomId).Include(r => r.Connections.Select(u => u.User)).First(); var activeUsers = defaultChatRoom.GetActiveUserList().OrderBy(u => u.UserName).ToList(); activeUsers.Remove(activeUsers.First(u => u.Id == userId)); return usersFriends.Union(activeUsers, new ChatUserViewModel_UserComparer()).ToList(); } }
private static void AddStocksToDatabase(List <Stock> stocks, int marketCap) { using (var dbContext = new MagicDbContext()) { MagicRepository repository = new MagicRepository(dbContext); foreach (Stock stock in stocks) { stock.MagicFormulaMarketCap = marketCap; repository.Add(stock); } bool b = repository.Save(); Console.WriteLine("Save status" + b); } }
public void AddCard(string cardId, PlayerCardLocation location) { using (var context = new MagicDbContext()) { var card = context.Cards.Find(cardId); Cards.Add(new PlayerCard { Card = card, GameId = GameId, UserId = UserId, Index = Cards.Count + 1, Location = location, }); context.InsertOrUpdate(this); } }
static void GetDataFromGuruFocus() { Console.WriteLine("*****Started Rule One ......"); IWebDriver driver = new ChromeDriver(); using (var dbContext = new MagicDbContext()) { MagicRepository repository = new MagicRepository(dbContext); var stocks = repository.GetGuruFocusStocks(); foreach (Stock stock in stocks) { GuruFocus.Start(driver, stock); repository.Save(); } } driver.Close(); driver.Quit(); }
private async void ProcessCards(string response) { Clients.Caller.updateRequestProgress("Processing card data..."); var cards = JArray.Parse(response).Select(c => JsonConvert.DeserializeObject<Card>(c.ToString(), new CardConverter())).ToList(); foreach (var card in cards) { var path = FetchCardImage(card.MultiverseId, card.Id); using (var context = new MagicDbContext()) { card.AssignTypes(context); card.DecodeManaCost(context); card.Image = await path; card.ImagePreview = card.Image.Replace(".jpg", ".jpeg"); context.InsertOrUpdate(card); } } Clients.Caller.updateRequestProgress("Card data saved!"); }
public void TogglePlayerReady(string gameId, bool isReady) { var userId = Context.User.Identity.GetUserId(); using (var context = new MagicDbContext()) { var player = context.Players.Find(userId, gameId); //DisplayPlayerReady(player.User, gameId, isReady); player.Status = isReady ? PlayerStatus.Ready : PlayerStatus.Unready; context.InsertOrUpdate(player, true); Clients.Group(gameId).togglePlayerReady(player.User.UserName, (isReady ? player.User.ColorCode : "")); var chatHubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); chatHubContext.Clients.Group(gameId).addMessage(gameId, DateTime.Now.ToString("HH:mm:ss"), player.User.UserName, player.User.ColorCode, (isReady ? " is ready for action." : " seems to be not prepared!")); if (!isReady || (player.Game.Players.Count(p => p.Player.Status == PlayerStatus.Ready) != player.Game.PlayerCapacity)) return; StartGame(gameId); } }
static void GetDataFromRuleOne(string username, string password) { Console.WriteLine("*****Started Rule One ......"); IWebDriver driver = new ChromeDriver(); RuleOne.RuleOneWebsite_Logon(driver, username, password); System.Threading.Thread.Sleep(1000); using (var dbContext = new MagicDbContext()) { MagicRepository repository = new MagicRepository(dbContext); var stocks = repository.GetRuleOneStocks(); foreach (Stock stock in stocks) { RuleOne.Start(driver, stock); repository.Save(); } } driver.Close(); driver.Quit(); }
// Returns the chat room's id if a private chat room exists for given users only. public string GetExistingChatRoomIdForUsers(string[] recipientNames) { using (var context = new MagicDbContext()) { var recipients = new List<User>(); foreach (var userName in recipientNames.Distinct()) { var user = context.Users.FirstOrDefault(u => u.UserName == userName); if (user == null) { Clients.Caller.addMessage(DefaultRoomId, DateTime.Now.ToString("HH:mm:ss"), "ServerInfo", "#000000", "User " + userName + " was not found!"); } else { recipients.Add(user); } } var recipientIds = recipients.Select(r => r.Id); var chatRoom = context.ChatRooms.Where(r => r.IsPrivate).ToList().FirstOrDefault(r => r.OnlySpecifiedUsersInRoom(recipientIds)); return chatRoom == null ? String.Empty : chatRoom.Id; } }
public void DrawHand(int cards = 7) { using (var context = new MagicDbContext()) { Shuffle(new Random()); for (var i = 0; i < cards; i++) { Cards.ElementAt(i).Location = PlayerCardLocation.Hand; } context.InsertOrUpdate(this); } }
// This function is called by schedule from Global.asax and uses the static context to save recent chat messages. //public static bool SaveChatLogToDatabase(ChatLog currentLog) //{ // ChatLog todayLog = context.ChatLogs.Find(currentLog.DateCreated);//context.Set<ChatLog>().AsNoTracking().FirstOrDefault(c => c.DateCreated == currentLog.DateCreated); // if (todayLog != null) // { // todayLog.AppendMessages(currentLog.Messages); // return context.InsertOrUpdate(todayLog, true); // } // // Create new log for Today. // todayLog = new ChatLog // { // Messages = currentLog.Messages // }; // return context.Insert(todayLog); //} #endregion CHATLOG HANDLING #region REMOVE INACTIVE USERS public static void RemoveInactiveConnections() { using (var context = new MagicDbContext()) { foreach (var connection in context.Connections) { context.Delete(connection); } } //context.Database.ExecuteSqlCommand("TRUNCATE TABLE [AspNetUserConnections]"); }
public void PutCardToGraveyard(int index) { using (var context = new MagicDbContext()) { Cards.ElementAt(index).Location = PlayerCardLocation.Graveyard; context.InsertOrUpdate(this); } }
// Create new chat room with given settings and for specific users only if it's private. public void CreateChatRoom(string roomId = null, bool isGameRoom = false, bool isPrivate = false, IList<string> recipientNames = null) { using (var context = new MagicDbContext()) { var chatRoom = new ChatRoom(roomId) { IsGameRoom = isGameRoom, IsPrivate = isPrivate, Name = (isGameRoom ? "Game" : null), TabColorCode = (isGameRoom ? string.Empty.AssignRandomColorCode() : null) }; context.Insert(chatRoom); if (!isPrivate) return; // TODO: check how recipients behave after chacking chatroom existance and if thee can be any null exception var recipients = recipientNames.Distinct().Select(userName => context.Users.FirstOrDefault(u => u.UserName == userName)).ToList(); foreach (var user in recipients) { AddUserToRoom(chatRoom.Id, user.Id); SubscribeActiveConnections(chatRoom.Id, user.Id); } } }
public async void SubscribeChatRoom(string roomId) { var chatHubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); var addToGroup = chatHubContext.Groups.Add(Context.ConnectionId, roomId); using (var context = new MagicDbContext()) { var chatRoomConnection = new ChatRoomConnection { ChatRoomId = roomId, ConnectionId = Context.ConnectionId, UserId = Context.User.Identity.GetUserId() }; context.Insert(chatRoomConnection); } await addToGroup; if (roomId != DefaultRoomId) { UpdateChatRoomUsers(roomId); } }
public static void ResetReadyStatus(string gameId) { using (var context = new MagicDbContext()) { var game = context.Games.Find(gameId); foreach (var player in game.Players.Select(p => p.Player)) { player.Status = PlayerStatus.Unready; } context.InsertOrUpdate(game, true); } var gameHubContext = GlobalHost.ConnectionManager.GetHubContext<GameHub>(); gameHubContext.Clients.Group(gameId).resetReadyStatus(); }
public CardController(MagicDbContext context) { _context = context; }
public AssistedDeckBuilder(MagicDbContext context) { _context = context; }
public static void SubscribeActiveConnections(string roomId, string userId) { using (var context = new MagicDbContext()) { var activeConnectionIds = context.Connections.Where(c => c.UserId == userId).Select(c => c.Id); var subscribedConnectionIds = context.ChatRoomConnections.Where(crc => crc.UserId == userId && crc.ChatRoomId == roomId).Select(crc => crc.ConnectionId); var unsubscribedConnectionIds = activeConnectionIds.Except(subscribedConnectionIds); if (!unsubscribedConnectionIds.Any()) return; var groupsProcessed = new List<Task>(); foreach (var connectionId in unsubscribedConnectionIds) { var chatRoomConnection = new ChatRoomConnection { ChatRoomId = roomId, ConnectionId = connectionId, UserId = userId }; var chatHubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); groupsProcessed.Add(chatHubContext.Groups.Add(connectionId, roomId)); context.Insert(chatRoomConnection); } Task.WhenAll(groupsProcessed.ToArray()); } }
public void AssignTypes(MagicDbContext context) { foreach (var typeName in typeNames) { var type = context.CardTypes.FirstOrDefault(t => t.Name == typeName); if (type != null) { Types.Add(type); } //else if (CardType.IsSuperType(typeName)) //{ // types.Add(new CardSuperType { Name = typeName }); //} else if (CardType.IsMainType(typeName)) { // Possibly old card with obsolete type, replace with newest value. var name = Enum.Parse(typeof(MainType), typeName).ToString(); type = context.CardTypes.FirstOrDefault(t => t.Name == name); Types.Add(type ?? new CardMainType { Name = typeName }); } else { Types.Add(new CardSubType { Name = typeName }); } } }
public void SetAsGameConnection(string gameId) { var userId = Context.User.Identity.GetUserId(); using (var context = new MagicDbContext()) { var connection = context.Connections.Find(Context.ConnectionId, userId); connection.GameId = gameId; context.InsertOrUpdate(connection, true); } }
public bool SubscribeGameChat(string roomId) { using (var context = new MagicDbContext()) { var chatRoom = context.ChatRooms.Find(roomId); var userId = Context.User.Identity.GetUserId(); bool isExistingUser = false; if (chatRoom == null) { var game = context.Games.Find(roomId); CreateChatRoom(roomId, true, game.IsPrivate, game.Players.Select(p => p.User.UserName).ToList()); //AddUserToRoom(roomId, userId); } else if (chatRoom.IsUserInRoom(userId)) { isExistingUser = true; } else if (chatRoom.IsUserAllowedToJoin(userId)) { //AddUserToRoom(roomId, userId); } else { System.Diagnostics.Debug.WriteLine("Can't join private game " + roomId); return false; } System.Diagnostics.Debug.WriteLine("Joining " + roomId); SetAsGameConnection(roomId); SubscribeActiveConnections(roomId, userId); // Send info message on joining group - also opens the chat tab for joining user. if (isExistingUser) { Clients.Caller.addMessage(roomId, DateTime.Now.ToString("HH:mm:ss"), chatRoom.Name, chatRoom.TabColorCode, " Welcome back!", true); } else { var user = context.Users.Find(userId); Clients.Group(roomId).addMessage(roomId, DateTime.Now.ToString("HH:mm:ss"), user.UserName, user.ColorCode, " entered the game.", true); } return true; } }
public TestController(MagicDbContext context) { _context = context; }
public void UnsubscribeChatRoom(string roomId) { using (var context = new MagicDbContext()) { var userId = Context.User.Identity.GetUserId(); var userConnections = context.ChatRoomConnections.Where(c => c.ChatRoomId == roomId && c.UserId == userId); var userConnectionIds = userConnections.Select(c => c.ConnectionId).ToList(); Clients.Clients(userConnectionIds).closeChatRoom(roomId); context.ChatRoomConnections.RemoveRange(userConnections); context.SaveChanges(); Task.WhenAll(userConnectionIds.Select(connectionId => Groups.Remove(connectionId, roomId)).ToArray()); } }
public void StartGame(string gameId) { System.Diagnostics.Debug.WriteLine("LET THE GAMES BEGIN!"); using (var context = new MagicDbContext()) { var game = context.Games.Find(gameId); if (game.DateStarted.HasValue) { game.DateResumed = DateTime.Now; } else { game.DateStarted = DateTime.Now; } foreach (var player in game.Players) { player.Status = GameStatus.InProgress; } context.InsertOrUpdate(game, true); Clients.Group(gameId).activateGame(); } }
public static async Task PauseGame(User user, string gameId, DateTime dateSuspended, CancellationToken token) { using (var context = new MagicDbContext()) { var gameHubContext = GlobalHost.ConnectionManager.GetHubContext<GameHub>(); gameHubContext.Clients.Group(gameId).pauseGame("has paused the game.", user.UserName, user.ColorCode); var pause = Task.Delay(10000, token); var chatRoom = context.ChatRooms.Find(gameId); var chatHubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); chatHubContext.Clients.Group(gameId).addMessage(gameId, DateTime.Now.ToString("HH:mm:ss"), user.UserName, user.ColorCode, "has paused the game."); var game = context.Games.Find(gameId); game.UpdateTimePlayed(dateSuspended); try { await pause; } catch (OperationCanceledException) { } finally { game.DateResumed = DateTime.Now; gameHubContext.Clients.Group(gameId).activateGame(game.TimePlayed.ToTotalHoursString()); context.InsertOrUpdate(game, true); } } }
public async static Task LeaveGame(UserConnection connection) { var dateSuspended = DateTime.Now; var gameHubContext = GlobalHost.ConnectionManager.GetHubContext<GameHub>(); gameHubContext.Groups.Remove(connection.Id, connection.GameId); gameHubContext.Clients.Group(connection.GameId).userLeft(connection.User.UserName); using (var context = new MagicDbContext()) { var game = context.Games.Find(connection.GameId); if (game.Players.All(p => p.UserId != connection.UserId)) { // Remove observer who left. game.Observers.Remove(game.Observers.First(o => o.Id == connection.UserId)); return; } if (game.DateStarted.HasValue && !game.DateEnded.HasValue) { // TODO: STOP THE GAME, A PLAYER IS MISSING! Ask players to start game timeout? game.UpdateTimePlayed(dateSuspended); game.DateResumed = null; gameHubContext.Clients.Group(connection.GameId).pauseGame("has fled the battle!", connection.User.UserName, connection.User.ColorCode); var chatHubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); chatHubContext.Clients.Group(connection.GameId).addMessage(connection.GameId, DateTime.Now.ToString("HH:mm:ss"), connection.User.UserName, connection.User.ColorCode, "has fled the battle, the game will be interrupted."); var playerStatus = game.Players.First(ps => ps.UserId == connection.UserId); playerStatus.Status = GameStatus.Unfinished; playerStatus.Player.Status = PlayerStatus.Missing; context.InsertOrUpdate(game, true); } else { var playerStatus = context.GameStatuses.Find(connection.UserId, connection.GameId); context.Delete(playerStatus, true); ResetReadyStatus(game.Id); } } }
public override Task OnConnected() { using (var context = new MagicDbContext()) { var userId = Context.User.Identity.GetUserId(); var foundUser = context.Users.Find(userId); var connection = new UserConnection { Id = Context.ConnectionId, UserId = userId }; context.Connections.Add(connection); context.SaveChanges(); SubscribeChatRoom(DefaultRoomId); if (foundUser.Connections.Count == 1) { // If this is the user's only connection broadcast a chat info. UserStatusUpdate(userId, UserStatus.Online, DefaultRoomId); } UpdateChatRoomUsers(DefaultRoomId); foreach (var chatRoom in GetChatRoomsWithUser(userId)) { UpdateChatRoomUsers(chatRoom.Id); } SubscribeActiveChatRooms(Context.ConnectionId, userId); // TODO: What when: user disconnects, other user has private chat tab open, user connects again - chat tab is unsubscribed, typing message does not notify receiving user? // Solution: use message notifications for that - partially implemented. } System.Diagnostics.Debug.WriteLine("Connected: " + Context.ConnectionId); return base.OnConnected(); }
public void ReturnToHand(CardViewModel target, string gameId) { using (var context = new MagicDbContext()) { var player = context.Players.Find(target.CasterId, gameId); //player.Deck. } }
public void UnsubscribeGameChat() { using (var context = new MagicDbContext()) { var userId = Context.User.Identity.GetUserId(); var connection = context.Connections.Find(Context.ConnectionId, userId); var hasOtherGameConnections = context.Connections.Count(c => c.GameId == connection.GameId && c.UserId == userId) > 1; if (hasOtherGameConnections) return; GameHub.LeaveGame(connection); var roomId = connection.GameId; UnsubscribeChatRoom(roomId); System.Diagnostics.Debug.WriteLine("Unsubscribing " + roomId); // Sent info message on leaving group. var user = context.Users.Find(userId); Clients.Group(roomId).addMessage(roomId, DateTime.Now.ToString("HH:mm:ss"), user.UserName, user.ColorCode, (" left the game."), true); } }
public void SubscribeActiveChatRooms(string connectionId, string userId) { using (var context = new MagicDbContext()) { var activeChatRoomIds = context.ChatRoomConnections.Where(rc => rc.UserId == userId && rc.ChatRoomId != DefaultRoomId).Select(rc => rc.ChatRoomId).Distinct(); foreach (var roomId in activeChatRoomIds) { var chatRoomConnection = new ChatRoomConnection { ChatRoomId = roomId, ConnectionId = connectionId, UserId = userId }; Groups.Add(connectionId, roomId); context.Insert(chatRoomConnection); } } }
private async void DeleteConnection() { await Task.Delay(1500); using (var context = new MagicDbContext()) { var connection = context.Connections.FirstOrDefault(c => c.Id == Context.ConnectionId); if (connection == null) return; if (!string.IsNullOrWhiteSpace(connection.GameId)) { UnsubscribeGameChat(); } System.Diagnostics.Debug.WriteLine("Disconnected: " + connection.Id); var isLastConnection = connection.User.Connections.Count == 1; if (!isLastConnection) { context.Delete(connection, true); return; } // If this is the user's last connection update chat room users. var userId = connection.User.Id; var chatRooms = GetUserChatRooms(userId); context.Delete(connection, true); UserStatusUpdate(userId, UserStatus.Offline, DefaultRoomId); foreach (var chatRoom in chatRooms) { UpdateChatRoomUsers(chatRoom.Id); } //if (connection.GetType() == typeof(ApplicationUserGameConnection)) //{ // //SubscribeGameChat(connection.ChatRoomId, false); // //GameHub.DisplayUserLeft(connection.User.UserName, connection.ChatRoomId); // GameHub.LeaveGame((ApplicationUserGameConnection) connection); //} } }
public DragNDrop(MagicDbContext context) { _context = context; }
public HomeController(MagicDbContext context) { _context = context; }
public void DecodeManaCost(MagicDbContext context) { var mana = new List<CardManaCost> { new CardManaCost { ColorId = context.ManaColors.First(c => c.Name == "Black").Id, Cost = manaCode.Count(c => c == 'B') }, new CardManaCost { ColorId = context.ManaColors.First(c => c.Name == "Blue").Id, Cost = manaCode.Count(c => c == 'U') }, new CardManaCost { ColorId = context.ManaColors.First(c => c.Name == "Green").Id, Cost = manaCode.Count(c => c == 'G') }, new CardManaCost { ColorId = context.ManaColors.First(c => c.Name == "Red").Id, Cost = manaCode.Count(c => c == 'R') }, new CardManaCost { ColorId = context.ManaColors.First(c => c.Name == "White").Id, Cost = manaCode.Count(c => c == 'W') } }; int colorless; if (int.TryParse(Regex.Match(manaCode, "[0-9]*").Value, out colorless)) { mana.Add(new CardManaCost { ColorId = context.ManaColors.First(c => c.Name == "Colorless").Id, Cost = colorless }); } // TODO: Fix this to enable hybrids. //var codes = new[] { "B", "U", "G", "R", "W" }; //foreach (Match hybrid in Regex.Matches(manaCode, @"(./.)")) //{ // var color = hybrid.Value.Substring(0, 1); // var hybridColor = hybrid.Value.Substring(2, 1); // mana.Add(new HybridManaCost // { // Color = context.ManaColors.FirstOrDefault(c => c.Name == Enum.Parse(typeof(Color), color).ToString()), // HybridColor = context.ManaColors.FirstOrDefault(c => c.Name == Enum.Parse(typeof(Color), color).ToString()), // Cost = 1 // }); //} Colors = mana.Where(m => m.Cost > 0).ToList(); }
public NewUserController(MagicDbContext context) { _context = context; }