summaryrefslogtreecommitdiff
path: root/serverlist-server
diff options
context:
space:
mode:
authorXavier horwood <39760456+Xavierhorwood@users.noreply.github.com>2024-08-05 21:39:28 -0700
committerGitHub <noreply@github.com>2024-08-06 00:39:28 -0400
commit08e719236f4ede9225e03aac61d54abc4b576294 (patch)
treecd57ee733a878f082d45785659c841270126d8c1 /serverlist-server
parente2fd45373473b81b094b4675056cb99363c83c54 (diff)
downloadBedrockConnect-08e719236f4ede9225e03aac61d54abc4b576294.tar.gz
BedrockConnect-08e719236f4ede9225e03aac61d54abc4b576294.tar.bz2
BedrockConnect-08e719236f4ede9225e03aac61d54abc4b576294.zip
Add Mariadb, Postgresql and auto Reconnect (#520)
* add base code * Add code * add check true * add postgresql driver * Update pom.xml * add table for postgres * add auto_reconnect * Fix line issue * fix relation "idx_uuid" already exists * Change to database instead of mysql * Change more to Database * Upgrade mysql version
Diffstat (limited to 'serverlist-server')
-rw-r--r--serverlist-server/pom.xml12
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java47
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java27
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/DatabaseTypes.java8
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java43
5 files changed, 115 insertions, 22 deletions
diff --git a/serverlist-server/pom.xml b/serverlist-server/pom.xml
index 9083530..00dbe69 100644
--- a/serverlist-server/pom.xml
+++ b/serverlist-server/pom.xml
@@ -122,15 +122,25 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
- <version>8.0.28</version>
+ <version>8.0.33</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
+ <groupId>org.mariadb.jdbc</groupId>
+ <artifactId>mariadb-java-client</artifactId>
+ <version>LATEST</version>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
+ <dependency>
+ <groupId>org.postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <version>42.7.3</version>
+ </dependency>
<!-- Proxy Stuff -->
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
index ec31207..cd1202b 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import main.com.pyratron.pugmatt.bedrockconnect.config.Language;
import main.com.pyratron.pugmatt.bedrockconnect.sql.Data;
+import main.com.pyratron.pugmatt.bedrockconnect.sql.DatabaseTypes;
import main.com.pyratron.pugmatt.bedrockconnect.sql.MySQL;
import main.com.pyratron.pugmatt.bedrockconnect.utils.PaletteManager;
import org.cloudburstmc.netty.channel.raknet.RakConstants;
@@ -12,7 +13,6 @@ import org.json.simple.parser.JSONParser;
import java.io.*;
import java.net.*;
-import java.security.Security;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -63,6 +63,8 @@ public class BedrockConnect {
String password = "";
String port = "19132";
String bindIp = "0.0.0.0";
+ DatabaseTypes databaseType = DatabaseTypes.nosql;
+ boolean autoReconnect = false;
String serverLimit = "100";
@@ -104,16 +106,16 @@ public class BedrockConnect {
for (Map.Entry<String, String> setting : settings.entrySet()) {
switch(setting.getKey().toLowerCase()) {
- case "mysql_host":
+ case "db_host":
hostname = setting.getValue();
break;
- case "mysql_db":
+ case "db_db":
database = setting.getValue();
break;
- case "mysql_user":
+ case "db_user":
username = setting.getValue();
break;
- case "mysql_pass":
+ case "db_pass":
password = setting.getValue();
break;
case "server_limit":
@@ -123,7 +125,25 @@ public class BedrockConnect {
port = setting.getValue();
break;
case "nodb":
- noDB = setting.getValue().equalsIgnoreCase("true");
+ //noDB = setting.getValue().equalsIgnoreCase("true");
+ if (setting.getValue().equalsIgnoreCase("true"))
+ {
+ databaseType = DatabaseTypes.nosql;
+ noDB = setting.getValue().equalsIgnoreCase("true");
+ }
+
+ break;
+ case "mysql":
+ if (setting.getValue().equalsIgnoreCase("true"))
+ databaseType = DatabaseTypes.mysql;
+ break;
+ case "mairadb":
+ if (setting.getValue().equalsIgnoreCase("true"))
+ databaseType = DatabaseTypes.mairadb;
+ break;
+ case "postgres":
+ if (setting.getValue().equalsIgnoreCase("true"))
+ databaseType = DatabaseTypes.postgres;
break;
case "custom_servers":
customServers = setting.getValue();
@@ -215,13 +235,16 @@ public class BedrockConnect {
case "global_packet_limit":
globalPacketLimit = Integer.parseInt(setting.getValue());
break;
+ case "auto_reconnect":
+ autoReconnect = setting.getValue().equalsIgnoreCase("true");
+ break;
}
}
if(!noDB)
- System.out.println("MySQL Host: " + hostname + "\n" +
- "MySQL Database: " + database + "\n" +
- "MySQL User: " + username);
+ System.out.println("Database Host: " + hostname + "\n" +
+ "Database: " + database + "\n" +
+ "Database User: " + username);
System.out.println("\nServer Limit: " + serverLimit + "\n" + "Port: " + port + "\n");
@@ -273,13 +296,13 @@ public class BedrockConnect {
}
if(!noDB) {
- MySQL = new MySQL(hostname, database, username, password);
+ MySQL = new MySQL(hostname, database, username, password, databaseType, autoReconnect);
connection = null;
connection = MySQL.openConnection();
- data = new Data(serverLimit);
+ data = new Data(serverLimit, databaseType);
// Keep MySQL connection alive
Timer timer = new Timer();
@@ -315,7 +338,7 @@ public class BedrockConnect {
};
timer.scheduleAtFixedRate(task, 0L, 60 * 1000);
} else {
- data = new Data(serverLimit);
+ data = new Data(serverLimit, databaseType);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() { }
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java
index 2be6ac4..55d7dc9 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java
@@ -23,21 +23,23 @@ public class Data {
String serverLimit;
- public Data(String serverLimit) {
+ public Data(String serverLimit, DatabaseTypes database) {
this.serverLimit = serverLimit;
if(!BedrockConnect.noDB) {
try {
- createTables();
+ createTables((database == DatabaseTypes.postgres));
} catch (Exception e) {
errorAlert(e);
}
}
}
- public void createTables() throws SQLException {
+ public void createTables(boolean postgres) throws SQLException {
// Create table if table does not exist
- String sqlCreate = "CREATE TABLE IF NOT EXISTS servers"
+ String sqlCreate = "";
+ if (!postgres)
+ sqlCreate = "CREATE TABLE IF NOT EXISTS servers"
+ " (id INTEGER PRIMARY KEY AUTO_INCREMENT,"
+ " uuid TEXT,"
+ " name TEXT,"
@@ -45,6 +47,23 @@ public class Data {
+ " serverLimit INTEGER,"
+ " INDEX (uuid(255))"
+ ");";
+ else
+ sqlCreate = "DO $$\n" +
+ "BEGIN\n" +
+ " IF NOT EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'servers') THEN\n" +
+ " CREATE TABLE servers (\n" +
+ " id SERIAL PRIMARY KEY,\n" +
+ " uuid TEXT,\n" +
+ " name TEXT,\n" +
+ " servers TEXT,\n" +
+ " serverLimit INTEGER\n" +
+ " );\n" +
+ " END IF;\n" +
+ "\n" +
+ " IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_uuid') THEN\n" +
+ " CREATE INDEX idx_uuid ON servers(uuid);\n" +
+ " END IF;\n" +
+ "END $$;\n";
Statement stmt = BedrockConnect.connection.createStatement();
stmt.execute(sqlCreate);
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/DatabaseTypes.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/DatabaseTypes.java
new file mode 100644
index 0000000..553c297
--- /dev/null
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/DatabaseTypes.java
@@ -0,0 +1,8 @@
+package main.com.pyratron.pugmatt.bedrockconnect.sql;
+
+public enum DatabaseTypes {
+ nosql,
+ mysql,
+ mairadb,
+ postgres,
+}
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java
index c2bd20c..abcb2ff 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java
@@ -21,6 +21,10 @@ public class MySQL extends Database {
private final String password;
private final String hostname;
+ private final DatabaseTypes databasetype;
+
+ private final Boolean autoReconnect;
+
private Connection connection;
/**
@@ -35,23 +39,52 @@ public class MySQL extends Database {
* @param password
* Password
*/
- public MySQL(String hostname, String database, String username, String password) {
+ public MySQL(String hostname, String database, String username, String password, DatabaseTypes databasetype, Boolean autoReconnect) {
this.hostname = hostname;
this.database = database;
this.user = username;
this.password = password;
this.connection = null;
+ this.databasetype = databasetype;
+ this.autoReconnect = autoReconnect;
}
@Override
public Connection openConnection() {
try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- connection = DriverManager.getConnection("jdbc:mysql://" + this.hostname + "/" + this.database + "?serverTimezone=UTC&useLegacyDatetimeCode=false", this.user, this.password);
- System.out.println("- MySQL Connection Started -");
+ String Driver = "";
+
+ switch (databasetype)
+ {
+ case mysql:
+ Class.forName("com.mysql.cj.jdbc.Driver");
+ Driver = "jdbc:mysql://";
+ break;
+ case mairadb:
+ Class.forName("org.mariadb.jdbc.Driver");
+ Driver = "jdbc:mariadb://";
+ break;
+ case postgres:
+ Class.forName("org.postgresql.Driver");
+ Driver = "jdbc:postgresql://";
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported database type: " + databasetype);
+ }
+
+ String Extra = "";
+
+ if (autoReconnect)
+ {
+ Extra += "&autoReconnect=true";
+ }
+
+
+ connection = DriverManager.getConnection(Driver + this.hostname + "/" + this.database + "?serverTimezone=UTC&useLegacyDatetimeCode=false" + Extra, this.user, this.password);
+ System.out.println("- Database Connection Started -");
} catch (SQLException e) {
- System.out.println("ERROR: Could not connect to MySQL server! because: " + e.getMessage());
+ System.out.println("ERROR: Could not connect to Database server! because: " + e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println("ERROR: JDBC Driver not found!");
}