blob: 77623511925d427bc9d13871bd69707a603ce15c [file] [log] [blame]
/****************************************************************************
* Copyright (c) 2004, 2009 Composent, Inc. 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:
* Composent, Inc. - initial API and implementation
*****************************************************************************/
package org.eclipse.ecf.remoteservice;
import org.eclipse.ecf.remoteservice.events.IRemoteCallEvent;
/**
* Listener for remote call events. The IRemoteService.callAsynch method
* supports the specification of a listener to receive and handle the results of
* a remote call asynchronously. When non-null instance of a class implementing
* this interface is provided to the IRemoteService.callAsynch method, it will
* subsequently have it's {@link #handleEvent(IRemoteCallEvent)} method called
* with<br>
* <ol>
* <li>An event that implements IRemoteCallStartEvent</li>
* <li>An event that implements IRemoteCallCompleteEvent</li>
* </ol>
*
* <p>
* Note these methods will be called asynchronously when notifications of remote
* changes are received by the provider implementation code. The provider is
* free to call the methods below with an arbitrary thread, so the
* implementation of these methods must be appropriately prepared.
* <p>
* For example, if the code implementing any of these methods must interact with
* user interface code, then it should use code such as the following to execute
* on the SWT UI thread:
*
* <pre>
* Display.getDefault().asyncExec(new Runnable() {
* public void run() {
* ... UI code here
* }
* });
* </pre>
*
* Further, the code in the implementations of these methods should <b>not block</b>
* via I/O operations or blocking UI calls.
*
* @see IRemoteService
*/
public interface IRemoteCallListener {
/**
* Handle remote call events. The two remote call events are
* IRemoteCallStartEvent, and IRemoteCallCompleteEvent
*
* @param event
* the event. Will not be <code>null</code>.
*/
public void handleEvent(IRemoteCallEvent event);
}