Skip to content

Commit

Permalink
Properly implement 'Disconnected'
Browse files Browse the repository at this point in the history
  • Loading branch information
micheljung committed Oct 9, 2018
1 parent 5d8ed8c commit d8d87cf
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import com.faforever.server.game.ClearSlotRequest;
import com.faforever.server.game.DesyncReport;
import com.faforever.server.game.DisconnectPeerRequest;
import com.faforever.server.game.DisconnectedReport;
import com.faforever.server.game.GameChatMessageReport;
import com.faforever.server.game.GameEndedReport;
import com.faforever.server.game.GameModsCountReport;
Expand All @@ -31,6 +30,7 @@
import com.faforever.server.game.JoinGameRequest;
import com.faforever.server.game.MutuallyAgreedDrawRequest;
import com.faforever.server.game.PlayerDefeatedReport;
import com.faforever.server.game.PlayerDisconnectedReport;
import com.faforever.server.game.PlayerOptionReport;
import com.faforever.server.game.TeamKillReport;
import com.faforever.server.game.VerifyPlayerReport;
Expand Down Expand Up @@ -212,7 +212,7 @@ private PayloadTypeRouter inboundRouter() {
router.setChannelMapping(AddFoeRequest.class.getName(), ChannelNames.ADD_FOE_REQUEST);
router.setChannelMapping(RemoveFriendRequest.class.getName(), ChannelNames.REMOVE_FRIEND_REQUEST);
router.setChannelMapping(RemoveFoeRequest.class.getName(), ChannelNames.REMOVE_FOE_REQUEST);
router.setChannelMapping(DisconnectedReport.class.getName(), ChannelNames.DISCONNECTED_REPORT);
router.setChannelMapping(PlayerDisconnectedReport.class.getName(), ChannelNames.DISCONNECTED_REPORT);
router.setChannelMapping(GameEndedReport.class.getName(), ChannelNames.GAME_ENDED_REPORT);
// This is sent by the game but currently, the server has no interest in it.
router.setChannelMapping(BottleneckReport.class.getName(), IntegrationContextUtils.NULL_CHANNEL_BEAN_NAME);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,10 @@ public void updateUnfinishedGamesValidity(Validity validity) {
gameRepository.updateUnfinishedGamesValidity(validity);
}

public void playerDisconnected(Player reporter, int disconnectedPlayerId) {
log.debug("Player '{}' reported disconnect of player with ID '{}'", reporter, disconnectedPlayerId);
}

private void processGamesAwaitingRatingUpdate() {
gamesAwaitingRatingUpdate.stream()
.filter(game -> !hasRatingDependentGame(game) && game.getStartTime() != null)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.faforever.server.game;

import com.faforever.server.common.ClientMessage;
import lombok.Value;

@Value
public class PlayerDisconnectedReport implements ClientMessage {
int playerId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.faforever.server.game.JoinGameRequest;
import com.faforever.server.game.MutuallyAgreedDrawRequest;
import com.faforever.server.game.PlayerDefeatedReport;
import com.faforever.server.game.PlayerDisconnectedReport;
import com.faforever.server.game.PlayerOptionReport;
import com.faforever.server.game.TeamKillReport;
import com.faforever.server.game.VerifyPlayerReport;
Expand Down Expand Up @@ -278,7 +279,7 @@ public final class ChannelNames {
public static final String SELECT_AVATAR = "selectAvatar";

/**
* Channel for {@link com.faforever.server.game.DisconnectedReport}.
* Channel for {@link PlayerDisconnectedReport}.
*/
public static final String DISCONNECTED_REPORT = "disconnectedReport";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.faforever.server.game.JoinGameRequest;
import com.faforever.server.game.LobbyMode;
import com.faforever.server.game.MutuallyAgreedDrawRequest;
import com.faforever.server.game.PlayerDisconnectedReport;
import com.faforever.server.game.PlayerOptionReport;
import com.faforever.server.integration.legacy.transformer.RestoreGameSessionRequest;
import com.faforever.server.security.FafUserDetails;
Expand Down Expand Up @@ -138,6 +139,11 @@ public void onGameEnded(GameEndedReport event, @Header(USER_HEADER) Authenticati
gameService.reportGameEnded(getPlayer(authentication));
}

@ServiceActivator(inputChannel = ChannelNames.DISCONNECTED_REPORT)
public void onDisconnected(PlayerDisconnectedReport event, @Header(USER_HEADER) Authentication authentication) {
gameService.playerDisconnected(getPlayer(authentication), event.getPlayerId());
}

private Player getPlayer(Authentication authentication) {
return ((FafUserDetails) authentication.getPrincipal()).getPlayer();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import com.faforever.server.game.ClearSlotRequest;
import com.faforever.server.game.DesyncReport;
import com.faforever.server.game.DisconnectPeerRequest;
import com.faforever.server.game.DisconnectedReport;
import com.faforever.server.game.Faction;
import com.faforever.server.game.GameChatMessageReport;
import com.faforever.server.game.GameEndedReport;
Expand All @@ -38,6 +37,7 @@
import com.faforever.server.game.MutuallyAgreedDrawRequest;
import com.faforever.server.game.Outcome;
import com.faforever.server.game.PlayerDefeatedReport;
import com.faforever.server.game.PlayerDisconnectedReport;
import com.faforever.server.game.PlayerGameState;
import com.faforever.server.game.PlayerOptionReport;
import com.faforever.server.game.TeamKillReport;
Expand Down Expand Up @@ -161,7 +161,8 @@ public ClientMessage transform(Map<String, Object> source) {
case ADMIN:
return handleAdminAction(source);
case DISCONNECTED:
return DisconnectedReport.INSTANCE;
args = getArgs(source);
return new PlayerDisconnectedReport((int) args.get(0));
case BOTTLENECK:
return BottleneckReport.INSTANCE;
case CHAT:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1418,6 +1418,15 @@ public void testDontOverrideRatings() throws Exception {
assertThat(statsCaptor.getAllValues().get(2), hasSize(2));
}

@Test
public void playerDisconnected() {
instance.playerDisconnected(player1, player2.getId());
// the above shouldn't do anything but log, difficult to assert.
verifyZeroInteractions(gameRepository);
verifyZeroInteractions(clientService);
verifyZeroInteractions(playerService);
}

private void closePlayerGame(Player player3) {
instance.updatePlayerGameState(PlayerGameState.CLOSED, player3);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.faforever.server.game.LobbyMode;
import com.faforever.server.game.MutuallyAgreedDrawRequest;
import com.faforever.server.game.Outcome;
import com.faforever.server.game.PlayerDisconnectedReport;
import com.faforever.server.game.PlayerGameState;
import com.faforever.server.game.PlayerOptionReport;
import com.faforever.server.integration.legacy.transformer.RestoreGameSessionRequest;
Expand Down Expand Up @@ -168,4 +169,10 @@ public void onClientDisconnected() {
instance.onClientDisconnected(new ClientDisconnectedEvent(this, clientConnection));
verify(gameService).removePlayer(player);
}

@Test
public void onDisconnected() {
instance.onDisconnected(new PlayerDisconnectedReport(42), clientConnection.getAuthentication());
verify(gameService).playerDisconnected(player, 42);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import com.faforever.server.game.ClearSlotRequest;
import com.faforever.server.game.DesyncReport;
import com.faforever.server.game.DisconnectPeerRequest;
import com.faforever.server.game.DisconnectedReport;
import com.faforever.server.game.Faction;
import com.faforever.server.game.GameChatMessageReport;
import com.faforever.server.game.GameModsCountReport;
Expand All @@ -29,6 +28,7 @@
import com.faforever.server.game.JoinGameRequest;
import com.faforever.server.game.Outcome;
import com.faforever.server.game.PlayerDefeatedReport;
import com.faforever.server.game.PlayerDisconnectedReport;
import com.faforever.server.game.PlayerGameState;
import com.faforever.server.game.PlayerOptionReport;
import com.faforever.server.game.TeamKillReport;
Expand Down Expand Up @@ -420,11 +420,13 @@ public void ping() {

@Test
public void disconnected() {
DisconnectedReport report = (DisconnectedReport) instance.transform(ImmutableMap.of(
KEY_COMMAND, "Disconnected"
PlayerDisconnectedReport report = (PlayerDisconnectedReport) instance.transform(ImmutableMap.of(
KEY_COMMAND, "Disconnected",
KEY_ARGS, Collections.singletonList(42)
));

assertThat(report, is(notNullValue()));
assertThat(report.getPlayerId(), is(42));
}

@Test
Expand Down

0 comments on commit d8d87cf

Please sign in to comment.