/// <summary> /// Host app must call this when receiving http request on POST /api/retro/long /// </summary> public async Task <LongResponse> HandleHttpLong(LongRequest req) { var user = ClientPlex.GetUser(req.SessionKey); if (user == null) { return new LongResponse { ErrorCode = Constants.ERRCODE_BADUSER } } ; //if there is already something to push, then return now, without any awaiting var pushGroup = ClientPlex.GetAndClearItemsToPush(req.SessionKey); if (pushGroup != null) { return(PushGroupToLongResponse(user, pushGroup)); } //wait up to 30s for something to be ready to send to the client var pollTask = ClientPlex.BeginLongPoll(req.SessionKey); if (pollTask == null) { return new LongResponse { ErrorCode = Constants.ERRCODE_BADUSER } } ; var timeoutTask = Task.Delay(IntegrationTestMode ? 1 : 30000); bool timedOut = (await Task.WhenAny(pollTask, timeoutTask) == timeoutTask); //timeout - empty return if (timedOut) { return(new LongResponse()); } //send anything that has accumulated pushGroup = ClientPlex.GetAndClearItemsToPush(req.SessionKey); if (pushGroup != null) { return(PushGroupToLongResponse(user, pushGroup)); } //nothing to do return(new LongResponse()); }
public async Task <IActionResult> DeclineAddToContactsRequest([FromBody] LongRequest addToContactsRequestId) { var user = await userManager.GetUserAsync(HttpContext.User); if (user != null) { ContactsResponse response = await contactsServices.DeclineAddToContactsRequest(user, addToContactsRequestId.Long); if (response.ResponseStatus == Status.Success) { return(Ok(response)); } return(StatusCode(StatusCodes.Status400BadRequest, response)); } return(StatusCode(StatusCodes.Status400BadRequest)); }
void OnEndRequest(object sender, System.EventArgs e) { Stopwatch stopwatch = (Stopwatch)HttpContext.Current.Items["Stopwatch"]; try { stopwatch.Stop(); TimeSpan ts = stopwatch.Elapsed; if (ts.TotalMilliseconds > 1500) { LongRequest reg = new LongRequest() { RequestUrl = HttpContext.Current.Request.Url.OriginalString, RequestTime = (int)ts.TotalMilliseconds }; Singleton <Tracker> .Instance.LongRequest(reg); } } catch (System.Exception) { } }
public void LongRequest(LongRequest reg) { TimeStamp stamp = new TimeStamp(); reg.Day = stamp.Day; reg.Hour = stamp.Hour; reg.Minute = stamp.Minute; reg.Month = stamp.Month; reg.Quarter = stamp.Quarter; reg.Year = stamp.Year; reg.Week = stamp.Week; reg.Timestamp = stamp.Stamp; reg.Session = APIContext.Current.Session; Task.Factory.StartNew(() => { using (var context = ContextFactory.AnalyticsContext) { context.LongRequests.AddObject(reg); context.SaveChanges(); } }); }
public Task <LongResponse> Long(LongRequest req) { return(GetRetroverse().HandleHttpLong(req)); }