Example #1
0
			GetRateLimitInformation(HttpResponseHeaders headers)
		{
			var category = headers.GetValue("X-RateLimit-Category");
			var type = headers.GetValue("X-RateLimit-Type");
			var limit = headers.GetValue("X-RateLimit-Limit");
			var remaining = headers.GetValue("X-RateLimit-Remaining");
			var retryAfter = headers.GetValue("Retry-After");

			return (category, type, limit, remaining, retryAfter);
		}
Example #2
0
        public void TryPoll(int ticks)
        {
            if (ticks < retryat)
            {
                return;
            }
            if (pollTask != null && !pollTask.IsCompleted)
            {
                return;
            }

            pollTask = Task.Run(async() =>
            {
                for (;;)
                {
                    HttpRequestMessage req   = new HttpRequestMessage(HttpMethod.Get, PollUri);
                    HttpRequestHeaders reqhs = req.Headers;
                    reqhs.TryAddWithoutValidation("From", service.Id);
                    reqhs.TryAddWithoutValidation(X_EVENT, x_event);
                    reqhs.TryAddWithoutValidation(X_SHARD, service.Shard);

                    HttpResponseMessage rsp = null;
                    try
                    {
                        rsp = await SendAsync(req);
                        if (rsp.StatusCode == HttpStatusCode.NoContent)
                        {
                            break;
                        }
                    }
                    catch
                    {
                        retryat = Environment.TickCount + AHEAD;
                        return;
                    }

                    HttpResponseHeaders rsphs = rsp.Headers;
                    byte[] cont     = await rsp.Content.ReadAsByteArrayAsync();
                    EventContext ec = new EventContext(this)
                    {
                        id = rsphs.GetValue(X_ID).ToLong(),
                        // time = rsphs.GetValue(X_ARG)
                    };

                    // parse and process one by one
                    long id     = 0;
                    string name = rsp.Headers.GetValue(X_EVENT);
                    string arg  = rsp.Headers.GetValue(X_ARG);
                    // DateTime time;
                    EventInfo ei = null;

                    using (var dc = ec.NewDbContext(IsolationLevel.ReadUncommitted))
                    {
                        if (service.Events.TryGet(name, out ei))
                        {
                            if (ei.IsAsync)
                            {
                                await ei.DoAsync(ec, arg);
                            }
                            else
                            {
                                ei.Do(ec, arg);
                            }
                        }

                        // database last id
                        dc.Execute("UPDATE evtu SET evtid = @1 WHERE peerid = @2", p => p.Set(id).Set(peerid));
                    }
                }
            });
        }
        public static T GetValue <T>(this HttpResponseHeaders headers, string key, Func <string, T> convert) where T : class
        {
            var result = headers.GetValue(key);

            return(result == null ? null : convert(result));
        }
 public static string GetContentEncoding(this HttpResponseHeaders headers) => headers.GetValue("Content-Encoding");