use of com.faforever.server.entity.Game in project faf-java-server by FAForever.
the class GameService method reportArmyOutcome.
public void reportArmyOutcome(Player reporter, int armyId, Outcome outcome) {
Game game = reporter.getCurrentGame();
if (game == null) {
log.warn("Army score reported by player w/o game: {}", reporter);
return;
}
if (!hasArmy(game, armyId)) {
log.warn("Player '{}' reported outcome '{}' for unknown army '{}' in game '{}'", reporter, outcome, armyId, game);
return;
}
log.debug("Player '{}' reported result for army '{}' in game '{}': {}", reporter, armyId, game, outcome);
game.getReportedArmyResults().computeIfAbsent(reporter.getId(), playerId -> new HashMap<>()).compute(armyId, (integer, armyResult) -> {
if (armyResult == null) {
return ArmyResult.of(armyId, outcome, null);
}
return ArmyResult.of(armyId, outcome, armyResult.getScore());
});
endGameIfArmyResultsComplete(game);
}
use of com.faforever.server.entity.Game in project faf-java-server by FAForever.
the class GameService method reportArmyStatistics.
/**
* Updates the game's army statistics. Last reporter wins.
*/
public void reportArmyStatistics(Player reporter, List<ArmyStatistics> armyStatistics) {
Game game = reporter.getCurrentGame();
if (game == null) {
log.warn("Game statistics reported by player w/o game: {}", reporter);
return;
}
game.replaceArmyStatistics(armyStatistics);
}
use of com.faforever.server.entity.Game in project faf-java-server by FAForever.
the class GameService method updateGamePlayerStatsRating.
private void updateGamePlayerStatsRating(GamePlayerStats gamePlayerStats, Player player) {
Game game = player.getCurrentGame();
if (modService.isLadder1v1(game.getFeaturedMod())) {
if (player.getLadder1v1Rating() == null) {
ratingService.initLadder1v1Rating(player);
}
Assert.state(Optional.ofNullable(player.getLadder1v1Rating()).isPresent(), "Ladder1v1 rating not properly initialized");
Ladder1v1Rating ladder1v1Rating = player.getLadder1v1Rating();
gamePlayerStats.setDeviation(ladder1v1Rating.getDeviation());
gamePlayerStats.setMean(ladder1v1Rating.getMean());
} else {
if (player.getGlobalRating() == null) {
ratingService.initGlobalRating(player);
}
Assert.state(Optional.ofNullable(player.getGlobalRating()).isPresent(), "Global rating not properly initialized");
GlobalRating globalRating = player.getGlobalRating();
gamePlayerStats.setDeviation(globalRating.getDeviation());
gamePlayerStats.setMean(globalRating.getMean());
}
}
use of com.faforever.server.entity.Game in project faf-java-server by FAForever.
the class GameService method joinGame.
/**
* Tells the client to start the game process and sets the player's current game to it.
*
* @return a future that will be completed as soon as the player's game has been started and entered {@link
* GameState#OPEN}. Be aware that there are various reasons for the game to never start (crash, disconnect, abort) so
* never wait without a timeout.
*/
public CompletableFuture<Game> joinGame(int gameId, String password, Player player) {
Requests.verify(player.getCurrentGame() == null, ErrorCode.ALREADY_IN_GAME);
Game game = getActiveGame(gameId).orElseThrow(() -> new IllegalArgumentException("No such game: " + gameId));
Requests.verify(game.getState() == GameState.OPEN, ErrorCode.GAME_NOT_JOINABLE);
Requests.verify(game.getPassword() == null || game.getPassword().equals(password), ErrorCode.INVALID_PASSWORD);
log.debug("Player '{}' joins game '{}'", player, gameId);
clientService.startGameProcess(game, player);
player.setCurrentGame(game);
changePlayerGameState(player, PlayerGameState.INITIALIZING);
CompletableFuture<Game> gameJoinedFuture = new CompletableFuture<>();
player.setGameFuture(gameJoinedFuture);
return gameJoinedFuture;
}
use of com.faforever.server.entity.Game in project faf-java-server by FAForever.
the class GameService method mutuallyAgreeDraw.
public void mutuallyAgreeDraw(Player player) {
Requests.verify(player.getCurrentGame() != null, ErrorCode.NOT_IN_A_GAME);
Game game = player.getCurrentGame();
GameState gameState = game.getState();
Requests.verify(gameState == GameState.PLAYING, ErrorCode.INVALID_GAME_STATE, GameState.PLAYING);
getPlayerTeamId(player).filter(teamId -> OBSERVERS_TEAM_ID != teamId).ifPresent(teamId -> {
log.debug("Adding player '{}' to mutually accepted draw list in game '{}'", player, game);
game.getMutuallyAcceptedDrawPlayerIds().add(player.getId());
final boolean allConnectedNonObserverPlayersAgreedOnMutualDraw = game.getConnectedPlayers().values().stream().filter(connectedPlayer -> !getPlayerTeamId(connectedPlayer).equals(Optional.of(OBSERVERS_TEAM_ID)) && !getPlayerTeamId(connectedPlayer).equals(Optional.empty())).allMatch(connectedPlayer -> game.getMutuallyAcceptedDrawPlayerIds().contains(connectedPlayer.getId()));
if (allConnectedNonObserverPlayersAgreedOnMutualDraw) {
log.debug("All in-game players agreed on mutual draw. Setting mutually agreed draw state in game '{}'", game);
game.setMutuallyAgreedDraw(true);
}
});
}
Aggregations