From 3f65ab33f9a1efa92016d42e94288ec9fbc4ea83 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Thu, 18 May 2017 01:11:51 +0300 Subject: [PATCH] =?UTF-8?q?Bridge:=20=D1=83=D1=81=D0=BF=D0=B5=D1=88=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20=D0=BD=D0=B0=20MCSM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 2070a5eb63f677ba67fdef0cd68105c8bda48974) --- bridge-protocol/build.gradle | 2 +- .../mcsmanager/packets/CS_ConsoleMessage.java | 56 +++++++++++++++++++ bridge/build.gradle | 4 +- .../bridge/bukkit/BridgeLoggerAppender.java | 25 ++++++++- .../java/asys/bridge/bukkit/BridgePlugin.java | 18 ++++-- .../bridge/client/ClientPacketHandler.java | 3 +- mcserver-manager/build.gradle | 2 +- .../server/ServerPacketHandler.java | 13 ++++- 8 files changed, 110 insertions(+), 13 deletions(-) create mode 100644 bridge-protocol/src/main/java/asys/mcsmanager/packets/CS_ConsoleMessage.java diff --git a/bridge-protocol/build.gradle b/bridge-protocol/build.gradle index c53f9d2..6b537fc 100644 --- a/bridge-protocol/build.gradle +++ b/bridge-protocol/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.2-SNAPSHOT' +version = '0.3-SNAPSHOT' task jar(type: Jar, overwrite: true) { // не собирать jar diff --git a/bridge-protocol/src/main/java/asys/mcsmanager/packets/CS_ConsoleMessage.java b/bridge-protocol/src/main/java/asys/mcsmanager/packets/CS_ConsoleMessage.java new file mode 100644 index 0000000..f144589 --- /dev/null +++ b/bridge-protocol/src/main/java/asys/mcsmanager/packets/CS_ConsoleMessage.java @@ -0,0 +1,56 @@ +/* + * DmitriyMX + * 2017-05-17 + */ +package asys.mcsmanager.packets; + +import io.netty.buffer.ByteBuf; + +public class CS_ConsoleMessage extends Packet { + private long time; + private int level; + private String loggerName, + message; + + public CS_ConsoleMessage() { + } + + public CS_ConsoleMessage(long time, int level, String loggerName, String message) { + this.time = time; + this.level = level; + this.loggerName = loggerName; + this.message = message; + } + + public long getTime() { + return time; + } + + public int getLevel() { + return level; + } + + public String getLoggerName() { + return loggerName; + } + + public String getMessage() { + return message; + } + + @Override + public void readSelfData(ByteBuf buffer) { + this.time = buffer.readLong(); + this.level = buffer.readInt(); + this.loggerName = readString(buffer); + this.message = readString(buffer); + } + + @Override + public void writeSelfData(ByteBuf buffer) { + buffer.writeLong(time); + buffer.writeInt(level); + writeString(buffer, loggerName); + writeString(buffer, message); + } +} diff --git a/bridge/build.gradle b/bridge/build.gradle index 073c68a..baa9fe7 100644 --- a/bridge/build.gradle +++ b/bridge/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.5.1-SNAPSHOT' +version = '0.5.2-SNAPSHOT' repositories { maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' } @@ -40,5 +40,5 @@ dependencies { exclude group: 'org.avaje' } compile group: 'io.netty', name: 'netty-codec', version: nettyVersion - compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.5' + compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.0-rc1' } diff --git a/bridge/src/main/java/asys/bridge/bukkit/BridgeLoggerAppender.java b/bridge/src/main/java/asys/bridge/bukkit/BridgeLoggerAppender.java index c3c8529..2ab12b2 100644 --- a/bridge/src/main/java/asys/bridge/bukkit/BridgeLoggerAppender.java +++ b/bridge/src/main/java/asys/bridge/bukkit/BridgeLoggerAppender.java @@ -1,13 +1,16 @@ /* - * DmitriyMX + * DmitriyMX * 2017-05-17 */ package asys.bridge.bukkit; +import asys.mcsmanager.packets.CS_ConsoleMessage; +import io.netty.channel.Channel; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.appender.AbstractAppender; public class BridgeLoggerAppender extends AbstractAppender { + private Channel channel; BridgeLoggerAppender() { super("ASysBridge", null, null); @@ -16,6 +19,24 @@ public class BridgeLoggerAppender extends AbstractAppender { @Override public void append(LogEvent event) { - System.out.println("+++ "+event.getMessage().getFormattedMessage()); + if (channel == null) return; + + long timeMillis = event.getMillis(); + int intLevel = event.getLevel().intLevel(); + String loggerName = event.getLoggerName(); + String message = event.getMessage().getFormattedMessage(); + + CS_ConsoleMessage messagePkg = new CS_ConsoleMessage( + timeMillis, + intLevel, + loggerName, + message + ); + + channel.writeAndFlush(messagePkg); + } + + void setChannel(Channel channel) { + this.channel = channel; } } diff --git a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java index 7e98331..9223e21 100644 --- a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java +++ b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java @@ -24,18 +24,22 @@ public class BridgePlugin extends JavaPlugin { private ScheduledExecutorService ses; private ScheduledFuture sesFuture, sesPingFuture; private int tryConnect = 0; + private BridgeLoggerAppender loggerAppender; @Override public void onLoad() { - ((Logger)LogManager.getRootLogger()).addAppender(new BridgeLoggerAppender()); + ((Logger)LogManager.getRootLogger()).addAppender(loggerAppender = new BridgeLoggerAppender()); + onEnable(); } @Override public void onEnable() { - INSTANCE = this; - saveDefaultConfig(); + if (INSTANCE == null) { + INSTANCE = this; + saveDefaultConfig(); - startReconnect(); + startReconnect(); + } } @Override @@ -84,6 +88,7 @@ public class BridgePlugin extends JavaPlugin { } public void startPing(Channel channel) { + getLoggerAppender().setChannel(channel); sesPingFuture = ses.scheduleAtFixedRate(() -> { channel.write(new CS_Ping( System.currentTimeMillis(), @@ -104,8 +109,13 @@ public class BridgePlugin extends JavaPlugin { } public void stopPing() { + getLoggerAppender().setChannel(null); if (sesPingFuture != null) { sesPingFuture.cancel(false); } } + + public BridgeLoggerAppender getLoggerAppender() { + return loggerAppender; + } } diff --git a/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java index 94c145b..2995740 100644 --- a/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java +++ b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java @@ -25,7 +25,8 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements private static Map, IPacketHandler> handshakeHandlers; private static final BiMap> pingPackets = ImmutableBiMap.of( - 3, CS_Ping.class + 3, CS_Ping.class, + 4, CS_ConsoleMessage.class ); ClientPacketHandler() { diff --git a/mcserver-manager/build.gradle b/mcserver-manager/build.gradle index d3ab670..e72c9bc 100644 --- a/mcserver-manager/build.gradle +++ b/mcserver-manager/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.8.6-SNAPSHOT' +version = '0.8.7-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 91c9abc..bed9a46 100644 --- a/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java +++ b/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java @@ -11,6 +11,7 @@ import com.google.common.collect.ImmutableMap; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.util.AttributeKey; +import org.slf4j.LoggerFactory; import java.util.Map; @@ -26,7 +27,8 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke private static Map, IPacketHandler> handshakeHandlers; private static final BiMap> pingPackets = ImmutableBiMap.of( - 3, CS_Ping.class + 3, CS_Ping.class, + 4, CS_ConsoleMessage.class ); private static Map, IPacketHandler> pingHandlers; @@ -41,7 +43,8 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke if (pingHandlers == null) { pingHandlers = ImmutableMap.of( - CS_Ping.class, this + CS_Ping.class, this, + CS_ConsoleMessage.class, this ); } } @@ -59,6 +62,8 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke handleCSHandshake((CS_Handshake) packet, context); } else if (packet.getClass() == CS_Ping.class) { handleCSPing((CS_Ping) packet, context); + } else if (packet.getClass() == CS_ConsoleMessage.class) { + handleCSConsoleMessage((CS_ConsoleMessage) packet); } } @@ -91,4 +96,8 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke private void handleCSPing(CS_Ping packet, ChannelHandlerContext context) { manager.putInfo(context.channel().attr(CLIENTID).get(), packet); } + + private void handleCSConsoleMessage(CS_ConsoleMessage packet) { + LoggerFactory.getLogger(getClass()).debug("[L:{}] {}", packet.getLevel(), packet.getMessage()); + } }