private void ProcessOrderLogMessage(Security security, ExecutionMessage message) { var trade = (message.TradeId != null || !message.TradeStringId.IsEmpty()) ? EntityFactory.CreateTrade(security, message.TradeId, message.TradeStringId) : null; var logItem = message.ToOrderLog(EntityFactory.CreateOrderLogItem(new Order { Security = security }, trade)); //logItem.LocalTime = message.LocalTime; RaiseNewOrderLogItem(logItem); if (message.IsSystem == false) return; if (CreateDepthFromOrdersLog) { try { var builder = _olBuilders.SafeAdd(security, key => MarketDataAdapter.CreateOrderLogMarketDepthBuilder(message.SecurityId)); if (builder == null) throw new InvalidOperationException(); var updated = builder.Update(message); if (updated) { RaiseNewMessage(builder.Depth.Clone()); ProcessQuotesMessage(security, builder.Depth, false); } } catch (Exception ex) { // если ОЛ поврежден, то не нарушаем весь цикл обработки сообщения // а только выводим сообщение в лог RaiseError(ex); } } if (trade != null && CreateTradesFromOrdersLog) { var tuple = _entityCache.GetTrade(security, message.TradeId, message.TradeStringId, (id, stringId) => { var t = trade.Clone(); t.OrderDirection = message.Side.Invert(); return t; }); if (tuple.Item2) RaiseNewTrade(tuple.Item1); } }