Ejemplo n.º 1
0
        private List <Match> GetMatches(OpenDotaClient openDota, Player player)
        {
            const int collectLimit = 10;

            var limit = player.LastMatchId == null ? null : (int?)collectLimit;

            var matches = openDota.Matches(player.Id, limit: limit)
                          .TakeWhile(x => x.match_id != player.LastMatchId) //todo where?
                          .ToList();

            return(matches.Select(match => new Match
            {
                MatchId = match.match_id,
                PlayerId = match.account_id,
                PlayerSlot = match.player_slot,
                HeroId = match.hero_id,
                GameMode = match.game_mode,
                LobbyType = match.lobby_type,
                DateStart = match.DateStart(),
                Duration = match.Duration(),
                Kills = match.kills,
                Deaths = match.deaths,
                Assists = match.assists,
                Won = match.Won(),
                LeaverStatus = match.leaver_status
            }).ToList());
        }
Ejemplo n.º 2
0
        public Grabber(ILogger <Grabber> logger, IServiceScopeFactory serviceScopeFactory,
                       SteamClient steam, OpenDotaClient openDota, MatchNotifier matchNotifier)
        {
            this.logger = logger;
            this.serviceScopeFactory = serviceScopeFactory;

            this.steam    = steam;
            this.openDota = openDota;

            this.matchNotifier = matchNotifier;
        }
Ejemplo n.º 3
0
        private Player CollectPlayerData(DataManager dataManager, OpenDotaClient openDota, long playerId)
        {
            var info = openDota.Player(playerId);

            if (info == null)
            {
                return(null);
            }

            var player = dataManager.Players
                         .Add(new Player {
                Id = playerId
            })
                         .Entity;

            // основное инфо
            player.Name      = info.profile.personaname;
            player.SteamId   = info.profile.steamid;
            player.SoloRank  = info.solo_competitive_rank;
            player.PartyRank = info.competitive_rank;
            player.RankTier  = info.rank_tier;

            // матчи
            var matches = GetMatches(openDota, player);

            if (matches.Count > 0)
            {
                dataManager.Matches.AddRange(matches);

                var latest = matches.OrderByDescending(x => x.MatchId).First();

                player.LastMatchId   = latest.MatchId;
                player.LastMatchDate = latest.DateStart + latest.Duration;
            }

            player.WinCount  = matches.Count(x => x.Won);
            player.LoseCount = matches.Count(x => !x.Won);

            // рейтинги
            var ratings = GetRatings(openDota, player);

            if (ratings.Count > 0)
            {
                dataManager.Ratings.AddRange(ratings);

                player.LastRatingDate = ratings.Max(x => x.Date);
            }

            return(player);
        }
Ejemplo n.º 4
0
        private List <Rating> GetRatings(OpenDotaClient openDota, Player player)
        {
            var lastRatingDate = player.LastRatingDate ?? DateTime.MinValue;

            var ratings = openDota.Ratings(player.Id)
                          .Where(x => x.time > lastRatingDate)
                          .ToList();

            return(ratings.Select(x => new Rating
            {
                PlayerId = x.account_id,
                MatchId = x.match_id,
                SoloRank = x.solo_competitive_rank,
                PartyRank = x.competitive_rank,
                Date = x.time
            }).ToList());
        }