/// <summary> /// 親専用 /// Tickerでローソクを更新する /// </summary> /// <param name="ticker">Ticker</param> public void Update(Ticker ticker) { // 現在のTickerに設定 CurrentTicker = ticker; if (CurrentCandle == null) { // 起動してから初回の動作 if (SystemConstants.IsFirstDeleteCandle) { // この板の全ローソクデータを削除 Logger.LogInformation($"ローソクデータ全削除:{Board.Name}"); var delList = DbContext.Candles.Include(x => x.MBoard).Where(d => d.MBoard.MBoardId == Board.MBoardId).ToList(); DbContext.Candles.RemoveRange(delList); DbContext.SaveChanges(); } // 新しいローソクの準備 CurrentCandle = new Candle(Board, TimeScale, CurrentTicker); // 子要素を新しいローソクで更新 UpdateChildren(CurrentCandle); } else // 初回ではない場合 { // ローソクを更新 var newCandles = CurrentCandle.UpdateByTicker(CurrentTicker); foreach (var item in newCandles) { // 新しいローソクがある場合 // 現在のローソクでDB更新 Logger.LogDebug($"DB:Candles更新:{Board.Name} {TimeScale.DisplayName}"); DbContext.Candles.Add(CurrentCandle); // 今まで作成したローソクに追加 CandleList.Add(CurrentCandle); // 子要素を新しいローソクで更新 UpdateChildren(item); // 新しいローソクをセット CurrentCandle = item; } if (newCandles.Count > 0) { // 更新があった場合 // 最大データ数を超えていたら、古いデータを1件削除 DeleteOldData(); // 子要素も更新が終わったらコミット DbContext.SaveChanges(SystemConstants.SystemName); } } }
/// <summary> /// 子専用 /// 親から送られてきたローソクで更新する /// </summary> /// <param name="candle">ローソクデータ</param> public void UpdateByCandle(Candle candle) { Logger.LogDebug($"DB:Candles更新:{Board.Name} {TimeScale.DisplayName}"); if (CurrentCandle == null) { // 初回 // 新しいローソクの準備 CurrentCandle = new Candle(Board, TimeScale, candle); // 子要素を更新 UpdateChildren(candle); } else { // 2回目以降 var newCandles = CurrentCandle.UpdateByCandle(candle); foreach (var item in newCandles) { // 新しいローソクがある場合 // 現在のローソクでDB更新 DbContext.Candles.Add(CurrentCandle); // 今まで作成したローソクに追加 CandleList.Add(CurrentCandle); // 子要素を新しいローソクで更新 UpdateChildren(item); // 新しいローソクをセット CurrentCandle = item; } if (newCandles.Count > 0) { // 更新があった場合 // 最大データ数を超えていたら、古いデータを1件削除 DeleteOldData(); } } }