Inheritance: EvilDICOM.Network.DIMSE.AbstractDIMSERequest
Example #1
1
        public static void WithSeries(this IEnumerable<CFindResponse> cFinds, DICOMSCU scu, Entity daemon)
        {
            var iods = cFinds.Where(r => r.Status == (ushort)Status.PENDING)
            .Where(r => r.HasData)
            .Where(r => r.Data.Elements.Any(e => e.Tag == TagHelper.STUDY_INSTANCE_UID))
            .Where(r => !string.IsNullOrEmpty(r.Data.Elements.First(e => e.Tag == TagHelper.STUDY_INSTANCE_UID).DData as string))
            .Select(r => r.GetIOD())
            .ToList();
            
            iods.ForEach(i=>i.QueryLevel = QueryLevel.SERIES);

            foreach (var iod in iods)
            {
                var req = new CFindRequest(iod, Root.STUDY);
                var seriesUids = scu.GetResponse(req, daemon)
                     .Where(r => r.Status == (ushort)Status.PENDING)
                     .Where(r => r.HasData)
                     .Where(r => r.Data.Elements.Any(e => e.Tag == TagHelper.SERIES_INSTANCE_UID))
                     .Select(r => new
                     {
                        // Study = study,
                         Series = r.Data.GetSelector().SeriesInstanceUID.Data,
                         Modality = r.Data.GetSelector().Modality.Data
                     })
                     .ToList();
                System.Console.Write("");
            }
        }
Example #2
0
        public List<SeriesResult> GetSeriesUids(List<StudyResult> studies)
        {
            List<SeriesResult> results = new List<SeriesResult>();

            foreach (var study in studies)
            {
                var query = new CFindIOD(QueryLevel.SERIES)
                {
                    PatientId = study.PatientId,
                    StudyInstanceUID = study.StudyUid
                };
                var req = new CFindRequest(query, Root.STUDY);
                var seriesUids = _scu.GetResponse(req, _scp)
                    .Where(r => r.Status == (ushort)Status.PENDING)
                    .Where(r => r.HasData)
                    .Select(r =>
                        new SeriesResult()
                        {
                            PatientId = study.PatientId,
                            StudyUid = study.StudyUid,
                            SeriesUid = r.Data.GetSelector().SeriesInstanceUID.Data,
                            Modality = r.Data.GetSelector().Modality.Data
                        }
                    )
                    .ToList();
                results.AddRange(seriesUids);
            }
            return results;
        }
Example #3
0
 /// <summary>
 /// Creates a base C-Find response but more data needs to be supplied. See CFindService response methods
 /// </summary>
 /// <param name="req"></param>
 public CFindResponse(CFindRequest req, Status status)
 {
     AffectedSOPClassUID       = req.AffectedSOPClassUID;
     CommandField              = (ushort)C.C_FIND_RP;
     MessageIDBeingRespondedTo = req.MessageID;
     Status = (ushort)status;
 }
Example #4
0
        public List<StudyResult> GetStudyUids(string patientId)
        {
            var query = new CFindIOD(QueryLevel.STUDY)
            {
                PatientId = patientId
            };
            var req = new CFindRequest(query, Root.STUDY);
            var studyUids = _scu.GetResponse(req, _scp) // Studies
                .Where(r => r.Status == (ushort)Status.PENDING)
                .Where(r => r.HasData)
                .ToList();

            return studyUids.Select(r => new StudyResult()
                {
                    PatientId = query.PatientId,
                    StudyUid = r.Data.GetSelector().StudyInstanceUID.Data
                })
                .ToList();
        }
Example #5
0
        public IEnumerable<CFindResponse> GetResponse(CFindRequest cFind, Entity ae)
        {
            var client = new TcpClient();
            client.Connect(IPAddress.Parse(ae.IpAddress), ae.Port);
            var assoc = new Association(this, client) { AeTitle = ae.AeTitle };
            PDataMessenger.Send(cFind, assoc);
            List<CFindResponse> responses = new List<CFindResponse>();

            EvilDICOM.Network.Services.DIMSEService.DIMSEResponseHandler<CFindResponse> action = null;
            action = (resp, asc) =>
             {
                 responses.Add(resp);
                 if (resp.Status != (ushort)Status.PENDING)
                 {
                     this.DIMSEService.CFindResponseReceived -= action;
                 }
             };
            this.DIMSEService.CFindResponseReceived += action;
            assoc.Listen();
            return responses;
        }