blob: e448b842d58187c9fdd3e2016038290c40959ae0 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.11) on Mon Jun 14 16:40:44 EDT 2021 -->
<title>DispatchedMessageSink (Eclipse Jetty API Doc - v10.0.5)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-06-14">
<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="DispatchedMessageSink (Eclipse Jetty API Doc - v10.0.5)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":6};
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/DispatchedMessageSink.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>Nested&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.messages</a></div>
<h2 title="Class DispatchedMessageSink" class="title">Class DispatchedMessageSink</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="AbstractMessageSink.html" title="class in org.eclipse.jetty.websocket.core.internal.messages">org.eclipse.jetty.websocket.core.internal.messages.AbstractMessageSink</a></li>
<li>
<ul class="inheritance">
<li>org.eclipse.jetty.websocket.core.internal.messages.DispatchedMessageSink</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="MessageSink.html" title="interface in org.eclipse.jetty.websocket.core.internal.messages">MessageSink</a></code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="InputStreamMessageSink.html" title="class in org.eclipse.jetty.websocket.core.internal.messages">InputStreamMessageSink</a></code>, <code><a href="ReaderMessageSink.html" title="class in org.eclipse.jetty.websocket.core.internal.messages">ReaderMessageSink</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">DispatchedMessageSink</span>
extends <a href="AbstractMessageSink.html" title="class in org.eclipse.jetty.websocket.core.internal.messages">AbstractMessageSink</a></pre>
<div class="block">Centralized logic for Dispatched Message Handling.
<p>
A Dispatched MessageSink can consist of 1 or more <a href="#accept(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)"><code>accept(Frame, Callback)</code></a> calls.
<p>
The first <a href="#accept(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)"><code>accept(Frame, Callback)</code></a> in a message will trigger a dispatch to the
function specified in the constructor.
<p>
The completion of the dispatched function call is the sign that the next message is suitable
for processing from the network. (The connection fillAndParse should remain idle for the
NEXT message until such time as the dispatched function call has completed)
</p>
<p>
There are a few use cases we need to handle.
</p>
<p>
<em>1. Normal Processing</em>
</p>
<pre>
Connection Thread | DispatchedMessageSink | Thread 2
TEXT accept()
- dispatch - function.read(stream)
CONT accept() stream.read()
CONT accept() stream.read()
CONT=fin accept() stream.read()
EOF stream.read EOF
IDLE
exit method
RESUME(NEXT MSG)
</pre>
<p>
<em>2. Early Exit (with no activity)</em>
</p>
<pre>
Connection Thread | DispatchedMessageSink | Thread 2
TEXT accept()
- dispatch - function.read(stream)
CONT accept() exit method (normal return)
IDLE
TIMEOUT
</pre>
<p>
<em>3. Early Exit (due to exception)</em>
</p>
<pre>
Connection Thread | DispatchedMessageSink | Thread 2
TEXT accept()
- dispatch - function.read(stream)
CONT accept() exit method (throwable)
callback.fail()
endpoint.onError()
close(error)
</pre>
<p>
<em>4. Early Exit (with Custom Threading)</em>
</p>
<pre>
Connection Thread | DispatchedMessageSink | Thread 2 | Thread 3
TEXT accept()
- dispatch - function.read(stream)
thread.new(stream) stream.read()
exit method
CONT accept() stream.read()
CONT accept() stream.read()
CONT=fin accept() stream.read()
EOF stream.read EOF
RESUME(NEXT MSG)
</pre></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== 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.websocket.core.internal.messages.AbstractMessageSink">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.eclipse.jetty.websocket.core.internal.messages.<a href="AbstractMessageSink.html" title="class in org.eclipse.jetty.websocket.core.internal.messages">AbstractMessageSink</a></h3>
<code><a href="AbstractMessageSink.html#methodHandle">methodHandle</a>, <a href="AbstractMessageSink.html#session">session</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.CoreSession,java.lang.invoke.MethodHandle)">DispatchedMessageSink</a></span>&#8203;(<a href="../../CoreSession.html" title="interface in org.eclipse.jetty.websocket.core">CoreSession</a>&nbsp;session,
java.lang.invoke.MethodHandle&nbsp;methodHandle)</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="#accept(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)">accept</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">Consume the frame payload to the message.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>abstract <a href="MessageSink.html" title="interface in org.eclipse.jetty.websocket.core.internal.messages">MessageSink</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#newSink(org.eclipse.jetty.websocket.core.Frame)">newSink</a></span>&#8203;(<a href="../../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<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, toString, wait, wait, wait</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.CoreSession,java.lang.invoke.MethodHandle)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DispatchedMessageSink</h4>
<pre>public&nbsp;DispatchedMessageSink&#8203;(<a href="../../CoreSession.html" title="interface in org.eclipse.jetty.websocket.core">CoreSession</a>&nbsp;session,
java.lang.invoke.MethodHandle&nbsp;methodHandle)</pre>
</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="newSink(org.eclipse.jetty.websocket.core.Frame)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>newSink</h4>
<pre class="methodSignature">public abstract&nbsp;<a href="MessageSink.html" title="interface in org.eclipse.jetty.websocket.core.internal.messages">MessageSink</a>&nbsp;newSink&#8203;(<a href="../../Frame.html" title="class in org.eclipse.jetty.websocket.core">Frame</a>&nbsp;frame)</pre>
</li>
</ul>
<a id="accept(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>accept</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;accept&#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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="MessageSink.html#accept(org.eclipse.jetty.websocket.core.Frame,org.eclipse.jetty.util.Callback)">MessageSink</a></code></span></div>
<div class="block">Consume the frame payload to the message.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>frame</code> - the frame, its payload (and fin state) to append</dd>
<dd><code>callback</code> - the callback for how the frame was consumed</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/DispatchedMessageSink.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>Nested&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;2021 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</body>
</html>