Added automatic enabling of telnet.enhanced.

Better title display.
This commit is contained in:
StevenLawson 2014-08-17 08:27:20 -04:00
parent 2077e4ba33
commit ba202365c7
5 changed files with 127 additions and 34 deletions

View file

@ -1,5 +1,7 @@
package me.StevenLawson.BukkitTelnetClient;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@ -7,6 +9,7 @@ import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Map;
import java.util.logging.Level;
import javax.swing.Timer;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.telnet.TelnetClient;
@ -17,6 +20,7 @@ public class BTC_ConnectionManager
private String hostname;
private int port;
private boolean canDoDisconnect = false;
private String loginName;
public BTC_ConnectionManager()
{
@ -31,12 +35,12 @@ public class BTC_ConnectionManager
btc.getTxtServer().setEnabled(false);
btc.getBtnDisconnect().setEnabled(true);
btc.setTitle("BukkitTelnetClient - " + BukkitTelnetClient.VERSION_STRING + " - " + hostname + ":" + port);
System.out.println("Connecting to " + hostname + ":" + port + "...");
this.hostname = hostname;
this.port = port;
this.loginName = null;
updateTitle(true);
startConnectThread();
}
@ -92,7 +96,9 @@ public class BTC_ConnectionManager
btc.getBtnSend().setEnabled(false);
btc.getTxtCommand().setEnabled(false);
btc.setTitle("BukkitTelnetClient - " + BukkitTelnetClient.VERSION_STRING + " - Disconnected");
loginName = null;
updateTitle(false);
System.out.println("\nDisconnected.");
}
@ -101,10 +107,18 @@ public class BTC_ConnectionManager
private final PrintStream consoleStream = new PrintStream(consoleBuffer);
public void sendCommand(String text)
{
sendCommand(text, true);
}
public void sendCommand(String text, boolean verbose)
{
try
{
consoleStream.format("%s\r\n", text);
if (verbose)
{
consoleStream.format("%s\r\n", text);
}
this.telnetClient.getOutputStream().write((text + "\n").getBytes());
this.telnetClient.getOutputStream().flush();
@ -115,6 +129,21 @@ public class BTC_ConnectionManager
}
}
public void sendDelayedCommand(final String text, final boolean verbose, final int delay)
{
final Timer timer = new Timer(delay, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
sendCommand(text, verbose);
}
});
timer.setRepeats(false);
timer.start();
}
private void startConnectThread()
{
if (this.connectThread != null)
@ -160,17 +189,30 @@ public class BTC_ConnectionManager
{
final String line = consoleBuffer.toString();
final Map<String, BTC_PlayerListDecoder.PlayerInfo> playerList = BTC_PlayerListDecoder.decodePlayerListMessage(line);
if (playerList != null)
String _loginName = null;
if (BTC_ConnectionManager.this.loginName == null)
{
btc.updatePlayerList(playerList);
_loginName = BTC_PlayerListDecoder.checkForLoginMessage(line);
}
if (_loginName != null)
{
BTC_ConnectionManager.this.loginName = _loginName;
updateTitle(true);
sendDelayedCommand("telnet.enhanced", false, 500);
}
else
{
if (!BTC_FormatHandler.skipLine(line))
final Map<String, BTC_PlayerListDecoder.PlayerInfo> playerList = BTC_PlayerListDecoder.checkForPlayerListMessage(line);
if (playerList != null)
{
System.out.print(line);
btc.updatePlayerList(playerList);
}
else
{
if (!BTC_FormatHandler.skipLine(line))
{
System.out.print(line);
}
}
}
@ -204,4 +246,33 @@ public class BTC_ConnectionManager
});
this.connectThread.start();
}
public final void updateTitle(boolean isConnected)
{
final BTC_MainPanel mainPanel = BukkitTelnetClient.mainPanel;
if (mainPanel == null)
{
return;
}
String title;
if (isConnected)
{
if (loginName == null)
{
title = String.format("BukkitTelnetClient - %s - %s:%d", BukkitTelnetClient.VERSION_STRING, hostname, port);
}
else
{
title = String.format("BukkitTelnetClient - %s - %s@%s:%d", BukkitTelnetClient.VERSION_STRING, loginName, hostname, port);
}
}
else
{
title = String.format("BukkitTelnetClient - %s - Disconnected", BukkitTelnetClient.VERSION_STRING);
}
mainPanel.setTitle(title);
}
}

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
<Form version="1.6" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
<Properties>
<Property name="defaultCloseOperation" type="int" value="3"/>
<Property name="title" type="java.lang.String" value="BukkitTelnetClient"/>
@ -269,7 +269,10 @@
</Column>
</TableColumnModel>
</Property>
<Property name="columnSelectionAllowed" type="boolean" value="true"/>
<Property name="rowSelectionAllowed" type="boolean" value="true"/>
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
<JTableSelectionModel selectionMode="0"/>
</Property>
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
<TableHeader reorderingAllowed="true" resizingAllowed="true"/>
</Property>

View file

@ -154,26 +154,6 @@ 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();
@ -381,7 +361,8 @@ public class BTC_MainPanel extends javax.swing.JFrame
return canEdit [columnIndex];
}
});
tblPlayers.setColumnSelectionAllowed(true);
tblPlayers.setRowSelectionAllowed(true);
tblPlayers.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane2.setViewportView(tblPlayers);
tblPlayers.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
@ -572,4 +553,29 @@ public class BTC_MainPanel extends javax.swing.JFrame
{
return txtServer;
}
public JCheckBox getChkAutoScroll()
{
return chkAutoScroll;
}
public JCheckBox getChkIgnorePlayerCommands()
{
return chkIgnorePlayerCommands;
}
public JCheckBox getChkIgnoreServerCommands()
{
return chkIgnoreServerCommands;
}
public JCheckBox getChkShowChatOnly()
{
return chkShowChatOnly;
}
public BTC_ConnectionManager getConnectionManager()
{
return connectionManager;
}
}

View file

@ -12,13 +12,25 @@ import org.json.JSONObject;
public class BTC_PlayerListDecoder
{
private static final Pattern PLAYER_LIST_MESSAGE = Pattern.compile(":\\[.+@BukkitTelnet\\]\\$ playerList~(.+)");
private static final Pattern LOGIN_MESSAGE = Pattern.compile("\\[.+?@BukkitTelnet\\]\\$ Logged in as (.+)\\.");
private BTC_PlayerListDecoder()
{
throw new AssertionError();
}
public static final Map<String, PlayerInfo> decodePlayerListMessage(String message)
public static final String checkForLoginMessage(String message)
{
final Matcher matcher = LOGIN_MESSAGE.matcher(message);
if (matcher.find())
{
return matcher.group(1);
}
return null;
}
public static final Map<String, PlayerInfo> checkForPlayerListMessage(String message)
{
final Matcher matcher = PLAYER_LIST_MESSAGE.matcher(message);
if (matcher.find())

View file

@ -73,6 +73,7 @@ public class BukkitTelnetClient
public void run()
{
mainPanel = new BTC_MainPanel();
mainPanel.getConnectionManager().updateTitle(false);
}
});
}