diff --git a/QuestPDF/Previewer/PreviewerService.cs b/QuestPDF/Previewer/PreviewerService.cs index a6e629b..6a1c8d1 100644 --- a/QuestPDF/Previewer/PreviewerService.cs +++ b/QuestPDF/Previewer/PreviewerService.cs @@ -13,7 +13,13 @@ using QuestPDF.Previewer.Inspection; namespace QuestPDF.Previewer { - + internal sealed class NotifyPresenceRequest + { + public string Id { get; set; } + public bool IsDotnet6OrBeyond { get; set; } + public bool IsDotnet3OrBeyond { get; set; } + public bool IsExecutedInUnitTest { get; set; } + } internal sealed class GenericError { @@ -53,6 +59,8 @@ namespace QuestPDF.Previewer internal class PreviewerService { + private string ClientId { get; } = Guid.NewGuid().ToString("D"); + private int Port { get; } private HttpClient HttpClient { get; } @@ -107,13 +115,10 @@ namespace QuestPDF.Previewer //var previewerVersion = await GetPreviewerVersion(); //CheckVersionCompatibility(previewerVersion); + + StartNotifyPresenceTask(); } - - public async Task Disconnect() - { - await HttpClient.GetAsync("/v1/disconnect"); - } - + private async Task IsPreviewerAvailable() { try @@ -126,6 +131,33 @@ namespace QuestPDF.Previewer return false; } } + + public void StartNotifyPresenceTask() + { + Task.Run(async () => + { + while (true) + { + NotifyPresence(); + await Task.Delay(1000); + } + }); + } + + public async Task NotifyPresence() + { + var payload = new NotifyPresenceRequest + { + Id = ClientId, + IsDotnet6OrBeyond = RuntimeDetector.IsNet6OrGreater, + IsDotnet3OrBeyond = RuntimeDetector.IsNet3OrGreater, + IsExecutedInUnitTest = UnitTestDetector.RunningInUnitTest + }; + + await HttpClient.PostAsJsonAsync("/v1/notify/presence", payload); + } + + public async Task ShowDocumentPreview(DocumentPreviewResult documentPreviewResult) { diff --git a/QuestPDF/Previewer/RuntimeDetector.cs b/QuestPDF/Previewer/RuntimeDetector.cs new file mode 100644 index 0000000..b09de77 --- /dev/null +++ b/QuestPDF/Previewer/RuntimeDetector.cs @@ -0,0 +1,16 @@ +namespace QuestPDF.Previewer; + +public static class RuntimeDetector +{ +#if NET6_0_OR_GREATER + public static bool IsNet6OrGreater => true; +#else + public static bool IsNet6OrGreater => false; +#endif + +#if NETCOREAPP3_0_OR_GREATER + public static bool IsNet3OrGreater => true; +#else + public static bool IsNet6OrGreater => false; +#endif +} \ No newline at end of file diff --git a/QuestPDF/QuestPDF.csproj b/QuestPDF/QuestPDF.csproj index dbf9fcc..2e3969a 100644 --- a/QuestPDF/QuestPDF.csproj +++ b/QuestPDF/QuestPDF.csproj @@ -17,10 +17,9 @@ pdf report file export generate generation tool create creation render portable document format quest html library converter open source free standard core MIT enable - net462;netstandard2.0;netcoreapp2.0;netcoreapp3.0;net6.0 - net6.0 true snupkg + net5.0