Beispiel #1
0
 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>();
 }
Beispiel #2
0
        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;
                }
            }
        }