예제 #1
0
        private void PerformQueryOrRelease()
        {
            if (_moveQueries.Count > 0)
            {
                byte pcid = Associate.FindAbstractSyntax(MoveSopClassUID);
                if (Associate.GetPresentationContextResult(pcid) == DcmPresContextResult.Accept)
                {
                    CMoveQuery query   = _moveQueries.Dequeue();
                    DcmDataset dataset = new DcmDataset(Associate.GetAcceptedTransferSyntax(pcid));
                    switch (query.QueryRetrieveLevel)
                    {
                    case DcmQueryRetrieveLevel.Patient:
                        dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "PATIENT");
                        dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID);
                        break;

                    case DcmQueryRetrieveLevel.Study:
                        dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "STUDY");
                        dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID);
                        dataset.AddElementWithValue(DicomTags.StudyInstanceUID, query.StudyInstanceUID);
                        break;

                    case DcmQueryRetrieveLevel.Series:
                        dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "SERIES");
                        dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID);
                        dataset.AddElementWithValue(DicomTags.StudyInstanceUID, query.StudyInstanceUID);
                        dataset.AddElementWithValue(DicomTags.SeriesInstanceUID, query.SeriesInstanceUID);
                        break;

                    case DcmQueryRetrieveLevel.Image:
                        dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "IMAGE");
                        dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID);
                        dataset.AddElementWithValue(DicomTags.StudyInstanceUID, query.StudyInstanceUID);
                        dataset.AddElementWithValue(DicomTags.SeriesInstanceUID, query.SeriesInstanceUID);
                        dataset.AddElementWithValue(DicomTags.SOPInstanceUID, query.SOPInstanceUID);
                        break;

                    default:
                        break;
                    }
                    _current = query;
                    SendCMoveRequest(pcid, 1, DestinationAE, Priority, dataset);
                }
                else
                {
                    Log.Info("{0} -> Presentation context rejected: {1}", LogID, Associate.GetPresentationContextResult(pcid));
                    SendReleaseRequest();
                }
            }
            else
            {
                SendReleaseRequest();
            }
        }
예제 #2
0
 private void PerformQueryOrRelease()
 {
     if (FindQueries.Count > 0)
     {
         Tq query = FindQueries.Dequeue();
         _current = query;
         byte pcid = Associate.FindAbstractSyntax(FindSopClassUID);
         if (Associate.GetPresentationContextResult(pcid) == DcmPresContextResult.Accept)
         {
             DcmDataset dataset = query.ToDataset(Associate.GetAcceptedTransferSyntax(pcid));
             SendCFindRequest(pcid, NextMessageID(), Priority, dataset);
         }
         else
         {
             Log.Info("{0} <- Presentation context rejected: {1}", LogID, Associate.GetPresentationContextResult(pcid));
             SendReleaseRequest();
         }
     }
     else
     {
         SendReleaseRequest();
     }
 }