Exemplo n.º 1
0
        private async Task ProcessRequest(ConcurrentQueue <MarketRequest> requests)
        {
            while (requests.TryDequeue(out var request))
            {
                try
                {
                    FileWriter fileWriter;
                    Log.Information($"Downloader.ProcessRequest(): Downloading {request.DataType} for {request.MarketSymbol.Symbol} from {request.StartDate} to {request.EndDate}");

                    switch (request.DataType)
                    {
                    case DataType.Fundamental:
                        var fundamentalMessage = await _level1Client.GetFundamentalSnapshotAsync(request.MarketSymbol.Symbol);

                        var fundamentalData = new FundamentalData(DateTime.Now.Date, fundamentalMessage.ToCsv());
                        fileWriter = new FileWriter(_dataDirectory, request.MarketSymbol, DataType.Fundamental);
                        fileWriter.Write(new List <HistoricalData>()
                        {
                            fundamentalData
                        });
                        break;

                    case DataType.Tick:
                    case DataType.Daily:
                        var filename = await GetMarketFilename(request);

                        fileWriter = new FileWriter(_dataDirectory, request.MarketSymbol, request.DataType);
                        var historicalData = GetData(request, filename);
                        fileWriter.Write(historicalData);
                        File.Delete(filename);
                        break;

                    default:
                        throw new NotSupportedException("DataType not yet supported.");
                    }
                }
                catch (Exception e)
                {
                    Log.Error($"{request.MarketSymbol.Symbol} Error: {e}");
                }
            }
        }