예제 #1
0
        void UpdateSummoner(Summoner summoner, AllPublicSummonerDataDTO publicSummonerData, AggregatedStats[] aggregatedStats, PlayerLifeTimeStats lifeTimeStatistics, RecentGames recentGames, DbConnection connection)
        {
            int accountId = summoner.AccountId;

            lock (ActiveAccountIds)
            {
                // Avoid concurrent updates of the same account, it's asking for trouble and is redundant anyways
                // We might obtain outdated results in one query but that's a minor issue in comparison to corrupted database results
                if (ActiveAccountIds.Contains(accountId))
                    return;

                ActiveAccountIds.Add(accountId);
            }

            // Use a transaction because we're going to insert a fair amount of data
            using (var transaction = connection.BeginTransaction())
            {
                UpdateSummonerFields(summoner, connection, true);
                UpdateRunes(summoner, publicSummonerData, connection);

                UpdateSummonerRatings(summoner, lifeTimeStatistics, connection);
                // A season value of zero indicates the current season only
                for (int season = 0; season < aggregatedStats.Length; season++)
                    UpdateSummonerRankedStatistics(summoner, season, aggregatedStats[season], connection);
                UpdateSummonerGames(summoner, recentGames, connection);

                transaction.Commit();
            }

            lock (ActiveAccountIds)
                ActiveAccountIds.Remove(accountId);
        }
예제 #2
0
        void UpdateRunes(Summoner summoner, AllPublicSummonerDataDTO publicSummonerData, DbConnection connection)
        {
            //Remove old rune pages from the database first
            using (var delete = Command("delete from rune_page where summoner_id = :summoner_id", connection))
            {
                delete.Set("summoner_id", summoner.Id);
                delete.Execute();
            }

            foreach (var page in publicSummonerData.spellBook.bookPages)
            {
                string[] pageFields =
                {
                    "summoner_id",
                    "name",
                    "is_current_rune_page",
                    "time_created",
                };

                using (var insert = Command("insert into rune_page ({0}) values ({1})", connection, GetGroupString(pageFields), GetPlaceholderString(pageFields)))
                {
                    insert.SetFieldNames(pageFields);

                    insert.Set(summoner.Id);
                    insert.Set(page.name);
                    insert.Set(page.current);
                    insert.Set(page.createDate.ToUnixTime());

                    insert.Execute();
                }

                int runePageId = GetInsertId(connection);

                string[] runeFields =
                {
                    "rune_page_id",
                    "rune_slot",
                    "rune",
                };

                foreach (var rune in page.slotEntries)
                {
                    using (var insert = Command("insert into rune_slot ({0}) values ({1})", connection, GetGroupString(runeFields), GetPlaceholderString(runeFields)))
                    {
                        insert.SetFieldNames(runeFields);

                        insert.Set(runePageId);
                        insert.Set(rune.runeSlotId);
                        insert.Set(rune.runeId);

                        insert.Execute();
                    }
                }
            }
        }
예제 #3
0
 void GetPublicSummonerData(AllPublicSummonerDataDTO publicSummonerData)
 {
     PublicSummonerData = publicSummonerData;
     ProcessReply();
 }