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