public ActionResult SwitchPlayerCards(string key, int firstCard, int secondCard) { var playerId = GetPlayerId(); using (LittleGoatEntities entities = new LittleGoatEntities()) { var serie = entities.Serie.FirstOrDefault(p => p.Id == key); if (serie == null || !serie.Started) { return(Json(new { ok = false, errorMessage = Resources.an_error_occured })); } var currentPlayer = serie.SeriePlayers.FirstOrDefault(p => p.PlayerId == playerId); if (currentPlayer == null) { return(Json(new { ok = false, errorMessage = Resources.an_error_occured })); } var game = entities.Game.Single(p => p.SerieId == key && p.Ended == false); var playerCards = entities.GameCard.Where(p => p.GameId == game.Id && p.PlayerId == playerId).OrderBy(p => p.Position).ToArray(); var firstCardPosition = playerCards[firstCard].Position; var secondCardPosition = playerCards[secondCard].Position; playerCards[firstCard].Position = secondCardPosition; playerCards[secondCard].Position = firstCardPosition; entities.SaveChanges(); return(Json(new { ok = true, errorMessage = string.Empty })); } }
public ActionResult Create() { string playerId = Request.Cookies["playerId"]?.Value; if (string.IsNullOrWhiteSpace(playerId)) { return(RedirectToAction("ChooseName", "Account", new { returnUrl = Url.Action("Create", "Serie", null, "http") })); } using (LittleGoatEntities entities = new LittleGoatEntities()) { var creator = entities.Player.FirstOrDefault(p => p.Id == playerId); if (creator == null) { CleanCookie(); return(RedirectToAction("ChooseName", new { returnUrl = Url.Action("Create", "Serie", null, "http") })); } var serie = new Serie() { CreationDate = DateTime.UtcNow, Ended = false, CreatorId = creator.Id, Id = Guid.NewGuid().ToString(), Started = false }; entities.Serie.Add(serie); serie.SeriePlayers.Add(new SeriePlayers() { SerieId = serie.Id, PlayerId = playerId, Position = 0 }); entities.SaveChanges(); return(RedirectToAction("New", "Serie", new { key = serie.Id })); } }
public override void OnActionExecuting(ActionExecutingContext filterContext) { string playerId = HttpContext.Current.Request.Cookies["playerId"]?.Value; if (string.IsNullOrEmpty(playerId)) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "action", "ChooseName" }, { "controller", "Account" }, { "returnUrl", HttpContext.Current.Request.RawUrl } }); } using (LittleGoatEntities entities = new LittleGoatEntities()) { var existingPlayer = entities.Player.FirstOrDefault(p => p.Id == playerId); if (existingPlayer == null) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "action", "ChooseName" }, { "controller", "Account" }, { "returnUrl", HttpContext.Current.Request.RawUrl } }); } } }
public ActionResult ChooseName(ChooseNameViewModel model) { if (string.IsNullOrWhiteSpace(model.Name)) { ViewBag.ErrorMessage = Resources.name_cant_be_empty; return(View(model)); } if (!string.IsNullOrWhiteSpace(model.Email) && !IsValidEmail(model.Email)) { ViewBag.ErrorMessage = Resources.invalid_email; return(View(model)); } using (LittleGoatEntities entities = new LittleGoatEntities()) { if (entities.Player.Any(p => p.Name.ToLower() == model.Name.ToLower())) { ViewBag.ErrorMessage = Resources.name_already_used; return(View(model)); } else if (!string.IsNullOrWhiteSpace(model.Email) && entities.Player.Any(p => p.Email.Trim().ToLower() == model.Email.Trim().ToLower())) { ViewBag.ErrorMessage = Resources.email_already_used; return(View(model)); } Player player; string playerId = Request.Cookies["playerId"]?.Value; if (playerId == null || entities.Player.FirstOrDefault(p => p.Id == playerId) == null) { player = new Player() { Id = Guid.NewGuid().ToString(), Name = model.Name.Trim(), Email = model.Email?.Trim() }; entities.Player.Add(player); Response.Cookies["playerId"].Value = player.Id; Response.Cookies["playerId"].Expires = DateTime.UtcNow.AddYears(10); } else { entities.Player.Single(p => p.Id == playerId).Name = model.Name; } entities.SaveChanges(); } if (!string.IsNullOrEmpty(model.ReturnUrl)) { return(Redirect(model.ReturnUrl)); } else { return(RedirectToAction("Index", "Home")); } }
public ActionResult Play(string key) { var playerId = GetPlayerId(); var model = new PlayViewModel(); model.SerieId = key; model.FirstTwoCards = new List <GameCard>(); using (LittleGoatEntities entities = new LittleGoatEntities()) { var serie = entities.Serie.FirstOrDefault(p => p.Id == key); if (serie == null || !serie.Started) { return(RedirectToAction("New", "Serie", new { key })); } var currentPlayer = serie.SeriePlayers.FirstOrDefault(p => p.PlayerId == playerId); if (currentPlayer == null) { return(RedirectToAction("Index", "Home")); } var game = entities.Game.Single(p => p.SerieId == key && p.Ended == false); model.DateStopShowFirstTwoCards = game.CreationDate.AddSeconds(NB_SECONDS_TO_SHOW_FIRST_TWO_CARDS); if (game.CreationDate.AddSeconds(NB_SECONDS_TO_SHOW_FIRST_TWO_CARDS) >= DateTime.UtcNow) { model.FirstTwoCards = entities.GameCard.Where(p => p.GameId == game.Id && p.PlayerId == playerId).OrderBy(p => p.Position).Take(2).ToList(); } model.CardFromDeck = entities.GameCard .Where(p => p.GameId == game.Id && p.PlayerId == null) .OrderBy(p => p.Position) .FirstOrDefault(); model.NextExpectedAction = string.Format(Resources.next_to_play_1, game.Player2.Name); model.LastChatMessages = entities.SerieChat .Where(p => p.SerieId == key) .OrderByDescending(p => p.Id) .Select(p => new ChatMessage() { Id = p.Id, Date = p.Date, Message = p.Message, PlayerId = p.PlayerId, PlayerName = p.Player.Name }) .Take(30) .OrderBy(p => p.Date) .ToList(); } return(View(model)); }
public ActionResult New(string key) { var playerId = GetPlayerId(); using (LittleGoatEntities entities = new LittleGoatEntities()) { var serie = entities.Serie.Single(p => p.Id == key); var player = entities.Player.Single(p => p.Id == playerId); var seriePlayers = serie.SeriePlayers.ToList(); int position = seriePlayers.Max(p => p.Position) + 1; if (!seriePlayers.Any(p => p.PlayerId == playerId)) { serie.SeriePlayers.Add(new SeriePlayers() { PlayerId = player.Id, SerieId = key, Position = position }); } entities.SaveChanges(); var players = entities.SeriePlayers.Where(p => p.SerieId == key).Select(p => p.Player.Name).ToList(); var lastChatMessages = entities.SerieChat .Where(p => p.SerieId == key) .OrderByDescending(p => p.Id) .Select(p => new ChatMessage() { Id = p.Id, Date = p.Date, Message = p.Message, PlayerId = p.PlayerId, PlayerName = p.Player.Name }) .Take(30) .OrderBy(p => p.Date) .ToList(); if (TempData["ErrorMessage"] != null) { ViewBag.ErrorMessage = TempData["ErrorMessage"]; } return(View(new NewSerieViewModel() { Key = key, IsCreator = serie.CreatorId == playerId, Players = players, CurrentPlayerName = player.Name, LastChatMessages = lastChatMessages })); } }
public ActionResult JoinLastGame() { var playerId = GetPlayerId(); using (LittleGoatEntities entities = new LittleGoatEntities()) { var seriePlayers = entities.SeriePlayers.Where(p => p.PlayerId == playerId)?.Select(p => p.Serie); var games = seriePlayers?.SelectMany(p => p.Game)?.ToList(); var lastGame = games?.OrderByDescending(p => p.CreationDate)?.FirstOrDefault(); if (lastGame == null) { return(RedirectToAction("Index", "Home")); } return(RedirectToAction("Play", "Game", new { key = lastGame.SerieId })); } }
public void BroadcastChatMessageToGroup(string group, string message) { var playerId = HttpContext.Current.Request.Cookies["playerId"].Value; message = HttpUtility.HtmlEncode(message); using (var entities = new LittleGoatEntities()) { var player = entities.Player.Single(p => p.Id == playerId); var lastMessage = entities.SerieChat.Where(p => p.SerieId == group).OrderByDescending(p => p.Id).FirstOrDefault(); if (lastMessage != null && lastMessage.PlayerId == player.Id) { lastMessage.Message += "<br />" + message; entities.SaveChanges(); Clients.Group(group).newChatMessageUpdated(lastMessage.Id, lastMessage.Message); } else { var serieChat = new SerieChat() { Date = DateTime.UtcNow, Message = message, PlayerId = player.Id, SerieId = group }; entities.SerieChat.Add(serieChat); entities.SaveChanges(); Clients.Group(group).newChatMessageReceived(serieChat.Id, serieChat.Date.ToString("dd/MM HH:mm"), player.Name, HtmlHelperExtensions.GetPlaceHolderLinkForAvatar(player.Name), message); } } }
public ActionResult New(NewSerieViewModel model) { var playerId = GetPlayerId(); Random r = new Random(); using (LittleGoatEntities entities = new LittleGoatEntities()) { var serie = entities.Serie.Single(p => p.Id == model.Key); if (serie.CreatorId != playerId) { TempData["ErrorMessage"] = Resources.you_cant_start_the_game_only_creator; return(RedirectToAction("New", "Serie", new { key = model.Key })); } var players = serie.SeriePlayers.ToList(); if (players.Count < 2) { TempData["ErrorMessage"] = Resources.you_cant_play_alone; return(RedirectToAction("New", "Serie", new { key = model.Key })); } serie.Started = true; entities.SaveChanges(); foreach (var game in entities.Game.Where(p => p.SerieId == serie.Id)) { game.Ended = true; } entities.SaveChanges(); string cardGiverId = players[r.Next(0, players.Count)].PlayerId; var newGame = new Game() { CreationDate = DateTime.UtcNow, Ended = false, LittleGoatCallerId = null, SerieId = serie.Id, CardGiverId = cardGiverId, NextToPlayId = cardGiverId }; entities.Game.Add(newGame); entities.SaveChanges(); var cards = Cards.AllCards.GetAllCards(); List <GameCard> gameCards = new List <GameCard>(); int position = 0; while (cards.Any()) { var nextCard = cards[r.Next(0, cards.Count)]; cards.Remove(nextCard); gameCards.Add(new GameCard() { Value = (int)nextCard.Value, Symbol = (int)nextCard.Symbol, Position = position, IsCover = false, PlayerId = null, GameId = newGame.Id, FileName = nextCard.FileName, }); position++; } entities.GameCard.AddRange(gameCards); entities.SaveChanges(); var cardsToDistribute = gameCards.OrderBy(p => p.Position).Take(players.Count * 4).ToArray(); for (int i = 0; i < cardsToDistribute.Length; i++) { var targetPlayer = players.Single(p => p.Position == i % players.Count); cardsToDistribute[i].PlayerId = targetPlayer.PlayerId; } entities.SaveChanges(); } SerieHub.StartGame(model.Key); return(RedirectToAction("Play", "Game", new { key = model.Key })); }