dev
This commit is contained in:
parent
2b51d3319f
commit
2756c589ae
|
|
@ -282,6 +282,56 @@ namespace GameData
|
||||||
return res.Data;
|
return res.Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<T> GetSingle<T>(string serviceUrl, bool suppressExceptions = false)
|
||||||
|
{
|
||||||
|
WrapperSingle<T> res = default;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_logger.LogDebug($"calling service url {serviceUrl}");
|
||||||
|
var response = await client.SendAsync(GetHttpRequestMessage(HttpMethod.Get, serviceUrl));
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
using (var responseStream = response.Content.ReadAsStream())
|
||||||
|
{
|
||||||
|
using (var streamReader = new StreamReader(responseStream))
|
||||||
|
{
|
||||||
|
string content;
|
||||||
|
if (typeof(T).Equals(typeof(string)))
|
||||||
|
{
|
||||||
|
content = streamReader.ReadToEnd();
|
||||||
|
res = (WrapperSingle<T>)Convert.ChangeType(content, typeof(T));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (var jsonTextReader = new JsonTextReader(streamReader))
|
||||||
|
{
|
||||||
|
var serializer = new JsonSerializer();
|
||||||
|
res = serializer.Deserialize<WrapperSingle<T>>(jsonTextReader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var errorResult = await response.Content.ReadAsStringAsync();
|
||||||
|
_logger.LogError("error getting from service '{service}' with code '{statuscode}' - Result: '{result}'", serviceUrl, response.StatusCode, errorResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "error at Get");
|
||||||
|
if (!suppressExceptions)
|
||||||
|
{
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Data;
|
||||||
|
}
|
||||||
|
|
||||||
internal async Task Put<T>(object payload, string serviceUrl, bool suppressExceptions = false)
|
internal async Task Put<T>(object payload, string serviceUrl, bool suppressExceptions = false)
|
||||||
{
|
{
|
||||||
T res = default;
|
T res = default;
|
||||||
|
|
|
||||||
|
|
@ -32,5 +32,10 @@ namespace GameData.Dummy
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task<Game> LoadGame(Guid gameId)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,5 +58,10 @@ namespace GameData.Repository
|
||||||
{
|
{
|
||||||
return await _client.Post<Game>(game, UrlGame);
|
return await _client.Post<Game>(game, UrlGame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<Game> LoadGame(Guid gameId)
|
||||||
|
{
|
||||||
|
return await _client.GetSingle<Game>(UrlGame + "/" + gameId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,21 @@ namespace GameHandler
|
||||||
return ThrowCommandParser.Parse(stringData, _gh.FreePlayerSelection(), 0);
|
return ThrowCommandParser.Parse(stringData, _gh.FreePlayerSelection(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<GameState> Load(Guid gameId)
|
||||||
|
{
|
||||||
|
Game game = null;
|
||||||
|
using (var scope = _rootContainer?.BeginLifetimeScope())
|
||||||
|
{
|
||||||
|
var gs = new GameStateHandler(_scope.Resolve<IGameRepository>(), _scope.Resolve<IExpenseRepository>());
|
||||||
|
game = await gs.LoadGame(gameId);
|
||||||
|
}
|
||||||
|
|
||||||
|
_game = game;
|
||||||
|
InitGameServiceBehaviour(game.GameName);
|
||||||
|
var res = await _gameStateHandler.LoadState(game.Id);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
public bool FreePlayerSelection => _gh.FreePlayerSelection();
|
public bool FreePlayerSelection => _gh.FreePlayerSelection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,5 +118,15 @@ namespace GameHandler
|
||||||
{
|
{
|
||||||
return await _gameRepository.Create(null);
|
return await _gameRepository.Create(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal Task<GameState> LoadState(Guid gameId)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
internal async Task<Game?> LoadGame(Guid gameId)
|
||||||
|
{
|
||||||
|
return await _gameRepository.LoadGame(gameId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ namespace GameModel.Contracts
|
||||||
{
|
{
|
||||||
Task<Game> Create(Game game);
|
Task<Game> Create(Game game);
|
||||||
GameState Load(Guid gameId);
|
GameState Load(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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,11 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace GameModel
|
namespace GameModel
|
||||||
{
|
{
|
||||||
public record Game(Guid Id)
|
public record Game(Guid Id, GameStatus GameStatus, string GameName)
|
||||||
{
|
{
|
||||||
public static Game Create()
|
public static Game Create(string gameName)
|
||||||
{
|
{
|
||||||
return new Game(Guid.NewGuid());
|
return new Game(Guid.NewGuid(), GameStatus.Running, gameName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace GameModel
|
||||||
|
{
|
||||||
|
public enum GameStatus
|
||||||
|
{
|
||||||
|
Running,
|
||||||
|
Finnished,
|
||||||
|
Aborted
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -74,6 +74,7 @@ async Task ShowMainMenu()
|
||||||
.AddChoices(new[] {
|
.AddChoices(new[] {
|
||||||
new Option("Neues Spiel",NewGameAction),
|
new Option("Neues Spiel",NewGameAction),
|
||||||
new Option("Stammdaten", MasterDataAction),
|
new Option("Stammdaten", MasterDataAction),
|
||||||
|
new Option("Fortsetzen", ContinueGame),
|
||||||
new Option("Beenden", null)
|
new Option("Beenden", null)
|
||||||
}));
|
}));
|
||||||
option.Action?.Invoke();
|
option.Action?.Invoke();
|
||||||
|
|
@ -85,6 +86,11 @@ async Task ShowMainMenu()
|
||||||
} while (true);
|
} while (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ContinueGame()
|
||||||
|
{
|
||||||
|
StartGameAction("", new Guid("597956fe-6d83-424f-865f-5856b63f82c9"));
|
||||||
|
}
|
||||||
|
|
||||||
void MasterDataAction()
|
void MasterDataAction()
|
||||||
{
|
{
|
||||||
Console.WriteLine("todo");
|
Console.WriteLine("todo");
|
||||||
|
|
@ -98,7 +104,7 @@ void NewGameAction()
|
||||||
//do
|
//do
|
||||||
//{
|
//{
|
||||||
var games = new GameService(null).GetGameHandler().Keys.Order().ToList();
|
var games = new GameService(null).GetGameHandler().Keys.Order().ToList();
|
||||||
games.Add("Abbreche");
|
games.Add("Abbrechen");
|
||||||
|
|
||||||
option = AnsiConsole.Prompt(
|
option = AnsiConsole.Prompt(
|
||||||
new SelectionPrompt<string>()
|
new SelectionPrompt<string>()
|
||||||
|
|
@ -119,21 +125,30 @@ void NewGameAction()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StartGameAction(option);
|
StartGameAction(option, Guid.Empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartGameAction(string gameName)
|
void StartGameAction(string gameName, Guid gameId)
|
||||||
{
|
{
|
||||||
_gs = new GameService(container);
|
_gs = new GameService(container);
|
||||||
var starttask = _gs.Start(new[] { 1, 2, 3, 4 }, GetGameSettings(gameName), gameName);
|
GameState gameState = null;
|
||||||
var bs = starttask.Result;
|
|
||||||
|
if (gameId.Equals(Guid.Empty))
|
||||||
Show(bs);
|
{
|
||||||
|
var starttask = _gs.Start(new[] { 1, 2, 3, 4 }, GetGameSettings(gameName), gameName);
|
||||||
|
gameState = starttask.Result;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
var starttask = _gs.Load(gameId);
|
||||||
|
gameState = starttask.Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
Show(gameState);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
var proptText = _gs.FreePlayerSelection ? $"Spieler,Wurf [yellow]{bs.ThrowState.ThrowCount + 1}[/]:" : $"Wurf [yellow]{bs.ThrowState.ThrowCount + 1}[/]";
|
var proptText = _gs.FreePlayerSelection ? $"Spieler,Wurf [yellow]{gameState.ThrowState.ThrowCount + 1}[/]:" : $"Wurf [yellow]{gameState.ThrowState.ThrowCount + 1}[/]";
|
||||||
|
|
||||||
var stringData = AnsiConsole.Prompt(
|
var stringData = AnsiConsole.Prompt(
|
||||||
new TextPrompt<string>(proptText)
|
new TextPrompt<string>(proptText)
|
||||||
|
|
@ -160,8 +175,8 @@ void StartGameAction(string gameName)
|
||||||
}
|
}
|
||||||
|
|
||||||
var task = _gs.HandleThrow(PinThrow.Create(throwData.Pindata, throwData.Bell, throwData.Sink, throwData.PlayerId));
|
var task = _gs.HandleThrow(PinThrow.Create(throwData.Pindata, throwData.Bell, throwData.Sink, throwData.PlayerId));
|
||||||
bs = task.Result;
|
gameState = task.Result;
|
||||||
Show(bs);
|
Show(gameState);
|
||||||
|
|
||||||
} while (true);
|
} while (true);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue