Преглед изворни кода

Attempting to stabilise reconnection when app goes into background

frankvandenbos пре 3 месеци
родитељ
комит
a687fec65c
1 измењених фајлова са 21 додато и 10 уклоњено
  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();
         }
 
+        private readonly object bConnecting = new object();
+        
         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 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, false, childCts.Token)));
                 }
+
                 while (tasks.Count > 0)
                 {
                     var result = Task.WhenAny(tasks).Result;
@@ -248,8 +257,8 @@ namespace InABox.Rpc
                     {
                         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;
                         _connected = true;
@@ -268,7 +277,9 @@ namespace InABox.Rpc
                         return _connected;
                     }
                 }
+
                 return _connected;
+                //}
             }
         }