示例#1
0
        public RateGate(RateLimit rateLimit, IHaloSharpTimer timer)
        {
            _timeUnitMilliseconds = (int)rateLimit.TimeSpan.TotalMilliseconds;
            _timeoutMilliseconds  = (int)rateLimit.Timeout.TotalMilliseconds;

            _semaphore = new SemaphoreSlim(rateLimit.RequestCount, rateLimit.RequestCount);
            _exitTimes = new ConcurrentQueue <int>();
            timer.Setup(ExitTimerCallback, _timeUnitMilliseconds, Timeout.Infinite);
            _exitTimer = timer; //new HaloSharpTimer(ExitTimerCallback, null, _timeUnitMilliseconds, Timeout.Infinite);
        }
示例#2
0
        public HaloSession(IProduct product, IHaloSharpTimer timer, ICacheSettings cacheSettings = null, IObjectCache cache = null)
        {
            Cache.MetadataCacheDuration = cacheSettings?.MetadataCacheDuration;
            Cache.ProfileCacheDuration  = cacheSettings?.ProfileCacheDuration;
            Cache.StatsCacheDuration    = cacheSettings?.StatsCacheDuration;
            Cache.ObjectCache           = cache;

            if (product.RateLimit != null)
            {
                _rateGate = new RateGate(product.RateLimit, timer);
            }

            var handler = new HttpClientHandler
            {
                AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
            };

            _httpClient = new HttpClient(handler);
            _httpClient.DefaultRequestHeaders.Add(HeaderName, product.SubscriptionKey);
        }