Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion BitMEX.Net/BitMEX.Net.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="CryptoExchange.Net" Version="10.3.0" />
<PackageReference Include="CryptoExchange.Net" Version="10.4.0" />
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="10.0.101">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
61 changes: 61 additions & 0 deletions BitMEX.Net/BitMEX.Net.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 66 additions & 3 deletions BitMEX.Net/BitMEXTrackerFactory.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
using BitMEX.Net.Clients;
using BitMEX.Net.Interfaces;
using BitMEX.Net.Interfaces.Clients;
using CryptoExchange.Net.Authentication;
using CryptoExchange.Net.SharedApis;
using CryptoExchange.Net.Trackers.Klines;
using CryptoExchange.Net.Trackers.Trades;
using BitMEX.Net.Interfaces;
using BitMEX.Net.Interfaces.Clients;
using CryptoExchange.Net.Trackers.UserData;
using CryptoExchange.Net.Trackers.UserData.Interfaces;
using CryptoExchange.Net.Trackers.UserData.Objects;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using System;
using BitMEX.Net.Clients;

namespace BitMEX.Net
{
Expand Down Expand Up @@ -59,5 +64,63 @@ public ITradeTracker CreateTradeTracker(SharedSymbol symbol, int? limit = null,
period
);
}

/// <inheritdoc />
public IUserSpotDataTracker CreateUserSpotDataTracker(SpotUserDataTrackerConfig? config = null)
{
var restClient = _serviceProvider?.GetRequiredService<IBitMEXRestClient>() ?? new BitMEXRestClient();
var socketClient = _serviceProvider?.GetRequiredService<IBitMEXSocketClient>() ?? new BitMEXSocketClient();
return new BitMEXUserSpotDataTracker(
_serviceProvider?.GetRequiredService<ILogger<BitMEXUserSpotDataTracker>>() ?? new NullLogger<BitMEXUserSpotDataTracker>(),
restClient,
socketClient,
null,
config
);
}

/// <inheritdoc />
public IUserSpotDataTracker CreateUserSpotDataTracker(string userIdentifier, ApiCredentials credentials, SpotUserDataTrackerConfig? config = null, BitMEXEnvironment? environment = null)
{
var clientProvider = _serviceProvider?.GetRequiredService<IBitMEXUserClientProvider>() ?? new BitMEXUserClientProvider();
var restClient = clientProvider.GetRestClient(userIdentifier, credentials, environment);
var socketClient = clientProvider.GetSocketClient(userIdentifier, credentials, environment);
return new BitMEXUserSpotDataTracker(
_serviceProvider?.GetRequiredService<ILogger<BitMEXUserSpotDataTracker>>() ?? new NullLogger<BitMEXUserSpotDataTracker>(),
restClient,
socketClient,
userIdentifier,
config
);
}

/// <inheritdoc />
public IUserFuturesDataTracker CreateUserFuturesDataTracker(FuturesUserDataTrackerConfig? config = null)
{
var restClient = _serviceProvider?.GetRequiredService<IBitMEXRestClient>() ?? new BitMEXRestClient();
var socketClient = _serviceProvider?.GetRequiredService<IBitMEXSocketClient>() ?? new BitMEXSocketClient();
return new BitMEXUserFuturesDataTracker(
_serviceProvider?.GetRequiredService<ILogger<BitMEXUserFuturesDataTracker>>() ?? new NullLogger<BitMEXUserFuturesDataTracker>(),
restClient,
socketClient,
null,
config
);
}

/// <inheritdoc />
public IUserFuturesDataTracker CreateUserFuturesDataTracker(string userIdentifier, ApiCredentials credentials, FuturesUserDataTrackerConfig? config = null, BitMEXEnvironment? environment = null)
{
var clientProvider = _serviceProvider?.GetRequiredService<IBitMEXUserClientProvider>() ?? new BitMEXUserClientProvider();
var restClient = clientProvider.GetRestClient(userIdentifier, credentials, environment);
var socketClient = clientProvider.GetSocketClient(userIdentifier, credentials, environment);
return new BitMEXUserFuturesDataTracker(
_serviceProvider?.GetRequiredService<ILogger<BitMEXUserFuturesDataTracker>>() ?? new NullLogger<BitMEXUserFuturesDataTracker>(),
restClient,
socketClient,
userIdentifier,
config
);
}
}
}
63 changes: 63 additions & 0 deletions BitMEX.Net/BitMEXUserDataTracker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using BitMEX.Net.Interfaces.Clients;
using CryptoExchange.Net.SharedApis;
using CryptoExchange.Net.Trackers.UserData;
using CryptoExchange.Net.Trackers.UserData.Objects;
using Microsoft.Extensions.Logging;

namespace BitMEX.Net
{
/// <inheritdoc/>
public class BitMEXUserSpotDataTracker : UserSpotDataTracker
{
/// <summary>
/// ctor
/// </summary>
public BitMEXUserSpotDataTracker(
ILogger<BitMEXUserSpotDataTracker> logger,
IBitMEXRestClient restClient,
IBitMEXSocketClient socketClient,
string? userIdentifier,
SpotUserDataTrackerConfig? config) : base(
logger,
restClient.ExchangeApi.SharedClient,
null,
restClient.ExchangeApi.SharedClient,
socketClient.ExchangeApi.SharedClient,
restClient.ExchangeApi.SharedClient,
socketClient.ExchangeApi.SharedClient,
socketClient.ExchangeApi.SharedClient,
userIdentifier,
config ?? new SpotUserDataTrackerConfig())
{
}
}

/// <inheritdoc/>
public class BitMEXUserFuturesDataTracker : UserFuturesDataTracker
{
/// <inheritdoc/>
protected override bool WebsocketPositionUpdatesAreFullSnapshots => false;

/// <summary>
/// ctor
/// </summary>
public BitMEXUserFuturesDataTracker(
ILogger<BitMEXUserFuturesDataTracker> logger,
IBitMEXRestClient restClient,
IBitMEXSocketClient socketClient,
string? userIdentifier,
FuturesUserDataTrackerConfig? config) : base(logger,
restClient.ExchangeApi.SharedClient,
null,
restClient.ExchangeApi.SharedClient,
socketClient.ExchangeApi.SharedClient,
restClient.ExchangeApi.SharedClient,
socketClient.ExchangeApi.SharedClient,
socketClient.ExchangeApi.SharedClient,
socketClient.ExchangeApi.SharedClient,
userIdentifier,
config ?? new FuturesUserDataTrackerConfig())
{
}
}
}
4 changes: 2 additions & 2 deletions BitMEX.Net/Clients/BitMEXUserClientProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public void ClearUserClients(string userIdentifier)
/// <inheritdoc />
public IBitMEXRestClient GetRestClient(string userIdentifier, ApiCredentials? credentials = null, BitMEXEnvironment? environment = null)
{
if (!_restClients.TryGetValue(userIdentifier, out var client))
if (!_restClients.TryGetValue(userIdentifier, out var client) || client.Disposed)
client = CreateRestClient(userIdentifier, credentials, environment);

return client;
Expand All @@ -73,7 +73,7 @@ public IBitMEXRestClient GetRestClient(string userIdentifier, ApiCredentials? cr
/// <inheritdoc />
public IBitMEXSocketClient GetSocketClient(string userIdentifier, ApiCredentials? credentials = null, BitMEXEnvironment? environment = null)
{
if (!_socketClients.TryGetValue(userIdentifier, out var client))
if (!_socketClients.TryGetValue(userIdentifier, out var client) || client.Disposed)
client = CreateSocketClient(userIdentifier, credentials, environment);

return client;
Expand Down
Loading