diff --git a/hamster-ball-bungeecord/build.gradle b/hamster-ball-bungeecord/build.gradle index 9be566e..af0fd64 100644 --- a/hamster-ball-bungeecord/build.gradle +++ b/hamster-ball-bungeecord/build.gradle @@ -5,6 +5,7 @@ evaluationDependsOn(':hamster-ball-common') dependencies { apiShade(project(":hamster-ball-common")) { transitive = false } + //noinspection VulnerableLibrariesLocal compileOnly 'net.md-5:bungeecord-api:1.19-R0.1-SNAPSHOT' compileOnly "cn.hamster3.mc.plugin.core:bungeecord:${hamster_core_version}" diff --git a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java index 79927dd..b52ebfa 100644 --- a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java +++ b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java @@ -51,14 +51,15 @@ public abstract class BallAPI { @NotNull private final BallConfig config; + @NotNull - private final List listeners; - private final Bootstrap bootstrap; + @NotNull private final EventLoopGroup executors; - protected boolean enabled; protected Channel channel; + @NotNull + private List listeners; protected BallAPI(@NotNull BallConfig config) { this.config = config; @@ -286,6 +287,11 @@ public abstract class BallAPI { if (channel != null) { return; } + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } reconnect(ttl - 1); } @@ -683,12 +689,16 @@ public abstract class BallAPI { } public void addListener(@NotNull BallListener listener) { - listeners.add(listener); - listeners.sort(Comparator.comparing(BallListener::getPriority)); + ArrayList newListeners = new ArrayList<>(listeners); + newListeners.add(listener); + newListeners.sort(Comparator.comparing(BallListener::getPriority)); + listeners = newListeners; } public void removeListener(@NotNull BallListener listener) { - listeners.remove(listener); + ArrayList newListeners = new ArrayList<>(listeners); + newListeners.remove(listener); + listeners = newListeners; } /** diff --git a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java index 507ac72..8a3ff60 100644 --- a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java +++ b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java @@ -27,7 +27,11 @@ public class BallChannelHandler extends SimpleChannelInboundHandler { } if ("connection refused".equals(message)) { for (BallListener listener : BallAPI.getInstance().getListeners()) { - listener.onConnectRefused(); + try { + listener.onConnectRefused(); + } catch (Exception | Error e) { + e.printStackTrace(); + } } return; } diff --git a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelInitializer.java b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelInitializer.java index 321ee74..166a1a3 100644 --- a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelInitializer.java +++ b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelInitializer.java @@ -1,7 +1,7 @@ package cn.hamster3.mc.plugin.ball.common.connector; import io.netty.channel.ChannelInitializer; -import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.LengthFieldBasedFrameDecoder; import io.netty.handler.codec.LengthFieldPrepender; import io.netty.handler.codec.string.StringDecoder; @@ -12,14 +12,14 @@ import org.jetbrains.annotations.NotNull; import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; -public class BallChannelInitializer extends ChannelInitializer { +public class BallChannelInitializer extends ChannelInitializer { public BallChannelInitializer() { } @Override - protected void initChannel(@NotNull NioSocketChannel channel) { + protected void initChannel(@NotNull SocketChannel channel) { channel.pipeline() - .addLast(new IdleStateHandler(0, 7, 0, TimeUnit.SECONDS)) + .addLast(new IdleStateHandler(0, 5, 0, TimeUnit.SECONDS)) .addLast(new BallKeepAliveHandler()) .addLast(new LengthFieldPrepender(8)) .addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 8, 0, 8)) diff --git a/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/config/ServerConfig.java b/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/config/ServerConfig.java index 8e1e439..c15e3b2 100644 --- a/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/config/ServerConfig.java +++ b/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/config/ServerConfig.java @@ -31,8 +31,8 @@ public final class ServerConfig { map = new Yaml().load(stream); } - host = (String) map.get("host"); - port = (int) map.get("port"); + host = map.getOrDefault("host", "localhost").toString(); + port = (int) map.getOrDefault("port", 58888); eventLoopThread = (int) map.getOrDefault("event-loop-thread", 5); enableAcceptList = (boolean) map.get("enable-accept-list"); acceptList = (List) map.get("accept-list"); diff --git a/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/connector/BallServerChannelHandler.java b/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/connector/BallServerChannelHandler.java index b0327eb..dd22fbd 100644 --- a/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/connector/BallServerChannelHandler.java +++ b/hamster-ball-server/src/main/java/cn/hamster3/mc/plugin/ball/server/connector/BallServerChannelHandler.java @@ -20,7 +20,7 @@ public class BallServerChannelHandler extends SimpleChannelInboundHandler { +public class BallServerChannelInitializer extends ChannelInitializer { public static final List CHANNELS = new ArrayList<>(); private static final Logger LOGGER = LoggerFactory.getLogger("BallServerChannelInitializer"); @@ -36,13 +37,26 @@ public class BallServerChannelInitializer extends ChannelInitializer