/** * 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. */ package org.python.pydev.debug.model; import java.io.IOException; import java.net.Socket; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.ui.console.IOConsole; import org.python.pydev.debug.model.remote.AbstractDebuggerCommand; import org.python.pydev.debug.model.remote.DebuggerReader; import org.python.pydev.debug.model.remote.DebuggerWriter; public class AbstractDebugTargetWithTransmission extends PlatformObject { /** * connection socket */ protected Socket socket; /** * reading thread */ protected DebuggerReader reader; /** * writing thread */ protected DebuggerWriter writer; /** * sequence seed for command numbers */ protected int sequence = -1; private volatile boolean waitingForInput = false; public boolean isWaitingForInput() { return waitingForInput; } public void setWaitingForInput(boolean waitingForInput) { this.waitingForInput = waitingForInput; } protected void addProcessConsole(IOConsole c) { // What we'd like to do is not put in the input stream the contents we received // in the console UNLESS we're waiting for input (but unfortunately, it seems there's // no API for that). // // This means that if the user writes something (to do an evaluation) and later // does a raw_input('say something:\n'), the raw_input will get the contents that // the user wrote for the evaluation and not the contents it'd write now. // As we now have a separate input console, this shouldn't be so troublesome, as // we control things better when the user writes to the PromptOverlay console, but // if he writes to the other console, things may misbehave. } /** * @return next available debugger command sequence number */ public int getNextSequence() { sequence += 2; return sequence; } public void addToResponseQueue(AbstractDebuggerCommand cmd) { if (reader != null) { reader.addToResponseQueue(cmd); } } public void postCommand(AbstractDebuggerCommand cmd) { if (writer != null) { writer.postCommand(cmd); } } public void startTransmission(Socket socket2) throws IOException { this.socket = socket2; //socket = connector.getSocket(); this.reader = new DebuggerReader(socket, this); this.writer = new DebuggerWriter(socket); Thread t = new Thread(reader, "pydevd.reader"); t.start(); t = new Thread(writer, "pydevd.writer"); t.start(); } }