/*******************************************************************************
 * 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;
	}
}
