diff --git a/LaunchServer/runtime/plugin.js b/LaunchServer/runtime/plugin.js index 7ec484a..495594a 100644 --- a/LaunchServer/runtime/plugin.js +++ b/LaunchServer/runtime/plugin.js @@ -1,4 +1,35 @@ server.loadScript(IOHelperClass.static.toURL(java.nio.file.Paths.get("apiServer.js"))); // Print test message -LogHelper.info("This message was printed from plugin.js"); +LogHelper.info("[plugin.js] Test message"); + +// Register command +server.commandHandler.registerCommand("test", new (Java.extend(Command, { + getArgsDescription: function() { return "[anything]"; }, + getUsageDescription: function() { return "plugin.js test command"; }, + + invoke: function(args) { + LogHelper.info("[plugin.js] Command invoked! Args: " + + java.util.Arrays.toString(args)); + } +}))(server)); + +// Register custom response +server.serverSocketHandler.registerCustomResponse("test", function(server, input, output) { + return new (Java.extend(Response, function() { + LogHelper.info("[plugin.js] Custom response invoked!"); + output.writeInt(0x724); + }))(server, input, output); +}); + +/* You can test custom request like this: +var TestCustomRequest = Java.extend(CustomRequest, { + getName: function() { return "test"; }, + + requestDoCustom: function(input, output) { + return input.readInt(); + } +}); +var answer = new TestCustomRequest().request(); +LogHelper.info(Integer.toHexString(answer)); +*/ \ No newline at end of file diff --git a/LaunchServer/source/LaunchServer.java b/LaunchServer/source/LaunchServer.java index a1b4007..20fcd1e 100644 --- a/LaunchServer/source/LaunchServer.java +++ b/LaunchServer/source/LaunchServer.java @@ -66,6 +66,7 @@ import launchserver.command.handler.CommandHandler; import launchserver.command.handler.JLineCommandHandler; import launchserver.command.handler.StdCommandHandler; +import launchserver.response.Response; import launchserver.response.ServerSocketHandler; public final class LaunchServer implements Runnable { @@ -432,8 +433,8 @@ bindings.put("CommandExceptionClass", CommandException.class); // Set response class bindings - bindings.put("ResponseClass", Command.class); - bindings.put("ResponseFactoryClass", CommandHandler.class); + bindings.put("ResponseClass", Response.class); + bindings.put("ResponseFactoryClass", Response.Factory.class); } private final class ProfilesFileVisitor extends SimpleFileVisitor { diff --git a/LaunchServer/source/command/handler/CommandHandler.java b/LaunchServer/source/command/handler/CommandHandler.java index a0888f4..46dfc6a 100644 --- a/LaunchServer/source/command/handler/CommandHandler.java +++ b/LaunchServer/source/command/handler/CommandHandler.java @@ -45,31 +45,31 @@ protected CommandHandler(LaunchServer server) { // Register basic commands - register("help", new HelpCommand(server)); - register("version", new VersionCommand(server)); - register("build", new BuildCommand(server)); - register("stop", new StopCommand(server)); - register("rebind", new RebindCommand(server)); - register("reloadConfig", new ReloadConfigCommand(server)); - register("reloadKeyPair", new ReloadKeyPairCommand(server)); - register("eval", new EvalCommand(server)); - register("debug", new DebugCommand(server)); - register("clear", new ClearCommand(server)); - register("gc", new GCCommand(server)); + registerCommand("help", new HelpCommand(server)); + registerCommand("version", new VersionCommand(server)); + registerCommand("build", new BuildCommand(server)); + registerCommand("stop", new StopCommand(server)); + registerCommand("rebind", new RebindCommand(server)); + registerCommand("reloadConfig", new ReloadConfigCommand(server)); + registerCommand("reloadKeyPair", new ReloadKeyPairCommand(server)); + registerCommand("eval", new EvalCommand(server)); + registerCommand("debug", new DebugCommand(server)); + registerCommand("clear", new ClearCommand(server)); + registerCommand("gc", new GCCommand(server)); // Register sync commands - register("indexAsset", new IndexAssetCommand(server)); - register("unindexAsset", new UnindexAssetCommand(server)); - register("downloadAsset", new DownloadAssetCommand(server)); - register("downloadClient", new DownloadClientCommand(server)); - register("syncBinaries", new SyncBinariesCommand(server)); - register("syncUpdates", new SyncUpdatesCommand(server)); - register("syncProfiles", new SyncProfilesCommand(server)); + registerCommand("indexAsset", new IndexAssetCommand(server)); + registerCommand("unindexAsset", new UnindexAssetCommand(server)); + registerCommand("downloadAsset", new DownloadAssetCommand(server)); + registerCommand("downloadClient", new DownloadClientCommand(server)); + registerCommand("syncBinaries", new SyncBinariesCommand(server)); + registerCommand("syncUpdates", new SyncUpdatesCommand(server)); + registerCommand("syncProfiles", new SyncProfilesCommand(server)); // Register auth commands - register("auth", new AuthCommand(server)); - register("usernameToUUID", new UsernameToUUIDCommand(server)); - register("uuidToUsername", new UUIDToUsernameCommand(server)); + registerCommand("auth", new AuthCommand(server)); + registerCommand("usernameToUUID", new UsernameToUUIDCommand(server)); + registerCommand("uuidToUsername", new UUIDToUsernameCommand(server)); } @Override @@ -132,7 +132,7 @@ public abstract String readLine() throws IOException; @LauncherAPI - public final void register(String name, Command command) { + public final void registerCommand(String name, Command command) { VerifyHelper.verifyIDName(name); VerifyHelper.putIfAbsent(commands, name, Objects.requireNonNull(command, "command"), String.format("Command has been already registered: '%s'", name));