Project JXTA

net.jxta.impl.rendezvous.adhoc
Class AdhocPeerRdvService

java.lang.Object
  extended bynet.jxta.impl.rendezvous.RendezVousServiceProvider
      extended bynet.jxta.impl.rendezvous.adhoc.AdhocPeerRdvService
All Implemented Interfaces:
EndpointListener

public class AdhocPeerRdvService
extends RendezVousServiceProvider

A JXTA RendezvousService implementation which implements the ad hoc portion of the standard JXTA Rendezvous Protocol (RVP).

See Also:
RendezvousService, JXTA Protocols Specification : Rendezvous Protocol

Field Summary
 
Fields inherited from class net.jxta.impl.rendezvous.RendezVousServiceProvider
closed, group, HEADER_NAME, MAX_TTL, MESSAGE_NAMESPACE_NAME, PropPName, PropSName, rdvService, rendezvousMeter, rendezvousServiceMonitor
 
Constructor Summary
AdhocPeerRdvService(PeerGroup g, RendezVousServiceImpl rdvService)
          Constructor
 
Method Summary
 void challengeRendezVous(ID peer, long delay)
          Resets the local idea of the lease to the specified value. As a result a lease reponse must be sought and obtained within the new specified delay or the rdv is considered disconnected.
 void connectToRendezVous(EndpointAddress addr)
          {@inheritDoc}
 void connectToRendezVous(PeerAdvertisement adv)
          {@inheritDoc}
 void disconnectFromRendezVous(ID peerId)
          Remove a RendezVousService point.
 Vector getConnectedPeerIDs()
          {@inheritDoc}
 Enumeration getConnectedPeers()
          {@inheritDoc}
 Enumeration getConnectedRendezVous()
          Returns an Enumeration of the PeerID all the RendezVous on which this Peer is currentely connected.
 Enumeration getDisconnectedRendezVous()
          Returns an Enumeration of the PeerID all the RendezVous on which this Peer failed to connect to.
 boolean isConnectedToRendezVous()
          Return true if connected to a rendezvous.
 void propagate(Enumeration destPeerIDs, Message msg, String serviceName, String serviceParam, int ttl)
          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. This method sends the message to all peers, rendezvous peers and edge peer. This method of propation is very expensive and should not be frequentely used. When rendezvous peers are used in order to cache index of data, it is more efficient to use the walk() method. 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.
 void propagate(Message msg, String serviceName, String serviceParam, int ttl)
          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. This method sends the message to all peers, rendezvous peers and edge peer. This method of propation is very expensive and should not be frequentely used. When rendezvous peers are used in order to cache index of data, it is more efficient to use the walk() method. 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.
 void propagateInGroup(Message msg, String serviceName, String serviceParam, int ttl)
          
 void propagateToNeighbors(Message msg, String serviceName, String serviceParam, int ttl)
          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.
protected  void repropagate(Message msg, RendezVousPropagateMessage propHdr, String serviceName, String serviceParam)
          
 void setChoiceDelay(long delay)
          {@inheritDoc}
protected  int startApp(String[] arg)
          Supply arguments and starts this service if it hadn't started by itself.

Currently this service starts by itself and does not expect arguments.

protected  void stopApp()
          Ask this service to stop.
 void walk(Message msg, String serviceName, String serviceParam, int ttl)
          Walk a message through the rendezvous peers of the network: only rendezvous peers will receive the message. 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.
 void walk(Vector destPeerIDs, Message msg, String serviceName, String serviceParam, int ttl)
          Walk a message through the rendezvous peers of the network: only rendezvous peers will receive the message. 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.
 
Methods inherited from class net.jxta.impl.rendezvous.RendezVousServiceProvider
checkPropHeader, getPeerAdvertisementDoc, getPropHeader, mkAddress, mkAddress, processIncomingMessage, processReceivedMessage, sendToNetwork, setRendezvousServiceMonitor, updatePropHeader
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AdhocPeerRdvService

public AdhocPeerRdvService(PeerGroup g,
                           RendezVousServiceImpl rdvService)
Constructor

Parameters:
g - Description of Parameter
Method Detail

startApp

protected int startApp(String[] arg)
Supply arguments and starts this service if it hadn't started by itself.

Currently this service starts by itself and does not expect arguments.

Overrides:
startApp in class RendezVousServiceProvider

stopApp

protected void stopApp()
Ask this service to stop.

Overrides:
stopApp in class RendezVousServiceProvider

getConnectedPeerIDs

public Vector getConnectedPeerIDs()
{@inheritDoc}

Specified by:
getConnectedPeerIDs in class RendezVousServiceProvider

getConnectedPeers

public Enumeration getConnectedPeers()
{@inheritDoc}

Specified by:
getConnectedPeers in class RendezVousServiceProvider

isConnectedToRendezVous

public boolean isConnectedToRendezVous()
Return true if connected to a rendezvous.

Specified by:
isConnectedToRendezVous in class RendezVousServiceProvider
Returns:
true if connected to a rendezvous, false otherwise

getConnectedRendezVous

public Enumeration getConnectedRendezVous()
Returns an Enumeration of the PeerID all the RendezVous on which this Peer is currentely connected.

Specified by:
getConnectedRendezVous in class RendezVousServiceProvider
Returns:
Enumeration enumeration of RendezVous

getDisconnectedRendezVous

public Enumeration getDisconnectedRendezVous()
Returns an Enumeration of the PeerID all the RendezVous on which this Peer failed to connect to.

Specified by:
getDisconnectedRendezVous in class RendezVousServiceProvider
Returns:
Enumeration enumeration of RendezVous

connectToRendezVous

public void connectToRendezVous(PeerAdvertisement adv)
                         throws IOException
{@inheritDoc}

Throws:
IOException

connectToRendezVous

public void connectToRendezVous(EndpointAddress addr)
                         throws IOException
{@inheritDoc}

Throws:
IOException

challengeRendezVous

public void challengeRendezVous(ID peer,
                                long delay)
Resets the local idea of the lease to the specified value. As a result a lease reponse must be sought and obtained within the new specified delay or the rdv is considered disconnected.

Specified by:
challengeRendezVous in class RendezVousServiceProvider
Parameters:
peer - The peer to be chanllenged
delay - The delay

disconnectFromRendezVous

public void disconnectFromRendezVous(ID peerId)
Remove a RendezVousService point.

Specified by:
disconnectFromRendezVous in class RendezVousServiceProvider
Parameters:
peerId - the PeerId of the RendezVous to disconnect from.

setChoiceDelay

public void setChoiceDelay(long delay)
{@inheritDoc}

Specified by:
setChoiceDelay in class RendezVousServiceProvider

propagate

public void propagate(Message msg,
                      String serviceName,
                      String serviceParam,
                      int ttl)
               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. This method sends the message to all peers, rendezvous peers and edge peer. This method of propation is very expensive and should not be frequentely used. When rendezvous peers are used in order to cache index of data, it is more efficient to use the walk() method. 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.

Specified by:
propagate in class RendezVousServiceProvider
Parameters:
msg - is the message to propagate.
serviceName - is the name of the service
serviceParam - is the parameter of the service
Throws:
IOException

propagateInGroup

public void propagateInGroup(Message msg,
                             String serviceName,
                             String serviceParam,
                             int ttl)
                      throws IOException

Specified by:
propagateInGroup in class RendezVousServiceProvider
Throws:
IOException

propagate

public void propagate(Enumeration destPeerIDs,
                      Message msg,
                      String serviceName,
                      String serviceParam,
                      int ttl)
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. This method sends the message to all peers, rendezvous peers and edge peer. This method of propation is very expensive and should not be frequentely used. When rendezvous peers are used in order to cache index of data, it is more efficient to use the walk() method. 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.

Specified by:
propagate in class RendezVousServiceProvider
Parameters:
msg - is the message to propagate.
serviceName - is the name of the service
serviceParam - is the parameter of the service

propagateToNeighbors

public void propagateToNeighbors(Message msg,
                                 String serviceName,
                                 String serviceParam,
                                 int ttl)
                          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.

Specified by:
propagateToNeighbors in class RendezVousServiceProvider
Parameters:
msg - is the message to propagate.
serviceName - is the name of the service
serviceParam - is the parameter of the service
Throws:
IOException

walk

public void walk(Message msg,
                 String serviceName,
                 String serviceParam,
                 int ttl)
          throws IOException
Walk a message through the rendezvous peers of the network: only rendezvous peers will receive the message. 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.

Specified by:
walk in class RendezVousServiceProvider
Parameters:
msg - is the message to walk.
serviceName - is the name of the service
serviceParam - is the parameter of the service
ttl - is the maximum TTL of the message (note that the Rendezvous Service implementation is free to decrease that value.
Throws:
IOException - when walking the message is impossible (network failure)

walk

public void walk(Vector destPeerIDs,
                 Message msg,
                 String serviceName,
                 String serviceParam,
                 int ttl)
          throws IOException
Walk a message through the rendezvous peers of the network: only rendezvous peers will receive the message. 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.

Specified by:
walk in class RendezVousServiceProvider
Parameters:
destPeerIDs - is a Vector of PeerID of the peers which are receiving first the walker. Note that each entry in the Vector will create its own walker.
msg - is the message to walk.
serviceName - is the name of the service
serviceParam - is the parameter of the service
ttl - is the maximum TTL of the message (note that the Rendezvous Service implementation is free to decrease that value.
Throws:
IOException - when walking the message is impossible (network failure)

repropagate

protected void repropagate(Message msg,
                           RendezVousPropagateMessage propHdr,
                           String serviceName,
                           String serviceParam)

Specified by:
repropagate in class RendezVousServiceProvider

JXTA J2SE