Bridge: первая реализация
This commit is contained in:
28
bridge/build.gradle
Normal file
28
bridge/build.gradle
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
group = 'asys'
|
||||||
|
version = '0.1-SNAPSHOT'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
|
||||||
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
include
|
||||||
|
compile.extendsFrom include
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
dependsOn configurations.include
|
||||||
|
from { configurations.include.collect { it.isDirectory() ? it : zipTree(it) } }
|
||||||
|
}
|
||||||
|
|
||||||
|
ext {
|
||||||
|
nettyVersion = '4.0.23.Final'
|
||||||
|
}
|
||||||
|
|
||||||
|
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'
|
||||||
|
}
|
||||||
|
compile group: 'io.netty', name: 'netty-codec', version: nettyVersion
|
||||||
|
}
|
||||||
33
bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java
Normal file
33
bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 2017-04-27
|
||||||
|
*/
|
||||||
|
package asys.bridge.bukkit;
|
||||||
|
|
||||||
|
import asys.bridge.client.Client;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
public class BridgePlugin extends JavaPlugin {
|
||||||
|
private Client client;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
getLogger().info("Connect to ASys...");
|
||||||
|
client = new Client();
|
||||||
|
client.connect("127.0.0.1", 8779);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
getLogger().info("Disconnect...");
|
||||||
|
client.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
sender.sendMessage("ASys Bridge by DmitriyMX");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
53
bridge/src/main/java/asys/bridge/client/Client.java
Normal file
53
bridge/src/main/java/asys/bridge/client/Client.java
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 2017-04-27
|
||||||
|
*/
|
||||||
|
package asys.bridge.client;
|
||||||
|
|
||||||
|
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.ChannelInitializer;
|
||||||
|
import io.netty.channel.EventLoopGroup;
|
||||||
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
|
import io.netty.channel.socket.SocketChannel;
|
||||||
|
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||||
|
|
||||||
|
public class Client {
|
||||||
|
private EventLoopGroup group;
|
||||||
|
|
||||||
|
public void connect(String host, int port) {
|
||||||
|
group = new NioEventLoopGroup();
|
||||||
|
|
||||||
|
Bootstrap bootstrap = createBootstrap();
|
||||||
|
bootstrap.connect(host, port);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disconnect() {
|
||||||
|
group.shutdownGracefully();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Bootstrap createBootstrap() {
|
||||||
|
Bootstrap bootstrap = new Bootstrap();
|
||||||
|
bootstrap.group(group)
|
||||||
|
.channel(NioSocketChannel.class)
|
||||||
|
.handler(createChannelInitializer());
|
||||||
|
|
||||||
|
return bootstrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ChannelInitializer createChannelInitializer() {
|
||||||
|
return new ChannelInitializer<SocketChannel>() {
|
||||||
|
@Override
|
||||||
|
protected void initChannel(SocketChannel socketChannel) throws Exception {
|
||||||
|
socketChannel.pipeline().addLast(
|
||||||
|
new PacketEncoder(),
|
||||||
|
new PacketDecoder(),
|
||||||
|
new PacketHandler(),
|
||||||
|
new ClientPacketHandler()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 2017-04-27
|
||||||
|
*/
|
||||||
|
package asys.bridge.client;
|
||||||
|
|
||||||
|
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 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;
|
||||||
|
import static asys.mcsmanager.packets.codec.Params.KNOWN_PACKETS;
|
||||||
|
|
||||||
|
public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements IPacketHandler {
|
||||||
|
private static final BiMap<Integer, Class<? extends Packet>> handshakePackets = ImmutableBiMap.of(
|
||||||
|
1, CS_Handshake.class,
|
||||||
|
2, SC_HandshakeResult.class
|
||||||
|
);
|
||||||
|
private static final Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers = Collections.emptyMap();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelActive(ChannelHandlerContext context) throws Exception {
|
||||||
|
context.channel().attr(KNOWN_PACKETS).set(handshakePackets);
|
||||||
|
context.channel().attr(KNOWN_HANDLERS).set(handshakeHandlers);
|
||||||
|
|
||||||
|
CS_Handshake packet = new CS_Handshake("SpigotServer0", "testpassphrase");
|
||||||
|
context.channel().writeAndFlush(packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(Packet packet, ChannelHandlerContext context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
11
bridge/src/main/resources/plugin.yml
Normal file
11
bridge/src/main/resources/plugin.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
name: HelpCenter
|
||||||
|
main: asys.bridge.bukkit.BridgePlugin
|
||||||
|
version: 0.1
|
||||||
|
|
||||||
|
author: DmitriyMX
|
||||||
|
|
||||||
|
commands:
|
||||||
|
asysbridge:
|
||||||
|
aliases: ['asys', 'bridge']
|
||||||
|
usage: /<command>
|
||||||
|
description: ASys Bridge
|
||||||
@@ -3,3 +3,4 @@ include 'core'
|
|||||||
include 'webinterface'
|
include 'webinterface'
|
||||||
include 'mcserver-manager'
|
include 'mcserver-manager'
|
||||||
include 'bridge-protocol'
|
include 'bridge-protocol'
|
||||||
|
include 'bridge'
|
||||||
|
|||||||
Reference in New Issue
Block a user