diff --git a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs index 4766c671..0d080b5a 100644 --- a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs @@ -456,51 +456,6 @@ protected override async Task>> return tickers; } - protected override async Task OnGetTickersWebSocketAsync( - Action>> callback, - params string[] symbols) => - await ConnectWebsocketPublicAsync( - async (socket) => { await SubscribeToChannel(socket, "ticker", symbols); }, - async (socket, symbol, sArray, token) => - { - var tickers = new List> - { - new KeyValuePair(symbol, - await this.ParseTickerWebSocketAsync(symbol, token)) - }; - callback(tickers); - }); - - protected override async Task OnGetTradesWebSocketAsync( - Func, Task> callback, - params string[] marketSymbols) => - await ConnectWebsocketPublicAsync( - async (socket) => { await SubscribeToChannel(socket, "trades", marketSymbols); }, - async (socket, symbol, sArray, token) => - { - var trade = token.ParseTrade(amountKey: "quantity", priceKey: "price", typeKey: "takerSide", - timestampKey: "ts", TimestampType.UnixMilliseconds, idKey: "id"); - await callback(new KeyValuePair(symbol, trade)); - }); - - protected override async Task OnGetDeltaOrderBookWebSocketAsync( - Action callback, - int maxCount = 20, - params string[] marketSymbols) - { - return await ConnectWebsocketPublicAsync( - async (socket) => - { - await SubscribeToOrderBookDepthChannel(socket, marketSymbols, maxCount); - }, (socket, symbol, sArray, token) => - { - var book = token.ParseOrderBookFromJTokenArrays(); - book.MarketSymbol = symbol; - callback(book); - return Task.CompletedTask; - }); - } - protected override async Task OnGetOrderBookAsync(string marketSymbol, int maxCount = 100) { //https://api.poloniex.com/markets/{symbol}/orderBook?scale={scale}&limit={limit} @@ -853,6 +808,65 @@ protected override async Task> OnGetDepositHist return transactions; } + protected override async Task OnGetTickersWebSocketAsync( + Action>> callback, + params string[] symbols) => + await ConnectWebsocketPublicAsync( + async (socket) => { await SubscribeToChannel(socket, "ticker", symbols); }, + async (socket, symbol, sArray, token) => + { + var tickers = new List> + { + new KeyValuePair(symbol, + await this.ParseTickerWebSocketAsync(symbol, token)) + }; + callback(tickers); + }); + + protected override async Task OnGetTradesWebSocketAsync( + Func, Task> callback, + params string[] marketSymbols) => + await ConnectWebsocketPublicAsync( + async (socket) => { await SubscribeToChannel(socket, "trades", marketSymbols); }, + async (socket, symbol, sArray, token) => + { + var trade = token.ParseTrade(amountKey: "quantity", priceKey: "price", typeKey: "takerSide", + timestampKey: "ts", TimestampType.UnixMilliseconds, idKey: "id"); + await callback(new KeyValuePair(symbol, trade)); + }); + + protected override async Task OnGetDeltaOrderBookWebSocketAsync( + Action callback, + int maxCount = 20, + params string[] marketSymbols) => + await ConnectWebsocketPublicAsync( + async (socket) => { await SubscribeToOrderBookDepthChannel(socket, marketSymbols, maxCount); }, + (socket, symbol, sArray, token) => + { + var book = token.ParseOrderBookFromJTokenArrays(); + book.MarketSymbol = symbol; + callback(book); + return Task.CompletedTask; + }); + + protected override async Task OnGetCandlesWebSocketAsync( + Func callback, + int periodSeconds, + params string[] marketSymbols) => + await ConnectWebsocketPublicAsync( + async (socket) => + { + await SubscribeToChannel(socket, + $"candles_{CryptoUtility.SecondsToPeriodStringLongReverse(periodSeconds).ToLowerInvariant()}", + marketSymbols); + }, async (socket, symbol, sArray, token) => + { + var candle = this.ParseCandle(token, symbol, periodSeconds, "open", "high", "low", "close", + "ts", TimestampType.UnixMilliseconds, "quantity", "amount", null, "tradeCount"); + + await callback(candle); + }); + private static string ParseFeesCurrency(bool isBuy, string symbol) { string feesCurrency = null; diff --git a/src/ExchangeSharp/Utility/CryptoUtility.cs b/src/ExchangeSharp/Utility/CryptoUtility.cs index 2b93776d..8b3bedd7 100644 --- a/src/ExchangeSharp/Utility/CryptoUtility.cs +++ b/src/ExchangeSharp/Utility/CryptoUtility.cs @@ -1220,7 +1220,7 @@ public static string SecondsToPeriodStringLong(int seconds) } /// - /// Convert seconds to a period string, i.e. SECOND_5, MINUTE_1, HOUR_2, DAY_3, WEEK_1week, MONTH_1, YEAR_1 etc. + /// Convert seconds to a period string, i.e. SECOND_5, MINUTE_1, HOUR_2, DAY_3, WEEK_1, MONTH_1, YEAR_1 etc. /// /// Seconds. Use 60 for minute, 3600 for hour, 3600*24 for day, 3600*24*30 for month. /// Period string