/// <summary> /// Обработчик события изменения статуса подписки /// </summary> private void TradeSubscriptionStatusReceived(AdapterEventArgs <TradeSubscriptionStatus> args) { args.MarkHandled(); Logger.Debug().Print( "Trade subscription status received", LogFields.Id(args.Message.id), LogFields.Status((TradeSubscriptionStatus.StatusCode)args.Message.status_code), LogFields.Message(args.Message.text_message) ); }
/// <summary> /// Сохранить сделку, требующую отложенной обработки /// </summary> /// <param name="message"></param> public void PutPendingFill(QLFill message) { log.Debug().Print("Postpone fill processing", LogFields.Message(message)); using (locker.WriteLock()) { if (pendingFills.ContainsKey(message.trade_num)) { log.Warn().Print($"Fill duplicate received", LogFields.Id(message.trade_num)); return; } pendingFills[message.trade_num] = message; } }
/// <summary> /// Сохранить идентификатор полученной сделки. Для дальнейшего анализа на получение дубликата сообщения /// </summary> /// <param name="id">Биржевой идентификатор сделки</param> /// <returns>true - если сделка уже есть в контейнере, иначе false</returns> public bool PutFillId(QLFill fill) { using (lockerReceivedFills.WriteLock()) { if (receivedFills.Contains(fill.trade_num)) { log.Warn().Print($"Fill duplicate received", LogFields.Id(fill.trade_num)); return(true); } receivedFills.Add(fill.trade_num); } return(false); }