示例#1
0
        public void ApplyMessageProcessor(string name, MessageDirections direction, bool isTransaction, bool isMarketData, IMessageProcessor defaultProcessor = null)
        {
            var           processor = new MessageProcessorPool(defaultProcessor ?? new MessageProcessor("Processor '{0}' ({1})".Put(name, direction), _errorHandler));
            ISmartPointer pointer   = new SmartPointer <IMessageProcessor>(processor, p =>
            {
                p.Stop();
                _processorPointers.Remove(p);
            });

            _processorPointers[processor] = pointer;

            switch (direction)
            {
            case MessageDirections.In:
                if (isTransaction)
                {
                    DecRefProcessor(TransactionAdapter, direction);

                    pointer.IncRef();
                    TransactionAdapter.InMessageProcessor = processor;
                }

                if (isMarketData)
                {
                    DecRefProcessor(MarketDataAdapter, direction);

                    pointer.IncRef();
                    MarketDataAdapter.InMessageProcessor = processor;
                }

                break;

            case MessageDirections.Out:
                if (isTransaction)
                {
                    DecRefProcessor(TransactionAdapter, direction);

                    pointer.IncRef();
                    TransactionAdapter.OutMessageProcessor = processor;
                }

                if (isMarketData)
                {
                    DecRefProcessor(MarketDataAdapter, direction);

                    pointer.IncRef();
                    MarketDataAdapter.OutMessageProcessor = processor;
                }

                break;

            default:
                _processorPointers.Remove(processor);
                throw new ArgumentOutOfRangeException("direction");
            }
        }
示例#2
0
        /// <summary>
        /// Создать <see cref="LuaFixServer"/>.
        /// </summary>
        public LuaFixServer()
        {
            _sessionHolder = new LuaSession(new MillisecondIncrementalIdGenerator())
            {
                Path = SystemProcess.GetCurrentProcess().MainModule.FileName
            };

            var inProcessor  = new MessageProcessorPool(new MessageProcessor("Processor 'LuaServer' (In)", err => _logManager.Application.AddErrorLog(err)));
            var outProcessor = new MessageProcessorPool(new MessageProcessor("Processor 'LuaServer' (Out)", err => _logManager.Application.AddErrorLog(err)));

            _marketDataAdapter = new LuaMarketDataAdapter(_sessionHolder)
            {
                InMessageProcessor  = inProcessor,
                OutMessageProcessor = outProcessor
            };
            _transactionAdapter = new LuaTransactionAdapter(_sessionHolder)
            {
                InMessageProcessor  = inProcessor,
                OutMessageProcessor = outProcessor
            };

            _fixServer = new FixServerEx((l, p) =>
            {
                if (Login.IsEmpty() || (l.CompareIgnoreCase(Login) && p == Password))
                {
                    _prevLevel1.Clear();
                    return(Tuple.Create(TimeSpan.FromMilliseconds(100), FixClientRoles.Admin));
                }

                return(null);
            }, _transactionAdapter, _marketDataAdapter);

            _logManager.Application = new QuikNativeApp();

            _logManager.Sources.Add(_sessionHolder);
            _logManager.Sources.Add(_fixServer);

            LogFile = "StockSharp.QuikLua.log";

            var path        = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var logFileName = Path.Combine(path, LogFile);

            _logManager.Listeners.Add(new FileLogListener(logFileName));
        }