Skip to content

Commit a0764a8

Browse files
committed
Fix cap problem
1 parent b6c0fe4 commit a0764a8

File tree

3 files changed

+72
-46
lines changed

3 files changed

+72
-46
lines changed

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

Lines changed: 13 additions & 12 deletions
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

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -384,12 +384,28 @@ params string[] marketSymbols
384384

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

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

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

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

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

Lines changed: 35 additions & 15 deletions
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)