Skip to content

Commit 9914341

Browse files
authored
Merge pull request BGHDDevelopment#6 from jamezrin/dev
Fix memory leak and revert to stable state
2 parents 99a0b40 + ce5a7d6 commit 9914341

File tree

8 files changed

+95
-83
lines changed

8 files changed

+95
-83
lines changed

balancer/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<parent>
88
<groupId>com.jaimemartz</groupId>
9-
<version>2.1.5.5-SNAPSHOT</version>
9+
<version>2.1.6-SNAPSHOT</version>
1010
<artifactId>playerbalancer-parent</artifactId>
1111
</parent>
1212

@@ -66,7 +66,7 @@
6666
<dependency>
6767
<groupId>net.md-5</groupId>
6868
<artifactId>bungeecord-proxy</artifactId>
69-
<version>1.12-SNAPSHOT</version>
69+
<version>1.13-SNAPSHOT</version>
7070
<scope>provided</scope>
7171
</dependency>
7272
<dependency>
@@ -91,7 +91,7 @@
9191
<dependency>
9292
<groupId>org.bstats</groupId>
9393
<artifactId>bstats-bungeecord</artifactId>
94-
<version>1.2</version>
94+
<version>1.4</version>
9595
<scope>compile</scope>
9696
</dependency>
9797
</dependencies>

balancer/src/main/java/com/jaimemartz/playerbalancer/PlayerBalancer.java

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@
2626
import java.net.URL;
2727
import java.net.URLConnection;
2828
import java.nio.file.Files;
29-
import java.util.logging.Handler;
29+
import java.util.logging.FileHandler;
3030
import java.util.logging.Level;
31-
import java.util.logging.LogRecord;
3231

3332
public class PlayerBalancer extends Plugin {
3433
private boolean failed = false;
@@ -37,37 +36,23 @@ public class PlayerBalancer extends Plugin {
3736
private SectionManager sectionManager;
3837
private NetworkManager networkManager;
3938
private ConfigurationLoader<CommentedConfigurationNode> loader;
40-
private final StringBuilder logsBuilder = new StringBuilder();
4139

4240
private FallbackCommand fallbackCommand;
43-
private Command mainCommand, manageCommand, findCommand, listCommand, serverCommand;
41+
private Command mainCommand, manageCommand;
4442
private Listener connectListener, kickListener, reloadListener, pluginMessageListener;
4543

44+
public static final String LOG_FILE_PATTERN = "balancer.log";
45+
4646
@Override
4747
public void onLoad() {
48-
Handler handler = new Handler() {
49-
@Override
50-
public void publish(LogRecord record) {
51-
if (isLoggable(record)) {
52-
String formatted = getFormatter().format(record);
53-
logsBuilder.append(formatted);
54-
}
55-
}
56-
57-
@Override
58-
public void flush() {
59-
logsBuilder.setLength(0);
60-
}
61-
62-
@Override
63-
public void close() throws SecurityException {
64-
//Nothing to do
65-
}
66-
};
67-
68-
handler.setFormatter(new CustomFormatter());
69-
getProxy().getLogger().addHandler(handler);
70-
getProxy().getLogger().setUseParentHandlers(true);
48+
try {
49+
FileHandler handler = new FileHandler(LOG_FILE_PATTERN);
50+
handler.setFormatter(new CustomFormatter());
51+
getProxy().getLogger().addHandler(handler);
52+
getProxy().getLogger().setUseParentHandlers(true);
53+
} catch (Exception e) {
54+
getLogger().log(Level.WARNING, "Could not set custom log handler", e);
55+
}
7156
}
7257

7358
@Override
@@ -143,7 +128,7 @@ private void execStart() {
143128
}
144129

145130
networkManager = new NetworkManager(this);
146-
getProxy().registerChannel("BungeeCord");
131+
147132
sectionManager = new SectionManager(this);
148133
sectionManager.load();
149134

@@ -305,8 +290,4 @@ public NetworkManager getNetworkManager() {
305290
public FallbackCommand getFallbackCommand() {
306291
return fallbackCommand;
307292
}
308-
309-
public StringBuilder getLogsBuilder() {
310-
return logsBuilder;
311-
}
312293
}

balancer/src/main/java/com/jaimemartz/playerbalancer/helper/PasteHelper.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@
1414
import java.io.FileInputStream;
1515
import java.io.InputStreamReader;
1616
import java.net.URL;
17+
import java.nio.charset.StandardCharsets;
1718
import java.util.function.BiConsumer;
1819

20+
import static com.jaimemartz.playerbalancer.PlayerBalancer.LOG_FILE_PATTERN;
21+
1922
public enum PasteHelper {
2023
PLUGIN((sender, address) -> {
2124
if (sender instanceof ProxiedPlayer) {
@@ -56,7 +59,7 @@ public URL paste(PlayerBalancer plugin) throws Exception {
5659
public URL paste(PlayerBalancer plugin) throws Exception {
5760
File file = new File("config.yml");
5861
try (FileInputStream stream = new FileInputStream(file)) {
59-
try (InputStreamReader reader = new InputStreamReader(stream, "UTF-8")) {
62+
try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
6063
String content = CharStreams.toString(reader);
6164
content = content.replaceAll("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}", "?.?.?.?");
6265
HastebinPaste paste = new HastebinPaste("https://file.properties/paste/", content);
@@ -79,11 +82,14 @@ public URL paste(PlayerBalancer plugin) throws Exception {
7982
}, false) {
8083
@Override
8184
public URL paste(PlayerBalancer plugin) throws Exception {
82-
HastebinPaste paste = new HastebinPaste("https://file.properties/paste/",
83-
plugin.getLogsBuilder().toString()
84-
);
85-
86-
return paste.paste();
85+
File file = new File(LOG_FILE_PATTERN);
86+
try (FileInputStream stream = new FileInputStream(file)) {
87+
try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
88+
String content = CharStreams.toString(reader);
89+
HastebinPaste paste = new HastebinPaste("https://file.properties/paste/", content);
90+
return paste.paste();
91+
}
92+
}
8793
}
8894
};
8995

balancer/src/main/java/com/jaimemartz/playerbalancer/listeners/PluginMessageListener.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@
1616
import net.md_5.bungee.api.event.PluginMessageEvent;
1717
import net.md_5.bungee.api.plugin.Listener;
1818
import net.md_5.bungee.event.EventHandler;
19-
import net.md_5.bungee.event.EventPriority;
2019

2120
import java.io.ByteArrayOutputStream;
2221
import java.io.DataOutputStream;
2322
import java.io.IOException;
24-
import java.util.Collection;
25-
import java.util.stream.Collectors;
2623

2724
public class PluginMessageListener implements Listener {
2825
private final PlayerBalancer plugin;
@@ -41,7 +38,7 @@ public PluginMessageListener(PlayerBalancer plugin) {
4138
gson = builder.create();
4239
}
4340

44-
@EventHandler(priority = EventPriority.LOWEST)
41+
@EventHandler
4542
public void onPluginMessage(PluginMessageEvent event) {
4643
if (event.getTag().equals("PlayerBalancer") && event.getSender() instanceof Server) {
4744
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());

balancer/src/main/java/com/jaimemartz/playerbalancer/listeners/ServerConnectListener.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99
import net.md_5.bungee.api.Callback;
1010
import net.md_5.bungee.api.config.ServerInfo;
1111
import net.md_5.bungee.api.connection.ProxiedPlayer;
12-
import net.md_5.bungee.api.event.PostLoginEvent;
13-
import net.md_5.bungee.api.event.PreLoginEvent;
1412
import net.md_5.bungee.api.event.ServerConnectEvent;
15-
import net.md_5.bungee.api.event.ServerConnectedEvent;
1613
import net.md_5.bungee.api.plugin.Listener;
1714
import net.md_5.bungee.event.EventHandler;
1815
import net.md_5.bungee.event.EventPriority;

balancer/src/main/java/com/jaimemartz/playerbalancer/section/SectionManager.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,11 @@ public void execute(String sectionName, SectionProps sectionProps, ServerSection
128128
@Override
129129
public void execute(String sectionName, SectionProps sectionProps, ServerSection section) throws RuntimeException {
130130
if (sectionProps.getServerName() != null) {
131-
SectionServer server = new SectionServer(plugin, section);
132-
plugin.getProxy().getPluginManager().registerListener(plugin, server);
131+
SectionServer server = new SectionServer(props, section);
132+
section.setServer(server);
133+
plugin.getSectionManager().registerServer(server, section);
134+
FixedAdapter.getFakeServers().put(server.getName(), server);
135+
plugin.getProxy().getServers().put(server.getName(), server);
133136
}
134137
}
135138
});
Lines changed: 60 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
package com.jaimemartz.playerbalancer.section;
22

3-
import com.google.common.io.ByteArrayDataInput;
4-
import com.google.common.io.ByteStreams;
5-
import com.jaimemartz.playerbalancer.PlayerBalancer;
6-
import com.jaimemartz.playerbalancer.connection.ConnectionIntent;
7-
import com.jaimemartz.playerbalancer.listeners.PluginMessageListener;
83
import com.jaimemartz.playerbalancer.settings.props.features.BalancerProps;
94
import net.md_5.bungee.BungeeServerInfo;
105
import net.md_5.bungee.api.Callback;
@@ -13,43 +8,76 @@
138
import net.md_5.bungee.api.chat.TextComponent;
149
import net.md_5.bungee.api.config.ServerInfo;
1510
import net.md_5.bungee.api.connection.ProxiedPlayer;
16-
import net.md_5.bungee.api.connection.Server;
17-
import net.md_5.bungee.api.event.PluginMessageEvent;
18-
import net.md_5.bungee.api.plugin.Listener;
19-
import net.md_5.bungee.event.EventHandler;
20-
import net.md_5.bungee.event.EventPriority;
2111

2212
import java.net.InetSocketAddress;
2313
import java.util.Collection;
2414
import java.util.Collections;
2515
import java.util.stream.Collectors;
2616

27-
public class SectionServer implements Listener {
28-
private final PlayerBalancer plugin;
17+
public class SectionServer extends BungeeServerInfo {
18+
private final BalancerProps props;
2919
private final ServerSection section;
3020

31-
public SectionServer(PlayerBalancer plugin, ServerSection section) {
32-
this.plugin = plugin;
21+
public SectionServer(BalancerProps props, ServerSection section) {
22+
super(
23+
"@" + section.getProps().getServerName(),
24+
new InetSocketAddress("0.0.0.0", (int) Math.floor(Math.random() * (0xFFFF + 1))),
25+
"Section server of " + section.getName(),
26+
false
27+
);
28+
29+
this.props = props;
3330
this.section = section;
3431
}
3532

36-
@EventHandler(priority = EventPriority.LOWEST)
37-
public void on(PluginMessageEvent event) {
38-
if (event.getTag().equals("BungeeCord")) {
39-
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
40-
String request = in.readUTF();
41-
42-
if (request.equals("Connect")) {
43-
if (event.getReceiver() instanceof ProxiedPlayer) {
44-
ProxiedPlayer player = (ProxiedPlayer) event.getReceiver();
45-
String target = in.readUTF();
46-
47-
if (target.equals("@" + section.getProps().getServerName())) {
48-
ConnectionIntent.simple(plugin, player, section);
49-
event.setCancelled(true);
50-
}
51-
}
52-
}
53-
}
33+
@Override
34+
public Collection<ProxiedPlayer> getPlayers() {
35+
if (props.isShowPlayers()) {
36+
return section.getServers().stream()
37+
.map(ServerInfo::getPlayers)
38+
.flatMap(Collection::stream)
39+
.collect(Collectors.toList());
40+
} else return Collections.emptyList();
41+
}
42+
43+
@Override
44+
public void sendData(String channel, byte[] data) {
45+
this.sendData(channel, data, true);
46+
}
47+
48+
@Override
49+
public boolean sendData(String channel, byte[] data, boolean queue) {
50+
//Nothing to do
51+
return true;
52+
}
53+
54+
@Override
55+
public void ping(Callback<ServerPing> callback) {
56+
this.ping(callback, ProxyServer.getInstance().getProtocolVersion());
57+
}
58+
59+
@Override
60+
public void ping(Callback<ServerPing> callback, int protocolVersion) {
61+
ServerPing ping = new ServerPing();
62+
63+
ping.setDescriptionComponent(new TextComponent(
64+
TextComponent.fromLegacyText(this.getMotd())
65+
));
66+
67+
ping.setVersion(new ServerPing.Protocol(
68+
ProxyServer.getInstance().getName(),
69+
protocolVersion
70+
));
71+
72+
Collection<ProxiedPlayer> players = getPlayers();
73+
ping.setPlayers(new ServerPing.Players(
74+
Integer.MAX_VALUE,
75+
players.size(),
76+
players.stream().map(
77+
player -> new ServerPing.PlayerInfo(player.getName(), player.getUniqueId())
78+
).toArray(ServerPing.PlayerInfo[]::new)
79+
));
80+
81+
callback.done(ping, null);
5482
}
5583
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.jaimemartz</groupId>
88
<artifactId>playerbalancer-parent</artifactId>
9-
<version>2.1.5.5-SNAPSHOT</version>
9+
<version>2.1.6-SNAPSHOT</version>
1010
<packaging>pom</packaging>
1111

1212
<modules>

0 commit comments

Comments
 (0)