예제 #1
0
        /// <summary>
        /// necessary for using LeagueOfLegendsApi
        /// </summary>
        /// <param name="services">
        /// </param>
        /// <param name="riotApiKey">
        /// RiotGames DeveloperKey or ProductionKey
        /// </param>
        /// <param name="cacheOption">
        /// [overrides all default values] custom api caching options (default: ApiCaching is NOT
        /// USED )
        /// </param>
        /// <param name="rateLimitOption2">
        /// [overrides all default values] custom rate limit handling options (default: rate-limiting
        /// is USED) default X-App-Rate-Limit: 100:120,20:1, default X-Method-Rate-Limit:
        /// 20000:10,1200000:600, default Mathlists X-Method-Rate-Limit: 500:10
        /// </param>
        /// <exception cref="Exception">
        /// A delegate callback throws an exception.
        /// </exception>
        public static void AddLeagueOfLegendsApi(this IServiceCollection services, string riotApiKey,
                                                 Func <CacheOption, CacheOption> cacheOption,
                                                 Func <RateLimitBuilder, RateLimitBuilder> rateLimitOption2)
        {
            //can convertable to json
            var riotGamesApiBuilder = RiotGamesApiBuilder(riotApiKey);
            var riotGamesApiOption  = riotGamesApiBuilder.Build();

            var cOptions = new CacheOption();

            riotGamesApiOption.CacheOptions = cacheOption != null?cacheOption(cOptions) : cOptions;

            //RateLimitData limits = RateLimitData();//default settings
            RateLimitBuilder rlb = null;

            if (rateLimitOption2 != null)
            {
                //limits = rateLimitOption2(limits); //user settings
                rlb = rateLimitOption2(new RateLimitBuilder());                 //user settings
            }
            else
            {
                rlb = RateLimitBuilder();                //default settings
            }

            riotGamesApiOption.RateLimitOptions.All = rlb.Build();
            riotGamesApiOption.RateLimitOptions.SetLeagueApiLimit(rlb.Special_Leagues_Limits);
            riotGamesApiOption.RateLimitOptions.SetSummonerIdAndByNameApiLimit(rlb.SummonerIdAndByName_Limits);
            riotGamesApiOption.RateLimitOptions.SetSummonerAccountNameApiLimit(rlb.SummonerAccountName_Limits);
            riotGamesApiOption.RateLimitOptions.DisableLimiting = false;            //force rate-limiting to use

            services.AddSingleton <IApiOption>(riotGamesApiOption);
            services.AddMemoryCache();
            services.AddSingleton <IApiCache>(new ApiCache());
            services.AddSingleton <LolApi>(new LolApi());
            services.AddSingleton <LolApiRateLimit>(new LolApiRateLimit());
        }
예제 #2
0
        private static RateLimitBuilder RateLimitBuilder()
        {
            RateLimitBuilder limits = new RateLimitBuilder();

            limits.AddRateLimitFor(LolUrlType.Static, LolApiName.StaticData,
                                   new List <ApiLimit>()
            {
                new ApiLimit(new TimeSpan(1, 0, 0), 10, RateLimitType.MethodRate)
            }, LolApiMethodName.Champions,
                                   LolApiMethodName.Items,
                                   LolApiMethodName.LanguageStrings,
                                   LolApiMethodName.LanguageStrings,
                                   LolApiMethodName.Maps,
                                   LolApiMethodName.Masteries,
                                   LolApiMethodName.ProfileIcons,
                                   LolApiMethodName.Realms,
                                   LolApiMethodName.Runes,
                                   LolApiMethodName.SummonerSpells,
                                   LolApiMethodName.Versions);

            limits.AddRateLimitFor(LolUrlType.NonStatic, LolApiName.Match,
                                   new List <ApiLimit>()
            {
                new ApiLimit(new TimeSpan(0, 0, 10), 500, RateLimitType.MethodRate)
            }, LolApiMethodName.Matches, LolApiMethodName.Timelines);

            limits.AddRateLimitFor(LolUrlType.NonStatic, LolApiName.Match,
                                   new List <ApiLimit>()
            {
                new ApiLimit(new TimeSpan(0, 0, 10), 1000, RateLimitType.MethodRate)
            }, LolApiMethodName.MatchLists);

            limits.AddRateLimitFor(LolUrlType.Status, LolApiName.Status, new List <ApiLimit>()
            {
                new ApiLimit(new TimeSpan(0, 0, 10), 20000, RateLimitType.MethodRate),
                new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate),
                new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate)
            }, LolApiMethodName.ShardData);

            limits.AddRateLimitFor(LolUrlType.Tournament, new List <LolApiName>()
            {
                LolApiName.Tournament,
                LolApiName.TournamentStub
            }, new List <ApiLimit>()
            {
                new ApiLimit(new TimeSpan(0, 0, 10), 20000, RateLimitType.MethodRate),
                new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate),
                new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate)
            },
                                   LolApiMethodName.Codes,
                                   LolApiMethodName.LobbyEvents,
                                   LolApiMethodName.Providers,
                                   LolApiMethodName.Tournaments);

            limits.AddRateLimitFor(LolUrlType.NonStatic, new List <LolApiName>()
            {
                LolApiName.ChampionMastery,
                LolApiName.Spectator,
                LolApiName.Summoner,
                LolApiName.Platform,
            }, new List <ApiLimit>()
            {
                new ApiLimit(new TimeSpan(0, 0, 10), 20000, RateLimitType.MethodRate),
                new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate),
                new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate)
            },
                                   LolApiMethodName.ChampionMasteries,
                                   LolApiMethodName.Scores,
                                   LolApiMethodName.ActiveGames,
                                   LolApiMethodName.FeaturedGames,
                                   LolApiMethodName.Summoners
                                   );

            //lol/platform/v3/champions
            //lol/platform/v3/masteries/by-summoner/{summonerId}
            //lol/platform/v3/runes/by-summoner/{summonerId}
            limits.AddRateLimitFor(LolUrlType.NonStatic, new List <LolApiName>()
            {
                LolApiName.Platform
            }, new List <ApiLimit>()
            {
                new ApiLimit(new TimeSpan(0, 1, 0), 400, RateLimitType.MethodRate),
                new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate),
                new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate)
            }, LolApiMethodName.Champions,
                                   LolApiMethodName.Masteries,
                                   LolApiMethodName.Runes);

            limits.LeaguesApiLimitsInMinute();            //temporary solution
            limits.SummonerIdAndByNameLimitsInMinute();   //temporary solution
            limits.SummonerAccountNameLimitsInMinute();   //temporary solution
            return(limits);
        }