public Task Handle(OnMoveNotification request, CancellationToken cancellationToken) { var lastMoveDate = _mediator.Send(new GetLastMoveDateMessage(request.ViewModel)).Result; var blackConnection = GetClientConnection(request.ViewModel.BlackPlayerID); var whiteConnection = GetClientConnection(request.ViewModel.WhitePlayerID); if (request.ViewModel.BlackPlayerID != ComputerPlayer.ComputerPlayerID && blackConnection != null) { _signalRHub.Clients.Client(blackConnection).SendAsync("UpdateBoard", request.ViewModel.ID, lastMoveDate, ComponentGenerator.GetBoard(request.ViewModel, GetViewData(request.ViewModel.BlackPlayerID, Player.Black)), ComponentGenerator.GetBoard(request.ViewModel, GetViewData(request.ViewModel.BlackPlayerID, Player.White))); } if (request.ViewModel.WhitePlayerID != ComputerPlayer.ComputerPlayerID && whiteConnection != null) { _signalRHub.Clients.Client(whiteConnection).SendAsync("UpdateBoard", request.ViewModel.ID, lastMoveDate, ComponentGenerator.GetBoard(request.ViewModel, GetViewData(request.ViewModel.WhitePlayerID, Player.Black)), ComponentGenerator.GetBoard(request.ViewModel, GetViewData(request.ViewModel.WhitePlayerID, Player.White))); } _signalRHub.Clients .GroupExcept(request.ViewModel.ID.ToString(), blackConnection, whiteConnection) .SendAsync("UpdateBoard", request.ViewModel.ID, lastMoveDate, ComponentGenerator.GetBoard(request.ViewModel, GetViewData(Guid.Empty, Player.Black)), ComponentGenerator.GetBoard(request.ViewModel, GetViewData(Guid.Empty, Player.White))); return(Task.CompletedTask); }
public ActionResult DisplayGame(Guid moveID, Player orientation) { var game = _context.Games .Include("Turns") .Include("Turns.Moves") .FirstOrDefault(f => f.Turns.Any(a => a.Moves.Any(m => m.ID == moveID))); if (game == null) { Response.StatusCode = 403; return(Content("")); } var move = game.Turns.SelectMany(t => t.Moves).First(f => f.ID == moveID); var viewData = new Dictionary <string, object> { ["playerID"] = GetPlayerID(), ["orientation"] = orientation }; var controller = GameController.FromPosition((Variant)game.Variant, move.ResultingFen); var viewModel = game.ToGameViewModel(); viewModel.Board.GameBoard = controller.Board.GameBoard; viewModel.DisplayingLastMove = move.ID == game.Turns.Last().Moves.OrderBy(a => a.CreatedOn).Last().ID; var board = ComponentGenerator.GetBoard(viewModel, viewData).Replace("[theme]", GetThemeOrDefault().ToString()); return(Content(board)); }
public ActionResult Join(Guid id) { var playerID = GetPlayerID(); if (!playerID.HasValue) { Response.StatusCode = 403; return(Content("")); } var game = _context.Games.FirstOrDefault(f => f.ID == id); if (game.BlackPlayerID != Guid.Empty && game.WhitePlayerID != Guid.Empty || game.BlackPlayerID == playerID || game.WhitePlayerID == playerID) { Response.StatusCode = 403; return(Content("")); } if (game.BlackPlayerID == Guid.Empty) { game.BlackPlayerID = playerID.Value; } else if (game.WhitePlayerID == Guid.Empty) { game.WhitePlayerID = playerID.Value; } game.RowVersion = DateTime.Now; try { _context.SaveChanges(); var gameViewModel = game.ToGameViewModel(); _mediator.Publish(new OnGameJoinedNotification(gameViewModel, playerID.Value)).Wait(); var viewData = new Dictionary <string, object> { ["playerID"] = playerID, ["orientation"] = game.BlackPlayerID == playerID ? Player.Black : Player.White, }; var board = ComponentGenerator.GetBoard(gameViewModel, viewData).Replace("[theme]", GetThemeOrDefault().ToString()); return(Content(board)); } catch (DbUpdateConcurrencyException) { _signalRHub.Clients.All.SendAsync("AddClass", "join", "hide"); Response.StatusCode = 403; return(Content(Resources.Resources.GameJoined)); } }