示例#1
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;
 }
示例#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;
        }
示例#3
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;
 }