예제 #1
0
        private void RemoveMoveItem(ListViewItem item)
        {
            MoveServer server = item.Tag as MoveServer;

            listViewMoves.Items.Remove(item);
            server.Delete();
        }
예제 #2
0
        public void Move(MoveInfo info)
        {
            try
            {
                DicomServer dicomServer = ServiceLocator.Retrieve <DicomServer>();
                string      lastStatus  = string.Empty;

                _Scp.Timeout = dicomServer.ClientTimeout;
                foreach (string aetitle in _AeTitles)
                {
                    if (!Move(_Scp, info, aetitle, dicomServer.TemporaryDirectory, ref lastStatus) && EnableRetry && NumberOfRetries > 0)
                    {
                        MoveServer       server   = new MoveServer(_Scp);
                        Job <MoveServer> retryJob = new Job <MoveServer>()
                        {
                            Loops = 1, Data = server
                        };

                        server.DestinationAE = aetitle;
                        server.Info          = info;
                        server.RetryCount    = NumberOfRetries;
                        server.LastStatus    = lastStatus;
                        server.IPAddress     = _Scp.PeerAddress.ToString();
                        retryJob.StartTime   = Timeout.Milliseconds().FromNow();
                        Module.Scheduler.SubmitJob <MoveServer>(retryJob, Retry);
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Global.SystemException(string.Empty, e);
            }
        }
예제 #3
0
파일: MainForm.cs 프로젝트: enBask/Asgard
        public MainForm()
        {
            InitializeComponent();

            var moveServer = new MoveServer();

            var renderSystem = moveServer.GetEntitySystem<RenderSystem>();
            renderSystem.TargetGraphics = CreateGraphics();

            moveServer.Start();
            _serverThread = new Thread(() =>
            {
                moveServer.Run();
            });
            _serverThread.IsBackground = true;
            _serverThread.Start();

            var th = new Thread(() =>
            {
                while (true)
                {
                    var fontStyle = FontStyle.Bold;
                    //Thread.Sleep(1);
                    var net = moveServer.LookupSystem<BifrostServer>();
                    if (net != null)
                    {
                        var stats = net.GetStats();
                        Thread.Sleep(1000);
                        var stats2 = net.GetStats();

                        if (stats != null && stats2 != null)
                        {
                            var oDiff = stats2.BytesOutPerSec - stats.BytesOutPerSec;
                            var iDiff = stats2.BytesInPerSec - stats.BytesInPerSec;
                            //oDiff = (float)oDiff;
                            var outBytes = Math.Round(oDiff / 1024f * 8f, 2);
                            var inBytes = Math.Round(iDiff / 1024f * 8f, 2);
                            try
                            {
                                lock(renderSystem.LockObject)
                                {
                                    var g = renderSystem.TextLayer;
                                    if (g != null)
                                    {
                                        g.Clear(Color.White);
                                        g.DrawString("Out kbps: " + outBytes,
                                            new Font(FontFamily.GenericMonospace, 12, fontStyle), Brushes.Black, 0, 0);
                                        g.DrawString("In kbps : " + inBytes,
                                            new Font(FontFamily.GenericMonospace, 12, fontStyle), Brushes.Black, 0, 15);
                                    }
                                }
                            }
                            catch { }
                        }
                    }
                }
            });
            th.IsBackground = true;
            th.Start();
        }
예제 #4
0
        public void SerializeAndDeSerializeMoveServerMessages()
        {
            MoveServer move = new MoveServer(0, Move.NotAllowed);

            byte[]     bytes   = Serializer.Serialize(move, playerIntegerSize);
            MoveServer message = (MoveServer)Serializer.DeSerializeClient(bytes, playerIntegerSize);

            Assert.AreEqual(move, message, "Should be able to serialize and deserialize the move server message.");
        }
예제 #5
0
        private void UpdateMoveStatus(MoveServer server, string status)
        {
            ListViewItem item = (from i in listViewMoves.Items.OfType <ListViewItem>()
                                 where i.Tag == server
                                 select i).FirstOrDefault();

            if (item != null)
            {
                server.LastStatus = status;
                item.Text         = status;
            }
        }
예제 #6
0
        private void Retry(Job <MoveServer> job, MoveServer server)
        {
            string      lastStatus  = string.Empty;
            DicomServer dicomServer = ServiceLocator.Retrieve <DicomServer>();
            bool        success;

            server.Scp.AETitle     = dicomServer.AETitle;
            server.Scp.PeerAddress = IPAddress.Parse(dicomServer.HostAddress);
            server.Scp.Timeout     = dicomServer.ClientTimeout;
            success = Move(server.Scp, server.Info, server.DestinationAE, dicomServer.TemporaryDirectory, ref lastStatus);
            server.RetryCount--;
            //
            // If the store operation failed and we do not have not exhausted our retry count we
            // will try to send this dataset again later
            //
            if (!success && server.RetryCount > 0)
            {
                Job <MoveServer> retryJob = new Job <MoveServer>()
                {
                    Loops = 1, Data = server
                };
                string retryMessage = server.RetryCount > 0 ? string.Format("are {0} retries", server.RetryCount) : "is only 1 retry";
                string message      = string.Format("[Rules] Failed to successfully move dataset to {0}. There {0} left.", server.Scp.AETitle, retryMessage);

                Logger.Global.SystemMessage(LogType.Error, message, string.Empty);
                retryJob.StartTime = Timeout.Milliseconds().FromNow();
                Module.Scheduler.SubmitJob <MoveServer>(retryJob, Retry);
            }
            else
            {
                //
                // If the dataset is not successfully store we need to save the info so that it can be manually sent to
                // its destination.
                //
                if (!success)
                {
                    try
                    {
                        string message = string.Format("[Rules] Failed to successfully move dataset to {0} after {1} retries. Dataset will be added to manual resend queue", server.Scp.AETitle, NumberOfRetries);

                        Logger.Global.SystemMessage(LogType.Error, message, string.Empty);
                        server.Save();
                    }
                    catch (Exception e)
                    {
                        Logger.Global.SystemException(string.Empty, e);
                    }
                }
            }
        }
예제 #7
0
        private Dictionary <string, MoveServer> LoadMoveFailures(string failureDirectory)
        {
            Dictionary <string, MoveServer> failures = new Dictionary <string, MoveServer>();
            IEnumerable <FileInfo>          files    = FileSearcher.GetFiles(new DirectoryInfo(failureDirectory), "move*.fail", SearchOption.TopDirectoryOnly);

            foreach (FileInfo file in files.OrderBy(f => f.CreationTime))
            {
                try
                {
                    MoveServer server = Utils.LoadFromXml <MoveServer>(file.FullName);

                    server.FileName = file.FullName;
                    failures.Add(file.FullName, server);
                }
                catch (Exception e)
                {
                    Messager.ShowError(_View as Form, e);
                }
            }

            return(failures);
        }
예제 #8
0
        private void SendMoveItem(ListViewItem item)
        {
            MoveServer failure = item.Tag as MoveServer;

            using (ProgressDialog progress = new ProgressDialog())
            {
                string status = string.Empty;

                progress.Title         = "Retrying";
                progress.CancelMessage = "Please wait...";
                progress.Line1         = string.Format("Sending {0} move request to server.", failure.Info.MoveType);
                progress.ShowDialog(this, DialogFlags.Modal | DialogFlags.NoMinimize | DialogFlags.AutoTime | DialogFlags.NoProgressBar);
                progress.Line2          = "Server AE: " + failure.Scp.AETitle;
                failure.Scp.PeerAddress = IPAddress.Parse(failure.IPAddress);
                if (!MoveClient.Move(failure.Scp, failure.Info, failure.DestinationAE, ProcessorConfiguration.Settings.TemporaryDirectory, ref status))
                {
                    UpdateMoveStatus(failure, status);
                }
                else
                {
                    RemoveMoveItem(item);
                }
            }
        }
예제 #9
0
 static void Main(string[] args)
 {
     Console.WriteLine("开始测试!");
     var testMove = new MoveServer();
 }