diff --git a/GameContract/IGameHandler.cs b/GameContract/IGameHandler.cs
index 78a351c..caff8ec 100644
--- a/GameContract/IGameHandler.cs
+++ b/GameContract/IGameHandler.cs
@@ -1,4 +1,5 @@
-using System;
+using GameModel;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -8,6 +9,15 @@ namespace GameContract
{
public interface IGameHandler
{
- static string GetGameName() => "Default Hello from interface";
+ public const int INFINIT_THROWS = 9999;
+
+ static string GameName() => "Default Hello from IGameHandler";
+
+ ThrowMode ThrowMode() => GameModel.ThrowMode.Reposition;
+
+ int ThrowsPerRount() => INFINIT_THROWS;
+
+ bool FreePlayerSelection() => true;
}
}
+
diff --git a/GameContract/IGameSettings.cs b/GameContract/IGameSettings.cs
new file mode 100644
index 0000000..70d22f6
--- /dev/null
+++ b/GameContract/IGameSettings.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GameContract
+{
+ public interface IGameSettings
+ {
+ }
+}
diff --git a/GameHandler.UnitTests/GameHandler.UnitTests.csproj b/GameHandler.UnitTests/GameHandler.UnitTests.csproj
index ab724bd..f40009f 100644
--- a/GameHandler.UnitTests/GameHandler.UnitTests.csproj
+++ b/GameHandler.UnitTests/GameHandler.UnitTests.csproj
@@ -25,7 +25,6 @@
-
diff --git a/GameHandler.UnitTests/GameServiceTests.cs b/GameHandler.UnitTests/GameServiceTests.cs
index de72819..61c7587 100644
--- a/GameHandler.UnitTests/GameServiceTests.cs
+++ b/GameHandler.UnitTests/GameServiceTests.cs
@@ -1,4 +1,5 @@
-using GameModel;
+using GameHandler.DeathGame;
+using GameModel;
using GameModel.Exceptions;
using System;
using System.Collections.Generic;
@@ -44,10 +45,10 @@ namespace GameHandler.UnitTests
}
[Test]
- public void HandleThrow_UpdateTheBoardState()
+ public void HandleThrow_UpdatesTheBoardState()
{
GameService service = new GameService();
- var ts1 = service.Start(1);
+ var ts1 = service.Start(DeathGameHandler.GAMENAME_DEATHBOX);
var bs1 = ts1.BoardState;
var pinThrow = PinThrow.Create(1,PinPicture.Create(1,PinState.Down), false, false);
diff --git a/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs b/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs
index 50f85bb..e4928bd 100644
--- a/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs
+++ b/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs
@@ -1,4 +1,4 @@
-using GameContract;
+using GameModel.Contract;
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/GameHandler/Exceptions/InvaildGameNameException.cs b/GameHandler/Exceptions/InvaildGameNameException.cs
new file mode 100644
index 0000000..1b00141
--- /dev/null
+++ b/GameHandler/Exceptions/InvaildGameNameException.cs
@@ -0,0 +1,20 @@
+using GameModel.Exceptions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GameHandler.Exceptions
+{
+ public class InvaildGameNameException : KoogleException
+ {
+ public InvaildGameNameException(string message) : base(message)
+ {
+ }
+
+ public InvaildGameNameException(string message, Exception innerException) : base(message, innerException)
+ {
+ }
+ }
+}
diff --git a/GameHandler/ExpenseHandler.cs b/GameHandler/ExpenseHandler.cs
index b258e8a..806e7cd 100644
--- a/GameHandler/ExpenseHandler.cs
+++ b/GameHandler/ExpenseHandler.cs
@@ -1,6 +1,6 @@
-using GameContract;
-using GameHandler.Extensions;
+using GameHandler.Extensions;
using GameModel;
+using GameModel.Contract;
using GameModel.DeathGame;
using GameModel.Exceptions;
using System;
diff --git a/GameHandler/Extensions/GameServiceExtension.cs b/GameHandler/Extensions/GameServiceExtension.cs
new file mode 100644
index 0000000..94fcb2f
--- /dev/null
+++ b/GameHandler/Extensions/GameServiceExtension.cs
@@ -0,0 +1,45 @@
+using GameHandler.Exceptions;
+using GameModel.Contract;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GameHandler.Extensions
+{
+ public static class GameServiceExtension
+ {
+ public static IGameHandler GetGameHandler(this GameService gameService, string gameName)
+ {
+ var handlers = gameService.GetGameHandler();
+ if (!handlers.ContainsKey(gameName))
+ {
+ throw new InvaildGameNameException($"not handler found for {gameName}");
+ }
+ var type = handlers[gameName];
+ var res = (IGameHandler)Activator.CreateInstance(type);
+ return res;
+ }
+
+ public static Dictionary GetGameHandler(this GameService gameService)
+ {
+ var res = new Dictionary();
+ var type = typeof(IGameHandler);
+ var types = AppDomain.CurrentDomain.GetAssemblies()
+ .SelectMany(s => s.GetTypes())
+ .Where(p => type.IsAssignableFrom(p) && (!p.IsInterface));
+
+ foreach (var item in types)
+ {
+ MethodInfo staticMethodInfo = item.GetMethod("GameName");
+ string returnValue = Convert.ToString(staticMethodInfo.Invoke(null, Array.Empty