1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-09 08:56:13 +00:00

Fix for reconnecting

This commit is contained in:
JKorf 2019-01-17 14:52:28 +01:00
parent 4cc5692328
commit 7020b5cb14
2 changed files with 30 additions and 22 deletions

View File

@ -7,7 +7,7 @@
<PropertyGroup> <PropertyGroup>
<PackageId>CryptoExchange.Net</PackageId> <PackageId>CryptoExchange.Net</PackageId>
<Authors>JKorf</Authors> <Authors>JKorf</Authors>
<PackageVersion>2.0.7</PackageVersion> <PackageVersion>2.0.8</PackageVersion>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance> <PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageProjectUrl>https://github.com/JKorf/CryptoExchange.Net</PackageProjectUrl> <PackageProjectUrl>https://github.com/JKorf/CryptoExchange.Net</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/JKorf/CryptoExchange.Net/blob/master/LICENSE</PackageLicenseUrl> <PackageLicenseUrl>https://github.com/JKorf/CryptoExchange.Net/blob/master/LICENSE</PackageLicenseUrl>

View File

@ -174,33 +174,41 @@ namespace CryptoExchange.Net
socket.Reconnecting = true; socket.Reconnecting = true;
log.Write(LogVerbosity.Info, $"Socket {socket.Id} Connection lost, will try to reconnect"); log.Write(LogVerbosity.Info, $"Socket {socket.Id} Connection lost, will try to reconnect after {ReconnectInterval}");
Task.Run(() => Task.Run(() =>
{ {
Thread.Sleep(ReconnectInterval); while (socket.ShouldReconnect)
socket.Reset();
if (!socket.Connect().Result)
{ {
log.Write(LogVerbosity.Debug, $"Socket {socket.Id} failed to reconnect"); Thread.Sleep(ReconnectInterval);
return; // Connect() should result in a SocketClosed event so we end up here again socket.Reset();
if (!socket.Connect().Result)
{
log.Write(LogVerbosity.Debug, $"Socket {socket.Id} failed to reconnect");
continue;
}
var time = socket.DisconnectTime;
socket.DisconnectTime = null;
log.Write(LogVerbosity.Info, $"Socket {socket.Id} reconnected after {DateTime.UtcNow - time}");
SocketSubscription subscription;
lock (sockets)
subscription = sockets.Single(s => s.Socket == socket);
if (!SocketReconnect(subscription, DateTime.UtcNow - time.Value))
{
log.Write(LogVerbosity.Info, $"Socket {socket.Id} failed to resubscribe resubscribed");
socket.Close().Wait();
}
else
{
log.Write(LogVerbosity.Info, $"Socket {socket.Id} successfully resubscribed");
break;
}
} }
var time = socket.DisconnectTime;
socket.DisconnectTime = null;
if (time == null)
return;
log.Write(LogVerbosity.Info, $"Socket {socket.Id} reconnected after {DateTime.UtcNow - time}");
SocketSubscription subscription;
lock (sockets)
subscription = sockets.Single(s => s.Socket == socket);
socket.Reconnecting = false; socket.Reconnecting = false;
if (!SocketReconnect(subscription, DateTime.UtcNow - time.Value))
socket.Close().Wait(); // Close so we end up reconnecting again
else
log.Write(LogVerbosity.Info, $"Socket {socket.Id} successfully resubscribed");
}); });
} }
else else