Ver Fonte

Improved Reconnect loop with cancel/Exit button

Kenric Nugteren há 2 anos atrás
pai
commit
7f973fe624
1 ficheiros alterados com 11 adições e 4 exclusões
  1. 11 4
      prs.desktop/MainWindow.xaml.cs

+ 11 - 4
prs.desktop/MainWindow.xaml.cs

@@ -418,18 +418,18 @@ namespace PRSDesktop
             if ((transport is IRpcClientTransport client))
             {
                 Dispatcher.Invoke(() => {
-                    Progress.ShowModal("Reconnecting", (progress) =>
+                    var success = Progress.ShowModal("Reconnecting", "Exit PRS", (progress, ct) =>
                     {
                         try
                         {
                             DateTime lost = DateTime.Now;
-                            while (!client.IsConnected())
+                            while (!client.IsConnected() && !ct.IsCancellationRequested)
                             {
                                 progress.Report($"Connection lost - ({(DateTime.Now - lost):hh\\:mm})");
                                 try
                                 {
                                     Logger.Send(LogType.Error, ClientFactory.UserID, "Reconnecting - ({0:hh\\:mm})", DateTime.Now - lost);
-                                    client.Connect();
+                                    client.Connect(ct);
                                     if (client.IsConnected())
                                         break;
                                 }
@@ -438,13 +438,20 @@ namespace PRSDesktop
                                     Logger.Send(LogType.Error, ClientFactory.UserID, $"Reconnect Failed: {e1.Message}");
                                 }
                             }
-                            ClientFactory.Validate(ClientFactory.SessionID);
+                            if (client.IsConnected())
+                            {
+                                ClientFactory.Validate(ClientFactory.SessionID);
+                            }
                         }
                         catch(Exception e)
                         {
                             Logger.Send(LogType.Error, ClientFactory.UserID, $"Reconnect Failed: {e.Message}");
                         }
                     });
+                    if (!success)
+                    {
+                        Close();
+                    }
                 });
             }
         }