blob: 4f98619dd2790fec01beb252e7343493c8b55bf8 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.13) on Tue Feb 08 12:41:33 CST 2022 -->
<title>DemandingFlusher (Eclipse Jetty API Doc - v11.0.8)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2022-02-08">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="DemandingFlusher (Eclipse Jetty API Doc - v11.0.8)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":6,"i4":10,"i5":10,"i6":10,"i7":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/DemandingFlusher.html">Use</a></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" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</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>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&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><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.jetty.websocket.core.internal</a></div>
<h2 title="Class DemandingFlusher" class="title">Class DemandingFlusher</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../../../util/IteratingCallback.html" title="class in org.eclipse.jetty.util">org.eclipse.jetty.util.IteratingCallback</a></li>
<li>
<ul class="inheritance">
<li>org.eclipse.jetty.websocket.core.internal.DemandingFlusher</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></code>, <code><a href="../../../util/thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></code>, <code><a href="DemandChain.html" title="interface in org.eclipse.jetty.websocket.core.internal">DemandChain</a></code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="FragmentExtension.FragmentingDemandingFlusher.html" title="class in org.eclipse.jetty.websocket.core.internal">FragmentExtension.FragmentingDemandingFlusher</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">DemandingFlusher</span>
extends <a href="../../../util/IteratingCallback.html" title="class in org.eclipse.jetty.util">IteratingCallback</a>
implements <a href="DemandChain.html" title="interface in org.eclipse.jetty.websocket.core.internal">DemandChain</a></pre>
<div class="block"><p>This flusher can be used to mutated and fragment <a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core"><code>Frame</code></a>s and forwarded them on towards the application using the
<a href="../IncomingFrames.html" title="interface in org.eclipse.jetty.websocket.core"><code>IncomingFrames</code></a> provided in the constructor. This can split a single incoming frame into n <a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core"><code>Frame</code></a>s which are
passed on to the <a href="../IncomingFrames.html" title="interface in org.eclipse.jetty.websocket.core"><code>IncomingFrames</code></a> one at a time.</p>
<p>The asynchronous operation performed by this <a href="../../../util/IteratingCallback.html" title="class in org.eclipse.jetty.util"><code>IteratingCallback</code></a> is demanding from upper layer after which
<a href="#onFrame(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)"><code>onFrame(Frame, Callback)</code></a> will called with the new content.</p>
<p>This flusher relies on the interception of demand, and because of this it can only be used in an <a href="../Extension.html" title="interface in org.eclipse.jetty.websocket.core"><code>Extension</code></a> which
implements the <a href="DemandChain.html" title="interface in org.eclipse.jetty.websocket.core.internal"><code>DemandChain</code></a> interface. The methods of <a href="DemandChain.html" title="interface in org.eclipse.jetty.websocket.core.internal"><code>DemandChain</code></a> from the <a href="../Extension.html" title="interface in org.eclipse.jetty.websocket.core"><code>Extension</code></a>
must be forwarded to this flusher.</p></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.eclipse.jetty.util.IteratingCallback">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;org.eclipse.jetty.util.<a href="../../../util/IteratingCallback.html" title="class in org.eclipse.jetty.util">IteratingCallback</a></h3>
<code><a href="../../../util/IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.eclipse.jetty.util.Callback">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.eclipse.jetty.util.<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h3>
<code><a href="../../../util/Callback.Completable.html" title="class in org.eclipse.jetty.util">Callback.Completable</a>, <a href="../../../util/Callback.Completing.html" title="class in org.eclipse.jetty.util">Callback.Completing</a>, <a href="../../../util/Callback.Nested.html" title="class in org.eclipse.jetty.util">Callback.Nested</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.eclipse.jetty.util.thread.Invocable">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="../../../util/thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="../../../util/thread/Invocable.InvocationType.html" title="enum in org.eclipse.jetty.util.thread">Invocable.InvocationType</a>, <a href="../../../util/thread/Invocable.ReadyTask.html" title="class in org.eclipse.jetty.util.thread">Invocable.ReadyTask</a>, <a href="../../../util/thread/Invocable.Task.html" title="interface in org.eclipse.jetty.util.thread">Invocable.Task</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.eclipse.jetty.util.Callback">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;org.eclipse.jetty.util.<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h3>
<code><a href="../../../util/Callback.html#NOOP">NOOP</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.eclipse.jetty.util.thread.Invocable">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="../../../util/thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="../../../util/thread/Invocable.html#__nonBlocking">__nonBlocking</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.eclipse.jetty.websocket.core.IncomingFrames)">DemandingFlusher</a></span>&#8203;(<a href="../IncomingFrames.html" title="interface in org.eclipse.jetty.websocket.core">IncomingFrames</a>&nbsp;emitFrame)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#demand(long)">demand</a></span>&#8203;(long&nbsp;n)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#emitFrame(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)">emitFrame</a></span>&#8203;(<a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame,
<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a>&nbsp;callback)</code></th>
<td class="colLast">
<div class="block">This is used within an implementation of <a href="#handle(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback,boolean)"><code>handle(Frame, Callback, boolean)</code></a>
to forward a frame onto the next layer of processing.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#failFlusher(java.lang.Throwable)">failFlusher</a></span>&#8203;(java.lang.Throwable&nbsp;t)</code></th>
<td class="colLast">
<div class="block">Used to fail this flusher possibly from an external event such as a callback.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected abstract boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handle(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback,boolean)">handle</a></span>&#8203;(<a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame,
<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a>&nbsp;callback,
boolean&nbsp;first)</code></th>
<td class="colLast">
<div class="block">Called when there is demand for a single frame to be produced.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onCompleteFailure(java.lang.Throwable)">onCompleteFailure</a></span>&#8203;(java.lang.Throwable&nbsp;cause)</code></th>
<td class="colLast">
<div class="block">Invoked when the overall task has completed with a failure.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onFrame(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)">onFrame</a></span>&#8203;(<a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame,
<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a>&nbsp;callback)</code></th>
<td class="colLast">
<div class="block">Used to supply the flusher with a new frame.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>protected <a href="../../../util/IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#process()">process</a></span>()</code></th>
<td class="colLast">
<div class="block">Method called by <a href="../../../util/IteratingCallback.html#iterate()"><code>IteratingCallback.iterate()</code></a> to process the sub task.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setNextDemand(java.util.function.LongConsumer)">setNextDemand</a></span>&#8203;(java.util.function.LongConsumer&nbsp;nextDemand)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.eclipse.jetty.util.IteratingCallback">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.eclipse.jetty.util.<a href="../../../util/IteratingCallback.html" title="class in org.eclipse.jetty.util">IteratingCallback</a></h3>
<code><a href="../../../util/IteratingCallback.html#close()">close</a>, <a href="../../../util/IteratingCallback.html#failed(java.lang.Throwable)">failed</a>, <a href="../../../util/IteratingCallback.html#isClosed()">isClosed</a>, <a href="../../../util/IteratingCallback.html#isFailed()">isFailed</a>, <a href="../../../util/IteratingCallback.html#isSucceeded()">isSucceeded</a>, <a href="../../../util/IteratingCallback.html#iterate()">iterate</a>, <a href="../../../util/IteratingCallback.html#onCompleteSuccess()">onCompleteSuccess</a>, <a href="../../../util/IteratingCallback.html#reset()">reset</a>, <a href="../../../util/IteratingCallback.html#succeeded()">succeeded</a>, <a href="../../../util/IteratingCallback.html#toString()">toString</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.eclipse.jetty.util.Callback">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.eclipse.jetty.util.<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h3>
<code><a href="../../../util/Callback.html#completeWith(java.util.concurrent.CompletableFuture)">completeWith</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.eclipse.jetty.util.thread.Invocable">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="../../../util/thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="../../../util/thread/Invocable.html#getInvocationType()">getInvocationType</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;(org.eclipse.jetty.websocket.core.IncomingFrames)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DemandingFlusher</h4>
<pre>public&nbsp;DemandingFlusher&#8203;(<a href="../IncomingFrames.html" title="interface in org.eclipse.jetty.websocket.core">IncomingFrames</a>&nbsp;emitFrame)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>emitFrame</code> - where frames generated by <a href="#handle(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback,boolean)"><code>handle(Frame, Callback, boolean)</code></a> are forwarded.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="handle(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handle</h4>
<pre class="methodSignature">protected abstract&nbsp;boolean&nbsp;handle&#8203;(<a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame,
<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a>&nbsp;callback,
boolean&nbsp;first)</pre>
<div class="block"><p>Called when there is demand for a single frame to be produced. During this method a single call can be made
to <a href="#emitFrame(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)"><code>emitFrame(Frame, Callback)</code></a> which will forward this frame towards the application. Returning true
from this method signals that you are done processing the current Frame, and the next invocation of this
method will have the next frame.</p>
<p>Note that the callback supplied here is specially wrapped so that you can call
it multiple times and it will not be completed more than once. This simplifies the
handling of failure cases.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>frame</code> - the original frame.</dd>
<dd><code>callback</code> - to succeed to release the frame payload.</dd>
<dd><code>first</code> - if this is the first time this method has been called for this frame.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>false to continue processing this frame, true to complete processing and get a new frame.</dd>
</dl>
</li>
</ul>
<a id="demand(long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>demand</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;demand&#8203;(long&nbsp;n)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="DemandChain.html#demand(long)">demand</a></code>&nbsp;in interface&nbsp;<code><a href="DemandChain.html" title="interface in org.eclipse.jetty.websocket.core.internal">DemandChain</a></code></dd>
</dl>
</li>
</ul>
<a id="setNextDemand(java.util.function.LongConsumer)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setNextDemand</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setNextDemand&#8203;(java.util.function.LongConsumer&nbsp;nextDemand)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="DemandChain.html#setNextDemand(java.util.function.LongConsumer)">setNextDemand</a></code>&nbsp;in interface&nbsp;<code><a href="DemandChain.html" title="interface in org.eclipse.jetty.websocket.core.internal">DemandChain</a></code></dd>
</dl>
</li>
</ul>
<a id="onFrame(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onFrame</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;onFrame&#8203;(<a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame,
<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a>&nbsp;callback)</pre>
<div class="block">Used to supply the flusher with a new frame. This frame should only arrive if demanded
through the <code>LongConsumer</code> provided by <a href="#setNextDemand(java.util.function.LongConsumer)"><code>setNextDemand(LongConsumer)</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>frame</code> - the WebSocket frame.</dd>
<dd><code>callback</code> - to release frame payload.</dd>
</dl>
</li>
</ul>
<a id="failFlusher(java.lang.Throwable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>failFlusher</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;failFlusher&#8203;(java.lang.Throwable&nbsp;t)</pre>
<div class="block">Used to fail this flusher possibly from an external event such as a callback.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>t</code> - the failure.</dd>
</dl>
</li>
</ul>
<a id="emitFrame(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>emitFrame</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;emitFrame&#8203;(<a href="../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame,
<a href="../../../util/Callback.html" title="interface in org.eclipse.jetty.util">Callback</a>&nbsp;callback)</pre>
<div class="block"><p>This is used within an implementation of <a href="#handle(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback,boolean)"><code>handle(Frame, Callback, boolean)</code></a>
to forward a frame onto the next layer of processing.</p>
<p>This method should only be called ONCE within each invocation of <a href="#handle(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback,boolean)"><code>handle(Frame, Callback, boolean)</code></a>
otherwise</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>frame</code> - the WebSocket frame.</dd>
<dd><code>callback</code> - to release frame payload.</dd>
</dl>
</li>
</ul>
<a id="process()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>process</h4>
<pre class="methodSignature">protected&nbsp;<a href="../../../util/IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a>&nbsp;process()
throws java.lang.Throwable</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../util/IteratingCallback.html#process()">IteratingCallback</a></code></span></div>
<div class="block">Method called by <a href="../../../util/IteratingCallback.html#iterate()"><code>IteratingCallback.iterate()</code></a> to process the sub task.
<p>
Implementations must start the asynchronous execution of the sub task
(if any) and return an appropriate action:
</p>
<ul>
<li><a href="../../../util/IteratingCallback.Action.html#IDLE"><code>IteratingCallback.Action.IDLE</code></a> when no sub tasks are available for execution
but the overall job is not completed yet</li>
<li><a href="../../../util/IteratingCallback.Action.html#SCHEDULED"><code>IteratingCallback.Action.SCHEDULED</code></a> when the sub task asynchronous execution
has been started</li>
<li><a href="../../../util/IteratingCallback.Action.html#SUCCEEDED"><code>IteratingCallback.Action.SUCCEEDED</code></a> when the overall job is completed</li>
</ul></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../util/IteratingCallback.html#process()">process</a></code>&nbsp;in class&nbsp;<code><a href="../../../util/IteratingCallback.html" title="class in org.eclipse.jetty.util">IteratingCallback</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the appropriate Action</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Throwable</code> - if the sub task processing throws</dd>
</dl>
</li>
</ul>
<a id="onCompleteFailure(java.lang.Throwable)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onCompleteFailure</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;onCompleteFailure&#8203;(java.lang.Throwable&nbsp;cause)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../util/IteratingCallback.html#onCompleteFailure(java.lang.Throwable)">IteratingCallback</a></code></span></div>
<div class="block">Invoked when the overall task has completed with a failure.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../util/IteratingCallback.html#onCompleteFailure(java.lang.Throwable)">onCompleteFailure</a></code>&nbsp;in class&nbsp;<code><a href="../../../util/IteratingCallback.html" title="class in org.eclipse.jetty.util">IteratingCallback</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>cause</code> - the throwable to indicate cause of failure</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../util/IteratingCallback.html#onCompleteSuccess()"><code>IteratingCallback.onCompleteSuccess()</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/DemandingFlusher.html">Use</a></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" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses.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>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&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><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 1995&#x2013;2022 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</body>
</html>