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; }
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; })); }
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; })); }