private void AddOrderBookFromCacheProvider(OrderBook orderBook) { if (!_assetPairs.ContainsKey(orderBook.AssetPair.Id)) { return; } orderBook.SetAssetPair(_assetPairs[orderBook.AssetPair.Id]); lock (_sync) { if (!_dirtyLykkeOrderBooks.ContainsKey(orderBook.AssetPair.Id)) { _dirtyLykkeOrderBooks.Add(orderBook.AssetPair.Id, orderBook); } else { // Update half only if it doesn't exist var dirtyOrderBook = _dirtyLykkeOrderBooks[orderBook.AssetPair.Id]; var newBids = dirtyOrderBook.Bids ?? orderBook.Bids; var newAsks = dirtyOrderBook.Asks ?? orderBook.Asks; var newOrderBook = new OrderBook(orderBook.Source, orderBook.AssetPair, newBids, newAsks, orderBook.Timestamp); _dirtyLykkeOrderBooks[orderBook.AssetPair.Id] = newOrderBook; } } MoveFromDirtyToMain(orderBook.AssetPair.Id); }
public Task HandleAsync(OrderBook orderBook) { if (!_assetPairs.ContainsKey(orderBook.AssetPair.Id)) { return(Task.CompletedTask); } orderBook.SetAssetPair(_assetPairs[orderBook.AssetPair.Id]); lock (_sync) { if (!_dirtyLykkeOrderBooks.ContainsKey(orderBook.AssetPair.Id)) { _dirtyLykkeOrderBooks.Add(orderBook.AssetPair.Id, orderBook); } else { // Update half even if it already exists var dirtyOrderBook = _dirtyLykkeOrderBooks[orderBook.AssetPair.Id]; var newBids = orderBook.Bids ?? dirtyOrderBook.Bids; var newAsks = orderBook.Asks ?? dirtyOrderBook.Asks; var newOrderBook = new OrderBook(orderBook.Source, orderBook.AssetPair, newBids, newAsks, orderBook.Timestamp); _dirtyLykkeOrderBooks[orderBook.AssetPair.Id] = newOrderBook; } } MoveFromDirtyToMain(orderBook.AssetPair.Id); return(Task.CompletedTask); }