public Task OnSendNEventReportRequestAsync(DicomNActionRequest request) { return(SendRequestAsync(new DicomNEventReportRequest(DicomUID.StorageCommitmentPushModel, DicomUID.StorageCommitmentPushModel, 2) { Dataset = request.Dataset })); }
public async Task OnNActionRequestAsync_ShouldRespond() { var port = Ports.GetNext(); using (DicomServer.Create <AsyncDicomNServiceProvider>(port, logger: _logger.IncludePrefix("DicomServer"))) { var client = new Network.Client.DicomClient("127.0.0.1", port, false, "SCU", "ANY-SCP") { Logger = _logger.IncludePrefix(typeof(DicomClient).Name) }; DicomNActionResponse response = null; DicomRequest.OnTimeoutEventArgs timeout = null; var request = new DicomNActionRequest( DicomUID.BasicFilmSession, new DicomUID("1.2.3", null, DicomUidType.SOPInstance), 1) { OnResponseReceived = (req, res) => response = res, OnTimeout = (sender, args) => timeout = args }; await client.AddRequestAsync(request).ConfigureAwait(false); await client.SendAsync().ConfigureAwait(false); Assert.NotNull(response); Assert.Equal(DicomStatus.Success, response.Status); Assert.Null(timeout); } }
/// <summary> /// Initializes a new instance of the <see cref="DicomNActionResponse"/> class. /// </summary> /// <param name="request"> /// The associated N-ACTION request. /// </param> /// <param name="status"> /// The response status. /// </param> public DicomNActionResponse(DicomNActionRequest request, DicomStatus status) : base(request, status) { if (request.HasSOPInstanceUID) { this.SOPInstanceUID = request.SOPInstanceUID; } this.ActionTypeID = request.ActionTypeID; }
public void SOPInstanceUIDGetter_ResponseCreatedFromRequest_DoesNotThrow() { var request = new DicomNActionRequest( DicomUID.BasicFilmSessionSOPClass, new DicomUID("1.2.3", null, DicomUidType.SOPInstance), 1); var response = new DicomNActionResponse(request, DicomStatus.Success); var exception = Record.Exception(() => response.SOPInstanceUID); Assert.Null(exception); }
public DicomNActionResponse OnNActionRequest(DicomNActionRequest request) { if (_filmSession == null) { this.Logger.Error("A basic film session does not exist for this association {0}", CallingAE); return new DicomNActionResponse(request, DicomStatus.InvalidObjectInstance); } lock (_synchRoot) { try { var filmBoxList = new List<FilmBox>(); if (request.SOPClassUID == DicomUID.BasicFilmSessionSOPClass && request.ActionTypeID == 0x0001) { this.Logger.Info("Creating new print job for film session {0}", _filmSession.SOPInstanceUID.UID); filmBoxList.AddRange(_filmSession.BasicFilmBoxes); } else if (request.SOPClassUID == DicomUID.BasicFilmBoxSOPClass && request.ActionTypeID == 0x0001) { this.Logger.Info("Creating new print job for film box {0}", request.SOPInstanceUID.UID); var filmBox = _filmSession.FindFilmBox(request.SOPInstanceUID); if (filmBox != null) { filmBoxList.Add(filmBox); } else { this.Logger.Error("Received N-ACTION request for invalid film box {0} from {1}", request.SOPInstanceUID.UID, CallingAE); return new DicomNActionResponse(request, DicomStatus.NoSuchObjectInstance); } } else { if (request.ActionTypeID != 0x0001) { this.Logger.Error("Received N-ACTION request for invalid action type {0} from {1}", request.ActionTypeID, CallingAE); return new DicomNActionResponse(request, DicomStatus.NoSuchActionType); } else { this.Logger.Error("Received N-ACTION request for invalid SOP class {0} from {1}", request.SOPClassUID, CallingAE); return new DicomNActionResponse(request, DicomStatus.NoSuchSOPClass); } } var printJob = new PrintJob(null, Printer, CallingAE, this.Logger); printJob.SendNEventReport = _sendEventReports; printJob.StatusUpdate += OnPrintJobStatusUpdate; printJob.Print(filmBoxList); if (printJob.Error == null) { var result = new DicomDataset(); result.Add(new DicomSequence(new DicomTag(0x2100, 0x0500), new DicomDataset(new DicomUniqueIdentifier(DicomTag.ReferencedSOPClassUID, DicomUID.PrintJobSOPClass)), new DicomDataset(new DicomUniqueIdentifier(DicomTag.ReferencedSOPInstanceUID, printJob.SOPInstanceUID)))); var response = new DicomNActionResponse(request, DicomStatus.Success); response.Command.Add(DicomTag.AffectedSOPInstanceUID, printJob.SOPInstanceUID); response.Dataset = result; return response; } else { throw printJob.Error; } } catch (Exception ex) { this.Logger.Error("Error occured during N-ACTION {0} for SOP class {1} and instance {2}", request.ActionTypeID, request.SOPClassUID.UID, request.SOPInstanceUID.UID); this.Logger.Error(ex.Message); return new DicomNActionResponse(request, DicomStatus.ProcessingFailure); } } }
/// <summary> /// Initializes a new instance of the <see cref="DicomNActionResponse"/> class. /// </summary> /// <param name="request"> /// The associated N-ACTION request. /// </param> /// <param name="status"> /// The response status. /// </param> public DicomNActionResponse(DicomNActionRequest request, DicomStatus status) : base(request, status) { SOPInstanceUID = request.SOPInstanceUID; ActionTypeID = request.ActionTypeID; }
public DicomNActionResponse(DicomNActionRequest request, DicomStatus status) : base(request, status) { }
public Task <DicomNActionResponse> OnNActionRequestAsync(DicomNActionRequest request) { return(Task.FromResult(new DicomNActionResponse(request, DicomStatus.Success))); }
public async Task ClientHandleNEventReport_SynchronousEvent() { var port = Ports.GetNext(); using (DicomServer.Create <SimpleStorageComitmentProvider>(port)) { DicomStatus status = null; int verifiedInstances = 0; DateTime stampNActionResponse = DateTime.MinValue; DateTime stampNEventReportRequest = DateTime.MinValue; var dicomClient = new Client.DicomClient("127.0.0.1", port, false, "SCU", "ANY-SCP"); var nActionDicomDataSet = new DicomDataset { { DicomTag.TransactionUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID }, { DicomTag.ReferencedSOPSequence, new DicomDataset() { { DicomTag.ReferencedSOPClassUID, "1.2.840.10008.5.1.4.1.1.1" }, { DicomTag.ReferencedSOPInstanceUID, "1.3.46.670589.30.2273540226.4.54" } }, new DicomDataset() { { DicomTag.ReferencedSOPClassUID, "1.2.840.10008.5.1.4.1.1.1" }, { DicomTag.ReferencedSOPInstanceUID, "1.3.46.670589.30.2273540226.4.59" } } } }; var nActionRequest = new DicomNActionRequest(DicomUID.StorageCommitmentPushModel, DicomUID.StorageCommitmentPushModel, 1) { Dataset = nActionDicomDataSet, OnResponseReceived = (DicomNActionRequest request, DicomNActionResponse response) => { status = response.Status; stampNActionResponse = DateTime.Now; }, }; await dicomClient.AddRequestAsync(nActionRequest); dicomClient.OnNEventReportRequest = (eventReq) => { var refSopSequence = eventReq.Dataset.GetSequence(DicomTag.ReferencedSOPSequence); foreach (var item in refSopSequence.Items) { verifiedInstances += 1; } stampNEventReportRequest = DateTime.Now; return(Task.FromResult(new DicomNEventReportResponse(eventReq, DicomStatus.Success))); }; dicomClient.AssociationLingerTimeoutInMs = (int)TimeSpan.FromSeconds(5).TotalMilliseconds; await dicomClient.SendAsync().ConfigureAwait(false); Assert.Equal(DicomStatus.Success, status); Assert.Equal(2, verifiedInstances); Assert.True(stampNActionResponse < stampNEventReportRequest); } }
public void OnSendNEventReportRequest(DicomNActionRequest request) { }
public DicomNActionResponse OnNActionRequest(DicomNActionRequest request) { return(new DicomNActionResponse(request, DicomStatus.Success)); }