using Gameboard.ShogiUI.Sockets.Repositories; using Gameboard.ShogiUI.Sockets.ServiceModels.Socket.Messages; using System.Threading.Tasks; namespace Gameboard.ShogiUI.Sockets.Managers.ClientActionHandlers { public interface IJoinByCodeHandler { Task Handle(JoinByCodeRequest request, string userName); } public class JoinByCodeHandler : IJoinByCodeHandler { private readonly IGameboardRepository repository; private readonly ISocketCommunicationManager communicationManager; public JoinByCodeHandler( ISocketCommunicationManager communicationManager, IGameboardRepository repository) { this.repository = repository; this.communicationManager = communicationManager; } public async Task Handle(JoinByCodeRequest request, string userName) { //var request = JsonConvert.DeserializeObject(json); //var sessionName = await repository.PostJoinPrivateSession(new PostJoinPrivateSession //{ // PlayerName = userName, // JoinCode = request.JoinCode //}); //if (sessionName == null) //{ // var response = new JoinGameResponse(ClientAction.JoinByCode) // { // PlayerName = userName, // GameName = sessionName, // Error = "Error joining game." // }; // await communicationManager.BroadcastToPlayers(response, userName); //} //else //{ // // Other members of the game see a regular JoinGame occur. // var response = new JoinGameResponse(ClientAction.JoinGame) // { // PlayerName = userName, // GameName = sessionName // }; // // At this time, userName hasn't subscribed and won't receive this message. // await communicationManager.BroadcastToGame(sessionName, response); // // The player joining sees the JoinByCode occur. // response = new JoinGameResponse(ClientAction.JoinByCode) // { // PlayerName = userName, // GameName = sessionName // }; // await communicationManager.BroadcastToPlayers(response, userName); //} } } }