diff options
| author | Pugdoot <pugmatt@gmail.com> | 2025-05-24 12:28:47 -0400 |
|---|---|---|
| committer | Pugdoot <pugmatt@gmail.com> | 2025-05-24 19:21:58 -0400 |
| commit | 019a0cfafd87c027c58271cccb7b033e2fe4f642 (patch) | |
| tree | 56bed33a9444414b7175a602007e8cdcc8f9fcf9 /serverlist-server | |
| parent | d2108c793ad6b41c87654ea893156e38caeff783 (diff) | |
| download | BedrockConnect-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')
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 /> |
