예제 #1
0
 public Driver(
     IGearLever gearLever,
     IClutchPedal clutchPedal,
     IThrottlePedal throttlePedal,
     IBreakPedal breakPedal,
     IRevCounter revCounter,
     ISpeedometer speedometer
     )
 {
     _gearLever     = gearLever;
     _clutchPedal   = clutchPedal;
     _throttlePedal = throttlePedal;
     _breakPedal    = breakPedal;
     _revCounter    = revCounter;
     _speedometer   = speedometer;
 }
예제 #2
0
        public static IObservable <Rate> Measure <T>(this IObservable <T> source, ISpeedometer speedometer = null)
        {
            return(Observable.Create <Rate>(o =>
            {
                speedometer = speedometer ?? new Speedometer(1.Second(), Scheduler.Default);
                var emptyRate = new Rate(-1, 0);

                IDisposable sub = source
                                  .TimeoutScan(
                    speedometer.Period,
                    () =>
                {
                    speedometer.Update(0);
                    return speedometer.Rate;
                },
                    x => speedometer.Update() ? speedometer.Rate : emptyRate,
                    speedometer.Scheduler)
                                  .DistinctUntilChanged()
                                  .Where(r => r.Count >= 0)
                                  .Subscribe(o);

                return sub;
            }));
        }
예제 #3
0
        public static IObservable <RateEvent <T> > MeasureScan <T>(this IObservable <T> source, ISpeedometer speedometer)
        {
            return(Observable.Create <RateEvent <T> >(o =>
            {
                speedometer = speedometer ?? new Speedometer(1.Second(), Scheduler.Default);

                IDisposable sub = source
                                  .TimeoutScan(
                    speedometer.Period,
                    () =>
                {
                    speedometer.Update(0);
                    return new RateEvent <T>(speedometer.Rate);
                },
                    x =>
                {
                    speedometer.Update(1, true);
                    return new RateEvent <T>(x, speedometer.Rate);
                },
                    speedometer.Scheduler)
                                  .Subscribe(o);

                return sub;
            }));
        }