protected bool processTicker(BaseTicker ticker) { // true - тікер обробили, його потрібно вивести // false - тікер не змінився bool processed = false; if (ticker.Symbol != string.Empty && ticker.BidPrice != 0 && ticker.AskPrice != 0 && ticker.TotalTradedVolume != 0) { if (totalTicker.dictionaryTicker.ContainsKey(ticker.Symbol)) { BaseTicker updatedTicker; processed = calculateTicker(ticker, out updatedTicker); if (processed) { //totalTicker.dictionaryTicker[ticker.Symbol] = updatedTicker; totalTicker.dictionaryTicker.AddOrUpdate(ticker.Symbol, updatedTicker, (k, v) => updatedTicker); } } else { processed = true; //totalTicker.dictionaryTicker[ticker.Symbol] = ticker; totalTicker.dictionaryTicker.TryAdd(ticker.Symbol, ticker); } } return(processed); }
protected override void OnMessage(string data) { BinanceStreamTick eventData = JsonConvert.DeserializeObject <BinanceStreamTick>(data); BaseTicker ticker = new BaseTicker(); ticker.Symbol = _mappings[ProviderId].getSymbol(eventData.Data.SymbolApi); ticker.AskPrice = eventData.Data.BestAskPrice; ticker.BidPrice = eventData.Data.BestBidPrice; ticker.TotalTradedVolume = eventData.Data.TotalTradedQuoteAssetVolume; if (processTicker(ticker)) { Console.WriteLine($"[{ProviderName}] {ticker.Symbol} : Ask = {ticker.AskPrice} Bid = {ticker.BidPrice} Volume = {ticker.TotalTradedVolume}"); } else { Console.WriteLine($"[{ProviderName}] {ticker.Symbol}: data not changed"); } }
protected bool calculateTicker(BaseTicker newTicker, out BaseTicker resultTicker) { // true - прийшов новий тікер // false - тікер рівний тікеру в dictionaryTicker bool changed = false; BaseTicker lastTicker = totalTicker.dictionaryTicker[newTicker.Symbol]; if (lastTicker.AskPrice != newTicker.AskPrice || lastTicker.BidPrice != newTicker.BidPrice || lastTicker.TotalTradedVolume != newTicker.TotalTradedVolume) { resultTicker = newTicker; changed = true; } else { resultTicker = new BaseTicker(); } return(changed); }
protected override void OnMessage(string data) { // get socket data BinanceStreamTick eventData = JsonConvert.DeserializeObject <BinanceStreamTick>(data); BaseTicker ticker = new BaseTicker() { Symbol = eventData.Data.Symbol, AskPrice = eventData.Data.BestAskPrice, BidPrice = eventData.Data.BestBidPrice, TotalTradedVolume = eventData.Data.TotalTradedQuoteAssetVolume }; // check the data has changed if (!EqualsTicker(ticker)) { Console.WriteLine($"{ticker.Symbol} : Ask = {ticker.AskPrice} Bid = {ticker.BidPrice} Volume = {ticker.TotalTradedVolume}"); } else { Console.WriteLine($"{ticker.Symbol}: data not changed"); } }