Bridge: успешная отправка логов на MCSM
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
group = 'asys'
|
group = 'asys'
|
||||||
version = '0.2-SNAPSHOT'
|
version = '0.3-SNAPSHOT'
|
||||||
|
|
||||||
task jar(type: Jar, overwrite: true) {
|
task jar(type: Jar, overwrite: true) {
|
||||||
// не собирать jar
|
// не собирать jar
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
group = 'asys'
|
group = 'asys'
|
||||||
version = '0.5.1-SNAPSHOT'
|
version = '0.5.2-SNAPSHOT'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
|
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
|
||||||
@@ -40,5 +40,5 @@ dependencies {
|
|||||||
exclude group: 'org.avaje'
|
exclude group: 'org.avaje'
|
||||||
}
|
}
|
||||||
compile group: 'io.netty', name: 'netty-codec', version: nettyVersion
|
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'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
* DmitriyMX <d.mihailov@samson-rus.com>
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
* 2017-05-17
|
* 2017-05-17
|
||||||
*/
|
*/
|
||||||
package asys.bridge.bukkit;
|
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.LogEvent;
|
||||||
import org.apache.logging.log4j.core.appender.AbstractAppender;
|
import org.apache.logging.log4j.core.appender.AbstractAppender;
|
||||||
|
|
||||||
public class BridgeLoggerAppender extends AbstractAppender {
|
public class BridgeLoggerAppender extends AbstractAppender {
|
||||||
|
private Channel channel;
|
||||||
|
|
||||||
BridgeLoggerAppender() {
|
BridgeLoggerAppender() {
|
||||||
super("ASysBridge", null, null);
|
super("ASysBridge", null, null);
|
||||||
@@ -16,6 +19,24 @@ public class BridgeLoggerAppender extends AbstractAppender {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void append(LogEvent event) {
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,18 +24,22 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
private ScheduledExecutorService ses;
|
private ScheduledExecutorService ses;
|
||||||
private ScheduledFuture<?> sesFuture, sesPingFuture;
|
private ScheduledFuture<?> sesFuture, sesPingFuture;
|
||||||
private int tryConnect = 0;
|
private int tryConnect = 0;
|
||||||
|
private BridgeLoggerAppender loggerAppender;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
((Logger)LogManager.getRootLogger()).addAppender(new BridgeLoggerAppender());
|
((Logger)LogManager.getRootLogger()).addAppender(loggerAppender = new BridgeLoggerAppender());
|
||||||
|
onEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
INSTANCE = this;
|
if (INSTANCE == null) {
|
||||||
saveDefaultConfig();
|
INSTANCE = this;
|
||||||
|
saveDefaultConfig();
|
||||||
|
|
||||||
startReconnect();
|
startReconnect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -84,6 +88,7 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void startPing(Channel channel) {
|
public void startPing(Channel channel) {
|
||||||
|
getLoggerAppender().setChannel(channel);
|
||||||
sesPingFuture = ses.scheduleAtFixedRate(() -> {
|
sesPingFuture = ses.scheduleAtFixedRate(() -> {
|
||||||
channel.write(new CS_Ping(
|
channel.write(new CS_Ping(
|
||||||
System.currentTimeMillis(),
|
System.currentTimeMillis(),
|
||||||
@@ -104,8 +109,13 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void stopPing() {
|
public void stopPing() {
|
||||||
|
getLoggerAppender().setChannel(null);
|
||||||
if (sesPingFuture != null) {
|
if (sesPingFuture != null) {
|
||||||
sesPingFuture.cancel(false);
|
sesPingFuture.cancel(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BridgeLoggerAppender getLoggerAppender() {
|
||||||
|
return loggerAppender;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
|
|||||||
private static Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers;
|
private static Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers;
|
||||||
|
|
||||||
private static final BiMap<Integer, Class<? extends Packet>> pingPackets = ImmutableBiMap.of(
|
private static final BiMap<Integer, Class<? extends Packet>> pingPackets = ImmutableBiMap.of(
|
||||||
3, CS_Ping.class
|
3, CS_Ping.class,
|
||||||
|
4, CS_ConsoleMessage.class
|
||||||
);
|
);
|
||||||
|
|
||||||
ClientPacketHandler() {
|
ClientPacketHandler() {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
group = 'asys'
|
group = 'asys'
|
||||||
version = '0.8.6-SNAPSHOT'
|
version = '0.8.7-SNAPSHOT'
|
||||||
|
|
||||||
apply plugin: 'osgi'
|
apply plugin: 'osgi'
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ 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 io.netty.util.AttributeKey;
|
import io.netty.util.AttributeKey;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -26,7 +27,8 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke
|
|||||||
private static Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers;
|
private static Map<Class<? extends Packet>, IPacketHandler> handshakeHandlers;
|
||||||
|
|
||||||
private static final BiMap<Integer, Class<? extends Packet>> pingPackets = ImmutableBiMap.of(
|
private static final BiMap<Integer, Class<? extends Packet>> pingPackets = ImmutableBiMap.of(
|
||||||
3, CS_Ping.class
|
3, CS_Ping.class,
|
||||||
|
4, CS_ConsoleMessage.class
|
||||||
);
|
);
|
||||||
private static Map<Class<? extends Packet>, IPacketHandler> pingHandlers;
|
private static Map<Class<? extends Packet>, IPacketHandler> pingHandlers;
|
||||||
|
|
||||||
@@ -41,7 +43,8 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke
|
|||||||
|
|
||||||
if (pingHandlers == null) {
|
if (pingHandlers == null) {
|
||||||
pingHandlers = ImmutableMap.of(
|
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);
|
handleCSHandshake((CS_Handshake) packet, context);
|
||||||
} else if (packet.getClass() == CS_Ping.class) {
|
} else if (packet.getClass() == CS_Ping.class) {
|
||||||
handleCSPing((CS_Ping) packet, context);
|
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) {
|
private void handleCSPing(CS_Ping packet, ChannelHandlerContext context) {
|
||||||
manager.putInfo(context.channel().attr(CLIENTID).get(), packet);
|
manager.putInfo(context.channel().attr(CLIENTID).get(), packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleCSConsoleMessage(CS_ConsoleMessage packet) {
|
||||||
|
LoggerFactory.getLogger(getClass()).debug("[L:{}] {}", packet.getLevel(), packet.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user