public MainViewModel(RxSpySessionModel model) { Model = model; this.WhenAnyValue(x => x.Model.TrackedObservables) .ToProperty(this, x => x.TrackedObservables, out _trackedObservables); GridViewModel = new RxSpyObservablesGridViewModel(model.TrackedObservables); this.WhenAnyValue(x => x.GridViewModel.SelectedItem) .Select(x => x == null ? null : x.Model) .ToProperty(this, x => x.SelectedObservable, out _selectedObservable); this.WhenAnyValue(x => x.SelectedObservable) .Select(x => x == null ? null : new RxSpyObservableDetailsViewModel(x)) .ToProperty(this, x => x.DetailsViewModel, out _detailViewModel); var throttledSignalCount = this.WhenAnyValue(x => x.Model.SignalCount) .Throttle(TimeSpan.FromSeconds(1), RxApp.MainThreadScheduler) .Publish() .RefCount(); throttledSignalCount .Scan(Tuple.Create(0L, 0L), (acc, cur) => Tuple.Create(acc.Item2, cur)) .Select(x => (double)(x.Item2 - x.Item1)) .ToProperty(this, x => x.SignalsPerSecond, out _signalsPerSecond); throttledSignalCount.ToProperty(this, x => x.SignalCount, out _signalCount); this.WhenAnyValue(x => x.Model.ErrorCount) .Throttle(TimeSpan.FromSeconds(1), RxApp.MainThreadScheduler) .ToProperty(this, x => x.ErrorCount, out _errorCount); }
public static void Start() { var args = Environment.GetCommandLineArgs(); var address = args.Length > 1 ? new Uri(args[1]) : new Uri("http://localhost:65073/rxspy/"); var client = new RxSpyHttpClient(); var session = new RxSpySessionModel(); client.Connect(address, TimeSpan.FromSeconds(5)) .Where(x => x != null) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(session.OnEvent, ex => { MessageBox.Show(App.Current.MainWindow, "Lost connection to host", "Host disconnected", MessageBoxButton.OK, MessageBoxImage.Error); }); //session.OnEvent(new OperatorCreatedEvent //{ // EventType = EventType.OperatorCreated, // Name = "Dummy1", // Id = 0, //}); //session.OnEvent(new OperatorCreatedEvent //{ // EventType = EventType.OperatorCreated, // Name = "Dummy2", // Id = 1, //}); //session.OnEvent(new OperatorCreatedEvent //{ // EventType = EventType.OperatorCreated, // Name = "Dummy3", // Id = 2 //}); //session.OnEvent(new SubscribeEvent { EventType = EventType.Subscribe, ChildId = 2, ParentId = 1 }); //session.OnEvent(new SubscribeEvent { EventType = EventType.Subscribe, ChildId = 1, ParentId = 0 }); var mainViewModel = new MainViewModel(session); Locator.CurrentMutable.RegisterConstant(mainViewModel, typeof(MainViewModel)); Locator.CurrentMutable.Register(() => new MainView(), typeof(IViewFor<MainViewModel>)); Locator.CurrentMutable.Register(() => new TrackedObservablesGrid(), typeof(IViewFor<RxSpyObservablesGridViewModel>)); Locator.CurrentMutable.Register(() => new ObservableDetails(), typeof(IViewFor<RxSpyObservableDetailsViewModel>)); }