From f722fa161a0097fdb68dcc41eacd8d5aa1d8ec83 Mon Sep 17 00:00:00 2001 From: vanhec_a Date: Sat, 31 Oct 2015 17:34:16 +0100 Subject: [PATCH] Add a join blocker in case Cache Loading --- src/main/java/fr/xephi/authme/AuthMe.java | 13 ++++++++++++- .../xephi/authme/datasource/CacheDataSource.java | 4 +++- .../authme/process/join/AsyncronousJoin.java | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index fe23a67a..aae74c27 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -106,7 +106,18 @@ public class AuthMe extends JavaPlugin { public ConcurrentHashMap cap = new ConcurrentHashMap<>(); public ConcurrentHashMap realIp = new ConcurrentHashMap<>(); - public static AuthMe getInstance() { + // In case we need to cache PlayerAuths, prevent connection before it's done + private boolean canConnect = true; + + public boolean isCanConnect() { + return canConnect; + } + + public void setCanConnect(boolean canConnect) { + this.canConnect = canConnect; + } + + public static AuthMe getInstance() { return authme; } diff --git a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java index 56505649..12d52c2e 100644 --- a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java @@ -20,9 +20,10 @@ public class CacheDataSource implements DataSource { private final ExecutorService exec; private final ConcurrentHashMap cache = new ConcurrentHashMap<>(); - public CacheDataSource(AuthMe pl, DataSource src) { + public CacheDataSource(final AuthMe pl, DataSource src) { this.source = src; this.exec = Executors.newCachedThreadPool(); + pl.setCanConnect(false); /* * We need to load all players in cache ... It will took more time to @@ -35,6 +36,7 @@ public class CacheDataSource implements DataSource { for (PlayerAuth auth : source.getAllAuths()) { cache.put(auth.getNickname().toLowerCase(), auth); } + pl.setCanConnect(true); } }); } diff --git a/src/main/java/fr/xephi/authme/process/join/AsyncronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsyncronousJoin.java index a9aacdf4..b52833e4 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsyncronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsyncronousJoin.java @@ -58,6 +58,21 @@ public class AsyncronousJoin { plugin.ess.getUser(player).setSocialSpyEnabled(false); } + if (!plugin.isCanConnect()) + { + final GameMode gM = AuthMePlayerListener.gameMode.get(name); + sched.scheduleSyncDelayedTask(plugin, new Runnable() { + + @Override + public void run() { + AuthMePlayerListener.causeByAuthMe.putIfAbsent(name, true); + player.setGameMode(gM); + player.kickPlayer("Server is loading, please wait before joining!"); + } + + }); + } + final String ip = plugin.getIP(player); if (Settings.isAllowRestrictedIp && !Settings.getRestrictedIp(name, ip)) { final GameMode gM = AuthMePlayerListener.gameMode.get(name);