/** * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * Author: atotic * Created on Apr 21, 2004 */ package org.python.pydev.debug.model.remote; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.python.pydev.core.log.Log; import org.python.pydev.debug.core.PydevDebugPlugin; import org.python.pydev.debug.model.AbstractDebugTarget; import org.python.pydev.debug.model.PyThread; import org.python.pydev.debug.model.XMLUtils; /** * ListThreads command. * * See protocol for more info */ public class ThreadListCommand extends AbstractDebuggerCommand { boolean done; PyThread[] threads; public ThreadListCommand(AbstractDebugTarget target) { super(target); done = false; } public void waitUntilDone(int timeout) throws InterruptedException { while (!done && timeout > 0) { timeout -= 100; synchronized (this) { Thread.sleep(100); } } if (timeout < 0) throw new InterruptedException(); } public PyThread[] getThreads() { return threads; } @Override public String getOutgoing() { return makeCommand(CMD_LIST_THREADS, sequence, ""); } @Override public boolean needResponse() { return true; } /** * The response is a list of threads */ @Override public void processOKResponse(int cmdCode, String payload) { if (cmdCode != 102) { PydevDebugPlugin.log(IStatus.ERROR, "Unexpected response to LIST THREADS" + payload, null); return; } try { threads = XMLUtils.ThreadsFromXML(target, payload); } catch (CoreException e) { PydevDebugPlugin.log(IStatus.ERROR, "LIST THREADS got an unexpected response " + payload, null); Log.log(e); } done = true; } @Override public void processErrorResponse(int cmdCode, String payload) { PydevDebugPlugin.log(IStatus.ERROR, "LIST THREADS got an error " + payload, null); } }