protected override void Execute(WorkerExecutionContext executionContext) { executionContext.ContinuationDelay = TimeSpan.Zero; SymbolInfo[] queue; lock (_queue) { if (_queue.Count == 0) { Monitor.Wait(_queue, Settings.ContinuationDelay); } if (_queue.Count == 0) { return; } queue = _queue.ToArray(); _queue.Clear(); } var quotes = _marketDataService.ToMarketData(queue); if (quotes.Count > 0) { _marketDataEvents.OnUpdate(quotes); } }
//private bool _traceUpdateDataThread = false; protected override void Execute(WorkerExecutionContext executionContext) { if (_connection.CheckConnection(executionContext, pump: true) != ReturnCode.RET_OK) { return; } var cancellationToken = executionContext.CancellationToken; //if (_traceUpdateDataThread) m_ptrLogger.LogOk("Begin TradesGet"); var openTrades = _connection.Api.TradesGet(); //if (_traceUpdateDataThread) m_ptrLogger.LogOk($"End TradesGet: Count = {openTrades.Count}"); foreach (var openTrade in openTrades) { cancellationToken.ThrowIfCancellationRequested(); _host.OnTrade(_serverIndex, openTrade, (TransType)(-1)); } //if (_traceUpdateDataThread) m_ptrLogger.LogOk("Begin MarginsGet"); var marginLevels = _connection.Api.MarginsGet(); //if (_traceUpdateDataThread) m_ptrLogger.LogOk($"End MarginsGet: Count = {marginLevels.Count}"); foreach (var marginLevel in marginLevels) { cancellationToken.ThrowIfCancellationRequested(); _host.OnMargin(_serverIndex, marginLevel); } }
public ReturnCode CheckConnection(WorkerExecutionContext executionContext, bool pump = false) { // Check connection bool shouldConnect; if (_api == null) { _api = _mt4Manager.CreateApi(); shouldConnect = true; } else { shouldConnect = Ping() != ReturnCode.RET_OK; } // Connect if (shouldConnect) { var code = ConnectAndLogin(); if (code != ReturnCode.RET_OK) { executionContext.ContinuationDelay = ReconnectDelay; return(code); } } if (pump && !_isPumpEnabled) { var code = RefreshSymbols(executionContext.CancellationToken); if (code != ReturnCode.RET_OK) { LogError("Unable to enable pump because unable refresh symbols", code); return(code); } code = Api.PumpingSwitchEx(OnPumpEx, 0); if (code != ReturnCode.RET_OK) { LogError("Unable to enable pump because 'PumpingSwitchEx' method fails", code); return(code); } _isPumpEnabled = true; } return(ReturnCode.RET_OK); }