Bruce Wayne 5 лет назад
Родитель
Сommit
c6b20eea39

+ 11 - 1
NatTypeTester/MainWindow.xaml.cs

@@ -1,4 +1,9 @@
-using System.Reactive.Disposables;
+using System;
+using System.Reactive;
+using System.Reactive.Disposables;
+using System.Reactive.Linq;
+using System.Windows;
+using System.Windows.Input;
 using NatTypeTester.ViewModels;
 using ReactiveUI;
 
@@ -42,6 +47,11 @@ namespace NatTypeTester
                                 viewModel => viewModel.TestClassicNatType,
                                 view => view.TestButton)
                         .DisposeWith(disposableRegistration);
+
+                this.Events().KeyDown
+                        .Where(x => x.Key == Key.Enter && TestButton.IsEnabled)
+                        .Subscribe(y => { TestButton.Command.Execute(Unit.Default); })
+                        .DisposeWith(disposableRegistration);
             });
         }
     }

+ 1 - 0
NatTypeTester/NatTypeTester.csproj

@@ -15,6 +15,7 @@
 
   <ItemGroup>
     <PackageReference Include="Costura.Fody" Version="4.1.0" />
+    <PackageReference Include="ReactiveUI.Events.WPF" Version="11.5.17" />
     <PackageReference Include="ReactiveUI.WPF" Version="11.5.17" />
   </ItemGroup>
 

+ 21 - 11
NatTypeTester/ViewModels/MainWindowViewModel.cs

@@ -4,6 +4,7 @@ using System.IO;
 using System.Linq;
 using System.Reactive;
 using System.Reactive.Linq;
+using System.Windows;
 using DynamicData;
 using DynamicData.Binding;
 using NatTypeTester.Model;
@@ -73,7 +74,7 @@ namespace NatTypeTester.ViewModels
                 .ObserveOnDispatcher()
                 .Bind(StunServers)
                 .Subscribe();
-            TestClassicNatType = ReactiveCommand.CreateFromObservable(TestClassicNatTypeImp);
+            TestClassicNatType = ReactiveCommand.CreateFromObservable(TestClassicNatTypeImpl);
         }
 
         private async void LoadStunServer()
@@ -100,22 +101,31 @@ namespace NatTypeTester.ViewModels
             }
         }
 
-        private IObservable<Unit> TestClassicNatTypeImp()
+        private IObservable<Unit> TestClassicNatTypeImpl()
         {
             return Observable.Start(() =>
             {
-                var server = new StunServer();
-                if (server.Parse(StunServer))
+                try
                 {
-                    using var client = new StunClient3489(server.Hostname, server.Port, NetUtils.ParseEndpoint(LocalEnd));
-                    client.NatTypeChanged.ObserveOn(RxApp.MainThreadScheduler).Subscribe(t => ClassicNatType = $@"{t}");
-                    client.PubChanged.ObserveOn(RxApp.MainThreadScheduler).Subscribe(t => PublicEnd = $@"{t}");
-                    client.LocalChanged.ObserveOn(RxApp.MainThreadScheduler).Subscribe(t => LocalEnd = $@"{t}");
-                    client.Query();
+                    var server = new StunServer();
+                    if (server.Parse(StunServer))
+                    {
+                        using var client = new StunClient3489(server.Hostname, server.Port,
+                                NetUtils.ParseEndpoint(LocalEnd));
+                        client.NatTypeChanged.ObserveOn(RxApp.MainThreadScheduler)
+                                .Subscribe(t => ClassicNatType = $@"{t}");
+                        client.PubChanged.ObserveOn(RxApp.MainThreadScheduler).Subscribe(t => PublicEnd = $@"{t}");
+                        client.LocalChanged.ObserveOn(RxApp.MainThreadScheduler).Subscribe(t => LocalEnd = $@"{t}");
+                        client.Query();
+                    }
+                    else
+                    {
+                        throw new Exception(@"Wrong STUN Server!");
+                    }
                 }
-                else
+                catch (Exception ex)
                 {
-
+                    MessageBox.Show(ex.Message, nameof(NatTypeTester), MessageBoxButton.OK, MessageBoxImage.Error);
                 }
             });
         }