FreePastry/docs/javadoc/rice/pastry/standard/StandardRouter.html
ChronosX88 aaa73fe8b3 Pew
2019-05-13 16:45:05 +04:00

647 lines
32 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_07) on Fri Mar 13 20:01:37 CET 2009 -->
<TITLE>
StandardRouter (Rice Pastry - API Specifications)
</TITLE>
<META NAME="date" CONTENT="2009-03-13">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="StandardRouter (Rice Pastry - API Specifications)";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StandardRouter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Rice Pastry API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../rice/pastry/standard/StandardLeafSetProtocol.html" title="class in rice.pastry.standard"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../rice/pastry/standard/StandardRouteSetProtocol.html" title="class in rice.pastry.standard"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?rice/pastry/standard/StandardRouter.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StandardRouter.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
rice.pastry.standard</FONT>
<BR>
Class StandardRouter</H2>
<PRE>
java.lang.Object
<IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">rice.pastry.client.PastryAppl</A>
<IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>rice.pastry.standard.StandardRouter</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../rice/pastry/routing/Router.html" title="interface in rice.pastry.routing">Router</A></DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../rice/pastry/standard/RapidRerouter.html" title="class in rice.pastry.standard">RapidRerouter</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>StandardRouter</B><DT>extends <A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A><DT>implements <A HREF="../../../rice/pastry/routing/Router.html" title="interface in rice.pastry.routing">Router</A></DL>
</PRE>
<P>
An implementation of the standard Pastry routing algorithm.
<P>
<P>
<DL>
<DT><B>Version:</B></DT>
<DD>$Id: StandardRouter.java 4640 2008-12-18 12:22:43Z jeffh $</DD>
<DT><B>Author:</B></DT>
<DD>Andrew Ladd, Rongmei Zhang/Y.Charlie Hu</DD>
</DL>
<HR>
<P>
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;java.util.Map&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>,java.lang.Long&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#lastTimeSentRouteTablePatch">lastTimeSentRouteTablePatch</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We can end up causing a nasty feedback if we blast too many BRRs, so we're
going to throttle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#ROUTE_TABLE_PATCH_THROTTLE">ROUTE_TABLE_PATCH_THROTTLE</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../rice/pastry/routing/RouterStrategy.html" title="interface in rice.pastry.routing">RouterStrategy</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#routerStrategy">routerStrategy</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_rice.pastry.client.PastryAppl"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class rice.pastry.client.<A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#address">address</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#deserializer">deserializer</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#instance">instance</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#logger">logger</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#options">options</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#receiver">receiver</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#thePastryNode">thePastryNode</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#StandardRouter(rice.pastry.PastryNode, rice.pastry.messaging.MessageDispatch)">StandardRouter</A></B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;thePastryNode,
<A HREF="../../../rice/pastry/messaging/MessageDispatch.html" title="class in rice.pastry.messaging">MessageDispatch</A>&nbsp;dispatch)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#StandardRouter(rice.pastry.PastryNode, rice.pastry.messaging.MessageDispatch, rice.pastry.routing.RouterStrategy)">StandardRouter</A></B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;thePastryNode,
<A HREF="../../../rice/pastry/messaging/MessageDispatch.html" title="class in rice.pastry.messaging">MessageDispatch</A>&nbsp;dispatch,
<A HREF="../../../rice/pastry/routing/RouterStrategy.html" title="interface in rice.pastry.routing">RouterStrategy</A>&nbsp;strategy)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#deliverToApplication(rice.pastry.routing.RouteMessage)">deliverToApplication</A></B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;msg)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#deliverWhenNotReady()">deliverWhenNotReady</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Instructs the MessageDispatch how to behave when the PastryNode is not ready.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.util.Iterator&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#getBestRoutingCandidates(rice.pastry.Id)">getBestRoutingCandidates</A></B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;target)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordered list of the best candidates for the next to the key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;java.util.Iterator&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#getBestRoutingCandidates(rice.pastry.Id, int, boolean)">getBestRoutingCandidates</A></B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;target,
int&nbsp;lsPos,
boolean&nbsp;leafSetOnly)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;java.util.ArrayList&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#getLSCollection(int)">getLSCollection</A></B>(int&nbsp;lsPos)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#messageForAppl(rice.pastry.messaging.Message)">messageForAppl</A></B>(<A HREF="../../../rice/pastry/messaging/Message.html" title="class in rice.pastry.messaging">Message</A>&nbsp;msg)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called by pastry when a message arrives for this application.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#receiveMessage(rice.pastry.messaging.Message)">receiveMessage</A></B>(<A HREF="../../../rice/pastry/messaging/Message.html" title="class in rice.pastry.messaging">Message</A>&nbsp;msg)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Receive a message from a remote node.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#route(rice.pastry.routing.RouteMessage)">route</A></B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;rm)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send the RouteMessage based on the Pastry Algorithm</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#routeMessage(rice.pastry.routing.RouteMessage)">routeMessage</A></B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;rm)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Routes the messages if the next hop has been set up.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#sendTheMessage(rice.pastry.routing.RouteMessage, rice.pastry.NodeHandle)">sendTheMessage</A></B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;rm,
<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;handle)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/standard/StandardRouter.html#setRouterStrategy(rice.pastry.routing.RouterStrategy)">setRouterStrategy</A></B>(<A HREF="../../../rice/pastry/routing/RouterStrategy.html" title="interface in rice.pastry.routing">RouterStrategy</A>&nbsp;strategy)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_rice.pastry.client.PastryAppl"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class rice.pastry.client.<A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#accept(rice.p2p.commonapi.appsocket.AppSocketReceiver)">accept</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#canReceiveSocket()">canReceiveSocket</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#connect(rice.p2p.commonapi.NodeHandle, rice.p2p.commonapi.appsocket.AppSocketReceiver, int)">connect</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#destroy()">destroy</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#enrouteMessage(rice.pastry.messaging.Message, rice.pastry.Id, rice.pastry.NodeHandle, rice.pastry.routing.SendOptions)">enrouteMessage</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#finishReceiveSocket(rice.p2p.commonapi.appsocket.AppSocket)">finishReceiveSocket</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#getAddress()">getAddress</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#getDeserializer()">getDeserializer</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#getLeafSet()">getLeafSet</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#getNodeHandle()">getNodeHandle</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#getNodeId()">getNodeId</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#getRoutingTable()">getRoutingTable</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#isClosest(rice.pastry.Id)">isClosest</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#leafSetChange(rice.pastry.NodeHandle, boolean)">leafSetChange</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#notifyReady()">notifyReady</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#receiveMessageInternal(rice.pastry.messaging.RawMessageDelivery)">receiveMessageInternal</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#register()">register</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#routeMsg(rice.pastry.Id, rice.pastry.messaging.Message, rice.pastry.routing.SendOptions)">routeMsg</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#routeMsg(rice.pastry.Id, rice.pastry.messaging.Message, rice.pastry.routing.SendOptions, rice.p2p.commonapi.DeliveryNotification)">routeMsg</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#routeMsgDirect(rice.pastry.NodeHandle, rice.pastry.messaging.Message, rice.pastry.routing.SendOptions)">routeMsgDirect</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#routeSetChange(rice.pastry.NodeHandle, boolean)">routeSetChange</A>, <A HREF="../../../rice/pastry/client/PastryAppl.html#setDeserializer(rice.p2p.commonapi.rawserialization.MessageDeserializer)">setDeserializer</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
<!-- ============ FIELD DETAIL =========== -->
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="routerStrategy"><!-- --></A><H3>
routerStrategy</H3>
<PRE>
protected <A HREF="../../../rice/pastry/routing/RouterStrategy.html" title="interface in rice.pastry.routing">RouterStrategy</A> <B>routerStrategy</B></PRE>
<DL>
<DL>
</DL>
</DL>
<HR>
<A NAME="ROUTE_TABLE_PATCH_THROTTLE"><!-- --></A><H3>
ROUTE_TABLE_PATCH_THROTTLE</H3>
<PRE>
protected int <B>ROUTE_TABLE_PATCH_THROTTLE</B></PRE>
<DL>
<DL>
</DL>
</DL>
<HR>
<A NAME="lastTimeSentRouteTablePatch"><!-- --></A><H3>
lastTimeSentRouteTablePatch</H3>
<PRE>
protected java.util.Map&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>,java.lang.Long&gt; <B>lastTimeSentRouteTablePatch</B></PRE>
<DL>
<DD>We can end up causing a nasty feedback if we blast too many BRRs, so we're
going to throttle.
<P>
<DL>
</DL>
</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="StandardRouter(rice.pastry.PastryNode, rice.pastry.messaging.MessageDispatch)"><!-- --></A><H3>
StandardRouter</H3>
<PRE>
public <B>StandardRouter</B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;thePastryNode,
<A HREF="../../../rice/pastry/messaging/MessageDispatch.html" title="class in rice.pastry.messaging">MessageDispatch</A>&nbsp;dispatch)</PRE>
<DL>
<DD>Constructor.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>rt</CODE> - the routing table.<DD><CODE>ls</CODE> - the leaf set.</DL>
</DL>
<HR>
<A NAME="StandardRouter(rice.pastry.PastryNode, rice.pastry.messaging.MessageDispatch, rice.pastry.routing.RouterStrategy)"><!-- --></A><H3>
StandardRouter</H3>
<PRE>
public <B>StandardRouter</B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;thePastryNode,
<A HREF="../../../rice/pastry/messaging/MessageDispatch.html" title="class in rice.pastry.messaging">MessageDispatch</A>&nbsp;dispatch,
<A HREF="../../../rice/pastry/routing/RouterStrategy.html" title="interface in rice.pastry.routing">RouterStrategy</A>&nbsp;strategy)</PRE>
<DL>
</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="setRouterStrategy(rice.pastry.routing.RouterStrategy)"><!-- --></A><H3>
setRouterStrategy</H3>
<PRE>
public void <B>setRouterStrategy</B>(<A HREF="../../../rice/pastry/routing/RouterStrategy.html" title="interface in rice.pastry.routing">RouterStrategy</A>&nbsp;strategy)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="receiveMessage(rice.pastry.messaging.Message)"><!-- --></A><H3>
receiveMessage</H3>
<PRE>
public void <B>receiveMessage</B>(<A HREF="../../../rice/pastry/messaging/Message.html" title="class in rice.pastry.messaging">Message</A>&nbsp;msg)</PRE>
<DL>
<DD>Receive a message from a remote node.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#receiveMessage(rice.pastry.messaging.Message)">receiveMessage</A></CODE> in class <CODE><A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>msg</CODE> - the message.</DL>
</DD>
</DL>
<HR>
<A NAME="route(rice.pastry.routing.RouteMessage)"><!-- --></A><H3>
route</H3>
<PRE>
public void <B>route</B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;rm)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../rice/pastry/routing/Router.html#route(rice.pastry.routing.RouteMessage)">Router</A></CODE></B></DD>
<DD>Send the RouteMessage based on the Pastry Algorithm
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/pastry/routing/Router.html#route(rice.pastry.routing.RouteMessage)">route</A></CODE> in interface <CODE><A HREF="../../../rice/pastry/routing/Router.html" title="interface in rice.pastry.routing">Router</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="routeMessage(rice.pastry.routing.RouteMessage)"><!-- --></A><H3>
routeMessage</H3>
<PRE>
public boolean <B>routeMessage</B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;rm)</PRE>
<DL>
<DD>Routes the messages if the next hop has been set up.
Note, this once lived in the RouteMessaage
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>localId</CODE> - the node id of the local node.
<DT><B>Returns:</B><DD>true if the message got routed, false otherwise.</DL>
</DD>
</DL>
<HR>
<A NAME="sendTheMessage(rice.pastry.routing.RouteMessage, rice.pastry.NodeHandle)"><!-- --></A><H3>
sendTheMessage</H3>
<PRE>
protected void <B>sendTheMessage</B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;rm,
<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;handle)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="getBestRoutingCandidates(rice.pastry.Id)"><!-- --></A><H3>
getBestRoutingCandidates</H3>
<PRE>
public java.util.Iterator&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&gt; <B>getBestRoutingCandidates</B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;target)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../rice/pastry/routing/Router.html#getBestRoutingCandidates(rice.pastry.Id)">Router</A></CODE></B></DD>
<DD>Returns an ordered list of the best candidates for the next to the key. Always starts with
a node that matches an additional prefix, if it is available.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/pastry/routing/Router.html#getBestRoutingCandidates(rice.pastry.Id)">getBestRoutingCandidates</A></CODE> in interface <CODE><A HREF="../../../rice/pastry/routing/Router.html" title="interface in rice.pastry.routing">Router</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>msg</CODE> - the message to setNextHop() on<DD><CODE>target</CODE> - the destination Id<DD><CODE>lsPos</CODE> - the best leafSet candidate
<DT><B>Returns:</B><DD></DL>
</DD>
</DL>
<HR>
<A NAME="getBestRoutingCandidates(rice.pastry.Id, int, boolean)"><!-- --></A><H3>
getBestRoutingCandidates</H3>
<PRE>
protected java.util.Iterator&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&gt; <B>getBestRoutingCandidates</B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;target,
int&nbsp;lsPos,
boolean&nbsp;leafSetOnly)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="getLSCollection(int)"><!-- --></A><H3>
getLSCollection</H3>
<PRE>
protected java.util.ArrayList&lt;<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&gt; <B>getLSCollection</B>(int&nbsp;lsPos)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="deliverToApplication(rice.pastry.routing.RouteMessage)"><!-- --></A><H3>
deliverToApplication</H3>
<PRE>
public void <B>deliverToApplication</B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;msg)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="deliverWhenNotReady()"><!-- --></A><H3>
deliverWhenNotReady</H3>
<PRE>
public boolean <B>deliverWhenNotReady</B>()</PRE>
<DL>
<DD><B>Description copied from class: <CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#deliverWhenNotReady()">PastryAppl</A></CODE></B></DD>
<DD>Instructs the MessageDispatch how to behave when the PastryNode is not ready.
An application can override this method to return true if it wishes to receive
messages before Pastry is ready().
Most applications should leave this as false, so that their application does
not have inconsistent routing. However Pastry's protocols (such as the join protocol)
need to receive messages before pastry is ready(). This is because they are attempting
to make pastry ready().
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#deliverWhenNotReady()">deliverWhenNotReady</A></CODE> in class <CODE><A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>false unless the node is a service</DL>
</DD>
</DL>
<HR>
<A NAME="messageForAppl(rice.pastry.messaging.Message)"><!-- --></A><H3>
messageForAppl</H3>
<PRE>
public void <B>messageForAppl</B>(<A HREF="../../../rice/pastry/messaging/Message.html" title="class in rice.pastry.messaging">Message</A>&nbsp;msg)</PRE>
<DL>
<DD><B>Description copied from class: <CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#messageForAppl(rice.pastry.messaging.Message)">PastryAppl</A></CODE></B></DD>
<DD>Called by pastry when a message arrives for this application.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#messageForAppl(rice.pastry.messaging.Message)">messageForAppl</A></CODE> in class <CODE><A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>msg</CODE> - the message that is arriving.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StandardRouter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Rice Pastry API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../rice/pastry/standard/StandardLeafSetProtocol.html" title="class in rice.pastry.standard"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../rice/pastry/standard/StandardRouteSetProtocol.html" title="class in rice.pastry.standard"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?rice/pastry/standard/StandardRouter.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StandardRouter.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
<i>Copyright &#169; 2001-2005 - Rice Pastry.</i>
</BODY>
</HTML>