package net.krakatoa.proxy; import com.mongodb.async.client.MongoCollection; import earth.krakatao.KraSocketClient; import earth.krakatao.KraSocketClientConfig; import earth.krakatao.events.KraSocketClientEventInitiater; import earth.krakatao.events.KraSocketClientEventInterface; import earth.krakatao.protocol.KraSocketClientProtocol; import java.util.Arrays; import lombok.Getter; import lombok.SneakyThrows; import net.krakatoa.proxy.command.CodeCommand; import net.krakatoa.proxy.command.SendTestMessageCommand; import net.krakatoa.proxy.config.ConfigHandler; import net.krakatoa.proxy.listener.LoginListener; import net.krakatoa.proxy.listener.PlayerDisconnectListener; import net.krakatoa.proxy.listener.PostLoginListener; import net.krakatoa.proxy.listener.SocketClientMessageListener; import net.krakatoa.proxy.mongo.MongoManager; import net.krakatoa.proxy.util.Formatter; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.PluginManager; import org.bson.Document; @Getter public class ProxySystem extends Plugin { @Getter private static ProxySystem instance; private ConfigHandler configHandler; private Formatter formatter; private KraSocketClientProtocol kraSocketClientProtocol; private KraSocketClient kraSocketClient; private KraSocketClientEventInitiater kraSocketClientEventInitiater; private KraSocketClientEventInterface kraSocketClientEventInterface; private MongoManager mongoManager; private MongoCollection players; @SneakyThrows @Override public void onEnable() { instance = this; this.configHandler = new ConfigHandler(); this.configHandler.load(); this.formatter = new Formatter(); this.kraSocketClientProtocol = new KraSocketClientProtocol(); KraSocketClientConfig kraSocketClientConfig = new KraSocketClientConfig( this.configHandler.getWebSocketProtocol(), this.configHandler.getWebSocketHost(), this.configHandler.getWebSocketPort(), this.configHandler.getWebSocketAccessKey(), "proxy-1", this.configHandler.getWebSocketAckTimeouts()); this.kraSocketClientEventInitiater = new KraSocketClientEventInitiater(); this.kraSocketClientEventInterface = new SocketClientMessageListener(); this.kraSocketClient = new KraSocketClient(kraSocketClientConfig, this.kraSocketClientEventInterface, this.kraSocketClientProtocol); this.kraSocketClient.getSocketClient().connect(); mongoManager = new MongoManager(configHandler.getMongodbHost(), configHandler.getMongodbPort(), configHandler.getMongodbUsername(), configHandler.getMongodbPassword()); mongoManager.connect(configHandler.getMongodbDatabase()); players = mongoManager.getMongoDatabase().getCollection("players"); loadListeners(); loadCommands(); } @Override public void onDisable() { this.kraSocketClient.getSocketClient().getConnection().close(); this.kraSocketClient.getSocketClient().getConnection().closeConnection(1, ""); instance = null; } public void loadListeners() { PluginManager pluginManager = getProxy().getPluginManager(); Arrays.asList(new PostLoginListener(), new PlayerDisconnectListener(), new LoginListener()) .forEach(listener -> { pluginManager.registerListener(this, listener); }); } public void loadCommands() { PluginManager pluginManager = getProxy().getPluginManager(); Arrays.asList(new CodeCommand("code"), new SendTestMessageCommand("sendTestMessage")) .forEach(listener -> { pluginManager.registerCommand(this, listener); }); } }