diff --git a/API/Controllers/GameHubSocket.cs b/API/Controllers/GameHubSocket.cs index af8e0da..be4df3e 100644 --- a/API/Controllers/GameHubSocket.cs +++ b/API/Controllers/GameHubSocket.cs @@ -1,3 +1,5 @@ +using API.Models.DataClasses; +using API.Models.Game; using API.Services.GameManager; using Microsoft.AspNetCore.SignalR; @@ -7,18 +9,39 @@ public class GameHubSocket(IGameManager gameManager) : Hub { private readonly IGameManager _gameManager = gameManager; - public async Task CreateGame(string playerName) + public async Task CreateGame(string playerName, Coordinates gFs) { - // TODO: create - await Groups.AddToGroupAsync(Context.ConnectionId, "gameId"); - await Clients.Group("gameId").SendAsync("PlayerJoined", new + var player = new Player(playerName, Context.ConnectionId); + + var result = _gameManager.CreateGame(gFs, player); + + await Groups.AddToGroupAsync(Context.ConnectionId, result.Item1); + + await Clients.Caller.SendAsync("GameCreated", new { - Context.ConnectionId, - PlayerName = playerName + GameId = result.Item1, + GameCode = result.Item2, }); } - public async Task JoinGame(string gameId, string playerName) + public async Task JoinGame(int gameCode, string playerName) { + var player = new Player(playerName, Context.ConnectionId); + + var result = _gameManager.JoinGame(player, gameCode); + + if (result == null) + { + await Clients.Caller.SendAsync("Error", "Spiel nicht gefunden oder voll."); + return; + } + + await Groups.AddToGroupAsync(Context.ConnectionId, gameCode.ToString()); + + await Clients.Caller.SendAsync("GameCreated", new + { + GameId = result, + GameCode = gameCode, + }); } } \ No newline at end of file diff --git a/API/Models/Game/Player.cs b/API/Models/Game/Player.cs index b55c6e3..bc56f6e 100644 --- a/API/Models/Game/Player.cs +++ b/API/Models/Game/Player.cs @@ -1,7 +1,7 @@ namespace API.Models.Game; -public class Player +public class Player(string name, string connectionId) { - public string Name { get; set; } - public string ConnectionId { get; set; } + public string Name { get; set; } = name; + public string ConnectionId { get; set; } = connectionId; } \ No newline at end of file diff --git a/API/Services/GameManager/GameManager.cs b/API/Services/GameManager/GameManager.cs index c3561a1..47de874 100644 --- a/API/Services/GameManager/GameManager.cs +++ b/API/Services/GameManager/GameManager.cs @@ -6,17 +6,19 @@ namespace API.Services.GameManager; public class GameManager(IGameRepository gameRepository) : IGameManager { - public int CreateGame(Coordinates gFs, Player player) + public (string, int) CreateGame(Coordinates gFs, Player player) { var game = gameRepository.Create(gFs, player); - return game.GameCode; + return (game.Id, game.GameCode); } - public bool JoinGame(Player player, int gameCode) + public string? JoinGame(Player player, int gameCode) { var game = gameRepository.GetOne(new SixDigitInt(gameCode)); - return game != null && game.AddPlayer(player); + var success = game != null && game.AddPlayer(player); + + return success ? game?.Id : null; } } \ No newline at end of file diff --git a/API/Services/GameManager/IGameManager.cs b/API/Services/GameManager/IGameManager.cs index d17c3ef..a610346 100644 --- a/API/Services/GameManager/IGameManager.cs +++ b/API/Services/GameManager/IGameManager.cs @@ -4,6 +4,6 @@ namespace API.Services.GameManager; public interface IGameManager { - public int CreateGame(Coordinates gFs, Player player); - public bool JoinGame(Player playerName, int gameCode); + public (string, int) CreateGame(Coordinates gFs, Player player); + public string? JoinGame(Player playerName, int gameCode); } \ No newline at end of file