blob: bdbccd8c3c05c4847adb2187ad6dd25824f1c15d [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>Reactor (Qpid Proton-J API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Reactor (Qpid Proton-J API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":38,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/qpid/proton/reactor/Handshaker.html" title="class in org.apache.qpid.proton.reactor"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.Factory.html" title="class in org.apache.qpid.proton.reactor"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/qpid/proton/reactor/Reactor.html" target="_top">Frames</a></li>
<li><a href="Reactor.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.qpid.proton.reactor</div>
<h2 title="Interface Reactor" class="title">Interface Reactor</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../org/apache/qpid/proton/reactor/impl/ReactorImpl.html" title="class in org.apache.qpid.proton.reactor.impl">ReactorImpl</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">Reactor</span></pre>
<div class="block">The proton reactor provides a general purpose event processing
library for writing reactive programs. A reactive program is defined
by a set of event handlers. An event handler is just any class or
object that extends the Handler interface. For convenience, a class
can extend <a href="../../../../../org/apache/qpid/proton/engine/BaseHandler.html" title="class in org.apache.qpid.proton.engine"><code>BaseHandler</code></a> and only handle the events that it cares to
implement methods for.
<p>
This class is not thread safe (with the exception of the <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#wakeup--"><code>wakeup()</code></a>
method) and should only be used by a single thread at any given time.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Interface and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.Factory.html" title="class in org.apache.qpid.proton.reactor">Reactor.Factory</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/reactor/Acceptor.html" title="interface in org.apache.qpid.proton.reactor">Acceptor</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#acceptor-java.lang.String-int-">acceptor</a></span>(java.lang.String&nbsp;host,
int&nbsp;port)</code>
<div class="block">Creates a new acceptor.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/reactor/Acceptor.html" title="interface in org.apache.qpid.proton.reactor">Acceptor</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#acceptor-java.lang.String-int-org.apache.qpid.proton.engine.Handler-">acceptor</a></span>(java.lang.String&nbsp;host,
int&nbsp;port,
<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</code>
<div class="block">Creates a new acceptor.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/engine/Record.html" title="interface in org.apache.qpid.proton.engine">Record</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#attachments--">attachments</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>java.util.Set&lt;<a href="../../../../../org/apache/qpid/proton/reactor/ReactorChild.html" title="interface in org.apache.qpid.proton.reactor">ReactorChild</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#children--">children</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/engine/Collector.html" title="interface in org.apache.qpid.proton.engine">Collector</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#collector--">collector</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#connection-org.apache.qpid.proton.engine.Handler-">connection</a></span>(<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
<div class="block"><span class="deprecationComment">Use <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#connectionToHost-java.lang.String-int-org.apache.qpid.proton.engine.Handler-"><code>connectionToHost(String, int, Handler)</code></a> instead.</span></div>
</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#connectionToHost-java.lang.String-int-org.apache.qpid.proton.engine.Handler-">connectionToHost</a></span>(java.lang.String&nbsp;host,
int&nbsp;port,
<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</code>
<div class="block">Creates a new out-bound connection to the given host and port.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#free--">free</a></span>()</code>
<div class="block">Frees any resources (such as sockets and selectors) held by the reactor
or its children.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getConnectionAddress-org.apache.qpid.proton.engine.Connection-">getConnectionAddress</a></span>(<a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a>&nbsp;c)</code>
<div class="block">Get the address used by the connection</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getGlobalHandler--">getGlobalHandler</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getHandler--">getHandler</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/reactor/ReactorOptions.html" title="class in org.apache.qpid.proton.reactor">ReactorOptions</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getOptions--">getOptions</a></span>()</code>
<div class="block">Gets the reactor options.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getTimeout--">getTimeout</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#mark--">mark</a></span>()</code>
<div class="block">Updates the last time that the reactor's state has changed, potentially
resulting in events being generated.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#now--">now</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--">process</a></span>()</code>
<div class="block">Process any events pending for this reactor.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#quiesced--">quiesced</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#run--">run</a></span>()</code>
<div class="block">Simplifies the use of the reactor by wrapping the use of
<code>start</code>, <code>run</code>, and <code>stop</code> method
calls.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/reactor/Task.html" title="interface in org.apache.qpid.proton.reactor">Task</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#schedule-int-org.apache.qpid.proton.engine.Handler-">schedule</a></span>(int&nbsp;delay,
<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</code>
<div class="block">Schedules execution of a task to take place at some point in the future.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/qpid/proton/reactor/Selectable.html" title="interface in org.apache.qpid.proton.reactor">Selectable</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#selectable--">selectable</a></span>()</code>
<div class="block">Creates a new <code>Selectable</code> as a child of this reactor.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#setConnectionHost-org.apache.qpid.proton.engine.Connection-java.lang.String-int-">setConnectionHost</a></span>(<a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a>&nbsp;c,
java.lang.String&nbsp;host,
int&nbsp;port)</code>
<div class="block">Set the host address used by the connection</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#setGlobalHandler-org.apache.qpid.proton.engine.Handler-">setGlobalHandler</a></span>(<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</code>
<div class="block">Sets a new global handler.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#setHandler-org.apache.qpid.proton.engine.Handler-">setHandler</a></span>(<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</code>
<div class="block">Sets a new handler, that will receive any events not handled by a child
of the reactor.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#setTimeout-long-">setTimeout</a></span>(long&nbsp;timeout)</code>
<div class="block">The value the reactor will use for <a href="../../../../../org/apache/qpid/proton/reactor/Selector.html#select-long-"><code>Selector.select(long)</code></a> that is called as part of <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a>.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#start--">start</a></span>()</code>
<div class="block">Starts the reactor.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#stop--">stop</a></span>()</code>
<div class="block">Stops the reactor.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#update-org.apache.qpid.proton.reactor.Selectable-">update</a></span>(<a href="../../../../../org/apache/qpid/proton/reactor/Selectable.html" title="interface in org.apache.qpid.proton.reactor">Selectable</a>&nbsp;selectable)</code>
<div class="block">Updates the specified <code>Selectable</code> either emitting a
<a href="../../../../../org/apache/qpid/proton/engine/Event.Type.html#SELECTABLE_UPDATED"><code>Event.Type.SELECTABLE_UPDATED</code></a> event if the selectable is not terminal,
or <a href="../../../../../org/apache/qpid/proton/engine/Event.Type.html#SELECTABLE_FINAL"><code>Event.Type.SELECTABLE_FINAL</code></a> if the selectable is terminal and has
not already emitted a <a href="../../../../../org/apache/qpid/proton/engine/Event.Type.html#SELECTABLE_FINAL"><code>Event.Type.SELECTABLE_FINAL</code></a> event.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#wakeup--">wakeup</a></span>()</code>
<div class="block">Wakes up the thread (if any) blocked in the <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a> method.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#yield--">yield</a></span>()</code>
<div class="block">Yields, causing the next call to <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a> to return
successfully - without processing any events.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="mark--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mark</h4>
<pre>long&nbsp;mark()</pre>
<div class="block">Updates the last time that the reactor's state has changed, potentially
resulting in events being generated.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the current time in milliseconds
<code>System.currentTimeMillis()</code>.</dd>
</dl>
</li>
</ul>
<a name="now--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>now</h4>
<pre>long&nbsp;now()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the last time that <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#mark--"><code>mark()</code></a> was called.</dd>
</dl>
</li>
</ul>
<a name="attachments--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>attachments</h4>
<pre><a href="../../../../../org/apache/qpid/proton/engine/Record.html" title="interface in org.apache.qpid.proton.engine">Record</a>&nbsp;attachments()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an instance of <a href="../../../../../org/apache/qpid/proton/engine/Record.html" title="interface in org.apache.qpid.proton.engine"><code>Record</code></a> that can be used to associate
other objects (attachments) with this instance of the
Reactor class.</dd>
</dl>
</li>
</ul>
<a name="setTimeout-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setTimeout</h4>
<pre>void&nbsp;setTimeout(long&nbsp;timeout)</pre>
<div class="block">The value the reactor will use for <a href="../../../../../org/apache/qpid/proton/reactor/Selector.html#select-long-"><code>Selector.select(long)</code></a> that is called as part of <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>timeout</code> - a timeout value in milliseconds, to associate with this instance of
the reactor. This can be retrieved using the
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getTimeout--"><code>getTimeout()</code></a> method</dd>
</dl>
</li>
</ul>
<a name="getTimeout--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTimeout</h4>
<pre>long&nbsp;getTimeout()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the value previously set using <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#setTimeout-long-"><code>setTimeout(long)</code></a> or
0 if no previous value has been set.</dd>
</dl>
</li>
</ul>
<a name="getGlobalHandler--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getGlobalHandler</h4>
<pre><a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;getGlobalHandler()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the global handler for this reactor. Every event the reactor
sees is dispatched to the global handler. To receive every
event generated by the reactor, associate a child handler
with the global handler. For example:
<pre>
getGlobalHandler().add(yourHandler);
</pre></dd>
</dl>
</li>
</ul>
<a name="setGlobalHandler-org.apache.qpid.proton.engine.Handler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setGlobalHandler</h4>
<pre>void&nbsp;setGlobalHandler(<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</pre>
<div class="block">Sets a new global handler. You probably don't want to do this and
would be better adding a handler to the value returned by the
{<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getGlobalHandler--"><code>getGlobalHandler()</code></a> method.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>handler</code> - the new global handler.</dd>
</dl>
</li>
</ul>
<a name="getHandler--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getHandler</h4>
<pre><a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;getHandler()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the handler for this reactor. Every event the reactor sees,
which is not handled by a child of the reactor (such as a
timer, connection, acceptor, or selector) is passed to this
handler. To receive these events, it is recommend that you
associate a child handler with the handler returned by this
method. For example:
<pre>
getHandler().add(yourHandler);
</pre></dd>
</dl>
</li>
</ul>
<a name="setHandler-org.apache.qpid.proton.engine.Handler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setHandler</h4>
<pre>void&nbsp;setHandler(<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</pre>
<div class="block">Sets a new handler, that will receive any events not handled by a child
of the reactor. Note that setting a handler via this method replaces
the previous handler, and will result in no further events being
dispatched to the child handlers associated with the previous handler.
For this reason it is recommended that you do not use this method and
instead add child handlers to the value returned by the
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#getHandler--"><code>getHandler()</code></a> method.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>handler</code> - the new handler for this reactor.</dd>
</dl>
</li>
</ul>
<a name="children--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>children</h4>
<pre>java.util.Set&lt;<a href="../../../../../org/apache/qpid/proton/reactor/ReactorChild.html" title="interface in org.apache.qpid.proton.reactor">ReactorChild</a>&gt;&nbsp;children()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a set containing the child objects associated with this reactor.
This will contain any active instances of: <a href="../../../../../org/apache/qpid/proton/reactor/Task.html" title="interface in org.apache.qpid.proton.reactor"><code>Task</code></a> -
created using the <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#schedule-int-org.apache.qpid.proton.engine.Handler-"><code>schedule(int, Handler)</code></a> method,
<a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine"><code>Connection</code></a> - created using the
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#connectionToHost-java.lang.String-int-org.apache.qpid.proton.engine.Handler-"><code>connectionToHost(String, int, Handler)</code></a> method,
<a href="../../../../../org/apache/qpid/proton/reactor/Acceptor.html" title="interface in org.apache.qpid.proton.reactor"><code>Acceptor</code></a> - created using the
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#acceptor-java.lang.String-int-"><code>acceptor(String, int)</code></a> method,
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#acceptor-java.lang.String-int-org.apache.qpid.proton.engine.Handler-"><code>acceptor(String, int, Handler)</code></a> method, or
<a href="../../../../../org/apache/qpid/proton/reactor/Selectable.html" title="interface in org.apache.qpid.proton.reactor"><code>Selectable</code></a> - created using the
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#selectable--"><code>selectable()</code></a> method.</dd>
</dl>
</li>
</ul>
<a name="collector--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>collector</h4>
<pre><a href="../../../../../org/apache/qpid/proton/engine/Collector.html" title="interface in org.apache.qpid.proton.engine">Collector</a>&nbsp;collector()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the Collector used to gather events generated by this reactor.</dd>
</dl>
</li>
</ul>
<a name="selectable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>selectable</h4>
<pre><a href="../../../../../org/apache/qpid/proton/reactor/Selectable.html" title="interface in org.apache.qpid.proton.reactor">Selectable</a>&nbsp;selectable()</pre>
<div class="block">Creates a new <code>Selectable</code> as a child of this reactor.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created <code>Selectable</code>.</dd>
</dl>
</li>
</ul>
<a name="update-org.apache.qpid.proton.reactor.Selectable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>update</h4>
<pre>void&nbsp;update(<a href="../../../../../org/apache/qpid/proton/reactor/Selectable.html" title="interface in org.apache.qpid.proton.reactor">Selectable</a>&nbsp;selectable)</pre>
<div class="block">Updates the specified <code>Selectable</code> either emitting a
<a href="../../../../../org/apache/qpid/proton/engine/Event.Type.html#SELECTABLE_UPDATED"><code>Event.Type.SELECTABLE_UPDATED</code></a> event if the selectable is not terminal,
or <a href="../../../../../org/apache/qpid/proton/engine/Event.Type.html#SELECTABLE_FINAL"><code>Event.Type.SELECTABLE_FINAL</code></a> if the selectable is terminal and has
not already emitted a <a href="../../../../../org/apache/qpid/proton/engine/Event.Type.html#SELECTABLE_FINAL"><code>Event.Type.SELECTABLE_FINAL</code></a> event.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>selectable</code> - </dd>
</dl>
</li>
</ul>
<a name="yield--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>yield</h4>
<pre>void&nbsp;yield()</pre>
<div class="block">Yields, causing the next call to <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a> to return
successfully - without processing any events. If multiple calls
can be made to <code>yield</code> and only the next invocation of
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a> will be affected.</div>
</li>
</ul>
<a name="quiesced--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>quiesced</h4>
<pre>boolean&nbsp;quiesced()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if the reactor is in quiesced state (e.g. has
no events to process). <code>false</code> is returned otherwise.</dd>
</dl>
</li>
</ul>
<a name="process--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>process</h4>
<pre>boolean&nbsp;process()
throws <a href="../../../../../org/apache/qpid/proton/engine/HandlerException.html" title="class in org.apache.qpid.proton.engine">HandlerException</a></pre>
<div class="block">Process any events pending for this reactor. Events are dispatched to
the handlers registered with the reactor, or child objects associated
with the reactor. This method blocks until the reactor has no more work
to do (and no more work pending, in terms of scheduled tasks or open
selectors to process).</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if the reactor may have more events in the
future. For example: if there are scheduled tasks, or open
selectors. <code>false</code> is returned if the reactor has
(and will have) no more events to process.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/qpid/proton/engine/HandlerException.html" title="class in org.apache.qpid.proton.engine">HandlerException</a></code> - if an unchecked exception is thrown by one of
the handlers - it will be re-thrown attached to an instance of
<code>HandlerException</code>.</dd>
</dl>
</li>
</ul>
<a name="wakeup--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>wakeup</h4>
<pre>void&nbsp;wakeup()</pre>
<div class="block">Wakes up the thread (if any) blocked in the <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a> method.
This is the only method of this class that is thread safe, in that it
can be used at the same time as another thread is using the reactor.</div>
</li>
</ul>
<a name="start--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
<pre>void&nbsp;start()</pre>
<div class="block">Starts the reactor. This method should be invoked before the first call
to <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a>.</div>
</li>
</ul>
<a name="stop--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
<pre>void&nbsp;stop()
throws <a href="../../../../../org/apache/qpid/proton/engine/HandlerException.html" title="class in org.apache.qpid.proton.engine">HandlerException</a></pre>
<div class="block">Stops the reactor. This method should be invoked after the last call to
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#process--"><code>process()</code></a>.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/qpid/proton/engine/HandlerException.html" title="class in org.apache.qpid.proton.engine">HandlerException</a></code></dd>
</dl>
</li>
</ul>
<a name="run--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
<pre>void&nbsp;run()
throws <a href="../../../../../org/apache/qpid/proton/engine/HandlerException.html" title="class in org.apache.qpid.proton.engine">HandlerException</a></pre>
<div class="block">Simplifies the use of the reactor by wrapping the use of
<code>start</code>, <code>run</code>, and <code>stop</code> method
calls.
<p>
Logically the implementation of this method is:
<pre>
start();
while(process()) {}
stop();
</pre></div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/qpid/proton/engine/HandlerException.html" title="class in org.apache.qpid.proton.engine">HandlerException</a></code> - if an unchecked exception is thrown by one of
the handlers - it will be re-thrown attached to an instance of
<code>HandlerException</code>.</dd>
</dl>
</li>
</ul>
<a name="schedule-int-org.apache.qpid.proton.engine.Handler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>schedule</h4>
<pre><a href="../../../../../org/apache/qpid/proton/reactor/Task.html" title="interface in org.apache.qpid.proton.reactor">Task</a>&nbsp;schedule(int&nbsp;delay,
<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</pre>
<div class="block">Schedules execution of a task to take place at some point in the future.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>delay</code> - the number of milliseconds, in the future, to schedule the
task for.</dd>
<dd><code>handler</code> - a handler to associate with the task. This is notified
when the deadline for the task is reached.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an object representing the task that has been scheduled.</dd>
</dl>
</li>
</ul>
<a name="connection-org.apache.qpid.proton.engine.Handler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>connection</h4>
<pre>@Deprecated
<a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a>&nbsp;connection(<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#connectionToHost-java.lang.String-int-org.apache.qpid.proton.engine.Handler-"><code>connectionToHost(String, int, Handler)</code></a> instead.</span></div>
<div class="block">Creates a new out-bound connection.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>handler</code> - a handler that is notified when events occur for the
connection. Typically the host and port to connect to
would be supplied to the connection object inside the
logic which handles the <a href="../../../../../org/apache/qpid/proton/engine/Event.Type.html#CONNECTION_INIT"><code>Event.Type.CONNECTION_INIT</code></a>
event via
<a href="../../../../../org/apache/qpid/proton/reactor/Reactor.html#setConnectionHost-org.apache.qpid.proton.engine.Connection-java.lang.String-int-"><code>setConnectionHost(Connection, String, int)</code></a></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created connection object.</dd>
</dl>
</li>
</ul>
<a name="connectionToHost-java.lang.String-int-org.apache.qpid.proton.engine.Handler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>connectionToHost</h4>
<pre><a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a>&nbsp;connectionToHost(java.lang.String&nbsp;host,
int&nbsp;port,
<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)</pre>
<div class="block">Creates a new out-bound connection to the given host and port.
<p>
This method will cause Reactor to set up a network connection to the
host and create a Connection for it.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>host</code> - the host to connect to (e.g. "localhost")</dd>
<dd><code>port</code> - the port used for the connection.</dd>
<dd><code>handler</code> - a handler that is notified when events occur for the
connection.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created connection object.</dd>
</dl>
</li>
</ul>
<a name="setConnectionHost-org.apache.qpid.proton.engine.Connection-java.lang.String-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setConnectionHost</h4>
<pre>void&nbsp;setConnectionHost(<a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a>&nbsp;c,
java.lang.String&nbsp;host,
int&nbsp;port)</pre>
<div class="block">Set the host address used by the connection
<p>
This method will set/change the host address used by the Reactor to
create an outbound network connection for the given Connection</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>c</code> - the Connection to assign the address to</dd>
<dd><code>host</code> - the address of the host to connect to (e.g. "localhost")</dd>
<dd><code>port</code> - the port to use for the connection.</dd>
</dl>
</li>
</ul>
<a name="getOptions--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOptions</h4>
<pre><a href="../../../../../org/apache/qpid/proton/reactor/ReactorOptions.html" title="class in org.apache.qpid.proton.reactor">ReactorOptions</a>&nbsp;getOptions()</pre>
<div class="block">Gets the reactor options.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the reactor options</dd>
</dl>
</li>
</ul>
<a name="getConnectionAddress-org.apache.qpid.proton.engine.Connection-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getConnectionAddress</h4>
<pre>java.lang.String&nbsp;getConnectionAddress(<a href="../../../../../org/apache/qpid/proton/engine/Connection.html" title="interface in org.apache.qpid.proton.engine">Connection</a>&nbsp;c)</pre>
<div class="block">Get the address used by the connection
<p>
This may be used to retrieve the remote peer address.
Note that the returned address may be in numeric IP format.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>c</code> - the Connection</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a string containing the address in the following format:
<pre>
host[:port]
</pre></dd>
</dl>
</li>
</ul>
<a name="acceptor-java.lang.String-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>acceptor</h4>
<pre><a href="../../../../../org/apache/qpid/proton/reactor/Acceptor.html" title="interface in org.apache.qpid.proton.reactor">Acceptor</a>&nbsp;acceptor(java.lang.String&nbsp;host,
int&nbsp;port)
throws java.io.IOException</pre>
<div class="block">Creates a new acceptor. This is equivalent to calling:
<pre>
acceptor(host, port, null);
</pre></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>host</code> - </dd>
<dd><code>port</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created acceptor object.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</li>
</ul>
<a name="acceptor-java.lang.String-int-org.apache.qpid.proton.engine.Handler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>acceptor</h4>
<pre><a href="../../../../../org/apache/qpid/proton/reactor/Acceptor.html" title="interface in org.apache.qpid.proton.reactor">Acceptor</a>&nbsp;acceptor(java.lang.String&nbsp;host,
int&nbsp;port,
<a href="../../../../../org/apache/qpid/proton/engine/Handler.html" title="interface in org.apache.qpid.proton.engine">Handler</a>&nbsp;handler)
throws java.io.IOException</pre>
<div class="block">Creates a new acceptor. This acceptor listens for in-bound connections.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>host</code> - the host name or address of the NIC to listen on.</dd>
<dd><code>port</code> - the port number to listen on.</dd>
<dd><code>handler</code> - if non-<code>null</code> this handler is registered with
each new connection accepted by the acceptor.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created acceptor object.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</li>
</ul>
<a name="free--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>free</h4>
<pre>void&nbsp;free()</pre>
<div class="block">Frees any resources (such as sockets and selectors) held by the reactor
or its children.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/qpid/proton/reactor/Handshaker.html" title="class in org.apache.qpid.proton.reactor"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/qpid/proton/reactor/Reactor.Factory.html" title="class in org.apache.qpid.proton.reactor"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/qpid/proton/reactor/Reactor.html" target="_top">Frames</a></li>
<li><a href="Reactor.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>