From 57695d6e43ba493b8964e0cd2d93816e78ea1963 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 16 Feb 2019 12:42:03 +0200 Subject: [PATCH] Created SessionEndTransaction: - Removed SaveOperations#session - Removed DBSystem dependency from SessionCache, so SessionCache does not need to be called from async thread. (SessionCache does not save, responsibility now with the caller) --- .../bukkit/PlayerOnlineListener.java | 18 ++++--- .../bungee/PlayerOnlineListener.java | 23 ++++---- .../events/SessionEndTransaction.java} | 30 +++++------ .../plan/system/cache/ProxySessionCache.java | 6 +-- .../plan/system/cache/SessionCache.java | 54 +++++++++---------- .../databases/operation/SaveOperations.java | 5 -- .../databases/sql/operation/SQLSaveOps.java | 12 ----- .../processors/player/PlayerProcessors.java | 10 +--- .../plan/system/cache/SessionCacheTest.java | 2 +- .../sponge/SpongePlayerListener.java | 42 ++++++++------- .../velocity/PlayerOnlineListener.java | 25 ++++----- 11 files changed, 101 insertions(+), 126 deletions(-) rename Plan/common/src/main/java/com/djrapitops/plan/{system/processing/processors/player/EndSessionProcessor.java => db/access/transactions/events/SessionEndTransaction.java} (54%) diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java index 33a3a0eec..cfb54092d 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java @@ -163,7 +163,8 @@ public class PlayerOnlineListener implements Listener { } database.executeTransaction(new PlayerServerRegisterTransaction(uuid, player::getFirstPlayed, playerName, serverUUID)); - processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm))); + sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm)) + .ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession))); if (!displayName.equals(nicknameCache.getDisplayName(uuid))) { database.executeTransaction( @@ -187,14 +188,17 @@ public class PlayerOnlineListener implements Listener { private void actOnQuitEvent(PlayerQuitEvent event) { long time = System.currentTimeMillis(); Player player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); - AFKListener.AFK_TRACKER.loggedOut(uuid, time); + AFKListener.AFK_TRACKER.loggedOut(playerUUID, time); - nicknameCache.removeDisplayName(uuid); + nicknameCache.removeDisplayName(playerUUID); - processing.submit(processors.player().banAndOpProcessor(uuid, player::isBanned, player.isOp())); - processing.submit(processors.player().endSessionProcessor(uuid, time)); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + processing.submit(processors.player().banAndOpProcessor(playerUUID, player::isBanned, player.isOp())); + + sessionCache.endSession(playerUUID, time) + .ifPresent(endedSession -> dbSystem.getDatabase().executeTransaction(new SessionEndTransaction(endedSession))); + + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); } } diff --git a/Plan/bungeecord/src/main/java/com/djrapitops/plan/system/listeners/bungee/PlayerOnlineListener.java b/Plan/bungeecord/src/main/java/com/djrapitops/plan/system/listeners/bungee/PlayerOnlineListener.java index 6c31f83cb..55a2c6feb 100644 --- a/Plan/bungeecord/src/main/java/com/djrapitops/plan/system/listeners/bungee/PlayerOnlineListener.java +++ b/Plan/bungeecord/src/main/java/com/djrapitops/plan/system/listeners/bungee/PlayerOnlineListener.java @@ -84,24 +84,23 @@ public class PlayerOnlineListener implements Listener { public void onPostLogin(PostLoginEvent event) { try { ProxiedPlayer player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); String name = player.getName(); InetAddress address = player.getAddress().getAddress(); long time = System.currentTimeMillis(); - sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null)); - + sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null)); Database database = dbSystem.getDatabase(); boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS); if (gatheringGeolocations) { database.executeTransaction( - new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry) + new GeoInfoStoreTransaction(playerUUID, address, time, geolocationCache::getCountry) ); } - database.executeTransaction(new PlayerRegisterTransaction(uuid, () -> time, name)); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + database.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> time, name)); + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID())); } catch (Exception e) { errorHandler.log(L.WARN, this.getClass(), e); @@ -112,10 +111,10 @@ public class PlayerOnlineListener implements Listener { public void onLogout(PlayerDisconnectEvent event) { try { ProxiedPlayer player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); - sessionCache.endSession(uuid, System.currentTimeMillis()); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + sessionCache.endSession(playerUUID, System.currentTimeMillis()); + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID())); } catch (Exception e) { errorHandler.log(L.WARN, this.getClass(), e); @@ -126,12 +125,12 @@ public class PlayerOnlineListener implements Listener { public void onServerSwitch(ServerSwitchEvent event) { try { ProxiedPlayer player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); long time = System.currentTimeMillis(); // Replaces the current session in the cache. - sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null)); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null)); + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); } catch (Exception e) { errorHandler.log(L.WARN, this.getClass(), e); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/EndSessionProcessor.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/SessionEndTransaction.java similarity index 54% rename from Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/EndSessionProcessor.java rename to Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/SessionEndTransaction.java index 73b9df8e2..5101e74c3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/EndSessionProcessor.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/SessionEndTransaction.java @@ -14,33 +14,27 @@ * You should have received a copy of the GNU Lesser General Public License * along with Plan. If not, see . */ -package com.djrapitops.plan.system.processing.processors.player; +package com.djrapitops.plan.db.access.transactions.events; -import com.djrapitops.plan.system.cache.SessionCache; -import com.djrapitops.plan.system.processing.CriticalRunnable; - -import java.util.UUID; +import com.djrapitops.plan.data.container.Session; +import com.djrapitops.plan.db.access.queries.DataStoreQueries; +import com.djrapitops.plan.db.access.transactions.Transaction; /** - * Ends a session and saves it to the database. + * Transaction for storing a session after a session has ended. * * @author Rsl1122 */ -public class EndSessionProcessor implements CriticalRunnable { +public class SessionEndTransaction extends Transaction { - private final UUID uuid; - private final long time; + private final Session session; - private final SessionCache sessionCache; - - EndSessionProcessor(UUID uuid, long time, SessionCache sessionCache) { - this.uuid = uuid; - this.time = time; - this.sessionCache = sessionCache; + public SessionEndTransaction(Session session) { + this.session = session; } @Override - public void run() { - sessionCache.endSession(uuid, time); + protected void performOperations() { + execute(DataStoreQueries.storeSession(session)); } -} +} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxySessionCache.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxySessionCache.java index de0d94815..c884c7b40 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxySessionCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxySessionCache.java @@ -36,12 +36,12 @@ public class ProxySessionCache extends SessionCache { @Inject public ProxySessionCache(DBSystem dbSystem) { - super(dbSystem); + super(); } @Override - public Optional endSession(UUID uuid, long time) { - removeSessionFromCache(uuid); + public Optional endSession(UUID playerUUID, long time) { + removeSessionFromCache(playerUUID); /* Proxy should not save sessions so session is not removed.. */ return Optional.empty(); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java index ec7d130e1..5c1ae3fbf 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java @@ -18,7 +18,6 @@ package com.djrapitops.plan.system.cache; import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.store.keys.SessionKeys; -import com.djrapitops.plan.system.database.DBSystem; import javax.inject.Inject; import javax.inject.Singleton; @@ -37,11 +36,8 @@ public class SessionCache { private static final Map ACTIVE_SESSIONS = new HashMap<>(); - protected final DBSystem dbSystem; - @Inject - public SessionCache(DBSystem dbSystem) { - this.dbSystem = dbSystem; + public SessionCache() { } public static Map getActiveSessions() { @@ -61,44 +57,46 @@ public class SessionCache { /** * Used to get the Session of the player in the sessionCache. * - * @param uuid UUID of the player. + * @param playerUUID UUID of the player. * @return Optional with the session inside it if found. */ - public static Optional getCachedSession(UUID uuid) { - return Optional.ofNullable(ACTIVE_SESSIONS.get(uuid)); + public static Optional getCachedSession(UUID playerUUID) { + return Optional.ofNullable(ACTIVE_SESSIONS.get(playerUUID)); } - public void cacheSession(UUID uuid, Session session) { - if (getCachedSession(uuid).isPresent()) { - endSession(uuid, System.currentTimeMillis()); + /** + * Cache a new session. + * + * @param playerUUID UUID of the player + * @param session Session to cache. + * @return Optional: previous session. Recipients of this object should decide if it needs to be saved. + */ + public Optional cacheSession(UUID playerUUID, Session session) { + if (getCachedSession(playerUUID).isPresent()) { + return endSession(playerUUID, session.getUnsafe(SessionKeys.START)); } - ACTIVE_SESSIONS.put(uuid, session); + ACTIVE_SESSIONS.put(playerUUID, session); + return Optional.empty(); } /** * End a session and save it to database. * - * @param uuid UUID of the player. - * @param time Time the session ended. - * @throws com.djrapitops.plan.api.exceptions.database.DBOpException If saving failed. + * @param playerUUID UUID of the player. + * @param time Time the session ended. + * @return Optional: ended session. Recipients of this object should decide if it needs to be saved. */ - public Optional endSession(UUID uuid, long time) { - Session session = ACTIVE_SESSIONS.get(uuid); + public Optional endSession(UUID playerUUID, long time) { + Session session = ACTIVE_SESSIONS.get(playerUUID); if (session == null || session.getUnsafe(SessionKeys.START) > time) { return Optional.empty(); } - try { - session.endSession(time); - // Might throw a DBOpException - // TODO Refactor to use Event transactions when available. - dbSystem.getDatabase().save().session(uuid, session); - return Optional.of(session); - } finally { - removeSessionFromCache(uuid); - } + removeSessionFromCache(playerUUID); + session.endSession(time); + return Optional.of(session); } - protected void removeSessionFromCache(UUID uuid) { - ACTIVE_SESSIONS.remove(uuid); + protected void removeSessionFromCache(UUID playerUUID) { + ACTIVE_SESSIONS.remove(playerUUID); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java index fa1e738d5..a69b03712 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/operation/SaveOperations.java @@ -16,8 +16,6 @@ */ package com.djrapitops.plan.system.database.databases.operation; -import com.djrapitops.plan.data.container.Session; - import java.util.UUID; /** @@ -40,7 +38,4 @@ public interface SaveOperations { @Deprecated void opStatus(UUID uuid, boolean op); - @Deprecated - void session(UUID uuid, Session session); - } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java index ead5b6bf2..e1f6afbd8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java @@ -16,10 +16,7 @@ */ package com.djrapitops.plan.system.database.databases.sql.operation; -import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.db.SQLDB; -import com.djrapitops.plan.db.access.queries.DataStoreQueries; -import com.djrapitops.plan.db.access.transactions.Transaction; import com.djrapitops.plan.system.database.databases.operation.SaveOperations; import java.util.UUID; @@ -45,13 +42,4 @@ public class SQLSaveOps extends SQLOps implements SaveOperations { userInfoTable.updateOpStatus(uuid, op); } - @Override - public void session(UUID uuid, Session session) { - db.executeTransaction(new Transaction() { - @Override - protected void performOperations() { - execute(DataStoreQueries.storeSession(session)); - } - }); - } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java index 3f65ab642..c46738308 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java @@ -16,7 +16,6 @@ */ package com.djrapitops.plan.system.processing.processors.player; -import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.DBSystem; import dagger.Lazy; @@ -34,22 +33,15 @@ import java.util.function.BooleanSupplier; public class PlayerProcessors { private final Lazy dbSystem; - private final Lazy sessionCache; @Inject public PlayerProcessors( - Lazy dbSystem, - Lazy sessionCache + Lazy dbSystem ) { this.dbSystem = dbSystem; - this.sessionCache = sessionCache; } public BanAndOpProcessor banAndOpProcessor(UUID uuid, BooleanSupplier banned, boolean op) { return new BanAndOpProcessor(uuid, banned, op, dbSystem.get().getDatabase()); } - - public EndSessionProcessor endSessionProcessor(UUID uuid, long time) { - return new EndSessionProcessor(uuid, time, sessionCache.get()); - } } \ No newline at end of file diff --git a/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java b/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java index cca57e011..7d833015e 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java @@ -38,7 +38,7 @@ public class SessionCacheTest { public void setUp() { session = new Session(uuid, serverUUID, 12345L, "World1", "SURVIVAL"); - SessionCache sessionCache = new SessionCache(null); + SessionCache sessionCache = new SessionCache(); sessionCache.cacheSession(uuid, session); } diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java b/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java index 4fdf4c24b..becbb238f 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java @@ -103,19 +103,19 @@ public class SpongePlayerListener { private void actOnLoginEvent(ClientConnectionEvent.Login event) { GameProfile profile = event.getProfile(); - UUID uuid = profile.getUniqueId(); + UUID playerUUID = profile.getUniqueId(); boolean banned = isBanned(profile); - processing.submit(processors.player().banAndOpProcessor(uuid, () -> banned, false)); + processing.submit(processors.player().banAndOpProcessor(playerUUID, () -> banned, false)); } @Listener(order = Order.POST) public void onKick(KickPlayerEvent event) { try { - UUID uuid = event.getTargetEntity().getUniqueId(); - if (!status.areKicksCounted() || SpongeAFKListener.AFK_TRACKER.isAfk(uuid)) { + UUID playerUUID = event.getTargetEntity().getUniqueId(); + if (!status.areKicksCounted() || SpongeAFKListener.AFK_TRACKER.isAfk(playerUUID)) { return; } - dbSystem.getDatabase().executeTransaction(new KickStoreTransaction(uuid)); + dbSystem.getDatabase().executeTransaction(new KickStoreTransaction(playerUUID)); } catch (Exception e) { errorHandler.log(L.ERROR, this.getClass(), e); } @@ -142,11 +142,11 @@ public class SpongePlayerListener { private void actOnJoinEvent(ClientConnectionEvent.Join event) { Player player = event.getTargetEntity(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); UUID serverUUID = serverInfo.getServerUUID(); long time = System.currentTimeMillis(); - SpongeAFKListener.AFK_TRACKER.performedAction(uuid, time); + SpongeAFKListener.AFK_TRACKER.performedAction(playerUUID, time); String world = player.getWorld().getName(); Optional gameMode = player.getGameModeData().get(Keys.GAME_MODE); @@ -163,20 +163,21 @@ public class SpongePlayerListener { boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS); if (gatheringGeolocations) { database.executeTransaction( - new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry) + new GeoInfoStoreTransaction(playerUUID, address, time, geolocationCache::getCountry) ); } - database.executeTransaction(new PlayerServerRegisterTransaction(uuid, () -> time, playerName, serverUUID)); - processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm))); + database.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> time, playerName, serverUUID)); + sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverUUID, time, world, gm)) + .ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession))); - if (!displayName.equals(nicknameCache.getDisplayName(uuid))) { + if (!displayName.equals(nicknameCache.getDisplayName(playerUUID))) { database.executeTransaction( - new NicknameStoreTransaction(uuid, new Nickname(displayName, time, serverUUID)) + new NicknameStoreTransaction(playerUUID, new Nickname(displayName, time, serverUUID)) ); } - processing.submitNonCritical(processors.info().playerPageUpdateProcessor(uuid)); + processing.submitNonCritical(processors.info().playerPageUpdateProcessor(playerUUID)); } @Listener(order = Order.POST) @@ -191,15 +192,18 @@ public class SpongePlayerListener { private void actOnQuitEvent(ClientConnectionEvent.Disconnect event) { long time = System.currentTimeMillis(); Player player = event.getTargetEntity(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); - SpongeAFKListener.AFK_TRACKER.loggedOut(uuid, time); + SpongeAFKListener.AFK_TRACKER.loggedOut(playerUUID, time); - nicknameCache.removeDisplayName(uuid); + nicknameCache.removeDisplayName(playerUUID); boolean banned = isBanned(player.getProfile()); - processing.submit(processors.player().banAndOpProcessor(uuid, () -> banned, false)); - processing.submit(processors.player().endSessionProcessor(uuid, time)); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + processing.submit(processors.player().banAndOpProcessor(playerUUID, () -> banned, false)); + + sessionCache.endSession(playerUUID, time) + .ifPresent(endedSession -> dbSystem.getDatabase().executeTransaction(new SessionEndTransaction(endedSession))); + + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); } } \ No newline at end of file diff --git a/Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java index 9ba7bb8fb..924ae6ac4 100644 --- a/Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java +++ b/Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java @@ -87,24 +87,24 @@ public class PlayerOnlineListener { public void onPostLogin(PostLoginEvent event) { try { Player player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); String name = player.getUsername(); InetAddress address = player.getRemoteAddress().getAddress(); long time = System.currentTimeMillis(); - sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null)); + sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null)); Database database = dbSystem.getDatabase(); boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS); if (gatheringGeolocations) { database.executeTransaction( - new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry) + new GeoInfoStoreTransaction(playerUUID, address, time, geolocationCache::getCountry) ); } - database.executeTransaction(new PlayerRegisterTransaction(uuid, () -> time, name)); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + database.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> time, name)); + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID())); } catch (Exception e) { errorHandler.log(L.WARN, this.getClass(), e); @@ -115,10 +115,10 @@ public class PlayerOnlineListener { public void onLogout(DisconnectEvent event) { try { Player player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); - sessionCache.endSession(uuid, System.currentTimeMillis()); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + sessionCache.endSession(playerUUID, System.currentTimeMillis()); + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID())); } catch (Exception e) { errorHandler.log(L.WARN, this.getClass(), e); @@ -129,12 +129,13 @@ public class PlayerOnlineListener { public void onServerSwitch(ServerConnectedEvent event) { try { Player player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID playerUUID = player.getUniqueId(); + long time = System.currentTimeMillis(); - long now = System.currentTimeMillis(); // Replaces the current session in the cache. - sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), now, null, null)); - processing.submit(processors.info().playerPageUpdateProcessor(uuid)); + sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null)); + + processing.submit(processors.info().playerPageUpdateProcessor(playerUUID)); } catch (Exception e) { errorHandler.log(L.WARN, this.getClass(), e); }