summaryrefslogtreecommitdiff
path: root/serverlist-server
diff options
context:
space:
mode:
authorPugdoot <pugmatt@gmail.com>2025-05-24 12:28:47 -0400
committerPugdoot <pugmatt@gmail.com>2025-05-24 19:21:58 -0400
commit019a0cfafd87c027c58271cccb7b033e2fe4f642 (patch)
tree56bed33a9444414b7175a602007e8cdcc8f9fcf9 /serverlist-server
parentd2108c793ad6b41c87654ea893156e38caeff783 (diff)
downloadBedrockConnect-019a0cfafd87c027c58271cccb7b033e2fe4f642.tar.gz
BedrockConnect-019a0cfafd87c027c58271cccb7b033e2fe4f642.tar.bz2
BedrockConnect-019a0cfafd87c027c58271cccb7b033e2fe4f642.zip
Various Fixes
- Fix issue with the "Edit Server" action where a misplaced leading comma is placed when no display name is entered - Fix potential concurrency issues with player array list - Remove unnecessary second SQL query when grabbing player data from database
Diffstat (limited to 'serverlist-server')
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/data/DataUtil.java42
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/BCPlayer.java7
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/PacketHandler.java9
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/Server.java20
-rw-r--r--serverlist-server/src/main/resources/log4j2.xml2
5 files changed, 37 insertions, 43 deletions
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/data/DataUtil.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/data/DataUtil.java
index c5ae527..e33060f 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/data/DataUtil.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/data/DataUtil.java
@@ -136,32 +136,24 @@ public class DataUtil {
if (BedrockConnect.getConfig().isUsingDatabase()) {
new Thread(() -> {
try {
- PreparedStatement searchUUID = database.getConnection()
- .prepareStatement("SELECT COUNT(*) AS total FROM servers where uuid = ?");
- searchUUID.setString(1, uuid);
- ResultSet RS = searchUUID.executeQuery();
- while (RS.next()) {
- if (RS.getInt("total") > 0) {
- PreparedStatement getUser = database.getConnection()
- .prepareStatement("SELECT * FROM servers WHERE uuid = ?;");
- getUser.setString(1, uuid);
- ResultSet rs = getUser.executeQuery();
- while (rs.next()) {
- if (BedrockConnect.getConfig().canStoreDisplayNames() && !rs.getString("name").equals(name)) {
- PreparedStatement updateUUID = database.getConnection()
- .prepareStatement("UPDATE servers SET name = ? WHERE uuid = ?");
- updateUUID.setString(1, name);
- updateUUID.setString(2, uuid);
- updateUUID.executeUpdate();
- }
- BCPlayer p = getPlayer(rs, name, uuid, session);
- packetHandler.setPlayer(p);
- if (p != null)
- BedrockConnect.getServer().addPlayer(p);
- }
- } else {
- createPlayerRecord(uuid, name, session, packetHandler);
+ PreparedStatement getUser = database.getConnection()
+ .prepareStatement("SELECT * FROM servers WHERE uuid = ?;");
+ getUser.setString(1, uuid);
+ ResultSet rs = getUser.executeQuery();
+ if (rs.next()) {
+ if (BedrockConnect.getConfig().canStoreDisplayNames() && !rs.getString("name").equals(name)) {
+ PreparedStatement updateUUID = database.getConnection()
+ .prepareStatement("UPDATE servers SET name = ? WHERE uuid = ?");
+ updateUUID.setString(1, name);
+ updateUUID.setString(2, uuid);
+ updateUUID.executeUpdate();
}
+ BCPlayer p = getPlayer(rs, name, uuid, session);
+ packetHandler.setPlayer(p);
+ if (p != null)
+ BedrockConnect.getServer().addPlayer(p);
+ } else {
+ createPlayerRecord(uuid, name, session, packetHandler);
}
} catch (Exception e) {
errorAlert(e);
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/BCPlayer.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/BCPlayer.java
index 5d56c54..8cf38e3 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/BCPlayer.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/BCPlayer.java
@@ -81,9 +81,10 @@ public class BCPlayer {
return session;
}
- public void disconnect(String reason, Server server) {
- session.disconnect(reason);
- server.removePlayer(this);
+ public void disconnect(String reason) {
+ if (session != null && session.isConnected())
+ session.disconnect(reason);
+ BedrockConnect.getServer().removePlayer(this);
}
public List<String> getServerList() {
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/PacketHandler.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/PacketHandler.java
index e256c7b..752200c 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/PacketHandler.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/PacketHandler.java
@@ -138,7 +138,7 @@ public class PacketHandler implements BedrockPacketHandler {
int chosen = Integer.parseInt(packet.getFormData().replaceAll("\\s+",""));
CustomEntry[] customServers = BedrockConnect.getConfig().getCustomServers();
- List<String> playerServers = BedrockConnect.getServer().getPlayer(uuid).getServerList();
+ List<String> playerServers = player.getServerList();
MainFormButton button = UIForms.getMainFormButton(chosen, customServers, playerServers);
@@ -152,10 +152,10 @@ public class PacketHandler implements BedrockPacketHandler {
player.openForm(UIForms.MANAGE_SERVER);
break;
case EXIT:
- player.disconnect(BedrockConnect.getConfig().getLanguage().getWording("disconnect", "exit"), BedrockConnect.getServer());
+ player.disconnect(BedrockConnect.getConfig().getLanguage().getWording("disconnect", "exit"));
break;
case USER_SERVER:
- String address = BedrockConnect.getServer().getPlayer(uuid).getServerList().get(serverIndex);
+ String address = player.getServerList().get(serverIndex);
if (address.split(":").length > 1) {
String ip = address.split(":")[0];
@@ -356,7 +356,8 @@ public class PacketHandler implements BedrockPacketHandler {
String name = data.get(2);
if(UIComponents.validateServerInfo(address, port, name, player)) {
- String value = address + ":" + port + ":" + name;
+ String value = address + ":" + port;
+ if(!name.isEmpty()) value += ":" + name;
List<String> servers = player.getServerList();
servers.set(player.getEditingServer(), value);
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/Server.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/Server.java
index 22eead3..17049e6 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/Server.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/server/Server.java
@@ -17,6 +17,7 @@ import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitiali
import java.net.BindException;
import java.net.InetSocketAddress;
import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
public class Server {
@@ -26,16 +27,16 @@ public class Server {
public static final ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
public static final YAMLMapper YAML_MAPPER = (YAMLMapper) new YAMLMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
- private List<BCPlayer> players;
+ private CopyOnWriteArrayList<BCPlayer> players;
- public List<BCPlayer> getPlayers() {
+ public CopyOnWriteArrayList<BCPlayer> getPlayers() {
return players;
}
public BCPlayer getPlayer(String uuid) {
- for(int i=0;i<players.size();i++) {
- if(players.get(i) != null && players.get(i).getUuid() != null && players.get(i).getUuid() == uuid)
- return players.get(i);
+ for (BCPlayer player : players) {
+ if(player != null && player.getUuid() != null && player.getUuid() == uuid)
+ return player;
}
return null;
}
@@ -52,8 +53,7 @@ public class Server {
public Server(String bindIp, String port) {
try {
- Server current = this;
- players = new ArrayList<>();
+ players = new CopyOnWriteArrayList<>();
InetSocketAddress bindAddress = new InetSocketAddress(bindIp, Integer.parseInt(port));
@@ -88,9 +88,9 @@ public class Server {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
- for (int i = 0; i < players.size(); i++) {
- if (players.get(i) != null && !players.get(i).isActive())
- players.get(i).disconnect(BedrockConnect.getConfig().getLanguage().getWording("disconnect", "inactivity"), current);
+ for (BCPlayer player : players) {
+ if(player != null && !player.isActive())
+ player.disconnect(BedrockConnect.getConfig().getLanguage().getWording("disconnect", "inactivity"));
}
}
};
diff --git a/serverlist-server/src/main/resources/log4j2.xml b/serverlist-server/src/main/resources/log4j2.xml
index a5233b8..55f0fea 100644
--- a/serverlist-server/src/main/resources/log4j2.xml
+++ b/serverlist-server/src/main/resources/log4j2.xml
@@ -10,7 +10,7 @@
<PatternLayout pattern="${LOG_PATTERN}" />
</Console>
<SystemPropertyArbiter propertyName="logFile" propertyValue="true">
- <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
+ <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/bc-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN_NO_COLOR}" />
<Policies>
<TimeBasedTriggeringPolicy />