From 407d83058249ef9b1603d6650d4ec4a8c97a2668 Mon Sep 17 00:00:00 2001 From: Shu Lei Date: Mon, 17 Dec 2007 19:42:02 +0000 Subject: [PATCH] 1. code clean and added documentation for debugging protocol 2. upgrade to version 0.14 since I trimmed the debug message types --- build.xml | 2 +- src/core/org/luaj/vm/DebugNetSupport.java | 7 - src/debug/org/luaj/debug/DebugLuaState.java | 123 ++++++++++++++++-- .../org/luaj/debug/DebugMessageType.java | 95 +++++++------- .../org/luaj/debug/SerializationHelper.java | 28 +--- .../org/luaj/debug/event/DebugEventError.java | 2 +- .../luaj/debug/net/DebugNetSupportBase.java | 5 - .../debug/net/j2me/ClientConnectionTask.java | 9 +- .../luaj/debug/net/j2me/DebugSupportImpl.java | 6 +- .../debug/net/j2se/ClientConnectionTask.java | 9 +- .../luaj/debug/net/j2se/DebugSupportImpl.java | 14 +- .../debug/request/DebugRequestDisconnect.java | 37 ------ .../debug/response/DebugResponseSession.java | 36 ----- .../org/luaj/debug/DebugResponseTest.java | 14 -- .../java/org/luaj/debug/EnumTypeTest.java | 2 +- 15 files changed, 177 insertions(+), 212 deletions(-) delete mode 100644 src/debug/org/luaj/debug/request/DebugRequestDisconnect.java delete mode 100644 src/debug/org/luaj/debug/response/DebugResponseSession.java diff --git a/build.xml b/build.xml index 4c5a3ba5..dd877173 100644 --- a/build.xml +++ b/build.xml @@ -1,5 +1,5 @@ - + diff --git a/src/core/org/luaj/vm/DebugNetSupport.java b/src/core/org/luaj/vm/DebugNetSupport.java index c0d40a5a..36f7e082 100644 --- a/src/core/org/luaj/vm/DebugNetSupport.java +++ b/src/core/org/luaj/vm/DebugNetSupport.java @@ -19,11 +19,4 @@ public interface DebugNetSupport { * Disconnect all connected clients. */ public abstract void disconnect(); - - /** - * Disconnect the client with the given id. - * @param id -- client id - */ - public abstract void disconnect(int id); - } \ No newline at end of file diff --git a/src/debug/org/luaj/debug/DebugLuaState.java b/src/debug/org/luaj/debug/DebugLuaState.java index 2573be7e..9f1e895b 100644 --- a/src/debug/org/luaj/debug/DebugLuaState.java +++ b/src/debug/org/luaj/debug/DebugLuaState.java @@ -29,7 +29,6 @@ import org.luaj.compiler.LexState; import org.luaj.debug.event.DebugEventBreakpoint; import org.luaj.debug.event.DebugEventError; import org.luaj.debug.net.DebugNetSupportBase; -import org.luaj.debug.request.DebugRequestDisconnect; import org.luaj.debug.request.DebugRequestLineBreakpointToggle; import org.luaj.debug.request.DebugRequestListener; import org.luaj.debug.request.DebugRequestStack; @@ -49,6 +48,110 @@ import org.luaj.vm.LuaState; import org.luaj.vm.Platform; +/** + * DebugLuaState extends LuaState to provide the + * debugging support for luaj-vm. It defines the debugging protocol between a + * debugger, such as LuaJEclipse in Eclipse, and the luaj-vm. The + * debugger and luaj-vm communicates via DebugMessage. The + * debugger sends requests to the luaj-vm and receive responses and events from + * the luaj-vm. For requests that require immediately replies, luaj-vm responds + * synchronously. For events occurs in the luaj-vm, for instance, an exception + * is raised or a breakpoint is hit, luaj-vm informs the debugger when the event + * occurs. + *

+ * Debugger Requests: + *

    + *
  • DebugMessageType.start: The first message for the handshake + * between the debugger and the luaj-vm. The VM responds with + * DebugMessageType.started immediately. If the VM is paused + * on start, it will now resume the execution. + *
  • DebugMessageType.resume: The debugger instructs the + * luaj-vm to resume the execution when the VM is suspended. No reply is needed. + *
  • DebugMessageType.suspend: The debugger instructs the luaj-vm + * to suspend. VM replies with DebugMessageType.suspendedByClient + * when it is suspended. + *
  • DebugMessageType.lineBreakpointSet: The debugger informs the + * VM that a breakpoint at the given source and line number is set. No reply + * is needed. For future improvement, VM should check if the breakpoint is + * valid and gives the debugger feedback. + *
  • DebugMessageType.lineBreakpointClear: The debugger informs + * the VM to clear a breakpoint at the given source and line number. No reply + * is needed. For future enhancement, VM should check if the breakpoint is + * valid and gives the debugger feedback. + *
  • DebugMessageType.watchpointSet: The debugger sets a watchpoint + * on the given source and line number. Not implemented yet. + *
  • DebugMessageType.watchpointClear: The debugger clears a + * watchpoint at the given source and line number. Not implemented yet. + *
  • DebugMessageType.callgraph: The debugger requests for the + * current call graph. VM replies with the call graph immediately in a debug + * message of type DebugMessageType.clientRequestCallgraphReply. + *
  • DebugMessageType.stack: The debugger request for the stack + * information for the given stack. VM replies with the variables on the stack + * immediately in a debug message of type + * DebugMessageType.clientRequestStackReply. + *
  • DebugMessageType.stepInto: The debugger instructs the VM + * to begin stepping in stepInto mode. No reply is needed. + *
  • DebugMessageType.stepOver: The debugger instructs the VM to + * begin stepping in stepOver mode. No rely is needed. + *
  • DebugMessageType.stepReturn: The debugger instructs the VM + * to begin stepping in stepReturn mode. No reply is needed. + *
  • DebugMessageType.global: The debug request the information + * about the globals. VM replies with global variables in a debug message of + * type DebugMessageType.clientRequestGlobalReply. + *
  • DebugMessageType.disconnect: The debugger informs the VM + * that it is about to disconnect from the VM. VM resets its state and responds + * with DebugMessageType.disconnected immediately. + *
  • DebugMessageType.exit: The debugger instructs the VM to + * terminate. VM prepares for termination and responds with + * DebugMessageType.terminated. + *
  • DebugMessageType.reset: This is an internal debug message. + * When the communication layer detects that the debugger or the debug service + * exits abnormally, it sends the message to the VM for reset. VM acts upon the + * message and reset its internal state. + *
  • DebugMessageType.debugServiceDown: This message is sent from + * the debug service (on-device remote debugging) when the debug service observed + * that the debugger exits abnormally. Before the debug service restarts the debug + * session, it informs the VM to reset itself. + *
+ *

+ * VM Responses and Events: + *

    + *
  • DebugMessageType.clientRequestCallgraphReply: VM replies to + * the DebugMessageType.callgraph request with the information + * about the current call graph. A call graph is made of a list of call stacks. + * Call stacks are organized chronically with the most recent call on the top + * of the stack. + *
  • DebugMessageType.clientRequestStackReply: VM replies + * to the DebugMessageType.stack request with the variables visible + * on the call stack i where i the call stack index + * ranging between 0 and LuaState.calls.length. + *
  • DebugMessageType.clientRequestGlobalReply: VM replies to the + * DebugMessageType.global request with all the globals. + *
  • DebugMessageType.started: VM replies when a + * DebugMessageType.start request is received. + *
  • DebugMessageType.resumedOnSteppingEnd: VM informs the debugger + * that VM is getting out of the stepping mode upon step return because it has + * reached the last call stack. + *
  • DebugMessageType.suspendedByClient: VM sends the event to + * respond to a debugger pause action. + *
  • DebugMessageType.suspendedOnBreakpoint: VM sends the event + * when a breakpoint is hit during the execution. + *
  • DebugMessageType.suspendedOnWatchpoint: Not implemented yet. + * VM sends the event when VM is paused to evaluate a watchpoint. + *
  • DebugMessageType.suspendedOnStepping: VM sends the event when + * VM is paused during the stepping. The debugger has instructed the VM to begin + * stepping into, over or return earlier. + *
  • DebugMessageType.suspendedOnError: VM sends the event when + * an error is raised in VM. + *
  • DebugMessageType.terminated: VM sends the event when it is + * ready to exit. + *
  • DebugMessageType.disconnected: VM sends the event when it + * has de-attached the debugger from the debug session. + *
  • DebugMessageType.outputRedirect: VM forwards the print + * output to the debugger console. + *
+ *

+ */ public class DebugLuaState extends LuaState implements DebugRequestListener { private static final boolean TRACE = (null != System.getProperty("TRACE")); @@ -328,10 +431,7 @@ public class DebugLuaState extends LuaState implements DebugRequestListener { } else if (DebugMessageType.exit == requestType) { stop(); } else if (DebugMessageType.disconnect == requestType) { - DebugRequestDisconnect disconnectRequest - = (DebugRequestDisconnect) request; - int connectionId = disconnectRequest.getSessionId(); - disconnect(connectionId); + disconnect(); } else if (DebugMessageType.debugServiceDown == requestType) { disconnectFromDebugService(); } else if (DebugMessageType.reset == requestType) { @@ -437,7 +537,7 @@ public class DebugLuaState extends LuaState implements DebugRequestListener { } } - public void disconnect(int connectionId) { + public void disconnect() { if (this.debugSupport == null) { throw new IllegalStateException( "DebugNetSupportBase must be defined."); @@ -446,7 +546,7 @@ public class DebugLuaState extends LuaState implements DebugRequestListener { reset(); DebugMessage event = new DebugMessage(DebugMessageType.disconnected); debugSupport.notifyDebugEvent(event); - debugSupport.disconnect(connectionId); + debugSupport.disconnect(); } public void disconnectFromDebugService() { @@ -505,7 +605,7 @@ public class DebugLuaState extends LuaState implements DebugRequestListener { } /** - * return the current call graph (i.e. stack frames from old to new, include + * return the current call graph (i.e. stack frames from new to old, include * information about file, method, etc.) */ public StackFrame[] getCallgraph() { @@ -514,11 +614,12 @@ public class DebugLuaState extends LuaState implements DebugRequestListener { if (n < 0 || n >= calls.length) return new StackFrame[0]; - StackFrame[] frames = new StackFrame[n + 1]; - for (int i = 0; i <= n; i++) { + int length = n + 1; + StackFrame[] frames = new StackFrame[length]; + for (int i = 0; i < length; i++) { CallInfo ci = calls[i]; String src = getSourceFileName(ci.closure.p.source); - frames[i] = new StackFrame(src, getLineNumber(ci)); + frames[length - i - 1] = new StackFrame(src, getLineNumber(ci)); } return frames; } diff --git a/src/debug/org/luaj/debug/DebugMessageType.java b/src/debug/org/luaj/debug/DebugMessageType.java index 9d1f0512..f445937e 100644 --- a/src/debug/org/luaj/debug/DebugMessageType.java +++ b/src/debug/org/luaj/debug/DebugMessageType.java @@ -31,44 +31,45 @@ public class DebugMessageType extends EnumType { public static final DebugMessageType resume = new DebugMessageType("resume", 1); public static final DebugMessageType suspend = new DebugMessageType("suspend", 2); public static final DebugMessageType exit = new DebugMessageType("exit", 3); - public static final DebugMessageType lineBreakpointSet = new DebugMessageType("lineBreakpointSet", 4); - public static final DebugMessageType lineBreakpointClear = new DebugMessageType("lineBreakpointClear", 5); - public static final DebugMessageType watchpointSet = new DebugMessageType("watchpointSet", 6); - public static final DebugMessageType watchpointClear = new DebugMessageType("watchpointClear", 7); - public static final DebugMessageType callgraph = new DebugMessageType("callgraph", 8); - public static final DebugMessageType stack = new DebugMessageType("stack", 9); - public static final DebugMessageType stepInto = new DebugMessageType("stepInto", 10); - public static final DebugMessageType stepOver = new DebugMessageType("stepOver", 11); - public static final DebugMessageType stepReturn = new DebugMessageType("stepReturn", 12); - public static final DebugMessageType global = new DebugMessageType("global", 13); - public static final DebugMessageType disconnect = new DebugMessageType("disconnect", 14); + public static final DebugMessageType disconnect = new DebugMessageType("disconnect", 4); + public static final DebugMessageType lineBreakpointSet = new DebugMessageType("lineBreakpointSet", 5); + public static final DebugMessageType lineBreakpointClear = new DebugMessageType("lineBreakpointClear", 6); + public static final DebugMessageType watchpointSet = new DebugMessageType("watchpointSet", 7); + public static final DebugMessageType watchpointClear = new DebugMessageType("watchpointClear", 8); + public static final DebugMessageType callgraph = new DebugMessageType("callgraph", 9); + public static final DebugMessageType stack = new DebugMessageType("stack", 10); + public static final DebugMessageType stepInto = new DebugMessageType("stepInto", 11); + public static final DebugMessageType stepOver = new DebugMessageType("stepOver", 12); + public static final DebugMessageType stepReturn = new DebugMessageType("stepReturn", 13); + public static final DebugMessageType global = new DebugMessageType("global", 14); public static final DebugMessageType reset = new DebugMessageType("reset", 15); - public static final DebugMessageType session = new DebugMessageType("session", 16); - + public static final DebugMessageType debugServiceDown = new DebugMessageType("debugServiceDown", 16); + + // responses + public static final DebugMessageType clientRequestCallgraphReply = new DebugMessageType("clientRequestCallgraphReply", 17); + public static final DebugMessageType clientRequestStackReply = new DebugMessageType("clientRequestStackReply", 18); + public static final DebugMessageType clientRequestGlobalReply = new DebugMessageType("clientRequestGlobalReply", 19); + // events - public static final DebugMessageType started = new DebugMessageType("started", 17); - public static final DebugMessageType suspendedByClient = new DebugMessageType("suspendedByClient", 18); - public static final DebugMessageType suspendedOnBreakpoint = new DebugMessageType("suspendedOnBreakpoint", 19); - public static final DebugMessageType suspendedOnWatchpoint = new DebugMessageType("suspendedOnWatchpoint", 20); - public static final DebugMessageType suspendedOnStepping = new DebugMessageType("suspendedOnStepping", 21); - public static final DebugMessageType suspendedOnError = new DebugMessageType("suspendedOnError", 22); - public static final DebugMessageType resumedOnSteppingEnd = new DebugMessageType("resumedOnSteppingEnd", 23); - public static final DebugMessageType error = new DebugMessageType("error", 24); - public static final DebugMessageType terminated = new DebugMessageType("terminated", 25); - public static final DebugMessageType clientRequestCallgraphReply = new DebugMessageType("clientRequestCallgraphReply", 26); - public static final DebugMessageType clientRequestStackReply = new DebugMessageType("clientRequestStackReply", 27); - public static final DebugMessageType clientRequestGlobalReply = new DebugMessageType("clientRequestGlobalReply", 28); - public static final DebugMessageType disconnected = new DebugMessageType("disconnected", 29); - public static final DebugMessageType sessionId = new DebugMessageType("sessionId", 30); - public static final DebugMessageType debugServiceDown = new DebugMessageType("debugServiceDown", 31); - public static final DebugMessageType outputRedirect = new DebugMessageType("outputRedirect", 32); + public static final DebugMessageType started = new DebugMessageType("started", 20); + public static final DebugMessageType suspendedByClient = new DebugMessageType("suspendedByClient", 21); + public static final DebugMessageType suspendedOnBreakpoint = new DebugMessageType("suspendedOnBreakpoint", 22); + public static final DebugMessageType suspendedOnWatchpoint = new DebugMessageType("suspendedOnWatchpoint", 23); + public static final DebugMessageType suspendedOnStepping = new DebugMessageType("suspendedOnStepping", 24); + public static final DebugMessageType suspendedOnError = new DebugMessageType("suspendedOnError", 25); + public static final DebugMessageType resumedOnSteppingEnd = new DebugMessageType("resumedOnSteppingEnd", 26); + public static final DebugMessageType outputRedirect = new DebugMessageType("outputRedirect", 27); + public static final DebugMessageType terminated = new DebugMessageType("terminated", 28); + public static final DebugMessageType disconnected = new DebugMessageType("disconnected", 29); protected static DebugMessageType[] ENUMS = new DebugMessageType[] { + // requests start, resume, suspend, exit, - lineBreakpointSet, + disconnect, + lineBreakpointSet, lineBreakpointClear, watchpointSet, watchpointClear, @@ -78,25 +79,25 @@ public class DebugMessageType extends EnumType { stepOver, stepReturn, global, - disconnect, reset, - session, - started, - suspendedByClient, - suspendedOnBreakpoint, - suspendedOnWatchpoint, - suspendedOnStepping, - suspendedOnError, - resumedOnSteppingEnd, - error, - terminated, - clientRequestCallgraphReply, - clientRequestStackReply, - clientRequestGlobalReply, - disconnected, - sessionId, debugServiceDown, - outputRedirect + + // responses + clientRequestCallgraphReply, + clientRequestStackReply, + clientRequestGlobalReply, + + // events + started, + suspendedByClient, + suspendedOnBreakpoint, + suspendedOnWatchpoint, + suspendedOnStepping, + suspendedOnError, + resumedOnSteppingEnd, + outputRedirect, + terminated, + disconnected }; protected DebugMessageType(String name, int ordinal) { diff --git a/src/debug/org/luaj/debug/SerializationHelper.java b/src/debug/org/luaj/debug/SerializationHelper.java index 93e7cf64..a6aa4ef4 100644 --- a/src/debug/org/luaj/debug/SerializationHelper.java +++ b/src/debug/org/luaj/debug/SerializationHelper.java @@ -9,11 +9,9 @@ import java.io.IOException; import org.luaj.debug.event.DebugEventBreakpoint; import org.luaj.debug.event.DebugEventError; import org.luaj.debug.event.DebugEventOutputRedirect; -import org.luaj.debug.request.DebugRequestDisconnect; import org.luaj.debug.request.DebugRequestLineBreakpointToggle; import org.luaj.debug.request.DebugRequestStack; import org.luaj.debug.response.DebugResponseCallgraph; -import org.luaj.debug.response.DebugResponseSession; import org.luaj.debug.response.DebugResponseStack; import org.luaj.debug.response.DebugResponseVariables; @@ -53,14 +51,12 @@ public class SerializationHelper { static final int SERIAL_TYPE_DebugMessage = 5; static final int SERIAL_TYPE_DebugRequestStack = 6; static final int SERIAL_TYPE_DebugRequestLineBreakpointToggle = 7; - static final int SERIAL_TYPE_DebugRequestDisconnect = 8; - static final int SERIAL_TYPE_DebugEventBreakpoint = 9; - static final int SERIAL_TYPE_DebugEventError = 10; - static final int SERIAL_TYPE_DebugResponseCallgraph = 11; - static final int SERIAL_TYPE_DebugResponseVariables = 12; - static final int SERIAL_TYPE_DebugResponseStack = 13; - static final int SERIAL_TYPE_DebugResponseSession = 14; - static final int SERIAL_TYPE_DebugEventOutputRedirect = 15; + static final int SERIAL_TYPE_DebugEventBreakpoint = 8; + static final int SERIAL_TYPE_DebugEventError = 9; + static final int SERIAL_TYPE_DebugResponseCallgraph = 10; + static final int SERIAL_TYPE_DebugResponseVariables = 11; + static final int SERIAL_TYPE_DebugResponseStack = 12; + static final int SERIAL_TYPE_DebugEventOutputRedirect = 13; public static void serialize(Serializable object, DataOutputStream dout) throws IOException { @@ -86,9 +82,6 @@ public class SerializationHelper { dout.writeInt(SERIAL_TYPE_DebugRequestLineBreakpointToggle); DebugRequestLineBreakpointToggle.serialize(dout, (DebugRequestLineBreakpointToggle) object); - } else if (object instanceof DebugRequestDisconnect) { - dout.writeInt(SERIAL_TYPE_DebugRequestDisconnect); - DebugRequestDisconnect.serialize(dout, (DebugRequestDisconnect) object); } else if (object instanceof DebugEventBreakpoint) { dout.writeInt(SERIAL_TYPE_DebugEventBreakpoint); DebugEventBreakpoint.serialize(dout, (DebugEventBreakpoint) object); @@ -108,9 +101,6 @@ public class SerializationHelper { dout.writeInt(SERIAL_TYPE_DebugResponseCallgraph); DebugResponseCallgraph.serialize(dout, (DebugResponseCallgraph) object); - } else if (object instanceof DebugResponseSession) { - dout.writeInt(SERIAL_TYPE_DebugResponseSession); - DebugResponseSession.serialize(dout, (DebugResponseSession) object); } else if (object instanceof DebugMessage) { dout.writeInt(SERIAL_TYPE_DebugMessage); DebugMessage.serialize(dout, (DebugMessage) object); @@ -148,9 +138,6 @@ public class SerializationHelper { case SERIAL_TYPE_DebugRequestLineBreakpointToggle: object = DebugRequestLineBreakpointToggle.deserialize(din); break; - case SERIAL_TYPE_DebugRequestDisconnect: - object = DebugRequestDisconnect.deserialize(din); - break; case SERIAL_TYPE_DebugEventBreakpoint: object = DebugEventBreakpoint.deserialize(din); break; @@ -169,9 +156,6 @@ public class SerializationHelper { case SERIAL_TYPE_DebugResponseVariables: object = DebugResponseVariables.deserialize(din); break; - case SERIAL_TYPE_DebugResponseSession: - object = DebugResponseSession.deserialize(din); - break; case SERIAL_TYPE_DebugMessage: object = DebugMessage.deserialize(din); break; diff --git a/src/debug/org/luaj/debug/event/DebugEventError.java b/src/debug/org/luaj/debug/event/DebugEventError.java index da72648d..0a7b6386 100644 --- a/src/debug/org/luaj/debug/event/DebugEventError.java +++ b/src/debug/org/luaj/debug/event/DebugEventError.java @@ -33,7 +33,7 @@ public class DebugEventError extends DebugMessage { protected String trace; public DebugEventError(String cause, String trace) { - super(DebugMessageType.error); + super(DebugMessageType.suspendedOnError); this.cause = cause; this.trace = trace; } diff --git a/src/debug/org/luaj/debug/net/DebugNetSupportBase.java b/src/debug/org/luaj/debug/net/DebugNetSupportBase.java index 9900767b..fd6d3265 100644 --- a/src/debug/org/luaj/debug/net/DebugNetSupportBase.java +++ b/src/debug/org/luaj/debug/net/DebugNetSupportBase.java @@ -29,11 +29,6 @@ public abstract class DebugNetSupportBase implements DebugRequestListener, Debug */ public abstract void disconnect(); - /* (non-Javadoc) - * @see org.luaj.debug.net.DebugNetSupport#disconnect(int) - */ - public abstract void disconnect(int id); - protected DebugLuaState vm; public void setDebugStackState(DebugLuaState vm) { this.vm = vm; diff --git a/src/debug/org/luaj/debug/net/j2me/ClientConnectionTask.java b/src/debug/org/luaj/debug/net/j2me/ClientConnectionTask.java index a7510692..ac6c1bd7 100644 --- a/src/debug/org/luaj/debug/net/j2me/ClientConnectionTask.java +++ b/src/debug/org/luaj/debug/net/j2me/ClientConnectionTask.java @@ -13,7 +13,6 @@ import org.luaj.debug.DebugMessageType; import org.luaj.debug.RedirectOutputStream; import org.luaj.debug.SerializationHelper; import org.luaj.debug.event.DebugEventListener; -import org.luaj.debug.response.DebugResponseSession; import org.luaj.lib.BaseLib; public class ClientConnectionTask implements Runnable, DebugEventListener { @@ -92,7 +91,7 @@ public class ClientConnectionTask implements Runnable, DebugEventListener { // discard the current connection. handleRequest(new DebugMessage(DebugMessageType.reset)); - debugSupport.disconnect(1); + debugSupport.disconnect(); } finally { if (redirectOutputStream != null) { try { @@ -134,11 +133,7 @@ public class ClientConnectionTask implements Runnable, DebugEventListener { if ( TRACE ) System.out.println("SERVER handling request: " + request.toString()); - if (request.getType() == DebugMessageType.session) { - notifyDebugEvent(new DebugResponseSession(1)); - } else { - debugSupport.handleRequest(request); - } + debugSupport.handleRequest(request); } public void notifyDebugEvent(DebugMessage event) { diff --git a/src/debug/org/luaj/debug/net/j2me/DebugSupportImpl.java b/src/debug/org/luaj/debug/net/j2me/DebugSupportImpl.java index 463769f4..066be4e6 100644 --- a/src/debug/org/luaj/debug/net/j2me/DebugSupportImpl.java +++ b/src/debug/org/luaj/debug/net/j2me/DebugSupportImpl.java @@ -49,7 +49,7 @@ public class DebugSupportImpl extends DebugNetSupportBase { public void stop() { setState(STOPPED); - disconnect(1); + disconnect(); } public void disconnect() { @@ -60,10 +60,6 @@ public class DebugSupportImpl extends DebugNetSupportBase { } } - public synchronized void disconnect(int id) { - disconnect(); - } - public synchronized void notifyDebugEvent(DebugMessage event) { if (clientTask != null) { clientTask.notifyDebugEvent(event); diff --git a/src/debug/org/luaj/debug/net/j2se/ClientConnectionTask.java b/src/debug/org/luaj/debug/net/j2se/ClientConnectionTask.java index 194128b7..288b48ca 100644 --- a/src/debug/org/luaj/debug/net/j2se/ClientConnectionTask.java +++ b/src/debug/org/luaj/debug/net/j2se/ClientConnectionTask.java @@ -11,7 +11,6 @@ import org.luaj.debug.DebugMessageType; import org.luaj.debug.RedirectOutputStream; import org.luaj.debug.SerializationHelper; import org.luaj.debug.event.DebugEventListener; -import org.luaj.debug.response.DebugResponseSession; import org.luaj.lib.BaseLib; public class ClientConnectionTask implements Runnable, DebugEventListener { @@ -92,7 +91,7 @@ public class ClientConnectionTask implements Runnable, DebugEventListener { // discard the current connection. handleRequest(new DebugMessage(DebugMessageType.reset)); - debugSupport.disconnect(getSessionId()); + debugSupport.disconnect(); } finally { try { redirectOutputStream.close(); @@ -110,11 +109,7 @@ public class ClientConnectionTask implements Runnable, DebugEventListener { System.out.println("SERVER handling request: " + request.toString()); } - if (request.getType() == DebugMessageType.session) { - notifyDebugEvent(new DebugResponseSession(getSessionId())); - } else { - debugSupport.handleRequest(request); - } + debugSupport.handleRequest(request); } public void notifyDebugEvent(DebugMessage event) { diff --git a/src/debug/org/luaj/debug/net/j2se/DebugSupportImpl.java b/src/debug/org/luaj/debug/net/j2se/DebugSupportImpl.java index 4e773373..3698c8f6 100644 --- a/src/debug/org/luaj/debug/net/j2se/DebugSupportImpl.java +++ b/src/debug/org/luaj/debug/net/j2se/DebugSupportImpl.java @@ -107,7 +107,7 @@ public class DebugSupportImpl extends DebugNetSupportBase { public synchronized void stop() { setState(STOPPED); if (clientConnectionTask != null) { - disconnect(clientConnectionTask.getSessionId()); + disconnect(); } dispose(); } @@ -123,18 +123,10 @@ public class DebugSupportImpl extends DebugNetSupportBase { } public synchronized void disconnect() { - disconnect(clientConnectionTask.getSessionId()); + clientConnectionTask.disconnect(); + clientConnectionTask = null; } - public synchronized void disconnect(int id) { - if (clientConnectionTask.getSessionId() == id) { - clientConnectionTask.disconnect(); - clientConnectionTask = null; - } else { - throw new RuntimeException("Internal Error: mismatching sesion Id"); - } - } - public void acceptClientConnection() throws IOException { try { Socket clientSocket = serverSocket.accept(); diff --git a/src/debug/org/luaj/debug/request/DebugRequestDisconnect.java b/src/debug/org/luaj/debug/request/DebugRequestDisconnect.java deleted file mode 100644 index 10a94ece..00000000 --- a/src/debug/org/luaj/debug/request/DebugRequestDisconnect.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.luaj.debug.request; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.luaj.debug.DebugMessage; -import org.luaj.debug.DebugMessageType; - -public class DebugRequestDisconnect extends DebugMessage { - protected int sessionId; - - public DebugRequestDisconnect(int connectionId) { - super(DebugMessageType.disconnect); - this.sessionId = connectionId; - } - - public int getSessionId() { - return this.sessionId; - } - - public String toString() { - return super.toString() + " sessionId:" + getSessionId(); - } - - public static void serialize(DataOutputStream out, DebugRequestDisconnect request) - throws IOException { - out.writeInt(request.getSessionId()); - } - - public static DebugMessage deserialize(DataInputStream in) - throws IOException { - int id = in.readInt(); - - return new DebugRequestDisconnect(id); - } -} diff --git a/src/debug/org/luaj/debug/response/DebugResponseSession.java b/src/debug/org/luaj/debug/response/DebugResponseSession.java deleted file mode 100644 index 5ed55489..00000000 --- a/src/debug/org/luaj/debug/response/DebugResponseSession.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.luaj.debug.response; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.luaj.debug.DebugMessage; -import org.luaj.debug.DebugMessageType; - -public class DebugResponseSession extends DebugMessage { - protected int sessionId; - - public DebugResponseSession(int id) { - super(DebugMessageType.session); - this.sessionId = id; - } - - public int getSessionId() { - return this.sessionId; - } - - public String toString() { - return "SessionId: " + getSessionId(); - } - - public static void serialize(DataOutputStream out, - DebugResponseSession response) - throws IOException { - out.writeInt(response.getSessionId()); - } - - public static DebugMessage deserialize(DataInputStream in) throws IOException { - int id = in.readInt(); - return new DebugResponseSession(id); - } -} diff --git a/src/test/java/org/luaj/debug/DebugResponseTest.java b/src/test/java/org/luaj/debug/DebugResponseTest.java index 29d4df8c..4c0a1e74 100644 --- a/src/test/java/org/luaj/debug/DebugResponseTest.java +++ b/src/test/java/org/luaj/debug/DebugResponseTest.java @@ -5,7 +5,6 @@ import java.io.IOException; import junit.framework.TestCase; import org.luaj.debug.response.DebugResponseCallgraph; -import org.luaj.debug.response.DebugResponseSession; import org.luaj.debug.response.DebugResponseStack; import org.luaj.vm.Lua; @@ -83,17 +82,4 @@ public class DebugResponseTest extends TestCase { assertEquals(inFrames[i], outFrames[i]); } } - - public void testDebugResponseSession() { - try { - DebugResponseSession sessionResponse = new DebugResponseSession(100); - byte[] data = SerializationHelper.serialize(sessionResponse); - DebugResponseSession sessionOut - = (DebugResponseSession) SerializationHelper.deserialize(data); - assertNotNull(sessionOut); - assertEquals(sessionResponse.getSessionId(), sessionOut.getSessionId()); - } catch (IOException e) { - fail(e.getMessage()); - } - } } diff --git a/src/test/java/org/luaj/debug/EnumTypeTest.java b/src/test/java/org/luaj/debug/EnumTypeTest.java index 5d269db3..82dcb937 100644 --- a/src/test/java/org/luaj/debug/EnumTypeTest.java +++ b/src/test/java/org/luaj/debug/EnumTypeTest.java @@ -17,7 +17,7 @@ public class EnumTypeTest extends TestCase { public void testDebugEventTypeSerialization() { try { - DebugMessageType type = DebugMessageType.error; + DebugMessageType type = DebugMessageType.suspendedOnError; byte[] data = SerializationHelper.serialize(type); DebugMessageType typeOut = (DebugMessageType) SerializationHelper .deserialize(data);