public Association(DICOMServiceClass serviceClass, TcpClient client) { ServiceClass = serviceClass; Stream = new BufferedStream(client.GetStream()); Reader = new NetworkBinaryReader(Stream); PresentationContexts = new List <PresentationContext>(); IpAddress = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString(); Port = ((IPEndPoint)client.Client.RemoteEndPoint).Port; PDUProcessor = new PDUProcessor(); PDataProcessor = new PDataProcessor(); State = NetworkState.IDLE; OutboundMessages = new ConcurrentQueue <AbstractDIMSEBase>(); }
public void ReadWriteDIMSETest() { using (var stream = new MemoryStream()) { //Generate a DIMSE var dimse = CFind.CreateStudyQuery("123456"); var pContext = new PresentationContext() { AbstractSyntax = AbstractSyntax.STUDY_FIND, TransferSyntaxes = new List <string>() { TransferSyntaxHelper.IMPLICIT_VR_LITTLE_ENDIAN } }; PDataMessenger.WriteDimseToStream(dimse, stream, pContext); //Wrap stream in buffer to get to network stream using (var bs = new BufferedStream(stream)) { bs.Position = 0; var net = new NetworkBinaryReader(bs); var pdata = PDataProcessor.ReadPDataTFs(net); var dcm = PDataProcessor.GetCommandObject(pdata); AbstractDIMSE dimseRead; var success = DIMSEReader.TryReadDIMSE(dcm, out dimseRead); Assert.AreEqual(dimse.Elements.Count, dimseRead.Elements.Count); for (int i = 0; i < dimse.Elements.Count; i++) { var el1 = dimse.Elements[i]; var el2 = dimseRead.Elements[i]; Assert.AreEqual(el1.Tag, el2.Tag); Assert.AreEqual(el1.DData, el2.DData); } //Make sure this DIMSE was written with data Assert.IsTrue(dimse.HasData); //REad the data var dataPds = PDataProcessor.ReadPDataTFs(net); var data = PDataProcessor.GetDataObject(dataPds, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN); DICOMAssert.AreEqual(data, dimse.Data); } } }
public void Process(IMessage message) { if (message != null) { switch (message.Type) { case MessageType.PDU: PDUProcessor.Process(message, this); break; case MessageType.PDATA_TF: PDataProcessor.Process(message, this); break; case MessageType.ERROR: ErrorProcessor.Process(message); break; } } }