/// <inheritdoc />
        protected override void OnInnerAdapterNewOutMessage(Message message)
        {
            PositionChangeMessage change = null;

            if (message.Type != MessageTypes.Reset &&
                message.Type != MessageTypes.Connect &&
                message.Type != MessageTypes.Disconnect)
            {
                lock (_sync)
                    change = _positionManager.ProcessMessage(message);
            }

            base.OnInnerAdapterNewOutMessage(message);

            if (change != null)
            {
                var subscriptions = change.StrategyId.IsEmpty() ? _subscriptions.Cache : _strategySubscriptions.TryGetValue(change.StrategyId)?.Cache;

                if (subscriptions?.Length > 0)
                {
                    change.SetSubscriptionIds(subscriptions);
                }

                base.OnInnerAdapterNewOutMessage(change);
            }
        }
        /// <inheritdoc />
        protected override void OnInnerAdapterNewOutMessage(Message message)
        {
            PositionChangeMessage change = null;

            if (message.Type != MessageTypes.Reset)
            {
                change = _positionManager.ProcessMessage(message);
            }

            base.OnInnerAdapterNewOutMessage(message);

            if (change != null)
            {
                var subscriptions = _subscriptions.Cache;

                if (subscriptions.Length > 0)
                {
                    change.SetSubscriptionIds(subscriptions);
                }

                base.OnInnerAdapterNewOutMessage(change);
            }
        }