示例#1
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));
        }
示例#2
0
        /// <summary>
        /// Создать <see cref="LuaFixServer"/>.
        /// </summary>
        public LuaFixServer()
        {
            _sessionHolder = new LuaSession(new MillisecondIncrementalIdGenerator())
            {
                Path = SystemProcess.GetCurrentProcess().MainModule.FileName
            };

            _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);
            });

            _fixServer.NewOutMessage += message =>
            {
                _sessionHolder.AddDebugLog("In. {0}", message);

                switch (message.Type)
                {
                case MessageTypes.CandlePnF:
                case MessageTypes.CandleRange:
                case MessageTypes.CandleRenko:
                case MessageTypes.CandleTick:
                case MessageTypes.CandleTimeFrame:
                case MessageTypes.CandleVolume:
                    throw new NotSupportedException();

                case MessageTypes.MarketData:
                {
                    var mdMsg = (MarketDataMessage)message;
                    ProcessMarketDataMessage(mdMsg);
                    break;
                }

                case MessageTypes.SecurityLookup:
                {
                    var secMsg = (SecurityLookupMessage)message;

                    var securityId = new SecurityId
                    {
                        SecurityCode = secMsg.SecurityId.SecurityCode,
                        BoardCode    = !secMsg.SecurityId.BoardCode.IsEmpty()
                                                                ? _sessionHolder.GetSecurityClass(secMsg.SecurityId)
                                                                : null
                    };

                    _sessionHolder.Requests.Enqueue(new LuaRequest
                        {
                            MessageType   = MessageTypes.SecurityLookup,
                            TransactionId = secMsg.TransactionId,
                            SecurityId    = securityId,
                            Value         = secMsg.UnderlyingSecurityCode
                        });
                    break;
                }

                case MessageTypes.OrderPairReplace:
                case MessageTypes.Portfolio:
                case MessageTypes.Position:
                    throw new NotSupportedException();

                case MessageTypes.PortfolioLookup:
                    var pfMsg = (PortfolioLookupMessage)message;
                    _sessionHolder.Requests.Enqueue(new LuaRequest
                    {
                        MessageType   = MessageTypes.PortfolioLookup,
                        TransactionId = pfMsg.TransactionId
                    });
                    break;

                case MessageTypes.OrderStatus:
                    var statusMsg = (OrderStatusMessage)message;
                    _sessionHolder.Requests.Enqueue(new LuaRequest
                    {
                        MessageType   = MessageTypes.OrderStatus,
                        TransactionId = statusMsg.TransactionId
                    });
                    break;

                case MessageTypes.OrderRegister:
                case MessageTypes.OrderReplace:
                case MessageTypes.OrderCancel:
                case MessageTypes.OrderGroupCancel:
                    var orderMsg = (OrderMessage)message;
                    ProcessOrderMessage(orderMsg);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            };

            _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));
        }