From 8417702fb7e1c5ee36d5cd8c7ad91e75baf83832 Mon Sep 17 00:00:00 2001 From: StevenLawson Date: Sat, 16 Aug 2014 20:20:39 -0400 Subject: [PATCH] Moved coloring and filtering functions to new class. Fixed "Username: " and "Password: " prompts. --- .gitignore | 1 + pom.xml | 2 +- .../BTC_ConnectionManager.java | 46 ++++++++++-- .../BukkitTelnetClient/BTC_FormatHandler.java | 68 +++++++++++++++++ .../BukkitTelnetClient/BTC_MainPanel.java | 73 ++++++------------- .../BukkitTelnetClient.java | 2 +- 6 files changed, 133 insertions(+), 59 deletions(-) create mode 100644 .gitignore create mode 100644 src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_FormatHandler.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a6f89c2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target/ \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1aebc82..93ffb9d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 me.StevenLawson BukkitTelnetClient - 2.0.2 + 2.0.3-SNAPSHOT jar diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java index cd714f8..16245ab 100644 --- a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java @@ -1,8 +1,10 @@ package me.StevenLawson.BukkitTelnetClient; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStreamReader; +import java.io.PrintStream; import java.util.logging.Level; import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.telnet.TelnetClient; @@ -94,11 +96,14 @@ public class BTC_ConnectionManager System.out.println("\nDisconnected."); } + private final ByteArrayOutputStream consoleBuffer = new ByteArrayOutputStream(); + private final PrintStream consoleStream = new PrintStream(consoleBuffer); + public void sendCommand(String text) { try { - System.out.println(text); + consoleStream.format("%s\r\n", text); this.telnetClient.getOutputStream().write((text + "\n").getBytes()); this.telnetClient.getOutputStream().flush(); @@ -132,14 +137,43 @@ public class BTC_ConnectionManager btc.getTxtCommand().setEnabled(true); btc.getTxtCommand().requestFocusInWindow(); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()))) + try (final BufferedReader reader = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()))) { - String line; - while ((line = reader.readLine()) != null) + + int read = 0; + while (read != -1) { - if (!btc.skipLine(line)) + boolean block = true; + + while (block || reader.ready()) { - System.out.println(line); + block = false; + + read = reader.read(); + if (read != -1) + { + consoleBuffer.write(read); + } + + if (read == '\n') + { + final String line = consoleBuffer.toString(); + if (!BTC_FormatHandler.skipLine(line)) + { + System.out.print(line); + } + consoleBuffer.reset(); + } + } + + if (consoleBuffer.size() > 0) + { + final String line = consoleBuffer.toString(); + if (line.endsWith("Username: ") || line.endsWith("Password: ")) + { + System.out.print(consoleBuffer.toString()); + consoleBuffer.reset(); + } } } } diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_FormatHandler.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_FormatHandler.java new file mode 100644 index 0000000..8a40f22 --- /dev/null +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_FormatHandler.java @@ -0,0 +1,68 @@ +package me.StevenLawson.BukkitTelnetClient; + +import java.awt.Color; +import java.util.regex.Pattern; + +public class BTC_FormatHandler +{ + private static final Pattern CHAT_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\<"); + private static final Pattern SAY_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\[Server:"); + private static final Pattern ADMINSAY_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\[TotalFreedomMod\\] \\[ADMIN\\] "); + private static final Pattern CSAY_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\[CONSOLE\\]<"); + + private static final Pattern WORLD_EDIT = Pattern.compile("^:\\[.+? INFO\\]: WorldEdit: "); + + private static final Pattern PREPROCESS_COMMAND = Pattern.compile("^:\\[.+? INFO\\]: \\[PREPROCESS_COMMAND\\] "); + private static final Color DARK_GREEN = new Color(86, 130, 3); + + private static final Pattern ISSUED_SERVER_COMMAND = Pattern.compile("^:\\[.+? INFO\\]: .+? issued server command: "); + private static final Pattern PLAYER_COMMAND = Pattern.compile("^:\\[.+? INFO\\]: \\[PLAYER_COMMAND\\] "); + + public static final boolean skipLine(String line) + { + final BTC_MainPanel mainPanel = BukkitTelnetClient.mainPanel; + + if (mainPanel == null) + { + return false; + } + + if (mainPanel.getChkShowChatOnly().isSelected()) + { + if (!CHAT_MESSAGE.matcher(line).find() && !SAY_MESSAGE.matcher(line).find() && !ADMINSAY_MESSAGE.matcher(line).find() && !CSAY_MESSAGE.matcher(line).find()) + { + return true; + } + } + else if (mainPanel.getChkIgnoreServerCommands().isSelected() && ISSUED_SERVER_COMMAND.matcher(line).find()) + { + return true; + } + else if (mainPanel.getChkIgnorePlayerCommands().isSelected() && PLAYER_COMMAND.matcher(line).find()) + { + return true; + } + + return false; + } + + public static final Color getColor(String text) + { + Color color = Color.BLACK; + + if (CHAT_MESSAGE.matcher(text).find() || SAY_MESSAGE.matcher(text).find() || ADMINSAY_MESSAGE.matcher(text).find() || CSAY_MESSAGE.matcher(text).find()) + { + color = Color.BLUE; + } + else if (WORLD_EDIT.matcher(text).find()) + { + color = Color.RED; + } + else if (PREPROCESS_COMMAND.matcher(text).find()) + { + color = DARK_GREEN; + } + + return color; + } +} diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java index f94bddf..b317644 100644 --- a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java @@ -1,6 +1,5 @@ package me.StevenLawson.BukkitTelnetClient; -import java.awt.Color; import java.awt.Toolkit; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; @@ -13,7 +12,7 @@ import java.io.IOException; import java.net.URL; import java.util.LinkedList; import java.util.logging.Level; -import java.util.regex.Pattern; +import javax.swing.JCheckBox; import javax.swing.SwingUtilities; import javax.swing.text.BadLocationException; import javax.swing.text.SimpleAttributeSet; @@ -56,40 +55,6 @@ public class BTC_MainPanel extends javax.swing.JFrame this.setVisible(true); } - private static final Pattern CHAT_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\<"); - private static final Pattern SAY_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\[Server:"); - private static final Pattern ADMINSAY_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\[TotalFreedomMod\\] \\[ADMIN\\] "); - private static final Pattern CSAY_MESSAGE = Pattern.compile("^:\\[.+? INFO\\]: \\[CONSOLE\\]<"); - - private static final Pattern WORLD_EDIT = Pattern.compile("^:\\[.+? INFO\\]: WorldEdit: "); - - private static final Pattern PREPROCESS_COMMAND = Pattern.compile("^:\\[.+? INFO\\]: \\[PREPROCESS_COMMAND\\] "); - private static final Color DARK_GREEN = new Color(86, 130, 3); - - private static final Pattern ISSUED_SERVER_COMMAND = Pattern.compile("^:\\[.+? INFO\\]: .+? issued server command: "); - private static final Pattern PLAYER_COMMAND = Pattern.compile("^:\\[.+? INFO\\]: \\[PLAYER_COMMAND\\] "); - - public final boolean skipLine(String line) - { - if (this.chkShowChatOnly.isSelected()) - { - if (!CHAT_MESSAGE.matcher(line).find() && !SAY_MESSAGE.matcher(line).find() && !ADMINSAY_MESSAGE.matcher(line).find() && !CSAY_MESSAGE.matcher(line).find()) - { - return true; - } - } - else if (this.chkIgnoreServerCommands.isSelected() && ISSUED_SERVER_COMMAND.matcher(line).find()) - { - return true; - } - else if (this.chkIgnorePlayerCommands.isSelected() && PLAYER_COMMAND.matcher(line).find()) - { - return true; - } - - return false; - } - public final void updateTextPane(final String text) { SwingUtilities.invokeLater(new Runnable() @@ -99,26 +64,12 @@ public class BTC_MainPanel extends javax.swing.JFrame { final StyledDocument styledDocument = mainOutput.getStyledDocument(); - Color color = Color.BLACK; - if (CHAT_MESSAGE.matcher(text).find() || SAY_MESSAGE.matcher(text).find() || ADMINSAY_MESSAGE.matcher(text).find() || CSAY_MESSAGE.matcher(text).find()) - { - color = Color.BLUE; - } - else if (WORLD_EDIT.matcher(text).find()) - { - color = Color.RED; - } - else if (PREPROCESS_COMMAND.matcher(text).find()) - { - color = DARK_GREEN; - } - try { styledDocument.insertString( styledDocument.getLength(), text, - StyleContext.getDefaultStyleContext().addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, color) + StyleContext.getDefaultStyleContext().addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, BTC_FormatHandler.getColor(text)) ); } catch (BadLocationException ex) @@ -169,6 +120,26 @@ public class BTC_MainPanel extends javax.swing.JFrame } } + public JCheckBox getChkAutoScroll() + { + return chkAutoScroll; + } + + public JCheckBox getChkIgnorePlayerCommands() + { + return chkIgnorePlayerCommands; + } + + public JCheckBox getChkIgnoreServerCommands() + { + return chkIgnoreServerCommands; + } + + public JCheckBox getChkShowChatOnly() + { + return chkShowChatOnly; + } + public final void saveServersAndTriggerConnect() { String selected_server = (String) txtServer.getSelectedItem(); diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BukkitTelnetClient.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/BukkitTelnetClient.java index 9f07139..dfad944 100644 --- a/src/main/java/me/StevenLawson/BukkitTelnetClient/BukkitTelnetClient.java +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BukkitTelnetClient.java @@ -10,7 +10,7 @@ import org.apache.commons.io.output.TeeOutputStream; public class BukkitTelnetClient { - public static final String VERSION_STRING = "v2.01_b1"; + public static final String VERSION_STRING = "v2.0.3"; public static final Logger LOGGER = Logger.getLogger(BukkitTelnetClient.class.getName()); public static final ByteArrayOutputStream CONSOLE = new ByteArrayOutputStream();