//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)); }
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 { })); }