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

680 lines
35 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>
CommonAPIAppl (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="CommonAPIAppl (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/CommonAPIAppl.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;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../rice/pastry/client/NodeIsNotReadyException.html" title="class in rice.pastry.client"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?rice/pastry/client/CommonAPIAppl.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CommonAPIAppl.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="#fields_inherited_from_class_rice.pastry.client.PastryAppl">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;FIELD&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.client</FONT>
<BR>
Class CommonAPIAppl</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.client.CommonAPIAppl</B>
</PRE>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../rice/pastry/testing/RegrTestApp.html" title="class in rice.pastry.testing">RegrTestApp</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public abstract class <B>CommonAPIAppl</B><DT>extends <A HREF="../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></DL>
</PRE>
<P>
CommonAPIAppl is an abstract class that all new applications should extend.
It provides the common KBR API defined in
"Towards a Common API for Structured Peer-to-Peer Overlays." Frank Dabek, Ben
Zhao, Peter Druschel, John Kubiatowicz and Ion Stoica. In Proceedings of the
2nd International Workshop on Peer-to-peer Systems (IPTPS'03) , Berkeley, CA,
February 2003.
<P>
<P>
<DL>
<DT><B>Version:</B></DT>
<DD>$Id: CommonAPIAppl.java 3801 2007-07-18 15:04:40Z jeffh $</DD>
<DT><B>Author:</B></DT>
<DD>Peter Druschel</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>
</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/client/CommonAPIAppl.html#CommonAPIAppl(rice.pastry.PastryNode)">CommonAPIAppl</A></B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;pn)</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/client/CommonAPIAppl.html#CommonAPIAppl(rice.pastry.PastryNode, java.lang.String)">CommonAPIAppl</A></B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;pn,
java.lang.String&nbsp;instance)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor.</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>abstract &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/client/CommonAPIAppl.html#deliver(rice.pastry.Id, rice.pastry.messaging.Message)">deliver</A></B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
<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/client/CommonAPIAppl.html#forward(rice.pastry.routing.RouteMessage)">forward</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;Called by pastry when a message is enroute and is passing through this
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/client/CommonAPIAppl.html#leafSetChange(rice.pastry.NodeHandle, boolean)">leafSetChange</A></B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;nh,
boolean&nbsp;wasAdded)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called by pastry when the leaf set changes.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../rice/pastry/NodeSet.html" title="class in rice.pastry">NodeSet</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/client/CommonAPIAppl.html#localLookup(rice.pastry.Id, int, boolean)">localLookup</A></B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
int&nbsp;num,
boolean&nbsp;safe)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method produces a list of nodes that can be used as next hops on a
route towards key, such that the resulting route satisfies the overlay
protocol's bounds on the number of hops taken.</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/client/CommonAPIAppl.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;<A HREF="../../../rice/pastry/NodeSet.html" title="class in rice.pastry">NodeSet</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/client/CommonAPIAppl.html#neighborSet(int)">neighborSet</A></B>(int&nbsp;num)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method produces an unordered list of nodehandles that are neighbors of
the local node in the ID space.</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/client/CommonAPIAppl.html#notifyReady()">notifyReady</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoked when the Pastry node has joined the overlay network and is ready to
send and receive messages</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../rice/pastry/IdRange.html" title="class in rice.pastry">IdRange</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/client/CommonAPIAppl.html#range(rice.pastry.NodeHandle, int, rice.pastry.Id)">range</A></B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;n,
int&nbsp;r,
<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method provides information about ranges of keys for which the node n
is currently a r-root.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../rice/pastry/IdRange.html" title="class in rice.pastry">IdRange</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/client/CommonAPIAppl.html#range(rice.pastry.NodeHandle, int, rice.pastry.Id, boolean)">range</A></B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;n,
int&nbsp;r,
<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
boolean&nbsp;cumulative)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method provides information about ranges of keys for which the node n
is currently a r-root.</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/client/CommonAPIAppl.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;Called by pastry to deliver a message to this client.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../rice/pastry/NodeSet.html" title="class in rice.pastry">NodeSet</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/pastry/client/CommonAPIAppl.html#replicaSet(rice.pastry.Id, int)">replicaSet</A></B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
int&nbsp;max_rank)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns an ordered set of nodehandles on which replicas of the
object with key can be stored.</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/client/CommonAPIAppl.html#route(rice.pastry.Id, rice.pastry.messaging.Message, rice.pastry.NodeHandle)">route</A></B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
<A HREF="../../../rice/pastry/messaging/Message.html" title="class in rice.pastry.messaging">Message</A>&nbsp;msg,
<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;hint)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This operation forwards a message towards the root of key.</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/client/CommonAPIAppl.html#update(rice.pastry.NodeHandle, boolean)">update</A></B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;nh,
boolean&nbsp;joined)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called by pastry when the neighbor set changes.</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#deliverWhenNotReady()">deliverWhenNotReady</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#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>
<!-- ========= 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="CommonAPIAppl(rice.pastry.PastryNode)"><!-- --></A><H3>
CommonAPIAppl</H3>
<PRE>
public <B>CommonAPIAppl</B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;pn)</PRE>
<DL>
<DD>Constructor.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>pn</CODE> - the pastry node that the application attaches to.</DL>
</DL>
<HR>
<A NAME="CommonAPIAppl(rice.pastry.PastryNode, java.lang.String)"><!-- --></A><H3>
CommonAPIAppl</H3>
<PRE>
public <B>CommonAPIAppl</B>(<A HREF="../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;pn,
java.lang.String&nbsp;instance)</PRE>
<DL>
<DD>Constructor.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>pn</CODE> - the pastry node that the application attaches to.</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="route(rice.pastry.Id, rice.pastry.messaging.Message, rice.pastry.NodeHandle)"><!-- --></A><H3>
route</H3>
<PRE>
public void <B>route</B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
<A HREF="../../../rice/pastry/messaging/Message.html" title="class in rice.pastry.messaging">Message</A>&nbsp;msg,
<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;hint)</PRE>
<DL>
<DD>This operation forwards a message towards the root of key. The optional
hint argument specifies a node that should be used as a first hop in
routing the message. A good hint, e.g. one that refers to the key's current
root, can result in the message being delivered in one hop; a bad hint adds
at most one extra hop to the route. Either K or hint may be NULL, but not
both. The operation provides a best-effort service: the message may be
lost, duplicated, corrupted, or delayed indefinitely.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key<DD><CODE>msg</CODE> - the message to deliver.<DD><CODE>hint</CODE> - the hint</DL>
</DD>
</DL>
<HR>
<A NAME="localLookup(rice.pastry.Id, int, boolean)"><!-- --></A><H3>
localLookup</H3>
<PRE>
public <A HREF="../../../rice/pastry/NodeSet.html" title="class in rice.pastry">NodeSet</A> <B>localLookup</B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
int&nbsp;num,
boolean&nbsp;safe)</PRE>
<DL>
<DD>This method produces a list of nodes that can be used as next hops on a
route towards key, such that the resulting route satisfies the overlay
protocol's bounds on the number of hops taken. If safe is true, the
expected fraction of faulty nodes in the list is guaranteed to be no higher
than the fraction of faulty nodes in the overlay; if false, the set may be
chosen to optimize performance at the expense of a potentially higher
fraction of faulty nodes. This option allows applications to implement
routing in overlays with byzantine node failures. Implementations that
assume fail-stop behavior may ignore the safe argument. The fraction of
faulty nodes in the returned list may be higher if the safe parameter is
not true because, for instance, malicious nodes have caused the local node
to build a routing table that is biased towards malicious
nodes~\cite{Castro02osdi}.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>key</CODE> - the message's key<DD><CODE>num</CODE> - the maximal number of next hops nodes requested<DD><CODE>safe</CODE> -
<DT><B>Returns:</B><DD>the nodehandle set</DL>
</DD>
</DL>
<HR>
<A NAME="neighborSet(int)"><!-- --></A><H3>
neighborSet</H3>
<PRE>
public <A HREF="../../../rice/pastry/NodeSet.html" title="class in rice.pastry">NodeSet</A> <B>neighborSet</B>(int&nbsp;num)</PRE>
<DL>
<DD>This method produces an unordered list of nodehandles that are neighbors of
the local node in the ID space. Up to num node handles are returned.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>num</CODE> - the maximal number of nodehandles requested
<DT><B>Returns:</B><DD>the nodehandle set</DL>
</DD>
</DL>
<HR>
<A NAME="replicaSet(rice.pastry.Id, int)"><!-- --></A><H3>
replicaSet</H3>
<PRE>
public <A HREF="../../../rice/pastry/NodeSet.html" title="class in rice.pastry">NodeSet</A> <B>replicaSet</B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
int&nbsp;max_rank)</PRE>
<DL>
<DD>This method returns an ordered set of nodehandles on which replicas of the
object with key can be stored. The call returns nodes with a rank up to and
including max_rank. If max_rank exceeds the implementation's maximum
replica set size, then its maximum replica set is returned. The returned
nodes may be used for replicating data since they are precisely the nodes
which become roots for the key when the local node fails.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key<DD><CODE>max_rank</CODE> - the maximal number of nodehandles returned
<DT><B>Returns:</B><DD>the replica set</DL>
</DD>
</DL>
<HR>
<A NAME="range(rice.pastry.NodeHandle, int, rice.pastry.Id, boolean)"><!-- --></A><H3>
range</H3>
<PRE>
public <A HREF="../../../rice/pastry/IdRange.html" title="class in rice.pastry">IdRange</A> <B>range</B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;n,
int&nbsp;r,
<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
boolean&nbsp;cumulative)</PRE>
<DL>
<DD>This method provides information about ranges of keys for which the node n
is currently a r-root. The operations returns null if the range could not
be determined. It is an error to query the range of a node not present in
the neighbor set as returned by the update upcall or the neighborSet call.
Some implementations may have multiple, disjoint ranges of keys for which a
given node is responsible (Pastry has two). The parameter key allows the
caller to specify which range should be returned. If the node referenced by
n is the r-root for key, then the resulting range includes key. Otherwise,
the result is the nearest range clockwise from key for which n is
responsible.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>n</CODE> - nodeHandle of the node whose range is being queried<DD><CODE>r</CODE> - the rank<DD><CODE>key</CODE> - the key<DD><CODE>cumulative</CODE> - if true, returns ranges for which n is an i-root for 0 <i
<=r
<DT><B>Returns:</B><DD>the range of keys, or null if range could not be determined for the
given node and rank</DL>
</DD>
</DL>
<HR>
<A NAME="range(rice.pastry.NodeHandle, int, rice.pastry.Id)"><!-- --></A><H3>
range</H3>
<PRE>
public <A HREF="../../../rice/pastry/IdRange.html" title="class in rice.pastry">IdRange</A> <B>range</B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;n,
int&nbsp;r,
<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key)</PRE>
<DL>
<DD>This method provides information about ranges of keys for which the node n
is currently a r-root. The operations returns null if the range could not
be determined. It is an error to query the range of a node not present in
the neighbor set as returned by the update upcall or the neighborSet call.
Some implementations may have multiple, disjoint ranges of keys for which a
given node is responsible (Pastry has two). The parameter key allows the
caller to specify which range should be returned. If the node referenced by
n is the r-root for key, then the resulting range includes key. Otherwise,
the result is the nearest range clockwise from key for which n is
responsible.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>n</CODE> - nodeHandle of the node whose range is being queried<DD><CODE>r</CODE> - the rank<DD><CODE>key</CODE> - the key
<DT><B>Returns:</B><DD>the range of keys, or null if range could not be determined for the
given node and rank</DL>
</DD>
</DL>
<HR>
<A NAME="deliver(rice.pastry.Id, rice.pastry.messaging.Message)"><!-- --></A><H3>
deliver</H3>
<PRE>
public abstract void <B>deliver</B>(<A HREF="../../../rice/pastry/Id.html" title="class in rice.pastry">Id</A>&nbsp;key,
<A HREF="../../../rice/pastry/messaging/Message.html" title="class in rice.pastry.messaging">Message</A>&nbsp;msg)</PRE>
<DL>
<DD>Called by pastry when a message arrives for this application.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>msg</CODE> - the message that is arriving.</DL>
</DD>
</DL>
<HR>
<A NAME="forward(rice.pastry.routing.RouteMessage)"><!-- --></A><H3>
forward</H3>
<PRE>
public void <B>forward</B>(<A HREF="../../../rice/pastry/routing/RouteMessage.html" title="class in rice.pastry.routing">RouteMessage</A>&nbsp;msg)</PRE>
<DL>
<DD>Called by pastry when a message is enroute and is passing through this
node. If this method is not overridden, the default behaviour is to let the
message pass through.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>msg</CODE> - the message that is passing through.<DD><CODE>key</CODE> - the key<DD><CODE>nextHop</CODE> - the default next hop for the message.</DL>
</DD>
</DL>
<HR>
<A NAME="update(rice.pastry.NodeHandle, boolean)"><!-- --></A><H3>
update</H3>
<PRE>
public void <B>update</B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;nh,
boolean&nbsp;joined)</PRE>
<DL>
<DD>Called by pastry when the neighbor set changes.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>nh</CODE> - the handle of the node that was added or removed.<DD><CODE>wasAdded</CODE> - true if the node was added, false if the node was removed.</DL>
</DD>
</DL>
<HR>
<A NAME="notifyReady()"><!-- --></A><H3>
notifyReady</H3>
<PRE>
public void <B>notifyReady</B>()</PRE>
<DL>
<DD>Invoked when the Pastry node has joined the overlay network and is ready to
send and receive messages
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#notifyReady()">notifyReady</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>
</DL>
</DD>
</DL>
<HR>
<A NAME="messageForAppl(rice.pastry.messaging.Message)"><!-- --></A><H3>
messageForAppl</H3>
<PRE>
public final 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>
<HR>
<A NAME="leafSetChange(rice.pastry.NodeHandle, boolean)"><!-- --></A><H3>
leafSetChange</H3>
<PRE>
public final void <B>leafSetChange</B>(<A HREF="../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;nh,
boolean&nbsp;wasAdded)</PRE>
<DL>
<DD>Called by pastry when the leaf set changes.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/pastry/client/PastryAppl.html#leafSetChange(rice.pastry.NodeHandle, boolean)">leafSetChange</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>nh</CODE> - the handle of the node that was added or removed.<DD><CODE>wasAdded</CODE> - true if the node was added, false if the node was removed.</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>Called by pastry to deliver a message to this client. Not to be overridden.
<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 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/CommonAPIAppl.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;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../rice/pastry/client/NodeIsNotReadyException.html" title="class in rice.pastry.client"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?rice/pastry/client/CommonAPIAppl.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CommonAPIAppl.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="#fields_inherited_from_class_rice.pastry.client.PastryAppl">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;FIELD&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>