From 469e8d3a48535b9342a35a0df162ecf365eeba7b Mon Sep 17 00:00:00 2001 From: games647 Date: Tue, 28 Jun 2016 16:03:04 +0200 Subject: [PATCH] Refactor sessions a bit to fix #419 --- .../fr/xephi/authme/cache/SessionManager.java | 3 +- .../authme/process/join/AsynchronousJoin.java | 7 ++-- .../authme/process/quit/AsynchronousQuit.java | 34 +++++++++---------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/main/java/fr/xephi/authme/cache/SessionManager.java b/src/main/java/fr/xephi/authme/cache/SessionManager.java index 0c03dc0f..ff448f3f 100644 --- a/src/main/java/fr/xephi/authme/cache/SessionManager.java +++ b/src/main/java/fr/xephi/authme/cache/SessionManager.java @@ -51,10 +51,9 @@ public class SessionManager implements SettingsDependent { * @param name The name of the player who's session to cancel. */ public void cancelSession(String name) { - BukkitTask task = sessions.get(name); + BukkitTask task = sessions.remove(name); if (task != null) { task.cancel(); - removeSession(name); } } diff --git a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java index 5551b9b8..b242f1c3 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -142,10 +142,9 @@ public class AsynchronousJoin implements AsynchronousProcess { } // Session logic - if (service.getProperty(PluginSettings.SESSIONS_ENABLED) && (playerCache.isAuthenticated(name) || database.isLogged(name))) { - if (sessionManager.hasSession(name)) { - sessionManager.cancelSession(name); - } + if (service.getProperty(PluginSettings.SESSIONS_ENABLED) && (sessionManager.hasSession(name) || database.isLogged(name))) { + sessionManager.cancelSession(name); + PlayerAuth auth = database.getAuth(name); database.setUnlogged(name); playerCache.removePlayer(name); diff --git a/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java b/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java index a157287b..d331cf77 100644 --- a/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java +++ b/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java @@ -86,27 +86,29 @@ public class AsynchronousQuit implements AsynchronousProcess { isOp = limbo.isOperator(); limboCache.deleteLimboPlayer(name); } - if (!isKick) { - if (plugin.isEnabled()) { - BukkitTask task = plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { - @Override - public void run() { - postLogout(name); - } + //always unauthenticate the player - use session only for auto logins on the same ip + playerCache.removePlayer(name); - }, Settings.getSessionTimeout * TICKS_PER_MINUTE); + if (plugin.isEnabled() && Settings.isSessionsEnabled) { + BukkitTask task = plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { - sessionManager.addSession(name, task); - } else { - //plugin is disabled; we cannot schedule more tasks so run it directly here - postLogout(name); - } + @Override + public void run() { + postLogout(name); + } + + }, Settings.getSessionTimeout * TICKS_PER_MINUTE); + + sessionManager.addSession(name, task); } else { - playerCache.removePlayer(name); - database.setUnlogged(name); + //plugin is disabled; we cannot schedule more tasks so run it directly here + postLogout(name); } + //always update the database when the player quit the game + database.setUnlogged(name); + if (plugin.isEnabled()) { syncProcessManager.processSyncPlayerQuit(player, isOp, needToChange); } @@ -117,8 +119,6 @@ public class AsynchronousQuit implements AsynchronousProcess { } private void postLogout(String name) { - PlayerCache.getInstance().removePlayer(name); - database.setUnlogged(name); sessionManager.removeSession(name); } }