public GameweekTimeline(GameweekTimeline prev, List <TimelineLiveElement> le) { liveElements = le; if (prev != null) { timeline = prev.timeline; } }
public async Task Process() { var bs = await _client.getBootstrapStatic(); var currEvent = bs.events.FirstOrDefault(ev => ev.is_current); var gw = currEvent.id; var currentLive = await _client.getLiveData(gw); var previousTimeline = await ReadPreviousTimeline(gw); var newTimeline = new GameweekTimeline(previousTimeline, currentLive.elements.Select(el => new TimelineLiveElement(el)).ToList()); // Find and log differences between previous timeline and current live var diffs = FindAllPlayerDifferences(previousTimeline, currentLive); var timestamp = DateTime.Now; var prediction = new List <TimelineLiveElement>(); var predictor = new TimelinePredictor(gw, _client); await predictor.Init(); foreach (var element in bs.elements) { var liveElementBase = currentLive.elements.FirstOrDefault(e => e.id == element.id); var liveElement = liveElementBase != null ? new TimelineLiveElement(liveElementBase) : new TimelineLiveElement() { id = element.id }; prediction.Add(await predictor.Predict(liveElement)); } newTimeline.prediction = prediction; var predictionDiff = FindAllPlayerPredictionDifferences(previousTimeline != null ? previousTimeline.prediction : new List <TimelineLiveElement>(), newTimeline.prediction); Console.WriteLine($"Diffs: {diffs.Count}"); Console.WriteLine($"PredictionDiffs: {predictionDiff.Count}"); if (diffs.Count > 0 || predictionDiff.Count > 0) { newTimeline.timeline.Add(new GameweekTimelineEntry() { timestamp = timestamp, diff = diffs, predictionDiff = predictionDiff }); await WriteTimeline(gw, newTimeline); } }
private List <TimelineLiveElement> FindAllPlayerDifferences(GameweekTimeline prev, Live currLive) { var diffs = new List <TimelineLiveElement>(); foreach (LiveElementBase currLiveElement in currLive.elements) { var elementId = currLiveElement.id; var comparison = currLiveElement; if (prev != null) { var prevLiveElement = prev.liveElements.FirstOrDefault(p => p.id == elementId); comparison = Compare(prevLiveElement, currLiveElement); } else { comparison = getBaseDiff(currLiveElement); } if (comparison != null) { diffs.Add(new TimelineLiveElement(currLiveElement)); } } return(diffs); }
private async Task WriteTimeline(int gw, GameweekTimeline timeline) { await _writer.write(GetS3Key(gw), timeline, true); }