/*******************************************************************************
 * Copyright (c) 2008, 2011 Wind River Systems and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Wind River Systems - initial API and implementation
 *     Nokia - create and use backend service.
 *******************************************************************************/
package org.eclipse.cdt.dsf.mi.service;

import java.io.InputStream;
import java.io.OutputStream;

import org.eclipse.cdt.dsf.concurrent.Immutable;
import org.eclipse.cdt.dsf.service.IDsfService;

/**
 * Service for controlling the back end process.
 * @since 1.1
 */
public interface IMIBackend extends IDsfService {

	public enum State {
		NOT_INITIALIZED, STARTED, TERMINATED
	}

	/**
	 * Event indicating that the back end process has started or terminated.
	 */
	@Immutable
	public static class BackendStateChangedEvent {
		final private String fSessionId;
		final private String fBackendId;
		final private State fState;

		public BackendStateChangedEvent(String sessionId, String backendId, State state) {
			fSessionId = sessionId;
			fBackendId = backendId;
			fState = state;
		}

		public String getSessionId() {
			return fSessionId;
		}

		public String getBackendId() {
			return fBackendId;
		}

		public State getState() {
			return fState;
		}
	}

	/**
	 * Returns the identifier of this backend service.  It can be used
	 * to distinguish between multiple instances of this service in a
	 * single session.
	 */
	public String getId();

	/**
	 * Requests that the backend be immediately terminated.
	 */
	public void destroy();

	/**
	 * Returns the current state of the backend.
	 * @return
	 */
	public State getState();

	/**
	 * Returns the exit code of the backend.  Returns <code>-1</code> if
	 * the backend exit code is not available.
	 * @return
	 */
	public int getExitCode();

	/**
	 * Returns the backend command stream.
	 */
	public InputStream getMIInputStream();

	/**
	 * Returns the backend result and event stream.
	 * @return
	 */
	public OutputStream getMIOutputStream();
}
