blob: fb06e6974619f1f7ad95b1bc853b7a79862ef463 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdi.internal.connect;
import java.io.IOException;
import com.sun.jdi.connect.spi.Connection;
/**
* This class implements threads that receive/send packets from/to the Virtual
* Machine.
*
*/
public abstract class PacketManager implements Runnable {
/** Connector that performs IO to Virtual Machine. */
private Connection fConnection;
/**
* Thread that handles the communication the other way (e.g. if we are
* sending, the receiving thread).
*/
private Thread fPartnerThread;
private IOException fDisconnectException;
/**
* Creates new PacketManager.
*/
protected PacketManager(Connection connection) {
fConnection = connection;
}
public Connection getConnection() {
return fConnection;
}
/**
* Used to indicate that an IO exception occurred, closes connection to
* Virtual Machine.
*
* @param disconnectException
* the IOException that occurred
*/
public void disconnectVM(IOException disconnectException) {
fDisconnectException = disconnectException;
disconnectVM();
}
/**
* Closes connection to Virtual Machine.
*/
public void disconnectVM() {
try {
fConnection.close();
} catch (IOException e) {
fDisconnectException = e;
}
// Interrupt the sending thread if we are the receiving thread and vice
// versa.
if (fPartnerThread != null) {
fPartnerThread.interrupt();
}
}
/**
* @return Returns whether an IO exception has occurred.
*/
public boolean VMIsDisconnected() {
return fConnection == null || !fConnection.isOpen();
}
/**
* Returns the IOException that caused this packet manager to disconnect or
* <code>null</code> if none.
*/
public IOException getDisconnectException() {
return fDisconnectException;
}
/**
* Assigns thread of partner, to be notified if we have an IO exception.
*/
public void setPartnerThread(Thread thread) {
fPartnerThread = thread;
}
}