public async Task SpecifyingQueues() { ClientConfiguration clientConfiguration = null; // As initialized earlier var directClient = new DirectClient(clientConfiguration); var organizationNumber = "123456789"; var sender = new Sender(organizationNumber, new PollingQueue("CustomPollingQueue")); Document documentToSign = null; // As initialized earlier ExitUrls exitUrls = null; // As initialized earlier var signer = new PersonalIdentificationNumber("00000000000"); var job = new Job( documentToSign, new List <Signer> { new Signer(signer) }, "SendersReferenceToSignatureJob", exitUrls, sender, StatusRetrievalMethod.Polling ); await directClient.Create(job); var changedJob = await directClient.GetStatusChange(sender); }
private JobStatusResponse GetCurrentReceipt(long jobId, Sender sender = null) { if (_status != null) { SleepToAvoidTooEagerPolling(_status.NextPermittedPollTime); } while (true) { var jobStatusResponse = _directClient.GetStatusChange(sender).Result; var isNoChanges = jobStatusResponse.Status == NoChanges; if (isNoChanges) { return(jobStatusResponse); } var isCurrentReceipt = jobStatusResponse.JobId == jobId; if (isCurrentReceipt) { return(jobStatusResponse); } ConfirmExcessReceipt(jobStatusResponse); var allowedToGetNextReceipt = jobStatusResponse.NextPermittedPollTime < DateTime.Now; if (allowedToGetNextReceipt) { continue; } SleepToAvoidTooEagerPolling(jobStatusResponse.NextPermittedPollTime); } }
public async Task Throws_too_eager_polling_exception_on_too_many_requests() { var directClient = new DirectClient(GetClientConfiguration()) { HttpClient = GetHttpClientWithHandler(new FakeHttpClientHandlerForTooManyRequestsResponse()) }; await Assert.ThrowsAsync <TooEagerPollingException>(async() => await directClient.GetStatusChange().ConfigureAwait(false)).ConfigureAwait(false); }
public async Task Cant_get_signature_job_id_from_empty_response() { var directClient = new DirectClient(GetClientConfiguration()) { HttpClient = GetHttpClientWithHandler(new FakeHttpClientHandlerForEmptyQueueResponse()) }; var statusChange = await directClient.GetStatusChange().ConfigureAwait(false); Assert.Throws <InvalidOperationException>(() => statusChange.JobId); }
public async Task Returns_status_response() { var directClient = new DirectClient(GetClientConfiguration()) { HttpClient = GetHttpClientWithHandler(new FakeHttpClientHandlerGetStatusResponse()) }; var result = await directClient.GetStatusChange().ConfigureAwait(false); Assert.NotNull(result); }
public async Task Returns_empty_object_on_empty_queue() { var fakeEmptyQueueResponse = new FakeHttpClientHandlerForEmptyQueueResponse(); var directClient = new DirectClient(GetClientConfiguration()) { HttpClient = GetHttpClientWithHandler(fakeEmptyQueueResponse) }; var actualResponse = await directClient.GetStatusChange().ConfigureAwait(false); Assert.Throws <InvalidOperationException>(() => actualResponse.JobId); Assert.Null(actualResponse.JobReference); }
public async Task PollForStatus() { ClientConfiguration clientConfiguration = null; // As initialized earlier var directClient = new DirectClient(clientConfiguration); // Repeat the polling until signer signs the document, but ensure to do this at a // reasonable interval. If you are processing the result a few times a day in your // system, only poll a few times a day. var change = await directClient.GetStatusChange(); switch (change.Status) { case JobStatus.NoChanges: // Queue is empty. Additional polling will result in blocking for a defined period. break; case JobStatus.CompletedSuccessfully: // Get PAdES // Get XAdES break; case JobStatus.Failed: break; case JobStatus.InProgress: break; default: throw new ArgumentOutOfRangeException(); } // Confirm status change to avoid receiving it again await directClient.Confirm(change.References.Confirmation); var pollingWillResultInBlock = change.NextPermittedPollTime > DateTime.Now; if (pollingWillResultInBlock) { //Wait until next permitted poll time has passed before polling again. } }
public async Task PollForStatus() { ClientConfiguration clientConfiguration = null; // As initialized earlier var directClient = new DirectClient(clientConfiguration); Document documentToSign = null; // As initialized earlier ExitUrls exitUrls = null; // As initialized earlier var job = new Job( documentToSign, new Signer(new PersonalIdentificationNumber("12345678910")), "SendersReferenceToSignatureJob", exitUrls, statusRetrievalMethod: StatusRetrievalMethod.Polling ); await directClient.Create(job); var changedJob = await directClient.GetStatusChange(); if (changedJob.Status == JobStatus.NoChanges) { // Queue is empty. Additional polling will result in blocking for a defined period. } // Repeat the above until signer signs the document changedJob = await directClient.GetStatusChange(); if (changedJob.Status == JobStatus.Signed) { // Get XAdES and/or PAdES } // Confirm status change to avoid receiving it again await directClient.Confirm(changedJob.References.Confirmation); }