public void Write(Dimse dimse) { lock(this) { pcid = dimse.pcid(); System.String tsUID = fsm.GetAcceptedTransferSyntaxUID(pcid); if (tsUID == null) { throw new System.SystemException(); } ((Dimse) dimse).TransferSyntaxUID = tsUID; fsm.FireWrite(dimse); if (pDataTF == null) { pDataTF = new PDataTF(fsm.WriteMaxLength); } pDataTF.OpenPDV(pcid, cmd = true); Stream outs = new PDataTFOutputStream(this); Command c = dimse.Command; 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, Dimse rq, Command rspCmd, MultiDimseRsp mdr) { try { assoc.AddCancelListener(rspCmd.MessageIDToBeingRespondedTo, mdr.CancelListener); do { Dataset rspData = mdr.next(assoc, rq, rspCmd); Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd, rspData); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); } while (rspCmd.IsPending()); } finally { mdr.release(); } }
public virtual void c_store(ActiveAssociation assoc, Dimse rq) { Command rqCmd = rq.Command; Command rspCmd = objFact.NewCommand(); rspCmd.InitCStoreRSP(rqCmd.MessageID, rqCmd.AffectedSOPClassUID, rqCmd.AffectedSOPInstanceUID, SUCCESS); try { DoCStore(assoc, rq, rspCmd); } catch (DcmServiceException e) { e.WriteTo(rspCmd); } Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); }
public virtual void n_set(ActiveAssociation assoc, Dimse rq) { Command rqCmd = rq.Command; Command rspCmd = objFact.NewCommand(); rspCmd.InitNSetRSP(rqCmd.MessageID, rqCmd.RequestedSOPClassUID, rqCmd.RequestedSOPInstanceUID, SUCCESS); Dataset rspData = null; try { rspData = DoNSet(assoc, rq, rspCmd); } catch (DcmServiceException e) { e.WriteTo(rspCmd); } Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd, rspData); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); }
public virtual void c_move(ActiveAssociation assoc, Dimse rq) { Command rqCmd = rq.Command; Command rspCmd = objFact.NewCommand(); rspCmd.InitCMoveRSP(rqCmd.MessageID, rqCmd.AffectedSOPClassUID, PENDING); try { DoMultiRsp(assoc, rq, rspCmd, DoCMove(assoc, rq, rspCmd)); } catch (DcmServiceException e) { e.WriteTo(rspCmd); Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); } }