Skip to content

Commit a6e5527

Browse files
authored
Fix cap problem (#865)
1 parent 2f7603a commit a6e5527

File tree

3 files changed

+72
-46
lines changed

3 files changed

+72
-46
lines changed

src/ExchangeSharp/API/Exchanges/KuCoin/ExchangeKuCoinAPI.cs

+13-12
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private ExchangeKuCoinAPI()
4040
NonceEndPointField = "data";
4141
NonceEndPointStyle = NonceStyle.UnixMilliseconds;
4242
MarketSymbolSeparator = "-";
43-
RateLimit = new RateGate(20, TimeSpan.FromSeconds(60.0));
43+
RateLimit = new RateGate(60, TimeSpan.FromSeconds(1)); // https://www.kucoin.com/docs/basic-info/request-rate-limit/rest-api
4444
WebSocketOrderBookType = WebSocketOrderBookType.FullBookFirstThenDeltas;
4545
}
4646

@@ -875,6 +875,16 @@ params string[] marketSymbols
875875

876876
var initialSequenceIds = new Dictionary<string, long>();
877877

878+
foreach (var marketSymbol in marketSymbols)
879+
{
880+
var initialBook = await OnGetOrderBookAsync(marketSymbol, maxCount);
881+
initialBook.IsFromSnapshot = true;
882+
883+
callback(initialBook);
884+
885+
initialSequenceIds[marketSymbol] = initialBook.SequenceId;
886+
}
887+
878888
var websocketUrlToken = GetWebsocketBulletToken();
879889

880890
return await ConnectPublicWebSocketAsync(
@@ -958,19 +968,10 @@ params string[] marketSymbols
958968
},
959969
connectCallback: async (_socket) =>
960970
{
961-
// Get full order book snapshot when connecting
962-
foreach (var marketSymbol in marketSymbols)
963-
{
964-
var initialBook = await OnGetOrderBookAsync(marketSymbol, maxCount);
965-
initialBook.IsFromSnapshot = true;
966-
967-
callback(initialBook);
968-
969-
initialSequenceIds[marketSymbol] = initialBook.SequenceId;
970-
}
971+
var marketSymbolsForSubscriptionString = string.Join(",", marketSymbols);
971972

972973
var id = CryptoUtility.UtcNow.Ticks;
973-
var topic = $"/market/level2:{string.Join(",", marketSymbols)}";
974+
var topic = $"/market/level2:{marketSymbolsForSubscriptionString}";
974975
await _socket.SendMessageAsync(
975976
new
976977
{

src/ExchangeSharp/API/Exchanges/MEXC/ExchangeMEXCAPI.cs

+24-19
Original file line numberDiff line numberDiff line change
@@ -383,12 +383,28 @@ params string[] marketSymbols
383383

384384
var initialSequenceIds = new Dictionary<string, long>();
385385

386+
foreach (var marketSymbol in marketSymbols)
387+
{
388+
var initialBook = await OnGetOrderBookAsync(marketSymbol, maxCount);
389+
initialBook.IsFromSnapshot = true;
390+
391+
callback(initialBook);
392+
393+
initialSequenceIds[marketSymbol] = initialBook.SequenceId;
394+
}
395+
386396
return await ConnectPublicWebSocketAsync(
387397
string.Empty,
388398
(_socket, msg) =>
389399
{
390400
var json = msg.ToStringFromUTF8();
391401

402+
if (json.Contains("invalid") || json.Contains("Not Subscribed"))
403+
{
404+
Logger.Warn(json);
405+
return Task.CompletedTask;
406+
}
407+
392408
MarketDepthDiffUpdate update = null;
393409
try
394410
{
@@ -450,26 +466,15 @@ params string[] marketSymbols
450466
},
451467
async (_socket) =>
452468
{
453-
foreach (var marketSymbol in marketSymbols) // "Every websocket connection maximum support 30 subscriptions at one time." - API docs
454-
{
455-
var initialBook = await OnGetOrderBookAsync(marketSymbol, maxCount);
456-
initialBook.IsFromSnapshot = true;
457-
458-
callback(initialBook);
459-
460-
initialSequenceIds[marketSymbol] = initialBook.SequenceId;
461-
462-
var subscriptionParams = new List<string>
463-
{
464-
$"[email protected]@{marketSymbol}"
465-
};
469+
var subscriptionParams = marketSymbols
470+
.Select(ms => $"[email protected]@{ms}")
471+
.ToList();
466472

467-
await _socket.SendMessageAsync(new WebSocketSubscription
468-
{
469-
Method = "SUBSCRIPTION",
470-
Params = subscriptionParams,
471-
});
472-
}
473+
await _socket.SendMessageAsync(new WebSocketSubscription
474+
{
475+
Method = "SUBSCRIPTION",
476+
Params = subscriptionParams,
477+
});
473478
}
474479
);
475480
}

src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPIExtensions.cs

+35-15
Original file line numberDiff line numberDiff line change
@@ -474,28 +474,48 @@ internal static ExchangeOrderBook ParseOrderBookFromJTokenArrays(
474474
string sequence = "ts"
475475
)
476476
{
477-
var book = new ExchangeOrderBook
477+
var book = new ExchangeOrderBook();
478+
479+
if (token == null)
478480
{
479-
SequenceId = token[sequence].ConvertInvariant<long>()
480-
};
481-
foreach (var array in token[asks])
481+
Logger.Warn($"Null token in {nameof(ParseOrderBookFromJTokenArrays)}");
482+
return book;
483+
}
484+
485+
book.SequenceId = token[sequence].ConvertInvariant<long>();
486+
487+
if (token[asks] != null)
482488
{
483-
var depth = new ExchangeOrderPrice
489+
foreach (var array in token[asks])
484490
{
485-
Price = array[0].ConvertInvariant<decimal>(),
486-
Amount = array[1].ConvertInvariant<decimal>()
487-
};
488-
book.Asks[depth.Price] = depth;
491+
var depth = new ExchangeOrderPrice
492+
{
493+
Price = array[0].ConvertInvariant<decimal>(),
494+
Amount = array[1].ConvertInvariant<decimal>()
495+
};
496+
book.Asks[depth.Price] = depth;
497+
}
498+
}
499+
else
500+
{
501+
Logger.Warn($"No asks in {nameof(ParseOrderBookFromJTokenArrays)}");
489502
}
490503

491-
foreach (var array in token[bids])
504+
if (token[bids] != null)
492505
{
493-
var depth = new ExchangeOrderPrice
506+
foreach (var array in token[bids])
494507
{
495-
Price = array[0].ConvertInvariant<decimal>(),
496-
Amount = array[1].ConvertInvariant<decimal>()
497-
};
498-
book.Bids[depth.Price] = depth;
508+
var depth = new ExchangeOrderPrice
509+
{
510+
Price = array[0].ConvertInvariant<decimal>(),
511+
Amount = array[1].ConvertInvariant<decimal>()
512+
};
513+
book.Bids[depth.Price] = depth;
514+
}
515+
}
516+
else
517+
{
518+
Logger.Error($"No bids in {nameof(ParseOrderBookFromJTokenArrays)}");
499519
}
500520

501521
return book;

0 commit comments

Comments
 (0)