예제 #1
0
 private void MeasurementsHistory_OnAddedNewMeasurement(SubtMeasurement m) // manager thread
 {
     if (_mainVM.EasyGuiTabIsSelected)
     {
         Dispatcher.CurrentDispatcher.Invoke(() =>
         {
             RaisePropertyChanged(() => Measurements);
             OnAddedNewMeasurement?.Invoke(m);
         });
     }
 }
예제 #2
0
        private void EasyGuiView_OnAddedNewMeasurement(SubtMeasurement m)
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                if (VisualTreeHelper.GetChildrenCount(measurementsDataGrid) != 0)
                {
                    var border = VisualTreeHelper.GetChild(measurementsDataGrid, 0) as Decorator;
                    if (border != null)
                    {
                        var scroll = border.Child as ScrollViewer;
                        if (scroll != null)
                        {
                            scroll.ScrollToEnd();
                        }
                    }
                }


                // measurementsDataGrid.ScrollIntoView(m);
            }));
        }
예제 #3
0
 internal void MeasurementsHistory_OnMeasured(SubtMeasurement m) // manager thread
 {
     _cstApp.BeginInvokeInGuiThread(() =>
     {
         if (_currentFragment == null)
         {
             if (IsItUptime(m))
             {
                 _currentFragment = new UpDownTimeFragment
                 {
                     StartTime = m.MeasurementTime,
                     StopTime  = m.MeasurementTime,
                     UpOrDown  = true,
                 };
                 _fragments.Insert(0, _currentFragment);
                 RaisePropertyChanged(() => DisplayedFragmentsExist);
             }
         }
         else
         {
             var up = IsItUptime(m);
             if (_currentFragment.UpOrDown ^ up)
             {
                 _currentFragment.SetStopTime(m.MeasurementTime);
                 _currentFragment = new UpDownTimeFragment
                 {
                     StartTime = m.MeasurementTime,
                     StopTime  = m.MeasurementTime,
                     UpOrDown  = up,
                 };
                 _fragments.Insert(0, _currentFragment);
                 if (!up)
                 {
                     _downtimeOnlyFragments.Insert(0, _currentFragment);
                 }
                 RaisePropertyChanged(() => DisplayedFragmentsExist);
             }
         }
     });
 }
예제 #4
0
        UpDownTimeFragment _currentFragment = null; // accessed by manager thread

        public static bool IsItUptime(SubtMeasurement m)
        {
            if (m.RxBandwidth < m.TargetBandwidth * 0.1f)
            {
                return(false);
            }
            if (m.TxBandwidth < m.TargetBandwidth * 0.1f)
            {
                return(false);
            }
            if (m.BestRttToPeers > TimeSpan.FromMilliseconds(2000))
            {
                return(false);
            }
            if (m.RxPacketLoss > 0.5)
            {
                return(false);
            }
            if (m.TxPacketLoss > 0.5)
            {
                return(false);
            }
            return(true);
        }
예제 #5
0
파일: Program.cs 프로젝트: ciprianp/dcomms
 private static void MeasurementsHistory_OnAddedNewMeasurement(SubtMeasurement measurement)
 {
     Console.WriteLine($"measurement: download={measurement.RxBandwidthString} (packet loss={measurement.RxPacketLossString}), upload={measurement.TxBandwidthString} (packet loss={measurement.TxPacketLossString})");
 }