package net.krakatoa.proxy; import earth.krakatao.KraSocketClient; import earth.krakatao.KraSocketClientConfig; import earth.krakatao.events.KraSocketClientEventInitiater; 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 lombok.Getter; import lombok.SneakyThrows; 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.listener.LoginListener; import net.krakatoa.proxy.listener.PlayerDisconnectListener; import net.krakatoa.proxy.listener.PostLoginListener; import net.krakatoa.proxy.listener.SocketClientMessageListener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.PluginManager; @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 RedisManager redisManager; @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(); this.mongoManager = new MongoManager( new MongoConfig(this.configHandler.getMongodbHost(), this.configHandler.getMongodbPort(), this.configHandler.getMongodbUsername(), this.configHandler.getMongodbPassword(), this.configHandler.getMongodbDatabase())); this.redisManager = new RedisManager( new RedisConfig(this.configHandler.getRedisHost(), this.configHandler.getRedisPort())); this.redisManager.connect(); loadListeners(); loadCommands(); } @Override public void onDisable() { this.kraSocketClient.getSocketClient().getConnection().close(); this.kraSocketClient.getSocketClient().getConnection().closeConnection(1, ""); this.mongoManager.shutdown(); this.redisManager.shutdown(); 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"), new KrakatoapCommand("krakatoap")) .forEach(listener -> { pluginManager.registerCommand(this, listener); }); } }