private static void Display(SymbolStatisticsEventArgs args) { lock (_sync) { _statistics[args.Statistics[0].Symbol] = args.Statistics[0]; if (_displayTask.IsCompleted) { // Delay to allow multiple data updates between display updates. _displayTask = Task.Delay(250) .ContinueWith(_ => { SymbolStatistics[] latestStatistics; lock (_sync) { latestStatistics = _statistics.Values.ToArray(); } Console.SetCursorPosition(0, 0); foreach (var stats in latestStatistics) { Console.WriteLine($" 24-hour statistics for {stats.Symbol}:".PadRight(119)); Console.WriteLine($" %: {stats.PriceChangePercent:0.00} | O: {stats.OpenPrice:0.00000000} | H: {stats.HighPrice:0.00000000} | L: {stats.LowPrice:0.00000000} | V: {stats.Volume:0.}".PadRight(119)); Console.WriteLine($" Bid: {stats.BidPrice:0.00000000} | Last: {stats.LastPrice:0.00000000} | Ask: {stats.AskPrice:0.00000000} | Avg: {stats.WeightedAveragePrice:0.00000000}".PadRight(119)); Console.WriteLine(); } Console.WriteLine(_message.PadRight(119)); }); } } }
private void OnStatisticsUpdate(SymbolStatisticsEventArgs e) { var statistics = e.Statistics; var immutableStatistics = _cache.GetSymbolStatistics(); var immutablePrices = _cache.GetSymbolPrices(); if (immutableStatistics != null) { var mutableStatistics = immutableStatistics.ToBuilder(); foreach (var statistic in statistics) { mutableStatistics[statistic.Symbol] = statistic; } _cache.SetSymbolStatistics(mutableStatistics.ToImmutable()); } if (immutablePrices != null) { var mutablePrice = immutablePrices.ToBuilder(); foreach (var statistic in statistics) { mutablePrice[statistic.Symbol] = statistic.LastPrice; } _cache.SetSymbolPrices(mutablePrice.ToImmutable()); } }
// ReSharper disable once UnusedMember.Local private static void Display(SymbolStatisticsEventArgs args) => Display(args.Statistics);