/*******************************************************************************
* Copyright (c) 2007, 2013 Wind River Systems, 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.services;
import java.util.Map;
import org.eclipse.tcf.protocol.IPeer;
import org.eclipse.tcf.protocol.IService;
import org.eclipse.tcf.protocol.IToken;
/**
* ILocator service uses transport layer to search for peers and to collect data about
* peer's attributes and capabilities (services). Discovery mechanism depends on transport protocol
* and is part of that protocol handler. Targets, known to other hosts, can be found through
* remote instances of ILocator service. Automatically discovered targets require no further
* configuration. Additional targets can be configured manually.
*
* Clients should use Protocol.getLocator() to obtain local instance of ILocator,
* then ILocator.getPeers() can be used to get list of available peers (hosts and targets).
*
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface ILocator extends IService {
static final String NAME = "Locator";
/**
* Peer data retention period in milliseconds.
*/
static final long DATA_RETENTION_PERIOD = 60 * 1000;
/**
* Auto-configuration protocol version.
*/
static char CONF_VERSION = '2';
/**
* Auto-configuration command and response codes.
*/
static final int
CONF_REQ_INFO = 1,
CONF_PEER_INFO = 2,
CONF_REQ_SLAVES = 3,
CONF_SLAVES_INFO = 4,
CONF_PEERS_REMOVED = 5;
/**
* @return Locator service name: "Locator"
*/
String getName();
/**
* Get map (ID -> IPeer) of available peers (hosts and targets).
* The method return cached (currently known to the framework) list of peers.
* The list is updated according to event received from transport layer
*/
Map<String,IPeer> getPeers();
/**
* Redirect this service channel to given peer using this service as a proxy.
* @param peer_id - Peer ID.
*/
IToken redirect(String peer_id, DoneRedirect done);
/**
* Redirect this service channel to given peer using this service as a proxy.
* @param peer - Peer attributes.
*/
IToken redirect(Map<String,String> peer, DoneRedirect done);
interface DoneRedirect {
void doneRedirect(IToken token, Exception error);
}
/**
* Call back after TCF messages sent to this target up to this moment are delivered.
* This method is intended for synchronization of messages
* across multiple channels.
*
* Note: Cross channel synchronization can reduce performance and throughput.
* Most clients don't need channel synchronization and should not call this method.
*
* @param done will be executed by dispatch thread after communication
* messages are delivered to corresponding targets.
*
* This is internal API, TCF clients should use {@code org.eclipse.tcf.protocol.Protocol}.
*/
IToken sync(DoneSync done);
interface DoneSync {
void doneSync(IToken token);
}
/**
* Get agent ID of the agent providing the locator service.
* <p>
* The agent ID can be used to identify the agent among all the peers
* returned by {@link #getPeers()}.
*/
IToken getAgentID(DoneGetAgentID done);
interface DoneGetAgentID {
void doneGetAgentID(IToken token, Exception error, String agentID);
}
/**
* Add a listener for ILocator service events.
*/
void addListener(LocatorListener listener);
/**
* Remove a listener for ILocator service events.
*/
void removeListener(LocatorListener listener);
/**
* ILocator service event listener interface
*/
interface LocatorListener {
/**
* A new peer is added into locator peer table.
* @param peer
*/
void peerAdded(IPeer peer);
/**
* Peer attributes have changed.
* @param peer
*/
void peerChanged(IPeer peer);
/**
* A peer is removed from locator peer table.
* @param id - peer ID
*/
void peerRemoved(String id);
/**
* Peer heart beat detected.
* @param id - peer ID
*/
void peerHeartBeat(String id);
}
}