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