Example #1
0
        private void DiscoverDevice()
        {
            var busy = _discoverBusy.ProcessStart();

            _devices.Clear();
            SwMainApi.Discover().Subscribe(d => _devices.Add(d), (ex) => busy.Dispose(), () => busy.Dispose());
        }
Example #2
0
        private void SearchIp()
        {
            IPAddress addr;

            if (!IPAddress.TryParse(SearchIpAddr.Value, out addr))
            {
                _searchFailed.OnNext(true);
                return;
            }

            var busy = _discoverBusy.ProcessStart();

            _devices.Clear();
            SwMainApi.DiscoverWithIp(addr).Subscribe(d => _devices.Add(d),
                                                     (ex) => {
                _searchFailed.OnNext(true);
                busy.Dispose();
            }, () => {
                _searchFailed.OnNext(!_devices.Any());
                busy.Dispose();
            });
        }
Example #3
0
        public DeviceSelectDialogViewModel()
        {
            _disposables = new CompositeDisposable();

            LocalAddress = SwMainApi.GetAllLocalIPv4Addresses().FirstOrDefault();
            var ver = Assembly.GetCallingAssembly().GetName().Version;

            AppVersion = $"{ver.Major}.{ver.Minor}.{ver.Build}";

            _devices = new ObservableCollection <DiscoverResult>();
            Devices  = _devices.ToReadOnlyReactiveCollection().AddTo(_disposables);

            _discoverBusy         = new BusyNotifier();
            DiscoverDeviceCommand = _discoverBusy.Inverse().ToReactiveCommand().AddTo(_disposables);
            DiscoverDeviceCommand.Delay(new TimeSpan(100)).Subscribe(_ => DiscoverDevice()).AddTo(_disposables);

            IsSearchIpMode = new ReactiveProperty <bool>(false).AddTo(_disposables);
            IsSearchIpMode.Subscribe(b => {
                if (b)
                {
                    // Enter mode: clear fail flag.
                    _searchFailed.OnNext(false);
                }
                else if (DiscoverDeviceCommand.CanExecute())
                {
                    // Exit mode: rescan devices.
                    DiscoverDeviceCommand.Execute();
                }
            }).AddTo(_disposables);

            _searchFailed   = new BehaviorSubject <bool>(false).AddTo(_disposables);
            SearchFailed    = _searchFailed.ToReadOnlyReactiveProperty().AddTo(_disposables);
            SearchIpAddr    = new ReactiveProperty <string>().SetValidateAttribute(() => SearchIpAddr).AddTo(_disposables);
            SearchIpCommand = Observable.CombineLatest(SearchIpAddr.ObserveHasErrors, _discoverBusy, (e, c) => !e && !c)
                              .ToReactiveCommand().AddTo(_disposables);
            SearchIpCommand.Subscribe(_ => SearchIp()).AddTo(_disposables);
        }