diff --git a/CryptoExchange.Net/Objects/ExchangeOptions.cs b/CryptoExchange.Net/Objects/ExchangeOptions.cs index 7d3e526..eef3446 100644 --- a/CryptoExchange.Net/Objects/ExchangeOptions.cs +++ b/CryptoExchange.Net/Objects/ExchangeOptions.cs @@ -78,6 +78,11 @@ namespace CryptoExchange.Net.Objects public class SocketClientOptions: ExchangeOptions { + /// + /// Whether or not the socket should automatically reconnect when losing connection + /// + public bool AutoReconnect { get; set; } = true; + /// /// Time to wait between reconnect attempts /// @@ -91,6 +96,7 @@ namespace CryptoExchange.Net.Objects LogVerbosity = LogVerbosity, Proxy = Proxy, LogWriters = LogWriters, + AutoReconnect = AutoReconnect, ReconnectInterval = ReconnectInterval }; diff --git a/CryptoExchange.Net/SocketClient.cs b/CryptoExchange.Net/SocketClient.cs index 49cf8c1..d1342b7 100644 --- a/CryptoExchange.Net/SocketClient.cs +++ b/CryptoExchange.Net/SocketClient.cs @@ -25,6 +25,7 @@ namespace CryptoExchange.Net protected List sockets = new List(); public TimeSpan ReconnectInterval { get; private set; } + public bool AutoReconnect { get; private set; } protected Func dataInterpreter; protected const string DataHandlerName = "DataHandler"; @@ -48,6 +49,7 @@ namespace CryptoExchange.Net /// Options protected void Configure(SocketClientOptions exchangeOptions) { + AutoReconnect = exchangeOptions.AutoReconnect; ReconnectInterval = exchangeOptions.ReconnectInterval; } @@ -168,7 +170,7 @@ namespace CryptoExchange.Net /// The socket that was closed protected virtual void SocketOnClose(IWebsocket socket) { - if (socket.ShouldReconnect) + if (AutoReconnect && socket.ShouldReconnect) { if (socket.Reconnecting) return; // Already reconnecting @@ -181,6 +183,13 @@ namespace CryptoExchange.Net while (socket.ShouldReconnect) { Thread.Sleep(ReconnectInterval); + if (!socket.ShouldReconnect) + { + // Should reconnect changed to false while waiting to reconnect + socket.Reconnecting = false; + return; + } + socket.Reset(); if (!socket.Connect().Result) {