public void SubscribeOrderBook(string symbol, int limit, Action <OrderBookEventArgs> callback, Action <Exception> exception, CancellationToken cancellationToken) { try { var orderBookCache = new OrderBookCache(binanceApi, new DepthWebSocketClient()); orderBookCache.Subscribe(symbol, limit, e => { if (cancellationToken.IsCancellationRequested) { orderBookCache.Unsubscribe(); return; } try { var orderBook = NewOrderBook(e.OrderBook); callback.Invoke(new OrderBookEventArgs { OrderBook = orderBook }); } catch (Exception ex) { orderBookCache.Unsubscribe(); exception.Invoke(ex); } }); } catch (Exception ex) { exception.Invoke(ex); } }
public Task SubscribeOrderBook(string symbol, int limit, Action <OrderBookEventArgs> callback, Action <Exception> exception, CancellationToken cancellationToken) { var tcs = new TaskCompletionSource <object>(); var binanceApi = new BinanceApi(); var orderBookCache = new OrderBookCache(binanceApi, new DepthWebSocketClient()); orderBookCache.Subscribe(symbol, limit, e => { if (cancellationToken.IsCancellationRequested) { orderBookCache.Unsubscribe(); return; } var orderBook = NewOrderBook(e.OrderBook); try { callback.Invoke(new OrderBookEventArgs { OrderBook = orderBook }); } catch (Exception ex) { orderBookCache.Unsubscribe(); exception.Invoke(ex); return; } }); tcs.SetResult(null); return(tcs.Task); }
public void Unsubscribe() { var api = new Mock <IBinanceApi>().Object; var client = new Mock <IDepthClient>().Object; var cache = new OrderBookCache(api, client); // Can call unsubscribe before subscribe or multiple times without fail. cache.Unsubscribe(); cache.Unsubscribe(); }