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; }
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; }
/// <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; }