/// <summary>
        /// Initialize <see cref="EmulationMessageAdapter"/>.
        /// </summary>
        /// <param name="innerAdapter">Underlying adapter.</param>
        /// <param name="inputChannel">Incoming messages channel.</param>
        /// <param name="outputChannel">Outgoing message channel.</param>
        public EmulationMessageAdapter(IMessageAdapter innerAdapter, IMessageChannel inputChannel, IMessageChannel outputChannel)
            : base(innerAdapter)
        {
            Emulator = new MarketEmulator
            {
                Parent = this,
                //SendBackSecurities = true,
                Settings =
                {
                    ConvertTime    = true,
                    InitialOrderId = DateTime.Now.Ticks,
                    InitialTradeId = DateTime.Now.Ticks,
                }
            };

            _inputChannel  = inputChannel;
            _outputChannel = outputChannel;

            _channelEmulator = new ChannelMessageAdapter(new SubscriptionOnlineMessageAdapter(Emulator), inputChannel, outputChannel);
            _channelEmulator.NewOutMessage += OnMarketEmulatorNewOutMessage;
        }
        /// <summary>
        /// Initialize <see cref="EmulationMessageAdapter"/>.
        /// </summary>
        /// <param name="innerAdapter">Underlying adapter.</param>
        /// <param name="inChannel">Incoming messages channel.</param>
        /// <param name="isEmulationOnly">Send <see cref="TimeMessage"/> to emulator.</param>
        /// <param name="securityProvider">The provider of information about instruments.</param>
        /// <param name="portfolioProvider">The portfolio to be used to register orders. If value is not given, the portfolio with default name Simulator will be created.</param>
        /// <param name="exchangeInfoProvider">Exchanges and trading boards provider.</param>
        public EmulationMessageAdapter(IMessageAdapter innerAdapter, IMessageChannel inChannel, bool isEmulationOnly, ISecurityProvider securityProvider, IPortfolioProvider portfolioProvider, IExchangeInfoProvider exchangeInfoProvider)
            : base(innerAdapter)
        {
            Emulator = new MarketEmulator(securityProvider, portfolioProvider, exchangeInfoProvider, TransactionIdGenerator)
            {
                Parent   = this,
                Settings =
                {
                    ConvertTime    = true,
                    InitialOrderId = DateTime.Now.Ticks,
                    InitialTradeId = DateTime.Now.Ticks,
                }
            };

            InChannel = inChannel;

            _inAdapter = new SubscriptionOnlineMessageAdapter(Emulator);
            _inAdapter = new ChannelMessageAdapter(_inAdapter, inChannel, new PassThroughMessageChannel());
            _inAdapter.NewOutMessage += RaiseNewOutMessage;

            _isEmulationOnly = isEmulationOnly;
        }
        /// <summary>
        /// Initialize <see cref="EmulationMessageAdapter"/>.
        /// </summary>
        /// <param name="innerAdapter">Underlying adapter.</param>
        /// <param name="queue">Message queue.</param>
        /// <param name="isEmulationOnly">Send <see cref="TimeMessage"/> to emulator.</param>
        public EmulationMessageAdapter(IMessageAdapter innerAdapter, IMessageQueue queue, bool isEmulationOnly)
            : base(innerAdapter)
        {
            Emulator = new MarketEmulator
            {
                Parent = this,
                //SendBackSecurities = true,
                Settings =
                {
                    ConvertTime    = true,
                    InitialOrderId = DateTime.Now.Ticks,
                    InitialTradeId = DateTime.Now.Ticks,
                }
            };

            _channelEmulator = new ChannelMessageAdapter(new SubscriptionOnlineMessageAdapter(Emulator), new InMemoryMessageChannel(queue, "Emulator in", err => RaiseNewOutMessage(new ErrorMessage {
                Error = err
            })), new PassThroughMessageChannel());
            _channelEmulator.NewOutMessage += OnMarketEmulatorNewOutMessage;
            _queue           = queue;
            _isEmulationOnly = isEmulationOnly;
        }