From affa8c62c268e9a7756ae48104c8a2c038e6c8ea Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 12 May 2017 23:12:36 +0300 Subject: [PATCH 1/2] =?UTF-8?q?Bridge:=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B5=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20-=20=D0=B2=D0=BE=D1=81=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=D0=B2=D0=BB=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC=20?= =?UTF-8?q?=D1=81=D0=B2=D1=8F=D0=B7=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bridge/build.gradle | 2 +- .../java/asys/bridge/bukkit/BridgePlugin.java | 59 +++++++++++++------ .../bridge/client/ClientPacketHandler.java | 4 +- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/bridge/build.gradle b/bridge/build.gradle index 0bbed36..28d7e5b 100644 --- a/bridge/build.gradle +++ b/bridge/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.5-SNAPSHOT' +version = '0.5.1-SNAPSHOT' repositories { maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' } diff --git a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java index 1132cca..2f688ba 100644 --- a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java +++ b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java @@ -28,19 +28,7 @@ public class BridgePlugin extends JavaPlugin { INSTANCE = this; saveDefaultConfig(); - client = new Client(); - ses = Executors.newScheduledThreadPool(2); - sesFuture = ses.scheduleAtFixedRate(() -> { - getLogger().info(String.format("Connect(%d) to ASys...", ++tryConnect)); - client.connect(getConfig().getString("host"), getConfig().getInt("port")); - if (client.isConnected()) { - sesFuture.cancel(false); - sesFuture = null; - } else { - getLogger().warning( - String.format("Connection(%d) fail. Try reconnect...", tryConnect)); - } - }, 0L, 5L, TimeUnit.SECONDS); + startReconnect(); } @Override @@ -65,12 +53,47 @@ public class BridgePlugin extends JavaPlugin { return true; } + public void startReconnect() { + client = new Client(); + ses = Executors.newScheduledThreadPool(2); + sesFuture = ses.scheduleAtFixedRate(() -> { + getLogger().info(String.format("Connect(%d) to ASys...", ++tryConnect)); + client.connect(getConfig().getString("host"), getConfig().getInt("port")); + if (client.isConnected()) { + stopReconnect(); + } else { + getLogger().warning( + String.format("Connection(%d) fail. Try reconnect...", tryConnect)); + } + }, 0L, 5L, TimeUnit.SECONDS); + } + + public void stopReconnect() { + if (sesFuture != null) { + sesFuture.cancel(false); + sesFuture = null; + tryConnect = 0; + } + } + public void startPing(Channel channel) { - sesPingFuture = ses.scheduleAtFixedRate(() -> channel.writeAndFlush(new CS_Ping( - System.currentTimeMillis(), - 20.0D, //FIXME - BridgePlugin.INSTANCE.getServer().getOnlinePlayers().size() - )), 0L, 5L, TimeUnit.SECONDS); + sesPingFuture = ses.scheduleAtFixedRate(() -> { + channel.write(new CS_Ping( + System.currentTimeMillis(), + 20.0D, //FIXME + getServer().getOnlinePlayers().size() + )); + if (channel.isWritable()) { + channel.flush(); + } else { + getLogger().warning("Lost connection!"); + channel.close(); + stopPing(); + + getLogger().warning("Try reconnect..."); + startReconnect(); + } + }, 0L, 5L, TimeUnit.SECONDS); } public void stopPing() { diff --git a/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java index e2c0bd4..94c145b 100644 --- a/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java +++ b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java @@ -53,8 +53,10 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements @Override public void channelInactive(ChannelHandlerContext context) throws Exception { if (BridgePlugin.INSTANCE != null) { - BridgePlugin.INSTANCE.getLogger().info("channelInactive"); + BridgePlugin.INSTANCE.getLogger().warning("Lost connection!"); BridgePlugin.INSTANCE.stopPing(); + BridgePlugin.INSTANCE.getLogger().warning("Try reconnect..."); + BridgePlugin.INSTANCE.startReconnect(); } context.channel().attr(KNOWN_PACKETS).remove(); context.channel().attr(KNOWN_HANDLERS).remove(); From 669698671724ef44bce7b6a51119e767133a1c33 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 12 May 2017 23:44:50 +0300 Subject: [PATCH 2/2] =?UTF-8?q?Core:=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BD=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/build.gradle | 2 +- core/src/main/java/asys/core/Main.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/build.gradle b/core/build.gradle index d5445b3..055b3af 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.3.1-SNAPSHOT' +version = '0.3.2-SNAPSHOT' apply plugin: 'application' diff --git a/core/src/main/java/asys/core/Main.java b/core/src/main/java/asys/core/Main.java index 4248200..31385e6 100644 --- a/core/src/main/java/asys/core/Main.java +++ b/core/src/main/java/asys/core/Main.java @@ -14,8 +14,11 @@ public class Main { private static final Logger logger = LoggerFactory.getLogger("Launcher"); public static void main(String[] args) { - Core asysCore = new Core(); + final Core asysCore = new Core(); asysCore.setConfiguration(getProperties()); + + Runtime.getRuntime().addShutdownHook(new Thread(asysCore::stop)); + asysCore.start(); }