mirror of
https://github.com/JKorf/CryptoExchange.Net.git
synced 2026-08-13 01:12:59 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 38058c4a70 | |||
| a7eb483479 | |||
| c76931a3b4 | |||
| b90b7e9e0c | |||
| beda53d36d | |||
| 0668f669c1 | |||
| 64250e13db | |||
| 451d38d5e7 | |||
| e11e437bbb |
@@ -6,9 +6,9 @@
|
||||
<PackageId>CryptoExchange.Net.Protobuf</PackageId>
|
||||
<Authors>JKorf</Authors>
|
||||
<Description>Protobuf support for CryptoExchange.Net</Description>
|
||||
<PackageVersion>10.0.0</PackageVersion>
|
||||
<AssemblyVersion>10.0.0</AssemblyVersion>
|
||||
<FileVersion>10.0.0</FileVersion>
|
||||
<PackageVersion>10.0.1</PackageVersion>
|
||||
<AssemblyVersion>10.0.1</AssemblyVersion>
|
||||
<FileVersion>10.0.1</FileVersion>
|
||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||
<PackageTags>CryptoExchange;CryptoExchange.Net</PackageTags>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
@@ -41,7 +41,7 @@
|
||||
<DocumentationFile>CryptoExchange.Net.Protobuf.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CryptoExchange.Net" Version="9.13.0" />
|
||||
<PackageReference Include="CryptoExchange.Net" Version="10.0.1" />
|
||||
<PackageReference Include="protobuf-net" Version="3.2.56" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -5,6 +5,9 @@
|
||||
Protobuf support for CryptoExchange.Net.
|
||||
|
||||
## Release notes
|
||||
* Version 10.0.1 - 16 Dec 2025
|
||||
* Updated CryptoExchange.Net version to 10.0.0, see https://github.com/JKorf/CryptoExchange.Net/releases/
|
||||
|
||||
* Version 10.0.0 - 16 Dec 2025
|
||||
* Updated CryptoExchange.Net version to 10.0.0, see https://github.com/JKorf/CryptoExchange.Net/releases/
|
||||
|
||||
|
||||
@@ -516,10 +516,20 @@ namespace CryptoExchange.Net.Clients
|
||||
else
|
||||
{
|
||||
// Handle a 'normal' error response. Can still be either a json error message or some random HTML or other string
|
||||
error = await MessageHandler.ParseErrorResponse(
|
||||
|
||||
try
|
||||
{
|
||||
error = await MessageHandler.ParseErrorResponse(
|
||||
(int)response.StatusCode,
|
||||
response.ResponseHeaders,
|
||||
responseStream).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Unhandled exception when parsing error response: {Message}", ex.Message);
|
||||
var errorResult = new ServerError(ErrorInfo.Unknown with { Message = ex.Message });
|
||||
return new WebCallResult<T>(response.StatusCode, response.HttpVersion, response.ResponseHeaders, sw.Elapsed, response.ContentLength, originalData, request.RequestId, request.Uri.ToString(), request.Content, request.Method, request.GetHeaders(), ResultDataSource.Server, default, errorResult);
|
||||
}
|
||||
}
|
||||
|
||||
return new WebCallResult<T>(response.StatusCode, response.HttpVersion, response.ResponseHeaders, sw.Elapsed, response.ContentLength, originalData, request.RequestId, request.Uri.ToString(), request.Content, request.Method, request.GetHeaders(), ResultDataSource.Server, default, error);
|
||||
@@ -558,10 +568,19 @@ namespace CryptoExchange.Net.Clients
|
||||
if (deserializeError != null)
|
||||
return new WebCallResult<T>(response.StatusCode, response.HttpVersion, response.ResponseHeaders, sw.Elapsed, response.ContentLength, originalData, request.RequestId, request.Uri.ToString(), request.Content, request.Method, request.GetHeaders(), ResultDataSource.Server, deserializeResult, deserializeError); ;
|
||||
|
||||
// Check the deserialized response to see if it's an error or not
|
||||
var responseError = MessageHandler.CheckDeserializedResponse(response.ResponseHeaders, deserializeResult);
|
||||
if (responseError != null)
|
||||
return new WebCallResult<T>(response.StatusCode, response.HttpVersion, response.ResponseHeaders, sw.Elapsed, response.ContentLength, originalData, request.RequestId, request.Uri.ToString(), request.Content, request.Method, request.GetHeaders(), ResultDataSource.Server, deserializeResult, responseError);
|
||||
try
|
||||
{
|
||||
// Check the deserialized response to see if it's an error or not
|
||||
var responseError = MessageHandler.CheckDeserializedResponse(response.ResponseHeaders, deserializeResult);
|
||||
if (responseError != null)
|
||||
return new WebCallResult<T>(response.StatusCode, response.HttpVersion, response.ResponseHeaders, sw.Elapsed, response.ContentLength, originalData, request.RequestId, request.Uri.ToString(), request.Content, request.Method, request.GetHeaders(), ResultDataSource.Server, deserializeResult, responseError);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Unhandled exception when checking deserialized response: {Message}", ex.Message);
|
||||
var error = new ServerError(ErrorInfo.Unknown with { Message = ex.Message });
|
||||
return new WebCallResult<T>(response.StatusCode, response.HttpVersion, response.ResponseHeaders, sw.Elapsed, response.ContentLength, originalData, request.RequestId, request.Uri.ToString(), request.Content, request.Method, request.GetHeaders(), ResultDataSource.Server, deserializeResult, error);
|
||||
}
|
||||
|
||||
return new WebCallResult<T>(response.StatusCode, response.HttpVersion, response.ResponseHeaders, sw.Elapsed, response.ContentLength, originalData, request.RequestId, request.Uri.ToString(), request.Content, request.Method, request.GetHeaders(), ResultDataSource.Server, deserializeResult, null);
|
||||
}
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<PackageId>CryptoExchange.Net</PackageId>
|
||||
<Authors>JKorf</Authors>
|
||||
<Description>CryptoExchange.Net is a base library which is used to implement different cryptocurrency (exchange) API's. It provides a standardized way of implementing different API's, which results in a very similar experience for users of the API implementations.</Description>
|
||||
<PackageVersion>10.0.0</PackageVersion>
|
||||
<AssemblyVersion>10.0.0</AssemblyVersion>
|
||||
<FileVersion>10.0.0</FileVersion>
|
||||
<PackageVersion>10.0.2</PackageVersion>
|
||||
<AssemblyVersion>10.0.2</AssemblyVersion>
|
||||
<FileVersion>10.0.2</FileVersion>
|
||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||
<PackageTags>OKX;OKX.Net;Mexc;Mexc.Net;Kucoin;Kucoin.Net;Kraken;Kraken.Net;Huobi;Huobi.Net;CoinEx;CoinEx.Net;Bybit;Bybit.Net;Bitget;Bitget.Net;Bitfinex;Bitfinex.Net;Binance;Binance.Net;CryptoCurrency;CryptoCurrency Exchange;CryptoExchange.Net</PackageTags>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
|
||||
@@ -70,7 +70,7 @@ namespace CryptoExchange.Net
|
||||
|
||||
first = false;
|
||||
|
||||
if (parameter.GetType().IsArray)
|
||||
if (parameter.Value.GetType().IsArray)
|
||||
{
|
||||
if (serializationType == ArrayParametersSerialization.Array)
|
||||
{
|
||||
|
||||
@@ -877,8 +877,16 @@ namespace CryptoExchange.Net.Sockets.Default
|
||||
subscription.CancellationTokenRegistration.Value.Dispose();
|
||||
|
||||
bool anyDuplicateSubscription;
|
||||
lock (_listenersLock)
|
||||
anyDuplicateSubscription = _listeners.OfType<Subscription>().Any(x => x != subscription && x.MessageMatcher.HandlerLinks.All(l => subscription.MessageMatcher.ContainsCheck(l)));
|
||||
if (ApiClient.ClientOptions.UseUpdatedDeserialization)
|
||||
{
|
||||
lock (_listenersLock)
|
||||
anyDuplicateSubscription = _listeners.OfType<Subscription>().Any(x => x != subscription && x.MessageRouter.Routes.All(l => subscription.MessageRouter.ContainsCheck(l)));
|
||||
}
|
||||
else
|
||||
{
|
||||
lock (_listenersLock)
|
||||
anyDuplicateSubscription = _listeners.OfType<Subscription>().Any(x => x != subscription && x.MessageMatcher.HandlerLinks.All(l => subscription.MessageMatcher.ContainsCheck(l)));
|
||||
}
|
||||
|
||||
bool shouldCloseConnection;
|
||||
lock (_listenersLock)
|
||||
|
||||
@@ -5,32 +5,32 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Binance.Net" Version="11.10.0" />
|
||||
<PackageReference Include="Bitfinex.Net" Version="9.10.0" />
|
||||
<PackageReference Include="BitMart.Net" Version="2.11.0" />
|
||||
<PackageReference Include="BloFin.Net" Version="1.3.0" />
|
||||
<PackageReference Include="Bybit.Net" Version="5.12.0" />
|
||||
<PackageReference Include="CoinEx.Net" Version="9.10.0" />
|
||||
<PackageReference Include="CoinW.Net" Version="1.7.0" />
|
||||
<PackageReference Include="CryptoCom.Net" Version="2.11.0" />
|
||||
<PackageReference Include="DeepCoin.Net" Version="2.10.0" />
|
||||
<PackageReference Include="GateIo.Net" Version="2.12.0" />
|
||||
<PackageReference Include="HyperLiquid.Net" Version="2.16.0" />
|
||||
<PackageReference Include="JK.BingX.Net" Version="2.10.0" />
|
||||
<PackageReference Include="JK.Bitget.Net" Version="2.11.0" />
|
||||
<PackageReference Include="JK.Mexc.Net" Version="3.11.0" />
|
||||
<PackageReference Include="JK.OKX.Net" Version="3.10.0" />
|
||||
<PackageReference Include="Jkorf.Aster.Net" Version="1.2.0" />
|
||||
<PackageReference Include="JKorf.BitMEX.Net" Version="2.10.0" />
|
||||
<PackageReference Include="JKorf.Coinbase.Net" Version="2.10.0" />
|
||||
<PackageReference Include="JKorf.HTX.Net" Version="7.10.0" />
|
||||
<PackageReference Include="JKorf.Upbit.Net" Version="1.1.0" />
|
||||
<PackageReference Include="KrakenExchange.Net" Version="6.10.0" />
|
||||
<PackageReference Include="Kucoin.Net" Version="7.10.0" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
|
||||
<PackageReference Include="Toobit.Net" Version="1.9.0" />
|
||||
<PackageReference Include="WhiteBit.Net" Version="2.11.0" />
|
||||
<PackageReference Include="XT.Net" Version="2.10.0" />
|
||||
<PackageReference Include="Binance.Net" Version="12.0.0" />
|
||||
<PackageReference Include="Bitfinex.Net" Version="10.0.0" />
|
||||
<PackageReference Include="BitMart.Net" Version="3.0.0" />
|
||||
<PackageReference Include="BloFin.Net" Version="2.0.0" />
|
||||
<PackageReference Include="Bybit.Net" Version="6.0.0" />
|
||||
<PackageReference Include="CoinEx.Net" Version="10.0.0" />
|
||||
<PackageReference Include="CoinW.Net" Version="2.0.0" />
|
||||
<PackageReference Include="CryptoCom.Net" Version="3.0.0" />
|
||||
<PackageReference Include="DeepCoin.Net" Version="3.0.1" />
|
||||
<PackageReference Include="GateIo.Net" Version="3.0.0" />
|
||||
<PackageReference Include="HyperLiquid.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JK.BingX.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JK.Bitget.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JK.Mexc.Net" Version="4.0.0" />
|
||||
<PackageReference Include="JK.OKX.Net" Version="4.0.0" />
|
||||
<PackageReference Include="Jkorf.Aster.Net" Version="2.0.0" />
|
||||
<PackageReference Include="JKorf.BitMEX.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JKorf.Coinbase.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JKorf.HTX.Net" Version="8.0.0" />
|
||||
<PackageReference Include="JKorf.Upbit.Net" Version="2.0.0" />
|
||||
<PackageReference Include="KrakenExchange.Net" Version="7.0.0" />
|
||||
<PackageReference Include="Kucoin.Net" Version="8.0.0" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
|
||||
<PackageReference Include="Toobit.Net" Version="2.0.0" />
|
||||
<PackageReference Include="WhiteBit.Net" Version="3.0.0" />
|
||||
<PackageReference Include="XT.Net" Version="3.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
binanceSocketClient.SpotApi.ExchangeData.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Binance", data.Data.LastPrice)),
|
||||
bingXSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("BingX", data.Data.LastPrice)),
|
||||
bitfinexSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("tETHBTC", data => UpdateData("Bitfinex", data.Data.LastPrice)),
|
||||
bitgetSocketClient.SpotApiV2.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bitget", data.Data.LastPrice)),
|
||||
bitgetSocketClient.SpotApiV2.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bitget", data.Data.First().LastPrice)),
|
||||
bitmartSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH_BTC", data => UpdateData("BitMart", data.Data.LastPrice)),
|
||||
bitmexSocketClient.ExchangeApi.SubscribeToSymbolUpdatesAsync("ETH_XBT", data => UpdateData("BitMEX", data.Data.LastPrice ?? 0)),
|
||||
// BloFin doesn't support the ETH/BTC pair
|
||||
|
||||
@@ -6,20 +6,20 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Binance.Net" Version="11.10.0" />
|
||||
<PackageReference Include="Bitfinex.Net" Version="9.10.0" />
|
||||
<PackageReference Include="BitMart.Net" Version="2.11.0" />
|
||||
<PackageReference Include="Bybit.Net" Version="5.12.0" />
|
||||
<PackageReference Include="CoinEx.Net" Version="9.10.0" />
|
||||
<PackageReference Include="CryptoCom.Net" Version="2.11.0" />
|
||||
<PackageReference Include="GateIo.Net" Version="2.12.0" />
|
||||
<PackageReference Include="JK.Bitget.Net" Version="2.11.0" />
|
||||
<PackageReference Include="JK.Mexc.Net" Version="3.11.0" />
|
||||
<PackageReference Include="JK.OKX.Net" Version="3.10.0" />
|
||||
<PackageReference Include="JKorf.Coinbase.Net" Version="2.10.0" />
|
||||
<PackageReference Include="JKorf.HTX.Net" Version="7.10.0" />
|
||||
<PackageReference Include="KrakenExchange.Net" Version="6.10.0" />
|
||||
<PackageReference Include="Kucoin.Net" Version="7.10.0" />
|
||||
<PackageReference Include="Binance.Net" Version="12.0.0" />
|
||||
<PackageReference Include="Bitfinex.Net" Version="10.0.0" />
|
||||
<PackageReference Include="BitMart.Net" Version="3.0.0" />
|
||||
<PackageReference Include="Bybit.Net" Version="6.0.0" />
|
||||
<PackageReference Include="CoinEx.Net" Version="10.0.0" />
|
||||
<PackageReference Include="CryptoCom.Net" Version="3.0.0" />
|
||||
<PackageReference Include="GateIo.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JK.Bitget.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JK.Mexc.Net" Version="4.0.0" />
|
||||
<PackageReference Include="JK.OKX.Net" Version="4.0.0" />
|
||||
<PackageReference Include="JKorf.Coinbase.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JKorf.HTX.Net" Version="8.0.0" />
|
||||
<PackageReference Include="KrakenExchange.Net" Version="7.0.0" />
|
||||
<PackageReference Include="Kucoin.Net" Version="8.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Binance.Net" Version="11.10.0" />
|
||||
<PackageReference Include="BitMart.Net" Version="2.11.0" />
|
||||
<PackageReference Include="JK.OKX.Net" Version="3.10.0" />
|
||||
<PackageReference Include="Binance.Net" Version="12.0.0" />
|
||||
<PackageReference Include="BitMart.Net" Version="3.0.0" />
|
||||
<PackageReference Include="JK.OKX.Net" Version="4.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -66,6 +66,13 @@ Make a one time donation in a crypto currency of your choice. If you prefer to d
|
||||
Alternatively, sponsor me on Github using [Github Sponsors](https://github.com/sponsors/JKorf).
|
||||
|
||||
## Release notes
|
||||
* Version 10.0.2 - 19 Dec 2025
|
||||
* Fixed duplicate subscription check with updated deserialization
|
||||
* Added exception handlers for REST response processing
|
||||
|
||||
* Version 10.0.1 - 18 Dec 2025
|
||||
* Fixed query array parameter serialization
|
||||
|
||||
* Version 10.0.0 - 16 Dec 2025
|
||||
* -
|
||||
|
||||
|
||||
Reference in New Issue
Block a user