diff --git a/src/services/player/LoginService.java b/src/services/player/LoginService.java index 953826f2e..14f2964ce 100644 --- a/src/services/player/LoginService.java +++ b/src/services/player/LoginService.java @@ -166,6 +166,10 @@ public class LoginService extends Service { private void handleLogin(Player player, LoginClientId id) { Assert.notNull(player); + if (player.getPlayerState() == PlayerState.LOGGED_IN) { // Client occasionally sends multiple login requests + sendLoginSuccessPacket(player); + return; + } Assert.test(player.getPlayerState() == PlayerState.CONNECTED); Assert.test(player.getPlayerServer() == PlayerServer.NONE); player.setPlayerState(PlayerState.LOGGING_IN); @@ -250,7 +254,7 @@ public class LoginService extends Service { new LoginEventIntent(player.getNetworkId(), LoginEvent.LOGIN_FAIL_SERVER_ERROR).broadcast(); } - private void sendLoginSuccessPacket(Player player) throws SQLException { + private void sendLoginSuccessPacket(Player player) { LoginClientToken token = new LoginClientToken(SESSION_TOKEN, player.getUserId(), player.getUsername()); LoginEnumCluster cluster = new LoginEnumCluster(); LoginClusterStatus clusterStatus = new LoginClusterStatus(); @@ -298,29 +302,33 @@ public class LoginService extends Service { return "Invalid password"; } - private List getGalaxies(Player p) throws SQLException { + private List getGalaxies(Player p) { List galaxies = new ArrayList<>(); galaxies.add(CoreManager.getGalaxy()); return galaxies; } - private SWGCharacter [] getCharacters(int userId) throws SQLException { + private SWGCharacter [] getCharacters(int userId) { + List characters = new ArrayList<>(); synchronized (getCharacters) { - getCharacters.setInt(1, userId); - List characters = new ArrayList<>(); - try (ResultSet set = getCharacters.executeQuery()) { - while (set.next()) { - SWGCharacter c = new SWGCharacter(); - c.setId(set.getInt("id")); - c.setName(set.getString("name")); - c.setGalaxyId(CoreManager.getGalaxyId()); - c.setRaceCrc(Race.getRaceByFile(set.getString("race")).getCrc()); - c.setType(1); // 1 = Normal (2 = Jedi, 3 = Spectral) - characters.add(c); + try { + getCharacters.setInt(1, userId); + try (ResultSet set = getCharacters.executeQuery()) { + while (set.next()) { + SWGCharacter c = new SWGCharacter(); + c.setId(set.getInt("id")); + c.setName(set.getString("name")); + c.setGalaxyId(CoreManager.getGalaxyId()); + c.setRaceCrc(Race.getRaceByFile(set.getString("race")).getCrc()); + c.setType(1); // 1 = Normal (2 = Jedi, 3 = Spectral) + characters.add(c); + } } + } catch (SQLException e) { + Log.e(this, e); } - return characters.toArray(new SWGCharacter[characters.size()]); } + return characters.toArray(new SWGCharacter[characters.size()]); } private boolean deleteCharacter(SWGObject obj) {