mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-08 16:36:15 +00:00
wip
This commit is contained in:
parent
8a869e8e1d
commit
d0fc67355d
@ -101,7 +101,7 @@ namespace CryptoExchange.Net
|
|||||||
public string GetSubscriptionsState()
|
public string GetSubscriptionsState()
|
||||||
{
|
{
|
||||||
var result = new StringBuilder();
|
var result = new StringBuilder();
|
||||||
foreach (var client in ApiClients.OfType<SocketApiClient>())
|
foreach (var client in ApiClients.OfType<SocketApiClient>().Where(c => c.CurrentSubscriptions > 0))
|
||||||
{
|
{
|
||||||
result.AppendLine(client.GetSubscriptionsState());
|
result.AppendLine(client.GetSubscriptionsState());
|
||||||
}
|
}
|
||||||
|
75
CryptoExchange.Net/Clients/CryptoBaseClient.cs
Normal file
75
CryptoExchange.Net/Clients/CryptoBaseClient.cs
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
using CryptoExchange.Net.Interfaces;
|
||||||
|
using CryptoExchange.Net.Interfaces.CommonClients;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net.Clients
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Base crypto client
|
||||||
|
/// </summary>
|
||||||
|
public class CryptoBaseClient : IDisposable
|
||||||
|
{
|
||||||
|
private Dictionary<Type, object> _serviceCache = new Dictionary<Type, object>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Service provider
|
||||||
|
/// </summary>
|
||||||
|
protected readonly IServiceProvider? _serviceProvider;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ctor
|
||||||
|
/// </summary>
|
||||||
|
public CryptoBaseClient() { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ctor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serviceProvider"></param>
|
||||||
|
public CryptoBaseClient(IServiceProvider serviceProvider)
|
||||||
|
{
|
||||||
|
_serviceProvider = serviceProvider;
|
||||||
|
_serviceCache = new Dictionary<Type, object>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Try get a client by type for the service collection
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public T TryGet<T>(Func<T> createFunc)
|
||||||
|
{
|
||||||
|
if (_serviceProvider == null)
|
||||||
|
{
|
||||||
|
// Create with default options
|
||||||
|
var createResult = createFunc();
|
||||||
|
_serviceCache.Add(typeof(T), createResult!);
|
||||||
|
return createResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
var type = typeof(T);
|
||||||
|
if (_serviceCache.TryGetValue(type, out var value))
|
||||||
|
return (T)value;
|
||||||
|
|
||||||
|
var result = _serviceProvider.GetRequiredService<T>();
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
// Does this mean the AddXX() hasn't been done?
|
||||||
|
}
|
||||||
|
|
||||||
|
_serviceCache.Add(type, result!);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dispose
|
||||||
|
/// </summary>
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_serviceCache.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,44 +0,0 @@
|
|||||||
using CryptoExchange.Net.Interfaces;
|
|
||||||
using CryptoExchange.Net.Interfaces.CommonClients;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace CryptoExchange.Net.Clients
|
|
||||||
{
|
|
||||||
public class CryptoExchangeClient : ICryptoExchangeClient, IDisposable
|
|
||||||
{
|
|
||||||
private Dictionary<Type, object?> _serviceCache = new Dictionary<Type, object?>();
|
|
||||||
|
|
||||||
private readonly IServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
public CryptoExchangeClient(IServiceProvider serviceProvider)
|
|
||||||
{
|
|
||||||
_serviceProvider = serviceProvider;
|
|
||||||
_serviceCache = new Dictionary<Type, object?>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<ISpotClient> GetSpotClients()
|
|
||||||
{
|
|
||||||
return _serviceProvider.GetServices<ISpotClient>().ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public T? TryGet<T>()
|
|
||||||
{
|
|
||||||
var type = typeof(T);
|
|
||||||
if (_serviceCache.TryGetValue(type, out var value))
|
|
||||||
return (T?)value;
|
|
||||||
|
|
||||||
var result = _serviceProvider.GetService<T>();
|
|
||||||
_serviceCache.Add(type, result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
_serviceCache.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
34
CryptoExchange.Net/Clients/CryptoRestClient.cs
Normal file
34
CryptoExchange.Net/Clients/CryptoRestClient.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using CryptoExchange.Net.Interfaces;
|
||||||
|
using CryptoExchange.Net.Interfaces.CommonClients;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net.Clients
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public class CryptoRestClient : CryptoBaseClient, ICryptoRestClient
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ctor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serviceProvider"></param>
|
||||||
|
public CryptoRestClient(IServiceProvider serviceProvider) : base(serviceProvider)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Try get a client by type for the service collection
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public IEnumerable<ISpotClient> GetSpotClients()
|
||||||
|
{
|
||||||
|
if (_serviceProvider == null)
|
||||||
|
return new List<ISpotClient>();
|
||||||
|
|
||||||
|
return _serviceProvider.GetServices<ISpotClient>().ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
CryptoExchange.Net/Clients/CryptoSocketClient.cs
Normal file
22
CryptoExchange.Net/Clients/CryptoSocketClient.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using CryptoExchange.Net.Interfaces;
|
||||||
|
using CryptoExchange.Net.Interfaces.CommonClients;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net.Clients
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public class CryptoSocketClient : CryptoBaseClient, ICryptoSocketClient
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ctor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serviceProvider"></param>
|
||||||
|
public CryptoSocketClient(IServiceProvider serviceProvider) : base(serviceProvider)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,15 +0,0 @@
|
|||||||
using CryptoExchange.Net.Interfaces;
|
|
||||||
using CryptoExchange.Net.Interfaces.CommonClients;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace CryptoExchange.Net.Clients
|
|
||||||
{
|
|
||||||
public interface ICryptoExchangeClient
|
|
||||||
{
|
|
||||||
IEnumerable<ISpotClient> GetSpotClients();
|
|
||||||
T? TryGet<T>();
|
|
||||||
}
|
|
||||||
}
|
|
27
CryptoExchange.Net/Interfaces/ICryptoRestClient.cs
Normal file
27
CryptoExchange.Net/Interfaces/ICryptoRestClient.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using CryptoExchange.Net.Interfaces;
|
||||||
|
using CryptoExchange.Net.Interfaces.CommonClients;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net.Clients
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Client for accessing REST API's for different exchanges
|
||||||
|
/// </summary>
|
||||||
|
public interface ICryptoRestClient
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Get a list of all registered common ISpotClient types
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
IEnumerable<ISpotClient> GetSpotClients();
|
||||||
|
/// <summary>
|
||||||
|
/// Try get
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
T TryGet<T>(Func<T> createFunc);
|
||||||
|
}
|
||||||
|
}
|
22
CryptoExchange.Net/Interfaces/ICryptoSocketClient.cs
Normal file
22
CryptoExchange.Net/Interfaces/ICryptoSocketClient.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using CryptoExchange.Net.Interfaces;
|
||||||
|
using CryptoExchange.Net.Interfaces.CommonClients;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net.Clients
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Client for accessing Websocket API's for different exchanges
|
||||||
|
/// </summary>
|
||||||
|
public interface ICryptoSocketClient
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Try get a client by type for the service collection
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
T TryGet<T>(Func<T> createFunc);
|
||||||
|
}
|
||||||
|
}
|
@ -41,7 +41,7 @@ namespace CryptoExchange.Net.Sockets
|
|||||||
public object? Response { get; set; }
|
public object? Response { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Action to execute when query is finished
|
/// Wait event for the calling message processing thread
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public AsyncResetEvent? ContinueAwaiter { get; set; }
|
public AsyncResetEvent? ContinueAwaiter { get; set; }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user