Archived
0

Zond: соединение с Bridge

This commit is contained in:
2017-06-24 17:13:19 +03:00
parent 42f94093a7
commit 1f9bac5a0a
9 changed files with 141 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
group = 'asys'
version = '0.7.6-SNAPSHOT'
version = '0.7.7-SNAPSHOT'
apply plugin: 'application'

View File

@@ -4,7 +4,8 @@
*/
package asys.zond;
import asys.zond.proxy.Connector;
import asys.zond.proxy.client.Connector;
import asys.zond.proxy.server.Server;
import asys.zond.shell.CommandHandler;
import asys.zond.shell.Shell;
import org.apache.commons.exec.CommandLine;
@@ -19,6 +20,7 @@ public class ZondCommandHandler implements CommandHandler {
private CommandLine commandLine;
private ExecuteWatchdog watchdog;
private Thread threadExec;
private Server server;
@Override
public void handle(String commandLine) {
@@ -32,6 +34,7 @@ public class ZondCommandHandler implements CommandHandler {
private void internalCommand(String line) {
if (line.equalsIgnoreCase("exit") || line.equalsIgnoreCase("quit")) {
if (watchdog != null) {
server.shutdown();
watchdog.destroyProcess();
threadExec.interrupt();
}
@@ -44,12 +47,18 @@ public class ZondCommandHandler implements CommandHandler {
Runnable task = () -> {
int code = 0;
try {
server = new Server();
server.start(Config.getInstance().getInt("bridge.port"));
code = executor.execute(commandLine);
} catch (ExecuteException ignore) {
} catch (IOException e) {
Shell.getInstance().getOutput().println("Exception message: " + e.getMessage());
code = -99;
}
server.shutdown();
server = null;
watchdog = null;
Shell.getInstance().getOutput().println("Process finished. Code: " + code);
};
@@ -58,6 +67,7 @@ public class ZondCommandHandler implements CommandHandler {
}
} else if (line.equalsIgnoreCase("kill")) {
if (watchdog != null) {
server.shutdown();
watchdog.destroyProcess();
threadExec.interrupt();
}

View File

@@ -10,30 +10,30 @@ public class TaskTicker implements Runnable {
private Thread thread;
private boolean loop = false;
TaskTicker setTask(Runnable task) {
public TaskTicker setTask(Runnable task) {
this.task = task;
return this;
}
TaskTicker setStepTimeMs(long stepTimeMs) {
public TaskTicker setStepTimeMs(long stepTimeMs) {
this.stepTimeMs = stepTimeMs;
return this;
}
void start() {
public void start() {
thread = new Thread(this, "TaskTicker");
loop = true;
thread.start();
}
void stop() {
public void stop() {
loop = false;
if (thread != null) {
thread.interrupt();
}
}
boolean isActive() {
public boolean isActive() {
return loop;
}

View File

@@ -2,7 +2,7 @@
* DmitriyMX <dimon550@gmail.com>
* 2017-06-16
*/
package asys.zond.proxy;
package asys.zond.proxy.client;
import asys.mcsmanager.packets.Packet;
import asys.mcsmanager.packets.codec.PacketDecoder;

View File

@@ -2,7 +2,7 @@
* DmitriyMX <dimon550@gmail.com>
* 2017-06-16
*/
package asys.zond.proxy;
package asys.zond.proxy.client;
import asys.mcsmanager.packets.*;
import asys.zond.Config;
@@ -34,7 +34,8 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
knownPackets = ImmutableBiMap.of(
3, CS_Ping.class,
4, CS_ConsoleMessage.class
4, CS_ConsoleMessage.class,
5, SC_Command.class
);
}

View File

@@ -2,10 +2,11 @@
* DmitriyMX <dimon550@gmail.com>
* 2017-06-16
*/
package asys.zond.proxy;
package asys.zond.proxy.client;
import asys.mcsmanager.packets.Packet;
import asys.zond.Config;
import asys.zond.proxy.TaskTicker;
import asys.zond.shell.Shell;
public class Connector {

View File

@@ -0,0 +1,57 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2017-06-17
*/
package asys.zond.proxy.server;
import asys.mcsmanager.packets.codec.PacketDecoder;
import asys.mcsmanager.packets.codec.PacketEncoder;
import asys.mcsmanager.packets.codec.PacketHandler;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelHandler;
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.NioServerSocketChannel;
public class Server {
private EventLoopGroup bossGroup, workerGroup;
public void start(int port) {
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup();
ServerBootstrap serverBootstrap = createServerBootstrap();
serverBootstrap.bind("127.0.0.1", port);
}
public void shutdown() {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
private ServerBootstrap createServerBootstrap() {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(createChannelInitializer());
return bootstrap;
}
private ChannelHandler createChannelInitializer() {
return new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline().addLast(
new PacketEncoder(),
new PacketDecoder(),
new PacketHandler(),
new ServerPacketHandler()
);
}
};
}
}

View File

@@ -0,0 +1,59 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2017-06-17
*/
package asys.zond.proxy.server;
import asys.mcsmanager.packets.*;
import asys.zond.proxy.client.Connector;
import asys.zond.shell.Shell;
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.Map;
import static asys.mcsmanager.packets.codec.Params.KNOWN_HANDLERS;
import static asys.mcsmanager.packets.codec.Params.KNOWN_PACKETS;
public class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacketHandler {
private final BiMap<Integer, Class<? extends Packet>> knownPackets;
private final Map<Class<? extends Packet>, IPacketHandler> knownHandlers;
ServerPacketHandler() {
knownPackets = ImmutableBiMap.of(
3, CS_Ping.class,
5, SC_Command.class
);
knownHandlers = ImmutableMap.of(
CS_Ping.class, this,
CS_ConsoleMessage.class, this
);
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
ctx.channel().attr(KNOWN_PACKETS).set(knownPackets);
ctx.channel().attr(KNOWN_HANDLERS).set(knownHandlers);
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
ctx.channel().attr(KNOWN_PACKETS).remove();
ctx.channel().attr(KNOWN_HANDLERS).remove();
}
@Override
public void handle(Packet packet, ChannelHandlerContext context) {
if (packet instanceof CS_Ping) {
handleCSPing((CS_Ping) packet);
}
}
private void handleCSPing(CS_Ping packet) {
Shell.getInstance().getOutput().println("proxied CS_Ping... [" + packet.getTime() + "]");
Connector.getInstance().sendPacket(packet);
}
}

View File

@@ -2,3 +2,4 @@ serverId = SpigotServer0
host = 127.0.0.1
port = 8779
passcode = testpassphrase
bridge.port = 8710