Commit: 9b498765abd28e23f707a1a63dedb78527aab11e
Author: krakjoe <joe.watk...@live.co.uk> Fri, 29 Nov 2013 10:22:02
+0000
Parents: 28854065902b1b3b7c8c83c5b5dd7e486fe0e8b0
Branches: PHP-5.6
Link:
http://git.php.net/?p=php-src.git;a=commitdiff;h=9b498765abd28e23f707a1a63dedb78527aab11e
Log:
...
Changed paths:
M tutorials/java/src/phpdbg/ui/DebugSocket.java
M tutorials/java/src/phpdbg/ui/JConsole.java
diff --git a/tutorials/java/src/phpdbg/ui/DebugSocket.java
b/tutorials/java/src/phpdbg/ui/DebugSocket.java
index 0dfa107..eb46af0 100644
--- a/tutorials/java/src/phpdbg/ui/DebugSocket.java
+++ b/tutorials/java/src/phpdbg/ui/DebugSocket.java
@@ -20,18 +20,26 @@ import phpdbg.ui.JConsole.MessageType;
public class DebugSocket extends Socket implements Runnable {
private final Boolean reader;
private final JConsole main;
- private Boolean quit;
+ private final Thread thread;
+ private volatile Boolean quit;
+ private volatile Boolean started;
+
public DebugSocket(final String host, final Integer port, final JConsole
main, Boolean reader) throws IOException {
super(host, port);
this.main = main;
this.reader = reader;
this.quit = false;
-
- synchronized(main) {
- if (!main.isConnected()) {
- main.setConnected(true);
+ this.started = false;
+ this.thread = new Thread(this);
+ }
+
+ public void start() {
+ synchronized(this) {
+ if (!started) {
+ started = true;
+ thread.start();
}
}
}
@@ -39,19 +47,26 @@ public class DebugSocket extends Socket implements Runnable
{
public void quit() {
synchronized(this) {
quit = true;
- this.notifyAll();
+ started = false;
+ notifyAll();
}
}
@Override public void run() {
try {
+ synchronized(main) {
+ if (!main.isConnected()) {
+ main.setConnected(true);
+ }
+ }
+
synchronized(this) {
do {
if (reader) {
String command;
OutputStream output = getOutputStream();
- this.wait();
+ wait();
command = main.getInputField().getText();
/* send command to stdin socket */
@@ -67,9 +82,8 @@ public class DebugSocket extends Socket implements Runnable {
/* get data from stdout socket */
byte[] bytes = new byte[1];
do {
- /* this is some of the laziest programming I ever
done */
if (input.available() == 0) {
- this.wait(400);
+ wait(400);
continue;
}
diff --git a/tutorials/java/src/phpdbg/ui/JConsole.java
b/tutorials/java/src/phpdbg/ui/JConsole.java
index 08661bc..2958cb9 100644
--- a/tutorials/java/src/phpdbg/ui/JConsole.java
+++ b/tutorials/java/src/phpdbg/ui/JConsole.java
@@ -19,20 +19,6 @@ import javax.swing.JTextField;
* @author krakjoe
*/
public class JConsole extends javax.swing.JDialog {
- public enum MessageType {
- INFO (JOptionPane.INFORMATION_MESSAGE),
- WARN (JOptionPane.WARNING_MESSAGE),
- ERROR (JOptionPane.ERROR_MESSAGE);
-
- private final Integer type;
- private MessageType(Integer type) {
- this.type = type;
- }
- public Integer getType() { return this.type; }
- public Boolean equals(Integer other) { return
this.type.equals(other); }
- public Boolean equals(MessageType other) { return
this.type.equals(other.getType()); }
- }
-
/**
* Creates user interface
* @param parent
@@ -197,38 +183,9 @@ public class JConsole extends javax.swing.JDialog {
private void openButtonActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_openButtonActionPerformed
try {
if (!connected) {
- Integer ports[] = new Integer[2];
- String address = getHost();
-
- if (address != null) {
- ports[0] = stdinCheckBox.isSelected() ? getStdinPort() :
-1;
- ports[1] = stdoutCheckBox.isSelected() ? getStdoutPort() :
-1;
-
- if (ports[0] != 0 && ports[1] != 0) {
- if (stdinCheckBox.isSelected()) {
- if (ports[0] > 0) {
- in = new DebugSocket(
- address, ports[0], this, true);
- new Thread(in).start();
- }
- }
-
- if (stdoutCheckBox.isSelected()) {
- if (ports[1] > 0) {
- out = new DebugSocket(
- address, ports[1], this, false);
- new Thread(out).start();
- }
- }
- }
- }
+ connect();
} else {
- if (in != null) {
- in.quit();
- }
- if (out != null) {
- out.quit();
- }
+ disconnect();
}
} catch (IOException ex) {
messageBox(ex.getMessage(), MessageType.ERROR);
@@ -239,7 +196,44 @@ public class JConsole extends javax.swing.JDialog {
// TODO add your handling code here:
output.setText(null);
}//GEN-LAST:event_resetStdoutActionPerformed
+
+ private void disconnect() {
+ if (in != null) {
+ in.quit();
+ }
+ if (out != null) {
+ out.quit();
+ }
+ }
+
+ private void connect() throws IOException {
+ Integer ports[] = new Integer[2];
+ String address = getHost();
+ if (address != null) {
+ ports[0] = stdinCheckBox.isSelected() ? getStdinPort() : -1;
+ ports[1] = stdoutCheckBox.isSelected() ? getStdoutPort() : -1;
+
+ if (ports[0] != 0 && ports[1] != 0) {
+ if (stdinCheckBox.isSelected()) {
+ if (ports[0] > 0) {
+ in = new DebugSocket(
+ address, ports[0], this, true);
+ in.start();
+ }
+ }
+
+ if (stdoutCheckBox.isSelected()) {
+ if (ports[1] > 0) {
+ out = new DebugSocket(
+ address, ports[1], this, false);
+ out.start();
+ }
+ }
+ }
+ }
+ }
+
public Boolean isConnected() {
return connected;
}
@@ -290,7 +284,6 @@ public class JConsole extends javax.swing.JDialog {
} catch (NumberFormatException ex) {
messageBox("Invalid stdin port provided !", MessageType.WARN);
}
-
return 0;
}
@@ -300,7 +293,6 @@ public class JConsole extends javax.swing.JDialog {
} catch (NumberFormatException ex) {
messageBox("Invalid stdout port provided !", MessageType.WARN);
}
-
return 0;
}
@@ -345,12 +337,7 @@ public class JConsole extends javax.swing.JDialog {
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
- if (in != null)
- in.quit();
-
- if (out != null)
- out.quit();
-
+ dialog.disconnect();
System.exit(0);
}
});
@@ -380,4 +367,17 @@ public class JConsole extends javax.swing.JDialog {
private javax.swing.JPopupMenu stdoutPopupMenu;
private javax.swing.JTextField stdoutPort;
// End of variables declaration//GEN-END:variables
+ public enum MessageType {
+ INFO (JOptionPane.INFORMATION_MESSAGE),
+ WARN (JOptionPane.WARNING_MESSAGE),
+ ERROR (JOptionPane.ERROR_MESSAGE);
+
+ private final Integer type;
+ private MessageType(Integer type) {
+ this.type = type;
+ }
+ public Integer getType() { return this.type; }
+ public Boolean equals(Integer other) { return
this.type.equals(other); }
+ public Boolean equals(MessageType other) { return
this.type.equals(other.getType()); }
+ }
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php