From f6762b0bcbf164d0382b10f85af9d6a80524969e Mon Sep 17 00:00:00 2001 From: vslee Date: Tue, 14 Apr 2020 19:49:11 -0700 Subject: [PATCH] NDAX: fix Trades websocket - there is a bug in OnGetTickersAsync() which will need to be fixed at some point - changed OnGetMarketSymbolsMetadataAsync() to fill in _marketSymbolToInstrumentIdMapping - changed EnsureInstrumentIdsAvailable() to use OnGetMarketSymbolsMetadataAsync() instead - fixes OnGetTradesWebSocketAsync() --- .../API/Exchanges/NDAX/ExchangeNDAXAPI.cs | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/ExchangeSharp/API/Exchanges/NDAX/ExchangeNDAXAPI.cs b/src/ExchangeSharp/API/Exchanges/NDAX/ExchangeNDAXAPI.cs index ebd9a8a1..a1dfaf72 100644 --- a/src/ExchangeSharp/API/Exchanges/NDAX/ExchangeNDAXAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/NDAX/ExchangeNDAXAPI.cs @@ -60,8 +60,9 @@ protected internal override async Task> OnGetMarketS var result = await MakeJsonRequestAsync>("GetInstruments", null, new Dictionary() { {"OMSId", 1}}, "POST"); - - return result.Select(instrument => instrument.ToExchangeMarket()); + _marketSymbolToInstrumentIdMapping = result.ToDictionary(keySelector: instrument => instrument.Symbol.Replace("_", ""), + elementSelector: instrument => instrument.InstrumentId); + return result.Select(instrument => instrument.ToExchangeMarket()); } protected override async Task> OnGetCompletedOrderDetailsAsync(string symbol = null, @@ -325,7 +326,7 @@ private async Task EnsureInstrumentIdsAvailable() { if (_marketSymbolToInstrumentIdMapping == null) { - await GetTickersAsync(); + await OnGetMarketSymbolsMetadataAsync(); } } @@ -421,11 +422,14 @@ await socket.SendMessageAsync(new MessageFrame protected override async Task OnGetTradesWebSocketAsync(Func, Task> callback, params string[] marketSymbols) { - await EnsureInstrumentIdsAvailable(); - var instrumentIds = marketSymbols == null || marketSymbols.Length == 0 ? - (await GetMarketSymbolsMetadataAsync()).Select(s => (long?)long.Parse(s.AltMarketSymbol)).ToArray() : - await GetInstrumentIdFromMarketSymbol(marketSymbols); - + long?[] instrumentIds; + if (marketSymbols == null || marketSymbols.Length == 0) + instrumentIds = (await GetMarketSymbolsMetadataAsync()).Select(s => (long?)long.Parse(s.AltMarketSymbol)).ToArray(); + else + { + await EnsureInstrumentIdsAvailable(); + instrumentIds = await GetInstrumentIdFromMarketSymbol(marketSymbols); + } return await ConnectWebSocketAsync("", async (socket, bytes) => { var messageFrame =