Bladeren bron

Attempting to stabilise reconnection when app goes into background

frankvandenbos 3 maanden geleden
bovenliggende
commit
a687fec65c
1 gewijzigde bestanden met toevoegingen van 21 en 10 verwijderingen
  1. 21 10
      InABox.Client.RPC/Transports/Socket/RPCClientSocketTransport.cs

+ 21 - 10
InABox.Client.RPC/Transports/Socket/RPCClientSocketTransport.cs

@@ -220,17 +220,25 @@ namespace InABox.Rpc
             openEvent.Set();
             openEvent.Set();
         }
         }
 
 
+        private readonly object bConnecting = new object();
+        
         public override bool Connect(CancellationToken ct = default)
         public override bool Connect(CancellationToken ct = default)
         {
         {
-            if (_socket != null)
-            {
-                openEvent.Reset();
-                _socket.Open();
-                openEvent.Wait(ct);
-                return _connected;
-            }
-            else
+            if (_socket?.State == WebSocketState.Open)
+                return true;
+            
+            //lock (bConnecting)
             {
             {
+
+
+                //{
+                //    //openEvent.Reset();
+                //    //_socket.Open();
+                //    //openEvent.Wait(ct);
+                //    //return _connected;
+                //}
+                //else
+                //{
                 var childCts = CancellationTokenSource.CreateLinkedTokenSource(ct);
                 var childCts = CancellationTokenSource.CreateLinkedTokenSource(ct);
 
 
                 var tasks = new List<Task<WebSocket?>>();
                 var tasks = new List<Task<WebSocket?>>();
@@ -239,6 +247,7 @@ namespace InABox.Rpc
                     tasks.Add(Task.Run(() => CreateSocket(url, true, childCts.Token)));
                     tasks.Add(Task.Run(() => CreateSocket(url, true, childCts.Token)));
                     tasks.Add(Task.Run(() => CreateSocket(url, false, childCts.Token)));
                     tasks.Add(Task.Run(() => CreateSocket(url, false, childCts.Token)));
                 }
                 }
+
                 while (tasks.Count > 0)
                 while (tasks.Count > 0)
                 {
                 {
                     var result = Task.WhenAny(tasks).Result;
                     var result = Task.WhenAny(tasks).Result;
@@ -248,8 +257,8 @@ namespace InABox.Rpc
                     {
                     {
                         childCts.Cancel();
                         childCts.Cancel();
 
 
-                        if(_socket != null)
-                            Logger.Send(LogType.Error,"","Socket already exists!");
+                        if (_socket != null)
+                            Logger.Send(LogType.Error, "", "Socket already exists!");
 
 
                         _socket = result.Result;
                         _socket = result.Result;
                         _connected = true;
                         _connected = true;
@@ -268,7 +277,9 @@ namespace InABox.Rpc
                         return _connected;
                         return _connected;
                     }
                     }
                 }
                 }
+
                 return _connected;
                 return _connected;
+                //}
             }
             }
         }
         }