Bridge: успешный handshake
This commit is contained in:
@@ -1,10 +1,16 @@
|
|||||||
group = 'asys'
|
group = 'asys'
|
||||||
version = '0.1-SNAPSHOT'
|
version = '0.3-SNAPSHOT'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
|
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
filesMatching('**/plugin.yml') {
|
||||||
|
filter { it.replace('${version}', project.version) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
include
|
include
|
||||||
compile.extendsFrom include
|
compile.extendsFrom include
|
||||||
@@ -23,6 +29,10 @@ dependencies {
|
|||||||
include files(project(':bridge-protocol').sourceSets.main.output.classesDir)
|
include files(project(':bridge-protocol').sourceSets.main.output.classesDir)
|
||||||
compile (group: 'org.bukkit', name: 'bukkit', version: '1.8.8-R0.1-SNAPSHOT') {
|
compile (group: 'org.bukkit', name: 'bukkit', version: '1.8.8-R0.1-SNAPSHOT') {
|
||||||
exclude group: 'junit'
|
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
|
compile group: 'io.netty', name: 'netty-codec', version: nettyVersion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,20 +9,46 @@ import org.bukkit.command.Command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
public class BridgePlugin extends JavaPlugin {
|
public class BridgePlugin extends JavaPlugin {
|
||||||
|
public static BridgePlugin INSTANCE;
|
||||||
private Client client;
|
private Client client;
|
||||||
|
private ScheduledFuture<?> sesFuture;
|
||||||
|
private int tryConnect = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
getLogger().info("Connect to ASys...");
|
INSTANCE = this;
|
||||||
client = new Client();
|
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
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
getLogger().info("Disconnect...");
|
if (sesFuture != null) {
|
||||||
client.disconnect();
|
sesFuture.cancel(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client.isConnected()) {
|
||||||
|
getLogger().info("Disconnect...");
|
||||||
|
client.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
INSTANCE = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import asys.mcsmanager.packets.codec.PacketDecoder;
|
|||||||
import asys.mcsmanager.packets.codec.PacketEncoder;
|
import asys.mcsmanager.packets.codec.PacketEncoder;
|
||||||
import asys.mcsmanager.packets.codec.PacketHandler;
|
import asys.mcsmanager.packets.codec.PacketHandler;
|
||||||
import io.netty.bootstrap.Bootstrap;
|
import io.netty.bootstrap.Bootstrap;
|
||||||
|
import io.netty.channel.ChannelFuture;
|
||||||
import io.netty.channel.ChannelInitializer;
|
import io.netty.channel.ChannelInitializer;
|
||||||
import io.netty.channel.EventLoopGroup;
|
import io.netty.channel.EventLoopGroup;
|
||||||
import io.netty.channel.nio.NioEventLoopGroup;
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
@@ -16,12 +17,21 @@ import io.netty.channel.socket.nio.NioSocketChannel;
|
|||||||
|
|
||||||
public class Client {
|
public class Client {
|
||||||
private EventLoopGroup group;
|
private EventLoopGroup group;
|
||||||
|
private Bootstrap bootstrap;
|
||||||
|
private ChannelFuture channelFuture;
|
||||||
|
|
||||||
public void connect(String host, int port) {
|
public void connect(String host, int port) {
|
||||||
group = new NioEventLoopGroup();
|
if (group == null || bootstrap == null) {
|
||||||
|
group = new NioEventLoopGroup();
|
||||||
|
bootstrap = createBootstrap();
|
||||||
|
}
|
||||||
|
|
||||||
Bootstrap bootstrap = createBootstrap();
|
channelFuture = bootstrap.connect(host, port);
|
||||||
bootstrap.connect(host, port);
|
channelFuture.awaitUninterruptibly(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isConnected() {
|
||||||
|
return (channelFuture != null && channelFuture.isSuccess());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disconnect() {
|
public void disconnect() {
|
||||||
|
|||||||
@@ -4,16 +4,17 @@
|
|||||||
*/
|
*/
|
||||||
package asys.bridge.client;
|
package asys.bridge.client;
|
||||||
|
|
||||||
|
import asys.bridge.bukkit.BridgePlugin;
|
||||||
import asys.mcsmanager.packets.CS_Handshake;
|
import asys.mcsmanager.packets.CS_Handshake;
|
||||||
import asys.mcsmanager.packets.IPacketHandler;
|
import asys.mcsmanager.packets.IPacketHandler;
|
||||||
import asys.mcsmanager.packets.Packet;
|
import asys.mcsmanager.packets.Packet;
|
||||||
import asys.mcsmanager.packets.SC_HandshakeResult;
|
import asys.mcsmanager.packets.SC_HandshakeResult;
|
||||||
import com.google.common.collect.BiMap;
|
import com.google.common.collect.BiMap;
|
||||||
import com.google.common.collect.ImmutableBiMap;
|
import com.google.common.collect.ImmutableBiMap;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.channel.ChannelInboundHandlerAdapter;
|
import io.netty.channel.ChannelInboundHandlerAdapter;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static asys.mcsmanager.packets.codec.Params.KNOWN_HANDLERS;
|
import static asys.mcsmanager.packets.codec.Params.KNOWN_HANDLERS;
|
||||||
@@ -24,7 +25,15 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
|
|||||||
1, CS_Handshake.class,
|
1, CS_Handshake.class,
|
||||||
2, SC_HandshakeResult.class
|
2, SC_HandshakeResult.class
|
||||||
);
|
);
|
||||||
private static final Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers = Collections.emptyMap();
|
private static Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers;
|
||||||
|
|
||||||
|
ClientPacketHandler() {
|
||||||
|
if (handshakeHandlers == null) {
|
||||||
|
handshakeHandlers = ImmutableMap.of(
|
||||||
|
SC_HandshakeResult.class, this
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void channelActive(ChannelHandlerContext context) throws Exception {
|
public void channelActive(ChannelHandlerContext context) throws Exception {
|
||||||
@@ -36,7 +45,19 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
name: HelpCenter
|
name: ASysBridge
|
||||||
main: asys.bridge.bukkit.BridgePlugin
|
main: asys.bridge.bukkit.BridgePlugin
|
||||||
version: 0.1
|
version: ${version}
|
||||||
|
|
||||||
author: DmitriyMX
|
author: DmitriyMX
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
group = 'asys'
|
group = 'asys'
|
||||||
version = '0.6.2-SNAPSHOT'
|
version = '0.6.3-SNAPSHOT'
|
||||||
|
|
||||||
apply plugin: 'osgi'
|
apply plugin: 'osgi'
|
||||||
|
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import asys.mcsmanager.packets.SC_HandshakeResult;
|
|||||||
import asys.mcsmanager.packets.codec.Params;
|
import asys.mcsmanager.packets.codec.Params;
|
||||||
import com.google.common.collect.BiMap;
|
import com.google.common.collect.BiMap;
|
||||||
import com.google.common.collect.ImmutableBiMap;
|
import com.google.common.collect.ImmutableBiMap;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.channel.ChannelInboundHandlerAdapter;
|
import io.netty.channel.ChannelInboundHandlerAdapter;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacketHandler {
|
class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacketHandler {
|
||||||
@@ -22,9 +22,17 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke
|
|||||||
1, CS_Handshake.class,
|
1, CS_Handshake.class,
|
||||||
2, SC_HandshakeResult.class
|
2, SC_HandshakeResult.class
|
||||||
);
|
);
|
||||||
private static final Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers = Collections.emptyMap();
|
private static Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers;
|
||||||
private static final String PASSCODE = "testpassphrase";
|
private static final String PASSCODE = "testpassphrase";
|
||||||
|
|
||||||
|
ServerPacketHandler() {
|
||||||
|
if (handshakeHandlers == null) {
|
||||||
|
handshakeHandlers = ImmutableMap.of(
|
||||||
|
CS_Handshake.class, this
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void channelActive(ChannelHandlerContext context) throws Exception {
|
public void channelActive(ChannelHandlerContext context) throws Exception {
|
||||||
context.channel().attr(Params.KNOWN_PACKETS).set(handshakePackets);
|
context.channel().attr(Params.KNOWN_PACKETS).set(handshakePackets);
|
||||||
|
|||||||
Reference in New Issue
Block a user