Skip to content

Commit bdd1e82

Browse files
committed
add enum for redis channels
1 parent 243f6fb commit bdd1e82

7 files changed

Lines changed: 137 additions & 35 deletions

File tree

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package dev.wiji.bigminecraftapi;
22

3-
import dev.wiji.bigminecraftapi.redis.RedisManager;
3+
import dev.wiji.bigminecraftapi.controllers.NetworkManager;
4+
import dev.wiji.bigminecraftapi.enums.InstanceState;
5+
import dev.wiji.bigminecraftapi.controllers.RedisManager;
46

57
public class BigMinecraftAPI {
6-
public static RedisManager redisManager = new RedisManager();
8+
private static final RedisManager redisManager = new RedisManager();
9+
private static final NetworkManager networkManager = new NetworkManager();
710

811
public static void init() {
912
System.out.println("BigMinecraftAPI initialized!");
@@ -12,4 +15,8 @@ public static void init() {
1215
public static RedisManager getRedisManager() {
1316
return redisManager;
1417
}
18+
19+
public static NetworkManager getNetworkManager() {
20+
return networkManager;
21+
}
1522
}

src/main/java/dev/wiji/bigminecraftapi/redis/RedisManager.java renamed to src/main/java/dev/wiji/bigminecraftapi/controllers/NetworkManager.java

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,27 @@
1-
package dev.wiji.bigminecraftapi.redis;
1+
package dev.wiji.bigminecraftapi.controllers;
22

33
import com.google.gson.Gson;
4+
import dev.wiji.bigminecraftapi.BigMinecraftAPI;
5+
import dev.wiji.bigminecraftapi.enums.InstanceState;
6+
import dev.wiji.bigminecraftapi.enums.RedisChannel;
47
import dev.wiji.bigminecraftapi.objects.MinecraftInstance;
58
import redis.clients.jedis.Jedis;
6-
import redis.clients.jedis.JedisPool;
7-
import redis.clients.jedis.JedisPubSub;
89

910
import java.util.*;
1011

11-
public class RedisManager {
12-
private final JedisPool pool;
12+
public class NetworkManager {
1313
private final Gson gson;
1414

15-
public RedisManager() {
16-
pool = new JedisPool("redis-service", 6379);
15+
public NetworkManager() {
1716
gson = new Gson();
1817
}
1918

20-
protected void addListener(RedisListener listener) {
21-
JedisPubSub pubSub = new JedisPubSub() {
22-
@Override
23-
public void onMessage(String channel, String message) {
24-
listener.onMessage(message);
25-
}
26-
};
27-
28-
new Thread(() -> {
29-
try(Jedis jedisSubscriber = pool.getResource()) {
30-
jedisSubscriber.subscribe(pubSub, listener.getChannel());
31-
}
32-
}).start();
33-
}
34-
35-
public void publish(String channel, String message) {
36-
try (Jedis jedisPublisher = pool.getResource()) {
37-
jedisPublisher.publish(channel, message);
38-
}
39-
}
40-
4119
public List<MinecraftInstance> getInstances() {
20+
RedisManager redisManager = BigMinecraftAPI.getRedisManager();
21+
4222
List<MinecraftInstance> instances = new ArrayList<>();
4323

44-
try (Jedis jedis = pool.getResource()) {
24+
try (Jedis jedis = redisManager.pool.getResource()) {
4525
Map<String, String> instanceStrings = jedis.hgetAll("instances");
4626
for (String instance : instanceStrings.values()) {
4727
MinecraftInstance minecraftInstance = gson.fromJson(instance, MinecraftInstance.class);
@@ -53,9 +33,11 @@ public List<MinecraftInstance> getInstances() {
5333
}
5434

5535
public List<MinecraftInstance> getProxies() {
36+
RedisManager redisManager = BigMinecraftAPI.getRedisManager();
37+
5638
List<MinecraftInstance> proxies = new ArrayList<>();
5739

58-
try (Jedis jedis = pool.getResource()) {
40+
try (Jedis jedis = redisManager.pool.getResource()) {
5941
Map<String, String> proxyStrings = jedis.hgetAll("proxies");
6042
for (String instance : proxyStrings.values()) {
6143
MinecraftInstance proxy = gson.fromJson(instance, MinecraftInstance.class);
@@ -80,6 +62,13 @@ public boolean isPlayerConnected(UUID player) {
8062
}
8163

8264
public void queuePlayer(UUID player, String gamemode) {
83-
publish("queue-player", player.toString() + ":" + gamemode);
65+
RedisManager redisManager = BigMinecraftAPI.getRedisManager();
66+
redisManager.publish(RedisChannel.QUEUE_PLAYER.getRef(), player.toString() + ":" + gamemode);
8467
}
85-
}
68+
69+
public static void setInstanceState(InstanceState state) {
70+
RedisManager redisManager = BigMinecraftAPI.getRedisManager();
71+
redisManager.publish(RedisChannel.INSTANCE_STATE_CHANGE.getRef(), state.name());
72+
}
73+
74+
}

src/main/java/dev/wiji/bigminecraftapi/redis/RedisListener.java renamed to src/main/java/dev/wiji/bigminecraftapi/controllers/RedisListener.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
package dev.wiji.bigminecraftapi.redis;
1+
package dev.wiji.bigminecraftapi.controllers;
22

33
import dev.wiji.bigminecraftapi.BigMinecraftAPI;
4+
import dev.wiji.bigminecraftapi.enums.RedisChannel;
45

56
public abstract class RedisListener {
67

78
private final String channel;
89

10+
public RedisListener(RedisChannel channel) {
11+
this(channel.getRef());
12+
}
13+
914
public RedisListener(String channel) {
1015
this.channel = channel;
1116

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package dev.wiji.bigminecraftapi.controllers;
2+
3+
import dev.wiji.bigminecraftapi.enums.RedisChannel;
4+
import redis.clients.jedis.Jedis;
5+
import redis.clients.jedis.JedisPool;
6+
import redis.clients.jedis.JedisPubSub;
7+
8+
public class RedisManager {
9+
protected final JedisPool pool;
10+
11+
public RedisManager() {
12+
pool = new JedisPool("redis-service", 6379);
13+
}
14+
15+
protected void addListener(RedisListener listener) {
16+
JedisPubSub pubSub = new JedisPubSub() {
17+
@Override
18+
public void onMessage(String channel, String message) {
19+
listener.onMessage(message);
20+
}
21+
};
22+
23+
new Thread(() -> {
24+
try(Jedis jedisSubscriber = pool.getResource()) {
25+
jedisSubscriber.subscribe(pubSub, listener.getChannel());
26+
}
27+
}).start();
28+
}
29+
30+
public void publish(RedisChannel channel, String message) {
31+
try (Jedis jedisPublisher = pool.getResource()) {
32+
jedisPublisher.publish(channel.getRef(), message);
33+
}
34+
}
35+
36+
public void publish(String channel, String message) {
37+
try (Jedis jedisPublisher = pool.getResource()) {
38+
jedisPublisher.publish(channel, message);
39+
}
40+
}
41+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dev.wiji.bigminecraftapi.enums;
2+
3+
public enum InstanceState {
4+
STARTING,
5+
RUNNING,
6+
BLOCKED,
7+
STOPPING,
8+
STOPPED,
9+
;
10+
11+
public static InstanceState getState(String state) {
12+
for (InstanceState instanceState : values()) {
13+
if (instanceState.name().equalsIgnoreCase(state)) {
14+
return instanceState;
15+
}
16+
}
17+
return null;
18+
}
19+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.wiji.bigminecraftapi.enums;
2+
3+
public enum RedisChannel {
4+
5+
QUEUE_PLAYER("queue-player"),
6+
QUEUE_RESPONSE("queue-response"),
7+
INSTANCE_UPDATE("instance-updated"),
8+
PROXY_CONNECT("proxy-connect"),
9+
PROXY_DISCONNECT("proxy-disconnect"),
10+
INSTANCE_SWITCH("instance-switch"),
11+
REQUEST_INITIAL_INSTANCE("request-initial-instance"),
12+
INITIAL_INSTANCE_RESPONSE("initial-instance-response"),
13+
INSTANCE_STATE_CHANGE("instance-state-change"),
14+
PROXY_REGISTER("proxy-register"),
15+
;
16+
17+
private final String ref;
18+
19+
RedisChannel(String ref) {
20+
this.ref = ref;
21+
}
22+
23+
public String getRef() {
24+
return ref;
25+
}
26+
}

src/main/java/dev/wiji/bigminecraftapi/objects/MinecraftInstance.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.wiji.bigminecraftapi.objects;
22

3+
import dev.wiji.bigminecraftapi.enums.InstanceState;
4+
35
import java.util.*;
46

57
public class MinecraftInstance {
@@ -10,6 +12,9 @@ public class MinecraftInstance {
1012
private final String ip;
1113
private final String gamemode;
1214
private final boolean initialServer;
15+
16+
private InstanceState state;
17+
1318
private final Map<UUID, String> players;
1419

1520
public MinecraftInstance(String uid, String name, String podName, String ip, String gamemode, boolean initialServer) {
@@ -20,6 +25,9 @@ public MinecraftInstance(String uid, String name, String podName, String ip, Str
2025
this.gamemode = gamemode;
2126
this.initialServer = initialServer;
2227

28+
this.state = InstanceState.RUNNING;
29+
//TODO: Make this configurable so that instances have to manually report when they are started
30+
2331
this.players = new HashMap<>();
2432
}
2533

@@ -47,6 +55,10 @@ public boolean isInitialServer() {
4755
return initialServer;
4856
}
4957

58+
public InstanceState getState() {
59+
return state;
60+
}
61+
5062
public Map<UUID, String> getPlayers() {
5163
return players;
5264
}
@@ -68,4 +80,7 @@ public void setPlayers(Map<UUID, String> players) {
6880
this.players.putAll(players);
6981
}
7082

83+
public void setState(InstanceState state) {
84+
this.state = state;
85+
}
7186
}

0 commit comments

Comments
 (0)