diff --git a/.classpath b/.classpath index 3a153ed..a413789 100644 --- a/.classpath +++ b/.classpath @@ -6,8 +6,13 @@ - - + + + + + + + diff --git a/compile-external-sources.sh b/compile-external-sources.sh new file mode 100755 index 0000000..e747510 --- /dev/null +++ b/compile-external-sources.sh @@ -0,0 +1 @@ +javac $(find ./* | grep .java); echo Done! \ No newline at end of file diff --git a/external-src/testing/Testing.class b/external-src/testing/Testing.class new file mode 100644 index 0000000..6249a7e Binary files /dev/null and b/external-src/testing/Testing.class differ diff --git a/external-src/testing/Testing.java b/external-src/testing/Testing.java new file mode 100644 index 0000000..ec580f5 --- /dev/null +++ b/external-src/testing/Testing.java @@ -0,0 +1,7 @@ +package testing; + +public class Testing { + + public static String string = "deawuidhaw"; + +} diff --git a/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java b/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java new file mode 100644 index 0000000..73d75bc --- /dev/null +++ b/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java @@ -0,0 +1,52 @@ +package pkg.deepCurse.nopalmo.command.testing; + +import java.io.File; +import java.util.HashMap; + +import org.jetbrains.annotations.Nullable; + +import pkg.deepCurse.nopalmo.command.CommandInterface.DualCommandInterface; +import pkg.deepCurse.nopalmo.manager.Argument; +import pkg.deepCurse.nopalmo.manager.ClassManager; +import pkg.deepCurse.nopalmo.manager.ClassManager.InternalReloadable; +import pkg.deepCurse.nopalmo.manager.CommandBlob; +import qj.util.ReflectUtil; + +public class LiveUpdateTestCommand implements InternalReloadable, DualCommandInterface { + + @Override + public String[] getCommandCalls() { + return new String[] {"test-update"}; + } + + @Override + public HelpPage getHelpPage() { + return HelpPage.TESTING; + } + + @Override + public String getHelp() { + return "Used to test the live updater"; + } + + @Override + public void runDualCommand(CommandBlob blob, HashMap argumentMap) throws Exception { + File file = new File(System.getProperty("user.dir") + "/external-src/"); + ClassManager> manager = new ClassManager>(); + + manager.addFile("testing", "testing.Testing", file); + + String string = (String) ReflectUtil.getField("string", manager.getClass("testing")).get(null); + + blob.getChannel().sendMessage(string).queue(); + + } + + @Override + public @Nullable HashMap getArguments() { + return null; + } + + + +} diff --git a/src/pkg/deepCurse/nopalmo/core/Boot.java b/src/pkg/deepCurse/nopalmo/core/Boot.java index 438a585..3fd493e 100644 --- a/src/pkg/deepCurse/nopalmo/core/Boot.java +++ b/src/pkg/deepCurse/nopalmo/core/Boot.java @@ -77,7 +77,7 @@ public class Boot { isProd = args[2].contentEquals("prod"); try { - logger.info("Connecting to mariadb:nopalmo"); + logger.info("Connecting to mariadb:nopalmo"+args[1]); NopalmoDBTools.init(isProd ? "nopalmo" : "chaos", "nopalmo", args[1]); } catch (Exception e) { e.printStackTrace(); diff --git a/src/pkg/deepCurse/nopalmo/manager/ClassManager.java b/src/pkg/deepCurse/nopalmo/manager/ClassManager.java new file mode 100644 index 0000000..e89c5c7 --- /dev/null +++ b/src/pkg/deepCurse/nopalmo/manager/ClassManager.java @@ -0,0 +1,78 @@ +package pkg.deepCurse.nopalmo.manager; + +import java.io.File; +import java.io.IOException; +import java.net.URLClassLoader; +import java.util.HashMap; + +import qj.util.lang.DynamicClassLoader; + +/** + * + * @author u1d + * + * @param access key, typically the name of the class for simplicity + * @param class type, supply InternalReloadable if you are unsure of what + * to use + */ +public class ClassManager { + + private HashMap> classMap; + private ClassLoader classLoader; + private URLClassLoader urlClassLoader; + + public ClassManager() { + classLoader = getClass().getClassLoader(); + classMap = new HashMap>(); + } + + public void add(K key, String path) throws ClassNotFoundException { + Class loadedMyClass = (Class) classLoader.loadClass(path); + classMap.put(key, loadedMyClass); + } + + public void addFile(K key, String name, File file) throws ClassNotFoundException, IOException { + classMap.put(key, (Class) new DynamicClassLoader(file.getPath()).load(name)); +// Class loadedMyClass = (Class) Class.forName(name, true, urlClassLoader.newInstance(new URL[] {file.toURI().toURL()})); +// classMap.put(key, loadedMyClass); + } + + public void remove(String path) { + + } + + public void removeFile(File file) { + + } + + /** + * This reloadable is for internal use, if you wish to add to its functionality, + * simply create a new interface that implements this one (InternalReloadable) + * + * @author u1d + */ + public interface InternalReloadable { + /** + * a data bus for use with dumping data that need to persist across reloads + * + * @return + */ + default public HashMap dump() { + return null; + } + + /** + * a data bus for use with loading data that need to persist across reloads + * + * @param bulk + */ + default public void load(HashMap dBus) { + } + + } + + public Class getClass(K key) { + return classMap.get(key); + } + +} diff --git a/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java b/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java index cb24747..a4f5147 100644 --- a/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java +++ b/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java @@ -2,8 +2,8 @@ package pkg.deepCurse.nopalmo.manager; public class CommandLoop { - public static add() { - - } +// public static add() { +// +// } } diff --git a/src/pkg/deepCurse/nopalmo/manager/CommandManager.java b/src/pkg/deepCurse/nopalmo/manager/CommandManager.java index 1001f0d..bf99dfc 100644 --- a/src/pkg/deepCurse/nopalmo/manager/CommandManager.java +++ b/src/pkg/deepCurse/nopalmo/manager/CommandManager.java @@ -28,6 +28,7 @@ import pkg.deepCurse.nopalmo.command.commands.info.Ping; import pkg.deepCurse.nopalmo.command.commands.info.Reload; import pkg.deepCurse.nopalmo.command.commands.testing.GuildCommand; import pkg.deepCurse.nopalmo.command.commands.testing.PrivateCommand; +import pkg.deepCurse.nopalmo.command.testing.LiveUpdateTestCommand; import pkg.deepCurse.nopalmo.core.Boot; import pkg.deepCurse.nopalmo.core.database.NopalmoDBTools.Tools.DeveloperDB; import pkg.deepCurse.nopalmo.core.database.NopalmoDBTools.Tools.GlobalDB; @@ -60,6 +61,7 @@ public class CommandManager { addCommand(new Reload()); // dual // addCommand(new BontebokInterpret()); // dual addCommand(new Stupid()); // guild + addCommand(new LiveUpdateTestCommand()); } private void addCommand(CommandInterface c) { @@ -156,9 +158,11 @@ public class CommandManager { break; } } - + + if (DeveloperDB.developerExists(commandBlob.getAuthorID())) { commandBlob.setDeveloper( DeveloperDB.getDeveloperBoolean(commandBlob.getAuthorID(), "developercommandpermission")); + } for (int i = 0; i < newArgs.size(); i++) { String x = newArgs.get(i); x = x.toLowerCase();