//Called by client when its move
        public async Task <IActionResult> FireCannon([FromBody] FireCannonDto dto)
        {
            FireResult res = await _gameSvc.FireCannon(dto.GameId, dto.CellId);

            if (res == null)
            {
                return(BadRequest());
            }

            FireCannonResultDto respDto = _mapper.Map <FireCannonResultDto>(res);

            respDto.CellId = dto.CellId;
            respDto.GameId = dto.GameId;

            return(Ok(respDto));
        }
Exemple #2
0
        public async Task <IActionResult> FireCannonProcessResult([FromBody] P2PFireCannonCallbackDto dto)
        {
            if (string.IsNullOrWhiteSpace(dto.ConnectionId))
            {
                return(BadRequest());
            }

            if (string.IsNullOrWhiteSpace(dto.Code))
            {
                return(BadRequest());
            }

            PeerToPeerSessionState session = await _p2pSvc.FindActiveSessionAsync(dto.Code, dto.ConnectionId);

            if (session == null)
            {
                return(BadRequest());
            }

            List <ShipInfo> ships = dto.ConnectionId == session.HostConnectionId ? session.FriendShips : session.HostShips;

            FireCannonResultDto respDto = new FireCannonResultDto
            {
                CellId               = dto.CellId,
                ShipDestroyed        = dto.ShipDestroyed,
                IsAwaitingServerTurn = !dto.Result,
                IsGameOver           = dto.IsGameOver,
                Result               = dto.Result,
            };

            var connectionId = dto.ConnectionId == session.HostConnectionId ? session.FriendConnectionId : session.HostConnectionId;

            await _gameHubContext.Clients.Client(connectionId).SendAsync("MakeFireProcessResult", respDto);

            if (dto.IsGameOver)
            {
                await _p2pSvc.StopGameAsync(session);

                GameOverDto shipsDto = new GameOverDto {
                    Ships = ships.Select(s => s.Cells).ToList()
                };
                return(Ok(shipsDto));
            }

            return(Ok(new { }));
        }