From 144e65236cd07427a290204887fa2f25cd8792df Mon Sep 17 00:00:00 2001 From: Dabsunter Date: Thu, 5 May 2016 23:18:44 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20ProcessManager,=20infos=20d?= =?UTF-8?q?=C3=A9marrage...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.yml | 2 +- src/fr/dabsunter/omgremote/Main.java | 9 + .../dabsunter/omgremote/ProcessManager.java | 241 ++++++++++-------- .../omgremote/commands/ProcessCommands.java | 165 ++++++------ src/fr/dabsunter/omgremote/util/Tools.java | 68 ++--- 5 files changed, 260 insertions(+), 225 deletions(-) diff --git a/plugin.yml b/plugin.yml index 81c1841..115b1b5 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,6 @@ name: OMGRemote main: fr.dabsunter.omgremote.Main -version: 1.1.0 +version: 1.1.1 description: Lanceur de serveur paralelle commands: diff --git a/src/fr/dabsunter/omgremote/Main.java b/src/fr/dabsunter/omgremote/Main.java index e05ba2a..a0b36ea 100644 --- a/src/fr/dabsunter/omgremote/Main.java +++ b/src/fr/dabsunter/omgremote/Main.java @@ -30,6 +30,13 @@ public void onEnable() { CommandListener.register("send", processCmd); CommandListener.register("kill", processCmd); + getLogger().info( + "Running on " + System.getProperty("os.name") + + " v" + System.getProperty("os.version") + + " (" + System.getProperty("os.arch") + + ") with Java " + System.getProperty("java.version") + ); + ConfigurationSection servers = getConfig().getConfigurationSection("servers"); for(String key : servers.getKeys(false)) { ConfigurationSection section = servers.getConfigurationSection(key); @@ -44,6 +51,8 @@ public void onEnable() { directory = new File(section.getString("folder")); } new ProcessManager(key, command, directory); + getServer().getConsoleSender().sendMessage( + "Successfully launched " + key + " process"); } } diff --git a/src/fr/dabsunter/omgremote/ProcessManager.java b/src/fr/dabsunter/omgremote/ProcessManager.java index 5b416c8..f2122c2 100644 --- a/src/fr/dabsunter/omgremote/ProcessManager.java +++ b/src/fr/dabsunter/omgremote/ProcessManager.java @@ -1,113 +1,128 @@ -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; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -import fr.dabsunter.omgremote.commands.FileCommands; - -public class ProcessManager { - - private static final Set managers = new HashSet<>(); - - public static ProcessManager get(String name) { - for(ProcessManager manager : managers) - if(manager.name.equals(name)) - return manager; - return null; - } - - public static void stopAll() { - for(ProcessManager manager : managers) - manager.stop(); - } - - - private String name; - private Process process; - - public ProcessManager(String name, List command) { - this(name, command, FileCommands.current); - } - - public ProcessManager(String name, List command, File directory) { - this.name = name; - - try { - File logs = new File("logs/remote-" + name + ".log"); - if(!logs.exists()) - logs.createNewFile(); - process = new ProcessBuilder() - .command(command) - .directory(directory) - .redirectErrorStream(true) - .start(); - } catch (IOException ex) { - System.out.println("Error while starting " + name + " process."); - 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); - } - - public void write(String command) { - try { - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); - try { - writer.write(command); - writer.newLine(); - } finally { - writer.flush(); - } - } catch(IOException ex) { - System.out.println("Error while writing \"" + command + "\" in OutputStream of " + name + " process."); - ex.printStackTrace(); - } - } - - public void stop() { - process.destroy(); - try { - process.waitFor(10, TimeUnit.SECONDS); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - if(process.isAlive()) - process.destroyForcibly(); - managers.remove(this); - } - -} +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.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import fr.dabsunter.omgremote.commands.FileCommands; + +public class ProcessManager { + + private static final Set managers = new HashSet<>(); + private static final Map builders = new HashMap<>(); + + public static ProcessManager get(String name) { + for(ProcessManager manager : managers) + if(manager.name.equals(name)) + return manager; + return null; + } + + public static void stopAll() { + for(ProcessManager manager : managers) + manager.stop(); + } + + + private String name; + private Process process; + + public ProcessManager(String name) throws NullPointerException { + if(builders.containsKey(name)) + init(name); + else + throw new NullPointerException(); + } + + public ProcessManager(String name, List command) { + this(name, command, FileCommands.current); + } + + public ProcessManager(String name, List command, File directory) { + builders.put(name, new ProcessBuilder() + .command(command) + .directory(directory) + .redirectErrorStream(true)); + init(name); + } + + private void init(String name) { + this.name = name; + + try { + File logs = new File("logs"); + if(!logs.exists()) + logs.mkdir(); + logs = new File(logs, "remote-" + name + ".log"); + if(!logs.exists()) + logs.createNewFile(); + this.process = builders.get(name).start(); + } catch (IOException ex) { + System.out.println("Error while starting " + name + " process."); + ex.printStackTrace(); + return; + } + + new Thread() { + public void run() { + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + BufferedWriter writer = new BufferedWriter(new FileWriter("logs/remote-" + name + ".log")); + String line = ""; + try { + while((line = reader.readLine()) != null) { + writer.write(line); + writer.newLine(); + writer.flush(); + } + } finally { + reader.close(); + writer.close(); + } + } catch(IOException ex) { + ex.printStackTrace(); + } + managers.remove(ProcessManager.this); + } + }.start();; + + managers.add(this); + } + + public void write(String command) { + try { + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); + try { + writer.write(command); + writer.newLine(); + } finally { + writer.flush(); + } + } catch(IOException ex) { + System.out.println("Error while writing \"" + command + "\" in OutputStream of " + name + " process."); + ex.printStackTrace(); + } + } + + public void stop() { + process.destroy(); + try { + process.waitFor(10, TimeUnit.SECONDS); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + if(process.isAlive()) + process.destroyForcibly(); + } + +} diff --git a/src/fr/dabsunter/omgremote/commands/ProcessCommands.java b/src/fr/dabsunter/omgremote/commands/ProcessCommands.java index 084d3a3..c645689 100644 --- a/src/fr/dabsunter/omgremote/commands/ProcessCommands.java +++ b/src/fr/dabsunter/omgremote/commands/ProcessCommands.java @@ -1,78 +1,87 @@ -package fr.dabsunter.omgremote.commands; - -import java.util.List; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - -import fr.dabsunter.omgremote.ProcessManager; -import fr.dabsunter.omgremote.util.Tools; - -public class ProcessCommands implements CommandExecutor { - - private String selected = null; - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - switch(label) { - case "start": - start(sender, args); - break; - case "select": - select(sender, args); - break; - case "send": - send(sender, args); - break; - case "kill": - kill(sender, args); - return true; - } - return false; - } - - private void start(CommandSender sender, String[] args) { - List command = Tools.parseCommand(Tools.join(args)); - String name = command.remove(0); - if(ProcessManager.get(name) != null) { - sender.sendMessage("Process " + name + " is already running !"); - } else { - new ProcessManager(name, command); - selected = name; - sender.sendMessage("Successfully launched and selected " + name + " process"); - } - } - - private void select(CommandSender sender, String[] args) { - String name = Tools.join(args); - if(ProcessManager.get(name) != null) { - selected = name; - sender.sendMessage("Successfully selected " + name + "process"); - } else { - sender.sendMessage(name + " process does not exist !"); - } - } - - private void send(CommandSender sender, String[] args) { - ProcessManager pm = ProcessManager.get(selected); - if(pm != null) { - pm.write(Tools.join(args)); - sender.sendMessage("Command successfully sent to " + selected + " process"); - } else { - sender.sendMessage(selected + " process does not exist !"); - } - } - - private void kill(CommandSender sender, String[] args) { - String name = Tools.join(args); - ProcessManager pm = ProcessManager.get(name); - if(pm != null) { - pm.stop(); - sender.sendMessage(name + " process successfully stopped"); - } else { - sender.sendMessage(name + " process does not exist !"); - } - } - -} +package fr.dabsunter.omgremote.commands; + +import java.util.List; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import fr.dabsunter.omgremote.ProcessManager; +import fr.dabsunter.omgremote.util.Tools; + +public class ProcessCommands implements CommandExecutor { + + private String selected = null; + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + switch(label) { + case "start": + start(sender, args); + break; + case "select": + select(sender, args); + break; + case "send": + send(sender, args); + break; + case "kill": + kill(sender, args); + return true; + } + return false; + } + + private void start(CommandSender sender, String[] args) { + List command = Tools.parseCommand(Tools.join(args)); + String name = command.remove(0); + if(ProcessManager.get(name) != null) { + sender.sendMessage("Process " + name + " is already running !"); + } else { + if(command.isEmpty()) { + try{ + new ProcessManager(name); + } catch(NullPointerException ex) { + sender.sendMessage("Process " + name + " was never started before !"); + return; + } + } else { + new ProcessManager(name, command); + } + selected = name; + sender.sendMessage("Successfully launched and selected " + name + " process"); + } + } + + private void select(CommandSender sender, String[] args) { + String name = Tools.join(args); + if(ProcessManager.get(name) != null) { + selected = name; + sender.sendMessage("Successfully selected " + name + " process"); + } else { + sender.sendMessage(name + " process does not exist !"); + } + } + + private void send(CommandSender sender, String[] args) { + ProcessManager pm = ProcessManager.get(selected); + if(pm != null) { + pm.write(Tools.join(args)); + sender.sendMessage("Command successfully sent to " + selected + " process"); + } else { + sender.sendMessage(selected + " process does not exist !"); + } + } + + private void kill(CommandSender sender, String[] args) { + String name = Tools.join(args); + ProcessManager pm = ProcessManager.get(name); + if(pm != null) { + pm.stop(); + sender.sendMessage(name + " process successfully stopped"); + } else { + sender.sendMessage(name + " process does not exist !"); + } + } + +} diff --git a/src/fr/dabsunter/omgremote/util/Tools.java b/src/fr/dabsunter/omgremote/util/Tools.java index 802b738..b65c4af 100644 --- a/src/fr/dabsunter/omgremote/util/Tools.java +++ b/src/fr/dabsunter/omgremote/util/Tools.java @@ -1,33 +1,35 @@ -package fr.dabsunter.omgremote.util; - -import java.util.ArrayList; -import java.util.List; - -public class Tools { - - public static String join(String[] args) { - String result = ""; - for(String arg : args) - result += " " + arg; - return result.substring(1); - } - - public static List parseCommand(String command) { - List list = new ArrayList<>(); - StringBuilder sb = new StringBuilder(); - boolean betweenQuote = false; - for(int i = 0; i < command.length(); i++) { - if(command.charAt(i) == '"') { - betweenQuote = !betweenQuote; - } else if(command.charAt(i) == ' ' && !betweenQuote) { - list.add(sb.toString()); - sb = new StringBuilder(); - } else { - sb.append(command.charAt(i)); - } - } - list.add(sb.toString()); - return list; - } - -} +package fr.dabsunter.omgremote.util; + +import java.util.ArrayList; +import java.util.List; + +public class Tools { + + public static String join(String[] args) { + StringBuilder sb = new StringBuilder(); + for(String arg : args) { + sb.append(' '); + sb.append(arg); + } + return sb.substring(1); + } + + public static List parseCommand(String command) { + List list = new ArrayList<>(); + StringBuilder sb = new StringBuilder(); + boolean betweenQuote = false; + for(int i = 0; i < command.length(); i++) { + if(command.charAt(i) == '"') { + betweenQuote = !betweenQuote; + } else if(command.charAt(i) == ' ' && !betweenQuote) { + list.add(sb.toString()); + sb = new StringBuilder(); + } else { + sb.append(command.charAt(i)); + } + } + list.add(sb.toString()); + return list; + } + +}