public TradesByTimeViewer(ITradeService tradeService, ISchedulerProvider schedulerProvider) { _schedulerProvider = schedulerProvider; var groupController = new GroupController(); var grouperRefresher = Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(_ => groupController.RefreshGroup()); var loader = tradeService.Trades.Connect() .Group(trade => { var diff = DateTime.Now.Subtract(trade.Timestamp); if (diff.TotalSeconds <= 60) return TimePeriod.LastMinute; if (diff.TotalMinutes <= 60) return TimePeriod.LastHour; return TimePeriod.Older; }, groupController) .Transform(group => new TradesByTime(group, _schedulerProvider)) .Sort(SortExpressionComparer<TradesByTime>.Ascending(t => t.Period)) .ObserveOn(_schedulerProvider.Dispatcher) .Bind(_data) .DisposeMany() .Subscribe(); _cleanUp = new CompositeDisposable(loader, grouperRefresher); }
public TradesByPercentViewer(INearToMarketService nearToMarketService, ISchedulerProvider schedulerProvider) { _schedulerProvider = schedulerProvider; var groupController = new GroupController(); var grouperRefresher = Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(_ => groupController.RefreshGroup()); var loader = nearToMarketService.Query(() => 6) .Group(trade => (int)Math.Truncate(Math.Abs(trade.PercentFromMarket)), groupController) .Transform(group => new Domain.Model.TradesByPercentDiff(group, _schedulerProvider)) .Sort(SortExpressionComparer<Domain.Model.TradesByPercentDiff>.Ascending(t => t.PercentBand),SortOptimisations.ComparesImmutableValuesOnly) .ObserveOn(_schedulerProvider.Dispatcher) .Bind(_data) .DisposeMany() .Subscribe(); ; _cleanUp = new CompositeDisposable(loader, grouperRefresher); }