Ejemplo n.º 1
0
        /// <summary>
        /// Emits a CMove operation to an entity which moves an image from the entity to the specified AETitle
        /// </summary>
        /// <param name="scp">the provider which will perform the move</param>
        /// <param name="sopUid">the uid of the image to be moved</param>
        /// <param name="patientId">the patient id of the image</param>
        /// <param name="toAETite">the entity title which will receive the image</param>
        /// <param name="msgId">the message id</param>
        /// <returns>the move response</returns>
        public CMoveResponse SendCMoveImage(Entity daemon, CFindImageIOD iod, string toAETite, ref ushort msgId)
        {
            ManualResetEvent mr   = new ManualResetEvent(false);
            CMoveResponse    resp = null;
            var cr = new EvilDICOM.Network.Services.DIMSEService.DIMSEResponseHandler <CMoveResponse>((res, asc) =>
            {
                if (!(res.Status == (ushort)Status.PENDING))
                {
                    mr.Set();
                }
                resp = res;
            });
            var result = new CMoveIOD()
            {
                QueryLevel = QueryLevel.IMAGE, SOPInstanceUID = iod.SOPInstanceUID, PatientId = iod.PatientId, StudyInstanceUID = iod.StudyInstanceUID, SeriesInstanceUID = iod.SeriesInstanceUID
            };
            var request = new CMoveRequest(result, toAETite, Root.STUDY, EvilDICOM.Core.Enums.Priority.MEDIUM, msgId);

            this.DIMSEService.CMoveResponseReceived += cr;
            this.SendMessage(request, daemon);
            mr.WaitOne();
            this.DIMSEService.CMoveResponseReceived -= cr;
            msgId += 2;
            return(resp);
        }
Ejemplo n.º 2
0
        public void SendImage(ImageResult ir, DICOMSCP reciever)
        {
            AutoResetEvent ar    = new AutoResetEvent(false);
            var            query = new CMoveIOD()
            {
                QueryLevel     = QueryLevel.IMAGE,
                PatientId      = ir.PatientId,
                SOPInstanceUID = ir.SopInstanceUid
            };

            if (ir.SeriesUid != null)
            {
                query.SeriesInstanceUID = ir.SeriesUid;
            }

            if (!reciever.IsListening)
            {
                reciever.ListenForIncomingAssociations(true);
            }

            ManualResetEvent mr = new ManualResetEvent(false);
            var cr = new EvilDICOM.Network.Services.DIMSEService.DIMSEResponseHandler <CMoveResponse>((res, asc) =>
            {
                if (!(res.Status == (ushort)Status.PENDING))
                {
                    mr.Set();
                }
            });

            _scu.DIMSEService.CMoveResponseReceived += cr;
            _scu.SendMessage(new CMoveRequest(query, reciever.ApplicationEntity.AeTitle), _scp);
            mr.WaitOne();
            _scu.DIMSEService.CMoveResponseReceived -= cr;
        }
Ejemplo n.º 3
0
        public CMoveResponse SendCMove(CFindStudyIOD iod, string toAETite, ref ushort msgId)
        {
            var result = new CMoveIOD
            {
                QueryLevel       = QueryLevel.STUDY,
                StudyInstanceUID = iod.StudyInstanceUID,
            };
            var request = new CMoveRequest(result, toAETite, Root.STUDY, Core.Enums.Priority.MEDIUM, msgId);

            return(_scu.GetResponse <CMoveResponse, CMoveRequest>(request, callingEntity, ref msgId));
        }
Ejemplo n.º 4
0
        public CMoveRequest(CMoveIOD iod, string moveToAeTitle, Root root = Root.STUDY, Priority priority = Core.Enums.Priority.MEDIUM,
                            ushort messageId = 1)
        {
            switch (root)
            {
            case Root.PATIENT:
                AffectedSOPClassUID = AbstractSyntax.PATIENT_MOVE;
                break;

            case Root.STUDY:
                AffectedSOPClassUID = AbstractSyntax.STUDY_MOVE;
                break;
            }
            CommandField    = (ushort)C.C_MOVE_RQ;
            Data            = new DICOMObject(iod.Elements);
            MoveDestination = moveToAeTitle;
            Priority        = (ushort)priority;
            MessageID       = messageId;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Emits a CMove operation to an entity which moves an image from the entity to the specified AETitle
        /// </summary>
        /// <param name="scp">the provider which will perform the move</param>
        /// <param name="sopUid">the uid of the image to be moved</param>
        /// <param name="patientId">the patient id of the image</param>
        /// <param name="toAETite">the entity title which will receive the image</param>
        /// <param name="msgId">the message id</param>
        /// <returns>the move response</returns>
        public CMoveResponse SendCMoveImage(Entity daemon, CFindImageIOD iod, string toAETite, ref ushort msgId)
        {
            System.DateTime lastContact = System.DateTime.Now;
            int             msWait      = 2000;

            var           mr   = new ManualResetEvent(false);
            CMoveResponse resp = null;
            var           cr   = new Services.DIMSEService.DIMSEResponseHandler <CMoveResponse>((res, asc) =>
            {
                lastContact = System.DateTime.Now;
                if (!(res.Status == (ushort)Status.PENDING))
                {
                    mr.Set();
                }
                resp = res;
            });
            var result = new CMoveIOD
            {
                QueryLevel        = QueryLevel.IMAGE,
                SOPInstanceUID    = iod.SOPInstanceUID,
                PatientId         = iod.PatientId,
                StudyInstanceUID  = iod.StudyInstanceUID,
                SeriesInstanceUID = iod.SeriesInstanceUID
            };
            var request = new CMoveRequest(result, toAETite, Root.STUDY, Core.Enums.Priority.MEDIUM, msgId);

            DIMSEService.CMoveResponseReceived += cr;
            SendMessage(request, daemon);
            while ((System.DateTime.Now - lastContact).TotalMilliseconds < msWait)
            {
                mr.WaitOne(msWait);
            }
            DIMSEService.CMoveResponseReceived -= cr;
            msgId += 2;
            return(resp);
        }
Ejemplo n.º 6
0
        public CMoveResponse SendCMove(CMoveIOD iod, string toAETite, ref ushort msgId)
        {
            var request = new CMoveRequest(iod, toAETite, Root.STUDY, Core.Enums.Priority.MEDIUM, msgId);

            return(_scu.GetResponse <CMoveResponse, CMoveRequest>(request, callingEntity, ref msgId));
        }