Exemplo n.º 1
0
        public async Task<HotReloadPageResponse> Any(HotReloadPage request)
        {
            var page = Pages.GetPage(request.Path ?? "/");
            if (page == null)
                throw HttpError.NotFound("Page not found: " + request.Path);

            if (!page.HasInit)
                await page.Init();

            var startedAt = DateTime.UtcNow;
            var eTagTicks = string.IsNullOrEmpty(request.ETag) ? (long?) null : long.Parse(request.ETag);
            var maxLastModified = DateTime.MinValue;
            var shouldReload = false;

            while (DateTime.UtcNow - startedAt < LongPollDuration)
            {
                maxLastModified = Pages.GetLastModified(page);

                if (eTagTicks == null)
                    return new HotReloadPageResponse { ETag = maxLastModified.Ticks.ToString() };

                shouldReload = maxLastModified.Ticks > eTagTicks;
                if (shouldReload)
                {
                    await Task.Delay(ModifiedDelay);
                    break;
                }

                await Task.Delay(CheckDelay);
            }

            return new HotReloadPageResponse { Reload = shouldReload, ETag = maxLastModified.Ticks.ToString() };
        }
Exemplo n.º 2
0
        public async Task <HotReloadPageResponse> Any(HotReloadPage request)
        {
            var pathInfo = request.Path ?? "/";
            var page     = Pages.GetPage(pathInfo);

            if (page == null)
            {
                var matchingRoute = RestHandler.FindMatchingRestPath(
                    HttpMethods.Get, pathInfo, out var contentType);

                var feature = HostContext.AppHost.AssertPlugin <SharpPagesFeature>();

                if (matchingRoute != null)
                {
                    page = feature.GetViewPage(matchingRoute.RequestType.Name);

                    if (page == null)
                    {
                        var responseType = HostContext.AppHost.Metadata.GetResponseTypeByRequest(matchingRoute.RequestType);
                        page = feature.GetViewPage(responseType.Name);
                    }
                }

                if (page == null)
                {
                    page = feature.GetRoutingPage(pathInfo, out var args);
                }
            }

            if (page == null)
            {
                throw HttpError.NotFound("Page not found: " + request.Path);
            }

            if (!page.HasInit)
            {
                await page.Init();
            }

            var startedAt       = DateTime.UtcNow;
            var eTagTicks       = string.IsNullOrEmpty(request.ETag) ? (long?)null : long.Parse(request.ETag);
            var maxLastModified = DateTime.MinValue;
            var shouldReload    = false;

            while (DateTime.UtcNow - startedAt < LongPollDuration)
            {
                maxLastModified = Pages.GetLastModified(page);

                if (eTagTicks == null)
                {
                    return new HotReloadPageResponse {
                               ETag = maxLastModified.Ticks.ToString()
                    }
                }
                ;

                shouldReload = maxLastModified.Ticks > eTagTicks;
                if (shouldReload)
                {
                    await Task.Delay(ModifiedDelay);

                    break;
                }

                await Task.Delay(CheckDelay);
            }

            return(new HotReloadPageResponse {
                Reload = shouldReload, ETag = maxLastModified.Ticks.ToString()
            });
        }
    }