perf: 重写部分代码

This commit is contained in:
2023-05-31 04:54:18 +08:00
parent 66441d41b6
commit 89665433db
3 changed files with 27 additions and 3 deletions

View File

@@ -39,6 +39,13 @@ public class HamsterBallPlugin extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
Logger logger = getLogger(); Logger logger = getLogger();
if (!BallAPI.getInstance().isConnected()) {
sync(() -> {
logger.info("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
Bukkit.shutdown();
});
return;
}
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
PlaceholderHook.INSTANCE.register(); PlaceholderHook.INSTANCE.register();
logger.info("已挂载 PlaceholderAPI 变量!"); logger.info("已挂载 PlaceholderAPI 变量!");

View File

@@ -36,6 +36,10 @@ public class HamsterBallPlugin extends Plugin {
@Override @Override
public void onEnable() { public void onEnable() {
Logger logger = getLogger(); Logger logger = getLogger();
if (!BallAPI.getInstance().isConnected()) {
ProxyServer.getInstance().stop("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
return;
}
ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE); ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE);
logger.info("已注册 BallBungeeCordListener."); logger.info("已注册 BallBungeeCordListener.");
BallAPI.getInstance().sendBallMessage( BallAPI.getInstance().sendBallMessage(
@@ -44,7 +48,8 @@ public class HamsterBallPlugin extends Plugin {
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()) new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
); );
logger.info("HamsterBall 已启动."); logger.info("HamsterBall 已启动.");
BallAPI.getInstance().getAllPlayerInfo().values().stream() BallAPI.getInstance().getAllPlayerInfo().values()
.stream()
.filter(BallPlayerInfo::isOnline) .filter(BallPlayerInfo::isOnline)
.filter(o -> BallAPI.getInstance().isLocalServer(o.getProxyServer())) .filter(o -> BallAPI.getInstance().isLocalServer(o.getProxyServer()))
.forEach(playerInfo -> { .forEach(playerInfo -> {

View File

@@ -56,14 +56,17 @@ public abstract class BallAPI {
private final Bootstrap bootstrap; private final Bootstrap bootstrap;
@NotNull @NotNull
private final EventLoopGroup executors; private final EventLoopGroup executors;
protected boolean enabled;
protected Channel channel; protected Channel channel;
private boolean enabled;
private boolean connected;
@NotNull @NotNull
private List<BallListener> listeners; private List<BallListener> listeners;
protected BallAPI(@NotNull BallConfig config) { protected BallAPI(@NotNull BallConfig config) {
this.config = config; this.config = config;
this.enabled = false; this.enabled = false;
this.connected = false;
serverInfo = new ConcurrentHashMap<>(); serverInfo = new ConcurrentHashMap<>();
playerInfo = new ConcurrentHashMap<>(); playerInfo = new ConcurrentHashMap<>();
@@ -154,6 +157,7 @@ public abstract class BallAPI {
@Override @Override
public void onConnectRefused() { public void onConnectRefused() {
enabled = false; enabled = false;
connected = false;
executors.shutdownGracefully(); executors.shutdownGracefully();
getLogger().info("连接至服务中心的请求被拒绝,已关闭仓鼠球。"); getLogger().info("连接至服务中心的请求被拒绝,已关闭仓鼠球。");
} }
@@ -252,6 +256,7 @@ public abstract class BallAPI {
ChannelFuture future = bootstrap.connect(config.getHost(), config.getPort()).await(); ChannelFuture future = bootstrap.connect(config.getHost(), config.getPort()).await();
if (future.isSuccess()) { if (future.isSuccess()) {
channel = future.channel(); channel = future.channel();
connected = true;
for (BallListener listener : listeners) { for (BallListener listener : listeners) {
listener.onConnectActive(); listener.onConnectActive();
} }
@@ -269,6 +274,7 @@ public abstract class BallAPI {
return; return;
} }
channel = null; channel = null;
connected = false;
if (tryCount <= 0) { if (tryCount <= 0) {
for (BallListener listener : getListeners()) { for (BallListener listener : getListeners()) {
try { try {
@@ -281,7 +287,7 @@ public abstract class BallAPI {
} }
try { try {
connect(); connect();
} catch (InterruptedException e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
if (channel != null) { if (channel != null) {
@@ -320,6 +326,7 @@ public abstract class BallAPI {
} }
channel = null; channel = null;
connected = false;
executors.shutdownGracefully().await(); executors.shutdownGracefully().await();
} }
@@ -813,6 +820,11 @@ public abstract class BallAPI {
return info.getName(); return info.getName();
} }
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
public boolean isConnected() {
return connected;
}
@NotNull @NotNull
public Map<String, BallServerInfo> getAllServerInfo() { public Map<String, BallServerInfo> getAllServerInfo() {
return serverInfo; return serverInfo;