{"id":3876,"date":"2020-08-10T08:14:18","date_gmt":"2020-08-10T07:14:18","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=3876"},"modified":"2022-07-25T08:32:08","modified_gmt":"2022-07-25T07:32:08","slug":"c-long-polling-api-call","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-long-polling-api-call\/","title":{"rendered":"C# Long-Polling Api Call"},"content":{"rendered":"\n<p>IsCancellationRequested => Request cancelled (eg when closing browser tab)<br>NoContent => No Status change<br>HttpStatusCode.OK => Status changed<br>SignalWaiter => Search for SignalWaiter in posts<br><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[HttpGet]\n[Route(\"api\/freightregistrations\/{freightRegistrationId}\/watch\/{appStatusId}\")]\n\/\/[ApiCallRight(\"api.freightregistrations.getById\")]\n[AllowAnonymous]\npublic async Task&lt;HttpResponseMessage> WatchById(Guid freightRegistrationId, int appStatusId)\n{\n\tvar cancellationToken = Request.GetOwinContext()?.Request?.CallCancelled ?? default(CancellationToken);\n\tvar freightRegistration = await DomainPorts.FreightRegistrationStore.GetById(freightRegistrationId);\n\tif (freightRegistration == null)\n\t\treturn Request.CreateResponse(HttpStatusCode.NotFound);\n\tvar appStatus = freightRegistration.GetAppStatus();\n\tif ((int)appStatus != appStatusId)\n\t{\n\t\treturn Request.CreateResponse(HttpStatusCode.OK, new VmStatusChange((int)appStatus, appStatus.ToString()));\n\t}\n\n\ttry\n\t{\n\t\tvar key = $\"registration|{freightRegistrationId}\";\n\t\tusing (var signalWaiter = new SignalWaiter(key, TimeSpan.FromSeconds(60), cancellationToken))\n\t\t{\n\t\t\tawait signalWaiter.Wait();\n\t\t\tif (cancellationToken.IsCancellationRequested)\n\t\t\t\treturn Request.CreateResponse(HttpStatusCode.NoContent);\n\t\t\tfreightRegistration = await DomainPorts.FreightRegistrationStore.GetById(freightRegistrationId);\n\t\t\tif (freightRegistration == null)\n\t\t\t\treturn Request.CreateResponse(HttpStatusCode.NotFound);\n\t\t\tappStatus = freightRegistration.GetAppStatus();\n\t\t\tif ((int)appStatus != appStatusId)\n\t\t\t{\n\t\t\t\treturn Request.CreateResponse(HttpStatusCode.OK, new VmStatusChange((int)appStatus, appStatus.ToString()));\n\t\t\t}\n\t\t}\n\t}\n\tcatch (TimeoutException)\n\t{\n\t\t\/\/ ignore\n\t}\n\treturn Request.CreateResponse(HttpStatusCode.NoContent);\n}\n\n\/\/ Somewhere: \nSignalWaiter.SendSignal($\"registration|{freightRegistrationId}\");<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>IsCancellationRequested => Request cancelled (eg when closing browser tab)NoContent => No Status changeHttpStatusCode.OK => Status changedSignalWaiter => Search for SignalWaiter in posts<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,4,1],"tags":[],"class_list":["post-3876","post","type-post","status-publish","format-standard","hentry","category-dotnet","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/3876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=3876"}],"version-history":[{"count":4,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/3876\/revisions"}],"predecessor-version":[{"id":3881,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/3876\/revisions\/3881"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=3876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=3876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=3876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}