Bridge: режимы работы
Теперь есть два режима: 1 и 2. 1 - это стандартный режим, когда подключение идет напрямую к ASys. 2 - это новый режим, когда подключением к ASys занимается Zond. Bridge в таком режиме является лишь "мостиком" между игровым API и ASys.
This commit is contained in:
20
bridge/README.MD
Normal file
20
bridge/README.MD
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Bridge
|
||||||
|
|
||||||
|
Плагин, служащий "мостом" между внутренним серверным API и ASys
|
||||||
|
|
||||||
|
## Настройка
|
||||||
|
|
||||||
|
Настройки хранятся в файле `config.yml`.
|
||||||
|
|
||||||
|
`clientId` - Идентификатор и одновременно имя сервера. Должно быть уникальным.
|
||||||
|
|
||||||
|
`mode` - Режим работы плагина. Имеется два режим: `1` и `2`.
|
||||||
|
Первый предназначен для прямого подключения к ASys: принимаются комманды, передается вывод консоли.
|
||||||
|
Второй - для подключения через Zond. В этом режиме плагин занимается только пинговкой и выполнением
|
||||||
|
служебных (от Zond) комманд. По-умолчению значение `1`.
|
||||||
|
|
||||||
|
`host` - Хост/IP для подключения к ASys. В режиме `2` игнорируется и всегда имеет значение `127.0.0.1`.
|
||||||
|
|
||||||
|
`port` - Порт для подключения к ASys/Zond.
|
||||||
|
|
||||||
|
`passcode` - Секретное слово. Необходимо как дополнительный слой защиты. В режме `2` игнорируется.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
group = 'asys'
|
group = 'asys'
|
||||||
version = '0.5.2-SNAPSHOT'
|
version = '0.6-SNAPSHOT'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
|
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
public class BridgePlugin extends JavaPlugin {
|
public class BridgePlugin extends JavaPlugin {
|
||||||
public static BridgePlugin INSTANCE;
|
public static BridgePlugin INSTANCE;
|
||||||
|
private String appConnect = "ASys";
|
||||||
private Client client;
|
private Client client;
|
||||||
private ScheduledExecutorService ses;
|
private ScheduledExecutorService ses;
|
||||||
private ScheduledFuture<?> sesFuture, sesPingFuture;
|
private ScheduledFuture<?> sesFuture, sesPingFuture;
|
||||||
@@ -28,7 +29,12 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
((Logger)LogManager.getRootLogger()).addAppender(loggerAppender = new BridgeLoggerAppender());
|
saveDefaultConfig();
|
||||||
|
if (getConfig().getInt("mode") == 1) {
|
||||||
|
((Logger) LogManager.getRootLogger()).addAppender(loggerAppender = new BridgeLoggerAppender());
|
||||||
|
} else {
|
||||||
|
this.appConnect = "Zond";
|
||||||
|
}
|
||||||
onEnable();
|
onEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,8 +42,6 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
if (INSTANCE == null) {
|
if (INSTANCE == null) {
|
||||||
INSTANCE = this;
|
INSTANCE = this;
|
||||||
saveDefaultConfig();
|
|
||||||
|
|
||||||
startReconnect();
|
startReconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,8 +72,12 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
client = new Client();
|
client = new Client();
|
||||||
ses = Executors.newScheduledThreadPool(2);
|
ses = Executors.newScheduledThreadPool(2);
|
||||||
sesFuture = ses.scheduleAtFixedRate(() -> {
|
sesFuture = ses.scheduleAtFixedRate(() -> {
|
||||||
getLogger().info(String.format("Connect(%d) to ASys...", ++tryConnect));
|
getLogger().info(String.format("Connect(%d) to %s...", ++tryConnect, appConnect));
|
||||||
|
if (getConfig().getInt("mode") == 1) {
|
||||||
client.connect(getConfig().getString("host"), getConfig().getInt("port"));
|
client.connect(getConfig().getString("host"), getConfig().getInt("port"));
|
||||||
|
} else {
|
||||||
|
client.connect("127.0.0.1", getConfig().getInt("port"));
|
||||||
|
}
|
||||||
if (client.isConnected()) {
|
if (client.isConnected()) {
|
||||||
stopReconnect();
|
stopReconnect();
|
||||||
} else {
|
} else {
|
||||||
@@ -88,7 +96,9 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void startPing(Channel channel) {
|
public void startPing(Channel channel) {
|
||||||
|
if (getConfig().getInt("mode") == 1) {
|
||||||
getLoggerAppender().setChannel(channel);
|
getLoggerAppender().setChannel(channel);
|
||||||
|
}
|
||||||
sesPingFuture = ses.scheduleAtFixedRate(() -> {
|
sesPingFuture = ses.scheduleAtFixedRate(() -> {
|
||||||
channel.write(new CS_Ping(
|
channel.write(new CS_Ping(
|
||||||
System.currentTimeMillis(),
|
System.currentTimeMillis(),
|
||||||
@@ -109,13 +119,15 @@ public class BridgePlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void stopPing() {
|
public void stopPing() {
|
||||||
|
if (getConfig().getInt("mode") == 1) {
|
||||||
getLoggerAppender().setChannel(null);
|
getLoggerAppender().setChannel(null);
|
||||||
|
}
|
||||||
if (sesPingFuture != null) {
|
if (sesPingFuture != null) {
|
||||||
sesPingFuture.cancel(false);
|
sesPingFuture.cancel(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BridgeLoggerAppender getLoggerAppender() {
|
private BridgeLoggerAppender getLoggerAppender() {
|
||||||
return loggerAppender;
|
return loggerAppender;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,14 +40,21 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
|
|||||||
@Override
|
@Override
|
||||||
public void channelActive(ChannelHandlerContext context) throws Exception {
|
public void channelActive(ChannelHandlerContext context) throws Exception {
|
||||||
BridgePlugin.INSTANCE.getLogger().info("channelActive");
|
BridgePlugin.INSTANCE.getLogger().info("channelActive");
|
||||||
|
if (BridgePlugin.INSTANCE.getConfig().getInt("mode") == 1) {
|
||||||
context.channel().attr(KNOWN_PACKETS).set(handshakePackets);
|
context.channel().attr(KNOWN_PACKETS).set(handshakePackets);
|
||||||
context.channel().attr(KNOWN_HANDLERS).set(handshakeHandlers);
|
context.channel().attr(KNOWN_HANDLERS).set(handshakeHandlers);
|
||||||
|
|
||||||
|
|
||||||
CS_Handshake packet = new CS_Handshake(
|
CS_Handshake packet = new CS_Handshake(
|
||||||
BridgePlugin.INSTANCE.getConfig().getString("clientId"),
|
BridgePlugin.INSTANCE.getConfig().getString("clientId"),
|
||||||
BridgePlugin.INSTANCE.getConfig().getString("passcode"));
|
BridgePlugin.INSTANCE.getConfig().getString("passcode"));
|
||||||
BridgePlugin.INSTANCE.getLogger().info("send Handshake packet...");
|
BridgePlugin.INSTANCE.getLogger().info("send Handshake packet...");
|
||||||
context.channel().writeAndFlush(packet);
|
context.channel().writeAndFlush(packet);
|
||||||
|
} else {
|
||||||
|
context.channel().attr(KNOWN_PACKETS).set(pingPackets);
|
||||||
|
BridgePlugin.INSTANCE.getLogger().info("Handshake: SKIP. Used Zond.");
|
||||||
|
BridgePlugin.INSTANCE.startPing(context.channel());
|
||||||
|
}
|
||||||
super.channelActive(context);
|
super.channelActive(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +74,7 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
|
|||||||
@Override
|
@Override
|
||||||
public void handle(Packet packet, ChannelHandlerContext context) {
|
public void handle(Packet packet, ChannelHandlerContext context) {
|
||||||
BridgePlugin.INSTANCE.getLogger().info("handle : " + packet.getClass().getSimpleName());
|
BridgePlugin.INSTANCE.getLogger().info("handle : " + packet.getClass().getSimpleName());
|
||||||
|
if (BridgePlugin.INSTANCE.getConfig().getInt("mode") == 1) {
|
||||||
SC_HandshakeResult pkt = (SC_HandshakeResult) packet;
|
SC_HandshakeResult pkt = (SC_HandshakeResult) packet;
|
||||||
if (pkt.getErrorCode() != 0) {
|
if (pkt.getErrorCode() != 0) {
|
||||||
BridgePlugin.INSTANCE.getLogger().severe(
|
BridgePlugin.INSTANCE.getLogger().severe(
|
||||||
@@ -77,4 +85,5 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
|
|||||||
BridgePlugin.INSTANCE.startPing(context.channel());
|
BridgePlugin.INSTANCE.startPing(context.channel());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
clientId: SpigotServer0
|
clientId: SpigotServer0
|
||||||
|
# 1 - прямое соединение с ASys. Сообщения из консоли перехватываются
|
||||||
|
# 2 - подключение через Zond. Сообщения из консоли не перехватываются
|
||||||
|
mode: 1
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
port: 8779
|
port: 8779
|
||||||
passcode: testpassphrase
|
passcode: testpassphrase
|
||||||
Reference in New Issue
Block a user