mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-07-25 02:45:22 +00:00
Added copy for option objects, socket message handlers can now return whether they handled the message
This commit is contained in:
parent
9648606bdc
commit
596b28dd47
@ -36,7 +36,7 @@ namespace CryptoExchange.Net.Objects
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The log writers
|
/// The log writers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<TextWriter> LogWriters { get; set; } = new List<TextWriter>() {new DebugTextWriter()};
|
public List<TextWriter> LogWriters { get; set; } = new List<TextWriter>() { new DebugTextWriter() };
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ClientOptions: ExchangeOptions
|
public class ClientOptions: ExchangeOptions
|
||||||
@ -55,6 +55,25 @@ namespace CryptoExchange.Net.Objects
|
|||||||
/// The time the server has to respond to a request before timing out
|
/// The time the server has to respond to a request before timing out
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TimeSpan RequestTimeout { get; set; } = TimeSpan.FromSeconds(30);
|
public TimeSpan RequestTimeout { get; set; } = TimeSpan.FromSeconds(30);
|
||||||
|
|
||||||
|
public T Copy<T>() where T:ClientOptions, new()
|
||||||
|
{
|
||||||
|
var copy = new T
|
||||||
|
{
|
||||||
|
BaseAddress = BaseAddress,
|
||||||
|
LogVerbosity = LogVerbosity,
|
||||||
|
Proxy = Proxy,
|
||||||
|
LogWriters = LogWriters,
|
||||||
|
RateLimiters = RateLimiters,
|
||||||
|
RateLimitingBehaviour = RateLimitingBehaviour,
|
||||||
|
RequestTimeout = RequestTimeout
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ApiCredentials != null)
|
||||||
|
copy.ApiCredentials = new ApiCredentials(ApiCredentials.Key.GetString(), ApiCredentials.Secret.GetString());
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SocketClientOptions: ExchangeOptions
|
public class SocketClientOptions: ExchangeOptions
|
||||||
@ -63,5 +82,22 @@ namespace CryptoExchange.Net.Objects
|
|||||||
/// Time to wait between reconnect attempts
|
/// Time to wait between reconnect attempts
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TimeSpan ReconnectInterval { get; set; } = TimeSpan.FromSeconds(5);
|
public TimeSpan ReconnectInterval { get; set; } = TimeSpan.FromSeconds(5);
|
||||||
|
|
||||||
|
public T Copy<T>() where T : SocketClientOptions, new()
|
||||||
|
{
|
||||||
|
var copy = new T
|
||||||
|
{
|
||||||
|
BaseAddress = BaseAddress,
|
||||||
|
LogVerbosity = LogVerbosity,
|
||||||
|
Proxy = Proxy,
|
||||||
|
LogWriters = LogWriters,
|
||||||
|
ReconnectInterval = ReconnectInterval
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ApiCredentials != null)
|
||||||
|
copy.ApiCredentials = new ApiCredentials(ApiCredentials.Key.GetString(), ApiCredentials.Secret.GetString());
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,8 +121,9 @@ namespace CryptoExchange.Net
|
|||||||
protected virtual void ProcessMessage(SocketSubscription subscription, string data)
|
protected virtual void ProcessMessage(SocketSubscription subscription, string data)
|
||||||
{
|
{
|
||||||
log.Write(LogVerbosity.Debug, $"Socket {subscription.Socket.Id} received data: " + data);
|
log.Write(LogVerbosity.Debug, $"Socket {subscription.Socket.Id} received data: " + data);
|
||||||
foreach (var handler in subscription.DataHandlers)
|
foreach (var handler in subscription.MessageHandlers)
|
||||||
handler(subscription, JToken.Parse(data));
|
if (handler(subscription, JToken.Parse(data)))
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -163,6 +164,7 @@ namespace CryptoExchange.Net
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
log.Write(LogVerbosity.Info, $"Socket {socket.Id} closed");
|
||||||
socket.Dispose();
|
socket.Dispose();
|
||||||
lock (sockets)
|
lock (sockets)
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,10 @@ namespace CryptoExchange.Net.Sockets
|
|||||||
public event Action ConnectionLost;
|
public event Action ConnectionLost;
|
||||||
public event Action<TimeSpan> ConnectionRestored;
|
public event Action<TimeSpan> ConnectionRestored;
|
||||||
|
|
||||||
public List<Action<SocketSubscription, JToken>> DataHandlers { get; set; }
|
/// <summary>
|
||||||
|
/// Message handlers for this subscription. Should return true if the message is handled and should not be distributed to the other handlers
|
||||||
|
/// </summary>
|
||||||
|
public List<Func<SocketSubscription, JToken, bool>> MessageHandlers { get; set; }
|
||||||
public List<SocketEvent> Events { get; set; }
|
public List<SocketEvent> Events { get; set; }
|
||||||
|
|
||||||
public IWebsocket Socket { get; set; }
|
public IWebsocket Socket { get; set; }
|
||||||
@ -29,7 +32,7 @@ namespace CryptoExchange.Net.Sockets
|
|||||||
Events = new List<SocketEvent>();
|
Events = new List<SocketEvent>();
|
||||||
waitingForEvents = new List<SocketEvent>();
|
waitingForEvents = new List<SocketEvent>();
|
||||||
|
|
||||||
DataHandlers = new List<Action<SocketSubscription, JToken>>();
|
MessageHandlers = new List<Func<SocketSubscription, JToken, bool>>();
|
||||||
|
|
||||||
Socket.OnClose += () =>
|
Socket.OnClose += () =>
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user