public LoginViewModel(IDispatcher dispatcher) { Status = "Ready"; Hosts = new BindingList <string>(); _loginService = new LinuxLoginService(dispatcher); //var canService = new CanDiscoveryService("_smb._tcp", Settings.Default.MDnsDomain); var canService = new CanDiscoveryService(); canService .Cans .ObserveOn(WindowsFormsSynchronizationContext.Current) .Subscribe(UpdateCans); //var insertion = Observable.Timer(TimeSpan.FromSeconds(5)) // .Select(_ => Tuple.Create(100u, Observable.Never<Unit>())); // insertion //.ObserveOn(WindowsFormsSynchronizationContext.Current) _cardService = new CardAuthenticationService(); var subscription = _cardService.Insertion .Subscribe( insert => { Debug.WriteLine("LoginViewModel: Card inserted"); _loginService.Connect( Settings.Default.CardHost, insert.Item1.ToString(), String.Empty, true); insert.Item2.Subscribe(_ => _loginService.Disconnect()); }, error => dispatcher.Dispatch(() => Status = error.Message)); Application.ApplicationExit += (s, e) => subscription.Dispose(); _loginCommand = new DelegateCommand <string>( _ => _loginService.Connect(Hostname, Username, Password), _ => CanLogin); _loginService.StateChanged .ObserveOn(WindowsFormsSynchronizationContext.Current) .Subscribe( state => { CanLogin = state.Status == LoginStatus.Disconnected; Status = state.Status.ToString(); if (state.Error != null) { MessageBox.Show(state.Error.Message + Environment.NewLine + state.Error.StackTrace); } }); }
public MainWindow() { InitializeComponent(); try { //TODO: IoC or ServiceLocator var canDiscovery = new CanDiscoveryService(); //var canDiscovery = new CanDiscoveryService("_smb._tcp", Settings.Default.MDnsDomain); var loginService = new WindowsLoginService(); DataContext = new ViewModels.LoginViewModel(loginService, canDiscovery); } catch (Exception e) { MessageBox.Show(e.Message + e.StackTrace); App.Current.Shutdown(); } finally { OpenAdSite(); } }