コード例 #1
0
        private DicomNSetResponse SetImageBox(DicomNSetRequest request)
        {
            if (_filmSession == null)
            {
                this.Logger.Error("A basic film session does not exist for this association {0}", CallingAE);
                return(new DicomNSetResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            this.Logger.Info("Set image box {0}", request.SOPInstanceUID.UID);

            var imageBox = _filmSession.FindImageBox(request.SOPInstanceUID);

            if (imageBox == null)
            {
                this.Logger.Error(
                    "Received N-SET request for invalid image box instance {0} for this association {1}",
                    request.SOPInstanceUID.UID,
                    CallingAE);
                return(new DicomNSetResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            request.Dataset.CopyTo(imageBox);

            return(new DicomNSetResponse(request, DicomStatus.Success));
        }
コード例 #2
0
        private DicomNSetResponse SetFilmBox(DicomNSetRequest request)
        {
            if (_filmSession == null)
            {
                this.Logger.Error("A basic film session does not exist for this association {0}", CallingAE);
                return(new DicomNSetResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            this.Logger.Info("Set film box {0}", request.SOPInstanceUID.UID);
            var filmBox = _filmSession.FindFilmBox(request.SOPInstanceUID);

            if (filmBox == null)
            {
                this.Logger.Error(
                    "Received N-SET request for invalid film box {0} from {1}",
                    request.SOPInstanceUID.UID,
                    CallingAE);
                return(new DicomNSetResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            request.Dataset.CopyTo(filmBox);

            filmBox.Initialize();

            var response = new DicomNSetResponse(request, DicomStatus.Success);

            response.Command.Add(DicomTag.AffectedSOPInstanceUID, filmBox.SOPInstanceUID);
            response.Command.Add(DicomTag.CommandDataSetType, (ushort)0x0202);
            response.Dataset = filmBox;
            return(response);
        }
コード例 #3
0
        public async Task OnNSetRequestAsync_ShouldRespond()
        {
            var port = Ports.GetNext();

            using (DicomServerFactory.Create <AsyncDicomNServiceProvider>(port, logger: _logger.IncludePrefix("DicomServer")))
            {
                var client = DicomClientFactory.Create("127.0.0.1", port, false, "SCU", "ANY-SCP");
                client.Logger = _logger.IncludePrefix(typeof(DicomClient).Name);

                DicomNSetResponse response = null;
                DicomRequest.OnTimeoutEventArgs timeout = null;
                var request = new DicomNSetRequest(
                    DicomUID.BasicFilmSession,
                    new DicomUID("1.2.3", null, DicomUidType.SOPInstance))
                {
                    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);
            }
        }
コード例 #4
0
        public DicomNSetResponse OnNSetRequest(DicomNSetRequest request)
        {
            UpdateMppsStatusInLocalCollections(request);

            var resp = new DicomNSetResponse(request, DicomStatus.Success);

            return(resp);
        }
コード例 #5
0
ファイル: PrintJob.cs プロジェクト: h2zzhou/fo-dicom-samples
        public void Print()
        {
            var dicomClient = new DicomClient();

            dicomClient.NegotiateAsyncOps();

            dicomClient.AddRequest(
                new DicomNCreateRequest(FilmSession.SOPClassUID, FilmSession.SOPInstanceUID)
            {
                Dataset = FilmSession
            });


            foreach (var filmbox in FilmSession.BasicFilmBoxes)
            {
                var imageBoxRequests = new List <DicomNSetRequest>();

                var filmBoxRequest = new DicomNCreateRequest(FilmBox.SOPClassUID, filmbox.SOPInstanceUID)
                {
                    Dataset
                        =
                            filmbox
                };
                filmBoxRequest.OnResponseReceived = (request, response) =>
                {
                    if (response.HasDataset)
                    {
                        var seq = response.Dataset.Get <DicomSequence>(DicomTag.ReferencedImageBoxSequence);
                        for (int i = 0; i < seq.Items.Count; i++)
                        {
                            var req            = imageBoxRequests[i];
                            var imageBox       = req.Dataset;
                            var sopInstanceUid = seq.Items[i].Get <string>(DicomTag.ReferencedSOPInstanceUID);
                            imageBox.Add(DicomTag.SOPInstanceUID, sopInstanceUid);
                            req.Command.Add(DicomTag.RequestedSOPInstanceUID, sopInstanceUid);
                        }
                    }
                };
                dicomClient.AddRequest(filmBoxRequest);



                foreach (var image in filmbox.BasicImageBoxes)
                {
                    var req = new DicomNSetRequest(image.SOPClassUID, image.SOPInstanceUID)
                    {
                        Dataset = image
                    };

                    imageBoxRequests.Add(req);
                    dicomClient.AddRequest(req);
                }
            }

            dicomClient.AddRequest(new DicomNActionRequest(FilmSession.SOPClassUID, FilmSession.SOPInstanceUID, 0x0001));

            dicomClient.Send(RemoteAddress, RemotePort, false, CallingAE, CalledAE);
        }
コード例 #6
0
        public DicomNSetResponse OnNSetRequest(DicomNSetRequest request)
        {
            if (request.SOPClassUID != DicomUID.ModalityPerformedProcedureStepSOPClass)
            {
                return(new DicomNSetResponse(request, DicomStatus.SOPClassNotSupported));
            }
            // on N-Create the UID is stored in AffectedSopInstanceUID, in N-Set the UID is stored in RequestedSopInstanceUID
            var requestedSopInstanceUID = request.Command.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID);

            Logger.Log(LogLevel.Info, $"receiving N-Set with SOPUID {requestedSopInstanceUID}");
            Log.Loger($"receiving N-Set with SOPUID {requestedSopInstanceUID}");

            var status = request.Dataset.GetSingleValue <string>(DicomTag.PerformedProcedureStepStatus);

            if (status == "COMPLETED")
            {
                // most vendors send some informations with the mpps-completed message.
                // this information should be stored into the datbase
                var doseDescription    = request.Dataset.GetSingleValueOrDefault(DicomTag.CommentsOnRadiationDose, string.Empty);
                var listOfInstanceUIDs = new List <string>();
                foreach (var seriesDataset in request.Dataset.GetSequence(DicomTag.PerformedSeriesSequence))
                {
                    // you can read here some information about the series that the modalidy created
                    //seriesDataset.Get(DicomTag.SeriesDescription, string.Empty);
                    //seriesDataset.Get(DicomTag.PerformingPhysicianName, string.Empty);
                    //seriesDataset.Get(DicomTag.ProtocolName, string.Empty);
                    foreach (var instanceDataset in seriesDataset.GetSequence(DicomTag.ReferencedImageSequence))
                    {
                        // here you can read the SOPClassUID and SOPInstanceUID
                        var instanceUID = instanceDataset.GetSingleValueOrDefault(DicomTag.ReferencedSOPInstanceUID, string.Empty);
                        if (!string.IsNullOrEmpty(instanceUID))
                        {
                            listOfInstanceUIDs.Add(instanceUID);
                        }
                    }
                }
                var ok = MppsSource.SetCompleted(requestedSopInstanceUID, doseDescription, listOfInstanceUIDs);

                return(new DicomNSetResponse(request, ok ? DicomStatus.Success : DicomStatus.ProcessingFailure));
            }
            else if (status == "DISCONTINUED")
            {
                // some vendors send a reason code or description with the mpps-discontinued message
                // var reason = request.Dataset.Get(DicomTag.PerformedProcedureStepDiscontinuationReasonCodeSequence);
                var ok = MppsSource.SetDiscontinued(requestedSopInstanceUID, string.Empty);

                return(new DicomNSetResponse(request, ok ? DicomStatus.Success : DicomStatus.ProcessingFailure));
            }
            else
            {
                return(new DicomNSetResponse(request, DicomStatus.InvalidAttributeValue));
            }
        }
コード例 #7
0
        private DicomNSetResponse SetFilmSession(DicomNSetRequest request)
        {
            if (_filmSession == null || _filmSession.SOPInstanceUID.UID != request.SOPInstanceUID.UID)
            {
                this.Logger.Error("A basic film session does not exist for this association {0}", CallingAE);
                return(new DicomNSetResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            this.Logger.Info("Set film session {0}", request.SOPInstanceUID.UID);
            request.Dataset.CopyTo(_filmSession);

            return(new DicomNSetResponse(request, DicomStatus.Success));
        }
コード例 #8
0
ファイル: PrintService.cs プロジェクト: summy00/fo-dicom
 public DicomNSetResponse OnNSetRequest(DicomNSetRequest request)
 {
     lock (_synchRoot)
     {
         if (request.SOPClassUID == DicomUID.BasicFilmSessionSOPClass)
         {
             return(SetFilmSession(request));
         }
         if (request.SOPClassUID == DicomUID.BasicFilmBoxSOPClass)
         {
             return(SetFilmBox(request));
         }
         if (request.SOPClassUID == DicomUID.BasicColorImageBoxSOPClass ||
             request.SOPClassUID == DicomUID.BasicGrayscaleImageBoxSOPClass)
         {
             return(SetImageBox(request));
         }
         return(new DicomNSetResponse(request, DicomStatus.SOPClassNotSupported));
     }
 }
コード例 #9
0
 public Task <DicomNSetResponse> OnNSetRequestAsync(DicomNSetRequest request)
 {
     lock (_synchRoot)
     {
         if (request.SOPClassUID == DicomUID.BasicFilmSession)
         {
             return(Task.FromResult(SetFilmSession(request)));
         }
         else if (request.SOPClassUID == DicomUID.BasicFilmBox)
         {
             return(Task.FromResult(SetFilmBox(request)));
         }
         else if (request.SOPClassUID == DicomUID.BasicColorImageBox ||
                  request.SOPClassUID == DicomUID.BasicGrayscaleImageBox)
         {
             return(Task.FromResult(SetImageBox(request)));
         }
         else
         {
             return(Task.FromResult(new DicomNSetResponse(request, DicomStatus.SOPClassNotSupported)));
         }
     }
 }
コード例 #10
0
        public static string SendPrintTask(string callingAE, string calledAE, string calledIP, int calledPort, string taskPath)
        {
            PrintTaskInfo task = new PrintTaskInfo()
            {
                CallingAETitle = callingAE, TaskPath = taskPath
            };

            string strErr = string.Empty;

            LogManager.Instance.Log("Start to send print task: " + taskPath);
            try
            {
                DirectoryInfo dirTask = new DirectoryInfo(taskPath);
                if (!dirTask.Exists)
                {
                    throw new Exception("invalid task path");
                }

                string filmSessionFile = Path.Combine(taskPath, "FilmSession.dcm");
                if (!File.Exists(filmSessionFile))
                {
                    throw new Exception("can't find film session file");
                }

                //load filmSession from dcmFile
                FilmSession filmSession = FilmSession.Load(filmSessionFile);

                //load filmBox from dcmFiles
                var subDirs = dirTask.EnumerateDirectories();
                foreach (DirectoryInfo dirFilmBox in subDirs)
                {
                    FilmBox filmBox = FilmBox.Load(filmSession, dirFilmBox.FullName);
                    filmSession.BasicFilmBoxes.Add(filmBox);
                }

                var dicomClient = new DicomClient();

                var filmSessionRequest = new DicomNCreateRequest(filmSession.SOPClassUID, filmSession.SOPInstanceUID);
                filmSessionRequest.Dataset = filmSession;

                dicomClient.AddRequest(filmSessionRequest);

                foreach (var filmbox in filmSession.BasicFilmBoxes)
                {
                    var imageBoxRequests = new List <DicomNSetRequest>();

                    var filmBoxRequest = new DicomNCreateRequest(FilmBox.SOPClassUID, filmbox.SOPInstanceUID);
                    filmBoxRequest.Dataset = filmbox;

                    filmBoxRequest.OnResponseReceived = (request, response) =>
                    {
                        if (response.HasDataset)
                        {
                            var seq = response.Dataset.Get <DicomSequence>(DicomTag.ReferencedImageBoxSequence);
                            for (int i = 0; i < seq.Items.Count; i++)
                            {
                                var req            = imageBoxRequests[i];
                                var imageBox       = req.Dataset;
                                var sopInstanceUid = seq.Items[i].Get <string>(DicomTag.ReferencedSOPInstanceUID);
                                imageBox.AddOrUpdate(DicomTag.SOPInstanceUID, sopInstanceUid);
                                req.Command.AddOrUpdate(DicomTag.RequestedSOPInstanceUID, sopInstanceUid);
                            }
                        }
                    };
                    dicomClient.AddRequest(filmBoxRequest);

                    foreach (var image in filmbox.BasicImageBoxes)
                    {
                        var req = new DicomNSetRequest(image.SOPClassUID, image.SOPInstanceUID)
                        {
                            Dataset = image
                        };

                        imageBoxRequests.Add(req);
                        dicomClient.AddRequest(req);
                    }
                }

                dicomClient.AddRequest(new DicomNActionRequest(filmSession.SOPClassUID, filmSession.SOPInstanceUID, 0x0001));

                dicomClient.Send(calledIP, calledPort, false, callingAE, calledAE);

                task.HasError = false;
                if (PrintTaskEvent != null)
                {
                    PrintTaskEvent(task);
                }
            }
            catch (Exception e)
            {
                strErr = e.Message;
                LogManager.Instance.Log("Send task failed due to " + e.Message);

                task.HasError     = true;
                task.ErrorMessage = e.Message;
                if (PrintTaskEvent != null)
                {
                    PrintTaskEvent(task);
                }
            }

            return(strErr);
        }
コード例 #11
0
 public Task <DicomNSetResponse> OnNSetRequestAsync(DicomNSetRequest request) => throw new NotImplementedException();
コード例 #12
0
 /// <summary>
 /// Initializes an instance of the <see cref="DicomNSetResponse"/> class.
 /// </summary>
 /// <param name="request">Associated N-SET request.</param>
 /// <param name="status">Response status.</param>
 public DicomNSetResponse(DicomNSetRequest request, DicomStatus status)
     : base(request, status)
 {
     SOPInstanceUID = request.SOPInstanceUID;
 }
コード例 #13
0
        public async Task <bool> SendMppsCompletedAsync(string serverIp, int serverPort, string serverAET, string localAET, string studyInstanceUid, DicomUID affectedInstanceUid, DicomDataset worklistItem)
        {
            DicomSequence procedureStepSq = worklistItem.GetSequence(DicomTag.ScheduledProcedureStepSequence);
            // A worklistitem may have a list of scheduledprocedureSteps.
            // For each of them you have to send separate MPPS InProgress- and Completed-messages.
            // there in this example we will only send for the first procedure step
            DicomDataset procedureStep = procedureStepSq.First();

            // data
            DicomDataset dataset = new DicomDataset
            {
                { DicomTag.StudyInstanceUID, studyInstanceUid },
                { DicomTag.PerformedProcedureStepEndDate, DateTime.Now },
                { DicomTag.PerformedProcedureStepEndTime, DateTime.Now },
                { DicomTag.PerformedProcedureStepStatus, COMPLETED },
                { DicomTag.PerformedProcedureStepDescription, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, string.Empty) },
                { DicomTag.PerformedProcedureTypeDescription, string.Empty },

                { DicomTag.PerformedProtocolCodeSequence, new DicomDataset() },
                { DicomTag.ProcedureCodeSequence, new DicomDataset() },

                // dose and reports
                { DicomTag.ImageAndFluoroscopyAreaDoseProduct, 0.0m }, // if there has bee sone dose while examination
                { DicomTag.CommentsOnRadiationDose, string.Empty },    // a free text that contains all dose parameters

                { DicomTag.PerformedSeriesSequence, new DicomDataset()
                  {
                      { DicomTag.RetrieveAETitle, string.Empty }, // the aetitle of the archive where the images have been sent to
                      { DicomTag.SeriesDescription, "series 1" },
                      { DicomTag.PerformingPhysicianName, string.Empty },
                      { DicomTag.OperatorsName, string.Empty },
                      { DicomTag.ProtocolName, "protocol 1" },
                      { DicomTag.SeriesInstanceUID, DicomUID.Generate() },
                      { DicomTag.ReferencedImageSequence, new DicomDataset()
                        {
                            { DicomTag.ReferencedSOPClassUID, DicomUID.SecondaryCaptureImageStorage },
                            { DicomTag.ReferencedSOPInstanceUID, DicomUID.Generate() }
                        } },
                  } }
            };

            //// images created
            //DicomSequence performedSeriesSq = new DicomSequence(DicomTag.PerformedSeriesSequence);
            //// iterate all Series that have been created while examination
            //DicomDataset serie = new DicomDataset()
            //{
            //    { DicomTag.RetrieveAETitle, string.Empty }, // the aetitle of the archive where the images have been sent to
            //    { DicomTag.SeriesDescription, "serie 1" },
            //    { DicomTag.PerformingPhysicianName, string.Empty },
            //    { DicomTag.OperatorsName, string.Empty },
            //    { DicomTag.ProtocolName, string.Empty },
            //    { DicomTag.SeriesInstanceUID, DicomUID.Generate() }
            //};
            //DicomSequence refImagesInSerie = new DicomSequence(DicomTag.ReferencedImageSequence);
            //// iterate all images in the serie
            //DicomDataset image = new DicomDataset()
            //{
            //    { DicomTag.ReferencedSOPClassUID, DicomUID.SecondaryCaptureImageStorage },
            //    { DicomTag.ReferencedSOPInstanceUID, DicomUID.Generate() }
            //};
            //refImagesInSerie.Items.Add(image);
            //serie.Add(refImagesInSerie);
            //performedSeriesSq.Items.Add(serie);
            //dataset.Add(performedSeriesSq);

            bool result = false;

            DicomNSetRequest dicomFinished = new DicomNSetRequest(DicomUID.ModalityPerformedProcedureStepSOPClass, affectedInstanceUid)
            {
                Dataset            = dataset,
                OnResponseReceived = (req, res) =>
                {
                    if (res != null)
                    {
                        if (res.Status == DicomStatus.Success)
                        {
                            result = true;
                            Logger.Debug("Set study [{0}] [Complete] Success.", studyInstanceUid);
                        }
                        else
                        {
                            Logger.Warn("Set study [{0}] [Complete] Failed. [{1}]", studyInstanceUid, res.Status);
                        }
                    }
                }
            };

            DicomClient client = new DicomClient(serverIp, serverPort, false, localAET, serverAET);

            await client.AddRequestAsync(dicomFinished);

            await client.SendAsync();

            return(result);
        }
コード例 #14
0
        private static (string responseStatus, string responseMessage) SendMppsCompleted(string serverIP, int serverPort, string serverAET, string clientAET, DicomUID affectedInstanceUid, DicomDataset worklistItem)
        {
            var client  = new DicomClient();
            var dataset = new DicomDataset();

            DicomSequence procedureStepSq = worklistItem.GetSequence(DicomTag.ScheduledProcedureStepSequence);
            // A worklistitem may have a list of scheduledprocedureSteps.
            // For each of them you have to send separate MPPS InProgress- and Completed-messages.
            // there in this example we will only send for the first procedure step
            var procedureStep = procedureStepSq.First();

            // data
            dataset.Add(DicomTag.PerformedProcedureStepEndDate, DateTime.Now);
            dataset.Add(DicomTag.PerformedProcedureStepEndTime, DateTime.Now);
            dataset.Add(DicomTag.PerformedProcedureStepStatus, "COMPLETED");
            dataset.Add(DicomTag.PerformedProcedureStepDescription, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, String.Empty));
            dataset.Add(DicomTag.PerformedProcedureTypeDescription, string.Empty);

            dataset.Add(DicomTag.PerformedProtocolCodeSequence, new DicomDataset());

            // dose and reports
            dataset.Add(DicomTag.ImageAndFluoroscopyAreaDoseProduct, 0.0m); // if there has bee sone dose while examination
            dataset.Add(DicomTag.CommentsOnRadiationDose, string.Empty);    // a free text that contains all dose parameters

            // images created
            var performedSeriesSq = new DicomSequence(DicomTag.PerformedSeriesSequence);
            // iterate all Series that have been created while examination
            var serie = new DicomDataset
            {
                { DicomTag.RetrieveAETitle, string.Empty }, // the aetitle of the archive where the images have been sent to
                { DicomTag.SeriesDescription, "serie 1" },
                { DicomTag.PerformingPhysicianName, string.Empty },
                { DicomTag.OperatorsName, string.Empty },
                { DicomTag.ProtocolName, string.Empty },
                { DicomTag.SeriesInstanceUID, DicomUID.Generate() }
            };
            var refImagesInSerie = new DicomSequence(DicomTag.ReferencedImageSequence);
            // iterate all images in the serie
            var image = new DicomDataset
            {
                { DicomTag.ReferencedSOPClassUID, DicomUID.SecondaryCaptureImageStorage },
                { DicomTag.ReferencedSOPInstanceUID, DicomUID.Generate() }
            };

            refImagesInSerie.Items.Add(image);
            serie.Add(refImagesInSerie);
            performedSeriesSq.Items.Add(serie);
            dataset.Add(performedSeriesSq);

            var dicomFinished = new DicomNSetRequest(DicomUID.ModalityPerformedProcedureStepSOPClass, affectedInstanceUid)
            {
                Dataset = dataset
            };

            string responseStatus  = string.Empty;
            string responseMessage = string.Empty;

            dicomFinished.OnResponseReceived += (req, response) =>
            {
                if (response != null)
                {
                    Console.WriteLine(response);
                    responseStatus  = response.Status.ToString();
                    responseMessage = response.ToString();
                }
            };

            client.AddRequest(dicomFinished);
            client.SendAsync(serverIP, serverPort, false, clientAET, serverAET).Wait();

            return(responseStatus, responseMessage);
        }
コード例 #15
0
 public DicomNSetResponse OnNSetRequest(DicomNSetRequest request)
 {
     throw new NotImplementedException();
 }
コード例 #16
0
        public async Task <bool> SendMppsDiscontinuedAsync(string serverIp, int serverPort, string serverAET, string localAET, string studyInstanceUid, DicomUID affectedInstanceUid, DicomDataset worklistItem)
        {
            DicomSequence procedureStepSq = worklistItem.GetSequence(DicomTag.ScheduledProcedureStepSequence);
            // A worklistitem may have a list of scheduledprocedureSteps.
            // For each of them you have to send separate MPPS InProgress- and Completed-messages.
            // there in this example we will only send for the first procedure step
            DicomDataset procedureStep = procedureStepSq.First();

            DicomDataset dataset = new DicomDataset()
            {
                { DicomTag.StudyInstanceUID, studyInstanceUid },
                { DicomTag.PerformedProcedureStepEndDate, DateTime.Now },
                { DicomTag.PerformedProcedureStepEndTime, DateTime.Now },
                { DicomTag.PerformedProcedureStepStatus, DISCONTINUED },
                { DicomTag.PerformedProcedureStepDescription, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, string.Empty) },
                { DicomTag.PerformedProcedureTypeDescription, string.Empty },

                { DicomTag.PerformedProtocolCodeSequence, new DicomDataset() },
                { DicomTag.ProcedureCodeSequence, new DicomDataset() },

                { DicomTag.PerformedSeriesSequence, new DicomDataset()
                  {
                      { DicomTag.RetrieveAETitle, string.Empty }, // the aetitle of the archive where the images have been sent to
                      { DicomTag.SeriesDescription, "series 1" },
                      { DicomTag.PerformingPhysicianName, string.Empty },
                      { DicomTag.OperatorsName, string.Empty },
                      { DicomTag.ProtocolName, "protocol 1" },
                      { DicomTag.SeriesInstanceUID, DicomUID.Generate() },
                      { DicomTag.ReferencedImageSequence, new DicomDataset()
                        {
                            { DicomTag.ReferencedSOPClassUID, DicomUID.SecondaryCaptureImageStorage },
                            { DicomTag.ReferencedSOPInstanceUID, DicomUID.Generate() }
                        } },
                  } }
            };

            bool result = false;

            DicomNSetRequest dicomAbort = new DicomNSetRequest(DicomUID.ModalityPerformedProcedureStepSOPClass, affectedInstanceUid)
            {
                Dataset            = dataset,
                OnResponseReceived = (req, res) =>
                {
                    if (res != null)
                    {
                        if (res.Status == DicomStatus.Success)
                        {
                            result = true;
                            Logger.Debug("Set study [{0}] [Discontinued] Success.", studyInstanceUid);
                        }
                        else
                        {
                            Logger.Warn("Set study [{0}] [Discontinued] Failed. [{1}]", studyInstanceUid, res.Status);
                        }
                    }
                }
            };

            DicomClient client = new DicomClient(serverIp, serverPort, false, localAET, serverAET);

            await client.AddRequestAsync(dicomAbort);

            await client.SendAsync();

            return(result);
        }
コード例 #17
0
ファイル: DicomNSetResponse.cs プロジェクト: aerik/fo-dicom
 public DicomNSetResponse(DicomNSetRequest request, DicomStatus status)
     : base(request, status)
 {
     SOPInstanceUID = request.SOPInstanceUID;
 }
コード例 #18
0
 public Task <DicomNSetResponse> OnNSetRequestAsync(DicomNSetRequest request)
 => Task.FromResult(new DicomNSetResponse(request, DicomStatus.Success)
 {
     Dataset = request.Dataset
 });