From 9ca608d7e76003e3809f2fc8f666db1a92eba14f Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 29 Apr 2017 02:56:28 +0300 Subject: [PATCH] =?UTF-8?q?Bridge:=20=D1=83=D1=81=D0=BF=D0=B5=D1=88=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20handshake?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bridge/build.gradle | 12 ++++++- .../java/asys/bridge/bukkit/BridgePlugin.java | 34 ++++++++++++++++--- .../main/java/asys/bridge/client/Client.java | 16 +++++++-- .../bridge/client/ClientPacketHandler.java | 27 +++++++++++++-- bridge/src/main/resources/plugin.yml | 4 +-- mcserver-manager/build.gradle | 2 +- .../server/ServerPacketHandler.java | 12 +++++-- 7 files changed, 91 insertions(+), 16 deletions(-) diff --git a/bridge/build.gradle b/bridge/build.gradle index 3f09b2a..9abe9b7 100644 --- a/bridge/build.gradle +++ b/bridge/build.gradle @@ -1,10 +1,16 @@ group = 'asys' -version = '0.1-SNAPSHOT' +version = '0.3-SNAPSHOT' repositories { maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' } } +processResources { + filesMatching('**/plugin.yml') { + filter { it.replace('${version}', project.version) } + } +} + configurations { include compile.extendsFrom include @@ -23,6 +29,10 @@ dependencies { include files(project(':bridge-protocol').sourceSets.main.output.classesDir) compile (group: 'org.bukkit', name: 'bukkit', version: '1.8.8-R0.1-SNAPSHOT') { exclude group: 'junit' + exclude group: 'commons-lang' + exclude group: 'com.googlecode.json-simple' + exclude group: 'com.google.code.gson' + exclude group: 'org.avaje' } compile group: 'io.netty', name: 'netty-codec', version: nettyVersion } diff --git a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java index c1ee5eb..c448dc8 100644 --- a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java +++ b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java @@ -9,20 +9,46 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; +import java.util.concurrent.*; + public class BridgePlugin extends JavaPlugin { + public static BridgePlugin INSTANCE; private Client client; + private ScheduledFuture sesFuture; + private int tryConnect = 0; @Override public void onEnable() { - getLogger().info("Connect to ASys..."); + INSTANCE = this; client = new Client(); - client.connect("127.0.0.1", 8779); + + ScheduledExecutorService ses = Executors.newScheduledThreadPool(1); + sesFuture = ses.scheduleAtFixedRate(() -> { + getLogger().info(String.format("Connect(%d) to ASys...", ++tryConnect)); + client.connect("127.0.0.1", 8779); + if (client.isConnected()) { + getLogger().info(String.format("Connect(%d) OK", tryConnect)); + sesFuture.cancel(false); + sesFuture = null; + } else { + getLogger().warning( + String.format("Connection(%d) fail. Try reconnect...", tryConnect)); + } + }, 0L, 5L, TimeUnit.SECONDS); } @Override public void onDisable() { - getLogger().info("Disconnect..."); - client.disconnect(); + if (sesFuture != null) { + sesFuture.cancel(false); + } + + if (client.isConnected()) { + getLogger().info("Disconnect..."); + client.disconnect(); + } + + INSTANCE = null; } @Override diff --git a/bridge/src/main/java/asys/bridge/client/Client.java b/bridge/src/main/java/asys/bridge/client/Client.java index 4c74b03..df6fd0c 100644 --- a/bridge/src/main/java/asys/bridge/client/Client.java +++ b/bridge/src/main/java/asys/bridge/client/Client.java @@ -8,6 +8,7 @@ import asys.mcsmanager.packets.codec.PacketDecoder; import asys.mcsmanager.packets.codec.PacketEncoder; import asys.mcsmanager.packets.codec.PacketHandler; import io.netty.bootstrap.Bootstrap; +import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; @@ -16,12 +17,21 @@ import io.netty.channel.socket.nio.NioSocketChannel; public class Client { private EventLoopGroup group; + private Bootstrap bootstrap; + private ChannelFuture channelFuture; public void connect(String host, int port) { - group = new NioEventLoopGroup(); + if (group == null || bootstrap == null) { + group = new NioEventLoopGroup(); + bootstrap = createBootstrap(); + } - Bootstrap bootstrap = createBootstrap(); - bootstrap.connect(host, port); + channelFuture = bootstrap.connect(host, port); + channelFuture.awaitUninterruptibly(5000); + } + + public boolean isConnected() { + return (channelFuture != null && channelFuture.isSuccess()); } public void disconnect() { diff --git a/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java index af5c81f..7cad1e1 100644 --- a/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java +++ b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java @@ -4,16 +4,17 @@ */ package asys.bridge.client; +import asys.bridge.bukkit.BridgePlugin; import asys.mcsmanager.packets.CS_Handshake; import asys.mcsmanager.packets.IPacketHandler; import asys.mcsmanager.packets.Packet; import asys.mcsmanager.packets.SC_HandshakeResult; import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableMap; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import java.util.Collections; import java.util.Map; import static asys.mcsmanager.packets.codec.Params.KNOWN_HANDLERS; @@ -24,7 +25,15 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements 1, CS_Handshake.class, 2, SC_HandshakeResult.class ); - private static final Map, IPacketHandler> handshakeHandlers = Collections.emptyMap(); + private static Map, IPacketHandler> handshakeHandlers; + + ClientPacketHandler() { + if (handshakeHandlers == null) { + handshakeHandlers = ImmutableMap.of( + SC_HandshakeResult.class, this + ); + } + } @Override public void channelActive(ChannelHandlerContext context) throws Exception { @@ -36,7 +45,19 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements } @Override - public void handle(Packet packet, ChannelHandlerContext context) { + public void channelInactive(ChannelHandlerContext context) throws Exception { + context.channel().attr(KNOWN_PACKETS).remove(); + context.channel().attr(KNOWN_HANDLERS).remove(); + } + @Override + public void handle(Packet packet, ChannelHandlerContext context) { + SC_HandshakeResult pkt = (SC_HandshakeResult) packet; + if (pkt.getErrorCode() != 0) { + BridgePlugin.INSTANCE.getLogger().severe( + String.format("Handshake: #%d %s", pkt.getErrorCode(), pkt.getMessage())); + } else { + BridgePlugin.INSTANCE.getLogger().info("Handshake: OK"); + } } } diff --git a/bridge/src/main/resources/plugin.yml b/bridge/src/main/resources/plugin.yml index 7079c76..373f866 100644 --- a/bridge/src/main/resources/plugin.yml +++ b/bridge/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ -name: HelpCenter +name: ASysBridge main: asys.bridge.bukkit.BridgePlugin -version: 0.1 +version: ${version} author: DmitriyMX diff --git a/mcserver-manager/build.gradle b/mcserver-manager/build.gradle index bad850c..d0cfd08 100644 --- a/mcserver-manager/build.gradle +++ b/mcserver-manager/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.6.2-SNAPSHOT' +version = '0.6.3-SNAPSHOT' apply plugin: 'osgi' diff --git a/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java b/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java index 9a6760d..1584932 100644 --- a/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java +++ b/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java @@ -11,10 +11,10 @@ import asys.mcsmanager.packets.SC_HandshakeResult; import asys.mcsmanager.packets.codec.Params; import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableMap; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import java.util.Collections; import java.util.Map; class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacketHandler { @@ -22,9 +22,17 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke 1, CS_Handshake.class, 2, SC_HandshakeResult.class ); - private static final Map, IPacketHandler> handshakeHandlers = Collections.emptyMap(); + private static Map, IPacketHandler> handshakeHandlers; private static final String PASSCODE = "testpassphrase"; + ServerPacketHandler() { + if (handshakeHandlers == null) { + handshakeHandlers = ImmutableMap.of( + CS_Handshake.class, this + ); + } + } + @Override public void channelActive(ChannelHandlerContext context) throws Exception { context.channel().attr(Params.KNOWN_PACKETS).set(handshakePackets);