Compare commits
No commits in common. "master" and "48c921e79c3f2be2a9e641cc9d8acb5337758530" have entirely different histories.
master
...
48c921e79c
|
@ -5,7 +5,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>net.krakatoa.proxy</groupId>
|
<groupId>net.krakatoa.proxy</groupId>
|
||||||
<artifactId>KraProxySystem</artifactId>
|
<artifactId>KrakatoaProxySystem</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -59,26 +59,14 @@
|
||||||
<version>1.18.22</version>
|
<version>1.18.22</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.dytanic.cloudnet</groupId>
|
<artifactId>Java-WebSocket</artifactId>
|
||||||
<artifactId>cloudnet-bridge</artifactId>
|
<groupId>org.java-websocket</groupId>
|
||||||
<version>3.4.0-RELEASE</version>
|
<version>1.5.2</version> <!-- 1.5.1 -->
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.dytanic.cloudnet</groupId>
|
<artifactId>mongodb-driver-async</artifactId>
|
||||||
<artifactId>cloudnet-driver</artifactId>
|
<groupId>org.mongodb</groupId>
|
||||||
<version>3.4.0-RELEASE</version>
|
<version>3.12.10</version> <!-- 3.0.4 -->
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>earth.krakatoa</groupId>
|
|
||||||
<artifactId>KraSocketClient</artifactId>
|
|
||||||
<version>1.2-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>earth.krakatoa</groupId>
|
|
||||||
<artifactId>KraCore</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -98,19 +86,5 @@
|
||||||
</snapshots>
|
</snapshots>
|
||||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
|
||||||
<id>krakatoa-earth</id>
|
|
||||||
<url>https://repo.krakatoa.umbach.dev/repository/krakatoa-earth/</url>
|
|
||||||
<releases>
|
|
||||||
<enabled>true</enabled>
|
|
||||||
</releases>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>true</enabled>
|
|
||||||
</snapshots>
|
|
||||||
</repository>
|
|
||||||
<repository>
|
|
||||||
<id>cloudnet-releases</id>
|
|
||||||
<url>https://repo.cloudnetservice.eu/repository/releases/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
</repositories>
|
||||||
</project>
|
</project>
|
|
@ -1,28 +1,22 @@
|
||||||
package net.krakatoa.proxy;
|
package net.krakatoa.proxy;
|
||||||
|
|
||||||
import earth.krakatao.KraSocketClient;
|
import com.mongodb.async.client.MongoCollection;
|
||||||
import earth.krakatao.KraSocketClientConfig;
|
import java.net.URI;
|
||||||
import earth.krakatao.events.KraSocketClientEventInitiater;
|
import java.net.URISyntaxException;
|
||||||
import earth.krakatao.events.KraSocketClientEventInterface;
|
|
||||||
import earth.krakatao.protocol.KraSocketClientProtocol;
|
|
||||||
import earth.krakatoa.core.config.MongoConfig;
|
|
||||||
import earth.krakatoa.core.config.RedisConfig;
|
|
||||||
import earth.krakatoa.core.mongo.MongoManager;
|
|
||||||
import earth.krakatoa.core.redis.RedisManager;
|
|
||||||
import earth.krakatoa.core.util.Formatter;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import net.krakatoa.proxy.command.CodeCommand;
|
import net.krakatoa.proxy.command.CodeCommand;
|
||||||
import net.krakatoa.proxy.command.KrakatoapCommand;
|
|
||||||
import net.krakatoa.proxy.command.SendTestMessageCommand;
|
|
||||||
import net.krakatoa.proxy.config.ConfigHandler;
|
import net.krakatoa.proxy.config.ConfigHandler;
|
||||||
import net.krakatoa.proxy.listener.LoginListener;
|
|
||||||
import net.krakatoa.proxy.listener.PlayerDisconnectListener;
|
import net.krakatoa.proxy.listener.PlayerDisconnectListener;
|
||||||
import net.krakatoa.proxy.listener.PostLoginListener;
|
import net.krakatoa.proxy.listener.PostLoginListener;
|
||||||
import net.krakatoa.proxy.listener.SocketClientMessageListener;
|
import net.krakatoa.proxy.mongo.MongoManager;
|
||||||
|
import net.krakatoa.proxy.protocol.KraProtocol;
|
||||||
|
import net.krakatoa.proxy.socket.SocketClient;
|
||||||
|
import net.krakatoa.proxy.util.Formatter;
|
||||||
import net.md_5.bungee.api.plugin.Plugin;
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
import net.md_5.bungee.api.plugin.PluginManager;
|
import net.md_5.bungee.api.plugin.PluginManager;
|
||||||
|
import org.bson.Document;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class ProxySystem extends Plugin {
|
public class ProxySystem extends Plugin {
|
||||||
|
@ -31,48 +25,44 @@ public class ProxySystem extends Plugin {
|
||||||
private static ProxySystem instance;
|
private static ProxySystem instance;
|
||||||
|
|
||||||
private ConfigHandler configHandler;
|
private ConfigHandler configHandler;
|
||||||
private Formatter formatter;
|
|
||||||
private KraSocketClientProtocol kraSocketClientProtocol;
|
|
||||||
private KraSocketClient kraSocketClient;
|
|
||||||
private KraSocketClientEventInitiater kraSocketClientEventInitiater;
|
|
||||||
private KraSocketClientEventInterface kraSocketClientEventInterface;
|
|
||||||
private MongoManager mongoManager;
|
private MongoManager mongoManager;
|
||||||
private RedisManager redisManager;
|
private SocketClient socketClient;
|
||||||
|
private KraProtocol kraProtocol;
|
||||||
|
private Formatter formatter;
|
||||||
|
|
||||||
|
private MongoCollection<Document> players;
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
this.configHandler = new ConfigHandler();
|
configHandler = new ConfigHandler();
|
||||||
this.configHandler.load();
|
configHandler.load();
|
||||||
|
|
||||||
this.formatter = new Formatter();
|
kraProtocol = new KraProtocol();
|
||||||
|
formatter = new Formatter();
|
||||||
|
|
||||||
this.kraSocketClientProtocol = new KraSocketClientProtocol();
|
System.out.println(
|
||||||
|
"mongo cfg " + configHandler.getMongodbHost() + " " + configHandler.getMongodbUsername());
|
||||||
|
|
||||||
KraSocketClientConfig kraSocketClientConfig = new KraSocketClientConfig(
|
mongoManager = new MongoManager(configHandler.getMongodbHost(),
|
||||||
this.configHandler.getWebSocketProtocol(), this.configHandler.getWebSocketHost(),
|
configHandler.getMongodbPort(), configHandler.getMongodbUsername(),
|
||||||
this.configHandler.getWebSocketPort(), this.configHandler.getWebSocketAccessKey(),
|
configHandler.getMongodbPassword());
|
||||||
"proxy-1", this.configHandler.getWebSocketAckTimeouts());
|
mongoManager.connect(configHandler.getMongodbDatabase());
|
||||||
|
|
||||||
this.kraSocketClientEventInitiater = new KraSocketClientEventInitiater();
|
try {
|
||||||
this.kraSocketClientEventInterface = new SocketClientMessageListener();
|
socketClient = new SocketClient(
|
||||||
|
new URI(configHandler.getWebSocketProtocol() + "://" + configHandler.getWebSocketHost()
|
||||||
|
+ ":" + configHandler.getWebSocketPort() + "/ws?t="
|
||||||
|
+ configHandler.getWebSocketAccessKey() + "&s=proxy-1"));
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
this.kraSocketClient = new KraSocketClient(kraSocketClientConfig,
|
socketClient.connect();
|
||||||
this.kraSocketClientEventInterface, this.kraSocketClientProtocol);
|
|
||||||
|
|
||||||
this.kraSocketClient.getSocketClient().connect();
|
players = mongoManager.getMongoDatabase().getCollection("players");
|
||||||
|
|
||||||
this.mongoManager = new MongoManager(
|
|
||||||
new MongoConfig(this.configHandler.getMongodbHost(), this.configHandler.getMongodbPort(),
|
|
||||||
this.configHandler.getMongodbUsername(), this.configHandler.getMongodbPassword(),
|
|
||||||
this.configHandler.getMongodbDatabase()));
|
|
||||||
this.mongoManager.connect();
|
|
||||||
|
|
||||||
this.redisManager = new RedisManager(
|
|
||||||
new RedisConfig(this.configHandler.getRedisHost(), this.configHandler.getRedisPort()));
|
|
||||||
this.redisManager.connect();
|
|
||||||
|
|
||||||
loadListeners();
|
loadListeners();
|
||||||
loadCommands();
|
loadCommands();
|
||||||
|
@ -80,18 +70,15 @@ public class ProxySystem extends Plugin {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
this.kraSocketClient.getSocketClient().getConnection().close();
|
socketClient.getConnection().close();
|
||||||
this.kraSocketClient.getSocketClient().getConnection().closeConnection(1, "");
|
socketClient.getConnection().closeConnection(1, "");
|
||||||
|
|
||||||
this.mongoManager.shutdown();
|
|
||||||
this.redisManager.shutdown();
|
|
||||||
|
|
||||||
instance = null;
|
instance = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadListeners() {
|
public void loadListeners() {
|
||||||
PluginManager pluginManager = getProxy().getPluginManager();
|
PluginManager pluginManager = getProxy().getPluginManager();
|
||||||
Arrays.asList(new PostLoginListener(), new PlayerDisconnectListener(), new LoginListener())
|
Arrays.asList(new PostLoginListener(), new PlayerDisconnectListener())
|
||||||
.forEach(listener -> {
|
.forEach(listener -> {
|
||||||
pluginManager.registerListener(this, listener);
|
pluginManager.registerListener(this, listener);
|
||||||
});
|
});
|
||||||
|
@ -99,10 +86,16 @@ public class ProxySystem extends Plugin {
|
||||||
|
|
||||||
public void loadCommands() {
|
public void loadCommands() {
|
||||||
PluginManager pluginManager = getProxy().getPluginManager();
|
PluginManager pluginManager = getProxy().getPluginManager();
|
||||||
Arrays.asList(new CodeCommand("code"), new SendTestMessageCommand("sendTestMessage"),
|
Arrays.asList(new CodeCommand("code")).forEach(listener -> {
|
||||||
new KrakatoapCommand("krakatoap"))
|
pluginManager.registerCommand(this, listener);
|
||||||
.forEach(listener -> {
|
});
|
||||||
pluginManager.registerCommand(this, listener);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
TODO: proxy ping & join only accessible for 1.17.1 clients
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ public class CodeCommand extends Command {
|
||||||
|
|
||||||
// TODO: add url and copy text
|
// TODO: add url and copy text
|
||||||
//proxiedPlayer.sendMessage(new TextComponent("§eNeuer Code §c§l" + voiceWebCode));
|
//proxiedPlayer.sendMessage(new TextComponent("§eNeuer Code §c§l" + voiceWebCode));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
package net.krakatoa.proxy.command;
|
|
||||||
|
|
||||||
import de.dytanic.cloudnet.driver.CloudNetDriver;
|
|
||||||
import de.dytanic.cloudnet.driver.permission.IPermissionUser;
|
|
||||||
import earth.krakatao.debug.DebugMessage;
|
|
||||||
import net.krakatoa.proxy.ProxySystem;
|
|
||||||
import net.md_5.bungee.api.CommandSender;
|
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
||||||
import net.md_5.bungee.api.plugin.Command;
|
|
||||||
import org.redisson.api.RMap;
|
|
||||||
|
|
||||||
public class KrakatoapCommand extends Command {
|
|
||||||
|
|
||||||
public KrakatoapCommand(String name) {
|
|
||||||
super(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(CommandSender sender, String[] args) {
|
|
||||||
if (sender instanceof ProxiedPlayer) {
|
|
||||||
ProxiedPlayer player = (ProxiedPlayer) sender;
|
|
||||||
|
|
||||||
IPermissionUser permissionUser = CloudNetDriver.getInstance().getPermissionManagement()
|
|
||||||
.getUser(player.getUniqueId());
|
|
||||||
|
|
||||||
if (permissionUser != null && permissionUser.hasPermission("*").asBoolean()) {
|
|
||||||
player.sendMessage(new TextComponent(
|
|
||||||
DebugMessage.GetMessage(CloudNetDriver.getInstance().getComponentName(),
|
|
||||||
ProxySystem.getInstance().getKraSocketClient().getSocketClient()
|
|
||||||
.getDest(), ProxySystem.getInstance().getKraSocketClientProtocol()
|
|
||||||
.getSendQueueMessages().size(), ProxySystem.getInstance()
|
|
||||||
.getKraSocketClientProtocol()
|
|
||||||
.getReceivedQueueMessages().size())));
|
|
||||||
|
|
||||||
String uuid = ProxySystem.getInstance().getFormatter().formatUuid(player.getUniqueId());
|
|
||||||
|
|
||||||
RMap<String, String> map = ProxySystem.getInstance().getRedisManager()
|
|
||||||
.getRedissonClient()
|
|
||||||
.getMap("player:" + uuid);
|
|
||||||
|
|
||||||
if (!map.isEmpty()) {
|
|
||||||
player.sendMessage(new TextComponent("\n§cRedis player data:"));
|
|
||||||
map.forEach((key, value) -> {
|
|
||||||
player.sendMessage(new TextComponent("§7key: §e" + key + " §7value: §e" + value));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
package net.krakatoa.proxy.command;
|
|
||||||
|
|
||||||
import de.dytanic.cloudnet.driver.CloudNetDriver;
|
|
||||||
import de.dytanic.cloudnet.driver.permission.IPermissionUser;
|
|
||||||
import earth.krakatao.protocol.KraSocketClientProtocolMessage;
|
|
||||||
import earth.krakatao.protocol.KraSocketClientProtocolStatus;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
import net.krakatoa.proxy.ProxySystem;
|
|
||||||
import net.md_5.bungee.api.CommandSender;
|
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
||||||
import net.md_5.bungee.api.plugin.Command;
|
|
||||||
|
|
||||||
public class SendTestMessageCommand extends Command {
|
|
||||||
|
|
||||||
// /sendTestMessage <status> <cmdID> <dest> <cmdNumber> <msg>
|
|
||||||
|
|
||||||
public SendTestMessageCommand(String name) {
|
|
||||||
super(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(CommandSender commandSender, String[] args) {
|
|
||||||
if (commandSender instanceof ProxiedPlayer) {
|
|
||||||
ProxiedPlayer proxiedPlayer = (ProxiedPlayer) commandSender;
|
|
||||||
|
|
||||||
IPermissionUser permissionUser = CloudNetDriver.getInstance().getPermissionManagement()
|
|
||||||
.getUser(proxiedPlayer.getUniqueId());
|
|
||||||
|
|
||||||
if (permissionUser != null && permissionUser.hasPermission("*").asBoolean()) {
|
|
||||||
if (args.length == 5) {
|
|
||||||
try {
|
|
||||||
int cmdID;
|
|
||||||
|
|
||||||
byte status = Byte.parseByte(args[0]);
|
|
||||||
|
|
||||||
if (status == KraSocketClientProtocolStatus.GET.getStatus()) {
|
|
||||||
cmdID = ProxySystem.getInstance().getKraSocketClientProtocol().generateCmdID();
|
|
||||||
} else {
|
|
||||||
cmdID = Byte.parseByte(args[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Consumer<KraSocketClientProtocolMessage> consumer = null;
|
|
||||||
if (status == KraSocketClientProtocolStatus.GET.getStatus()) {
|
|
||||||
consumer = kraSocketClientProtocolMessage -> {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent(
|
|
||||||
"Received msg -> status:" + kraSocketClientProtocolMessage.getStatus()
|
|
||||||
+ " cmdID: "
|
|
||||||
+ kraSocketClientProtocolMessage.getCmdID() + " dest: "
|
|
||||||
+ kraSocketClientProtocolMessage.getDest() + " uuid: "
|
|
||||||
+ kraSocketClientProtocolMessage.getUuid() + " cmdNumber: "
|
|
||||||
+ kraSocketClientProtocolMessage.getCmdNumber() + " args: "
|
|
||||||
+ kraSocketClientProtocolMessage.getArgs()));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
KraSocketClientProtocolMessage kraSocketClientProtocolMessage = null;
|
|
||||||
|
|
||||||
kraSocketClientProtocolMessage = new KraSocketClientProtocolMessage(
|
|
||||||
status, (byte) cmdID, Integer.parseInt(args[2]),
|
|
||||||
proxiedPlayer.getUniqueId(), Integer.parseInt(args[3]), args[4],
|
|
||||||
consumer);
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getKraSocketClient().getSocketClient()
|
|
||||||
.SendMessage(kraSocketClientProtocolMessage);
|
|
||||||
} catch (NumberFormatException exception) {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§7Error: §cNumberFormatException"));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent(
|
|
||||||
"§cVerwendung: §7/sendTestMessage <status> <cmdID> <dest> <cmdNumber> <msg>"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,7 +2,6 @@ package net.krakatoa.proxy.config;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.md_5.bungee.config.Configuration;
|
import net.md_5.bungee.config.Configuration;
|
||||||
import net.md_5.bungee.config.ConfigurationProvider;
|
import net.md_5.bungee.config.ConfigurationProvider;
|
||||||
|
@ -15,7 +14,6 @@ public class ConfigHandler {
|
||||||
private String webSocketProtocol;
|
private String webSocketProtocol;
|
||||||
private String webSocketHost;
|
private String webSocketHost;
|
||||||
private int webSocketPort;
|
private int webSocketPort;
|
||||||
private List<Long> webSocketAckTimeouts;
|
|
||||||
|
|
||||||
private String webVoiceAddress;
|
private String webVoiceAddress;
|
||||||
|
|
||||||
|
@ -25,18 +23,15 @@ public class ConfigHandler {
|
||||||
private String mongodbUsername;
|
private String mongodbUsername;
|
||||||
private String mongodbPassword;
|
private String mongodbPassword;
|
||||||
|
|
||||||
private String redisHost;
|
|
||||||
private int redisPort;
|
|
||||||
|
|
||||||
public void load() throws IOException {
|
public void load() throws IOException {
|
||||||
|
// TODO change file to yaml
|
||||||
Configuration configuration = ConfigurationProvider.getProvider(YamlConfiguration.class)
|
Configuration configuration = ConfigurationProvider.getProvider(YamlConfiguration.class)
|
||||||
.load(new File("/home/kra-minecraft/kraConfigs", "kraSettings.yaml"));
|
.load(new File("/home/CloudNet/kraConfigs", "kraSettings.yaml"));
|
||||||
|
|
||||||
webSocketAccessKey = configuration.getString("web_socket.access_key");
|
webSocketAccessKey = configuration.getString("web_socket.access_key");
|
||||||
webSocketProtocol = configuration.getString("web_socket.protocol");
|
webSocketProtocol = configuration.getString("web_socket.protocol");
|
||||||
webSocketHost = configuration.getString("web_socket.host");
|
webSocketHost = configuration.getString("web_socket.host");
|
||||||
webSocketPort = configuration.getInt("web_socket.port");
|
webSocketPort = configuration.getInt("web_socket.port");
|
||||||
webSocketAckTimeouts = configuration.getLongList("web_socket.ack_timeouts");
|
|
||||||
|
|
||||||
webVoiceAddress = configuration.getString("web.voice_address");
|
webVoiceAddress = configuration.getString("web.voice_address");
|
||||||
|
|
||||||
|
@ -45,8 +40,5 @@ public class ConfigHandler {
|
||||||
mongodbDatabase = configuration.getString("mongodb.database");
|
mongodbDatabase = configuration.getString("mongodb.database");
|
||||||
mongodbUsername = configuration.getString("mongodb.username");
|
mongodbUsername = configuration.getString("mongodb.username");
|
||||||
mongodbPassword = configuration.getString("mongodb.password");
|
mongodbPassword = configuration.getString("mongodb.password");
|
||||||
|
|
||||||
redisHost = configuration.getString("redis.host");
|
|
||||||
redisPort = configuration.getInt("redis.port");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
package net.krakatoa.proxy.listener;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
|
||||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
|
||||||
import net.md_5.bungee.api.event.LoginEvent;
|
|
||||||
import net.md_5.bungee.api.plugin.Listener;
|
|
||||||
import net.md_5.bungee.event.EventHandler;
|
|
||||||
|
|
||||||
public class LoginListener implements Listener {
|
|
||||||
|
|
||||||
// https://wiki.vg/Protocol_version_numbers
|
|
||||||
|
|
||||||
private final BaseComponent[] component = new ComponentBuilder(
|
|
||||||
"You must use 1.18.X to play here").color(
|
|
||||||
ChatColor.RED).create();
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onLoginEvent(LoginEvent event) {
|
|
||||||
// prevent players from joing with an version under 1.18
|
|
||||||
if (event.getConnection().getVersion() < 757) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
event.setCancelReason(component);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
83
src/main/java/net/krakatoa/proxy/listener/PlayerDisconnectListener.java
Executable file → Normal file
83
src/main/java/net/krakatoa/proxy/listener/PlayerDisconnectListener.java
Executable file → Normal file
|
@ -1,22 +1,9 @@
|
||||||
package net.krakatoa.proxy.listener;
|
package net.krakatoa.proxy.listener;
|
||||||
|
|
||||||
import com.mongodb.client.model.Filters;
|
|
||||||
import com.mongodb.client.model.UpdateOptions;
|
|
||||||
import com.mongodb.client.model.Updates;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import net.krakatoa.proxy.ProxySystem;
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||||
import net.md_5.bungee.api.plugin.Listener;
|
import net.md_5.bungee.api.plugin.Listener;
|
||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
import org.bson.Document;
|
|
||||||
import org.bson.conversions.Bson;
|
|
||||||
import org.reactivestreams.Publisher;
|
|
||||||
import org.reactivestreams.Subscriber;
|
|
||||||
import org.reactivestreams.Subscription;
|
|
||||||
import org.redisson.api.RMap;
|
|
||||||
|
|
||||||
public class PlayerDisconnectListener implements Listener {
|
public class PlayerDisconnectListener implements Listener {
|
||||||
|
|
||||||
|
@ -24,70 +11,16 @@ public class PlayerDisconnectListener implements Listener {
|
||||||
public void onDisconnect(PlayerDisconnectEvent event) {
|
public void onDisconnect(PlayerDisconnectEvent event) {
|
||||||
ProxiedPlayer proxiedPlayer = event.getPlayer();
|
ProxiedPlayer proxiedPlayer = event.getPlayer();
|
||||||
|
|
||||||
String uuid = ProxySystem.getInstance().getFormatter()
|
//String uuid = ProxySystem.getInstance().getFormatter()
|
||||||
.formatUuid(proxiedPlayer.getUniqueId().toString());
|
// .formatUuid(proxiedPlayer.getUniqueId().toString());
|
||||||
|
|
||||||
// redis
|
/*
|
||||||
RMap<String, String> map = ProxySystem.getInstance().getRedisManager()
|
ProxySystem.getInstance().getPlayerRegistrationProcess()
|
||||||
.getRedissonClient()
|
.deleteOne(Filters.eq("uuid", uuid),
|
||||||
.getMap("player:" + uuid);
|
(deleteResult, throwable) -> {
|
||||||
|
|
||||||
// mongo
|
System.out.println("delete " + deleteResult.getDeletedCount());
|
||||||
Publisher<Document> document = ProxySystem.getInstance().getMongoManager()
|
}); */
|
||||||
.getPlayersCollection()
|
|
||||||
.find(Filters.eq("uuid", uuid)).first();
|
|
||||||
|
|
||||||
document.subscribe(new Subscriber<>() {
|
|
||||||
@Override
|
|
||||||
public void onSubscribe(Subscription subscription) {
|
|
||||||
subscription.request(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNext(Document document) {
|
|
||||||
List<Bson> updatesList = new ArrayList<>();
|
|
||||||
|
|
||||||
map.forEach((key, value) -> {
|
|
||||||
if (!Objects.equals(key, "_id") && !Objects.equals(key, "uuid")) {
|
|
||||||
updatesList.add(Updates.set(key, value));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Bson updates = Updates.combine(updatesList);
|
|
||||||
|
|
||||||
UpdateOptions options = new UpdateOptions().upsert(true);
|
|
||||||
|
|
||||||
System.out.println("doc: " + document.keySet());
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getMongoManager().getPlayersCollection()
|
|
||||||
.updateOne(Filters.eq("uuid", uuid), updates);
|
|
||||||
/*
|
|
||||||
ProxySystem.getInstance().getMongoManager().getPlayersCollection()
|
|
||||||
.updateOne(document, updates, options, (result, t) -> {
|
|
||||||
System.out.println(result == null);
|
|
||||||
|
|
||||||
if (result != null) {
|
|
||||||
System.out.println("Modified document count: " + result.getModifiedCount());
|
|
||||||
System.out.println("Upserted id: " + result.getUpsertedId());
|
|
||||||
}
|
|
||||||
}); */
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(Throwable throwable) {
|
|
||||||
System.out.println("Mongo player is null on disconnect");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onComplete() {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// redis
|
|
||||||
if (!map.isEmpty()) {
|
|
||||||
map.delete();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,218 +1,99 @@
|
||||||
package net.krakatoa.proxy.listener;
|
package net.krakatoa.proxy.listener;
|
||||||
|
|
||||||
import com.mongodb.client.model.Filters;
|
import com.mongodb.client.model.Filters;
|
||||||
import java.io.IOException;
|
import com.mongodb.client.model.UpdateOptions;
|
||||||
|
import com.mongodb.client.model.Updates;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import net.krakatoa.proxy.ProxySystem;
|
import net.krakatoa.proxy.ProxySystem;
|
||||||
|
import net.krakatoa.proxy.protocol.KraProtocolMessage;
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.chat.ClickEvent;
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
import net.md_5.bungee.api.chat.HoverEvent;
|
import net.md_5.bungee.api.chat.HoverEvent;
|
||||||
import net.md_5.bungee.api.chat.HoverEvent.Action;
|
import net.md_5.bungee.api.chat.HoverEvent.Action;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import net.md_5.bungee.api.chat.hover.content.Text;
|
import net.md_5.bungee.api.chat.hover.content.Text;
|
||||||
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.event.PostLoginEvent;
|
import net.md_5.bungee.api.event.PostLoginEvent;
|
||||||
import net.md_5.bungee.api.event.ServerSwitchEvent;
|
import net.md_5.bungee.api.event.ServerSwitchEvent;
|
||||||
import net.md_5.bungee.api.plugin.Listener;
|
import net.md_5.bungee.api.plugin.Listener;
|
||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.reactivestreams.Publisher;
|
import org.bson.conversions.Bson;
|
||||||
import org.reactivestreams.Subscriber;
|
|
||||||
import org.reactivestreams.Subscription;
|
|
||||||
|
|
||||||
public class PostLoginListener implements Listener {
|
public class PostLoginListener implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPostLogin(PostLoginEvent event) throws IOException {
|
public void onPostLogin(PostLoginEvent event) {
|
||||||
ProxiedPlayer proxiedPlayer = event.getPlayer();
|
ProxiedPlayer proxiedPlayer = event.getPlayer();
|
||||||
|
|
||||||
String uuid = ProxySystem.getInstance().getFormatter()
|
String uuid = ProxySystem.getInstance().getFormatter()
|
||||||
.formatUuid(proxiedPlayer.getUniqueId().toString());
|
.formatUuid(proxiedPlayer.getUniqueId().toString());
|
||||||
|
|
||||||
Publisher<Document> document = ProxySystem.getInstance().getMongoManager()
|
ProxySystem.getInstance().getPlayers()
|
||||||
.getPlayersCollection()
|
.find(Filters.eq("uuid", uuid))
|
||||||
.find(Filters.eq("uuid", uuid)).first();
|
.first((document, throwable) -> {
|
||||||
|
if (document == null) {
|
||||||
|
// create player in db and send voice url
|
||||||
|
System.out.println("create player in db");
|
||||||
|
String voiceWebCode = generateVoiceWebCode(uuid);
|
||||||
|
|
||||||
ProxySystem.getInstance().getLogger().info("debug1");
|
document = new Document("uuid", uuid).append("voiceWebCode", voiceWebCode);
|
||||||
document.subscribe(new Subscriber<>() {
|
|
||||||
@Override
|
|
||||||
public void onSubscribe(Subscription subscription) {
|
|
||||||
subscription.request(1);
|
|
||||||
ProxySystem.getInstance().getLogger().info("Subscripe");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
ProxySystem.getInstance().getPlayers().insertOne(document, (unused, throwable1) -> {
|
||||||
public void onNext(Document document) {
|
System.out.println("insertOne");
|
||||||
ProxySystem.getInstance().getLogger().info("Inserted");
|
});
|
||||||
ProxySystem.getInstance().getLogger().info("Inserted: " + document);
|
|
||||||
|
|
||||||
|
sendVoiceWebCodeUrl(proxiedPlayer, voiceWebCode);
|
||||||
|
} else {
|
||||||
|
// check if both sockets connected
|
||||||
|
int cmdID = ProxySystem.getInstance().getKraProtocol().getCmdID();
|
||||||
|
|
||||||
}
|
ProxySystem.getInstance().getKraProtocol().SendMessage(11, cmdID, 1, uuid, 10, "");
|
||||||
|
|
||||||
@Override
|
Document finalDocument = document;
|
||||||
public void onError(Throwable throwable) {
|
Consumer<KraProtocolMessage> consumer = value -> {
|
||||||
ProxySystem.getInstance().getLogger().info("Failed " + throwable);
|
if (value.getArgs().equals("1")) {
|
||||||
}
|
// connected! Send player to game server
|
||||||
|
System.out.println(
|
||||||
|
proxiedPlayer.getName() + " sockets connected! Send player to game server");
|
||||||
|
proxiedPlayer.sendMessage(
|
||||||
|
new TextComponent("§bWillkommen zurück §6" + proxiedPlayer.getDisplayName()));
|
||||||
|
|
||||||
@Override
|
ProxyServer.getInstance().getScheduler().schedule(ProxySystem.getInstance(), () -> {
|
||||||
public void onComplete() {
|
ServerInfo serverInfos = ProxyServer.getInstance().getServerInfo("NewYork-1");
|
||||||
ProxySystem.getInstance().getLogger().info("Completed");
|
proxiedPlayer.connect(serverInfos);
|
||||||
}
|
}, 2L, TimeUnit.SECONDS);
|
||||||
});
|
} else {
|
||||||
|
// not connected! Send voice url
|
||||||
|
System.out.println(
|
||||||
|
proxiedPlayer.getName() + " sockets not connected! Send voice url");
|
||||||
|
|
||||||
ProxySystem.getInstance().getLogger().info("debug2 testa");
|
String voiceWebCode = generateVoiceWebCode(uuid);
|
||||||
|
|
||||||
|
Bson updates = Updates.combine(Updates.set("voiceWebCode", voiceWebCode));
|
||||||
|
|
||||||
|
UpdateOptions options = new UpdateOptions().upsert(true);
|
||||||
|
|
||||||
/*
|
ProxySystem.getInstance().getPlayers()
|
||||||
if (document == null) { // new player - create entries in databases
|
.updateOne(finalDocument, updates, options, (updateResult, throwable1) -> {
|
||||||
System.out.println("create player in db");
|
});
|
||||||
String voiceWebCode = generateVoiceWebCode(uuid);
|
|
||||||
|
|
||||||
document = new Document("uuid", uuid).append("voiceWebCode", voiceWebCode);
|
System.out.println("voiceWebCode " + voiceWebCode);
|
||||||
|
|
||||||
ProxySystem.getInstance().getMongoManager().getPlayersCollection().insertOne(document);
|
sendVoiceWebCodeUrl(proxiedPlayer, voiceWebCode);
|
||||||
|
}
|
||||||
|
|
||||||
sendVoiceWebCodeUrl(proxiedPlayer, voiceWebCode);
|
System.out.println(
|
||||||
|
"consumer response value " + value.getUuid() + " " + value.getCmdID());
|
||||||
// redis
|
};
|
||||||
|
ProxySystem.getInstance().getKraProtocol().getConsumerHashMap().put(cmdID, consumer);
|
||||||
RMap<String, String> map = ProxySystem.getInstance().getRedisManager()
|
|
||||||
.getRedissonClient()
|
|
||||||
.getMap("player:" + uuid);
|
|
||||||
|
|
||||||
if (map.isEmpty()) {
|
|
||||||
map.put("uuid", uuid);
|
|
||||||
map.put("voiceWebCode", "voiceWebCode");
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getLogger().info("PUT !");
|
|
||||||
} else {
|
|
||||||
ProxySystem.getInstance().getLogger()
|
|
||||||
.warning("REDIS player " + uuid + " exists in the cache, but should not exist");
|
|
||||||
}
|
|
||||||
} else { // player found in the database
|
|
||||||
|
|
||||||
// redis
|
|
||||||
ProxySystem.getInstance().getLogger().info("mongodb player " + document.keySet());
|
|
||||||
|
|
||||||
RMap<String, String> map = ProxySystem.getInstance().getRedisManager()
|
|
||||||
.getRedissonClient()
|
|
||||||
.getMap("player:" + uuid);
|
|
||||||
|
|
||||||
if (map.isEmpty()) {
|
|
||||||
map.put("uuid", uuid);
|
|
||||||
map.put("voiceWebCode", "voiceWebCode");
|
|
||||||
|
|
||||||
document.forEach((key, value) -> {
|
|
||||||
if (!Objects.equals(key, "_id")) {
|
|
||||||
ProxySystem.getInstance().getLogger()
|
|
||||||
.info("key " + key + " value " + value.toString());
|
|
||||||
map.put(key, value.toString());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ProxySystem.getInstance().getLogger().info("PUT !");
|
|
||||||
} else {
|
|
||||||
ProxySystem.getInstance().getLogger()
|
|
||||||
.warning("REDIS player " + uuid + " exists in the cache, but should not exist");
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if both sockets connected
|
|
||||||
int cmdID = ProxySystem.getInstance().getKraSocketClientProtocol().generateCmdID();
|
|
||||||
|
|
||||||
Document finalDocument = document;
|
|
||||||
Consumer<KraSocketClientProtocolMessage> consumer = value -> {
|
|
||||||
if (value.getArgs().equals("1")) {
|
|
||||||
// connected! Send player to game server
|
|
||||||
System.out.println(
|
|
||||||
proxiedPlayer.getName() + " sockets connected! Send player to game server");
|
|
||||||
proxiedPlayer.sendMessage(
|
|
||||||
new TextComponent("§bWillkommen zurück §6" + proxiedPlayer.getDisplayName()));
|
|
||||||
|
|
||||||
ProxyServer.getInstance().getScheduler().schedule(ProxySystem.getInstance(), () -> {
|
|
||||||
ServerInfo serverInfos = ProxyServer.getInstance().getServerInfo("NewYork-1");
|
|
||||||
proxiedPlayer.connect(serverInfos);
|
|
||||||
}, 2L, TimeUnit.SECONDS);
|
|
||||||
} else {
|
|
||||||
// not connected! Send voice url
|
|
||||||
System.out.println(
|
|
||||||
proxiedPlayer.getName() + " sockets not connected! Send voice url");
|
|
||||||
|
|
||||||
String voiceWebCode = generateVoiceWebCode(uuid);
|
|
||||||
|
|
||||||
Bson updates = Updates.combine(Updates.set("voiceWebCode", voiceWebCode));
|
|
||||||
|
|
||||||
UpdateOptions options = new UpdateOptions().upsert(true);
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getMongoManager().getPlayersCollection()
|
|
||||||
.updateOne(finalDocument, updates, options);
|
|
||||||
|
|
||||||
System.out.println("voiceWebCode " + voiceWebCode);
|
|
||||||
|
|
||||||
sendVoiceWebCodeUrl(proxiedPlayer, voiceWebCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println(
|
|
||||||
"consumer response value " + value.getUuid() + " " + value.getCmdID());
|
|
||||||
};
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getKraSocketClient().getSocketClient()
|
|
||||||
.SendMessage(new KraSocketClientProtocolMessage(
|
|
||||||
KraSocketClientProtocolStatus.GET.getStatus(), cmdID,
|
|
||||||
KraSocketClientProtocolDest.BACKEND.getStatus(), proxiedPlayer.getUniqueId(),
|
|
||||||
(short) 10, "", consumer));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
MessageBufferPacker packer = MessagePack.newDefaultBufferPacker();
|
|
||||||
|
|
||||||
packer.packString(proxiedPlayer.getName());
|
|
||||||
packer.packInt(3501983);
|
|
||||||
packer.packArrayHeader(2);
|
|
||||||
packer.packString("number 1");
|
|
||||||
packer.packString("number 2");
|
|
||||||
|
|
||||||
packer.close(); */
|
|
||||||
/*
|
|
||||||
RBucket<PlayerTest> bucket = ProxySystem.getInstance().getRedisManager().getRedissonClient()
|
|
||||||
.getBucket("player:" + proxiedPlayer.getUniqueId().toString());
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getLogger().info("here1");
|
|
||||||
|
|
||||||
if (bucket != null) {
|
|
||||||
PlayerTest playerTest = bucket.get();
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getLogger().info("here2 " + (playerTest == null));
|
|
||||||
|
|
||||||
if (playerTest == null) {
|
|
||||||
playerTest = new PlayerTest(proxiedPlayer.getName(), 250, "scooter");
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getLogger()
|
|
||||||
.info("my playertest " + playerTest.getName() + playerTest.getCar());
|
|
||||||
|
|
||||||
bucket.set(playerTest);
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getLogger().info("created bucket for playerTest");
|
|
||||||
} else {
|
|
||||||
ProxySystem.getInstance().getLogger().info("playerTest " + playerTest);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(packer.toByteArray());
|
|
||||||
|
|
||||||
String playerName = unpacker.unpackString();
|
|
||||||
int n = unpacker.unpackInt();
|
|
||||||
int nuArr = unpacker.unpackArrayHeader();
|
|
||||||
String[] nu = new String[nuArr];
|
|
||||||
for (int i = 0; i < nuArr; i++) {
|
|
||||||
nu[i] = unpacker.unpackString();
|
|
||||||
}
|
|
||||||
|
|
||||||
unpacker.close(); */
|
|
||||||
/*
|
|
||||||
ProxySystem.getInstance().getLogger()
|
|
||||||
.info("name: " + playerName + " " + n + " " + nu[0] + " " + nu[1]); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendVoiceWebCodeUrl(ProxiedPlayer proxiedPlayer, String voiceWebCode) {
|
public void sendVoiceWebCodeUrl(ProxiedPlayer proxiedPlayer, String voiceWebCode) {
|
||||||
|
|
|
@ -1,214 +0,0 @@
|
||||||
package net.krakatoa.proxy.listener;
|
|
||||||
|
|
||||||
import de.dytanic.cloudnet.driver.CloudNetDriver;
|
|
||||||
import de.dytanic.cloudnet.driver.service.ServiceConfiguration;
|
|
||||||
import de.dytanic.cloudnet.driver.service.ServiceInfoSnapshot;
|
|
||||||
import de.dytanic.cloudnet.driver.service.ServiceTask;
|
|
||||||
import de.dytanic.cloudnet.ext.bridge.BridgeServiceProperty;
|
|
||||||
import de.dytanic.cloudnet.ext.bridge.player.ICloudPlayer;
|
|
||||||
import de.dytanic.cloudnet.ext.bridge.player.IPlayerManager;
|
|
||||||
import de.dytanic.cloudnet.ext.bridge.player.ServicePlayer;
|
|
||||||
import earth.krakatao.events.KraSocketClientEventInterface;
|
|
||||||
import earth.krakatao.protocol.KraSocketClientProtocolDest;
|
|
||||||
import earth.krakatao.protocol.KraSocketClientProtocolMessage;
|
|
||||||
import earth.krakatao.protocol.KraSocketClientProtocolStatus;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import net.krakatoa.proxy.ProxySystem;
|
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
||||||
import org.java_websocket.handshake.ServerHandshake;
|
|
||||||
|
|
||||||
public class SocketClientMessageListener implements KraSocketClientEventInterface {
|
|
||||||
|
|
||||||
private final HashMap<String, Collection<ServicePlayer>> playersAutoRestartServerSystem = new HashMap<>();
|
|
||||||
private final IPlayerManager playerManager = CloudNetDriver.getInstance().getServicesRegistry()
|
|
||||||
.getFirstService(IPlayerManager.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(ServerHandshake serverHandshake) {
|
|
||||||
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§cSocket §8» §aConnected"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMessage(KraSocketClientProtocolMessage kraProtocolMessage) {
|
|
||||||
System.out.println(
|
|
||||||
"kraProtocolMessage cmdID: " + kraProtocolMessage.getCmdID() + " cmdNumber: "
|
|
||||||
+ kraProtocolMessage.getCmdNumber() + " args: " + kraProtocolMessage.getArgs());
|
|
||||||
|
|
||||||
System.out.println(
|
|
||||||
"sendMessagesQueue size: " + ProxySystem.getInstance().getKraSocketClientProtocol()
|
|
||||||
.getSendQueueMessages().size());
|
|
||||||
|
|
||||||
if (kraProtocolMessage.getStatus() == KraSocketClientProtocolStatus.REPLY.getStatus()
|
|
||||||
&& ProxySystem.getInstance().getKraSocketClientProtocol().getSendQueueMessages()
|
|
||||||
.containsKey(kraProtocolMessage.getCmdID())) {
|
|
||||||
|
|
||||||
KraSocketClientProtocolMessage kraSocketClientProtocolMessage = ProxySystem.getInstance()
|
|
||||||
.getKraSocketClientProtocol().getSendQueueMessages().get(kraProtocolMessage.getCmdID());
|
|
||||||
|
|
||||||
if (kraSocketClientProtocolMessage.getMessageConsumer() != null) {
|
|
||||||
ProxySystem.getInstance().getLogger()
|
|
||||||
.info("accept " + kraProtocolMessage.getCmdID());
|
|
||||||
kraSocketClientProtocolMessage.getMessageConsumer().accept(kraProtocolMessage);
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getKraSocketClientProtocol()
|
|
||||||
.removeMessageFromSendQueue(kraProtocolMessage.getCmdID());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (kraProtocolMessage.getCmdNumber()) {
|
|
||||||
case 33329: { // stop server - server auto restart
|
|
||||||
String serverName = kraProtocolMessage.getArgs().toLowerCase();
|
|
||||||
|
|
||||||
if (serverName.equals("lobby")) { // start new lobby
|
|
||||||
if (CloudNetDriver.getInstance().getServiceTaskProvider().isServiceTaskPresent("Lobby")) {
|
|
||||||
ServiceTask serviceTask = CloudNetDriver.getInstance().getServiceTaskProvider()
|
|
||||||
.getServiceTask("Lobby");
|
|
||||||
|
|
||||||
if (serviceTask != null) {
|
|
||||||
ServiceInfoSnapshot serviceInfoSnapshot = ServiceConfiguration.builder(serviceTask)
|
|
||||||
.build().createNewService();
|
|
||||||
|
|
||||||
if (serviceInfoSnapshot != null) {
|
|
||||||
System.out.println("serviceTask " + serviceInfoSnapshot.getName());
|
|
||||||
playersAutoRestartServerSystem.put(serviceInfoSnapshot.getName(), null);
|
|
||||||
|
|
||||||
serviceInfoSnapshot.provider().start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else { // game server
|
|
||||||
ServiceInfoSnapshot serviceInfoSnapshot = CloudNetDriver.getInstance()
|
|
||||||
.getCloudServiceProvider()
|
|
||||||
.getCloudServiceByName(serverName);
|
|
||||||
|
|
||||||
if (serviceInfoSnapshot != null) {
|
|
||||||
serviceInfoSnapshot.getProperty(BridgeServiceProperty.PLAYERS).ifPresent(players -> {
|
|
||||||
players.forEach(player -> {
|
|
||||||
ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy()
|
|
||||||
.getPlayer(player.getUniqueId());
|
|
||||||
proxiedPlayer.sendMessage(
|
|
||||||
new TextComponent("§4AutoRestart §8» §cRestarting server..."));
|
|
||||||
});
|
|
||||||
|
|
||||||
playersAutoRestartServerSystem.put(serverName, players);
|
|
||||||
});
|
|
||||||
|
|
||||||
// stop target server
|
|
||||||
CloudNetDriver.getInstance().getCloudServiceProvider(serviceInfoSnapshot).stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 59739: { // send players back to server - auto restart system
|
|
||||||
String serverName = kraProtocolMessage.getArgs().toLowerCase();
|
|
||||||
|
|
||||||
System.out.println("servername is " + kraProtocolMessage.getArgs());
|
|
||||||
|
|
||||||
if (playersAutoRestartServerSystem.containsKey(
|
|
||||||
kraProtocolMessage.getArgs())) { // close old lobbies
|
|
||||||
Collection<ServiceInfoSnapshot> serviceInfoSnapshots = CloudNetDriver.getInstance()
|
|
||||||
.getCloudServiceProvider()
|
|
||||||
.getCloudServices("Lobby");
|
|
||||||
|
|
||||||
if (serviceInfoSnapshots != null) {
|
|
||||||
serviceInfoSnapshots.forEach(serviceInfoSnapshot -> {
|
|
||||||
System.out.println("containsKey" + playersAutoRestartServerSystem.containsKey(
|
|
||||||
serviceInfoSnapshot.getName()));
|
|
||||||
if (!playersAutoRestartServerSystem.containsKey(serviceInfoSnapshot.getName())) {
|
|
||||||
serviceInfoSnapshot.provider().stop();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
playersAutoRestartServerSystem.remove(kraProtocolMessage.getArgs());
|
|
||||||
}
|
|
||||||
} else if (playersAutoRestartServerSystem.containsKey(serverName)) { // send players back
|
|
||||||
playersAutoRestartServerSystem.get(serverName).forEach(servicePlayer -> {
|
|
||||||
ICloudPlayer cloudPlayer = playerManager.getOnlinePlayer(servicePlayer.getUniqueId());
|
|
||||||
|
|
||||||
if (cloudPlayer != null) {
|
|
||||||
cloudPlayer.getPlayerExecutor().connect(serverName);
|
|
||||||
|
|
||||||
ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy()
|
|
||||||
.getPlayer(cloudPlayer.getUniqueId());
|
|
||||||
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§4AutoRestart §8» §aSwitching back"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
playersAutoRestartServerSystem.remove(serverName);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 53874: { // test message - ack
|
|
||||||
ProxySystem.getInstance().getKraSocketClientProtocol().replyThatWeReceivedAckMessage(
|
|
||||||
ProxySystem.getInstance().getKraSocketClient().getSocketClient(),
|
|
||||||
ProxySystem.getInstance().getKraSocketClientProtocol(), kraProtocolMessage.getCmdID(),
|
|
||||||
KraSocketClientProtocolDest.BACKEND.getStatus(), kraProtocolMessage.getUuid(),
|
|
||||||
kraProtocolMessage.getCmdNumber());
|
|
||||||
|
|
||||||
System.out.println(
|
|
||||||
"cmdNumber 53874 answered back to uuid:" + kraProtocolMessage.getUuid()
|
|
||||||
+ " cmdIDByBackend:"
|
|
||||||
+ kraProtocolMessage.getCmdID());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 13337: // voice connection established
|
|
||||||
case 37657: // mobile connection established
|
|
||||||
case 64247: // mobile connection closed
|
|
||||||
case 22348: { // voice connection closed
|
|
||||||
ProxyServer.getInstance().getScheduler().runAsync(ProxySystem.getInstance(), () -> {
|
|
||||||
// ack msg -> Reply to backend that we received the message
|
|
||||||
ProxySystem.getInstance().getKraSocketClientProtocol()
|
|
||||||
.replyThatWeReceivedAckMessage(
|
|
||||||
ProxySystem.getInstance().getKraSocketClient().getSocketClient(),
|
|
||||||
ProxySystem.getInstance()
|
|
||||||
.getKraSocketClientProtocol(), kraProtocolMessage.getCmdID(),
|
|
||||||
KraSocketClientProtocolDest.BACKEND.getStatus(), kraProtocolMessage.getUuid(),
|
|
||||||
kraProtocolMessage.getCmdNumber());
|
|
||||||
|
|
||||||
ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy()
|
|
||||||
.getPlayer(kraProtocolMessage.getUuid());
|
|
||||||
|
|
||||||
if (proxiedPlayer != null) {
|
|
||||||
if (kraProtocolMessage.getCmdNumber() == 13337) {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§dVoice §8» §7Connection §aopened§7!"));
|
|
||||||
} else if (kraProtocolMessage.getCmdNumber() == 37657) {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§5Mobile §8» §7Connection §aopened§7!"));
|
|
||||||
} else if (kraProtocolMessage.getCmdNumber() == 64247) {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§5Mobile §8» §7Connection §cclosed§7!"));
|
|
||||||
} else {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§dVoice §8» §7Connection §cclosed§7!"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}// voice connection closed
|
|
||||||
default:
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(int code, String reason, boolean remote) {
|
|
||||||
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
|
|
||||||
proxiedPlayer.sendMessage(
|
|
||||||
new TextComponent(
|
|
||||||
"§cSocket §8» §c" + (remote ? "Connection! Closed by remote peer" : reason)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (code != 1) {
|
|
||||||
ProxyServer.getInstance().getScheduler().schedule(ProxySystem.getInstance(), () -> {
|
|
||||||
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
|
|
||||||
proxiedPlayer.sendMessage(new TextComponent("§cSocket §8» §7Reconnecting..."));
|
|
||||||
}
|
|
||||||
|
|
||||||
ProxySystem.getInstance().getKraSocketClient().getSocketClient().Reconnect();
|
|
||||||
}, 1L, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package net.krakatoa.proxy.mongo;
|
||||||
|
|
||||||
|
import com.mongodb.async.client.MongoClient;
|
||||||
|
import com.mongodb.async.client.MongoClients;
|
||||||
|
import com.mongodb.async.client.MongoCollection;
|
||||||
|
import com.mongodb.async.client.MongoDatabase;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bson.Document;
|
||||||
|
|
||||||
|
public class MongoManager {
|
||||||
|
|
||||||
|
private final String hostname;
|
||||||
|
private final int port;
|
||||||
|
private final String username;
|
||||||
|
private final String password;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private MongoDatabase mongoDatabase;
|
||||||
|
@Getter
|
||||||
|
private MongoClient mongoClient;
|
||||||
|
@Getter
|
||||||
|
private MongoCollection<Document> players;
|
||||||
|
|
||||||
|
public MongoManager(String hostname, int port, String username, String password) {
|
||||||
|
this.hostname = hostname;
|
||||||
|
this.port = port;
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void connect(String database) {
|
||||||
|
mongoClient = MongoClients.create(
|
||||||
|
"mongodb://" + username + ":" + password + "@" + hostname + ":" + port + "/?authSource="
|
||||||
|
+ database);
|
||||||
|
|
||||||
|
mongoDatabase = mongoClient.getDatabase(database);
|
||||||
|
players = mongoDatabase.getCollection("players");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,119 @@
|
||||||
|
package net.krakatoa.proxy.protocol;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import lombok.Getter;
|
||||||
|
import net.krakatoa.proxy.ProxySystem;
|
||||||
|
|
||||||
|
public class KraProtocol {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
ArrayList<Integer> cmdIDs = Lists.newArrayList();
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
HashMap<Integer, Consumer<KraProtocolMessage>> consumerHashMap = new HashMap<>();
|
||||||
|
|
||||||
|
public int getCmdID() {
|
||||||
|
if (cmdIDs.isEmpty()) {
|
||||||
|
cmdIDs.add(10);
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cmdID = cmdIDs.get(cmdIDs.size() - 1) + 1;
|
||||||
|
|
||||||
|
cmdIDs.add(cmdID);
|
||||||
|
|
||||||
|
// TODO: check max int value 2^32
|
||||||
|
|
||||||
|
return cmdID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendMessage(KraProtocolMessage kraProtocolMessage) {
|
||||||
|
SendMessage(kraProtocolMessage.getStatus(), kraProtocolMessage.getCmdID(),
|
||||||
|
kraProtocolMessage.getDest(), kraProtocolMessage.getUuid(),
|
||||||
|
kraProtocolMessage.getCmdNumber(), kraProtocolMessage.getArgs());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendMessage(int status, int cmdID, int dest, String uuid, int cmdNumber,
|
||||||
|
String args) {
|
||||||
|
System.out.println("sendMessage: " + status + " " + cmdID + " " + dest + " " + cmdNumber);
|
||||||
|
|
||||||
|
int argLen = args.length();
|
||||||
|
|
||||||
|
byte[] raw = new byte[40 + argLen];
|
||||||
|
|
||||||
|
raw[0] = (byte) status;
|
||||||
|
|
||||||
|
raw[1] = (byte) cmdID;
|
||||||
|
raw[2] = (byte) (cmdID >> 8);
|
||||||
|
raw[3] = (byte) (cmdID >> 16);
|
||||||
|
raw[4] = (byte) (cmdID >> 24);
|
||||||
|
|
||||||
|
raw[5] = (byte) dest;
|
||||||
|
|
||||||
|
byte[] uuidBytes = uuid.getBytes();
|
||||||
|
|
||||||
|
/* for (int i = 0; i < 32; i++) {
|
||||||
|
raw[6 + i] = uuidBytes[i];
|
||||||
|
}*/
|
||||||
|
|
||||||
|
System.arraycopy(uuidBytes, 0, raw, 6, 32);
|
||||||
|
|
||||||
|
raw[38] = (byte) cmdNumber;
|
||||||
|
raw[39] = (byte) (cmdNumber >> 8);
|
||||||
|
|
||||||
|
if (argLen > 0) {
|
||||||
|
for (int i = 0; i < argLen; i++) {
|
||||||
|
raw[40 + i] = (byte) args.charAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ProxySystem.getInstance().getSocketClient().SendMessage(raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
public KraProtocolMessage DecodeMessage(byte[] data) {
|
||||||
|
System.out.println("start decode");
|
||||||
|
|
||||||
|
byte status = data[0];
|
||||||
|
|
||||||
|
int cmdID = Byte.toUnsignedInt(data[1]);
|
||||||
|
|
||||||
|
cmdID += Byte.toUnsignedInt(data[2]) * 256;
|
||||||
|
cmdID += Byte.toUnsignedInt(data[3]) * 256 * 256;
|
||||||
|
cmdID += Byte.toUnsignedInt(data[4]) * 256 * 256 * 256;
|
||||||
|
|
||||||
|
int dest = Byte.toUnsignedInt(data[5]);
|
||||||
|
|
||||||
|
byte[] playerUuidBytes = new byte[32];
|
||||||
|
|
||||||
|
System.arraycopy(data, 6, playerUuidBytes, 0, 32);
|
||||||
|
|
||||||
|
/* for (int i = 0; i < 32; i++) {
|
||||||
|
playerUuidBytes[i] = data[6 + i];
|
||||||
|
} */
|
||||||
|
|
||||||
|
String playerUuid = new String(playerUuidBytes, StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
short cmdNumber = (short) (Byte.toUnsignedInt(data[38]) + (Byte.toUnsignedInt(data[39]) * 256));
|
||||||
|
|
||||||
|
int argLen = data.length - 40;
|
||||||
|
byte[] argsBytes = new byte[argLen];
|
||||||
|
|
||||||
|
/* for (int i = 0; i < argLen; i++) {
|
||||||
|
argsBytes[i] = data[40 + i];
|
||||||
|
} */
|
||||||
|
|
||||||
|
System.arraycopy(data, 40, argsBytes, 0, argLen);
|
||||||
|
|
||||||
|
String args = new String(argsBytes, StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
System.out.println(
|
||||||
|
"decoded message " + status + " " + cmdID + " " + dest + " " + playerUuid + " "
|
||||||
|
+ cmdNumber + " " + args + " ");
|
||||||
|
|
||||||
|
return new KraProtocolMessage(status, cmdID, dest, playerUuid, cmdNumber, args);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package net.krakatoa.proxy.protocol;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public class KraProtocolMessage {
|
||||||
|
|
||||||
|
private final byte status;
|
||||||
|
private final int cmdID; // long
|
||||||
|
private final int dest;
|
||||||
|
private final String uuid;
|
||||||
|
private final short cmdNumber;
|
||||||
|
private final String args;
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return Byte.toUnsignedInt(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCmdNumber() {
|
||||||
|
return Short.toUnsignedInt(cmdNumber);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package net.krakatoa.proxy.protocol;
|
||||||
|
|
||||||
|
public class KraProtocolMessageHandler {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package net.krakatoa.proxy.protocol;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
public enum KraProtocolStatus {
|
||||||
|
|
||||||
|
SEND(10),
|
||||||
|
GET(11),
|
||||||
|
MESSAGE_ALREADY_IN_QUEUE(12),
|
||||||
|
ERROR_NO_PERMS(13),
|
||||||
|
ERROR_TRY_AGAIN(14),
|
||||||
|
ERROR_ARG_LEN_TOO_BIG(15),
|
||||||
|
REPLY(16);
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final int status;
|
||||||
|
|
||||||
|
KraProtocolStatus(int status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,121 @@
|
||||||
|
package net.krakatoa.proxy.socket;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import net.krakatoa.proxy.ProxySystem;
|
||||||
|
import net.krakatoa.proxy.protocol.KraProtocolMessage;
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
import org.java_websocket.client.WebSocketClient;
|
||||||
|
import org.java_websocket.handshake.ServerHandshake;
|
||||||
|
|
||||||
|
public class SocketClient extends WebSocketClient {
|
||||||
|
|
||||||
|
public SocketClient(URI uri) {
|
||||||
|
super(uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendMessage(byte[] message) {
|
||||||
|
if (isOpen()) {
|
||||||
|
send(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpen(ServerHandshake serverHandshake) {
|
||||||
|
System.out.println("Socket connection opened!");
|
||||||
|
|
||||||
|
//ProxySystem.getInstance().getKraProtocol()
|
||||||
|
// .SendMessage(1, 126375, 248, "myuui123asdrsdasadsdasdadsadsdsa", 65017, "player joined");
|
||||||
|
|
||||||
|
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
|
||||||
|
proxiedPlayer.sendMessage(new TextComponent("§cSocket §8» §aConnected"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(String s) {
|
||||||
|
System.out.println("recv s: " + s);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(ByteBuffer byteBuffer) {
|
||||||
|
System.out.println("recv b: " + Arrays.toString(byteBuffer.array()));
|
||||||
|
|
||||||
|
KraProtocolMessage kraProtocolMessage = ProxySystem.getInstance().getKraProtocol()
|
||||||
|
.DecodeMessage(byteBuffer.array());
|
||||||
|
|
||||||
|
System.out.println(
|
||||||
|
"kraProtocolMessage " + kraProtocolMessage.getCmdID() + " " + kraProtocolMessage.getArgs());
|
||||||
|
|
||||||
|
// remove cmdID from cmdID list
|
||||||
|
ProxySystem.getInstance().getKraProtocol().getCmdIDs()
|
||||||
|
.removeIf(cmdID -> cmdID == kraProtocolMessage.getCmdID());
|
||||||
|
|
||||||
|
System.out.println(
|
||||||
|
"consumer ids " + ProxySystem.getInstance().getKraProtocol().getConsumerHashMap().keySet());
|
||||||
|
|
||||||
|
// test - mobile or voice socket connected
|
||||||
|
if (kraProtocolMessage.getCmdNumber() == 15) {
|
||||||
|
ProxyServer.getInstance().getScheduler().runAsync(ProxySystem.getInstance(), () -> {
|
||||||
|
System.out.println(ProxySystem.getInstance().getFormatter()
|
||||||
|
.stringToUuid(kraProtocolMessage.getUuid()));
|
||||||
|
|
||||||
|
ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy()
|
||||||
|
.getPlayer(ProxySystem.getInstance().getFormatter()
|
||||||
|
.stringToUuid(kraProtocolMessage.getUuid()));
|
||||||
|
|
||||||
|
if (proxiedPlayer != null) {
|
||||||
|
if (kraProtocolMessage.getArgs().equals("1")) {
|
||||||
|
proxiedPlayer.sendMessage(new TextComponent("§5Mobile §8» §cConnection lost!"));
|
||||||
|
} else {
|
||||||
|
proxiedPlayer.sendMessage(
|
||||||
|
new TextComponent("§bVoice §8» §cConnection lost!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ProxySystem.getInstance().getKraProtocol().getConsumerHashMap()
|
||||||
|
.forEach((cmdID, consumer) -> {
|
||||||
|
if (cmdID == kraProtocolMessage.getCmdID()) {
|
||||||
|
System.out.println("accept " + cmdID + " " + kraProtocolMessage.getCmdID());
|
||||||
|
consumer.accept(kraProtocolMessage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClose(int code, String reason, boolean remote) {
|
||||||
|
System.out.println(
|
||||||
|
"Connection! closed by " + (remote ? "remote peer" : "us") + " Code: " + code + " Reason: "
|
||||||
|
+ reason);
|
||||||
|
|
||||||
|
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
|
||||||
|
proxiedPlayer.sendMessage(
|
||||||
|
new TextComponent(
|
||||||
|
"§cSocket §8» §c" + (remote ? "Connection! Closed by remote peer" : reason)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1 called on plugin disable */
|
||||||
|
if (code != 1) {
|
||||||
|
ProxyServer.getInstance().getScheduler().schedule(ProxySystem.getInstance(), () -> {
|
||||||
|
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
|
||||||
|
proxiedPlayer.sendMessage(new TextComponent("§cSocket §8» §7Reconnecting..."));
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("try reconnect");
|
||||||
|
reconnect();
|
||||||
|
}, 3L, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Exception e) {
|
||||||
|
System.out.println("Error: " + e);
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package net.krakatoa.proxy.util;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class Formatter {
|
||||||
|
|
||||||
|
public String formatUuid(String uuid) {
|
||||||
|
return uuid.replaceAll("-", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public UUID stringToUuid(String s) {
|
||||||
|
BigInteger bigInteger = new BigInteger(s.substring(0, 16), 16);
|
||||||
|
BigInteger bigInteger1 = new BigInteger(s.substring(16, 32), 16);
|
||||||
|
|
||||||
|
return new UUID(bigInteger.longValue(), bigInteger1.longValue());
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,6 @@
|
||||||
name: KraProxySystem
|
name: KrakatoaProxySystem
|
||||||
author: AlexanderRoese
|
author: AlexanderRoese
|
||||||
version: 1.0
|
version: 1.0
|
||||||
main: net.krakatoa.proxy.ProxySystem
|
main: net.krakatoa.proxy.ProxySystem
|
||||||
commands:
|
commands:
|
||||||
code:
|
code:
|
||||||
sendTestMessage:
|
|
||||||
krakatoap:
|
|
0
target/classes/net/krakatoa/proxy/listener/PlayerDisconnectListener.class
Executable file → Normal file
0
target/classes/net/krakatoa/proxy/listener/PlayerDisconnectListener.class
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
name: KraProxySystem
|
name: KrakatoaProxySystem
|
||||||
author: AlexanderRoese
|
author: AlexanderRoese
|
||||||
version: 1.0
|
version: 1.0
|
||||||
main: net.krakatoa.proxy.ProxySystem
|
main: net.krakatoa.proxy.ProxySystem
|
||||||
|
|
0
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
Executable file → Normal file
0
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
Executable file → Normal file
0
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
Executable file → Normal file
0
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
Executable file → Normal file
0
target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
Executable file → Normal file
0
target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
Executable file → Normal file
Loading…
Reference in New Issue