mirror of
https://github.com/JKorf/CryptoExchange.Net.git
synced 2026-08-12 17:03:10 +00:00
7d7bc35869
Added support for IOptions injection, allowing options to be read from IConfiguration Small refactor on client options internals Updated HttpClient to be static field to be
121 lines
5.7 KiB
C#
121 lines
5.7 KiB
C#
using CryptoExchange.Net.Authentication;
|
|
using System;
|
|
|
|
namespace CryptoExchange.Net.Objects.Options
|
|
{
|
|
/// <summary>
|
|
/// Options for a websocket exchange client
|
|
/// </summary>
|
|
public class SocketExchangeOptions : ExchangeOptions
|
|
{
|
|
/// <summary>
|
|
/// The fixed time to wait between reconnect attempts, only used when `ReconnectPolicy` is set to `ReconnectPolicy.ExponentialBackoff`
|
|
/// </summary>
|
|
public TimeSpan ReconnectInterval { get; set; } = TimeSpan.FromSeconds(5);
|
|
|
|
/// <summary>
|
|
/// Reconnect policy
|
|
/// </summary>
|
|
public ReconnectPolicy ReconnectPolicy { get; set; } = ReconnectPolicy.FixedDelay;
|
|
|
|
/// <summary>
|
|
/// Max number of concurrent resubscription tasks per socket after reconnecting a socket
|
|
/// </summary>
|
|
public int MaxConcurrentResubscriptionsPerSocket { get; set; } = 5;
|
|
|
|
/// <summary>
|
|
/// The max time of not receiving any data after which the connection is assumed to be dropped. This can only be used for socket connections where a steady flow of data is expected,
|
|
/// for example when the server sends intermittent ping requests
|
|
/// </summary>
|
|
public TimeSpan SocketNoDataTimeout { get; set; }
|
|
|
|
/// <summary>
|
|
/// The amount of subscriptions that should be made on a single socket connection. Not all API's support multiple subscriptions on a single socket.
|
|
/// Setting this to a higher number increases subscription speed because not every subscription needs to connect to the server, but having more subscriptions on a
|
|
/// single connection will also increase the amount of traffic on that single connection, potentially leading to issues.
|
|
/// </summary>
|
|
public int? SocketSubscriptionsCombineTarget { get; set; }
|
|
|
|
/// <summary>
|
|
/// The max amount of connections to make to the server. Can be used for API's which only allow a certain number of connections. Changing this to a high value might cause issues.
|
|
/// </summary>
|
|
public int? MaxSocketConnections { get; set; }
|
|
|
|
/// <summary>
|
|
/// The time to wait after connecting a socket before sending messages. Can be used for API's which will rate limit if you subscribe directly after connecting.
|
|
/// </summary>
|
|
public TimeSpan DelayAfterConnect { get; set; } = TimeSpan.Zero;
|
|
|
|
/// <summary>
|
|
/// This delay is used to set a RetryAfter guard on the connection after a rate limit is hit on the server.
|
|
/// This is used to prevent the client from reconnecting too quickly after a rate limit is hit.
|
|
/// </summary>
|
|
public TimeSpan? ConnectDelayAfterRateLimited { get; set; }
|
|
|
|
/// <summary>
|
|
/// Create a copy of this options
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <returns></returns>
|
|
public T Set<T>(T item) where T : SocketExchangeOptions, new()
|
|
{
|
|
item.ApiCredentials = ApiCredentials?.Copy();
|
|
item.OutputOriginalData = OutputOriginalData;
|
|
item.ReconnectPolicy = ReconnectPolicy;
|
|
item.DelayAfterConnect = DelayAfterConnect;
|
|
item.MaxConcurrentResubscriptionsPerSocket = MaxConcurrentResubscriptionsPerSocket;
|
|
item.ReconnectInterval = ReconnectInterval;
|
|
item.SocketNoDataTimeout = SocketNoDataTimeout;
|
|
item.SocketSubscriptionsCombineTarget = SocketSubscriptionsCombineTarget;
|
|
item.MaxSocketConnections = MaxSocketConnections;
|
|
item.Proxy = Proxy;
|
|
item.RequestTimeout = RequestTimeout;
|
|
item.RateLimitingBehaviour = RateLimitingBehaviour;
|
|
item.RateLimiterEnabled = RateLimiterEnabled;
|
|
return item;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Options for a socket exchange client
|
|
/// </summary>
|
|
/// <typeparam name="TEnvironment"></typeparam>
|
|
public class SocketExchangeOptions<TEnvironment> : SocketExchangeOptions where TEnvironment : TradeEnvironment
|
|
{
|
|
/// <summary>
|
|
/// Trade environment. Contains info about URL's to use to connect to the API. To swap environment select another environment for
|
|
/// the exhange's environment list or create a custom environment using either `[Exchange]Environment.CreateCustom()` or `[Exchange]Environment.[Environment]`, for example `KucoinEnvironment.TestNet` or `BinanceEnvironment.Live`
|
|
/// </summary>
|
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
|
public TEnvironment Environment { get; set; }
|
|
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
|
|
|
/// <summary>
|
|
/// Set the values of this options on the target options
|
|
/// </summary>
|
|
public new T Set<T>(T target) where T : SocketExchangeOptions<TEnvironment>, new()
|
|
{
|
|
base.Set(target);
|
|
target.Environment = Environment;
|
|
return target;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Options for a socket exchange client
|
|
/// </summary>
|
|
/// <typeparam name="TEnvironment"></typeparam>
|
|
/// <typeparam name="TApiCredentials"></typeparam>
|
|
public class SocketExchangeOptions<TEnvironment, TApiCredentials> : SocketExchangeOptions<TEnvironment> where TEnvironment : TradeEnvironment where TApiCredentials : ApiCredentials
|
|
{
|
|
/// <summary>
|
|
/// The api credentials used for signing requests to this API.
|
|
/// </summary>
|
|
public new TApiCredentials? ApiCredentials
|
|
{
|
|
get => (TApiCredentials?)base.ApiCredentials;
|
|
set => base.ApiCredentials = value;
|
|
}
|
|
}
|
|
}
|