From f975fefd4a23e5e8f3c8bb377fa2916e1b01f682 Mon Sep 17 00:00:00 2001 From: DNx5 Date: Tue, 15 Sep 2015 15:39:45 +0700 Subject: [PATCH] run saveAuth async in CacheDataSource --- .../authme/datasource/CacheDataSource.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java index a42c9ddf5..d4b0772cd 100644 --- a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java @@ -12,16 +12,18 @@ import java.util.concurrent.ConcurrentHashMap; public class CacheDataSource implements DataSource { private final DataSource source; + private final AuthMe plugin; private ConcurrentHashMap cache = new ConcurrentHashMap<>(); - public CacheDataSource(AuthMe plugin, DataSource src) { + public CacheDataSource(AuthMe pl, DataSource src) { + this.plugin = pl; this.source = src; /* * We need to load all players in cache ... It will took more time to * load the server, but it will be much easier to check for an * isAuthAvailable ! */ - plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable(){ + pl.getServer().getScheduler().runTaskAsynchronously(pl, new Runnable() { @Override public void run() { for (PlayerAuth auth : source.getAllAuths()) { @@ -46,12 +48,17 @@ public class CacheDataSource implements DataSource { } @Override - public synchronized boolean saveAuth(PlayerAuth auth) { - if (source.saveAuth(auth)) { - cache.put(auth.getNickname(), auth); - return true; - } - return false; + public synchronized boolean saveAuth(final PlayerAuth auth) { + cache.put(auth.getNickname(), auth); + plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + if (!source.saveAuth(auth)) { + cache.remove(auth.getNickname()); + } + } + }); + return true; } @Override