mirror of
https://github.com/php/php-src.git
synced 2025-08-19 17:04:47 +02:00
...
This commit is contained in:
parent
bd49a0f144
commit
216e3668d6
17 changed files with 888 additions and 0 deletions
100
tutorials/java/src/phpdbg/ui/DebugSocket.java
Normal file
100
tutorials/java/src/phpdbg/ui/DebugSocket.java
Normal file
|
@ -0,0 +1,100 @@
|
|||
package phpdbg.ui;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.Socket;
|
||||
import phpdbg.ui.JConsole.MessageType;
|
||||
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Manage input and output data
|
||||
* @author krakjoe
|
||||
*/
|
||||
public class DebugSocket extends Socket implements Runnable {
|
||||
private final Boolean reader;
|
||||
private final JConsole main;
|
||||
private Boolean quit;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void quit() {
|
||||
synchronized(this) {
|
||||
quit = true;
|
||||
this.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void run() {
|
||||
try {
|
||||
synchronized(this) {
|
||||
do {
|
||||
if (reader) {
|
||||
String command;
|
||||
OutputStream output = getOutputStream();
|
||||
|
||||
this.wait();
|
||||
|
||||
command = main.getInputField().getText();
|
||||
/* send command to stdin socket */
|
||||
if (command != null) {
|
||||
output.write(
|
||||
command.getBytes());
|
||||
output.write("\n".getBytes());
|
||||
output.flush();
|
||||
}
|
||||
main.getInputField().setText(null);
|
||||
} else {
|
||||
InputStream input = getInputStream();
|
||||
/* 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);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (input.read(bytes, 0, 1) > -1) {
|
||||
main.getOutputField()
|
||||
.appendANSI(new String(bytes));
|
||||
}
|
||||
} while (!quit);
|
||||
}
|
||||
} while(!quit);
|
||||
}
|
||||
} catch (IOException | InterruptedException ex) {
|
||||
if (!quit) {
|
||||
main.messageBox(ex.getMessage(), MessageType.ERROR);
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
close();
|
||||
} catch (IOException ex) { /* naughty me */ } finally {
|
||||
synchronized(main) {
|
||||
if (main.isConnected()) {
|
||||
main.setConnected(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue