示例#1
0
        void cfind_OnResultReceive(DicomAttributeCollection ds)
        {
            StudyInfo study = new StudyInfo();

            study.StudyUid = ds[DicomTags.StudyInstanceUid].GetString(0, "");
            studies.Add(study);
        }
示例#2
0
        public void Run()
        {
            HeaderStreamingServiceClient client = null;

            studies = null;

            StudyInfo study = null;

            while (true)
            {
                Random r = new Random();

                if (String.IsNullOrEmpty(FixedStudyInstanceUid))
                {
                    bool refresh = false;
                    if (studies == null)
                    {
                        refresh = r.Next() % 10 == 0;
                    }
                    else
                    {
                        refresh = r.NextDouble() < (1.0f / studies.Count / 1000f);
                    }

                    if (refresh)
                    {
                        studies = new List <StudyInfo>();

                        CFindSCU cfind = new CFindSCU();
                        cfind.AETitle           = LocalAE;
                        cfind.OnResultReceive  += new CFindSCU.ResultReceivedHandler(cfind_OnResultReceive);
                        cfind.OnQueryCompleted += new CFindSCU.QueryCompletedHandler(cfind_OnQueryCompleted);
                        cfind.Query(RemoteAE, RemoteHost, RemotePort);
                        waitHandle.WaitOne();
                    }
                }
                else
                {
                    studies        = new List <StudyInfo>();
                    study          = new StudyInfo();
                    study.StudyUid = FixedStudyInstanceUid;
                    studies.Add(study);
                }


                if (studies != null && studies.Count > 0)
                {
                    try
                    {
                        if (client == null)
                        {
                            client = new HeaderStreamingServiceClient();
                            client.ClientCredentials.ClientCertificate.SetCertificate(
                                StoreLocation.LocalMachine, StoreName.My,
                                X509FindType.FindBySubjectName,
                                Dns.GetHostName());

                            client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
                        }

                        study = studies[r.Next(studies.Count - 1)];


                        HeaderStreamingParameters param = new HeaderStreamingParameters();
                        param.ServerAETitle    = RemoteAE;
                        param.StudyInstanceUID = study.StudyUid;
                        param.ReferenceID      = Guid.NewGuid().ToString();
                        TimeSpanStatistics ts = new TimeSpanStatistics();
                        ts.Start();
                        Console.WriteLine("************ RETRIEVING... {0} **************", LocalAE);

                        Stream input = client.GetStudyHeader(LocalAE, param);

                        if (input != null)
                        {
                            string outputdir = Path.Combine("./output", LocalAE);
                            if (!Directory.Exists(outputdir))
                            {
                                Directory.CreateDirectory(outputdir);
                            }

                            string temp = Path.Combine(outputdir, study.StudyUid + ".xml");
                            Console.WriteLine("Reading");
                            using (FileStream output = new FileStream(temp, FileMode.OpenOrCreate))
                            {
                                GZipStream gzStream = new GZipStream(input, CompressionMode.Decompress);

                                byte[] buffer = new byte[32 * 1024 * 1024];
                                int    size   = gzStream.Read(buffer, 0, buffer.Length);
                                int    count  = 0;
                                while (size > 0)
                                {
                                    output.Write(buffer, 0, size);
                                    count += size;
                                    Console.Write("\r{0} KB", count / 1024);
                                    size = gzStream.Read(buffer, 0, buffer.Length);
                                }

                                output.Close();
                            }

                            using (FileStream output = new FileStream(temp, FileMode.Open))
                            {
                                XmlDocument doc = new XmlDocument();
                                Console.WriteLine("Reading into xml");
                                StudyXmlIo.Read(doc, output);
                                Console.WriteLine("Done");
                            }
                        }
                        else
                        {
                            Console.WriteLine("{2} - {1,-16} {0,-64}... NOT FOUND", study.StudyUid, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp());
                        }

                        ts.End();
                        input.Close();

                        //File.Delete(temp);
                        Console.WriteLine("{3} - {2,-16} {0,-64}... OK {1}", study.StudyUid, ts.FormattedValue, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp());
                    }
                    catch (TimeoutException)
                    {
                        // try again
                        Console.WriteLine("{2} - {1,-16} {0,-64}... TIMEOUT", study.StudyUid, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp());
                    }
                    catch (Exception fault)
                    {
                        Console.WriteLine("{3} - {2,-16} {0,-64}... FAILED {1}", study.StudyUid, fault.Message, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp());
                        if (client != null)
                        {
                            client.Abort();
                            client.Close();
                            client = null;
                        }
                    }

                    Thread.Sleep(r.Next(Delay));
                }
                else
                {
                    Thread.Sleep(r.Next(1000, 3000));
                }
            }
        }
示例#3
0
文件: Program.cs 项目: nhannd/Xian
        public void Run()
        {
            HeaderStreamingServiceClient client = null;

            studies = null;

            StudyInfo study = null;

            while (true)
            {
                Random r = new Random();

                if (String.IsNullOrEmpty(FixedStudyInstanceUid))
                {
                    bool refresh = false;
                    if (studies == null) 
                        refresh = r.Next() % 10 == 0;
                    else
                    {
                        refresh = r.NextDouble() < (1.0f/studies.Count/1000f);
                    }

                    if (refresh)
                    {
                        studies = new List<StudyInfo>();

                        CFindSCU cfind = new CFindSCU();
                        cfind.AETitle = LocalAE;
                        cfind.OnResultReceive += new CFindSCU.ResultReceivedHandler(cfind_OnResultReceive);
                        cfind.OnQueryCompleted += new CFindSCU.QueryCompletedHandler(cfind_OnQueryCompleted);
                        cfind.Query(RemoteAE, RemoteHost, RemotePort);
                        waitHandle.WaitOne();
                        
                    }
                   
                    
                }
                else
                {
                    studies = new List<StudyInfo>();
                    study = new StudyInfo();
                    study.StudyUid = FixedStudyInstanceUid;
                    studies.Add(study);
                }


                if (studies!=null && studies.Count > 0)
                {
                    
                    try
                    {
                        if (client==null)
                        {
                            client = new HeaderStreamingServiceClient();
                            client.ClientCredentials.ClientCertificate.SetCertificate(
                                    StoreLocation.LocalMachine, StoreName.My, 
                                    X509FindType.FindBySubjectName,
                                    Dns.GetHostName());

                            client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;

                        }

                        study = studies[r.Next(studies.Count - 1)];

                        
                        HeaderStreamingParameters param = new HeaderStreamingParameters();
                        param.ServerAETitle = RemoteAE;
                        param.StudyInstanceUID = study.StudyUid;
                        param.ReferenceID = Guid.NewGuid().ToString();
                        TimeSpanStatistics ts = new TimeSpanStatistics();
                        ts.Start();
                        Console.WriteLine("************ RETRIEVING... {0} **************", LocalAE);
                            
                        Stream input = client.GetStudyHeader(LocalAE, param);

                        if (input!=null)
                        {
                            string outputdir = Path.Combine("./output", LocalAE);
                            if (!Directory.Exists(outputdir))
                                Directory.CreateDirectory(outputdir);

                            string temp = Path.Combine(outputdir, study.StudyUid + ".xml");
                            Console.WriteLine("Reading");
                            using (FileStream output = new FileStream(temp, FileMode.OpenOrCreate))
                            {
                                GZipStream gzStream = new GZipStream(input, CompressionMode.Decompress);

                                byte[] buffer = new byte[32*1024*1024];
                                int size = gzStream.Read(buffer, 0, buffer.Length);
                                int count = 0;
                                while(size>0)
                                {
                                    output.Write(buffer, 0, size);
                                    count += size;
                                    Console.Write("\r{0} KB", count/1024);
                                    size = gzStream.Read(buffer, 0, buffer.Length); 
                                }
                                
                                output.Close();
                            }

                            using (FileStream output = new FileStream(temp, FileMode.Open))
                            {
                                XmlDocument doc = new XmlDocument();
                                Console.WriteLine("Reading into xml");
                                StudyXmlIo.Read(doc, output);
                                Console.WriteLine("Done");
                            }
                                

                        }
                        else
                        {
                            Console.WriteLine("{2} - {1,-16} {0,-64}... NOT FOUND", study.StudyUid, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp()); 
                        
                        }

                        ts.End();
                        input.Close();

                        //File.Delete(temp);
                        Console.WriteLine("{3} - {2,-16} {0,-64}... OK {1}", study.StudyUid, ts.FormattedValue, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp());

                    }
                    catch(TimeoutException)
                    {
                        // try again
                        Console.WriteLine("{2} - {1,-16} {0,-64}... TIMEOUT", study.StudyUid, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp());
                    }
                    catch (Exception fault)
                    {
                        Console.WriteLine("{3} - {2,-16} {0,-64}... FAILED {1}", study.StudyUid, fault.Message, LocalAE, System.Diagnostics.Stopwatch.GetTimestamp());
                        if (client!=null)
                        {
                            client.Abort();
                            client.Close();
                            client = null;
                        }
                    }
                    
                    Thread.Sleep(r.Next(Delay));
                }
                else
                {
                    Thread.Sleep(r.Next(1000,3000));
                }
                
                
            }
          
        }
示例#4
0
文件: Program.cs 项目: nhannd/Xian
 void cfind_OnResultReceive(DicomAttributeCollection ds)
 {
     StudyInfo study = new StudyInfo();
     study.StudyUid = ds[DicomTags.StudyInstanceUid].GetString(0, "");
     studies.Add(study);
 }