private void OnReceived(RealtimeReceived receivedMessage) { var order = new BidAskOrder(); order.Id = receivedMessage.OrderId; order.Price = receivedMessage.Price; order.Size = receivedMessage.Size; lock (_spreadLock) { if (receivedMessage.Side == "buy") { lock (_bidLock) { _buys.Add(order); Buys = _buys.ToList(); } } else if (receivedMessage.Side == "sell") { lock (_askLock) { _sells.Add(order); Sells = _sells.ToList(); } } } }
private void OnOpen(object sender, RealtimeOpen open) { var order = new BidAskOrder(); order.Id = open.OrderId; order.Price = open.Price.Value; order.Size = open.RemainingSize; AddOrder(order: order, side: open.Side); }
private async void OnOpen(object sender, RealtimeOpen open) { if (await checkSequenceNumber(open.Sequence)) { System.Windows.Application.Current.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Background, new Action(() => { // change to UI thread var order = new BidAskOrder(); order.Id = open.OrderId; order.Price = open.Price.Value; order.Size = open.RemainingSize; AddOrder(order: order, side: open.Side); })); } }
private void AddOrder(BidAskOrder order, Side side) { var list = GetOrderList(side); lock (list.Item1) { list.Item2.TryGetValue(order.Price, out var linkedlist); if (linkedlist == null) { linkedlist = new ObservableLinkedList <BidAskOrder>(); list.Item2.Add(order.Price, linkedlist); } linkedlist.AddLast(order); _ordersByID[order.Id] = order; } NotifyPropertyChanged("BestBuy"); NotifyPropertyChanged("BestSell"); NotifyPropertyChanged("Spread"); }