public IActionResult Lobby()
        {
            if (!_signInManager.IsSignedIn(User))
            {
                return(RedirectToAction("Login", "Account"));
            }
            RefreshUser(User);

            var uid = _signInManager.UserManager.GetUserId(User);

            var friends    = _GameRepo.GetFriendList(uid);
            var lobbyUsers = _GameRepo.GetPlayerLobby(uid);
            var games      = _GameRepo.GetUserGameList(uid);

            FriendsPartialViewModel friendsAndGames = new FriendsPartialViewModel
            {
                UserFriends = friends,
                UserGames   = games,
                ActiveGame  = ""
            };

            var lobbyAndFriends = new LobbyAndFriendsViewModel {
                CurrentLobbyUsers = lobbyUsers.Users,
                Friends           = friendsAndGames,
                IsInLobby         = _GameRepo.IsInLobby(uid) ? true : false
            };

            return(View(lobbyAndFriends));
        }
        public IActionResult FindFriends()
        {
            if (!_signInManager.IsSignedIn(User))
            {
                return(RedirectToAction("Login", "Account"));
            }
            RefreshUser(User);

            var uid     = _signInManager.UserManager.GetUserId(User);
            var friends = _GameRepo.GetFriendList(uid);
            var games   = _GameRepo.GetUserGameList(uid);

            FriendsPartialViewModel friendsAndGames = new FriendsPartialViewModel
            {
                UserFriends = friends,
                UserGames   = games,
                ActiveGame  = ""
            };

            return(View(friendsAndGames));
        }
        public IActionResult Sidebar([FromBody] GameController.GameRefreshData data)
        {
            var uid     = _signInManager.UserManager.GetUserId(User);
            var friends = _GameRepo.GetFriendList(uid);
            var games   = _GameRepo.GetUserGameList(uid);
            FriendsPartialViewModel friendsAndGames = new FriendsPartialViewModel
            {
                UserFriends = friends,
                UserGames   = games,
                ActiveGame  = data.GameID
            };
            var sidebar = new SidebarModel();
            var t1      = this.RenderViewAsync <FriendsPartialViewModel>("_ActiveGamesPartial", friendsAndGames, true);
            var t2      = this.RenderViewAsync <IEnumerable <User> >("_OnlineFriendsPartial", friends.OnlineFriends, true);
            var t3      = this.RenderViewAsync <IEnumerable <User> >("_OfflineFriendsPartial", friends.OfflineFriends, true);

            Task.WaitAll(new Task <string>[] { t1, t2, t3 });
            sidebar.ActiveGames    = t1.Result;
            sidebar.OnlineFriends  = t2.Result;
            sidebar.OfflineFriends = t3.Result;
            return(Json(sidebar));
        }
        public IActionResult Index(string gameId)
        {
            if (!_signInManager.IsSignedIn(User))
            {
                return(RedirectToAction("Login", "Account"));
            }
            RefreshUser(User);
            var          userId = _signInManager.UserManager.GetUserId(User);
            GameStateDTO gamestate;

            try
            {
                gamestate = _GameRepo.GetGamestate(gameId);
            }
            catch (ArgumentException e) { return(RedirectToAction("Index", "Home")); }

            var           friends         = _GameRepo.GetFriendList(userId);
            var           chat            = _GameRepo.GetMessageLog(gameId);
            var           games           = _GameRepo.GetAllGames(userId);
            var           emptyStringList = new List <string>();
            List <string> changedTiles    = new List <string>();

            foreach (char f in Enumerable.Range('a', 8))
            {
                foreach (char r in Enumerable.Range('1', 8))
                {
                    changedTiles.Add(f.ToString() + r.ToString());
                }
            }

            FriendsPartialViewModel friendsAndGames = new FriendsPartialViewModel
            {
                UserFriends = friends,
                UserGames   = _GameRepo.GetUserGameList(userId),
                ActiveGame  = gameId
            };

            ChessboardPartialViewModel board = new ChessboardPartialViewModel {
                GameState             = gamestate,
                SelectedTile          = null,
                CanMoveToAndTakeTiles = emptyStringList,
                CanMoveToTiles        = emptyStringList,
                GameId       = gameId,
                PlayerColor  = _GameRepo.GetPlayerColor(gameId, userId),
                ChangedTiles = changedTiles
            };

            ChatPartialViewModel chatSystem = new ChatPartialViewModel
            {
                GameID       = gameId,
                ChatMessages = chat
            };

            string opponent;

            try
            {
                opponent = games.Where(e => e.GameID.Equals(gameId)).FirstOrDefault().OpponentName;
            }
            catch (NullReferenceException e)
            {
                return(RedirectToAction("Index", "Home"));
            }
            return(View(new GameViewModel {
                FriendsAndGames = friendsAndGames, Board = board, Chat = chatSystem, OpponentName = opponent
            }));
        }