From e00875faa2f4750d0d25995f6c5e581692a56cd6 Mon Sep 17 00:00:00 2001 From: aro Date: Sun, 12 Mar 2023 10:09:43 +0100 Subject: [PATCH] feat: working on transfer with cache --- .../nicko/config/DataSourceConfiguration.java | 31 ++++++++++++ .../nicko/config/NewConfiguration.java | 47 +++++++++++++++++++ .../nicko/storage/PlayerDataStore.java | 10 +++- .../artelnatif/nicko/storage/cache/Cache.java | 27 +++++++++++ .../nicko/storage/cache/CacheProvider.java | 7 +++ .../nicko/storage/cache/redis/RedisCache.java | 31 ++++++++++++ .../cache/redis/RedisCacheProvider.java | 26 ++++++++++ 7 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/net/artelnatif/nicko/config/DataSourceConfiguration.java create mode 100644 core/src/main/java/net/artelnatif/nicko/config/NewConfiguration.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/cache/Cache.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/cache/CacheProvider.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCache.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCacheProvider.java diff --git a/core/src/main/java/net/artelnatif/nicko/config/DataSourceConfiguration.java b/core/src/main/java/net/artelnatif/nicko/config/DataSourceConfiguration.java new file mode 100644 index 0000000..1ffd60b --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/config/DataSourceConfiguration.java @@ -0,0 +1,31 @@ +package net.artelnatif.nicko.config; + +public class DataSourceConfiguration { + private final String address; + private final String port; + private final String username; + private final String password; + + public DataSourceConfiguration(String address, String port, String username, String password) { + this.address = address; + this.port = port; + this.username = username; + this.password = password; + } + + public String getAddress() { + return address; + } + + public String getPort() { + return port; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/config/NewConfiguration.java b/core/src/main/java/net/artelnatif/nicko/config/NewConfiguration.java new file mode 100644 index 0000000..c3f37f5 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/config/NewConfiguration.java @@ -0,0 +1,47 @@ +package net.artelnatif.nicko.config; + +public class NewConfiguration { + private final DataSourceConfiguration sqlConfiguration; + private final DataSourceConfiguration redisConfiguration; + private final String prefix; + private final Boolean local; + private final Boolean customLocale; + + public NewConfiguration(DataSourceConfiguration sqlConfiguration, DataSourceConfiguration redisConfiguration, String prefix, Boolean local, Boolean customLocale) { + this.sqlConfiguration = sqlConfiguration; + this.redisConfiguration = redisConfiguration; + this.prefix = prefix; + this.local = local; + this.customLocale = customLocale; + } + + public NewConfiguration() { + this( + new DataSourceConfiguration("", "", "", ""), + new DataSourceConfiguration("", "", "", ""), + "", + false, + false + ); + } + + public DataSourceConfiguration getSqlConfiguration() { + return sqlConfiguration; + } + + public DataSourceConfiguration getRedisConfiguration() { + return redisConfiguration; + } + + public String getPrefix() { + return prefix; + } + + public Boolean isLocal() { + return local; + } + + public Boolean isCustomLocale() { + return customLocale; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java b/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java index f69dc5b..002c839 100644 --- a/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java +++ b/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java @@ -1,11 +1,13 @@ package net.artelnatif.nicko.storage; import net.artelnatif.nicko.config.Configuration; -import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.mojang.MojangUtils; +import net.artelnatif.nicko.storage.cache.Cache; +import net.artelnatif.nicko.storage.cache.redis.RedisCache; import net.artelnatif.nicko.storage.json.JSONStorage; import net.artelnatif.nicko.storage.sql.SQLStorage; import org.bukkit.entity.Player; @@ -17,12 +19,14 @@ import java.util.UUID; public class PlayerDataStore { private final Storage storage; + private final Cache cache; private final MojangAPI mojangAPI; private final HashMap profiles = new HashMap<>(); public PlayerDataStore(MojangAPI mojangAPI, Configuration configuration) { this.mojangAPI = mojangAPI; this.storage = configuration.isLocal() ? new JSONStorage() : new SQLStorage(configuration); + this.cache = new RedisCache(); // The only option for now! } public void performProfileUpdate(UUID uuid, NickoProfile profile) { @@ -81,4 +85,8 @@ public class PlayerDataStore { public Storage getStorage() { return storage; } + + public Cache getCache() { + return cache; + } } diff --git a/core/src/main/java/net/artelnatif/nicko/storage/cache/Cache.java b/core/src/main/java/net/artelnatif/nicko/storage/cache/Cache.java new file mode 100644 index 0000000..92d5b75 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/cache/Cache.java @@ -0,0 +1,27 @@ +package net.artelnatif.nicko.storage.cache; + +import net.artelnatif.nicko.disguise.ActionResult; +import net.artelnatif.nicko.disguise.NickoProfile; + +import java.util.Optional; +import java.util.UUID; + +public abstract class Cache { + private boolean error = false; + + public abstract CacheProvider getProvider(); + + public abstract ActionResult cache(UUID uuid, NickoProfile profile); + + public abstract boolean isCached(UUID uuid); + + public abstract Optional retrieve(UUID uuid); + + public boolean isError() { + return error; + } + + public void setError(boolean error) { + this.error = error; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/cache/CacheProvider.java b/core/src/main/java/net/artelnatif/nicko/storage/cache/CacheProvider.java new file mode 100644 index 0000000..e85fd3a --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/cache/CacheProvider.java @@ -0,0 +1,7 @@ +package net.artelnatif.nicko.storage.cache; + +public interface CacheProvider { + boolean init(); + + boolean close(); +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCache.java b/core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCache.java new file mode 100644 index 0000000..824cd72 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCache.java @@ -0,0 +1,31 @@ +package net.artelnatif.nicko.storage.cache.redis; + +import net.artelnatif.nicko.disguise.ActionResult; +import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.storage.cache.Cache; +import net.artelnatif.nicko.storage.cache.CacheProvider; + +import java.util.Optional; +import java.util.UUID; + +public class RedisCache extends Cache { + @Override + public CacheProvider getProvider() { + return null; + } + + @Override + public ActionResult cache(UUID uuid, NickoProfile profile) { + return null; + } + + @Override + public boolean isCached(UUID uuid) { + return false; + } + + @Override + public Optional retrieve(UUID uuid) { + return Optional.empty(); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCacheProvider.java b/core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCacheProvider.java new file mode 100644 index 0000000..65347e3 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/cache/redis/RedisCacheProvider.java @@ -0,0 +1,26 @@ +package net.artelnatif.nicko.storage.cache.redis; + +import net.artelnatif.nicko.storage.cache.CacheProvider; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public class RedisCacheProvider implements CacheProvider { + private JedisPool pool; + + @Override + public boolean init() { + // TODO: 3/12/23 Get port from configuration + pool = new JedisPool("localhost", 6379); + return !pool.isClosed() && pool.getResource() != null; + } + + @Override + public boolean close() { + pool.close(); + return pool.isClosed(); + } + + public Jedis getJedis() { + return pool.getResource(); + } +}