using Gameboard.ShogiUI.Sockets.ServiceModels.Socket; using Gameboard.ShogiUI.Sockets.ServiceModels.Types; using System.Threading.Tasks; namespace Gameboard.ShogiUI.Sockets.Managers.ClientActionHandlers { public interface IJoinGameHandler { Task Handle(JoinGameRequest request, string userName); } public class JoinGameHandler : IJoinGameHandler { private readonly IGameboardManager gameboardManager; private readonly ISocketConnectionManager connectionManager; public JoinGameHandler( ISocketConnectionManager communicationManager, IGameboardManager gameboardManager) { this.gameboardManager = gameboardManager; this.connectionManager = communicationManager; } public async Task Handle(JoinGameRequest request, string userName) { var joinSucceeded = await gameboardManager.AssignPlayer2ToSession(request.GameName, userName); var response = new JoinGameResponse() { PlayerName = userName, GameName = request.GameName }; if (joinSucceeded) { await connectionManager.BroadcastToAll(response); } else { response.Error = "Game is full or does not exist."; await connectionManager.BroadcastToPlayers(response, userName); } } } }