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"); } }
/// <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)); }