public async Task ConnectToSource_ShouldHandleOrderBookCorrectly() { var url = BitfinexValues.ApiWebsocketUrl; using (var communicator = new BitfinexWebsocketCommunicator(url)) { using (var client = new BitfinexWebsocketClient(communicator)) { var pair = "BTCUSD"; var source = new BitfinexOrderBookSource(client); var orderBook = new CryptoOrderBook(pair, source); await communicator.Start(); client.Send(new BookSubscribeRequest(pair, BitfinexPrecision.P0, BitfinexFrequency.Realtime, "100")); await Task.Delay(TimeSpan.FromSeconds(5)); Assert.True(orderBook.BidPrice > 0); Assert.True(orderBook.AskPrice > 0); Assert.NotEmpty(orderBook.BidLevels); Assert.NotEmpty(orderBook.AskLevels); } } }
public async Task AutoSnapshotReloading_ShouldWorkAfterTimeout() { var url = BitfinexValues.ApiWebsocketUrl; using (var communicator = new BitfinexWebsocketCommunicator(url)) { using (var client = new BitfinexWebsocketClient(communicator)) { var pair = "LTCUSD"; var source = new BitfinexOrderBookSource(client) { LoadSnapshotEnabled = true }; var orderBook = new CryptoOrderBook(pair, source) { SnapshotReloadTimeout = TimeSpan.FromSeconds(5), SnapshotReloadEnabled = true }; await Task.Delay(TimeSpan.FromSeconds(13)); Assert.True(orderBook.BidPrice > 0); Assert.True(orderBook.AskPrice > 0); Assert.NotEmpty(orderBook.BidLevels); Assert.NotEmpty(orderBook.AskLevels); } } }
private static async Task<ICryptoOrderBook> StartBitfinex(string pair, bool optimized, bool l2Optimized) { var url = BitfinexValues.ApiWebsocketUrl; var communicator = new BitfinexWebsocketCommunicator(url) { Name = "Bitfinex" }; var client = new BitfinexWebsocketClient(communicator); var source = new BitfinexOrderBookSource(client); var orderBook = l2Optimized ? new CryptoOrderBookL2(pair, source) : (ICryptoOrderBook)new CryptoOrderBook(pair, source); if (optimized) { ConfigureOptimized(source, orderBook); } _ = communicator.Start(); // Send configuration request to enable server timestamps client.Send(new ConfigurationRequest(ConfigurationFlag.Sequencing | ConfigurationFlag.Timestamp)); // Send subscription request to order book data client.Send(new Bitfinex.Client.Websocket.Requests.Subscriptions.BookSubscribeRequest(pair, BitfinexPrecision.P0, BitfinexFrequency.Realtime, "100")); return orderBook; }