44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|