public void OnNext(GameSeriesEvent e) { var message = e switch { GameSeriesStarted start => $"a new game series of {start.Plan.Rounds.Count} rounds was started", RoundStarted roundStarted => $"a new round started", RoundEnded roundEnded => $"round finished. {PointInfo(roundEnded.Result.PlayerResults)}", _ => e.ToString(), }; Render(message, ConsoleColor.DarkMagenta); if (e is GameSeriesStarted s) { _playerNames = s.Players.Select(p => p.Name).ToList(); _totalScores = s.Players.Select(_ => 0).ToList(); } else if (e is RoundEnded end) { foreach (var(r, i) in end.Result.PlayerResults.Select((r, i) => (r, i))) { _totalScores[i] += r.Score; } Render("Total scores: " + string.Join(", ", Enumerable.Zip(_playerNames, _totalScores)), ConsoleColor.DarkMagenta); } }
public void StoreSeriesEvent(GameSeriesEvent gameEvent) { var persistableEvent = GameSeriesEventSerializer.Convert(gameEvent); using var ctx = _contextFactory.CreateDbContext(); ctx.SeriesEvents.Add(persistableEvent); ctx.SaveChanges(); }
public static PersistedSeriesEvent Convert(GameSeriesEvent ev) { return(new PersistedSeriesEvent { GameUuid = ev.GameUuid, Payload = ConvertPayload(ev), Type = ConvertType(ev) }); }
public void OnNext(GameSeriesEvent value) { _logger.LogInformation("persisting {gameSeriesEvent}", value); // HACK: want to stay in 10k rows. Therefore delete previous rounds events for now. // TODO: old events can be used for stats, delete only when series is finished. if (value is RoundStarted roundStarted) { _repo.DeleteOutdatedEvents(roundStarted.GameUuid); } _repo.StoreSeriesEvent(value); }
public void OnNext(GameSeriesEvent value) { switch (value) { case GameSeriesStarted gameSeriesStarted: OnNext(gameSeriesStarted); break; case RoundStarted roundStarted: OnNext(roundStarted); break; case RoundEnded ended: OnNext(ended); break; } }
public void StoreSeriesEvent(GameSeriesEvent gameEvent) { throw new System.NotImplementedException(); }
public void OnNext(GameSeriesEvent value) { System.Console.WriteLine(value); }