📄 rendezvousservice.java
字号:
/*
*
* $Id: RendezVousService.java,v 1.2 2002/03/04 20:19:21 echtcherbina Exp $
*
* Copyright (c) 2001 Sun Microsystems, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Sun Microsystems, Inc. for Project JXTA."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact Project JXTA at http://www.jxta.org.
*
* 5. Products derived from this software may not be called "JXTA",
* nor may "JXTA" appear in their name, without prior written
* permission of Sun.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL SUN MICROSYSTEMS OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* =========================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of Project JXTA. For more
* information on Project JXTA, please see
* <http://www.jxta.org/>.
*
* This license is based on the BSD license adopted by the Apache Foundation.
*/
package net.jxta.rendezvous;
import java.io.IOException;
import java.util.Enumeration;
import net.jxta.peer.PeerID;
import net.jxta.endpoint.EndpointListener;
import net.jxta.endpoint.Message;
import net.jxta.endpoint.EndpointAddress;
import net.jxta.protocol.PeerAdvertisement;
import net.jxta.service.Service;
/**
* This interface provides an API to the Jxta RendezVous Service.
* <p>
* The RendezVous Service is responsible for propagating message within
* a JXTA PeerGroup.
* <p>
* While the internal protcol of diffusion is let to the implementation of
* the service, the JXTA RendezVous Service defines a subscribe mechanism
* allowing JXTA peers to receive propagated messages (clients of the service)
* or become a repeater of the service (rendezvous peers). At least one peer
* in a given PeerGroup must be a rendezvous. However, rendezvous peers can
* dynamically join or leave the PeerGroup.
* <p>
* When a peers becomes a rendezvous, it publishes a special advertisement,
* a <b>RdvAdvertisement</b> that can be found by other peers which are looking
* for a rendezvous in the PeerGroup.
* <p>
*
* @see net.jxta.rendezvous.RendezVousManager
* @see net.jxta.rendezvous.RendezVousMonitor
* @see net.jxta.protocol.RdvAdvertisement
* @see net.jxta.protocol.PeerAdvertisement
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public interface RendezVousService extends Service {
/**
** This portion of the API is for the peers that are connected
** to a RendezVous peer.
**/
/**
* Add a peer as a new RendezVousService point.
* If/When the RendezVousService accepts the connection, the RendezVousService
* service will invoke the RendezVousMonitor.
*
* @param adv the advertisement of the RendezVousService peer
* @exception IOException when the RendezVousService peer is not reachable
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public void connectToRendezVous (PeerAdvertisement adv) throws IOException;
/**
* Add a peer as a new RendezVousService point.
* If/When the RendezVousService accepts the connection, the RendezVousService
* service will invoke the RendezVousMonitor.
*
* @param addr EndpointAddress of the rendezvous peer
* @exception IOException when the RendezVousService peer is not reachable
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public void connectToRendezVous (EndpointAddress addr) throws IOException;
/**
* Remove a RendezVousService point.
*
* @param peerID the PeerId of the RendezVous to disconnect from.
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public void disconnectFromRendezVous (PeerID peerID);
/**
* Register a notification monitor that is called each time a RendezVous
* peer is not reachable anymore.
*
* @param monitor a monitor that is called each time a RendezVous peer is
* is not reachable anymore.
* @return RendezVousMonitor returns, if any, the current RendezVousMonitor
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public RendezVousMonitor setMonitor (RendezVousMonitor monitor);
/**
* Returns an Enumeration of the PeerID all the RendezVous on which this Peer is currentely connected.
* <p>
* return Enumeration enumeration of RendezVous
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public Enumeration getConnectedRendezVous ();
/**
* Returns an Enumeration of the PeerID all the RendezVous on which this
* Peer failed to connect to.
*
* @return Enumeration enumeration of RendezVous
* @since JXTA 1.0
*/
public Enumeration getDisconnectedRendezVous ();
/**
** This portion is for peers that are RendezVous
**/
/**
* Start the local peer as a RendezVous peer. The caller must provide
* a monitor to an authorization manager.
*
* @param monitor is the RendezVousManager that will be invoked each
* time a new Peer request to be connected.
*
* @exception IOException when a monitor has already been connected
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public void startRendezVous (RendezVousManager monitor) throws IOException;
/**
* Start the local peer as a RendezVous peer with the default manager.
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public void startRendezVous ();
/**
* Stop the RendezVous function on the local Peer. All connected Peer are
* disconnected.
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public void stopRendezVous ();
/**
* Returns an Enumeration of PeerID of the peers that are currentely
* connected.
*
* @return Enumeration enumeration of peers connected to that rendezvous
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public Enumeration getConnectedPeers();
/**
* Sends advertisement about other RendezVous to a given peer
*
* @param destPeer is the advertisement of the peer to which to
* send the RendezVous advertisement.
* @param rendezVous is the advertisment of a RendezVous peer
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
*/
public void sendRendezVousAdv (PeerAdvertisement destPeer,
PeerAdvertisement rendezVous);
/**
* Clients of the rendezvous service can use this to receive raw
* propagation rather than crawling query/responses. It takes care of TTL
* counting and loop detection.
*
* @param name The name of the listener.
* @param listener An EndpointListener to process the message.
*/
public void addPropagateListener(String name,
EndpointListener listener)
throws IOException;
/**
* Removes a Listener previously added with addPropagateListener.
*
* @param name The name of the listener.
* @param listener An EndpointListener to process the message.
*/
public void removePropagateListener(String name,
EndpointListener listener)
throws IOException;
/**
*
* Add a listener for RenDezVousEvents
*
* @param listener An RendezvousListener to process the event.
*/
public void addListener( RendezvousListener listener );
/**
* Removes a Listener previously added with addListener.
*
* @param listener the RendezvousListener listener remove
*/
public boolean removeListener( RendezvousListener listener );
/**
* Propagates a message onto as many peers on the local network
* as possible. Typically the message will go to all the peers to
* which at least one endpoint transport can address without using
* the router.
*
* Only a single HOP at a time is performed. Messages are always
* delivered to the destination handler on arrival. This handler
* is responsible for repropagating further, if deemed appropropriate.
*
* Loop and TTL control are performed automatically.
*
* Messages can be propagated via this method for the first time or
* can be re-propagated by re-using a message that came in via propagation.
* In the later case, the TTL and loop detection parameters CANNOT be
* re-initialized. If one wants to "re-propagate" a message with a new TTL
* and blank gateways list one must generate a completely new message.
* This limits the risk of accidental propagation storms, although they
* can always be engineered deliberately.
*
* Note: The original msg is not modified and may be reused upon return.
*
* @param msg is the message to propagate.
* @param serviceName is the name of the service
* @param serviceParam is the parameter of the service
*/
public void propagate (Message msg,
String serviceName,
String serviceParam,
int defaultTTL)
throws IOException;
/**
* Propagates a message onto as many peers on the local network
* as possible. Typically the message will go to all the peers to
* which at least one endpoint transport can address without using
* the router.
*
* Only a single HOP at a time is performed. Messages are always
* delivered to the destination handler on arrival. This handler
* is responsible for repropagating further, if deemed appropropriate.
*
* Loop and TTL control are performed automatically.
*
* Messages can be propagated via this method for the first time or
* can be re-propagated by re-using a message that came in via propagation.
* In the later case, the TTL and loop detection parameters CANNOT be
* re-initialized. If one wants to "re-propagate" a message with a new TTL
* and blank gateways list one must generate a completely new message.
* This limits the risk of accidental propagation storms, although they
* can always be engineered deliberately.
*
* Note: The original msg is not modified and may be reused upon return.
*
* @param msg is the message to propagate.
* @param serviceName is the name of the service
* @param serviceParam is the parameter of the service
* @param prunePeer is a peer to prune in the propagation.
* @deprecated
* @see #propagate
*/
public void propagateToNeighbors (Message msg, String serviceName,
String serviceParam, int defaultTTL,
String prunePeer)
throws IOException;
/**
* Propagates a message onto as many peers in the group as possible.
*
* Only a single HOP at a time is performed. Messages are always
* delivered to the destination handler on arrival. This handler
* is responsible for repropagating further, if deemed appropropriate.
*
* Loop and TTL control are performed automatically.
*
* Messages can be propagated via this method for the first time or
* can be re-propagated by re-using a message that came in via propagation.
* In the later case, the TTL and loop detection parameters CANNOT be
* re-initialized. If one wants to "re-propagate" a message with a new TTL
* and blank gateways list one must generate a completely new message.
* This limits the risk of accidental propagation storms, although they
* can always be engineered deliberately.
*
* Note: The original msg is not modified and may be reused upon return.
*
* @param msg is the message to propagate.
* @param serviceName is the name of the service
* @param serviceParam is the parameter of the service
* @param prunePeer is a peer to prune in the propagation.
* @deprecated
* @see #propagate
*/
public void propagateInGroup (Message msg, String serviceName,
String serviceParam, int defaultTTL,
String prunePeer)
throws IOException;
/**
* Return true if connected to a rendezvous.
*
* @return true if connected to a rendezvous, false otherwise
*/
public boolean isConnectedToRendezVous();
/**
* tells whether this rendezvous service currently acts as a "super-node"
* "rendezvous", knowlege hub, influence broker, or whichever higher
* status applies to the implementation.
*
* @return boolean true if this rendezvous acts as a "rendezvous" per the
* implementation definition.
*/
public boolean isRendezVous();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -