Interface Stream.Client.Listener
- Enclosing interface:
- Stream.Client
A Stream.Client.Listener
is the passive counterpart of a Stream.Client
and receives client-side events happening on an HTTP/3 stream.
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiondefault void
onDataAvailable
(Stream.Client stream) Callback method invoked if the application has expresseddemand
for content, and if there may be content available.default void
onFailure
(Stream.Client stream, long error, Throwable failure) Callback method invoked when a stream failure occurred.default boolean
onIdleTimeout
(Stream.Client stream, Throwable failure) Callback method invoked when the stream idle timeout elapses.default void
onNewStream
(Stream.Client stream) Callback method invoked when a stream is created locally bySession.Client.newRequest(HeadersFrame, Listener)
.default void
onResponse
(Stream.Client stream, HeadersFrame frame) Callback method invoked when a response is received.default void
onTrailer
(Stream.Client stream, HeadersFrame frame) Callback method invoked when a trailer is received.
-
Method Details
-
onNewStream
Callback method invoked when a stream is created locally by
Session.Client.newRequest(HeadersFrame, Listener)
.- Parameters:
stream
- the newly created stream
-
onResponse
Callback method invoked when a response is received.
To read response content, applications should call
Stream.demand()
and overrideonDataAvailable(Client)
.- Parameters:
stream
- the streamframe
- the HEADERS frame containing the response headers- See Also:
-
onDataAvailable
Callback method invoked if the application has expressed
demand
for content, and if there may be content available.A server application that wishes to handle request content should typically call
Stream.demand()
fromSession.Server.Listener.onRequest(Server, HeadersFrame)
.A client application that wishes to handle response content should typically call
Stream.demand()
fromonResponse(Client, HeadersFrame)
.Just prior calling this method, the outstanding demand is cancelled; applications that implement this method should read content calling
Stream.readData()
, and callStream.demand()
to signal to the implementation to call again this method when there may be more content available.Only one thread at a time invokes this method, although it may not be the same thread across different invocations.
It is always guaranteed that invoking
Stream.demand()
from within this method will not cause aStackOverflowError
.Typical usage:
class MyStreamListener implements Stream.Client.Listener { @Override public void onDataAvailable(Stream.Client stream) { // Read a chunk of the content. Stream.Data data = stream.readData(); if (data == null) { // No data available now, demand to be called back. stream.demand(); } else { // Process the content. process(data.getByteBuffer()); // Notify that the content has been consumed. data.complete(); if (!data.isLast()) { // Demand to be called back. stream.demand(); } } } }
- Parameters:
stream
- the stream
-
onTrailer
Callback method invoked when a trailer is received.
- Parameters:
stream
- the streamframe
- the HEADERS frame containing the trailer headers
-
onIdleTimeout
Callback method invoked when the stream idle timeout elapses.
- Parameters:
stream
- the streamfailure
- the timeout failure- Returns:
- true to reset the stream, false to ignore the idle timeout
-
onFailure
Callback method invoked when a stream failure occurred.
Typical stream failures, among others, are failures to decode a HEADERS frame, or failures to read bytes because the stream has been reset.
- Parameters:
stream
- the streamerror
- the failure errorfailure
- the cause of the failure
-