diff --git a/src/org/apollo/game/GameService.java b/src/org/apollo/game/GameService.java index 31cc3730..3f647950 100644 --- a/src/org/apollo/game/GameService.java +++ b/src/org/apollo/game/GameService.java @@ -148,14 +148,21 @@ public final class GameService extends Service { } /** - * Registers a player (may block!). + * Registers a {@link Player} (may block!). * - * @param player The player. + * @param player The Player. + * @param session The {@link GameSession} of the Player. + * @param reconnecting The reconnecting flag. * @return A {@link RegistrationStatus}. */ - public RegistrationStatus registerPlayer(Player player) { + public RegistrationStatus registerPlayer(Player player, GameSession session, boolean reconnecting) { synchronized (this) { - return World.getWorld().register(player); + RegistrationStatus status = World.getWorld().register(player); + if (status == RegistrationStatus.OK) { + player.setSession(session, reconnecting); + } + + return status; } } diff --git a/src/org/apollo/net/session/LoginSession.java b/src/org/apollo/net/session/LoginSession.java index 1d0712aa..827249d0 100644 --- a/src/org/apollo/net/session/LoginSession.java +++ b/src/org/apollo/net/session/LoginSession.java @@ -85,37 +85,33 @@ public final class LoginSession extends Session { * @param response The response. */ public void handlePlayerLoaderResponse(LoginRequest request, PlayerLoaderResponse response) { - GameService gameService = serverContext.getService(GameService.class); + GameService service = serverContext.getService(GameService.class); Channel channel = getChannel(); - Optional responsePlayer = response.getPlayer(); + Optional optional = response.getPlayer(); int status = response.getStatus(), rights = 0; boolean flagged = false; - if (responsePlayer.isPresent()) { - Player player = responsePlayer.get(); + if (optional.isPresent()) { + Player player = optional.get(); rights = player.getPrivilegeLevel().toInteger(); GameSession session = new GameSession(channel, serverContext, player); - player.setSession(session, false /* TODO */); + RegistrationStatus registration = service.registerPlayer(player, session, request.isReconnecting()); - RegistrationStatus registrationStatus = gameService.registerPlayer(player); - - if (registrationStatus != RegistrationStatus.OK) { - responsePlayer = Optional.empty(); + if (registration != RegistrationStatus.OK) { + optional = Optional.empty(); rights = 0; - if (registrationStatus == RegistrationStatus.ALREADY_ONLINE) { - status = LoginConstants.STATUS_ACCOUNT_ONLINE; - } else { - status = LoginConstants.STATUS_SERVER_FULL; - } + + status = (registration == RegistrationStatus.ALREADY_ONLINE) ? LoginConstants.STATUS_ACCOUNT_ONLINE + : LoginConstants.STATUS_SERVER_FULL; } } ChannelFuture future = channel.writeAndFlush(new LoginResponse(status, rights, flagged)); destroy(); - if (responsePlayer.isPresent()) { + if (optional.isPresent()) { IsaacRandomPair randomPair = request.getRandomPair(); Release release = serverContext.getRelease(); @@ -129,7 +125,7 @@ public final class LoginSession extends Session { channel.pipeline().remove("loginDecoder"); channel.pipeline().remove("loginEncoder"); - channelContext.attr(NetworkConstants.SESSION_KEY).set(responsePlayer.get().getSession()); + channelContext.attr(NetworkConstants.SESSION_KEY).set(optional.get().getSession()); } else { future.addListener(ChannelFutureListener.CLOSE); }