private void Session_TablesUpdates(object sender, TablesUpdatesEventArgs e) { var responseFactory = _session.getResponseReaderFactory(); var responsGTablesUpdatesReader = responseFactory.createTablesUpdatesReader(e.Response); for (int i = 0; i < responsGTablesUpdatesReader.Count; i++) { if (responsGTablesUpdatesReader.getUpdateTable(i) == O2GTableType.Offers) { if (responsGTablesUpdatesReader.getUpdateType(i) == O2GTableUpdateType.Update) { O2GOfferRow offer = responsGTablesUpdatesReader.getOfferRow(i); var _offerID = offer.OfferID; var _currentSymbol = offer.Instrument; PriceUpdate pu = new PriceUpdate { Symbol = offer.Instrument, TradeDateTime = offer.Time, Price = (offer.Bid + offer.Ask) / 2, Volume = offer.Volume, Bid = offer.Bid, Ask = offer.Ask }; priceUpdates.Add(pu); } } } }
private void Session_TablesUpdates(object sender, TablesUpdatesEventArgs e) { var responseTablesUpdatesReader = _factory.createTablesUpdatesReader(e.Response); Parallel.For(0, responseTablesUpdatesReader.Count, i => { if (responseTablesUpdatesReader.getUpdateTable(i) == O2GTableType.Offers && responseTablesUpdatesReader.getUpdateType(i) == O2GTableUpdateType.Update) { var offer = responseTablesUpdatesReader.getOfferRow(i); if (!string.IsNullOrEmpty(offer.Instrument)) { var pu = new PriceUpdate { Symbol = offer.Instrument, TradeDateTime = offer.Time, Price = GetPrice(offer.Bid, offer.Ask), Volume = offer.Volume, Bid = offer.Bid, Ask = offer.Ask, High = offer.High, Low = offer.Low }; lock (priceUpdateObject) { var firstPriceUpdate = priceUpdates.FirstOrDefault(f => f.Symbol.Equals(pu.Symbol)); if (firstPriceUpdate != null) { firstPriceUpdate.Ask = pu.Ask; firstPriceUpdate.Bid = pu.Bid; firstPriceUpdate.Volume = pu.Volume; firstPriceUpdate.PrevPrice = firstPriceUpdate.Price; firstPriceUpdate.Price = pu.Price; firstPriceUpdate.TradeDateTime = pu.TradeDateTime; } else { priceUpdates.Add(pu); } } } } }); OnRowCountChange(); }