some more refactoring

This commit is contained in:
Shu Lei
2007-10-12 23:39:27 +00:00
parent 38dafdb190
commit 70442348a1
3 changed files with 34 additions and 23 deletions

View File

@@ -128,11 +128,12 @@ public class DebugStackState extends StackState implements DebugRequestListener
// debug hooks // debug hooks
public void debugHooks( int pc ) { public void debugHooks( int pc ) {
if(DebugUtils.IS_DEBUG) if ( exiting ) {
DebugUtils.println("entered debugHook..."); throw new AbortException("aborted by debug client");
}
if ( exiting ) if(DebugUtils.IS_DEBUG)
throw new AbortException("exiting"); DebugUtils.println("entered debugHook...");
synchronized ( this ) { synchronized ( this ) {

View File

@@ -36,12 +36,12 @@ import lua.debug.request.DebugRequest;
import lua.debug.request.DebugRequestListener; import lua.debug.request.DebugRequestListener;
import lua.debug.response.DebugResponse; import lua.debug.response.DebugResponse;
public class DebugSupport implements DebugEventListener { public class DebugSupport implements DebugRequestListener, DebugEventListener {
protected static final int UNKNOWN = 0; protected static final int UNKNOWN = 0;
protected static final int RUNNING = 1; protected static final int RUNNING = 1;
protected static final int STOPPED = 2; protected static final int STOPPED = 2;
protected DebugRequestListener listener; protected DebugRequestListener vm;
protected int requestPort; protected int requestPort;
protected int eventPort; protected int eventPort;
protected Thread requestWatcherThread; protected Thread requestWatcherThread;
@@ -56,10 +56,10 @@ public class DebugSupport implements DebugEventListener {
protected Socket clientEventSocket; protected Socket clientEventSocket;
protected DataOutputStream eventWriter; protected DataOutputStream eventWriter;
public DebugSupport(DebugRequestListener listener, public DebugSupport(DebugRequestListener vm,
int requestPort, int requestPort,
int eventPort) { int eventPort) {
this.listener = listener; this.vm = vm;
this.requestPort = requestPort; this.requestPort = requestPort;
this.eventPort = eventPort; this.eventPort = eventPort;
} }
@@ -139,7 +139,7 @@ public class DebugSupport implements DebugEventListener {
this.state = RUNNING; this.state = RUNNING;
} }
public synchronized int getState() { protected synchronized int getState() {
return this.state; return this.state;
} }
@@ -147,7 +147,7 @@ public class DebugSupport implements DebugEventListener {
this.state = STOPPED; this.state = STOPPED;
} }
public void handleRequest() { protected void handleRequest() {
synchronized (clientRequestSocket) { synchronized (clientRequestSocket) {
try { try {
while (getState() != STOPPED) { while (getState() != STOPPED) {
@@ -158,7 +158,7 @@ public class DebugSupport implements DebugEventListener {
= (DebugRequest) SerializationHelper.deserialize(data); = (DebugRequest) SerializationHelper.deserialize(data);
DebugUtils.println("SERVER receives request: " + request.toString()); DebugUtils.println("SERVER receives request: " + request.toString());
DebugResponse response = listener.handleRequest(request); DebugResponse response = handleRequest(request);
data = SerializationHelper.serialize(response); data = SerializationHelper.serialize(response);
requestWriter.writeInt(data.length); requestWriter.writeInt(data.length);
requestWriter.write(data); requestWriter.write(data);
@@ -203,7 +203,7 @@ public class DebugSupport implements DebugEventListener {
* *
* @param event * @param event
*/ */
public void fireEvent(DebugEvent event) { protected void sendEvent(DebugEvent event) {
DebugUtils.println("SERVER sending event: " + event.toString()); DebugUtils.println("SERVER sending event: " + event.toString());
synchronized (eventSocket) { synchronized (eventSocket) {
try { try {
@@ -221,6 +221,18 @@ public class DebugSupport implements DebugEventListener {
* @see lua.debug.DebugEventListener#notifyDebugEvent(lua.debug.DebugEvent) * @see lua.debug.DebugEventListener#notifyDebugEvent(lua.debug.DebugEvent)
*/ */
public void notifyDebugEvent(DebugEvent event) { public void notifyDebugEvent(DebugEvent event) {
fireEvent(event); sendEvent(event);
}
/* (non-Javadoc)
* @see lua.debug.DebugRequestListener#handleRequest(java.lang.String)
*/
public DebugResponse handleRequest(DebugRequest request) {
if (DebugUtils.IS_DEBUG) {
DebugUtils.println("handling request: " + request.toString());
}
DebugResponse response = vm.handleRequest(request);
return response;
} }
} }

View File

@@ -245,7 +245,7 @@ public class StandardLuaJVM implements DebugRequestListener {
} }
}).start(); }).start();
debugSupport.fireEvent(new DebugEvent(DebugEventType.started)); debugSupport.notifyDebugEvent(new DebugEvent(DebugEventType.started));
} }
private DebugStackState getDebugState() { private DebugStackState getDebugState() {
@@ -260,17 +260,16 @@ public class StandardLuaJVM implements DebugRequestListener {
throw new UnsupportedOperationException("Must be in debug mode to handle the debug requests"); throw new UnsupportedOperationException("Must be in debug mode to handle the debug requests");
} }
DebugUtils.println("handling request: " + request.toString());
DebugRequestType requestType = request.getType(); DebugRequestType requestType = request.getType();
if (DebugRequestType.suspend == requestType) { if (DebugRequestType.suspend == requestType) {
DebugResponse status = getDebugState().handleRequest(request); DebugResponse status = getDebugState().handleRequest(request);
DebugEvent event = new DebugEvent(DebugEventType.suspendedByClient); DebugEvent event = new DebugEvent(DebugEventType.suspendedByClient);
debugSupport.fireEvent(event); debugSupport.notifyDebugEvent(event);
return status; return status;
} else if (DebugRequestType.resume == requestType) { } else if (DebugRequestType.resume == requestType) {
DebugResponse status = getDebugState().handleRequest(request); DebugResponse status = getDebugState().handleRequest(request);
DebugEvent event = new DebugEvent(DebugEventType.resumedByClient); DebugEvent event = new DebugEvent(DebugEventType.resumedByClient);
debugSupport.fireEvent(event); debugSupport.notifyDebugEvent(event);
return status; return status;
} else if (DebugRequestType.exit == requestType) { } else if (DebugRequestType.exit == requestType) {
stop(); stop();
@@ -281,17 +280,16 @@ public class StandardLuaJVM implements DebugRequestListener {
} }
protected void stop() { protected void stop() {
DebugUtils.println("exit LuaJ VM...");
if (this.debugSupport != null) { if (this.debugSupport != null) {
DebugEvent event = new DebugEvent(DebugEventType.terminated); DebugEvent event = new DebugEvent(DebugEventType.terminated);
debugSupport.fireEvent(event); debugSupport.notifyDebugEvent(event);
Timer timer = new Timer("DebugServerDeathThread"); Timer timer = new Timer("DebugServerDeathThread");
timer.schedule(new TimerTask() { timer.schedule(new TimerTask() {
public void run() { public void run() {
debugSupport.stop(); debugSupport.stop();
debugSupport = null; debugSupport = null;
} }
}, 500); }, 300);
} }
getDebugState().exit(); getDebugState().exit();
} }