forked from git-mirrors/GeyserConnect
Rework storage system and add json implementation
This commit is contained in:
parent
ff54bd4580
commit
3f1ec104c3
8 changed files with 104 additions and 57 deletions
|
@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.geysermc.connector.utils.WebUtils;
|
import org.geysermc.connector.utils.WebUtils;
|
||||||
import org.geysermc.multi.utils.PlayerStorageManager;
|
import org.geysermc.multi.storage.AbstractStorageManager;
|
||||||
import org.geysermc.multi.utils.Server;
|
import org.geysermc.multi.utils.Server;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -59,6 +59,6 @@ public class GeyserMultiConfig {
|
||||||
private int max;
|
private int max;
|
||||||
|
|
||||||
@JsonProperty("storage-type")
|
@JsonProperty("storage-type")
|
||||||
private PlayerStorageManager.StorageType storageType;
|
private AbstractStorageManager.StorageType storageType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,9 @@ import com.nukkitx.protocol.bedrock.v390.Bedrock_v390;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.geysermc.connector.utils.FileUtils;
|
import org.geysermc.connector.utils.FileUtils;
|
||||||
import org.geysermc.multi.proxy.GeyserProxyBootstrap;
|
import org.geysermc.multi.proxy.GeyserProxyBootstrap;
|
||||||
|
import org.geysermc.multi.storage.AbstractStorageManager;
|
||||||
import org.geysermc.multi.utils.Logger;
|
import org.geysermc.multi.utils.Logger;
|
||||||
import org.geysermc.multi.utils.Player;
|
import org.geysermc.multi.utils.Player;
|
||||||
import org.geysermc.multi.utils.PlayerStorageManager;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -48,6 +48,9 @@ public class MasterServer {
|
||||||
@Getter
|
@Getter
|
||||||
private GeyserMultiConfig geyserMultiConfig;
|
private GeyserMultiConfig geyserMultiConfig;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private AbstractStorageManager storageManager;
|
||||||
|
|
||||||
public MasterServer() {
|
public MasterServer() {
|
||||||
this.instance = this;
|
this.instance = this;
|
||||||
|
|
||||||
|
@ -72,7 +75,14 @@ public class MasterServer {
|
||||||
TimerTask task = new TimerTask() { public void run() { } };
|
TimerTask task = new TimerTask() { public void run() { } };
|
||||||
timer.scheduleAtFixedRate(task, 0L, 1000L);
|
timer.scheduleAtFixedRate(task, 0L, 1000L);
|
||||||
|
|
||||||
PlayerStorageManager.setupStorage();
|
try {
|
||||||
|
storageManager = geyserMultiConfig.getCustomServers().getStorageType().getStorageManager().newInstance();
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.severe("Invalid storage manager class!", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
storageManager.setupStorage();
|
||||||
|
|
||||||
start(geyserMultiConfig.getPort());
|
start(geyserMultiConfig.getPort());
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
public void disconnect(DisconnectReason reason) {
|
public void disconnect(DisconnectReason reason) {
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
masterServer.getLogger().info(player.getDisplayName() + " has disconnected from the master server (" + reason + ")");
|
masterServer.getLogger().info(player.getDisplayName() + " has disconnected from the master server (" + reason + ")");
|
||||||
|
masterServer.getStorageManager().saveServers(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package org.geysermc.multi.storage;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonValue;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.geysermc.multi.utils.Player;
|
||||||
|
import org.geysermc.multi.utils.Server;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AbstractStorageManager {
|
||||||
|
|
||||||
|
public void setupStorage() { }
|
||||||
|
|
||||||
|
public void saveServers(Player player) { }
|
||||||
|
|
||||||
|
public List<Server> loadServers(Player player) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum StorageType {
|
||||||
|
JSON("json", JsonStorageManager.class),
|
||||||
|
SQLITE("sqlite", AbstractStorageManager.class);
|
||||||
|
|
||||||
|
@JsonValue
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private Class<? extends AbstractStorageManager> storageManager;
|
||||||
|
|
||||||
|
StorageType(String name, Class<? extends AbstractStorageManager> storageManager) {
|
||||||
|
this.name = name;
|
||||||
|
this.storageManager = storageManager;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package org.geysermc.multi.storage;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.geysermc.multi.utils.Player;
|
||||||
|
import org.geysermc.multi.utils.Server;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class JsonStorageManager extends AbstractStorageManager {
|
||||||
|
private ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupStorage() {
|
||||||
|
File playersFolder = new File("players/");
|
||||||
|
if (!playersFolder.exists()) {
|
||||||
|
playersFolder.mkdirs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveServers(Player player) {
|
||||||
|
File dataFile = new File("players/" + player.getXuid() + ".json");
|
||||||
|
try {
|
||||||
|
mapper.writeValue(dataFile, player.getServers());
|
||||||
|
} catch (IOException e) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Server> loadServers(Player player) {
|
||||||
|
File dataFile = new File("players/" + player.getXuid() + ".json");
|
||||||
|
List<Server> servers = new ArrayList<>();
|
||||||
|
|
||||||
|
if (dataFile.exists()) {
|
||||||
|
try {
|
||||||
|
List<Server> loadedServers = mapper.readValue(dataFile, new TypeReference<List<Server>>(){});
|
||||||
|
servers.addAll(loadedServers);
|
||||||
|
} catch (IOException e) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
}
|
|
@ -41,6 +41,8 @@ public class UIHandler {
|
||||||
window.getButtons().add(new FormButton("Direct connect"));
|
window.getButtons().add(new FormButton("Direct connect"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.getButtons().add(new FormButton("Disconnect"));
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +98,10 @@ public class UIHandler {
|
||||||
servers.addAll(player.getServers());
|
servers.addAll(player.getServers());
|
||||||
|
|
||||||
// Cant be done in a switch as we need to calculate the last 2 buttons
|
// Cant be done in a switch as we need to calculate the last 2 buttons
|
||||||
if (data.getClickedButtonId() == servers.size()) {
|
|
||||||
|
if ((!MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().isEnabled() && data.getClickedButtonId() == servers.size()) || data.getClickedButtonId() == servers.size() + 2) {
|
||||||
|
player.getSession().disconnect("Bye!"); // Seems to be super slow if we specify an empty string
|
||||||
|
} else if (data.getClickedButtonId() == servers.size()) {
|
||||||
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));
|
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));
|
||||||
} else if (data.getClickedButtonId() == servers.size() + 1) {
|
} else if (data.getClickedButtonId() == servers.size() + 1) {
|
||||||
player.sendWindow(FormID.DIRECT_CONNECT, getDirectConnect());
|
player.sendWindow(FormID.DIRECT_CONNECT, getDirectConnect());
|
||||||
|
|
|
@ -46,7 +46,7 @@ public class Player {
|
||||||
|
|
||||||
// Should fetch the servers from some form of db
|
// Should fetch the servers from some form of db
|
||||||
if (MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().isEnabled()) {
|
if (MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().isEnabled()) {
|
||||||
servers.addAll(PlayerStorageManager.loadServers(this));
|
servers.addAll(MasterServer.getInstance().getStorageManager().loadServers(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
package org.geysermc.multi.utils;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonValue;
|
|
||||||
import org.geysermc.multi.MasterServer;
|
|
||||||
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class PlayerStorageManager {
|
|
||||||
|
|
||||||
public static void setupStorage() {
|
|
||||||
if (!MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().isEnabled()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().getStorageType()) {
|
|
||||||
case JSON:
|
|
||||||
File playersFolder = new File("players/");
|
|
||||||
if (!playersFolder.exists()) {
|
|
||||||
playersFolder.mkdirs();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SQLITE:
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void saveServers(Player player, List<Server> servers) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Server> loadServers(Player player) {
|
|
||||||
List<Server> servers = new ArrayList<>();
|
|
||||||
servers.add(new Server("81.174.164.211", 25580));
|
|
||||||
return servers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum StorageType {
|
|
||||||
JSON("json"),
|
|
||||||
SQLITE("sqlite");
|
|
||||||
|
|
||||||
@JsonValue
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
StorageType(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue