Fix IdAssignment issue.

This commit is contained in:
Major-
2015-02-26 21:03:59 +00:00
parent 52eb84930d
commit 441bc9eb77
2 changed files with 23 additions and 20 deletions
+11 -4
View File
@@ -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}. * @return A {@link RegistrationStatus}.
*/ */
public RegistrationStatus registerPlayer(Player player) { public RegistrationStatus registerPlayer(Player player, GameSession session, boolean reconnecting) {
synchronized (this) { synchronized (this) {
return World.getWorld().register(player); RegistrationStatus status = World.getWorld().register(player);
if (status == RegistrationStatus.OK) {
player.setSession(session, reconnecting);
}
return status;
} }
} }
+12 -16
View File
@@ -85,37 +85,33 @@ public final class LoginSession extends Session {
* @param response The response. * @param response The response.
*/ */
public void handlePlayerLoaderResponse(LoginRequest request, PlayerLoaderResponse response) { public void handlePlayerLoaderResponse(LoginRequest request, PlayerLoaderResponse response) {
GameService gameService = serverContext.getService(GameService.class); GameService service = serverContext.getService(GameService.class);
Channel channel = getChannel(); Channel channel = getChannel();
Optional<Player> responsePlayer = response.getPlayer(); Optional<Player> optional = response.getPlayer();
int status = response.getStatus(), rights = 0; int status = response.getStatus(), rights = 0;
boolean flagged = false; boolean flagged = false;
if (responsePlayer.isPresent()) { if (optional.isPresent()) {
Player player = responsePlayer.get(); Player player = optional.get();
rights = player.getPrivilegeLevel().toInteger(); rights = player.getPrivilegeLevel().toInteger();
GameSession session = new GameSession(channel, serverContext, player); 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 (registration != RegistrationStatus.OK) {
optional = Optional.empty();
if (registrationStatus != RegistrationStatus.OK) {
responsePlayer = Optional.empty();
rights = 0; rights = 0;
if (registrationStatus == RegistrationStatus.ALREADY_ONLINE) {
status = LoginConstants.STATUS_ACCOUNT_ONLINE; status = (registration == RegistrationStatus.ALREADY_ONLINE) ? LoginConstants.STATUS_ACCOUNT_ONLINE
} else { : LoginConstants.STATUS_SERVER_FULL;
status = LoginConstants.STATUS_SERVER_FULL;
}
} }
} }
ChannelFuture future = channel.writeAndFlush(new LoginResponse(status, rights, flagged)); ChannelFuture future = channel.writeAndFlush(new LoginResponse(status, rights, flagged));
destroy(); destroy();
if (responsePlayer.isPresent()) { if (optional.isPresent()) {
IsaacRandomPair randomPair = request.getRandomPair(); IsaacRandomPair randomPair = request.getRandomPair();
Release release = serverContext.getRelease(); Release release = serverContext.getRelease();
@@ -129,7 +125,7 @@ public final class LoginSession extends Session {
channel.pipeline().remove("loginDecoder"); channel.pipeline().remove("loginDecoder");
channel.pipeline().remove("loginEncoder"); channel.pipeline().remove("loginEncoder");
channelContext.attr(NetworkConstants.SESSION_KEY).set(responsePlayer.get().getSession()); channelContext.attr(NetworkConstants.SESSION_KEY).set(optional.get().getSession());
} else { } else {
future.addListener(ChannelFutureListener.CLOSE); future.addListener(ChannelFutureListener.CLOSE);
} }