示例#1
0
        /// <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());
        }
示例#2
0
        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));
        }
示例#3
0
        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) { }
        }
示例#4
0
        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));
 }