RedisBungee/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/RedisTask.java

68 lines
2.3 KiB
Java
Raw Normal View History

2022-10-29 20:02:09 +00:00
/*
* Copyright (c) 2013-present RedisBungee contributors
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/
package com.imaginarycode.minecraft.redisbungee.api.tasks;
2022-07-16 05:18:33 +00:00
import com.imaginarycode.minecraft.redisbungee.AbstractRedisBungeeAPI;
2024-04-12 18:37:02 +00:00
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode;
2022-07-16 12:50:09 +00:00
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
2022-07-25 15:13:25 +00:00
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisClusterSummoner;
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisPooledSummoner;
2022-07-16 12:50:09 +00:00
import com.imaginarycode.minecraft.redisbungee.api.summoners.Summoner;
import redis.clients.jedis.UnifiedJedis;
2022-07-16 05:18:33 +00:00
import java.util.concurrent.Callable;
/**
* Since Jedis now have UnifiedJedis which basically extended by cluster / single connections classes
* can help us to have shared code.
*/
2022-07-16 05:18:33 +00:00
public abstract class RedisTask<V> implements Runnable, Callable<V> {
2022-07-20 09:21:24 +00:00
protected final Summoner<?> summoner;
2024-04-12 18:37:02 +00:00
protected final RedisBungeeMode mode;
2022-07-16 05:18:33 +00:00
@Override
public V call() throws Exception {
2024-04-12 18:37:02 +00:00
return this.execute();
2022-07-16 05:18:33 +00:00
}
public RedisTask(AbstractRedisBungeeAPI api) {
2022-07-16 05:18:33 +00:00
this.summoner = api.getSummoner();
2024-04-12 18:37:02 +00:00
this.mode = api.getMode();
2022-07-16 05:18:33 +00:00
}
public RedisTask(RedisBungeePlugin<?> plugin) {
2024-04-12 18:37:02 +00:00
this.summoner = plugin.getSummoner();
this.mode = plugin.getRedisBungeeMode();
}
public abstract V unifiedJedisTask(UnifiedJedis unifiedJedis);
2022-07-16 05:18:33 +00:00
@Override
public void run() {
this.execute();
}
2024-04-12 18:37:02 +00:00
public V execute() {
// JedisCluster, JedisPooled in fact is just UnifiedJedis does not need new instance since its single instance anyway.
2024-04-12 18:37:02 +00:00
if (mode == RedisBungeeMode.SINGLE) {
JedisPooledSummoner jedisSummoner = (JedisPooledSummoner) summoner;
return this.unifiedJedisTask(jedisSummoner.obtainResource());
2024-04-12 18:37:02 +00:00
} else if (mode == RedisBungeeMode.CLUSTER) {
2022-07-25 15:13:25 +00:00
JedisClusterSummoner jedisClusterSummoner = (JedisClusterSummoner) summoner;
return this.unifiedJedisTask(jedisClusterSummoner.obtainResource());
2022-07-16 05:18:33 +00:00
}
return null;
}
}