This commit is contained in:
Christian Kauer 2023-12-30 11:38:11 +01:00
parent 2756c589ae
commit 7a3d73ce66
11 changed files with 85 additions and 24 deletions

View File

@ -232,14 +232,14 @@ namespace GameData
return res; return res;
} }
public T[] Get<T>(string serviceUrl, bool suppressExceptions = false) public async Task<T[]> Get<T>(string serviceUrl, bool suppressExceptions = false)
{ {
WrapperArray<T> res = default; WrapperArray<T> res = default;
try try
{ {
_logger.LogDebug($"calling service url {serviceUrl}"); _logger.LogDebug($"calling service url {serviceUrl}");
var response = client.Send(GetHttpRequestMessage(HttpMethod.Get, serviceUrl)); var response = await client.SendAsync(GetHttpRequestMessage(HttpMethod.Get, serviceUrl));
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {
@ -266,7 +266,7 @@ namespace GameData
} }
else else
{ {
var errorResult = response.Content.ReadAsStringAsync().Result; var errorResult = await response.Content.ReadAsStringAsync();
_logger.LogError("error getting from service '{service}' with code '{statuscode}' - Result: '{result}'", serviceUrl, response.StatusCode, errorResult); _logger.LogError("error getting from service '{service}' with code '{statuscode}' - Result: '{result}'", serviceUrl, response.StatusCode, errorResult);
} }
} }
@ -318,6 +318,7 @@ namespace GameData
{ {
var errorResult = await response.Content.ReadAsStringAsync(); var errorResult = await response.Content.ReadAsStringAsync();
_logger.LogError("error getting from service '{service}' with code '{statuscode}' - Result: '{result}'", serviceUrl, response.StatusCode, errorResult); _logger.LogError("error getting from service '{service}' with code '{statuscode}' - Result: '{result}'", serviceUrl, response.StatusCode, errorResult);
return await Task.FromResult<T>(default(T));
} }
} }
catch (Exception ex) catch (Exception ex)

View File

@ -20,6 +20,11 @@ namespace GameData.Dummy
throw new NotImplementedException(); throw new NotImplementedException();
} }
Task<IEnumerable<Expense>> IExpenseRepository.GetAll()
{
throw new NotImplementedException();
}
Task<PlayerExpense> IExpenseRepository.Save(PlayerExpense data) Task<PlayerExpense> IExpenseRepository.Save(PlayerExpense data)
{ {
throw new NotImplementedException(); throw new NotImplementedException();

View File

@ -37,5 +37,15 @@ namespace GameData.Dummy
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<Game> Create(string gameName)
{
throw new NotImplementedException();
}
public Task<IEnumerable<GameState>> LoadStates(Guid gameId)
{
throw new NotImplementedException();
}
} }
} }

View File

@ -27,9 +27,9 @@ namespace GameData.Repository
_log?.LogDebug("creating ExpenseRepository"); _log?.LogDebug("creating ExpenseRepository");
} }
public IEnumerable<Expense> GetAll() public async Task<IEnumerable<Expense>> GetAll()
{ {
return _client.Get<Expense>(UrlExpense).ToList(); return await _client.Get<Expense>(UrlExpense);
} }
public async Task<PlayerExpense> Save(PlayerExpense memberExpense) public async Task<PlayerExpense> Save(PlayerExpense memberExpense)

View File

@ -3,6 +3,7 @@ using GameModel;
using GameModel.Contracts; using GameModel.Contracts;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -26,9 +27,25 @@ namespace GameData.Repository
_client = apiClient; _client = apiClient;
} }
public GameState Load(Guid gameId) public async Task<IEnumerable<GameState>?> LoadStates(Guid gameId)
{ {
throw new NotImplementedException(); string str = JsonConvert.SerializeObject(
new
{
gameid = new
{
_eq = gameId
}
}
);
var states = await _client.Get<GameStateDo>( UrlGameState + "?filter" + str);
var res = states.OrderBy(_ => _.Counter).Select(_ => JsonConvert.DeserializeObject<GameState>(_.GameState, new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto
}));
return res;
} }
public async Task<GameState> Save(GameState gameState) public async Task<GameState> Save(GameState gameState)
@ -63,5 +80,13 @@ namespace GameData.Repository
{ {
return await _client.GetSingle<Game>(UrlGame + "/" + gameId); return await _client.GetSingle<Game>(UrlGame + "/" + gameId);
} }
public async Task<Game> Create(string gameName)
{
dynamic payload = new JObject();
payload.gamename = gameName;
return await _client.Post<Game>(payload, UrlGame);
}
} }
} }

View File

@ -23,7 +23,7 @@ namespace GameHandler
_expenseRepository = expenseRepository; _expenseRepository = expenseRepository;
} }
public ExpenseModel HandleGameExenseEventArgs(GameExenseEventArgs gameExenseEventArgs, ExpenseModel expenseModelToAppend) public async Task<ExpenseModel> HandleGameExenseEventArgs(GameExenseEventArgs gameExenseEventArgs, ExpenseModel expenseModelToAppend)
{ {
if (!gameExenseEventArgs.PlayerIds.Any(_ => _ == gameExenseEventArgs.PlayerId)) if (!gameExenseEventArgs.PlayerIds.Any(_ => _ == gameExenseEventArgs.PlayerId))
{ {
@ -33,14 +33,16 @@ namespace GameHandler
List<PlayerExpense> memberExpenses = PrepareResult(ref expenseModelToAppend); List<PlayerExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
var triggers = gameExenseEventArgs.Triggers; var triggers = gameExenseEventArgs.Triggers;
AssignExpenses(gameExenseEventArgs.PlayerId, gameExenseEventArgs.PlayerIds, memberExpenses, triggers); await AssignExpenses(gameExenseEventArgs.PlayerId, gameExenseEventArgs.PlayerIds, memberExpenses, triggers);
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() }; return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
} }
private void AssignExpenses(int playerId, int[] playerIds, List<PlayerExpense> memberExpenses, ExpenseTrigger[] triggers) private async Task AssignExpenses(int playerId, int[] playerIds, List<PlayerExpense> memberExpenses, ExpenseTrigger[] triggers)
{ {
var destExpenses = _expenseRepository.GetAll().Where(_ => _.ExpenseTriggers.Any(et => triggers.Any(et2 => et2 == et))); var list = await _expenseRepository.GetAll();
var destExpenses = list
.Where(_ => _.ExpenseTriggers.Any(et => triggers.Any(et2 => et2 == et)));
var inversePlayers = playerIds.Where(_ => _ != playerId); var inversePlayers = playerIds.Where(_ => _ != playerId);
foreach (var expense in destExpenses) foreach (var expense in destExpenses)

View File

@ -76,7 +76,7 @@ namespace GameHandler
{ {
var gm = _gh.InitGameModel(playerIds, gameSettings); var gm = _gh.InitGameModel(playerIds, gameSettings);
var throwState = ThrowState.Create(_gh.ThrowMode(), _gh.ThrowsPerRount()); var throwState = ThrowState.Create(_gh.ThrowMode(), _gh.ThrowsPerRount());
_game = await _gameStateHandler.CreateNewGame(); _game = await _gameStateHandler.CreateNewGame(gameName);
return GameState.Create(_game.Id, gameName, throwState, _gh.GetCurrentPlayerId(gm), gm); return GameState.Create(_game.Id, gameName, throwState, _gh.GetCurrentPlayerId(gm), gm);
} }
@ -92,7 +92,7 @@ namespace GameHandler
private void _gh_GameExpenseOccured(object? sender, EventArgs e) private void _gh_GameExpenseOccured(object? sender, EventArgs e)
{ {
var expenseModel = _eh.HandleGameExenseEventArgs(e as GameExenseEventArgs, _gameStateHandler.ExpenseModel); var expenseModel = _eh.HandleGameExenseEventArgs(e as GameExenseEventArgs, _gameStateHandler.ExpenseModel).Result;
_gameStateHandler.Add(expenseModel); _gameStateHandler.Add(expenseModel);
//_lastState = _lastState with { ExpenseModel = expenseModel }; //_lastState = _lastState with { ExpenseModel = expenseModel };
} }
@ -158,13 +158,21 @@ namespace GameHandler
Game game = null; Game game = null;
using (var scope = _rootContainer?.BeginLifetimeScope()) using (var scope = _rootContainer?.BeginLifetimeScope())
{ {
var gs = new GameStateHandler(_scope.Resolve<IGameRepository>(), _scope.Resolve<IExpenseRepository>()); var gs = new GameStateHandler(scope.Resolve<IGameRepository>(), scope.Resolve<IExpenseRepository>());
game = await gs.LoadGame(gameId); game = await gs.LoadGame(gameId);
} }
if (game == null)
{
return null;
}
_game = game; _game = game;
InitGameServiceBehaviour(game.GameName); InitGameServiceBehaviour(game.GameName);
var res = await _gameStateHandler.LoadState(game.Id); var res = await _gameStateHandler.LoadState(game.Id);
_isStarted = res != null;
return res; return res;
} }

View File

@ -114,14 +114,16 @@ namespace GameHandler
} }
internal async Task<Game> CreateNewGame() internal async Task<Game> CreateNewGame(string gameName)
{ {
return await _gameRepository.Create(null); return await _gameRepository.Create(gameName);
} }
internal Task<GameState> LoadState(Guid gameId) internal async Task<GameState> LoadState(Guid gameId)
{ {
throw new NotImplementedException(); var existingGameStates = await _gameRepository.LoadStates(gameId);
gameStates.AddRange(existingGameStates.Select(_ => new GameStateHandlerItem<GameState>(_.Id,_)));
return existingGameStates.Last();
} }
internal async Task<Game?> LoadGame(Guid gameId) internal async Task<Game?> LoadGame(Guid gameId)

View File

@ -17,7 +17,7 @@ namespace GameModel.Contract
Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.ExpensePoint }, "Strafpunkt, z.B. im \"Scheißspiel\"", 0.5m, false), Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.ExpensePoint }, "Strafpunkt, z.B. im \"Scheißspiel\"", 0.5m, false),
}; };
IEnumerable<Expense> GetAll(); Task<IEnumerable<Expense>> GetAll();
Task<PlayerExpense> Save(PlayerExpense data); Task<PlayerExpense> Save(PlayerExpense data);
} }
} }

View File

@ -9,7 +9,8 @@ namespace GameModel.Contracts
public interface IGameRepository public interface IGameRepository
{ {
Task<Game> Create(Game game); Task<Game> Create(Game game);
GameState Load(Guid gameId); Task<Game> Create(string gameName);
Task<IEnumerable<GameState>> LoadStates(Guid gameId);
Task<Game> LoadGame(Guid gameId); Task<Game> LoadGame(Guid gameId);
Task<GameState> Save(GameState gameState); Task<GameState> Save(GameState gameState);
Task Update(Game game); Task Update(Game game);

View File

@ -88,7 +88,7 @@ async Task ShowMainMenu()
void ContinueGame() void ContinueGame()
{ {
StartGameAction("", new Guid("597956fe-6d83-424f-865f-5856b63f82c9")); StartGameAction("", new Guid("c042f8f0-3f52-48e7-b61e-82a6387af4bb"));
} }
void MasterDataAction() void MasterDataAction()
@ -144,6 +144,13 @@ void StartGameAction(string gameName, Guid gameId)
gameState = starttask.Result; gameState = starttask.Result;
} }
if (gameState == null)
{
Console.WriteLine($"game with id {gameId} not found");
ShowMainMenu();
return;
}
Show(gameState); Show(gameState);
do do