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); }
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");