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);
                }
            });
        }
Esempio n. 2
0
 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();
     }
 }