Ejemplo n.º 1
0
    IEnumerator GetHighscores(string token, string id = "", int perPage = 10)
    {
        isUpdatingHighscores = true;
        string url = _baseUrl + "highscore/xp/?perPage=" + perPage;

        if (id != "")
        {
            url += "&id=" + id;
        }

        else if (_currentPage >= 1)
        {
            url += "&page=" + _currentPage;
        }

        using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
        {
            webRequest.SetRequestHeader("token", token);

            yield return(webRequest.SendWebRequest());

            if (webRequest.isNetworkError || webRequest.isHttpError)
            {
                Debug.Log(webRequest.error);
            }

            if (webRequest.isDone)
            {
                if (webRequest.responseCode == 200)
                {
                    string        json       = System.Text.Encoding.UTF8.GetString(webRequest.downloadHandler.data);
                    HighscorePage highscores = JsonConvert.DeserializeObject <HighscorePage>(json);

                    for (int i = 0; i < highscores?.Entries?.Count; i++)
                    {
                        HighscoreElement element = HighscoreElements[i].GetComponent <HighscoreElement>();
                        element.Placement.text = highscores.Entries[i].Rank.ToString();
                        element.Username.text  = highscores.Entries[i].Player.PlayerId;
                        element.Score.text     = highscores.Entries[i].Player.Experience.ToString();

                        if (!String.IsNullOrEmpty(_userID) && highscores.Entries[i].Player.PlayerId == _userID)
                        {
                            element.Highlight(true);
                        }
                        else
                        {
                            element.Highlight(false);
                        }
                    }

                    if (highscores.Entries.Count < perPage)
                    {
                        for (int i = highscores.Entries.Count; i < perPage; i++)
                        {
                            HighscoreElement element = HighscoreElements[i].GetComponent <HighscoreElement>();
                            element.Placement.text = "";
                            element.Username.text  = "";
                            element.Score.text     = "";

                            element.Highlight(false);
                        }
                    }

                    _currentPage = highscores.CurrentPage;
                    _totalPages  = highscores.TotalPageCount;
                }
            }
        }
        isUpdatingHighscores = false;
    }
Ejemplo n.º 2
0
        public ActionResult <HighscorePage> Get([FromHeader] string token, int perPage = 10, int page = 1, string id = "")
        {
            if (Token.VerifyToken(token, "access"))
            {
                int            rankIndex = 1;
                int            curPage   = 1;
                List <Players> players;

                HighscorePage hPage = new HighscorePage()
                {
                    CurrentPage    = 1,
                    TotalPageCount = 1
                };

                if (id != "")
                {
                    Players player = _contextRead.Players.Find(id);
                    if (player != null)
                    {
                        //Minus one to always get the correct page number based on
                        //page 0 = 1..10
                        //page 1 = 11..20 etc.
                        curPage = _context.Players.Where(p => p.Experience >= player.Experience).Count() / perPage;

                        players = _contextRead.Players.OrderByDescending(p => p.Experience).Skip(perPage * curPage).Take(perPage).ToList();

                        rankIndex = curPage * perPage + 1;

                        //Keep pages 1 indexed
                        curPage++;
                    }
                    else
                    {
                        return(NotFound());
                    }
                }
                else
                {
                    curPage = page;
                    if (curPage < 1)
                    {
                        curPage = 1;
                    }
                    players   = _contextRead.Players.OrderByDescending(p => p.Experience).Skip(perPage * (curPage - 1)).Take(perPage).ToList();
                    rankIndex = (curPage - 1) * perPage + 1;
                }

                List <HighscoreEntry> result = new List <HighscoreEntry>();
                //Plus one to show correct rank based on 1 indexed ranks

                for (int i = 0; i < players.Count; i++)
                {
                    result.Add(new HighscoreEntry()
                    {
                        Player = players[i],
                        Rank   = rankIndex
                    });
                    rankIndex++;
                }

                hPage.CurrentPage    = curPage;
                hPage.Entries        = result;
                hPage.TotalPageCount = (_contextRead.Players.Count() / perPage) + 1;

                return(hPage);
            }
            return(Unauthorized("Token invalid or expired!"));
        }