From 816f4568dbcc650af0b55b5aabae27aba37e66dd Mon Sep 17 00:00:00 2001 From: Dabsunter Date: Mon, 4 Apr 2016 05:44:37 +0200 Subject: [PATCH] New Feature fix --- plugin.yml | 7 +- .../dabsunter/omgremote/CommandListener.java | 5 +- .../dabsunter/omgremote/ProcessManager.java | 46 ++++++++-- .../omgremote/commands/FileCommands.java | 85 ++++++++++--------- .../omgremote/commands/ProcessCommands.java | 2 +- 5 files changed, 90 insertions(+), 55 deletions(-) diff --git a/plugin.yml b/plugin.yml index 7cdea3c..81c1841 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,4 +1,7 @@ name: OMGRemote main: fr.dabsunter.omgremote.Main -version: 1.0.0 -description: Lanceur de serveur paralelle \ No newline at end of file +version: 1.1.0 +description: Lanceur de serveur paralelle + +commands: + nothing: {} \ No newline at end of file diff --git a/src/fr/dabsunter/omgremote/CommandListener.java b/src/fr/dabsunter/omgremote/CommandListener.java index 3fb0f89..92607bc 100644 --- a/src/fr/dabsunter/omgremote/CommandListener.java +++ b/src/fr/dabsunter/omgremote/CommandListener.java @@ -22,14 +22,13 @@ public void onServerCommand(ServerCommandEvent e) { String label = command[0].toLowerCase(); if(executors.containsKey(label)) { String[] args = trim(command); - boolean cancel = executors.get(label).onCommand( + executors.get(label).onCommand( e.getSender(), null, label, args ); - if(cancel) - e.setCommand(null); + e.setCommand("nothing"); } diff --git a/src/fr/dabsunter/omgremote/ProcessManager.java b/src/fr/dabsunter/omgremote/ProcessManager.java index 3220395..5b416c8 100644 --- a/src/fr/dabsunter/omgremote/ProcessManager.java +++ b/src/fr/dabsunter/omgremote/ProcessManager.java @@ -1,8 +1,11 @@ package fr.dabsunter.omgremote; +import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; +import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.HashSet; import java.util.List; @@ -38,20 +41,45 @@ public ProcessManager(String name, List command) { public ProcessManager(String name, List command, File directory) { this.name = name; - File logs = new File("logs/remote-" + name + ".log"); try { + File logs = new File("logs/remote-" + name + ".log"); + if(!logs.exists()) + logs.createNewFile(); process = new ProcessBuilder() .command(command) .directory(directory) - .redirectInput(logs) - .redirectError(logs) + .redirectErrorStream(true) .start(); - } catch (IOException e) { + } catch (IOException ex) { System.out.println("Error while starting " + name + " process."); - e.printStackTrace(); + ex.printStackTrace(); return; } + new Thread() { + @SuppressWarnings("deprecation") + public void run() { + if(!process.isAlive()) + stop(); + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line = ""; + try { + while((line = reader.readLine()) != null) { + BufferedWriter writer = new BufferedWriter(new FileWriter("logs/remote-" + name + ".log")); + writer.write(line); + writer.newLine(); + writer.close(); + } + } finally { + reader.close(); + } + } catch(IOException ex) { + ex.printStackTrace(); + } + } + }.start();; + managers.add(this); } @@ -64,9 +92,9 @@ public void write(String command) { } finally { writer.flush(); } - } catch(IOException ioe) { + } catch(IOException ex) { System.out.println("Error while writing \"" + command + "\" in OutputStream of " + name + " process."); - ioe.printStackTrace(); + ex.printStackTrace(); } } @@ -74,8 +102,8 @@ public void stop() { process.destroy(); try { process.waitFor(10, TimeUnit.SECONDS); - } catch (InterruptedException e) { - e.printStackTrace(); + } catch (InterruptedException ex) { + ex.printStackTrace(); } if(process.isAlive()) process.destroyForcibly(); diff --git a/src/fr/dabsunter/omgremote/commands/FileCommands.java b/src/fr/dabsunter/omgremote/commands/FileCommands.java index 41342da..e1b963b 100644 --- a/src/fr/dabsunter/omgremote/commands/FileCommands.java +++ b/src/fr/dabsunter/omgremote/commands/FileCommands.java @@ -1,6 +1,7 @@ package fr.dabsunter.omgremote.commands; import java.io.File; +import java.io.IOException; import java.util.List; import org.bukkit.command.Command; @@ -16,47 +17,51 @@ public class FileCommands implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - switch(label) { - case "cd": - current = new File(current, Tools.join(args)); - sender.sendMessage("Moved to " + current.getAbsolutePath()); - break; - case "ls": - String msg = "Files in " + current.getAbsolutePath(); - for(File file : current.listFiles()) { - msg += "\n" + file.getName(); - if(file.isDirectory()) - msg += "/"; + try { + switch(label) { + case "cd": + current = new File(current, Tools.join(args)); + sender.sendMessage("Moved to " + current.getCanonicalPath()); + break; + case "ls": + String msg = "Files in " + current.getCanonicalPath(); + for(File file : current.listFiles()) { + msg += "\n" + file.getName(); + if(file.isDirectory()) + msg += "/"; + } + sender.sendMessage(msg); + break; + case "cp": + List copy = Tools.parseCommand(Tools.join(args)); + if(copy.size() != 2) { + sender.sendMessage("Specify a source and a destination"); + } else { + File from = new File(current, copy.get(0)); + File to = new File(current, copy.get(1)); + FileManager.copy(from, to); + sender.sendMessage("Copied " + from.getCanonicalPath() + " to " + to.getCanonicalPath()); + } + break; + case "mv": + List move = Tools.parseCommand(Tools.join(args)); + if(move.size() != 2) { + sender.sendMessage("Specify a source and a destination"); + } else { + File from = new File(current, move.get(0)); + File to = new File(current, move.get(1)); + FileManager.move(from, to); + sender.sendMessage("Copied " + from.getCanonicalPath() + " to " + to.getCanonicalPath()); + } + break; + case "rm": + File delete = new File(current, Tools.join(args)); + FileManager.delete(delete); + sender.sendMessage("Deleted " + delete.getCanonicalPath() + " !"); + break; } - sender.sendMessage(msg); - break; - case "cp": - List copy = Tools.parseCommand(Tools.join(args)); - if(copy.size() != 2) { - sender.sendMessage("Specify a source and a destination"); - } else { - File from = new File(current, copy.get(0)); - File to = new File(current, copy.get(1)); - FileManager.copy(from, to); - sender.sendMessage("Copied " + from.getAbsolutePath() + " to " + to.getAbsolutePath()); - } - break; - case "mv": - List move = Tools.parseCommand(Tools.join(args)); - if(move.size() != 2) { - sender.sendMessage("Specify a source and a destination"); - } else { - File from = new File(current, move.get(0)); - File to = new File(current, move.get(1)); - FileManager.move(from, to); - sender.sendMessage("Copied " + from.getAbsolutePath() + " to " + to.getAbsolutePath()); - } - break; - case "rm": - File delete = new File(current, Tools.join(args)); - FileManager.delete(delete); - sender.sendMessage("Deleted " + delete.getAbsolutePath() + " !"); - break; + } catch(IOException ex) { + ex.printStackTrace(); } return false; } diff --git a/src/fr/dabsunter/omgremote/commands/ProcessCommands.java b/src/fr/dabsunter/omgremote/commands/ProcessCommands.java index 71fcb35..084d3a3 100644 --- a/src/fr/dabsunter/omgremote/commands/ProcessCommands.java +++ b/src/fr/dabsunter/omgremote/commands/ProcessCommands.java @@ -40,7 +40,7 @@ private void start(CommandSender sender, String[] args) { } else { new ProcessManager(name, command); selected = name; - sender.sendMessage("Successfully launched and selected " + name + "process"); + sender.sendMessage("Successfully launched and selected " + name + " process"); } }