Interface Stream.Client.Listener

All Known Implementing Classes:
HttpReceiverOverHTTP3
Enclosing interface:
Stream.Client

public static interface Stream.Client.Listener

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 Details

    • onNewStream

      default void onNewStream(Stream.Client stream)

      Callback method invoked when a stream is created locally by Session.Client.newRequest(HeadersFrame, Listener).

      Parameters:
      stream - the newly created stream
    • onResponse

      default void onResponse(Stream.Client stream, HeadersFrame frame)

      Callback method invoked when a response is received.

      To read response content, applications should call Stream.demand() and override onDataAvailable(Client).

      Parameters:
      stream - the stream
      frame - the HEADERS frame containing the response headers
      See Also:
    • onDataAvailable

      default void onDataAvailable(Stream.Client stream)

      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() from Session.Server.Listener.onRequest(Server, HeadersFrame).

      A client application that wishes to handle response content should typically call Stream.demand() from onResponse(Client, HeadersFrame).

      Just prior calling this method, the outstanding demand is cancelled; applications that implement this method should read content calling Stream.readData(), and call Stream.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 a StackOverflowError.

      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

      default void onTrailer(Stream.Client stream, HeadersFrame frame)

      Callback method invoked when a trailer is received.

      Parameters:
      stream - the stream
      frame - the HEADERS frame containing the trailer headers
    • onIdleTimeout

      default boolean onIdleTimeout(Stream.Client stream, Throwable failure)

      Callback method invoked when the stream idle timeout elapses.

      Parameters:
      stream - the stream
      failure - the timeout failure
      Returns:
      true to reset the stream, false to ignore the idle timeout
    • onFailure

      default void onFailure(Stream.Client stream, long error, Throwable failure)

      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 stream
      error - the failure error
      failure - the cause of the failure