public void SubscribeCandlesticks(string symbol, Interface.Model.CandlestickInterval candlestickInterval, int limit, Action <CandlestickEventArgs> callback, Action <Exception> exception, CancellationToken cancellationToken) { try { var interval = candlestickInterval.ToBinanceCandlestickInterval(); var canclestickCache = new CandlestickCache(binanceApi, new CandlestickWebSocketClient()); canclestickCache.Subscribe(symbol, interval, limit, e => { if (cancellationToken.IsCancellationRequested) { canclestickCache.Unsubscribe(); return; } try { var candlesticks = (from c in e.Candlesticks select NewCandlestick(c)).ToList(); callback.Invoke(new CandlestickEventArgs { Candlesticks = candlesticks }); } catch (Exception ex) { canclestickCache.Unsubscribe(); exception.Invoke(ex); } }); } catch (Exception ex) { exception.Invoke(ex); } }
public void Unsubscribe() { var api = new Mock <IBinanceApi>().Object; var client = new Mock <ICandlestickClient>().Object; var cache = new CandlestickCache(api, client); // Can call unsubscribe before subscribe or multiple times without fail. cache.Unsubscribe(); cache.Unsubscribe(); }
public Task SubscribeCandlesticks(string symbol, Core.Model.CandlestickInterval candlestickInterval, int limit, Action <CandlestickEventArgs> callback, Action <Exception> exception, CancellationToken cancellationToken) { var tcs = new TaskCompletionSource <object>(); var binanceApi = new BinanceApi(); var interval = candlestickInterval.ToBinanceCandlestickInterval(); var candlestickCache = new CandlestickCache(binanceApi, new CandlestickWebSocketClient()); candlestickCache.Subscribe(symbol, interval, limit, e => { if (cancellationToken.IsCancellationRequested) { candlestickCache.Unsubscribe(); return; } var candlesticks = (from c in e.Candlesticks select NewCandlestick(c)).ToList(); try { callback.Invoke(new CandlestickEventArgs { Candlesticks = candlesticks }); } catch (Exception ex) { candlestickCache.Unsubscribe(); exception.Invoke(ex); return; } }); tcs.SetResult(null); return(tcs.Task); }