Beispiel #1
0
 public void Write(IDimse dimse)
 {
     lock (this) {
         pcid = dimse.PresentationContextId();
         String tsUID = fsm.GetAcceptedTransferSyntaxUID(pcid);
         if (tsUID == null) {
             throw new SystemException();
         }
         (dimse).TransferSyntaxUniqueId = tsUID;
         fsm.FireWrite(dimse);
         if (pDataTF == null) {
             pDataTF = new PDataTF(fsm.WriteMaxLength);
         }
         pDataTF.OpenPDV(pcid, cmd = true);
         Stream outs = new PDataTFOutputStream(this);
         IDicomCommand c = dimse.DicomCommand;
         try {
             c.Write(outs);
         }
         finally {
             outs.Close();
         }
         if (c.HasDataset()) {
             pDataTF.OpenPDV(pcid, cmd = false);
             outs = new PDataTFOutputStream(this);
             try {
                 dimse.WriteTo(outs, tsUID);
             }
             finally {
                 outs.Close();
             }
         }
         FlushPDataTF();
     }
 }
 // Private -------------------------------------------------------
 private void DoMultiRsp(ActiveAssociation assoc, IDimse request, IDicomCommand rspCmd, IMultiDimseRsp mdr)
 {
     try {
         assoc.AddCancelListener(rspCmd.MessageIDToBeingRespondedTo, mdr.CancelListener);
         do {
             DataSet rspData = mdr.Next(assoc, request, rspCmd);
             IDimse rsp = _associationFactory.NewDimse(request.PresentationContextId(), rspCmd, rspData);
             assoc.Association.Write(rsp);
             DoAfterRsp(assoc, rsp);
         } while (rspCmd.IsPending());
     }
     finally {
         mdr.Release();
     }
 }
 public virtual void NSet(ActiveAssociation assoc, IDimse request)
 {
     IDicomCommand requestCmd = request.DicomCommand;
     IDicomCommand rspCmd = _dcmObjectFactory.NewCommand();
     rspCmd.InitNSetRSP(requestCmd.MessageID, requestCmd.RequestedSOPClassUniqueId, requestCmd.RequestedSOPInstanceUniqueId, Success);
     DataSet rspData = null;
     try {
         rspData = DoNSet(assoc, request, rspCmd);
     }
     catch (DcmServiceException e) {
         e.WriteTo(rspCmd);
     }
     IDimse rsp = _associationFactory.NewDimse(request.PresentationContextId(), rspCmd, rspData);
     assoc.Association.Write(rsp);
     DoAfterRsp(assoc, rsp);
 }
 public virtual void CMove(ActiveAssociation assoc, IDimse request)
 {
     IDicomCommand requestCmd = request.DicomCommand;
     IDicomCommand rspCmd = _dcmObjectFactory.NewCommand();
     rspCmd.InitCMoveRSP(requestCmd.MessageID, requestCmd.AffectedSOPClassUniqueId, Pending);
     try {
         DoMultiRsp(assoc, request, rspCmd, DoCMove(assoc, request, rspCmd));
     }
     catch (DcmServiceException e) {
         e.WriteTo(rspCmd);
         IDimse rsp = _associationFactory.NewDimse(request.PresentationContextId(), rspCmd);
         assoc.Association.Write(rsp);
         DoAfterRsp(assoc, rsp);
     }
 }
 public virtual void CEcho(ActiveAssociation assoc, IDimse request)
 {
     IDicomCommand requestCmd = request.DicomCommand;
     IDicomCommand rspCmd = _dcmObjectFactory.NewCommand();
     rspCmd.InitCEchoRSP(requestCmd.MessageID, requestCmd.AffectedSOPClassUniqueId, Success);
     try {
         DoCEcho(assoc, request, rspCmd);
     }
     catch (DcmServiceException e) {
         Logger.Error(e);
         e.WriteTo(rspCmd);
     }
     IDimse rsp = _associationFactory.NewDimse(request.PresentationContextId(), rspCmd);
     assoc.Association.Write(rsp);
     DoAfterRsp(assoc, rsp);
 }