|
@@ -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;
|
|
|
+ //}
|
|
|
}
|
|
|
}
|
|
|
|